Compare commits

...

198 Commits

Author SHA1 Message Date
RiotRobot 7a01cdae0a v1.12.4
Docker / Docker Buildx (push) Failing after 51s
2025-11-18 14:36:41 +00:00
RiotRobot 06656a6472 Upgrade dependency to matrix-js-sdk@39.2.0 2025-11-18 14:29:25 +00:00
RiotRobot 842edc6577 v1.12.4-rc.0
Docker / Docker Buildx (push) Failing after 57s
2025-11-11 14:45:49 +00:00
ElementRobot faadcf902e Install shared components during EW install (#31196) (#31208)
* fix: install shared components during EW install

* chore: ignore `@element-hq/web-shared-components` for knip

* chore: remove shared-components operation in layered.sh

EW `yarn install` is also installing shared-componenents dependencies.
`link:` in `package.json` works nearly like `yarn link`.

* Iterate



---------



(cherry picked from commit e883b05206)

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: Florian Duros <florianduros@element.io>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2025-11-11 14:18:14 +00:00
RiotRobot 191f951303 Upgrade dependency to matrix-js-sdk@39.2.0-rc.0 2025-11-11 12:46:14 +00:00
ElementRobot b50fbe2eea [create-pull-request] automated change (#31206)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-11-11 06:20:27 +00:00
Michael Telatynski 8608268bc7 Apply aria-hidden to emoji in SAS verification (#31204)
* Apply aria-hidden to emoji in SAS verification

So that for screen readers the canonical emoji description is preferred & we avoid the user being read each emoji twice.

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update snapshot

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-11-10 16:46:30 +00:00
Michael Telatynski f6e85a38d2 Fix room list handling of membership changes (#31197)
* Fix room list handling of membership changes

Including knock->invite for ask to join

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* lint

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-11-10 12:40:39 +00:00
ElementRobot 39a5cca737 [create-pull-request] automated change (#31200)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-11-10 09:07:15 +00:00
Florian Duros f751f2a55d Fix room list unable to be resized when displayed after a module (#31186)
* fix: recreate resizer when the page type changes

* test: add tests
2025-11-07 13:30:25 +00:00
ElementRobot f1bb017be7 [create-pull-request] automated change (#31194)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-11-07 13:17:45 +00:00
Florian Duros f5e56cc8d5 fix: only scan shared components src and EW src in i18n script (#31188) 2025-11-06 17:32:06 +00:00
Michael Telatynski 3848d570be Inhibit keyboard highlights in dialogs when effector is not in focus (#31181)
* Inhibit keyboard highlight in spotlight dialog when effector is not in focus

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Inhibit keyboard highlight in forward dialog when effector is not in focus

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix search box height bouncing on focus/blur

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update screenshot

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-11-06 16:32:46 +00:00
Richard van der Hoff eade32a80c Playwright test: withheld sessions for MSC4268 (#31153)
* Playwright test: withheld sessions for MSC4268

Test what happens when a session is withheld as part of MSC4268

* Add comment on `openRoomInfoPanel`
2025-11-06 12:14:14 +00:00
Ben Banfield-Zanin a0de60a045 Use dedicated bug report subdomain (#31185)
* Update docs for 'bug_report_endpoint_url' to use the dedicated subdomain

* Update {app,develop}.element.io to use the dedicated subdomain for 'bug_report_endpoint_url'
2025-11-06 12:10:24 +00:00
ElementRobot a88a3575d5 [create-pull-request] automated change (#31184)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-11-06 06:21:04 +00:00
Florian Duros abb93545fe fix(e2e): look at the location map before clicking (#31180) 2025-11-05 16:49:41 +00:00
R Midhun Suresh 24aa759544 Add license (#31179) 2025-11-05 16:44:59 +00:00
David Baker 77aa26bcdb Remove duplicate test step (#31166)
As the comment indicated, this apparently was necessary to get stuff
built the first time, but does not appear to be necessary anymore and
looks to be causing occasional flakiness, so let's remove it.
2025-11-05 13:55:19 +00:00
Florian Duros 4d66a85e73 Add options to hide header and composer of room view for the module api (#31095)
* feat: add props to hide header in `RoomView`

* feat: add props to hide composer in `RoomView`

* feat: pass `RoomViewProps` to room view in `renderRoomView`

* refactor: add doc and use existing types

* test: add tests for new room view props
2025-11-05 12:52:10 +00:00
Tol Wassman 52eb8a9979 Strip mentions from forwarded messages (#30884)
* strip mentions from forwarded messages

fixes element-hq/element-web#30883

* call attachMentions() for empty m.mentions in forwarded messages

As there is no EditorModel, attachMentions() currently does nothing

* fix lint and typecheck

* update test "should be navigable using arrow keys"

* update test "forwards pin drop event"

add empty mentions to expected content

* add doc to transformEvent() & elaborate on attachMentions()

* add test "strips mentions from forwarded messages"

* fix lint

* update source of `attachMentions()` import

---------

Co-authored-by: David Baker <dbkr@users.noreply.github.com>
2025-11-05 11:28:24 +00:00
David Baker c4ef57b5f1 Fix the slow test reporter (#31170)
Only runs on develop so we didn't notice
2025-11-05 11:16:48 +00:00
David Baker d9e3aa52e2 Hopefully fix manual device verification test (#31175)
Looks like it's failing to clear modals between tests
2025-11-05 10:19:21 +00:00
ElementRobot b8e7c725e2 [create-pull-request] automated change (#31176)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-11-05 09:17:48 +00:00
ElementRobot 2617a7c3a5 [create-pull-request] automated change (#31177)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-11-05 09:07:24 +00:00
David Baker 42f8247c2e Experimental Module API Additions (#30863)
* Module API experiments

* Move ResizerNotifier into SDKContext

so we don't have to pass it into RoomView

* Add the MultiRoomViewStore

* Make RoomViewStore able to take a roomId prop

* Different interface to add space panel items

A bit less flexible but probably simpler and will help keep things
actually consistent rather than just allowing modules to stick any
JSX into the space panel (which means they also have to worry about
styling if they *do* want it to be consistent).

* Allow space panel items to be updated

and manage which one is selected, allowing module "spaces" to be
considered spaces

* Remove fetchRoomFn from SpaceNotificationStore

which didn't really seem to have any point as it was only called from
one place

* Switch to using module api via .instance

* Fairly awful workaround

to actually break the dependency nightmare

* Add test for multiroomviewstore

* add test

* Make room names deterministic

So the tests don't fail if you add other tests or run them individually

* Add test for builtinsapi

* Update module api

* RVS is not needed as prop anymore

Since it's passed through context

* Add roomId to prop

* Remove RoomViewStore from state

This is now accessed through class field

* Fix test

* No need to pass RVS from LoggedInView

* Add RoomContextType

* Implement new builtins api

* Add tests

* Fix import

* Fix circular dependency issue

* Fix import

* Add more tests

* Improve comment

* room-id is optional

* Update license

* Add implementation for AccountDataApi

* Add implementation for Room

* Add implementation for ClientApi

* Create ClientApi in Api.ts

* Write tests

* Use nullish coalescing assignment

* Implement openRoom in NavigationApi

* Write tests

* Add implementation for StoresApi

* Write tests

* Fix circular dependency

* Add comments in lieu of type

and fix else block

* Change to class field

---------

Co-authored-by: R Midhun Suresh <hi@midhun.dev>
2025-11-05 07:24:26 +00:00
David Langley 514dd07a28 Fix test:storybook:update (#31173) 2025-11-04 17:27:34 +00:00
RiotRobot 53dc281a24 Reset matrix-js-sdk back to develop branch 2025-11-04 14:13:04 +00:00
RiotRobot efc5b0260b Merge branch 'master' into develop 2025-11-04 14:12:52 +00:00
RiotRobot d4c22d43f3 v1.12.3
Docker / Docker Buildx (push) Failing after 56s
2025-11-04 14:09:39 +00:00
RiotRobot 926bb56723 Upgrade dependency to matrix-js-sdk@39.1.2 2025-11-04 14:03:39 +00:00
David Baker 3dca2da5d6 Add test tag while we're publishing test versions 2025-11-04 11:29:03 +00:00
David Baker 71604c9e19 Fx shared component publish workflow (#31161) 2025-11-04 11:06:42 +00:00
David Langley 4e57b80556 Change polls to use fieldset/legend markup (#31160)
* Change polls to use fieldset/legend markup

* Update MPollEndBody-test.tsx.snap

* Fix letter spacing in legend

* Update PollHistory-test.tsx.snap
2025-11-04 09:55:35 +00:00
ElementRobot c14d072cb7 [create-pull-request] automated change (#31163)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-11-04 09:25:04 +00:00
David Langley dcf3e536ab Don't allow pin or edit of messages with a send status (#31158)
* Don't allow pin or edit of messages with a send status

* lint and improve comments.
2025-11-03 17:33:18 +00:00
David Baker 18a5565b70 Bump shared components version 2025-11-03 17:25:06 +00:00
David Baker b0cdbf5eff Make shared component build work in isolation (#31066)
* Make shared component build work in isolation

 * Add deps that were missing because they were getting picked up
   from element-web main but shared-components needs itself
 * Exclude test files from dts generation
 * Bump version

* Change all the shared-component import to be the built artifact

* Don't randomly inhale eslint configs in parent dirs please

* maybe we don't need this anymore?

* maybe fix build

* Maybe fix docker build

* More build faff

 * build:res on the parent as part of shared component prepare
 * link shared component repo inn docker build

* 💅

* 💅x2

* Try converting the translation keys to a .d.ts file manually

so it gets bundled rather than left as a relative import to the json
file

* add the script

* Add this back for 2nd time now I think

* Shouldn't need this anymore

* patch-package on prepare

because we're patching a dev dependency so it won't be there if we're
installed as a dependency

* Unused import

* Prettier compliance

* Only use counterpart from shared components

as per comment

* Import shared components CSS

* Prettier

* Call the one from shared components

rather than recurse infinitely

* Hopefully make tests work

* wake up, comment goes before import

* Fix lint errors

* Fix dupe TranslationKey export

* Update compound-web to fix type error

An update to @types.react adds the 'hint' value to the enum of the
'popover' attribute and this version of compound-web uses the maching
verson of @types/react so they don't conflict.

* Maybe, hopefully, get the types working?

Please?

* Add copyright header to i18nkeys

as eslint complains otherwise since it's now in src

* prettier

* stop running shared-component tests in EW

* update snapshots

because flex is now from an external stylesheet I guess

* More snapshots

* Manual class update

* Avoid bundling compound bits

Because a) it's silly and b) it means we end up bundling a copy of
floating-ui too which causes absolute madness with its useDelayGroup
contexts.

* ignore test util files for coverage

* Add !important

because the styles are being applied in a different order now

* Another !important because css order has changed

* Try adding it here to make the test files ignored

* More !important

* commit yarn lock change

* Add shared components coverage file

* Update snapshots

Because the line height was being overridden to 22.5px somehow by
something I can't find, and now isn't: surely the normal 1.5rem is
more sensible.

* Update snapshots, attempt 2

* Another !important

* More snapshot updates

* Add test for i18n wrappers

& add test script

* lint

* Prettier

* Hopefully run shared component tests

* don't need this bit for non-matrix

* install ew deps

* rigfht coverage location

* Rename job here too

* Try different coverage filename

* Fix copyrights & comment

* Typo

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2025-11-03 16:26:47 +00:00
Will Hunt 486d4d59bc Use compound Button styles for Jitsi button (#31159)
* Use compound styles for jitsi button

* lint
2025-11-03 16:02:21 +00:00
Will Hunt 54f967efd5 Hide room header buttons if the room hasn't been created yet. (#31092)
* Hide room header buttons if the room isn't ready

* update test

* update unit tests

* Remove on-click actions
2025-11-03 13:25:08 +00:00
ElementRobot 24fc018845 [create-pull-request] automated change (#31150)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-11-01 06:18:47 +00:00
David Langley 36ccc1ae9a Fix screen readers not indicating the emoji picker search field is focused. (#31128)
* Only set active descendant when the user starts typing.

* Fix jest tests.

* Remove aria-hidden

It was failing code quality checks and it actually wasn't addressing the issue.

* Only show highlight on arrow key navigation or updating the search query.

* Update screenshots

* Enter should not select an emoji if it is not highlighted.

* On clearing a query and using arrow kets again the highlighted emoji should be reset to the first.

* Update selector in picker tests
2025-10-31 17:10:02 +00:00
Michael Telatynski 017aee9a8f Fix emoji picker highlight missing when not active element (#31148)
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-31 15:20:57 +00:00
David Langley e0a94a05ea Add FocusLock to emoji picker (#31146)
* Add focus lock to emoji picker and e2e test.

* Remove direct use of FocusLock in favour of the ContextMenu prop.

* Apply returnFocus for ContextMenu focusLocks

* Remove import
2025-10-31 13:54:26 +00:00
renovate[bot] 23f372ca08 Update dependency eslint-plugin-react-hooks to v7.0.1 (#31103)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-31 12:52:40 +00:00
Skye Elliot 73fa27887d Move room name, avatar, and topic to IOpts. (#30981) 2025-10-31 12:20:02 +00:00
renovate[bot] a9bb046e52 Update storybook to v9.1.16 (#31105)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-31 11:59:07 +00:00
Michael Telatynski 43485594b5 Add relevant aria attribute for selected emoji in the emoji picker (#31125)
* Add relevant aria attribute for selected emoji in the emoji picker

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Add aria-multiselectable

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Do not specify aria-selected/pressed when element is disabled

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Use checkbox role for reaction picker as gridcell + aria-selected has very inconsistent screenreader support

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix keyboard handling for modified DOM structure

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix enter behaviour

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-31 11:49:59 +00:00
ElementRobot fdf54dd9c2 Localazy Download (#31145)
* [create-pull-request] automated change

* Update snapshot

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-31 11:22:39 +00:00
Michael Telatynski c7f07f4c29 Fix tooltips within context menu portals being unreliable (#31129)
* Fix tooltips within context menu portals being unreliable

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update snapshots

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Add test

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-31 09:00:01 +00:00
renovate[bot] bbb16f7ea9 Update definitelyTyped (#31099)
* Update definitelyTyped

* Make typescript happy

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-31 08:34:26 +00:00
ElementRobot 3fd102602e [create-pull-request] automated change (#31144)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-31 06:19:34 +00:00
Michael Telatynski af150b94ce Switch to NPM Trusted Publishing for shared-components (#31139)
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-30 17:17:49 +00:00
Florian Duros 299d7baf8b Avoid excessive re-render of room list and member list (#31131)
* fix(list view): avoid re-create `onFocus` function at each render of the child items

* fix(room list): update `onFocus` signature

* fix(member list): update `onFocus` signature

* fix(room list): avoid re-render at the beginning and end of the scroll

* test(room list): remove scrolling test and props

* test(member list): update member tile view tests

* test(room list): update `ListView` focus test

* test(member list): add `onFocus` test for member list tile
2025-10-30 14:55:15 +00:00
Florian Duros f297282bf6 fix: force counterpart resolve in jest config (#31136) 2025-10-30 09:59:27 +00:00
David Langley 3ae91d69da Make emoji picker height responsive. (#31130)
* Make the height of the emoji picker responsive.

* Add screenshots for the emoji picker and a one with reduced height.

* prettier
2025-10-30 09:31:02 +00:00
RiotRobot 1dfd92c1eb Upgrade dependency to matrix-js-sdk@39.1.0-rc.1 2025-10-30 09:04:27 +00:00
ElementRobot 1ec692c1e9 [create-pull-request] automated change (#31134)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-30 06:19:19 +00:00
David Langley d558fa79e0 Emoji Picker: Focused emoji does not move with the arrow keys (#30893)
* We should focus the node in the DOM so that the browser focus(with outline) matches the our internal RovingIndex state

* Don't move focus from the input if we are in "virtual" focus(via active descendant)
2025-10-29 16:16:03 +00:00
Florian Duros 2ab42df0c8 Fix audio player seek bar position (#31127)
* fix(audio): stop clock when the source audio reaches the end

* test(audio): add test for playback when audio source ended
2025-10-29 16:05:04 +00:00
David Langley a9993aef85 Add aria label to emoji picker search (#31126) 2025-10-29 13:52:16 +00:00
renovate[bot] 9830a8bc6e Update all non-major dependencies (#31107)
* Update all non-major dependencies

* Remove @types/rrweb dependency

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-29 11:12:24 +00:00
renovate[bot] fa3c3b4c8c Update Node.js to v24 (#31113)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 10:59:33 +00:00
renovate[bot] 8f7ded8747 Update browserslist (#31108)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 10:37:53 +00:00
renovate[bot] 68ead7c989 Update dependency @stylistic/eslint-plugin to v5.5.0 (#31110)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 10:33:48 +00:00
David Langley ae2acdf311 Use context provided RoomViewStore within the RoomView component hierarchy (#31077)
* Update ContentMessages.ts

Update ContentMessages.ts

* update PlaybackQueue.ts

* Update SpaceHierarchy.tsx

* Update ThreadView.tsx

* Update RoomCallBanner.tsx

* Update useRoomCall.tsx

* Update DateSeparator.tsx

* Update TimelineCard.tsx

* Update UserInfoBasicOptions

* Update slask-commands/utils.ts

* lint

* Update PlaybackQueue, MVoiceMessageBody and UserInfoBasicOptionsView tests.

* Update RoomHeader-test.tsx

* lint

* Add ts docs

* Update utils-test.tsx

* Update message-test.ts

* coverage

* lint

* Improve naming

---------

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-29 09:40:21 +00:00
renovate[bot] 209dfece21 Update dependency @types/react-dom to v19.2.2 (#31101)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 09:16:00 +00:00
renovate[bot] f7e1a7b90e Update playwright to v1.56.1 (#31104)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 09:15:18 +00:00
renovate[bot] 94ab980dc4 Update dependency eslint-plugin-storybook to v10 (#31111)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 09:14:28 +00:00
renovate[bot] c408e12437 Update nginxinc/nginx-unprivileged:alpine-slim Docker digest to 65a7f97 (#31096)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 09:09:39 +00:00
renovate[bot] 26b14dc2f8 Update dependency @sentry/browser to v10.22.0 (#31109)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 09:09:09 +00:00
renovate[bot] 542eb9d1ec Update GitHub Artifact Actions (#31112)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 09:08:43 +00:00
renovate[bot] 5bcbf4f370 Update typescript-eslint monorepo to v8.46.2 (#31106)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 09:07:33 +00:00
renovate[bot] a5e5125907 Update babel monorepo to v7.28.5 (#31098)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 09:05:49 +00:00
renovate[bot] e4e33cf239 Update dependency @element-hq/element-call-embedded to v0.16.1 (#31100)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 09:05:40 +00:00
renovate[bot] 3175377cb2 Update dependency testcontainers to v11.7.2 (#31102)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 09:05:24 +00:00
renovate[bot] 1c2b35d809 Update Node.js to 38a57b7 (#31097)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 09:04:02 +00:00
David Langley 80a7de4314 Address code smells from #30453 (#31083)
* check recents length

* Improve sorting logic in capabilities dialog

* Fix allowedHosts regex array check

* Remove double negative in filter checks

* prettier
2025-10-29 08:52:17 +00:00
ElementRobot 3e809cd661 [create-pull-request] automated change (#31121)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-29 06:26:10 +00:00
ElementRobot f8ec6b6f9b [create-pull-request] automated change (#31120)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-29 06:19:38 +00:00
Hubert Chathi b7db85146f Add a devtool for looking at users and their devices (#30983)
* add devtool for viewing users and their devices

* show number of devices

* apply changes from review

* Fix typo

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>

---------

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
2025-10-28 20:18:10 +00:00
RiotRobot 68e6b0f845 v1.12.3-rc.0
Docker / Docker Buildx (push) Failing after 49s
2025-10-28 15:07:21 +00:00
R Midhun Suresh 5888dfd29d Return RLS instance through function to avoid import side effect (#31091)
* Attach function that returns instance

So that just importing this file does not create a RLS instance.

* Fix jest test
2025-10-28 14:48:07 +00:00
RiotRobot d426063a22 Upgrade dependency to matrix-js-sdk@39.1.0-rc.0 2025-10-28 14:05:15 +00:00
Richard van der Hoff 09c3afd311 Improve logging in DeviceListener (#31082)
* Improve logging in `DeviceListener`

Sometimes we get a logline `4S is missing secrets` but it's hard to see *which*
secrets are missing. https://github.com/matrix-org/matrix-js-sdk/pull/5054
added a method to the js-sdk which allows us to get more info: use it here.

* Use getSecretStorageStatus for analytics reporting too

* Fix unit tests
2025-10-28 09:42:53 +00:00
Michael Telatynski f6731ec318 Show hover elements when keyboard focus is within an event tile (#31078)
* Show timestamps when keyboard focus is within an event tile

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Ensure toolbar navigation pattern works in MessageActionBar

This requires all buttons within to be roving by using the ref callback given by useRovingTabIndex

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Use PureComponent in EventTile to avoid mass re-rendering due to transitive onFocus/onBlur calls

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Remove unused timestamp event tile prop

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Use MessageTimestamp to generate the wrapping anchor so that focusing it brings up the tooltip

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Tweak MessageTimestamp

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Switch back to Component as we specify a shouldComponentUpdate already

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update jest tests

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update playwright timestamp masks

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Revert snapshot

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update snapshot

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix IRC layout

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Use PureComponent in EventTile to avoid mass re-rendering due to transitive onFocus/onBlur calls

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Remove unused timestamp event tile prop

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Use MessageTimestamp to generate the wrapping anchor so that focusing it brings up the tooltip

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Tweak MessageTimestamp

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Switch back to Component as we specify a shouldComponentUpdate already

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update jest tests

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update playwright timestamp masks

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Revert snapshot

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update snapshot

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix IRC layout

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Lint styles

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix layout picker

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update snapshots

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update screenshots

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix pcss comment

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate Playwright

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate Playwright

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-28 09:33:02 +00:00
ElementRobot 7e04998a58 [create-pull-request] automated change (#31090)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-28 06:19:25 +00:00
Will Hunt dae5b6b43b Remove allowVoipWithNoMedia feature flag (#31087)
* Remove allowVoipWithNoMedia feature flag

* whoops

* remove a string
2025-10-27 13:08:31 +00:00
Michael Telatynski 8376e43a03 Ensure toolbar navigation pattern works in MessageActionBar (#31080)
This requires all buttons within to be roving by using the ref callback given by useRovingTabIndex

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-27 12:34:17 +00:00
Michael Telatynski e528fefd4c Make Playwright screenshot test resilient to DST changes (#31089)
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-27 12:17:40 +00:00
ElementRobot 5e87f20cd8 [create-pull-request] automated change (#31084)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-25 06:18:31 +00:00
Will Hunt 7d9981e5dd Ensure sent markers are hidden when showing thread summary. (#31076)
* Ensure read markers are hidden when showing thread summary.

* lint

* update screenshot
2025-10-24 12:45:57 +00:00
ElementRobot 1d20a4c5ee [create-pull-request] automated change (#31075)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-24 06:27:09 +00:00
ElementRobot bc97560532 [create-pull-request] automated change (#31074)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-24 06:19:46 +00:00
David Baker a6316d99d5 bump shared components version 2025-10-23 15:56:17 +01:00
David Langley bea3574b30 Provide RoomViewStore from the RoomContext (#30980)
* Pass roomViewStore to the RoomView and add to the RoomContext.

* lint

* lint

* Make constants more DRY

* Make constants more DRY

* Commend non-null assertion on roomViewStore property of the RoomContext

* Update tsdocs.
2025-10-23 09:03:11 +00:00
Florian Duros 0e6bacffed Replace ViewWrapper by useMockedViewModel (#31067)
* feat: replace `ViewWrapper` by `useMockedViewModel`

* feat: update existing story
2025-10-23 08:06:06 +00:00
ElementRobot 9be323dfd0 [create-pull-request] automated change (#31068)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-23 06:20:23 +00:00
ElementRobot d6e50598cd [create-pull-request] automated change (#31059)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-22 06:27:20 +00:00
ElementRobot 41e33a0755 [create-pull-request] automated change (#31058)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-22 06:20:09 +00:00
Florian Duros 55a7bc5b13 fix: only export setLanguage for shared-component build (#31053) 2025-10-21 13:08:13 +00:00
RiotRobot b1fdf03236 Reset matrix-js-sdk back to develop branch 2025-10-21 11:53:36 +00:00
RiotRobot 39464f64ab Merge branch 'master' into develop 2025-10-21 11:53:15 +00:00
RiotRobot 09598bcb7a v1.12.2
Docker / Docker Buildx (push) Failing after 45s
2025-10-21 11:41:01 +00:00
RiotRobot 6e7dc4cc06 Upgrade dependency to matrix-js-sdk@39.0.0 2025-10-21 11:21:02 +00:00
Michael Telatynski 87fd279079 Fix sort order in space hierarchy (#30975)
* Fix sort order in space hierarchy

To match spec and not add unexpected sorting by space vs room

* Update SpaceHierarchy.tsx

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update snapshot

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Add test

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update snapshot

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-21 08:25:51 +00:00
Florian Duros 77c41d6789 Fix translation in dev mode (#31045)
* fix: use EW and shared component counterpart

* fix: exclude counterpart from build

* Revert "fix: use EW and shared component counterpart"

This reverts commit 1983d063c6b75a4f6e193e3c57e3bd9bae0888de.

* Revert "fix: exclude counterpart from build"

This reverts commit 8e41b137fc0b3d88c38921ac5762836e29c062f8.

* fix: force EW and shared components to use EW counterpart
2025-10-21 08:25:07 +00:00
ElementRobot 9e1d0367d0 [create-pull-request] automated change (#31049)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-21 06:19:51 +00:00
Florian Duros 8fd6e29f2d fix: don't display message preview of thread (#31043) 2025-10-20 14:35:57 +00:00
Florian Duros cbcceee970 doc: update install doc to link to caching section (#31046) 2025-10-20 14:22:48 +00:00
Florian Duros d0a8879971 Revert "A11y: move focus to right panel when opened" (#30999)
* Revert "A11y: move focus to right panel when opened (#30553)"

This reverts commit 0c498a66b1.

* test(e2e): update test
2025-10-20 12:08:45 +00:00
Marc e6e6f87d01 MVVM userinfo basic component (#30305)
* feat: mvvm userinfo basic component

* test: mvvm userinfobasic component

* chore: apply review. rename views, add comment and move some codes

* chore(review): move openDM method into viewmodel
2025-10-20 06:13:20 +00:00
Bojidar Marinov cf51b256ce Fix highlights in messages (or search results) breaking links (#30264)
* Fix highlights in messages (or search results) breaking links

Fixes #17011 and fixes #29807, by running the linkifier that turns text into links before the highlighter that adds highlights to text.

* Fix jest test

* Fix tests related to emojis and pills-inside-spoilers

* Remove dead code

* Address review comments around sanitizeParams

* Address review comment about linkify-matrix

* Fix code style

* Refactor if statement per review

---------

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-20 06:10:13 +00:00
ElementRobot 9d973c88f9 [create-pull-request] automated change (#31040)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-17 06:25:57 +00:00
ElementRobot e33894bed4 [create-pull-request] automated change (#31039)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-17 06:22:49 +00:00
David Baker 0468876aa0 Move some message utils out to their own file (#31035)
* Move some message utils out to their own file

In another attempt at import cycle breaking

* Also add the file

* Move tests
2025-10-16 08:17:46 +00:00
R Midhun Suresh c8f1c19517 Add missing dependency (#31034) 2025-10-15 16:45:49 +00:00
R Midhun Suresh 2598e4ea22 Move view model code to shared components package (#31024)
* Remove vm related code from element-web/src

* Add and export view model code from package

* Update imports

* Rewrite vm tests using vitest

* Add github action to run vm tests

* Fix lint errors

* Mvoe tests over to jest

* Try fixing code coverage

* Second attempt at fixing code coverage
2025-10-15 13:49:12 +00:00
renovate[bot] ac96ab0d46 Update react monorepo (#31014)
* Update react monorepo

* Update snapshots

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update shared-components snapshots

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-15 11:20:34 +00:00
renovate[bot] 949d0dc8a9 Update eslint-plugins (#31033)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-15 10:44:06 +00:00
renovate[bot] 0e0e928040 Update eslint-plugins (#31032)
* Update eslint-plugins

* Bump matrix-org

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-15 10:08:35 +00:00
David Baker c519438dad Add prepare script (#31030)
Removed it when we switched to publishing, but that doesn't really
make sense
2025-10-15 09:22:42 +00:00
David Baker 146e4772ac Change module API to be an instance getter (#31025)
* Change module API to be an instance getter

Helps with circular dependencies by not instantating the module API
on the initial evaluation of the files.

* Add basic test

* add another test
2025-10-15 09:20:48 +00:00
Florian Duros 6cfe197a38 Update sonar and jest config with new shared components path (#31029)
* fix: update jest config with new shared components path

* fix: update sonar config

* chore: add `storybook` & `@storybook/react-vite` to run the shared components tests
2025-10-15 09:08:49 +00:00
renovate[bot] a4a44a0c1c Update browserslist (#31021)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-15 08:37:57 +00:00
renovate[bot] 2ce2218549 Update typescript-eslint monorepo to v8.46.0 (#30921)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-15 08:21:23 +00:00
ElementRobot a7ddf1c88a [create-pull-request] automated change (#31028)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-15 06:26:00 +00:00
ElementRobot 1b0863483a [create-pull-request] automated change (#31027)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-15 06:20:01 +00:00
renovate[bot] 8bf2049f8a Update Node.js to cd951bb (#31020)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 18:07:24 +00:00
renovate[bot] abafde4b64 Update all non-major dependencies (#31011)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 18:04:06 +00:00
renovate[bot] 756e1769ba Update peter-evans/repository-dispatch action to v4 (#31017)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 17:39:38 +00:00
renovate[bot] 1e28cd2b49 Update playwright to v1.56.0 (#30672)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 17:35:24 +00:00
renovate[bot] 252546f085 Update definitelyTyped (#31008)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 17:12:16 +00:00
renovate[bot] a31dcaf157 Update nginxinc/nginx-unprivileged:alpine-slim Docker digest to 3040799 (#31019)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 16:27:24 +00:00
renovate[bot] 735d2bd981 Update actions/stale digest to 5f858e3 (#31018)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 16:27:07 +00:00
renovate[bot] ccd7f923d0 Update dependency @testing-library/jest-dom to v6.9.1 (#31013)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 16:26:35 +00:00
renovate[bot] 8f3c1ce05e Update peter-evans/dockerhub-description action to v5 (#31016)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 16:26:30 +00:00
renovate[bot] 124afe3bf3 Update actions/setup-node action to v6 (#31015)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 16:26:21 +00:00
renovate[bot] 02246020a2 Update dependency @sentry/browser to v10.19.0 (#31012)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 16:11:30 +00:00
renovate[bot] b0ee3c11ff Update dependency testcontainers to v11.7.1 (#31010)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 16:10:13 +00:00
renovate[bot] b7dd05bc97 Update dependency @formatjs/intl-segmenter to v11.7.12 (#31009)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-14 16:02:08 +00:00
RiotRobot 9c37cdf550 v1.12.2-rc.0
Docker / Docker Buildx (push) Failing after 53s
2025-10-14 14:41:41 +00:00
Michael Telatynski 56f6c1ef46 Fix html exports by adding SDKContext (#30987)
* Fix html exports by adding SDKContext

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* delint

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Add test

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-14 13:43:34 +00:00
David Baker b4396f5943 Remove auto-bump step from share component publishing (#31006)
* Remove auto-bump step from share component publishing

Avoids having to give release bot permission to commit directly to
the branch for now.

* Pass npm token & remove version bump param

* On this step?

* We have to provide a registry URL????

* Rename as it doesn't really release
2025-10-14 13:37:35 +00:00
RiotRobot 53ce37de9e Upgrade dependency to matrix-js-sdk@39.0.0-rc.0 2025-10-14 13:37:08 +00:00
Michael Telatynski b3188b47be Simplify favicons and other web icons (#31000)
* Simplify favicons and other web icons

browserconfig.xml seems to have died with Internet Explorer
`apple-touch-icon` is awfully documented but seems like larger sizes are now preferred
Use PNG for the favicon as things now support it across the board, we could even consider moving to SVG favicons in the future

Optimised using oxipng, this is to simplify icon replacement in `element-web-bin`

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix paths

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update tests

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Remove border around favicons

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Add test

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Add test

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-14 13:08:52 +00:00
David Baker 5dc8edcae0 Build the published shared components (#30986)
* Move shared components to a packages/ directory

so they can be publish more sensibly

* Iterate towards split out shared-components module

 * Move shared component source into src/ subdir
 * Fix up imports
 * Include shared components in babel-ing (again)

* Remove now unused dependencies

* Update import in storybook preview

* ...except of course they aren't unused

if we import the shared components by source

* Ignore shared components deps

* Add shared-components to i18n paths

and upgrade web-i18n to version that supports doing so

* Move storybook stuff to shared-components

* Seems we don't need this anymore...

* Remove unused deps

and remove storybook plugin from eslint

* Presumably working-directory is only valid on run steps

* Ignore dep & run prettier

* Prettier on knips.ts

* Hopefully run in right dir

* Remember how to software write

* Okay... how about THIS way?

* Oh right, they were git ignored. Sigh.

* Add concurrently

* Ignore in knip

* Better?

* Paaaaaaaackageeeeeeees

* More packages

* Move playwright snapshots

* Still need a custom snapshots dir

* Build shared components in their separate package

Port https://github.com/element-hq/element-web/pull/30963
to https://github.com/element-hq/element-web/pull/30962

* Add prepare script

* try making it a postinstall

* no, this probably does want to be prepare

postinstall doesn't really make sense since you would not have the
dev dependencies at that point

* Add workflow to publish shared components

* Put in the namespace

* Add eslint back

* Oh, now knip sees them

* Fix another import

* Don't lint shared-components with everything else

Okay, eslint & tsconfig are tied too closely for this to work and
running tsc on the shared components will need its deps installing

* Maybe lint shared components

please?

* Not quite

* Fix name, add main, move patch-package to dependencies

Although the only patched package is a dev dependency, but the postinstall
will fail if patch-package isn't there.

* Switch to npm for publishing

Mostly because knip seems to this that yarn publish doesn't exist,
although actually it seems super confused about versioning so let's
just skip it.

* Also hopefully enable provenance

because why not

* Maybe get exports right

* Add richlist

* Yeah, of course the keys are ordered

why would the keys not be ordered

* Build web resources first

Otherwise yarn prepare won't work

* Fix exports

and add web-i18n as a dep

* prettier

* build res for static analysis

* more build:res

* ViewModel is only an interface

so export type

* Prettier

* Bump to 5

as I'll do at least one test with the publish action
2025-10-14 10:04:23 +00:00
Florian Duros 0d1da4ff45 doc: update path in MVVM doc (#31001) 2025-10-14 09:00:03 +00:00
ElementRobot c4d6a28473 [create-pull-request] automated change (#31002)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-14 06:18:46 +00:00
Will Hunt 6838969792 Stabilise user profile timezones (#30815)
* Fix imports

* lint

* update test

* log

* Update comment
2025-10-13 11:41:57 +00:00
David Baker 2698ad422e Move shared components to a packages/ directory (#30962)
* Move shared components to a packages/ directory

so they can be publish more sensibly

* Iterate towards split out shared-components module

 * Move shared component source into src/ subdir
 * Fix up imports
 * Include shared components in babel-ing (again)

* Remove now unused dependencies

* Update import in storybook preview

* ...except of course they aren't unused

if we import the shared components by source

* Ignore shared components deps

* Add shared-components to i18n paths

and upgrade web-i18n to version that supports doing so

* Move storybook stuff to shared-components

* Seems we don't need this anymore...

* Remove unused deps

and remove storybook plugin from eslint

* Presumably working-directory is only valid on run steps

* Ignore dep & run prettier

* Prettier on knips.ts

* Hopefully run in right dir

* Remember how to software write

* Okay... how about THIS way?

* Oh right, they were git ignored. Sigh.

* Add concurrently

* Ignore in knip

* Better?

* Paaaaaaaackageeeeeeees

* More packages

* Move playwright snapshots

* Still need a custom snapshots dir

* Add eslint back

* Oh, now knip sees them

* Fix another import

* Don't lint shared-components with everything else

Okay, eslint & tsconfig are tied too closely for this to work and
running tsc on the shared components will need its deps installing

* Maybe lint shared components

please?

* Not quite

* Remove storybook again

Re-check if it does work without it

* Remove storybook eslint plugin

as we're not linting storybook here anymore

* Remove this too

* We do need it here though
2025-10-13 10:54:50 +00:00
ElementRobot c96da5dbf8 [create-pull-request] automated change (#30998)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-13 06:27:41 +00:00
ElementRobot a2f00b36c5 [create-pull-request] automated change (#30995)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-11 06:19:22 +00:00
ElementRobot 795bbfc68e [create-pull-request] automated change (#30990)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-10 06:32:54 +00:00
ElementRobot 34206ff6f6 [create-pull-request] automated change (#30989)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-10 06:22:13 +00:00
Michael Telatynski bc7b50f97c Fix platform settings race condition and make auto-launch tri-state (#30977)
* Fix race condition with platform settings not being read correctly

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Allow Desktop app to be auto-started minimised or focused

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* i18n

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Use onChange prop

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Add tests

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Update res/css/views/elements/_SettingsDropdown.pcss

Co-authored-by: Florian Duros <florianduros@element.io>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
Co-authored-by: Florian Duros <florianduros@element.io>
2025-10-09 13:20:53 +00:00
Florian Duros 3098eba4f2 Fix: member count in header and member list (#30982)
* fix: same member count in header and member list

* test: update test

* chore: use `useRoomMemberCount` to compute member count in member list

* test: add event emitter function on mocked `room.currentState`
2025-10-09 10:40:20 +00:00
Florian Duros b45488fc84 Fix duration of voice message in timeline (#30973)
* fix: duration of voice message in timeline

* Revert "Fix clocks rendering at 00:00 when playback had not begun."

This reverts commit 68bcfbed3e37e0a8c9529e92a3e17a5bc70bf7ed.

* refactor: cleaner clock states check

* refactor: cleaner `onPlaybackStateChange` condition

* fix: `timeSeconds` is always a number

* refactor: allow playing and paused state to update clock state

* test: add test

* test: add moar test

* refactor: use `currentClockState`
2025-10-09 09:10:57 +00:00
ElementRobot 4db6ff578d [create-pull-request] automated change (#30984)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-09 06:19:19 +00:00
Michael Telatynski c219b39c2a Remove console log from onEventSentinelUpdated (#30976)
Remove console log for event sentinel updates.
2025-10-08 14:21:44 +00:00
Richard van der Hoff 4a0e8d661f Playwright test for history sharing on invite (#30948)
* Playwright: `getCurrentRoomIdFromUrl`

Helper function to fish a room ID out of the URL

* Playwright: use updated `Credentials` class from common lib

Pick up the extended `Credentials` interface that was added in
https://github.com/element-hq/element-modules/pull/80.

* Playwright: use `routeConfigJson` from common lib

https://github.com/element-hq/element-modules/pull/81 added a utility function
for building and routing `config.json`; we should use it.

* Playwright test for history sharing on invite

Fixes https://github.com/element-hq/element-meta/issues/2920

* Avoid use of CSS in playwright locators
2025-10-08 09:49:11 +00:00
ElementRobot 0fcc4d15c8 [create-pull-request] automated change (#30971)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-08 06:26:57 +00:00
ElementRobot 1fe35a92cd [create-pull-request] automated change (#30970)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-08 06:20:31 +00:00
Will Hunt 0f530f636b Fix voice notes rendering at 00:00 when playback had not begun. (#30961)
* Fix clocks rendering at 00:00 when playback had not begun.

* Add a rendering test

* Add a test

* remove only

* add another test
2025-10-07 22:03:25 +00:00
RiotRobot 25f4853d97 Reset matrix-js-sdk back to develop branch 2025-10-07 12:18:10 +00:00
RiotRobot b653f49119 Merge branch 'master' into develop 2025-10-07 12:17:54 +00:00
David Langley 42fe7965d6 Room List: Extend the viewport to avoid so many black spots when scrolling the room list (#30867)
* Add overscan to avoid so many black spots when scrolling

* increaseViewportBy seems more like what we want

* Use constants and some comments for the magic numebrs.
2025-10-06 17:15:15 +00:00
Will Hunt 34fc921cd3 Hide calling buttons in room header before a room is created (#30816)
* Hide call buttons until room has been created.

* lint

* lint

* Update snapshot

* update snaps
2025-10-06 14:17:31 +00:00
David Baker c08775588d Move ResizerNotifier into SDKContext (#30939)
* Move ResizerNotifier into SDKContext

so we don't have to pass it into RoomView

* Fix test

* Unused import

* Add tests

* Remove a bunch of resizeNotifier props

* Remove more resizeNotifier props

* Add resizenotifier to test

* Add more sdkcontext wrappers in tests

* More sdkcontext wrappers

* Even more sdkcontext wrappers

* Add test to make sonarcloud happy

* Context isn't always there unlike props

* Test actual resizing too

* Remove commented line
2025-10-06 09:23:06 +00:00
ElementRobot 87fdf96192 [create-pull-request] automated change (#30950)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-06 06:27:31 +00:00
ElementRobot 6479b92837 [create-pull-request] automated change (#30949)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-04 06:25:19 +00:00
Michael Telatynski e83ddbc98a Improve handling of animated images, add support for AVIF animations (#30932)
* Only set MSC4230 is_animated flag if we are able to tell if the media is animated

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Set blob type correctly to not need to weave the mimetype around

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Use ImageDecoder to determine whether media is animated or not, adding support for AVIF and other formats

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix test

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Add test

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Fix test

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2025-10-03 13:29:10 +00:00
Hubert Chathi 5f084c28c3 Update key storage toggle when key storage status changes (#30934)
* update key storage toggle when key storage status changes

Listen for the CryptoEvent.KeyBackupStatus event and update the state
when it changes.

* fixup! update key storage toggle when key storage status changes

* add comment about handling event
2025-10-03 13:04:06 +00:00
ElementRobot da827129c7 [create-pull-request] automated change (#30943)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-03 06:25:12 +00:00
ElementRobot 7bac218065 [create-pull-request] automated change (#30942)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-03 06:18:54 +00:00
David Baker 4b323f2bd3 Fix jitsi widget popout (#30908)
* Fix jitsi widget popout

Unfortunately I don't think playwright or jest can write a test for
something successfully opening a new tab.

Fixes https://github.com/element-hq/element-desktop/issues/2527

* On second thoughts, this is probably overkill

* Clarify

* Add test

* Unused import
2025-10-02 12:46:55 +00:00
Florian Duros aa196b046b chore: add compound web storybook to EW storybook (#30936) 2025-10-02 09:20:14 +00:00
ElementRobot 8599f4b5df [create-pull-request] automated change (#30935)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-02 06:18:16 +00:00
renovate[bot] 2cf79b3fef Update all non-major dependencies (#30901)
* Update all non-major dependencies

* Update snapshot

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: David Baker <dbkr@users.noreply.github.com>
2025-10-01 16:45:44 +00:00
renovate[bot] 98dcd10fbe Update Node.js to 5e638ea (#30915)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-01 15:48:04 +00:00
Florian Duros f9e718644a Improve keyboard navigation on invite dialog (#30930)
* fix: improve keyboard navigation on `RichList`

* test: list focus handling

* test: update snapshot

* refactor: rename `useListKeydown` to `useListKeyboardNavigation`
2025-10-01 15:26:34 +00:00
Richard van der Hoff 2d5f1b3fb7 Prefer UIA flows with supported UIA steps (#30926)
https://github.com/element-hq/matrix-react-sdk/pull/34 added support for a
custom UIA stage called `org.matrix.cross_signing_reset`, but neglected to add
that stage to the list of supported stages that is passed to the js-sdk. As a
result, if the server chooses to offer alternative flows that use unsupported
steps (as is proposed in MSC4312), the js-sdk will be unable to reliably choose between them.
2025-10-01 14:35:27 +00:00
Florian Duros 625595cb8c Enhance accessibility of dropdown (#30928)
* fix: enhance accessibility of dropdown component by adding tabIndex and improving keyboard navigation

* test: update snapshot

* feat: use tabindex -1

* test: add tests
2025-10-01 13:26:42 +00:00
ElementRobot aa073893ab [create-pull-request] automated change (#30857)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-01 10:26:08 +00:00
renovate[bot] b0c81c46ca Update dependency testcontainers to v11.6.0 (#30924)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-01 10:24:48 +00:00
Florian Duros 9cecd52477 Improve invite dialog ui - Part 2 (#30836)
* feat: add `Pill` component

* chore: add `react-merge-refs` lib

* feat: add `PillInput` component

* feat: use new pills component in invite dialog

* test: update invite dialog selector

* test(e2e): update test locators

* test(e2e): update screenshot
2025-10-01 09:03:43 +00:00
ElementRobot 3d5749bfc7 [create-pull-request] automated change (#30927)
Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
2025-10-01 06:23:51 +00:00
renovate[bot] 8de035ee39 Update dependency caniuse-lite to v1.0.30001745 (#30918)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 18:28:35 +00:00
renovate[bot] cea6e14220 Update dependency @types/react to v19.1.14 (#30917)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 18:28:09 +00:00
renovate[bot] 0bc8a9d259 Update dependency @types/node to v18.19.127 (#30916)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 18:27:46 +00:00
renovate[bot] ece9230110 Update nginxinc/nginx-unprivileged:alpine-slim Docker digest to 13d1e0a (#30914)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 18:26:46 +00:00
R Midhun Suresh 2f8e2be09d Improve accessibility of the `<AvatarSetting> component (#30907)
* Always use an accessible button with base avatar rendered inside it

* Rename avatarAltText to accessibleName

* Improve accessibility

* Fix tests
2025-09-30 17:53:37 +00:00
renovate[bot] b6046d2120 Update guibranco/github-status-action-v2 digest to 5530c59 (#30913)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 16:51:35 +00:00
renovate[bot] 7039123c46 Update docker/login-action digest to 5e57cd1 (#30912)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 16:51:13 +00:00
renovate[bot] 6e484aeac7 Update dependency @sentry/browser to v10.15.0 (#30922)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 15:17:35 +00:00
renovate[bot] 053b2f8845 Update actions/cache digest to 0057852 (#30911)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 14:53:39 +00:00
renovate[bot] c3755effba Update fontsource monorepo to v5.2.8 (#30920)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 14:48:12 +00:00
renovate[bot] 5c205350e3 Update dependency @stylistic/eslint-plugin to v5.4.0 (#30923)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-30 14:29:15 +00:00
727 changed files with 26729 additions and 8854 deletions
+8 -6
View File
@@ -1,11 +1,13 @@
/*
Copyright 2025 Element Creations Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
module.exports = {
plugins: ["matrix-org", "eslint-plugin-react-compiler"],
extends: [
"plugin:matrix-org/babel",
"plugin:matrix-org/react",
"plugin:matrix-org/a11y",
"plugin:storybook/recommended",
],
extends: ["plugin:matrix-org/babel", "plugin:matrix-org/react", "plugin:matrix-org/a11y"],
parserOptions: {
project: ["./tsconfig.json"],
},
+2 -2
View File
@@ -44,7 +44,7 @@ jobs:
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
# Disable cache on Windows as it is slower than not caching
# https://github.com/actions/setup-node/issues/975
@@ -66,7 +66,7 @@ jobs:
run: VERSION=$(scripts/get-version-from-git.sh) yarn build
- name: Upload Artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: webapp-${{ matrix.image }}
path: webapp
+1 -1
View File
@@ -62,7 +62,7 @@ jobs:
dpkg-gencontrol -v"$VERSION" -ldebian/tmp/DEBIAN/changelog
dpkg-deb -Zxz --root-owner-group --build debian/tmp element-web.deb
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: element-web.deb
path: element-web.deb
+2 -2
View File
@@ -28,7 +28,7 @@ jobs:
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
node-version: "lts/*"
@@ -53,7 +53,7 @@ jobs:
- run: mv dist/element-*.tar.gz dist/develop.tar.gz
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: webapp
path: dist/develop.tar.gz
+4 -4
View File
@@ -37,14 +37,14 @@ jobs:
install: true
- name: Login to Docker Hub
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3
if: github.event_name != 'pull_request'
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3
if: github.event_name != 'pull_request'
with:
registry: ghcr.io
@@ -132,7 +132,7 @@ jobs:
cosign sign --yes ${images}
- name: Update repo description
uses: peter-evans/dockerhub-description@432a30c9e07499fd01da9f8a49f0faf9e0ca5b77 # v4
uses: peter-evans/dockerhub-description@1b9a80c056b620d92cedb9d9b5a223409c68ddfa # v5
if: github.event_name != 'pull_request'
continue-on-error: true
with:
@@ -141,7 +141,7 @@ jobs:
repository: vectorim/element-web
- name: Repository Dispatch
uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3
uses: peter-evans/repository-dispatch@5fc4efd1a4797ddb68ffd0714a238564e4cc0e6f # v4
if: github.event_name != 'pull_request'
with:
repository: element-hq/element-web-pro
+1 -1
View File
@@ -33,7 +33,7 @@ jobs:
repository: matrix-org/matrix-js-sdk
path: matrix-js-sdk
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
cache-dependency-path: element-web/yarn.lock
@@ -25,7 +25,7 @@ jobs:
actions: read
steps:
- name: Download HTML report
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
run-id: ${{ github.event.workflow_run.id }}
+9 -9
View File
@@ -54,7 +54,7 @@ jobs:
with:
repository: element-hq/element-web
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
node-version: "lts/*"
@@ -74,7 +74,7 @@ jobs:
run: VERSION=$(scripts/get-version-from-git.sh) yarn build
- name: Upload Artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: webapp
path: webapp
@@ -128,12 +128,12 @@ jobs:
repository: element-hq/element-web
- name: 📥 Download artifact
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
name: webapp
path: webapp
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
cache-dependency-path: yarn.lock
@@ -147,7 +147,7 @@ jobs:
run: echo "version=$(yarn list --pattern @playwright/test --depth=0 --json --non-interactive --no-progress | jq -r '.data.trees[].name')" >> $GITHUB_OUTPUT
- name: Cache playwright binaries
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
id: playwright-cache
with:
path: ~/.cache/ms-playwright
@@ -172,7 +172,7 @@ jobs:
- name: Upload blob report to GitHub Actions Artifacts
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: all-blob-reports-${{ matrix.project }}-${{ matrix.runner }}
path: blob-report
@@ -200,7 +200,7 @@ jobs:
persist-credentials: false
repository: element-hq/element-web
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
if: inputs.skip != true
with:
cache: "yarn"
@@ -212,7 +212,7 @@ jobs:
- name: Download blob reports from GitHub Actions Artifacts
if: inputs.skip != true
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
pattern: all-blob-reports-*
path: all-blob-reports
@@ -228,7 +228,7 @@ jobs:
# Upload the HTML report even if one of our reporters fails, this can happen when stale screenshots are detected
- name: Upload HTML report
if: always() && inputs.skip != true
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: html-report
path: playwright-report
+1 -1
View File
@@ -28,7 +28,7 @@ jobs:
Exercise caution. Use test accounts.
- name: 📥 Download artifact
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
run-id: ${{ github.event.workflow_run.id }}
@@ -0,0 +1,40 @@
name: Publish shared component npm package
on:
workflow_dispatch: {}
concurrency: release
jobs:
publish:
name: "Publish"
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write
steps:
- name: 🧮 Checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- name: 🔧 Set up node environment
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
node-version-file: ".node-version"
registry-url: "https://registry.npmjs.org"
# Ensure npm 11.5.1 or later is installed
- name: Update npm
run: npm install -g npm@latest
# Need to setup element web too as it needs the translations
- name: 🛠️ Setup EW
run: yarn install --pure-lockfile
- name: 🛠️ Setup
# When running `install` it also calls the `prepare` step which generates
# a build
run: yarn --cwd packages/shared-components install --pure-lockfile
- name: 🚀 Publish to npm
working-directory: packages/shared-components
run: npm publish --access public --tag test --provenance
@@ -27,7 +27,7 @@ jobs:
run: "sudo apt-get install -y tree"
- name: Download Diffs
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
run-id: ${{ github.event.workflow_run.id }}
@@ -26,45 +26,41 @@ jobs:
persist-credentials: false
repository: element-hq/element-web
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
node-version: "lts/*"
- name: Install element web dependencies
run: yarn install --frozen-lockfile
- name: Install dependencies
working-directory: packages/shared-components
run: yarn install --frozen-lockfile
- name: Get installed Playwright version
working-directory: packages/shared-components
id: playwright
run: echo "version=$(yarn list --pattern @playwright/test --depth=0 --json --non-interactive --no-progress | jq -r '.data.trees[].name')" >> $GITHUB_OUTPUT
- name: Cache playwright binaries
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
id: playwright-cache
with:
path: ~/.cache/ms-playwright
key: ${{ runner.os }}-${{ runner.arch }}-playwright-${{ steps.playwright.outputs.version }}-onlyshell
- name: Install Playwright browsers
working-directory: packages/shared-components
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: "yarn playwright install --with-deps --only-shell"
- name: Build Element Web resources
# Needed to prepare language files
run: "yarn build:res"
- name: Build storybook dependencies
# When the first test is ran, it will fail because the dependencies are not yet built.
# This step is to ensure that the dependencies are built before running the tests.
run: "yarn test:storybook:ci"
continue-on-error: true
- name: Run Visual tests
run: "yarn test:storybook:ci"
run: "yarn --cwd packages/shared-components test:storybook:ci"
- name: Upload received images & diffs
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: received-images
path: playwright/shared-component-received
path: packages/shared-components/playwright/shared-component-received
+17 -5
View File
@@ -24,7 +24,7 @@ jobs:
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
node-version: "lts/*"
@@ -35,6 +35,12 @@ jobs:
- name: Typecheck
run: "yarn run lint:types"
- name: Install Shared Component Dependencies
run: "yarn --cwd packages/shared-components install"
- name: Typecheck Shared Components
run: "yarn --cwd packages/shared-components run lint:types"
i18n_lint:
name: "i18n Check"
uses: matrix-org/matrix-web-i18n/.github/workflows/i18n_check.yml@main
@@ -69,7 +75,7 @@ jobs:
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
node-version: "lts/*"
@@ -81,13 +87,19 @@ jobs:
- name: Run Linter
run: "yarn run lint:js"
- name: Install Shared Component Deps
run: "yarn --cwd packages/shared-components install --frozen-lockfile"
- name: Run Linter
run: "yarn --cwd packages/shared-components run lint:js"
style_lint:
name: "Style Lint"
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
node-version: "lts/*"
@@ -105,7 +117,7 @@ jobs:
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
node-version: "lts/*"
@@ -123,7 +135,7 @@ jobs:
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
node-version: "lts/*"
+61 -8
View File
@@ -29,8 +29,8 @@ env:
permissions: {}
jobs:
jest:
name: Jest
jest_ew:
name: Jest (Element Web)
runs-on: ubuntu-24.04
strategy:
fail-fast: false
@@ -44,7 +44,7 @@ jobs:
repository: ${{ inputs.matrix-js-sdk-sha && 'element-hq/element-web' || github.repository }}
- name: Yarn cache
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
node-version: "lts/*"
cache: "yarn"
@@ -55,7 +55,7 @@ jobs:
JS_SDK_GITHUB_BASE_REF: ${{ inputs.matrix-js-sdk-sha }}
- name: Jest Cache
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: /tmp/jest_cache
key: ${{ hashFiles('**/yarn.lock') }}
@@ -84,7 +84,7 @@ jobs:
- name: Upload Artifact
if: env.ENABLE_COVERAGE == 'true'
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: coverage-${{ matrix.runner }}
path: |
@@ -93,18 +93,18 @@ jobs:
complete:
name: jest-tests
needs: jest
needs: jest_ew
if: always()
runs-on: ubuntu-24.04
permissions:
statuses: write
steps:
- if: needs.jest.result != 'skipped' && needs.jest.result != 'success'
- if: needs.jest_ew.result != 'skipped' && needs.jest_ew.result != 'success'
run: exit 1
- name: Skip SonarCloud in merge queue
if: github.event_name == 'merge_group' || inputs.disable_coverage == 'true'
uses: guibranco/github-status-action-v2@741ea90ba6c3ca76fe0d43ba11a90cda97d5e685
uses: guibranco/github-status-action-v2@5530c593759f489bba08272e96986ffc571c1ea1
with:
authToken: ${{ secrets.GITHUB_TOKEN }}
state: success
@@ -112,3 +112,56 @@ jobs:
context: SonarCloud Code Analysis
sha: ${{ github.sha }}
target_url: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
jest_sc:
name: Jest (Shared Components)
runs-on: ubuntu-24.04
steps:
- name: Checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
with:
repository: ${{ inputs.matrix-js-sdk-sha && 'element-hq/element-web' || github.repository }}
- name: Yarn cache
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
node-version: "lts/*"
cache: "yarn"
- name: Install EW Deps
run: "yarn install"
- name: Install Shared Component Deps
working-directory: "packages/shared-components"
run: "yarn install"
- name: Jest Cache
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: /tmp/jest_cache
key: ${{ hashFiles('**/yarn.lock') }}
- name: Get number of CPU cores
id: cpu-cores
uses: SimenB/github-actions-cpu-cores@97ba232459a8e02ff6121db9362b09661c875ab8 # v2
- name: Run tests
working-directory: "packages/shared-components"
run: |
yarn test \
--coverage=${{ env.ENABLE_COVERAGE }} \
--ci \
--max-workers ${{ steps.cpu-cores.outputs.count }} \
--cacheDirectory /tmp/jest_cache
env:
# tell jest to use coloured output
FORCE_COLOR: true
- name: Upload Artifact
if: env.ENABLE_COVERAGE == 'true'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: coverage-sharedcomponents
path: |
packages/shared-components/coverage
!packages/shared-components/coverage/lcov-report
+1 -1
View File
@@ -12,7 +12,7 @@ jobs:
issues: write
pull-requests: write
steps:
- uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f # v10
- uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10
with:
operations-per-run: 100
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6
with:
cache: "yarn"
node-version: "lts/*"
+4 -1
View File
@@ -4,7 +4,6 @@
/key.pem
/lib
/node_modules
/packages/
/webapp
/.npmrc
/*.log
@@ -34,3 +33,7 @@ electron/pub
*storybook.log
storybook-static
/packages/shared-components/node_modules
/packages/shared-components/dist
/packages/shared-components/src/i18nKeys.d.ts
+1 -1
View File
@@ -1 +1 @@
22
24
+79
View File
@@ -1,3 +1,82 @@
Changes in [1.12.4](https://github.com/element-hq/element-web/releases/tag/v1.12.4) (2025-11-18)
================================================================================================
## ✨ Features
* Apply aria-hidden to emoji in SAS verification ([#31204](https://github.com/element-hq/element-web/pull/31204)). Contributed by @t3chguy.
* Add options to hide header and composer of room view for the module api ([#31095](https://github.com/element-hq/element-web/pull/31095)). Contributed by @florianduros.
* Experimental Module API Additions ([#30863](https://github.com/element-hq/element-web/pull/30863)). Contributed by @dbkr.
* Change polls to use fieldset/legend markup ([#31160](https://github.com/element-hq/element-web/pull/31160)). Contributed by @langleyd.
* Use compound Button styles for Jitsi button ([#31159](https://github.com/element-hq/element-web/pull/31159)). Contributed by @Half-Shot.
* Add FocusLock to emoji picker ([#31146](https://github.com/element-hq/element-web/pull/31146)). Contributed by @langleyd.
* Move room name, avatar, and topic to IOpts. ([#30981](https://github.com/element-hq/element-web/pull/30981)). Contributed by @kaylendog.
* Add a devtool for looking at users and their devices ([#30983](https://github.com/element-hq/element-web/pull/30983)). Contributed by @uhoreg.
## 🐛 Bug Fixes
* Fix room list handling of membership changes ([#31197](https://github.com/element-hq/element-web/pull/31197)). Contributed by @t3chguy.
* Fix room list unable to be resized when displayed after a module ([#31186](https://github.com/element-hq/element-web/pull/31186)). Contributed by @florianduros.
* Inhibit keyboard highlights in dialogs when effector is not in focus ([#31181](https://github.com/element-hq/element-web/pull/31181)). Contributed by @t3chguy.
* Strip mentions from forwarded messages ([#30884](https://github.com/element-hq/element-web/pull/30884)). Contributed by @twassman.
* Don't allow pin or edit of messages with a send status ([#31158](https://github.com/element-hq/element-web/pull/31158)). Contributed by @langleyd.
* Hide room header buttons if the room hasn't been created yet. ([#31092](https://github.com/element-hq/element-web/pull/31092)). Contributed by @Half-Shot.
* Fix screen readers not indicating the emoji picker search field is focused. ([#31128](https://github.com/element-hq/element-web/pull/31128)). Contributed by @langleyd.
* Fix emoji picker highlight missing when not active element ([#31148](https://github.com/element-hq/element-web/pull/31148)). Contributed by @t3chguy.
* Add relevant aria attribute for selected emoji in the emoji picker ([#31125](https://github.com/element-hq/element-web/pull/31125)). Contributed by @t3chguy.
* Fix tooltips within context menu portals being unreliable ([#31129](https://github.com/element-hq/element-web/pull/31129)). Contributed by @t3chguy.
* Avoid excessive re-render of room list and member list ([#31131](https://github.com/element-hq/element-web/pull/31131)). Contributed by @florianduros.
* Make emoji picker height responsive. ([#31130](https://github.com/element-hq/element-web/pull/31130)). Contributed by @langleyd.
* Emoji Picker: Focused emoji does not move with the arrow keys ([#30893](https://github.com/element-hq/element-web/pull/30893)). Contributed by @langleyd.
* Fix audio player seek bar position ([#31127](https://github.com/element-hq/element-web/pull/31127)). Contributed by @florianduros.
* Add aria label to emoji picker search ([#31126](https://github.com/element-hq/element-web/pull/31126)). Contributed by @langleyd.
Changes in [1.12.3](https://github.com/element-hq/element-web/releases/tag/v1.12.3) (2025-11-04)
================================================================================================
## 🦖 Deprecations
* Remove allowVoipWithNoMedia feature flag ([#31087](https://github.com/element-hq/element-web/pull/31087)). Contributed by @Half-Shot.
## ✨ Features
* Change module API to be an instance getter ([#31025](https://github.com/element-hq/element-web/pull/31025)). Contributed by @dbkr.
## 🐛 Bug Fixes
* Show hover elements when keyboard focus is within an event tile ([#31078](https://github.com/element-hq/element-web/pull/31078)). Contributed by @t3chguy.
* Ensure toolbar navigation pattern works in MessageActionBar ([#31080](https://github.com/element-hq/element-web/pull/31080)). Contributed by @t3chguy.
* Ensure sent markers are hidden when showing thread summary. ([#31076](https://github.com/element-hq/element-web/pull/31076)). Contributed by @Half-Shot.
* Fix translation in dev mode ([#31045](https://github.com/element-hq/element-web/pull/31045)). Contributed by @florianduros.
* Fix sort order in space hierarchy ([#30975](https://github.com/element-hq/element-web/pull/30975)). Contributed by @t3chguy.
* New Room list: don't display message preview of thread ([#31043](https://github.com/element-hq/element-web/pull/31043)). Contributed by @florianduros.
* Revert "A11y: move focus to right panel when opened" ([#30999](https://github.com/element-hq/element-web/pull/30999)). Contributed by @florianduros.
* Fix highlights in messages (or search results) breaking links ([#30264](https://github.com/element-hq/element-web/pull/30264)). Contributed by @bojidar-bg.
* Add prepare script ([#31030](https://github.com/element-hq/element-web/pull/31030)). Contributed by @dbkr.
* Fix html exports by adding SDKContext ([#30987](https://github.com/element-hq/element-web/pull/30987)). Contributed by @t3chguy.
Changes in [1.12.2](https://github.com/element-hq/element-web/releases/tag/v1.12.2) (2025-10-21)
================================================================================================
## ✨ Features
* Room List: Extend the viewport to avoid so many black spots when scrolling the room list ([#30867](https://github.com/element-hq/element-web/pull/30867)). Contributed by @langleyd.
* Hide calling buttons in room header before a room is created ([#30816](https://github.com/element-hq/element-web/pull/30816)). Contributed by @Half-Shot.
* Improve invite dialog ui - Part 2 ([#30836](https://github.com/element-hq/element-web/pull/30836)). Contributed by @florianduros.
## 🐛 Bug Fixes
* Fix platform settings race condition and make auto-launch tri-state ([#30977](https://github.com/element-hq/element-web/pull/30977)). Contributed by @t3chguy.
* Fix: member count in header and member list ([#30982](https://github.com/element-hq/element-web/pull/30982)). Contributed by @florianduros.
* Fix duration of voice message in timeline ([#30973](https://github.com/element-hq/element-web/pull/30973)). Contributed by @florianduros.
* Fix voice notes rendering at 00:00 when playback had not begun. ([#30961](https://github.com/element-hq/element-web/pull/30961)). Contributed by @Half-Shot.
* Improve handling of animated images, add support for AVIF animations ([#30932](https://github.com/element-hq/element-web/pull/30932)). Contributed by @t3chguy.
* Update key storage toggle when key storage status changes ([#30934](https://github.com/element-hq/element-web/pull/30934)). Contributed by @uhoreg.
* Fix jitsi widget popout ([#30908](https://github.com/element-hq/element-web/pull/30908)). Contributed by @dbkr.
* Improve keyboard navigation on invite dialog ([#30930](https://github.com/element-hq/element-web/pull/30930)). Contributed by @florianduros.
* Prefer UIA flows with supported UIA stages ([#30926](https://github.com/element-hq/element-web/pull/30926)). Contributed by @richvdh.
* Enhance accessibility of dropdown ([#30928](https://github.com/element-hq/element-web/pull/30928)). Contributed by @florianduros.
* Improve accessibility of the `\<AvatarSetting> component ([#30907](https://github.com/element-hq/element-web/pull/30907)). Contributed by @MidhunSureshR.
Changes in [1.12.1](https://github.com/element-hq/element-web/releases/tag/v1.12.1) (2025-10-07)
================================================================================================
## ✨ Features
+3 -3
View File
@@ -1,7 +1,7 @@
# syntax=docker.io/docker/dockerfile:1.18-labs@sha256:79cdc14e1c220efb546ad14a8ebc816e3277cd72d27195ced5bebdd226dd1025
# syntax=docker.io/docker/dockerfile:1.19-labs@sha256:dce1c693ef318bca08c964ba3122ae6248e45a1b96d65c4563c8dc6fe80349a2
# Builder
FROM --platform=$BUILDPLATFORM node:22-bullseye@sha256:f8c398a3ad2612293e8827915c056ed0f5cc708b0f676274bb6c732e3c10f93d AS builder
FROM --platform=$BUILDPLATFORM node:24-bullseye@sha256:c102f42d665c164b4e5e5549813b1547ac8a9f1d343c7d17ddac106905a1c30b AS builder
# Support custom branch of the js-sdk. This also helps us build images of element-web develop.
ARG USE_CUSTOM_SDKS=false
@@ -19,7 +19,7 @@ RUN /src/scripts/docker-package.sh
RUN cp /src/config.sample.json /src/webapp/config.json
# App
FROM nginxinc/nginx-unprivileged:alpine-slim@sha256:14b127ed799301a21a1798516443c675237120c76b9a738d43c5e4747de4b1c9
FROM nginxinc/nginx-unprivileged:alpine-slim@sha256:65a7f97c299b919190e96e38e2ff8358132732000d3bc5c00c07cc8763fca53f
# Need root user to install packages & manipulate the usr directory
USER root
+3 -3
View File
@@ -18,7 +18,7 @@ This is anywhere your data or business logic comes from. If your view model is a
#### View
1. Located in [`shared-components`](https://github.com/element-hq/element-web/tree/develop/src/shared-components). Develop it in storybook!
1. Located in [`shared-components`](https://github.com/element-hq/element-web/tree/develop/packages/shared-components). Develop it in storybook!
2. Views are simple react components (eg: `FooView`).
3. Views use [useSyncExternalStore](https://react.dev/reference/react/useSyncExternalStore) internally where the view model is the external store.
4. Views should define the interface of the view model they expect:
@@ -35,7 +35,7 @@ This is anywhere your data or business logic comes from. If your view model is a
}
// ViewModel is a type defining the methods needed for `useSyncExternalStore`
// https://github.com/element-hq/element-web/blob/develop/src/shared-components/ViewModel.ts
// https://github.com/element-hq/element-web/blob/develop/packages/shared-components/src/ViewModel.ts
type FooViewModel = ViewModel<FooViewSnapshot> & FooViewActions;
interface FooViewProps {
@@ -54,7 +54,7 @@ This is anywhere your data or business logic comes from. If your view model is a
```
5. Multiple views can share the same view model if necessary.
6. A full example is available [here](https://github.com/element-hq/element-web/blob/develop/src/shared-components/audio/AudioPlayerView/AudioPlayerView.tsx)
6. A full example is available [here](https://github.com/element-hq/element-web/blob/develop/packages/shared-components/src/audio/AudioPlayerView/AudioPlayerView.tsx)
#### View Model
+1 -1
View File
@@ -407,7 +407,7 @@ The VoIP and Jitsi options are:
If you run your own rageshake server to collect bug reports, the following options may be of interest:
1. `bug_report_endpoint_url`: URL for where to submit rageshake logs to. Rageshakes include feedback submissions and bug reports. When
not present in the config, the app will disable all rageshake functionality. Set to `https://element.io/bugreports/submit` to submit
not present in the config, the app will disable all rageshake functionality. Set to `https://rageshakes.element.io/api/submit` to submit
rageshakes to us, or use your own rageshake server.
2. `uisi_autorageshake_app`: If a user has enabled the "automatically send debug logs on decryption errors" flag, this option will be sent
alongside the rageshake so the rageshake server can filter them by app name. By default, this will be `element-auto-uisi`
+1 -1
View File
@@ -11,7 +11,7 @@ There are some exceptions like when using localhost, which is considered a [secu
1. Download the latest version from <https://github.com/element-hq/element-web/releases>
1. Untar the tarball on your web server
1. Move (or symlink) the `element-x.x.x` directory to an appropriate name
1. Configure the correct caching headers in your webserver (see below)
1. Configure the correct caching headers in your webserver (see [README.md](../README.md#caching-requirements))
1. Configure the app by copying `config.sample.json` to `config.json` and
modifying it. See the [configuration docs](config.md) for details.
1. Enter the URL into your browser and log into Element!
+1 -1
View File
@@ -57,7 +57,7 @@ Then you can deploy it to your cluster with something like `kubectl apply -f my-
"https://scalar-staging.vector.im/_matrix/integrations/v1",
"https://scalar-staging.vector.im/api"
],
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
"bug_report_endpoint_url": "https://rageshakes.element.io/api/submit",
"defaultCountryCode": "GB",
"show_labs_settings": false,
"features": { },
+1 -1
View File
@@ -17,7 +17,7 @@
"https://scalar-staging.vector.im/_matrix/integrations/v1",
"https://scalar-staging.vector.im/api"
],
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
"bug_report_endpoint_url": "https://rageshakes.element.io/api/submit",
"uisi_autorageshake_app": "element-auto-uisi",
"show_labs_settings": false,
"room_directory": {
+1 -1
View File
@@ -17,7 +17,7 @@
"https://scalar-staging.vector.im/_matrix/integrations/v1",
"https://scalar-staging.vector.im/api"
],
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
"bug_report_endpoint_url": "https://rageshakes.element.io/api/submit",
"uisi_autorageshake_app": "element-auto-uisi",
"show_labs_settings": true,
"room_directory": {
+6 -2
View File
@@ -17,7 +17,7 @@ const config: Config = {
// This is needed to be able to load dual CJS/ESM WASM packages e.g. rust crypto & matrix-wywiwyg
customExportConditions: ["browser", "node"],
},
testMatch: ["<rootDir>/test/**/*-test.[tj]s?(x)", "<rootDir>/src/shared-components/**/*.test.[t]s?(x)"],
testMatch: ["<rootDir>/test/**/*-test.[tj]s?(x)"],
globalSetup: "<rootDir>/test/globalSetup.ts",
setupFiles: ["jest-canvas-mock", "web-streams-polyfill/polyfill"],
setupFilesAfterEnv: ["<rootDir>/test/setupTests.ts"],
@@ -40,10 +40,14 @@ const config: Config = {
"^!!raw-loader!.*": "jest-raw-loader",
"recorderWorkletFactory": "<rootDir>/__mocks__/empty.js",
"^fetch-mock$": "<rootDir>/node_modules/fetch-mock",
"counterpart": "<rootDir>/node_modules/counterpart",
},
transformIgnorePatterns: ["/node_modules/(?!(mime|matrix-js-sdk|uuid|p-retry|is-network-error)).+$"],
transformIgnorePatterns: [
"/node_modules/(?!(mime|matrix-js-sdk|uuid|p-retry|is-network-error|react-merge-refs)).+$",
],
collectCoverageFrom: [
"<rootDir>/src/**/*.{js,ts,tsx}",
"<rootDir>/packages/**/*.{js,ts,tsx}",
// getSessionLock is piped into a different JS context via stringification, and the coverage functionality is
// not available in that contest. So, turn off coverage instrumentation for it.
"!<rootDir>/src/utils/SessionLock.ts",
+5
View File
@@ -19,6 +19,8 @@ export default {
"src/hooks/useTimeout.ts",
"src/components/views/elements/InfoTooltip.tsx",
"src/components/views/elements/StyledCheckbox.tsx",
"packages/**/*",
],
ignoreDependencies: [
// Required for `action-validator`
@@ -46,6 +48,9 @@ export default {
// would with a normal library).
"@types/content-type",
"@types/sdp-transform",
// Used in EW but failed because of "link:"
"@element-hq/web-shared-components",
],
ignoreBinaries: [
// Used in scripts & workflows
+27 -38
View File
@@ -1,6 +1,6 @@
{
"name": "element-web",
"version": "1.12.1",
"version": "1.12.4",
"description": "Element: the future of secure communication",
"author": "New Vector Ltd.",
"repository": {
@@ -29,7 +29,7 @@
"UserFriendlyError"
],
"scripts": {
"i18n": "matrix-gen-i18n && yarn i18n:sort && yarn i18n:lint",
"i18n": "matrix-gen-i18n src res packages/shared-components/src && yarn i18n:sort && yarn i18n:lint",
"i18n:sort": "jq --sort-keys '.' src/i18n/strings/en_EN.json > src/i18n/strings/en_EN.json.tmp && mv src/i18n/strings/en_EN.json.tmp src/i18n/strings/en_EN.json",
"i18n:lint": "matrix-i18n-lint && prettier --log-level=silent --write src/i18n/strings/ --ignore-path /dev/null",
"i18n:diff": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && yarn i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json",
@@ -65,28 +65,26 @@
"coverage": "yarn test --coverage",
"analyse:webpack-bundles": "webpack-bundle-analyzer webpack-stats.json webapp",
"update:jitsi": "curl -s https://meet.element.io/libs/external_api.min.js > ./res/jitsi_external_api.min.js",
"postinstall": "patch-package",
"storybook": "storybook dev -p 6007",
"build-storybook": "storybook build",
"test:storybook": "test-storybook --url http://localhost:6007/",
"test:storybook:ci": "concurrently -k -s first -n \"SB,TEST\" \"yarn storybook --no-open\" \"wait-on tcp:6007 && yarn test-storybook --url http://localhost:6007/ --ci --maxWorkers=2\"",
"test:storybook:update": "playwright-screenshots --entrypoint yarn --with-node-modules && playwright-screenshots --entrypoint /work/node_modules/.bin/test-storybook --with-node-modules --url http://host.docker.internal:6007/ --updateSnapshot"
"install": "yarn --cwd packages/shared-components install --frozen-lockfile",
"postinstall": "patch-package"
},
"resolutions": {
"**/pretty-format/react-is": "19.1.1",
"@playwright/test": "1.54.2",
"@types/react": "19.1.13",
"@types/react-dom": "19.1.9",
"**/pretty-format/react-is": "19.2.0",
"@playwright/test": "1.56.1",
"@types/react": "19.2.2",
"@types/react-dom": "19.2.2",
"@types/serve-static": "1.15.10",
"oidc-client-ts": "3.3.0",
"jwt-decode": "4.0.0",
"caniuse-lite": "1.0.30001741",
"caniuse-lite": "1.0.30001751",
"testcontainers": "^11.0.0",
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0",
"wrap-ansi": "npm:wrap-ansi@^7.0.0"
},
"dependencies": {
"@babel/runtime": "^7.12.5",
"@element-hq/element-web-module-api": "1.4.1",
"@element-hq/element-web-module-api": "1.5.0",
"@element-hq/web-shared-components": "link:packages/shared-components",
"@fontsource/inconsolata": "^5",
"@fontsource/inter": "^5",
"@formatjs/intl-segmenter": "^11.5.7",
@@ -108,7 +106,6 @@
"browserslist": "^4.23.2",
"classnames": "^2.2.6",
"commonmark": "^0.31.0",
"counterpart": "^0.18.6",
"css-tree": "^3.0.0",
"diff-dom": "^5.0.0",
"diff-match-patch": "^1.0.5",
@@ -116,7 +113,7 @@
"emojibase-regex": "15.3.2",
"escape-html": "^1.0.3",
"file-saver": "^2.0.5",
"filesize": "11.0.2",
"filesize": "11.0.13",
"github-markdown-css": "^5.5.1",
"glob-to-regexp": "^0.4.1",
"highlight.js": "^11.3.1",
@@ -127,6 +124,7 @@
"jsrsasign": "^11.0.0",
"jszip": "^3.7.0",
"katex": "^0.16.0",
"linkify-html": "4.3.2",
"linkify-react": "4.3.2",
"linkify-string": "4.3.2",
"linkifyjs": "4.3.2",
@@ -134,7 +132,7 @@
"maplibre-gl": "^5.0.0",
"matrix-encrypt-attachment": "^1.0.3",
"matrix-events-sdk": "0.0.1",
"matrix-js-sdk": "38.4.0",
"matrix-js-sdk": "39.2.0",
"matrix-widget-api": "^1.10.0",
"memoize-one": "^6.0.0",
"mime": "^4.0.4",
@@ -142,7 +140,7 @@
"opus-recorder": "^8.0.3",
"pako": "^2.0.3",
"png-chunks-extract": "^1.0.0",
"posthog-js": "1.265.1",
"posthog-js": "1.280.1",
"qrcode": "1.5.4",
"re-resizable": "6.11.2",
"react": "^19.0.0",
@@ -150,6 +148,7 @@
"react-blurhash": "^0.3.0",
"react-dom": "^19.0.0",
"react-focus-lock": "^2.5.1",
"react-merge-refs": "^3.0.2",
"react-string-replace": "^1.1.1",
"react-transition-group": "^4.4.1",
"react-virtuoso": "^4.14.0",
@@ -184,19 +183,13 @@
"@babel/preset-typescript": "^7.12.7",
"@babel/runtime": "^7.12.5",
"@casualbot/jest-sonar-reporter": "2.2.7",
"@element-hq/element-call-embedded": "0.16.0",
"@element-hq/element-web-playwright-common": "^1.4.6",
"@element-hq/element-call-embedded": "0.16.1",
"@element-hq/element-web-playwright-common": "^2.0.0",
"@peculiar/webcrypto": "^1.4.3",
"@playwright/test": "^1.50.1",
"@principalstudio/html-webpack-inject-preload": "^1.2.7",
"@rrweb/types": "^2.0.0-alpha.18",
"@sentry/webpack-plugin": "^4.0.0",
"@storybook/addon-a11y": "^9.0.18",
"@storybook/addon-designs": "^10.0.1",
"@storybook/addon-docs": "^9.0.12",
"@storybook/icons": "^1.4.0",
"@storybook/react-vite": "^9.0.15",
"@storybook/test-runner": "^0.23.0",
"@storybook/react-vite": "^9.1.10",
"@stylistic/eslint-plugin": "^5.0.0",
"@svgr/webpack": "^8.0.0",
"@testing-library/dom": "^10.4.0",
@@ -223,9 +216,9 @@
"@types/node-fetch": "^2.6.2",
"@types/pako": "^2.0.0",
"@types/qrcode": "^1.3.5",
"@types/react": "19.1.13",
"@types/react": "19.2.2",
"@types/react-beautiful-dnd": "^13.0.0",
"@types/react-dom": "19.1.9",
"@types/react-dom": "19.2.2",
"@types/react-transition-group": "^4.4.0",
"@types/sanitize-html": "2.16.0",
"@types/sdp-transform": "^2.4.10",
@@ -249,15 +242,14 @@
"eslint": "8.57.1",
"eslint-config-google": "^0.14.0",
"eslint-config-prettier": "^10.0.0",
"eslint-plugin-deprecate": "0.8.5",
"eslint-plugin-deprecate": "0.8.7",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jest": "^28.0.0",
"eslint-plugin-jest": "^29.0.0",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-matrix-org": "^2.0.2",
"eslint-plugin-matrix-org": "^3.0.0",
"eslint-plugin-react": "^7.28.0",
"eslint-plugin-react-compiler": "^19.0.0-beta-df7b47d-20241124",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-storybook": "^9.0.12",
"eslint-plugin-react-hooks": "^7.0.0",
"eslint-plugin-unicorn": "^56.0.0",
"express": "^5.0.0",
"fake-indexeddb": "^6.0.0",
@@ -270,7 +262,6 @@
"jest": "^29.6.2",
"jest-canvas-mock": "^2.5.2",
"jest-environment-jsdom": "^29.7.0",
"jest-image-snapshot": "^6.5.1",
"jest-mock": "^29.6.2",
"jest-raw-loader": "^1.0.1",
"jsqr": "^1.4.0",
@@ -299,7 +290,7 @@
"rimraf": "^6.0.0",
"semver": "^7.5.2",
"source-map-loader": "^5.0.0",
"storybook": "^9.0.12",
"storybook": "^9.1.10",
"stylelint": "^16.23.0",
"stylelint-config-standard": "^39.0.0",
"stylelint-scss": "^6.0.0",
@@ -309,8 +300,6 @@
"ts-node": "^10.9.1",
"typescript": "5.8.3",
"util": "^0.12.5",
"vite": "^7.0.1",
"vite-plugin-node-polyfills": "^0.24.0",
"web-streams-polyfill": "^4.0.0",
"webpack": "^5.89.0",
"webpack-bundle-analyzer": "^4.8.0",
+71
View File
@@ -0,0 +1,71 @@
/*
Copyright 2025 Element Creations Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
module.exports = {
root: true,
plugins: ["matrix-org", "eslint-plugin-react-compiler"],
extends: [
"plugin:matrix-org/babel",
"plugin:matrix-org/react",
"plugin:matrix-org/a11y",
"plugin:storybook/recommended",
],
parserOptions: {
project: ["./tsconfig.json"],
},
env: {
browser: true,
node: true,
},
rules: {
// Bind or arrow functions in props causes performance issues (but we
// currently use them in some places).
// It's disabled here, but we should using it sparingly.
"react/jsx-no-bind": "off",
"react/jsx-key": ["error"],
"matrix-org/require-copyright-header": "error",
"react-compiler/react-compiler": "error",
},
overrides: [
{
files: ["src/**/*.{ts,tsx}", "test/**/*.{ts,tsx}"],
extends: ["plugin:matrix-org/typescript", "plugin:matrix-org/react"],
rules: {
"@typescript-eslint/explicit-function-return-type": [
"error",
{
allowExpressions: true,
},
],
// Remove Babel things manually due to override limitations
"@babel/no-invalid-this": ["off"],
// We're okay being explicit at the moment
"@typescript-eslint/no-empty-interface": "off",
// We disable this while we're transitioning
"@typescript-eslint/no-explicit-any": "off",
// We'd rather not do this but we do
"@typescript-eslint/ban-ts-comment": "off",
// We're okay with assertion errors when we ask for them
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-empty-object-type": [
"error",
{
// We do this sometimes to brand interfaces
allowInterfaces: "with-single-extends",
},
],
},
},
],
settings: {
react: {
version: "detect",
},
},
};
@@ -0,0 +1,2 @@
dist/
i18n/i18nKeys.d.ts
@@ -12,7 +12,7 @@ import { GlobeIcon } from "@storybook/icons";
// We can't import `shared/i18n.tsx` directly here.
// The storybook addon doesn't seem to benefit the vite config of storybook and we can't resolve the alias in i18n.tsx.
import json from "../webapp/i18n/languages.json";
import json from "../../../webapp/i18n/languages.json";
const languages = Object.keys(json).filter((lang) => lang !== "default");
/**
@@ -11,8 +11,8 @@ import { nodePolyfills } from "vite-plugin-node-polyfills";
import { mergeConfig } from "vite";
const config: StorybookConfig = {
stories: ["../src/shared-components/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
staticDirs: ["../webapp"],
stories: ["../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
staticDirs: ["../../../webapp"],
addons: ["@storybook/addon-docs", "@storybook/addon-designs", "@storybook/addon-a11y"],
framework: "@storybook/react-vite",
core: {
@@ -26,7 +26,7 @@ const config: StorybookConfig = {
resolve: {
alias: {
// Alias used by i18n.tsx
$webapp: path.resolve("webapp"),
$webapp: path.resolve("../../webapp"),
},
},
// Needed for counterpart to work
@@ -36,5 +36,11 @@ const config: StorybookConfig = {
},
});
},
refs: {
"compound-web": {
title: "Compound Web",
url: "https://element-hq.github.io/compound-web/",
},
},
};
export default config;
@@ -1,9 +1,9 @@
import type { ArgTypes, Preview, Decorator, ReactRenderer, StrictArgs } from "@storybook/react-vite";
import "../res/css/shared.pcss";
import "../../../res/css/shared.pcss";
import "./preview.css";
import React, { useLayoutEffect } from "react";
import { setLanguage } from "../src/shared-components/utils/i18n";
import { setLanguage } from "../src/utils/i18n";
import { TooltipProvider } from "@vector-im/compound-web";
import { StoryContext } from "storybook/internal/csf";
@@ -8,8 +8,8 @@ Please see LICENSE files in the repository root for full details.
import { waitForPageReady } from "@storybook/test-runner";
import { toMatchImageSnapshot } from "jest-image-snapshot";
const customSnapshotsDir = `${process.cwd()}/playwright/shared-component-snapshots/`;
const customReceivedDir = `${process.cwd()}/playwright/shared-component-received/`;
const customSnapshotsDir = `${process.cwd()}/playwright/snapshots/`;
const customReceivedDir = `${process.cwd()}/playwright/received/`;
/**
* @type {import('@storybook/test-runner').TestRunnerConfig}
@@ -0,0 +1,21 @@
module.exports = {
sourceMaps: true,
presets: [
[
"@babel/preset-env",
{
include: ["@babel/plugin-transform-class-properties"],
},
],
["@babel/preset-typescript", { allowDeclareFields: true }],
"@babel/preset-react",
],
plugins: [
"@babel/plugin-proposal-export-default-from",
"@babel/plugin-transform-numeric-separator",
"@babel/plugin-transform-object-rest-spread",
"@babel/plugin-transform-optional-chaining",
"@babel/plugin-transform-nullish-coalescing-operator",
"@babel/plugin-transform-runtime",
],
};
+58
View File
@@ -0,0 +1,58 @@
/*
Copyright 2025 Element Creations Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
import { env } from "process";
import type { Config } from "jest";
const config: Config = {
testEnvironment: "jsdom",
testEnvironmentOptions: {
url: "http://localhost/",
},
testMatch: ["<rootDir>/src/**/*.test.[tj]s?(x)"],
setupFilesAfterEnv: ["<rootDir>/src/test/setupTests.ts"],
moduleNameMapper: {
// Support CSS module
"\\.(module.css)$": "identity-obj-proxy",
"\\.(css|scss|pcss)$": "<rootDir>/__mocks__/cssMock.js",
"\\.(gif|png|ttf|woff2)$": "<rootDir>/__mocks__/imageMock.js",
"\\.svg$": "<rootDir>/__mocks__/svg.js",
"\\$webapp/i18n/languages.json": "<rootDir>/../../__mocks__/languages.json",
"^react$": "<rootDir>/node_modules/react",
"^react-dom$": "<rootDir>/node_modules/react-dom",
"waveWorker\\.min\\.js": "<rootDir>/__mocks__/empty.js",
"context-filter-polyfill": "<rootDir>/__mocks__/empty.js",
"workers/(.+)Factory": "<rootDir>/__mocks__/workerFactoryMock.js",
},
transformIgnorePatterns: [
"/node_modules/(?!(mime|matrix-js-sdk|uuid|p-retry|is-network-error|react-merge-refs)).+$",
],
collectCoverageFrom: [
"<rootDir>/src/**/*.{js,ts,tsx}",
"<rootDir>/packages/**/*.{js,ts,tsx}",
// Coverage chokes on type definition files
"!<rootDir>/src/**/*.d.ts",
],
coverageReporters: ["text-summary", "lcov"],
testResultsProcessor: "@casualbot/jest-sonar-reporter",
prettierPath: null,
moduleDirectories: ["node_modules", "./src/test/utils"],
};
// if we're running under GHA, enable the GHA reporter
if (env["GITHUB_ACTIONS"] !== undefined) {
const reporters: Config["reporters"] = [["github-actions", { silent: false }], "summary"];
// if we're running against the develop branch, also enable the slow test reporter
if (env["GITHUB_REF"] == "refs/heads/develop") {
reporters.push("<rootDir>/../../test/slowReporter.cjs");
}
config.reporters = reporters;
}
export default config;
+94
View File
@@ -0,0 +1,94 @@
{
"name": "@element-hq/web-shared-components",
"version": "0.0.0-test.7",
"description": "Shared components for Element",
"author": "New Vector Ltd.",
"repository": {
"type": "git",
"url": "https://github.com/element-hq/element-web"
},
"exports": {
".": {
"require": {
"style": "./dist/element-web-shared-components.css",
"types": "./dist/element-web-shared-components.d.ts",
"default": "./dist/element-web-shared-components.umd.js"
},
"import": {
"style": "./dist/element-web-shared-components.css",
"types": "./dist/element-web-shared-components.d.ts",
"default": "./dist/element-web-shared-components.mjs"
}
},
"./dist/element-web-shared-components.css": {
"require": "./dist/element-web-shared-components.css",
"import": "./dist/element-web-shared-components.css"
}
},
"types": "dist/element-web-shared-components.d.ts",
"files": [
"dist",
"src",
"LICENSE",
"README.md",
"package.json"
],
"scripts": {
"test": "jest",
"prepare": "patch-package && yarn --cwd ../.. build:res && ts-node scripts/gatherTranslationKeys.ts && vite build",
"storybook": "storybook dev -p 6007",
"build-storybook": "storybook build",
"lint": "yarn lint:types && yarn lint:js",
"lint:js": "eslint --max-warnings 0 src && prettier --check .",
"lint:types": "tsc --noEmit --jsx react",
"test:storybook": "test-storybook --url http://localhost:6007/",
"test:storybook:ci": "concurrently -k -s first -n \"SB,TEST\" \"yarn storybook --no-open\" \"wait-on tcp:6007 && yarn test-storybook --url http://localhost:6007/ --ci --maxWorkers=2\"",
"test:storybook:update": "playwright-screenshots --entrypoint /work/node_modules/.bin/test-storybook --with-node-modules --url http://host.docker.internal:6007/ --updateSnapshot"
},
"dependencies": {
"classnames": "^2.5.1",
"counterpart": "^0.18.6",
"lodash": "^4.17.21",
"matrix-web-i18n": "^3.4.0",
"patch-package": "^8.0.1",
"react-merge-refs": "^3.0.2",
"temporal-polyfill": "^0.3.0"
},
"devDependencies": {
"@element-hq/element-web-playwright-common": "^2.0.0",
"@playwright/test": "^1.50.1",
"@storybook/addon-a11y": "^9.1.10",
"@storybook/addon-designs": "^10.0.2",
"@storybook/addon-docs": "^9.1.10",
"@storybook/icons": "^1.6.0",
"@storybook/react-vite": "^9.1.10",
"@storybook/test-runner": "^0.23.0",
"@testing-library/dom": "^10.4.1",
"@testing-library/react": "^16.3.0",
"@types/counterpart": "^0.18.4",
"@types/lodash": "^4.17.20",
"@types/react": "^19.2.2",
"concurrently": "^9.2.1",
"eslint": "8",
"eslint-plugin-matrix-org": "^3.0.0",
"eslint-plugin-storybook": "^10.0.0",
"jest": "^30.2.0",
"jest-image-snapshot": "^6.5.1",
"patch-package": "^8.0.1",
"prettier": "^3.6.2",
"storybook": "^9.1.10",
"ts-node": "^10.9.2",
"typescript": "^5.9.3",
"vite": "^7.1.9",
"vite-plugin-dts": "^4.5.4",
"vite-plugin-node-polyfills": "^0.24.0"
},
"engines": {
"node": ">=20.0.0"
},
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e",
"peerDependencies": {
"@vector-im/compound-design-tokens": "^6.0.0",
"@vector-im/compound-web": "^8.2.5"
}
}

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

@@ -0,0 +1,61 @@
/*
Copyright 2025 Element Creations Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
// Gathers all the translation keys from element-web's en_EN.json into a TypeScript type definition file
// that exports a type `TranslationKey` which is a union of all supported translation keys.
// This prevents having to import the json file and make typescript do the work as this results in vite-dts
// generating an import to the json file in the .d.ts which doesn't work at runtime: this way, the type
// gets put into the bundle.
// XXX: It should *not* be in the 'src' directory, being a generated file, but if it isn't then the type
// bundler won't bundle the types and will leave the file as a relative import, which will break.
import * as fs from "fs";
import * as path from "path";
const i18nStringsPath = path.resolve(__dirname, "../../../src/i18n/strings/en_EN.json");
const outPath = path.resolve(__dirname, "../src/i18nKeys.d.ts");
function gatherKeys(obj: any, prefix: string[] = []): string[] {
if (typeof obj !== "object" || obj === null) return [];
let keys: string[] = [];
for (const key of Object.keys(obj)) {
const value = obj[key];
// add the path (for both leaves and intermediates as then we include plurals)
keys.push([...prefix, key].join("|"));
if (typeof value === "object" && value !== null) {
// If the value is an object, recurse
keys = keys.concat(gatherKeys(value, [...prefix, key]));
}
}
return keys;
}
function main() {
const json = JSON.parse(fs.readFileSync(i18nStringsPath, "utf8"));
const keys = gatherKeys(json);
const typeDef =
"/*\n" +
" * Copyright 2025 Element Creations Ltd.\n" +
" *\n" +
" * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial\n" +
" * Please see LICENSE files in the repository root for full details.\n" +
" */\n" +
"\n" +
"// This file is auto-generated by gatherTranslationKeys.ts\n" +
"// Do not edit manually.\n\n" +
"export type TranslationKey =\n" +
keys.map((k) => ` | \"${k}\"`).join("\n") +
";\n";
fs.mkdirSync(path.dirname(outPath), { recursive: true });
fs.writeFileSync(outPath, typeDef, "utf8");
console.log(`Wrote ${keys.length} keys to ${outPath}`);
}
if (require.main === module) {
main();
}
@@ -5,4 +5,4 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
Please see LICENSE files in the repository root for full details.
*/
export { TextualEventView } from "./TextualEventView";
declare module "*.css";
@@ -6,7 +6,7 @@
*/
.audioPlayer {
padding: var(--cpd-space-4x) var(--cpd-space-3x) var(--cpd-space-3x) var(--cpd-space-3x);
padding: var(--cpd-space-4x) var(--cpd-space-3x) var(--cpd-space-3x) var(--cpd-space-3x) !important;
}
.mediaInfo {
@@ -9,18 +9,18 @@ import React, { type JSX } from "react";
import { fn } from "storybook/test";
import type { Meta, StoryFn } from "@storybook/react-vite";
import {
AudioPlayerView,
type AudioPlayerViewActions,
type AudioPlayerViewSnapshot,
type AudioPlayerViewModel,
} from "./AudioPlayerView";
import { ViewWrapper } from "../../ViewWrapper";
import { AudioPlayerView, type AudioPlayerViewActions, type AudioPlayerViewSnapshot } from "./AudioPlayerView";
import { useMockedViewModel } from "../../useMockedViewModel";
type AudioPlayerProps = AudioPlayerViewSnapshot & AudioPlayerViewActions;
const AudioPlayerViewWrapper = (props: AudioPlayerProps): JSX.Element => (
<ViewWrapper<AudioPlayerViewSnapshot, AudioPlayerViewModel> Component={AudioPlayerView} props={props} />
);
const AudioPlayerViewWrapper = ({ togglePlay, onKeyDown, onSeekbarChange, ...rest }: AudioPlayerProps): JSX.Element => {
const vm = useMockedViewModel(rest, {
togglePlay,
onKeyDown,
onSeekbarChange,
});
return <AudioPlayerView vm={vm} />;
};
export default {
title: "Audio/AudioPlayerView",
@@ -13,7 +13,7 @@ import { fireEvent } from "@testing-library/dom";
import * as stories from "./AudioPlayerView.stories.tsx";
import { AudioPlayerView, type AudioPlayerViewActions, type AudioPlayerViewSnapshot } from "./AudioPlayerView";
import { MockViewModel } from "../../MockViewModel";
import { MockViewModel } from "../../viewmodel/MockViewModel.ts";
const { Default, NoMediaName, NoSize, HasError } = composeStories(stories);
@@ -7,7 +7,7 @@
import React, { type ChangeEventHandler, type JSX, type KeyboardEventHandler, type MouseEventHandler } from "react";
import { type ViewModel } from "../../ViewModel";
import { type ViewModel } from "../../viewmodel/ViewModel";
import { useViewModel } from "../../useViewModel";
import { MediaBody } from "../../message-body/MediaBody";
import { Flex } from "../../utils/Flex";
@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`AudioPlayerView renders the audio player in default state 1`] = `
<div>
@@ -15,7 +15,7 @@ exports[`AudioPlayerView renders the audio player in default state 1`] = `
<button
aria-disabled="false"
aria-label="Play"
aria-labelledby="«r0»"
aria-labelledby="_r_0_"
class="_icon-button_1pz9o_8 button"
data-kind="primary"
role="button"
@@ -106,7 +106,7 @@ exports[`AudioPlayerView renders the audio player in error state 1`] = `
<button
aria-disabled="false"
aria-label="Play"
aria-labelledby="«ri»"
aria-labelledby="_r_i_"
class="_icon-button_1pz9o_8 button"
data-kind="primary"
role="button"
@@ -202,7 +202,7 @@ exports[`AudioPlayerView renders the audio player without media name 1`] = `
<button
aria-disabled="false"
aria-label="Play"
aria-labelledby="«r6»"
aria-labelledby="_r_6_"
class="_icon-button_1pz9o_8 button"
data-kind="primary"
role="button"
@@ -293,7 +293,7 @@ exports[`AudioPlayerView renders the audio player without size 1`] = `
<button
aria-disabled="false"
aria-label="Play"
aria-labelledby="«rc»"
aria-labelledby="_r_c_"
class="_icon-button_1pz9o_8 button"
data-kind="primary"
role="button"
@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Clock renders the clock 1`] = `
<div>
@@ -0,0 +1,11 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
.button {
border-radius: 32px !important;
background-color: var(--cpd-color-bg-subtle-primary) !important;
}
@@ -1,11 +1,11 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`PlayPauseButton renders the button in default state 1`] = `
<div>
<button
aria-disabled="false"
aria-label="Play"
aria-labelledby="«r0»"
aria-labelledby="_r_0_"
class="_icon-button_1pz9o_8 button"
data-kind="primary"
role="button"
@@ -37,7 +37,7 @@ exports[`PlayPauseButton renders the button in playing state 1`] = `
<button
aria-disabled="false"
aria-label="Pause"
aria-labelledby="«r6»"
aria-labelledby="_r_6_"
class="_icon-button_1pz9o_8 button"
data-kind="primary"
role="button"
@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Seekbar renders the clock 1`] = `
<div>
@@ -1,4 +1,4 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`AvatarWithDetails renders a textual event 1`] = `
<div>
@@ -9,7 +9,7 @@ import React from "react";
import { type Meta, type StoryFn } from "@storybook/react-vite";
import { TextualEventView as TextualEventComponent } from "./TextualEventView";
import { MockViewModel } from "../../MockViewModel";
import { MockViewModel } from "../../viewmodel/MockViewModel";
export default {
title: "Event/TextualEvent",

Some files were not shown because too many files have changed in this diff Show More