Commit Graph
754 Commits
Author SHA1 Message Date
hayyaksiandGitHub 9575b236c0 Automatically recover from a renderer crash instead of leaving a blank window (#33988)
* Automatically recover from a renderer crash instead of leaving a blank window

The renderer (or GPU process) could die and leave a permanent blank/white window with no
UI, escapable only by killing the whole app. Add a dedicated renderer-recovery module that
detects render-process-gone / unresponsive and reloads or recreates the renderer with capped
backoff, giving up only after repeated failures.

Route the dock-activate and window-show paths through it as well, so a crash that happened
while the window was hidden is recovered before the window is shown rather than surfacing the
white screen.

* Address review: use author copyright and drop empty beforeEach
2026-07-14 12:42:51 +00:00
hayyaksiandGitHub da500d4b7d Fetch authenticated media through the session for "Save image as" (#33997)
* Fetch authenticated media through the session for "Save image as"

The desktop "Save image as" context-menu item fetched http(s) images with the
main-process global fetch(), which bypasses the session's webRequest interceptors —
including the authenticated-media handlers in media-auth.ts that rewrite the download
URL and attach the Authorization header. On modern Synapse (authenticated media,
MSC3916) that fetch is rejected with 401/404, so saving an image failed (#32362).

Extract the save logic into a dedicated save-image.ts and fetch network URLs through
the image's Electron session (webContents.session.fetch) so the auth interceptors
apply; data: URLs are still decoded directly into a NativeImage. The module also keeps
the extension-aware encoding (jpg/jpeg/bmp/png) so its contract can be unit-tested.

* Use the contributor's own copyright header on the new save-image files
2026-07-14 11:26:06 +00:00
David BakerandGitHub 732716ba12 User status in room summary card (#34239) 2026-07-14 08:56:03 +00:00
David BakerandGitHub 2f612c3a9d Add user status to dm room header (#34225)
* Add user status to dm room header

Also bumps the gap on the room header items to 8px because that's
what the designs have and I'm assuming it applies to everything, not
just the user status: pending design confirmation.

* Turns out the icons did have 8px gap

but via 4px of padding for reasons I can't discern

* Adjust spacing to 1.5x

as requested by design

* add tests

* Update screenshots

* add test for user status updating
2026-07-14 08:55:04 +00:00
Michael TelatynskiandGitHub b6859885a3 Upgrade to TypeScript 7 (#34208)
* Upgrade to TypeScript 7

for massive tsc speed gains

Those on WebStorm will want to upgrade to EAP to reap the benefits of the new TSGo compiler

Some things (module-api & shared-components) which utilise unplugin-dts (and api-extractor) need to hold a copy of ts6 for its conventional lib format and API. TS7 ships with no API until TS7.1.

Other things which use eslint also need ts6 for typescript-eslint.

Some type changes were necessary as TS7 caught some issues.

* Add knip exception

* Fix bad merge
2026-07-14 08:09:03 +00:00
David BakerandGitHub 157c6008d4 Bump compound-web to 9.8.0 (#34236)
* Bump compound-web to 9.8.0

* Manually unmangle pnom-lock

* Tedious class name updates

* More tedious class name updates

* This is my life now
2026-07-13 16:26:26 +00:00
SiriusandGitHub 84653bb416 Sending URL Preview Bundles (MSC 4095) (#34150)
* 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
2026-07-13 15:31:18 +00:00
6aeb5f552b Add config param to disable client wellknown fetch (#34084)
* Add enable_client_well_known_lookups config option

Signed-off-by: David Langley <langley.dave@gmail.com>

* Gate client .well-known poll on enable_client_well_known_lookups

Signed-off-by: David Langley <langley.dave@gmail.com>

* Gate MatrixRTC foci well-known fallback on enable_client_well_known_lookups

Signed-off-by: David Langley <langley.dave@gmail.com>

---------

Signed-off-by: David Langley <langley.dave@gmail.com>
Co-authored-by: David Langley <langley.dave@gmail.com>
2026-07-13 15:27:36 +00:00
R Midhun SureshandGitHub c4606c19f8 Ongoing call tiles - Implement the view-models and store (#34198)
* Add a common view snapshot type

This will contain the common snapshot values used by both dm ongoing
call tile view and room ongoing call tile view.

* Implement the common join button component

* Implement the call icon component

* Implement the common container component

* Support single digit minutes in existing clock component

* Implement the view for duration component

* Add static profile pics to be used in storybook tests

* Implement view for member avatar component

* Implement view for face pile component

* Implement RoomOngoingCallTileView

* Implement DmOngoingCallTileView

* Support the new tiles in RootTileView

* Export all the views

* Update all the screenshots

* Implement view model for duration view

* Implement vm for face pile view

* Implement vm for member avatar view

* Expose call store via the sdk context

* Add method to get all calls in store

* Add store to track latest notification event per room

* Also expose new store via sdk context

* Create a base vm for both tiles

* Implement the room ongoing call tile vm

* Implement the dm ongoing call tile vm

* Support new tile vms in the root tile vm

* Rename getCallInRoom -> getCallOrThrow

* Change confusing comment in test

* Check existing events first and use decryption promise

* Clarify recompute vs update in code comment

* Use vi.mocked instead of ts-ignore

* Change type of size to number

* Import only the type

* Pass size as number instead of string

* Check if call is jistsi call in root tile

* Add more tests

* Rename isCallIgnored -> isCallDeclined

* Add a comment about the 10px margin

* Add comments to explain css heights and widths
2026-07-13 14:52:16 +00:00
Michael TelatynskiandGitHub 825fab6595 Remove SpaceStore singleton (#34088)
* Remove dead code

* Remove LegacyCallHandler singleton

Route via SDKContext to cut import cycles

* Remove SpaceStore singleton

Route via SDKContext to cut import cycles

* Fix tests

* Fix tests

* Fix tests

* Fix tests

* Iterate

* Post-merge fixup

* Iterate
2026-07-13 14:31:39 +00:00
David BakerandGitHub 7206d887f9 Deflake dercryption failure test (#34158)
It sometimes raced and clicked the wrong toast.
2026-07-13 13:41:23 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
a2d7dc0c0f Update dependency electron to v43.1.0 (#34233)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-13 09:05:53 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
01c1077042 Update testcontainers docker digests (#34232)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-13 08:54:30 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1625a6aeaf Update dependency @element-hq/element-call-embedded to v0.21.0 (#34222)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-13 07:37:56 +00:00
Michael Telatynski 707fbd960a Fix web dockerfile using wrong arch for pnpm 2026-07-13 08:46:30 +01:00
David BakerandGitHub 4518ce5c2a Add user status emoji to member list (#34210)
* Add user status emoji to member list

* snapshots
2026-07-10 15:16:23 +00:00
David BakerandGitHub f09b27db7c Add user status in user info right panel card (#34212)
* Add user status in user info right panel card

Adds a very simple view component to do so, which will be reused
in the DM room header.

Also comment the other status view so the difference is clear.

* Add screenshot

* Add test

* Rename snapshot
2026-07-10 14:45:41 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
efb3c0090d Update testcontainers docker digests (#34218)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-10 10:18:14 +00:00
Michael TelatynskiandGitHub aeea53dfde Expose SDKContext on the window & avoid using singleton store .instance (#34098)
* Expose SDKContextClass via window for debugging

* Remove stores from window if they are exposed via sdkContext

* Avoid usages of global store instance where React context is accessible

* Fix tests by adding SDKContext.Provider

* Fix tests by adding SDKContext.Provider

* Fix tests by adding SDKContext.Provider

* Fix tests by adding SDKContext.Provider

* Iterate

* Discard changes to apps/web/src/components/views/elements/AppTile.tsx
2026-07-10 09:51:38 +00:00
Michael TelatynskiandGitHub 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 TelatynskiandGitHub 549dd1b7a8 Fix pnpm in docker images (#34215)
Also actually use the new docker image in the MQ
2026-07-10 08:20:47 +00:00
Michael TelatynskiandGitHub 2dee304cc0 Update pnpm (#34066) 2026-07-09 16:48:27 +01:00
David BakerandGitHub 66bbe7f01c Avoid snapshot in metaspaces order test (#34183)
* Avoid snapshot in metaspaces order test

Just assert the thing we're actually testing rather than a snapshot
because I keep having to update this snapshot every time anything in
the left panel changes and it's tedious.

* 🐂

* Get all the button roles instead

* Favourites & people are gone

* Query treeitems and then get the buttons from them
2026-07-09 10:32:34 +00:00
Florian DurosandGitHub f21a3f5413 RoomList: add back Favourites and Low Priority filters when sections are disabled (#34162)
* Add back Favourites and Low Priority filter into shared components

* Wireup RoomList.showSections and filters in room list vm

* Add e2e test for filters and showSection setting
2026-07-09 10:25:45 +00:00
David BakerandGitHub 707d5a4353 Add user status to DM rooms in the room list (#34191)
* Add user status to DM rooms in the room list

* Screenshot

* Tests for fetchUserStatus
2026-07-09 09:56:23 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
240f7148e1 Update testcontainers docker digests (#34202)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-09 09:28:59 +00:00
TimoandGitHub 7d26577089 add background: "solid" for EC (#34168) 2026-07-08 16:30:44 +00:00
Florian DurosandGitHub d041669031 Remove dead code on favourite and people metaspaces (#34187)
* Remove unused Favourites and People metaspaces

* Update existing tests

* Update snapshots

* Update i18n lang
2026-07-08 14:20:09 +00:00
Michael TelatynskiandGitHub 67a20c57a3 Move more tests from Jest to Vitest (#34181)
* Move more tests from Jest to Vitest

* Iterate
2026-07-08 12:15:28 +00:00
Florian DurosandGitHub d5932851cb RoomList: fix room scroll when clicked in thread activity centre (#34179)
* Make room list handles `show_room_tile` in `Action.ViewRoom`

* Add e2e test to scroll the room list when a room in tac is clicked
2026-07-08 11:41:10 +00:00
David BakerandGitHub bf1b77116d Center long user ids in the user menu (#34182)
* Center long user ids in the user menu

The span itself was centered but the text wasn't centered in the span
so long user IDs would be left justified once they wrapped onto two
lines.

* Update screenshot

* Snapshot
2026-07-08 11:37:57 +00:00
af881a1035 [create-pull-request] automated change (#34177)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2026-07-08 07:52:35 +00:00
Michael TelatynskiGitHubCopilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
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
Will HuntandGitHub 38e29c51c4 Fix composer preview getting stuck on a single module API preview (#34173)
* Unset composer preview

* add a test
2026-07-07 18:47:14 +00:00
Will HuntandGitHub ff8abcdb8d URL Preview further design iteration (#34054)
* Drop unused img

* Fix sizing in bubble layouts

* Update previews

* Update snaps

* fixup

* cleanup

* cleanup
2026-07-07 17:21:44 +00:00
R Midhun SureshandGitHub e46acef445 Implement tombstone tiles for calls in room and DM (#34141)
* Implement tombstone tile view for a room

* Implement tombstone tile view for a DM

* Implement root call tile view

* Export all the views

* Add screenshots

* Remove old view code

* Implement vm for tombstone tile in a room

* Implement vm for tombstone tile in a DM

* Implement root tile vm

* Use new tile in the event factory

* Remove old vm

* Exclude mock code from code checks
2026-07-07 16:27:26 +00:00
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
RiotRobot 7cdb4ab720 Reset matrix-js-sdk back to develop branch 2026-07-07 13:01:43 +00:00
RiotRobot 2ee42a002e Merge branch 'master' into develop 2026-07-07 13:00:37 +00:00
RiotRobot 3a219ab356 v1.12.23 2026-07-07 12:56:48 +00:00
RiotRobot 7d9cad2574 Upgrade dependency to matrix-js-sdk@41.9.0 2026-07-07 12:51:52 +00:00
Michael TelatynskiandGitHub 4ec8f1edcd Remove LegacyCallHandler singleton (#34086)
* Remove dead code

* Remove LegacyCallHandler singleton

Route via SDKContext to cut import cycles

* Remove unused setting

* Fix tests

* Fix tests

* Cascade SDKContext through PersistedElement

* Improve coverage

* Iterate

* Improve coverage

* Improve coverage
2026-07-07 12:29:54 +00:00
Michael TelatynskiandGitHub 6fda0ad60f Migrate more jest tests to vitest (#33922)
* Migrate more jest tests to vitest

* Fix jest config

* Fix jest config

* Make remaining jest tests type-happy

* Iterate

* Fix Notifier import cycle

* Fix tests

* Delint

* Iterate

* Handle SDKContextClass `client` initialisation internally

Rather than via MatrixChat - this is predominantly for Lifecycle tests as they don't use a MatrixChat and it doesn't make much sense for this component to own this state.

* Fix tests

* Iterate

* Simplify diff

* Improve coverage

* Improve coverage

* Iterate
2026-07-07 09:50:40 +00:00
Michael TelatynskiandGitHub 30c02ab5d7 Migrate batch of tests to vitest (#34121)
* Migrate batch of tests tro vitest

* Iterate

* Migrate another test

* Migrate batch of tests to vitest

* Iterate
2026-07-07 09:40:22 +00:00
Florian DurosandGitHub 7ff6956014 Room list: add new settings to enable/disable the sections (#34151)
* Add new settings to enable/disable the sections

* Add `RoomList.showSections` settings to preference user settings

* Hide sections ui in room list header

- Hide the collapse/expand button and the *new section* entry in the
menu.
- Display the *start chat* button instead of the compose menu when the
only action available is to create a DM

* Hide sections ui in context menu of room item

* Listen to show section settings in room list item vm

* Listen to show sections setting in room list header vm

* Put all the rooms inside the chat section when sections are disabled

When the chat section is the only section, the room list is in "flat
list mode". Putting all the rooms inside the chat section.

The section filters (aka custom section, favourites etc) are not passed
to the skip list.

* Update preferences settings screenshot

* Add e2e test for RoomList.showSections toggle

* Hide "Chat moved" toast when a room is tagged when RoomList.showSections is disabled
2026-07-07 08:45:37 +00:00
David BakerandGitHub 5065683658 UI for setting user status (#33856)
* First stage

 1. Make avatar BIGGER!
 2. Move status button out to its own component so we can reuse it

* Working version

but using context menu rather than dropdown menu which almost looks
right but not quite.

* Commit the set status view component

* Change to use dropdown with custom trigger

* Show full set status component in user menu

and styling tweaks

* In user menu, clicking takes you to settings

* Add the view model

* oxfmt

because apparently mine had decided to go away

* Fix type import

* Pass set status viewmodel in story

* Bump compound-web

for customisable dropdown

* Snapshot

* Add explicit aria label

as combobox role things don't just inherit from their inner text

* snapshot again

* Only show user status if feature flag enabled

* Make status btton view not a button

because it doesn't need to be. Also rename accordingly.

* Screenshots

* Disable in settings if feature flag off

* Snapshot

* Snapshot again

* Update screenshots

including room settings one which wasn't really supposed to change
although the avatar now takes up the space it's in - leaving it for
design to check.

* Fix size & positioning of the status button

* Update screenshots

* Screenshots

* Test for SetStatusViewModel

* Update set status view on status change

* Use a link component for the status button

which has built in hover state

* Float the status button in a 28px container

vs making it actually 28px min height

* Separate user menu profile into two sections

With 8px gap between things in the two sections and 12px gap between
sections (ie. in practice, 12px gap between the status control and username).

* Screenshot

* Screenshots

* Pass set status view model in the state

rather than as an extra prop. Fixes it in the story too.

* Pass ownprofilestore into the viewmodel

* Don't use snapshot for testing the view model

Avoids getting all the random stuff from the sub VM in the snapshot
and better to test what we care about anyway.

* don't mention the bad word

* Here too

* Don't show user status for guests

* Update guest story to remove user status
2026-07-06 19:28:34 +00:00
Michael TelatynskiandGitHub a26eb9f578 Fix Notifier import cycle (#34122)
* Fix Notifier import cycle

* Fix tests

* Delint

* Iterate

* Handle SDKContextClass `client` initialisation internally

Rather than via MatrixChat - this is predominantly for Lifecycle tests as they don't use a MatrixChat and it doesn't make much sense for this component to own this state.

* Fix tests

* Iterate

* Improve coverage

* Improve coverage

* Fix bad merge

* Iterate
2026-07-06 19:20:51 +00:00
Michael TelatynskiandGitHub 08419cf0cf Move more element-web tests over to vitest (#33845)
* Move more element-web tests over to vitest

Switches default env to happy-dom as SdkConfig needs a DOM and is part of the setupTests given a lot of code relies on it

* Restore jest variant of editor mock file for tests not yet moved over

* Migrate batch of tests tro vitest

* Iterate

* Migrate another test

* Simplify

* Iterate

* Iterate

* Fix lockfile

* Deduplicate

* Iterate
2026-07-06 17:42:24 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
3da74a98e3 Update dependency webpack-dev-server to v6 (#34156)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-06 16:34:34 +00:00
Michael TelatynskiandGitHub dc33d736a0 Handle SDKContextClass client initialisation internally (#34146)
* Handle SDKContextClass `client` initialisation internally

Rather than via MatrixChat - this is predominantly for Lifecycle tests as they don't use a MatrixChat and it doesn't make much sense for this component to own this state.

* Fix tests
2026-07-06 16:09:21 +00:00