* Reapply not allowing skip device verification by default.
Reverts the revert commit 417fa60b0e.
* Switch to a new local store entry to check if verification is enforced, that is only set when the force_verification is true at the login.
* Test that force_verification does not affect existing sessions.
* Update test title
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix formatting
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix test title
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Address review comments for 'should not force verification on reload if force_verification is enabled after login' test.
---------
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Use MatrixRTC slots behind labs flag
* Remove superfluous act's
* Remove outdated ensureSlotOpen wrapper
* Add description for labs togglec
* Add doc strings for slot methods
* Throw from the slot functions when the feature flag is off
* Log when opening slot fails
* Assert on slot ID
* Adapt to JS SDK changes
* Fix sliding sync invite flake
* Reduce Synapse `synapse.storage.SQL` logs to INFO
* Disable push and debug logs for further speedups
* Remove overwritten synapse log consumer from playwright-common
testcontainers keeps only the last log consumer, so the `homeserver` one always replaced it and the "synapse" buffer stayed empty.
* Set up vitest unit tests in playwright-common
The build uses a separate tsconfig so test files are not compiled into lib/.
* Add PLAYWRIGHT_CAPTURE_LOGS to save container logs for passing e2e tests
Writes each container's logs to <container>.log in the test output directory, for analysing homeserver performance.
* Re-enable push in Synapse for e2e tests
Disabling it meant opting many specs back in. Keeps the INFO root log level from 0b8294cbc2.
* update lock
* temp synapse image
* Remove temp synapse image
* fmt
* Change the default of `force_verification` to `true`.
* Fix tests for not skipping verification by default.
* Fix tests and snapshots for not skipping verification by default.
* Update screenshots.
* Add an end-to-end Element Call test with a real MatrixRTC backend
Element Web's Playwright coverage of Element Call has only ever used a stand-in:
`sample-files/fake-element-call.html`, a page that does just enough for the widget
plumbing to be exercised. Nothing in the suite has ever carried media.
This adds one real call between two users, through the Element Call the build under
test ships (`@element-hq/element-call-embedded`, copied to `widgets/element-call/`),
against a real MatrixRTC backend:
- `testcontainers/livekit.ts` — a LiveKit SFU advertising loopback so the browser
reaches it through published ports on macOS as well as Linux.
- `testcontainers/lk-jwt-service.ts` — the authorisation service, validating OpenID
tokens over Synapse's federation API.
- `testcontainers/matrix-rtc.ts` — starts the two and produces the Synapse
configuration that announces the transport (MSC4143) and enables the MSCs Element
Call needs.
- `services.ts` — a `matrixRTC` worker option turning all of that on.
`routeConfigJson` no longer hard-codes the dev server's origin: it resolves
`config.json` against the context's `baseURL`, so a `BASE_URL` other than the default
works, and other origins a test loads keep their own.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Make Renovate actually see the new testcontainer images
The custom manager's `depName` group is `[^@]+`, which matches newlines and
quotes, so it is only bounded by the next `@` in the file. In `synapse.ts` and
`mas.ts` an `@element-hq/…` import happens to sit above the image literal and
caps it; `livekit.ts` and `lk-jwt-service.ts` import `testcontainers` and `yaml`,
so the match instead starts at that import and swallows everything up to the
image name. Renovate gets a nonsense package name, finds nothing, and the pins
quietly rot.
Exclude quotes and whitespace from both groups. All four digest-pinned files now
extract correctly, synapse and mas unchanged.
Bump lk-jwt-service to 0.7.0 while here.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Address the bundled Element Call by directory, not by index.html
The full-call spec passed against the webpack dev server and failed in CI, where
the production build is hosted by `serve`.
`ElementCall.generateWidgetUrl` built `./widgets/element-call/index.html#…`.
`serve` has `cleanUrls` on by default, so it 301s that to the extensionless
`/widgets/element-call`. Element Call's `index.html` references its chunks
relatively (`./assets/…`), and against a base with no trailing slash the browser
resolves those to `/widgets/assets/…` — 404. Element Call never boots, so the
lobby never appears and the test times out.
Address the directory instead. It is the same deployment, the trailing slash
sidesteps the redirect, and the hash is overwritten further down either way. This
is not only a test concern: Netlify also strips `.html` by default, and that is
what serves the PR previews and develop.element.io.
Doing it here rather than in the spec keeps the test honest — it exercises the
widget URL Element Web really generates, with no `Developer.elementCallUrl`
override. Setting `cleanUrls` in a `serve.json` was the other candidate and is
not viable: any value other than the default also stops `serve` resolving `/` to
`index.html`, which breaks every other test.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* EC react component Plan
* The implemantation Element Call React Component with mocked EC react
component
* final plan
* tests
* update plan to not do e2e tests in EW but in EC
* Start using the real react component instead of the mock (activation
react EC)
* add playwright e2e tests
* fix transport discovery (pass in via config. Hack the well-known source
for servers not supporting get_transports)
* stylesheet fixes
* Update element-call-react-plan.md
* add docuemnt pip
* Depend on the Element Call component from its git branch
`@element-hq/element-call-component` was a `link:` to a hand-built
`dist/` in a machine-local worktree. It is now a git dependency on the
`component` directory of element-hq/element-call, on the
`valere/component_ec_M1` branch (element-call#4233), whose `prepare`
script builds the component on install; pnpm has to be allowed to run
it (`allowBuilds`). The ref goes back to `main` once that PR has merged.
The branch first needs the commit that adds the component's manifest
and build (`toger5/component-package-manifest` in the EC checkout);
until it is pushed, `path:/component` resolves to no manifest and the
lockfile keeps the old `link:` entry. Both are written up in the plan.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* use the component_ec_m1 dep lock file entries
* fix element call reloading
* pass the right theme to element-call component
* bump element-call-component
* Return a call from the browser PiP window to where it left from
Closing the Document Picture-in-Picture window always dropped the call
into Element Web's floating PiP, even when it had filled the room's call
view a moment earlier and the user was still looking at that room.
The store now remembers whether the call left from the call view, and
on release opens the call view again when it did — unless the call has
ended, the user has moved to another room, or the user opened the call
view themselves (which is what closed the window). A call that was
floating in Element Web's PiP before goes back there, as it did.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* Draw the call header's outline icons a little smaller
The room header's icons are Compound's solid set, but minimise,
maximise and pop-out exist only as outlines: Compound has no filled
counterparts, and nothing else in the set says what they say. At the
solid icons' size their open strokes look heavy-handed next to them.
Scaling the glyphs down slightly inside the buttons lets them sit
comfortably next to their neighbours without changing the buttons'
footprint.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* Hand a persisted tree to the remaining placeholder on unmount
When two PersistedElements for the same key mount in one React commit
(a call returning from the browser PiP window into the call view, while
Element Web's floating PiP briefly shows it as well), whichever rendered
the tree last owns the child's ref. If that one is then the one to
unmount, it hid the tree, and the survivor, never having been handed the
child, could not show it again.
On unmount, if another placeholder is mounted, render the tree once more
with the most recently mounted survivor's wrapper so it takes over the
child and positions it; only hide the tree when nothing is left to show
it.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* Adjust to updates done in EC
(simpler public api. More resilient to prop changes)
* package.json back to EC branch valere/component_ec_M1
* fix closing in component mode
* Configure pnpm store location in workflows
Keep the pnpm store out of node_modules to prevent incorrect
bundling of element-call-component when building git dependencies.
* update docs on EC packaging improvements
* fix ci
* Update pnpm-lock and tsconfig
* Move the browser Picture-in-Picture window and call header changes to a follow-up
Keeps this PR to Element Call as a React component. The Document
Picture-in-Picture window (DocumentPipStore, useDocumentPip, the
PersistedElement detach/reattach and placeholder hand-over, the
PipContainer awareness of it), the call header's minimise, maximise and
pop-out buttons with their outline-icon sizing, the browser API typings,
their strings, tests and e2e spec move to toger5/ec-document-pip.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* bump to main branch EC
* fix CI failing due to pnpm store
* remove docs and dev journals
* review
* CI: silence zizmor's github-env finding on the pnpm store action
zizmor flags every $GITHUB_ENV write inside a composite action, because it
cannot see which triggers the action will be used from. The value written
here is a constant built from RUNNER_TEMP with nothing attacker-controlled
in it, so suppress the finding the way the repo does elsewhere.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Keep the ready promise's rejection from going unobserved
close() rejects the pending ready promise so that a start() still waiting on
the component learns the call went away instead of hanging until the timeout.
Usually nothing is waiting, and the unobserved rejection then surfaced as an
unhandled promise rejection, which crashed the Vitest worker running
Call.test.ts. Mark the promise as handled before rejecting it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* review
* review: double import
* move types to EC repo (just import them here)
* review: refactor ElementCallAppTile to a MVVM shared compoenent
* merge useEffectiveTheme and useTheme hooks
* cnvert the ElementCallMock to MVVM
* use unstable EC branch. DO NOT MERGE UNTI THIS COMMIT IS REVERTED
this branch is used to test CI with the new exports from EC.
We need to first merge:
https://github.com/element-hq/element-call/pull/4269 before we can put
this back to main (revert this commit).
* Move Node and pnpm setup into a single action
The setup-node-pnpm action now includes pnpm/action-setup and
actions/setup-node alongside the store relocation, eliminating
boilerplate across workflows and fixing the setup order in one place.
* fix broken lock file
* test for review change "reject on promise race"
* review: letter spacing
* Import the EC CSS layered
* Use self-repository syntax
* Fix import path
* Fix webpack
* Revert actions syntax as Sonar doesn't seem compatible with it
* Switch to Flex
* Switch to a11y label
* Take client from SdkContext
* Make strings in mock view translatable
* Keep class names in EW
* Move mock view to shared components and add stories
* Exempt voip|element_call_mock|title
* Fix tests
* Clarify doc string
* Add labs.md entry
* Use text element
* Remove redundant test
* Remove redundant test
* Delint
* Format
* Update snapshots
* Bump element-call
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
* Render PDFs in a usercontent iframe
Move pdf.js into an opaque-origin iframe at usercontent/pdf/, as the download link does, so a document cannot reach the app's origin.
* Check the origin of messages from the PDF iframe
* Address PDF iframe messages to the app's origin
* Talk to the PDF iframe over a MessageChannel
The iframe hands the app one end of a channel with ready; everything else travels over it, so no postMessage needs a wildcard target.
* Give the PDF iframe page a title
* Look up the wheel delta scale instead of nesting ternaries
* Use PropsWithChildren for PdfViewerView
* Remove the PDF iframe's listeners when the page unloads
* Tear down pdf.js, the blob URLs and the port with the PDF iframe
* Note how the gesture listeners are removed
* vitepress: update path to matrix-js-sdk
matrix-js-sdk is only required by apps/web, so is not (usually) found in the
top-level node_modules.
* Add more dependencies to list to be babeled for jest
In particular: `content-type`, `bs58` and `base-x`. These are transitive deps
of matrix-js-sdk, so are often installed under `node_moduled` and hence get
covered by the exclusion for `matrix-js-sdk`, but if they get hoisted to the
top of node_modules, then we get test failures.
* Update matrix-widget-api
The js-sdk depends on stuff in 1.19.0, so we need to update.
* CI: layered.sh: avoid pnpm link
`pnpm link` does not accurately reproduce the behaviour of installing the
package from git/npm, leading to surprise compile failures for people that
attempt to do the latter.
So, instead, let's build the js-sdk's package as a tarball, then install that.
* Clean up tsc includes for playwright dir
* silence sonarcloud whining
* lint
* Remove legacy Module & Customisation API
in favour of the new runtime modules system
* Delint
* Remove unused i18n string
* Fix tests
* Fix test
* Fix tests
* Iterate
* Fix bad merge
* Bump Module API version
* Bump module-api compatibility ranges
* Update docs
* Fix semver ranges
* Update test module API version
* Too many versions
* Too many versions again
* Fix some documentation for element-desktop
Some of these links got broken, or outdated, during the monorepo switch.
* Fix desktop docker build script
It will fail with 'workspace_node_modules: no such file or directory' if the
directory does not exist.
This got broken by https://github.com/element-hq/element-web/pull/33641.
* Clarify native modules doc
Most of this stuff does not apply when using the docker build.
* update snapshot
* Fetches link previews for all links in message (instead of just the first one)
* message url component to display preview for multiple urls
* Revert visible behaviour back to only showing one URL preview
While fetching all link previews in the text message.
* Moved URL preview VM to MessageComposer
* Added com.beeper.linkpreviews to messages sent with the markdown compositor
* MSC 4452 implemented for the older (markdown) composer
* claude told me to use logger instead of console
* Previews generated with snapshot instead of vm
* moved attachPreviews to a separate file
* added attach URL previews to rich text editor
* don't let attachUrlPreviews block clearning the composer
* fixed linter errors
* moved url preview behind labs feature gate
* passed linters
* moved lab feature checking to where attach preview is used
* claude wrote some unit tests for url previewing
* fixed linter errors
* added feature to labs.md
* fixed linter errors
* fixed oxfmt error
* set previews to none if all previews failed
* resolved PR reviews besides the ones that requires a larger code change
* moved url preview VM creation to message composer
* removed delay when clearing composer url preview on message send
* minor changes to stop using globals everywhere
* moved debouncing responsibility to urlpreviewVM
* minor lint fixes
* added comment
* remove composer content from the state of urlpreview, moved it to the vm
* urlpreviewwrapper depends on the vm only
* added comments
* edited the comment
* updated snapshots
* claude fixed tests
* enable feature for tests that requires MSC4095
* updated snapshot
* Clarify translation rules around english key changes
Hopefully clarifying the position of why we'd like PRs for english string changes
* Update translating-dev.md
* Adapt OAuth2 implementation to Matrix Spec v1.18
* Handle more cases of oidc->oauth
* Fix test
* Fix read back of oauth2 context
* Iterate
* Fix tests
* Discard changes to apps/web/playwright/e2e/settings/account-user-settings-tab.spec.ts
* Fix test
* Fix test
* Fix test
* Potential fix for pull request finding 'Unused variable, import, function or class'
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
* Iterate
* Iterate
* Fix test
---------
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
* Change `feature_group_calls` to default to true.
Change state to Beta
* Add `enableLegacyCallsVoip` (clarify: Audio settings relate to Legacy)
Change `element_call.use_exclusively` to just be the default of
`enableLegacyCallsVoip`.
Allow disabling in Legacy in the settings. (overwrite `use_exclusivly`
via `enableLegacyCallsVoip`)
Rename `Voice & Video` to `Legacy Voice & Video`
* improvements
- settings title update to only show legacy when appropriate
- hide menu all together if use_exclusivly is chosen
* simplify by removing the feature_group_calls flag
* smaller cleanup
* fix tests and cleanup
* clarify settings (disable) in config.md
* add back EC relevant settings in room settings dialog
* update screenshots (now default to EC enabled (not disabled)
-> show voice and video tab in room settings
* update screenshots
* always show option to control voice messages input
* lint
* fix test
* disable -> enabled And only have on mic dropdown
* update config.md
* Back to `disabled` (on by default/no config)
* remove element call hint from voice-video settings
* Update apps/web/src/i18n/strings/en_EN.json
Co-authored-by: Robin <robin@robin.town>
* Update apps/web/src/components/views/settings/tabs/user/VoiceUserSettingsTab.tsx
Co-authored-by: Robin <robin@robin.town>
* review
* cleanup element call url setting (its deprecated/not used anymore)
* clarify, that also jisti will be enabled/disabled by legacy settings
flag
* remove double section
* remove unn exassary element_call configurations
* Update en_EN.json
* Update VoiceUserSettingsTab.tsx
* Make tests use new defaults (enable element call)
* Default events power levels
* format
* review "Enable Legacy voice/video calls" label
* more radical usage of defaults in element_call config.json's
* Update config.json
* Update en_EN.json
* Update RoomSettingsDialog-test.tsx.snap
* Update useRoomCall.tsx
* fix imports
* Update request permission promp to latest designs:
https://www.figma.com/design/aOEkaJtaBmPy058V7uoqVr/Element-Call-Updates---2026?node-id=45-12591&t=7takL39icZwt9YjL-0
* Update config.json.d.ts
* fix usage of `Element` in i18n
* Update General-room-settings-tab-should-be-rendered-properly-1-linux.png
---------
Co-authored-by: Robin <robin@robin.town>
* refactor(room-list): migrate SpaceStore off the legacy room list store
SpaceStore.setActiveRoomInSpace iterated the legacy RoomListStore's
`orderedLists` in `TAG_ORDER`; switch it to the space-aware
RoomListStoreV3.getSortedRoomsInActiveSpace() accessor. This drops the
last non-UI dependency on the legacy store and on `TAG_ORDER` (exported
from LegacyRoomList, deleted next).
* feat(room-list)!: remove the legacy room list UI
Delete the old sublist-based room list and its components now that the
new RoomListPanel is the default. Removed: LegacyRoomList,
LegacyRoomListHeader, RoomSublist, ExtraTile, RoomTile (+ Subtitle/
CallSummary), RoomBreadcrumbs and RoomSearch, plus their styles and
tests.
LeftPanel collapses to the RoomListPanel-only path. The shared
`contextMenuBelow` helper is relocated into RoomResultContextMenus (its
only remaining consumer).
* feat(room-list)!: remove the legacy RoomListStore
The legacy sublist-based room list UI is gone, so the old
`stores/room-list` store (Algorithm, sorters, filters, layout store,
space
watcher) has no remaining consumers. Delete the directory and its tests.
MatrixChat.forgetRoom no longer calls the legacy `manualRoomUpdate`; the
new room list store removes the room on the `AfterForgetRoom` dispatch
that still fires. Drop the `mxRoomListStore`/`mxRoomListLayoutStore`
globals and the now-dead test imports.
* feat(room-list)!: remove the feature_new_room_list labs flag
The new room list is now the only room list, so remove the
feature_new_room_list labs flag and make its enabled behaviour
unconditional everywhere it was gated:
- LoggedInView: always use the resizable layout and
NEW_ROOM_LIST_MIN_WIDTH;
drop the collapsible/minimized legacy path.
- SpaceStore: People and Favourites are dropped from metaSpaceOrder (per
the
long-standing TODO on the removed accessor).
- MessagePreviewStore: stop appending thread replies to previews.
- Settings, SidebarUserSettingsTab, PreferencesUserSettingsTab,
QuickSettingsButton, SpacePanel, LandmarkNavigation: drop the flag
reads and
legacy branches.
Update the tests that toggled the flag; the People/Favourites meta space
tests covered behaviour that the flag (default on) already disabled.
* feat(room-list)!: remove the dead legacy left-panel resizer
LoggedInView still built the old `Resizer`/`CollapseDistributor` over an
`lp-resizer` ResizeHandle and persisted `mx_lhs_size`. That handle is no
longer rendered (the resizable layout is now driven by
LeftResizablePanelView + ResizerViewModel, which persists its own state
via RoomList.panelSize/RoomList.isPanelCollapsed), so the old resizer
was
inert dead code left over from the legacy room list.
Remove createResizer/loadResizer/loadResizerPreferences, the
_resizeContainer/resizeHandler refs, the ResizeHandle render, the
mx_lhs_size handling and NEW_ROOM_LIST_MIN_WIDTH, plus the unit tests
that
exercised the mocked resizer.
* feat(room-list)!: update i18n files
* refactor(room-list): remove the now-unused collapseLhs state
`collapseLhs` is write-only since the left panel no longer collapses: it
was last read by LoggedInView's `shouldUseMinimizedUI`, removed with the
feature_new_room_list flag. Drop it from MatrixChat's IState (and its
assignments), collapsing the hide/show_left_panel handlers to just the
`notifyLeftHandleResized()` call they still need, and from
LoggedInView's
IProps and the test props.
* fix(room-list): instantiate message previewers lazily
Removing the unused SettingsStore import from MessagePreviewStore (when
the
feature_new_room_list flag was dropped) changed module load order and
exposed a latent circular dependency: ReactionEventPreview imports
MessagePreviewStore, which eagerly did `new ReactionEventPreview()` at
module-eval — so importing ReactionEventPreview first (as its unit test
does) hit "ReactionEventPreview is not a constructor".
Construct the previewers lazily on first use (cached) instead of at
module
load, so nothing dereferences a mid-evaluation module. Fixes
ReactionEventPreview-test.
* test(room-list): remove `feature_new_room_list` labs flag in e2e tests
* chore: remove remaining `newRoomList` flag
* chore: cleanup theme files
* fix: restore the re-resizable TouchEvent polyfill
* chore: remove usage of breadcrumbs settings in BreadcrumbStore
* Revert "fix(room-list): instantiate message previewers lazily"
This reverts commit 4e6eedfff0.
* chore: remove unused function in BreadCrumbStore
* test: remove unused fuction of BreadcrumStore in tests
* test: add tests for RoomResultContextMenu
* PoC Sign in with QR on new EW using generated QR for MSC4108 v2024
* Revert package.json changes
* Prettier
* Fix i18n
* Tidy up
* Remove unused state variable
* Iterate tests
* Partial revert
* Iterate
* Wire up qr_login route
* Iterate UI
* Fix React dev mode double rendering issue
* Fix react key warning
* Hide flow header on login
* Re-roll qr code on channel expiry
* Switch to AbortSignal
* Improve auto-retry QR UX
* Ensure we only show sign in with QR button if enabled
* XXX: enable labs flag on Netlify builds
* Tweak QR code sizing
* Move qr login flow into a dialog to match designs
* Fix null deviceId
* Remove duplicate log
* Iterate
* Fix tests
* Fix types
* Fix tests
* Fix tests
* Make Netlify more useful
* Make Netlify more useful v2
* Update copy
* Refactor QR link flow to use new SDK methods
Requires https://github.com/matrix-org/matrix-js-sdk/pull/5283
For element-hq/wat-internal#188
Split out from https://github.com/element-hq/element-web/pull/33184
* Link to js-sdk branch
* Update tests
* Simplify
* Revert js-sdk linking
* Iterate
* Iterate
* Refactor to handle most of the TODOs
* Remove unused code
* Remove unused code
* Use js-sdk isSignInWithQRAvailable API to simplify code
* Restore app-test.ts
* Improve coverage
* Improve coverage
* Remove unused prop/state
* Iterate
* Fix tests
* Iterate
* Tests
* Handle TODOs
* Docs
* Remove redundant call to crossSignDevice()
* Workaround to remove training slash on the serverName before auto-discovery
* Revert "Workaround to remove training slash on the serverName before auto-discovery"
This reverts commit 0335a8fdd1.
* setLoggedIn not to be used with OIDC flows as it clears storage
as per docs on setLoggedIn we should use restoreSessionFromStorage
* Don't show the security_code_prompt unconditionally(i.e. for the web logging in mobile flow)
* Update LoginWithQRFlow-test.tsx.snap
* Update MatrixChat-test from setLoggedInSpy to restoreSessionSpy
* Add todo for server switch
* Add todo about handling base URL or server name
* Handle server name or base URL being returned
* Format
* Fix loading state height
* Handle the homeserver URL differing during QR code login
* Comments
* Comments
* Register OIDC client ID after homeserver swap
* Make QrLoginDialog async to minimise the impact on bundle size
* Handle unsupported HS earlier in the flow
* Iterate
* Delint
* Fix test
* Discard changes to apps/web/element.io/develop/config.json
---------
Co-authored-by: Hugh Nimmo-Smith <hughns@element.io>
Co-authored-by: David Langley <langley.dave@gmail.com>
* Use other branch
* All the changes that got lost
* Fix merge
* Ensure emoji can only be one character long
* Fixup labs feature
* Remove redundant check
* Update snapshot
* update snapshot
* add snapshot
* unpin
* fix pnpm lock
* undo pn[m lockfile changes altogether
as we shouldn't actually need any afaik
* update snpahot for changed IDs
* Snapshot update
* Snapshot update
* There is now another section
* more snapshots
* more snapshot
* More snapshots
* oh come on snapshots
* actual snapshot update
* Fix sonar issues
* just update the thing manually
* [screams internally]
* Update snapshot
* test for useUserStatus
* Make useUserStatus actually truncate
* Split out slash command to its own file
& add test
* Remove irrelevant comment
* doc
* Comment on non-obvious error message
---------
Co-authored-by: David Baker <dbkr@users.noreply.github.com>
* Convert welcome.html to React component
In advance of changes to use Compound
* Fix types
* Fix tests
* Update styling to match Figma
* Fix random capitalisation
* Tweak styling
* Regenerate i18n
* Update tests
* Make linter happy
* Iterate
* chore: rename snapshot, actions and vm according to MVVM doc
* doc: add naming conventions
* chore: fix UrlGroupView naming, folders and children
* chore: remove `Example` column
* refactor: rename `UrlPreviewGroupViewPreview` into `UrlPreview`
* Remove long deprecated option `sso_immediate_redirect`
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Remove stale experimental comment about Native OIDC support
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Extract redirectToSso from loadApp
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Fix maintaining deeplink when going via auto sso
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Improve error
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update `sso_redirect_options` to work for Native OIDC
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Update existing test for log changes
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
* Add tests
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---------
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>