1
0
mirror of https://github.com/element-hq/element-web.git synced 2026-10-28 00:13:00 +03:00

37 Commits

Author SHA1 Message Date
Skye Elliot
29299038f5 Use a dialog to ask users to confirm the deletion of key storage (#35474)
* feat(shared-components): add DeleteKeyStorageView

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(shared-components): cover DeleteKeyStorageView

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(web): confirm deleting key storage in a dialog

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(web): remove the delete key storage settings panel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(web): cover the delete key storage dialog

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor: Combine conditionals in KeyStoragePanelViewModel

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 11:29:21 +00:00
Richard van der Hoff
fc4c0390ff Copy changes for "set up recovery" (#35437)
* Update "your chats are backed up" copy

... in the Settings dialog (RecoveryPanel), and the "set up recovery" toast.

* Change labels on "set up recovery" UI

* Add help text to 'Allow key storage' toggle

* update playwright snapshots
2026-10-15 23:01:37 +00:00
Michael Telatynski
ad9c1ccffb Deflake more tests (#35472)
* Fix mock route race condition in playwright test

Fixes https://github.com/element-hq/element-web/issues/34942

* Fix axe racing with button being enabled in playwright test

Fixes https://github.com/element-hq/element-web/issues/31919

* Fix race condition in audio player test

Fixes https://github.com/element-hq/element-web/issues/27760

* Fix slow favicon vitest test

Preload base image
2026-10-15 07:56:51 +00:00
Richard van der Hoff
5455765fe5 Remove introductory screen from "create recovery key" flow (#35451)
* Remove introductory screen from "create recovery key" flow.

Between them, https://github.com/element-hq/element-meta/issues/3188 and
https://github.com/element-hq/element-meta/issues/3185 move all the information
about "what is a recovery key" into the toasts and modals that lead into the
"create recovery key" flow, thus making the introductory screen redundant.

Fixes https://github.com/element-hq/element-web/issues/35428

* update broken vitest

* playwright: Move body of `enableKeyBackup` into a `step`

... to make the logs a bit clearer

* Fix broken playwright tests
2026-10-13 14:32:33 +00:00
Andy Balaam
ba531b906d Remodel "Can't confirm" dialog to match designs (#35375) 2026-10-09 13:47:03 +00:00
Paul Chobert
161aef320f Stop writing removed legacy mention rules from the Labs notification settings (#35035)
* Stop writing removed legacy mention rules from labs notification settings

Matrix v1.17 removed the legacy text-matching mention push rules
(.m.rule.contains_display_name, .m.rule.contains_user_name,
.m.rule.roomnotif) from the base rule set (MSC4210), and Synapse is
about to stop serving them by default. The labs notification settings
page wrote those three rules on every save regardless. Against a server
that no longer serves them the page never converges: Synapse currently
accepts the writes with 200 without serving the rules, so the "Update"
banner never clears and the page stays locked, and once the server
answers 404 as the spec requires every save fails.

The reconciler now only writes the legacy rules when they are present
in the rules fetched from the server, the same way the intentional
rules are gated on supportsIntentionalMentions.

Adds reconciler tests with the legacy rules absent and present, and
Playwright specs that run against Synapse with msc4210_enabled both
off and on.

* Split the labs mention rules e2e helper into explicit steps

Replace the shared parameterised test with small helpers that each spec
calls in order, so neither spec branches on the server mode. Each spec
asserts its own precondition and its own final state of the legacy rule.

Clicking "Proceed" is now unconditional and waits for the banner. Every
fresh account shows it, and the old one-shot presence check raced the
push rules fetch.

* Update copyright holder in labs mention rules e2e tests

* Cover all legacy mention rules in the labs notification e2e tests

* Keep proceeding until the labs update banner is gone in e2e tests

While the server serves the legacy mention rules, one click on "Proceed"
does not always unlock the labs notification settings page. The page writes
a legacy rule and its intentional counterpart in parallel, and
monitorSyncedPushRules copies the legacy rule's actions onto the intentional
one whenever a sync shows them out of step. When that sync lands between
the two writes, the monitor puts the old actions back, the page re-reads
the rules, still sees a difference and keeps the banner until the user
proceeds again.

That race is in the app and predates these tests, which are about which
rules get written. It made the served-mode spec flaky, so the helper now
proceeds until the banner is gone.

* Give the labs update banner click a timeout in e2e tests

click() waits for the "Proceed" button to be visible. On a retry the banner
may already be gone, which is why the helper checks for it before clicking.
A banner that goes away between that check and the click would still make
click() wait until the test times out, so the click now gives up after a
second and the next attempt finds the banner gone.
2026-10-07 07:47:24 +00:00
David Baker
066518dfd7 Collection of EN string changes, Pt. 2 (#35289)
* Collection of EN string changes, Pt. 2

The webapp itself

* Sort i18n file

* Update tests/snapshots

and also change the rest of the "room" strings to "chat"

* more tests / snapshots

* More snapshots / tests

* More tests & snapshots

* Even more tests / snapshots

* More snapshots / tests

* Playwright screenshots pt. 1

* More screenshots

* More tests / screenshots

* One more 'devices'
2026-10-05 13:19:59 +01:00
Andy Balaam
6e6f8d9502 Update wording of crypto stuff during sign-in (#35239)
* Update intro wording on the Confirm your digital identity page

* Update wording of Can't confirm screen
2026-10-02 10:57:53 +00:00
renovate[bot]
823e3dc42c Update testcontainers docker digests (#35108)
* Update testcontainers docker digests

* Update tests due to Synapse switching to room version 12 by default

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2026-09-21 11:03:06 +00:00
Will Hunt
e7d6fd6473 Move GenericToast to shared-components (#35122)
* Port GenericToast to a shared component

* Update imports of GenericToast

* Remove legacy styles

* update test ids

* Move from classes to testIds

* update snap

* update toasts

* Add a test for coverage
2026-09-21 10:54:12 +00:00
Paul Chobert
976ce3a336 Show intentional mention push rules in notification settings (#35031)
* Show intentional mention push rules in notification settings

Matrix v1.17 removed the legacy text-matching mention push rules
(.m.rule.contains_display_name, .m.rule.contains_user_name,
.m.rule.roomnotif) from the base rule set (MSC4210), and Synapse is
about to stop serving them by default. Settings > Notifications built
its "Mentions and keywords" rows from those rule IDs, so against such a
server it lost both mention rows.

The section now renders .m.rule.is_user_mention and
.m.rule.is_room_mention, with the legacy rules as their synced rules:
servers that still serve them stay in sync, others get no writes. The
displayed state comes from the intentional rule alone, and the
intentional rule wins when the legacy rules disagree. The two legacy
user-mention rows collapse into one.

Adds unit tests for the new rows and the sync monitor, and Playwright
specs that run against Synapse with msc4210_enabled both off and on.

* Keep the legacy mention rows unchanged while the server serves them

The first version made the intentional mention rules the rows everywhere,
which dropped the "Messages containing my display name" row and changed
the displayed state and sync direction for servers that still serve the
legacy rules. Users of such servers must see no change.

The legacy definitions, the sync monitor, the strings and the screenshot
baseline are back to what develop has. .m.rule.is_user_mention and
.m.rule.is_room_mention get definitions of their own and are only
rendered when the legacy rule they replace is absent from the user's
rules; otherwise they stay hidden and remain the legacy rows' synced
rules, as before.

Unit and Playwright tests now assert both server modes.

* Asset length with .toHaveLength

* Trim down push rule definitions comments

* Cover the server dropping the legacy mention rules mid-session

A failed push rule write now re-reads the rules from the server, so
that a settings tab left open across a homeserver upgrade recovers on
the next toggle instead of retrying against rows the server no longer
serves.

Tests: the two write tests for the legacy rows are merged into one;
unit tests cover the mid-session switch with the legacy write accepted
and with it rejected; the sync monitor test that will go away with the
legacy definitions is named as transitional, and a guard checks that
matrix-js-sdk does not add legacy rules as client defaults; a Playwright
test follows a preference across the switch.

Claude-Session: https://claude.ai/code/session_01BGRjcEDsBoUibL17XP98ww

* Apply review comments on the mention rules ordering and comments

Claude-Session: https://claude.ai/code/session_01BGRjcEDsBoUibL17XP98ww

* Check the mention settings end to end in Playwright

Review feedback: rather than only reading the push rules back from the
homeserver, have a bot mention the user in a room after each change and
assert what the room list shows. The homeserver computes the unread and
highlight counts from the user's push rules, so this covers the whole
path from the settings page to the room, in both server modes.

The push rules are still read back once, to check which rules each
toggle wrote: the legacy rules along with the intentional ones while
served, and only the intentional ones otherwise.

Claude-Session: https://claude.ai/code/session_01BGRjcEDsBoUibL17XP98ww
2026-09-15 08:16:39 +00:00
Florian Duros
fc68b58c4d Room list: add an Invites section (#34736)
* Add an Invites section to the room list

Invited rooms are collected in a section pinned above Favourites.
The invite tag is synthetic, derived from the membership rather than
stored as account data, so tagRoom refuses to write or remove it.

* Name the Invites section and hide its filter chip

The collapsed header shows the number of invitations: an invitation is
neither a mention nor a notification, so it would contribute nothing to
the badge otherwise. The chip is only offered when sections are off.

* Keep invited rooms out of other sections

Membership fixes the section of an invited room, so it cannot be dragged
and the Favourited, Low priority and "Move to" entries are hidden.

* Start the Invites section collapsed

The section appears on its own when an invitation arrives, so it starts
closed and its header reports the count. Expanding it lasts only while it
is on screen, so it is closed again every time it reappears.

* Update e2e tests

* Update screenshots

* Simplify dragAndDrop.ts

* Open the section header in the e2e test only if closed

* Update lifecycle e2e tests
2026-09-07 11:04:50 +00:00
rbondesson
4dacb8b4ca Move EventTile to shared components - #5b (#34781)
* Align view model with the current EventTileView contract

* Use presentation context at every application call for EventTileView

* Render EventTileView from UnwrappedEventTile

* Remove the legacy styling

* Added missing receipt gutter logic

* Adding Card as a new shape, used in TimelineCard panel

* Added visual tests for the Card story

* Migrate EventTile layout styling and enhanced the story book rendering

* Migrate preview, notification, thread, and file shapes

* Use MemberAvatar and RoomAvatar in storybook

* Make slot styling self-contained and clean up corresponding application styling

* Clean up action bar styling

* Clean up event tile styling overrides

* RoomView realted styling fixes

* Adjustments for threads list

* Adjustments to File view

* Adjustments to Card shape

* More styling cleanup

* Updated Playwright test selectors

* Update the story book with more relevant data

* Fix oxlint and update story screenshots

* Restored conditional notification-badge slot rendering to avoid empty wrappers

* Fixed tests and snapshots

* Remove the unused UnreadNotificationBadge

* Updated snapshots and removed a11y failing story test

* Fix test locator hooks

* Fixed styling and logic issues in appearance settings

* Fixes to slotSender and slotBody placement for group layout

* Reorder style sheet for better readability

* Fix for spacing between slotSender, slotBody and reply-chain

* Fix more Playwright test loacators

* Clean up event tile class overrides

* Fix the slotBody styling

* More clean up of unused locators

* Styling fixes

* Fixes to test locators and styling for bubble and irc layout

* Locator fixes, updated snapshots, layout adjustements

* Fix for selected and editing markers and timestamp pos

* Styling fixes to bubble layout. Also dismiss releaseAnnouncements

* Styling updates and dont wait for release announcements anymore

* Styling adjustments

* Make the Playwright test wait for UI to settle before taking screenshot.

* Updated screenshot - the only difference is scroll pos

* Fixing test locators and styling adjustments

* Updated the test to reflect ellipsis, hence the screenshot update

* More test locators and styling adjustments

* Updated snapshots and screenshots

* More locator fixes and snapshots

* Restore the original screenshot

* Added Search result specific styling and make reply chain density aware

* Test locators and styling adjustments

* More styling fixes

* Updated snapshot

* oxfmt

* Styling adjustment and updated snapshots

* Styling adjustement

* Restore the font-12px override on thread view ViewSourceEvent

* Adjust styles for thread view bubble layout of ViewEventSoucrce

* More adjustments

* Styling adjustments

* Fix the bubble  layout thread view event source alignment

* Fix the thread view without destroying the room view

* Removing !important

* Updated snapshots after merge

* Put back !important until MemberAvatarView is actually used in event tiles

* Updated snapshots

* Use hideJumpToBottomButton to avoid flakiness

* More hideJumpToBottomButton
2026-08-31 04:28:13 +00:00
rbondesson
89f0636fe5 Adding a soft close of release announcements in Playwright tests (#34793) 2026-08-24 14:36:31 +00:00
Will Hunt
511e0427a2 Promote Custom Themes labs feature to devtools (#34703)
* Move custom themes to devtools

* Move devtools test to vitest

* Remove old tests

* Remove unrequired param

* Remove unused imports

* Migrate to vitest + update LabsUserSettingsTab

* Update snap

* Do not awaity

* Handful of updates

* fmt

* Update tests

* update settings labels again

* one last snap update
2026-08-24 08:28:09 +00:00
hayyaksi
03faca3626 Open the quick settings theme menu upwards so every theme is reachable (#34501)
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2026-08-12 11:22:55 +00:00
Michael Telatynski
42253a7ae5 Make apps/web/playwright comply with strict mode (#34403)
* Make apps/web/playwright comply with strict mode

Otherwise it sometimes fails to compile matrix-js-sdk as strict mode & noImplicitAny both impact how overloads are asserted

* Iterate
2026-07-30 09:07:03 +00:00
Michael Telatynski
15c85ec50f Switch from eslint to oxlint (#34166)
* Fix type imports

* Fix jsdoc

* Fixup types

* Fix stray awaits on non-thenables

* Fixup imports

* Fix splats

* Fix this-context on callbacks

* Memoise react contexts

* Prefer find/flatMap

* Make oxlint happier about our React keys

* Avoid unsafe default function params

* Fixup jsdoc

* Fixup contexts

* Switch from eslint to oxlint

* Some oxlint-related tweaks

* Iterate

* Partial revert to defer some changes and shrink diff

* Iterate

* Add eslint-plugin-element-call and enable the copyright rule

* Set strictStorePkgContentCheck

* Iterate

* Make sonar happy

* Fix new lints
2026-07-10 09:47:41 +00:00
Michael Telatynski
2bc9656957 Adapt OAuth2 implementation to Matrix Spec v1.18 (#34026)
* 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>
2026-07-08 08:02:25 +00:00
Timo
1b10122a7b Allow disabling legacy calls and make Voice & Video settings Legacy Voice & Video (#33692)
* 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>
2026-07-07 16:09:36 +00:00
Florian Duros
b68ecdb860 Remove legacy room list (#34040)
* 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
2026-07-02 09:07:37 +00:00
Huy Hoang
b430edf43b Pluralise the multi-session remove button and confirmation dialog (#33983)
* Pluralise the multi-session remove button and confirmation dialog

When several sessions are selected in Settings > Sessions, the bulk remove button and its confirmation dialog used the singular "Remove this device" string. The singular "this" misleadingly implied the current device would be removed. Use the existing count-aware settings|sessions|sign_out_n_sessions key, matching the other-sessions menu, so the label reads "Remove N sessions".

Fixes #33812

* Update device-management e2e test for the pluralised remove button

The multi-select remove button now reads "Remove N sessions" instead of "Remove this device", so update the Playwright assertion to match.

* Put "Cancel" before "Remove N sessions" in the bulk session action bar

In the "Other sessions" multi-select action bar, "Remove N sessions" was
rendered before "Cancel", which placed the destructive action on the left.
Swap the two buttons so "Cancel" is on the left and "Remove N sessions" on the
right, per review feedback on #33983.
2026-06-30 13:04:07 +00:00
Florian Duros
aed2009b9f Room list: move sections out of labs to all the users (#33810)
* feat: remove section labs flag

* test: update tests

* feat: remove favourites and low prioriy filter in SC

* test: update screenshots

* test: update snapshots

* test: update playwright tests

* test: update playright screenshots

* test: update screenshot

* test: close release announcement

* test: fix skeleton screenshot

* test: fix sliding sync

* test: update room list tests

* test: update room list tests after section dnd

* test: update toast screenshot

* test: update again room list tests

* test: update screenshot
2026-06-29 16:30:27 +00:00
Will Hunt
fab71c80ed Fix flake in room-security-tab (#33897)
* Fix flake in room-security-tab

Wait for the power level change before trying to test.

* lint
2026-06-19 14:22:27 +00:00
David Baker
4b0600f593 Press tab instead of blurring in playwright test (#33576)
This was flaking a lot: try a regular keypress instead of trying to
blur the element (which is closer to an actual user interaction anyway).
2026-05-21 13:00:50 +00:00
David Baker
0140563b64 Tweak new user menu design (#33444)
* Tweak new user menu design

* Update screenshots

* More screenshots

* Add story with no avatar

* add story to test

* Expand the menu so it actually shows what it's supposed to show

* Use the open parameter

which is the param to open the menu

* snapshot

* Add test for normal open menu version

* Move menu to the right of the avatar

and make it appear on top of the display name

* Fix user menu layout

* screenshots

* snapshot

* screenshots

* more screenshots

* Shift toasts to the left slightly

So they completely cover the display name of the user menu when
it's expanded. Also down slightly so they're level with the user menu.

* Tweak toast border radius & position

to match & sit on top of the user menu

* Close toasts in cider tests

* Only close the toast if it's actually there

* Fix some toasts to be dismissed & update screenshots

more to come though

* Make closeKeyStorageToast actually optional

* Fix some more toasts & races

* Screenshots again again (again)

* More screenshots

* Convert to rejectToast

* Fix toast rejectors to not wait and update screenshots

* Apparently 1ms is not long enough
2026-05-19 13:10:14 +00:00
Andy Balaam
5be0b778db Change all toast rejection code to use the rejectToast utility (#33025) 2026-05-18 16:31:52 +00:00
rbondesson
e491fb8c81 Restore the Manage account button text color and add playwright test (#33411)
* Restore the Manage account button text color and add playwright test

* Fix prettier issue

* Fix Sonar issue
2026-05-06 17:42:33 +00:00
Will Hunt
d4f419d1b5 Refactor and redesign user menu (#32812)
* Initial quick settings menu

* Total refactor

* Quick design fixes.

* Refactor to use a view model.

* Remove unused strings

* Apply label

* Refactor naming

* Fixup most tests

* Remove specific theming for old user menu

* prettier

* Lots of cleanup

* Allow overriding the menu classes

* update snap

* Oops translations

* tidy

* Cleanup guest flows.

* Copyrights

* Remove unused classname

* Match guest view to designs

* Add guest screenshots

* Update guests

* snapshot

* Cleanup

* fix import

* Update tests

* More sceenshot fixes

* update collapsed

* move statements to prevent flake

* update snap

* Kick it along

* Click the room list

* Fiddle with the room video list.

* More screenshot adjustments

* fix imports

* fix another import

* Update snaps

* update snaps

* Fix snap flakes

* Refactor to move actions to view component, and callbacks to Actions

* Cleanup

* Cleanup

* Cleanup

* invert auth

* More bits

* fix

* Change md buttons to sm

* Try to assemble the snapshot component of the house of cards

* Consistent newlines between tests

* Update snapshot

Not sure why this was like this, this seems consistet for a logged in user

* Update snapshot

again these seem sensible for a guest

* Remove test

I don't really understand why the thing it asserts matters, so I'm removing
it for now.

* Update snapshot

* screenshot

* Don't show profile picture for guests

I'm not really sure what it meant for this interface to have a
property with a default value, so I've removed it and added the
property to the view model.

* Show avatar in story

* update snapshots for showAvatar

* Update screenshots

& hopefully make hover consistent in one

* Use outline home icon

---------

Co-authored-by: David Baker <dbkr@users.noreply.github.com>
2026-05-06 08:34:36 +00:00
Andy Balaam
76b65b14de Show 'Verify this device' toast even if there are no encrypted rooms yet (#32891)
* Show 'Verify this device' toast even if there are no encrypted rooms yet

* Close verify toast in more tests
2026-04-24 11:39:59 +00:00
Richard van der Hoff
cd515444a8 Confirm before inviting unknown users to a DM/room (#33171)
* InviteDialog: factor out startDmOrSendInvites

Factor out the logic of calling `startDm` or `inviteUsers` to a helper
function. We're going to need to call this from a second location soon, so this
is useful groundwork.

* Add `UnknownIdentityUsersWarningDialog`

* Add unit tests

* Update playwright tests

* Convert if/else to switch statement

* Convert helper functions to React components

* Factor out "onRemove" callback

* Add clarifying comment
2026-04-22 20:05:31 +00:00
Michael Telatynski
6c1dc7051f Accessibility improvements in settings (#32968)
* Add more playwright axe tests to settings dialogs

* Fix axe issue heading-order

* Fix heading order

* Iterate

* Update snapshots

* Iterate

* Update snapshots

* Iterate

* Update screenshot

* Iterate

* Iterate

* Update snapshot
2026-04-07 15:17:59 +00:00
Andy Balaam
cabac4ef0e Attempt to deflake the 'Verify this device' test by scrolling up (#32981) 2026-03-31 10:49:57 +00:00
Michael Telatynski
cd429874db Reference files in Playwright more reliably (#32935)
Without assuming the cwd
2026-03-26 11:30:54 +00:00
ElementRobot
8a38a2fe4a Localazy Download (#32808)
* [create-pull-request] automated change

* test: update SC tests

* test: update SC screenshots

* test: update EW snapshots

* test: update EW tests

* test: update EW e2e tests

---------

Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
Co-authored-by: Florian Duros <florian.duros@ormaz.fr>
2026-03-18 15:53:28 +00:00
ElementRobot
00dd0c48ba Localazy Download (#32714)
* [create-pull-request] automated change

* Use a dedicated string for public access in settings.

* Fix tests due to copy changes.

* Fix tests due to copy changes.

* Fix tests due to copy changes.

* Fix tests due to copy changes.

* Fix tests due to copy changes.

* Updated visual tests screenshots due to copy changes.

* Updated visual tests screenshots due to copy changes.

---------

Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
Co-authored-by: mxandreas <andreass@element.io>
2026-03-09 09:43:00 +00:00
Michael Telatynski
91a3cb03c1 mv element.io @types __mocks__/ debian docker module_system/ playwright res src test webapp Dockerfile .dockerignore .eslintignore .stylelintrc.cjs babel.config.cjs recorder-worklet-loader.cjs .modernizr.json components.json config.json config.sample.json package.json project.json tsconfig.json tsconfig.module_system.json jest.config.ts playwright.config.ts webpack.config.ts build_config.sample.yaml apps/web/
mkdir apps/web/scripts
mv scripts/{cleanup.sh,ci_package.sh,copy-res.ts,deploy.py,package.sh} apps/web/scripts

And a couple of gitignore tweaks

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2026-02-24 15:43:58 +00:00