Skip to content

Commit 8f1cec5

Browse files
committed
Merge branch 'develop' of https://github.com/vector-im/element-web into t3chguy/module-api-1.3.0
# Conflicts: # src/modules/customComponentApi.ts
2 parents 49dfb32 + 0f7e394 commit 8f1cec5

File tree

104 files changed

+2271
-2056
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+2271
-2056
lines changed

.github/workflows/docker.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ jobs:
2525
fetch-depth: 0 # needed for docker-package to be able to calculate the version
2626

2727
- name: Install Cosign
28-
uses: sigstore/cosign-installer@3454372f43399081ed03b604cb2d021dabca52bb # v3
28+
uses: sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac # v3
2929
if: github.event_name != 'pull_request'
3030

3131
- name: Set up QEMU
3232
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3
3333

3434
- name: Set up Docker Buildx
35-
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
35+
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3
3636
with:
3737
install: true
3838

@@ -53,7 +53,7 @@ jobs:
5353

5454
- name: Build and load
5555
id: test-build
56-
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
56+
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
5757
with:
5858
context: .
5959
load: true
@@ -110,7 +110,7 @@ jobs:
110110
111111
- name: Build and push
112112
id: build-and-push
113-
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
113+
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
114114
if: github.event_name != 'pull_request'
115115
with:
116116
context: .

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ jobs:
104104

105105
- name: Skip SonarCloud in merge queue
106106
if: github.event_name == 'merge_group' || inputs.disable_coverage == 'true'
107-
uses: guibranco/github-status-action-v2@5f2b01ce1394109f70954ae6b69ef41cf7928e63
107+
uses: guibranco/github-status-action-v2@741ea90ba6c3ca76fe0d43ba11a90cda97d5e685
108108
with:
109109
authToken: ${{ secrets.GITHUB_TOKEN }}
110110
state: success

.github/workflows/update-topics.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
env:
2727
HS_URL: ${{ secrets.BETABOT_HS_URL }}
2828
LOBBY_ROOM_ID: ${{ secrets.ROOM_ID }}
29-
PUBLIC_ROOM_ID: "!YTvKGNlinIzlkMTVRl:matrix.org"
29+
PUBLIC_ROOM_ID: "!IemiTbwVankHTFiEoh:matrix.org"
3030
ANNOUNCEMENT_ROOM_ID: "!bijaLdadorKgNGtHdA:matrix.org"
3131
TOKEN: ${{ secrets.BETABOT_ACCESS_TOKEN }}
3232
RELEASE_STATUS: "Release status: ${{ inputs.expected_status }} expected ${{ inputs.expected_date }}"
@@ -81,6 +81,11 @@ jobs:
8181
d.body = d.body.replace(regex, releaseTopic);
8282
});
8383
}
84+
if (data["m.topic"]) {
85+
data["m.topic"].forEach(d => {
86+
d.body = d.body.replace(regex, releaseTopic);
87+
});
88+
}
8489
8590
res = await fetch(apiUrl, {
8691
method: "PUT",

CHANGELOG.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
1+
Changes in [1.11.105](https://github.com/element-hq/element-web/releases/tag/v1.11.105) (2025-07-01)
2+
====================================================================================================
3+
## ✨ Features
4+
5+
* New room list: add context menu to room list item ([#29952](https://github.com/element-hq/element-web/pull/29952)). Contributed by @florianduros.
6+
* Support for custom message components via Module API ([#30074](https://github.com/element-hq/element-web/pull/30074)). Contributed by @Half-Shot.
7+
* Prompt users to set up recovery ([#30075](https://github.com/element-hq/element-web/pull/30075)). Contributed by @uhoreg.
8+
* Update `IconButton` colors ([#30124](https://github.com/element-hq/element-web/pull/30124)). Contributed by @florianduros.
9+
* New room list: filter list can be collapsed ([#29992](https://github.com/element-hq/element-web/pull/29992)). Contributed by @florianduros.
10+
* Show `EmptyRoomListView` when low priority filter matches zero rooms ([#30122](https://github.com/element-hq/element-web/pull/30122)). Contributed by @MidhunSureshR.
11+
12+
## 🐛 Bug Fixes
13+
14+
* Fix untranslatable string "People" in notifications beta ([#30165](https://github.com/element-hq/element-web/pull/30165)). Contributed by @t3chguy.
15+
* Force verification even after logging in via delegate ([#30141](https://github.com/element-hq/element-web/pull/30141)). Contributed by @andybalaam.
16+
* Hide add integrations button based on UIComponent.AddIntegrations ([#30140](https://github.com/element-hq/element-web/pull/30140)). Contributed by @t3chguy.
17+
* Use nav for new room list and label sections ([#30134](https://github.com/element-hq/element-web/pull/30134)). Contributed by @dbkr.
18+
* Spacestore should emit event after rebuilding home space ([#30132](https://github.com/element-hq/element-web/pull/30132)). Contributed by @MidhunSureshR.
19+
* Handle m.room.pinned\_events being invalid ([#30129](https://github.com/element-hq/element-web/pull/30129)). Contributed by @t3chguy.
20+
21+
122
Changes in [1.11.104](https://github.com/element-hq/element-web/releases/tag/v1.11.104) (2025-06-17)
223
====================================================================================================
324
## ✨ Features

Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
# syntax=docker.io/docker/dockerfile:1.16-labs@sha256:bb5e2b225985193779991f3256d1901a0b3e6a0b284c7bffa0972064f4a6d458
1+
# syntax=docker.io/docker/dockerfile:1.17-labs@sha256:9187104f31e3a002a8a6a3209ea1f937fb7486c093cbbde1e14b0fa0d7e4f1b5
22

33
# Builder
4-
FROM --platform=$BUILDPLATFORM node:22-bullseye@sha256:f16d8e8af67bb6361231e932b8b3e7afa040cbfed181719a450b02c3821b26c1 AS builder
4+
FROM --platform=$BUILDPLATFORM node:22-bullseye@sha256:9ba013a850f62c6c2a4768232cb971c4c386a6ec130ca241b165bb3b405c368d AS builder
55

66
# Support custom branch of the js-sdk. This also helps us build images of element-web develop.
77
ARG USE_CUSTOM_SDKS=false
@@ -19,7 +19,7 @@ RUN /src/scripts/docker-package.sh
1919
RUN cp /src/config.sample.json /src/webapp/config.json
2020

2121
# App
22-
FROM nginxinc/nginx-unprivileged:alpine-slim@sha256:66e34aa81c2faf290ea4e4c28a490f2b35a07478265a2d5994c8637506045eee
22+
FROM nginxinc/nginx-unprivileged:alpine-slim@sha256:ec6b8b1f1bfa594db13e99fc692b9fb816cb7e365927196610f622659de95913
2323

2424
# Need root user to install packages & manipulate the usr directory
2525
USER root

developer_guide.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ yarn test
109109

110110
### End-to-End tests
111111

112-
See [matrix-react-sdk](https://github.com/matrix-org/matrix-react-sdk/#end-to-end-tests) for how to run the end-to-end tests.
112+
See [`docs/playwright.md`](./docs/playwright.md) for how to run the end-to-end tests.
113113

114114
## General github guidelines
115115

docs/config.md

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -130,32 +130,37 @@ complete re-branding/private labeling, a more personalised experience can be ach
130130
6. `mobile_builds`: Optional. Like `desktop_builds`, except for the mobile apps. Also described in more detail down below.
131131
7. `mobile_guide_toast`: When `true` (default), users accessing the Element Web instance from a mobile device will be prompted to
132132
download the app instead.
133-
8. `update_base_url`: For the desktop app only, the URL where to acquire update packages. If specified, must be a path to a directory
133+
8. `mobile_guide_app_variant`: Optional. The mobile app that the user is prompted to download from the `/mobile_guide` page. When omitted
134+
the mobile guide will be configured for the new Element X apps. Allowed values are as follows:
135+
1. `element`: Element X Android/iOS.
136+
2. `element-classic`: Element Classic Android/iOS.
137+
3. `element-pro`: Element Pro Android/iOS.
138+
9. `update_base_url`: For the desktop app only, the URL where to acquire update packages. If specified, must be a path to a directory
134139
containing `macos` and `win32` directories, with the update packages within. Defaults to `https://packages.element.io/desktop/update/`
135140
in production.
136-
9. `map_style_url`: Map tile server style URL for location sharing. e.g. `https://api.maptiler.com/maps/streets/style.json?key=YOUR_KEY_GOES_HERE`
137-
This setting is ignored if your homeserver provides `/.well-known/matrix/client` in its well-known location, and the JSON file
138-
at that location has a key `m.tile_server` (or the unstable version `org.matrix.msc3488.tile_server`). In this case, the
139-
configuration found in the well-known location is used instead.
140-
10. `welcome_user_id`: **DEPRECATED** An optional user ID to start a DM with after creating an account. Defaults to nothing (no DM created).
141-
11. `custom_translations_url`: An optional URL to allow overriding of translatable strings. The JSON file must be in a format of
141+
10. `map_style_url`: Map tile server style URL for location sharing. e.g. `https://api.maptiler.com/maps/streets/style.json?key=YOUR_KEY_GOES_HERE`
142+
This setting is ignored if your homeserver provides `/.well-known/matrix/client` in its well-known location, and the JSON file
143+
at that location has a key `m.tile_server` (or the unstable version `org.matrix.msc3488.tile_server`). In this case, the
144+
configuration found in the well-known location is used instead.
145+
11. `welcome_user_id`: **DEPRECATED** An optional user ID to start a DM with after creating an account. Defaults to nothing (no DM created).
146+
12. `custom_translations_url`: An optional URL to allow overriding of translatable strings. The JSON file must be in a format of
142147
`{"affected|translation|key": {"languageCode": "new string"}}`. See https://github.com/matrix-org/matrix-react-sdk/pull/7886 for details.
143-
12. `branding`: Options for configuring various assets used within the app. Described in more detail down below.
144-
13. `embedded_pages`: Further optional URLs for various assets used within the app. Described in more detail down below.
145-
14. `disable_3pid_login`: When `false` (default), **enables** the options to log in with email address or phone number. Set to
148+
13. `branding`: Options for configuring various assets used within the app. Described in more detail down below.
149+
14. `embedded_pages`: Further optional URLs for various assets used within the app. Described in more detail down below.
150+
15. `disable_3pid_login`: When `false` (default), **enables** the options to log in with email address or phone number. Set to
146151
`true` to hide these options.
147-
15. `disable_login_language_selector`: When `false` (default), **enables** the language selector on the login pages. Set to `true`
152+
16. `disable_login_language_selector`: When `false` (default), **enables** the language selector on the login pages. Set to `true`
148153
to hide this dropdown.
149-
16. `disable_guests`: When `false` (default), **enable** guest-related functionality (peeking/previewing rooms, etc) for unregistered
154+
17. `disable_guests`: When `false` (default), **enable** guest-related functionality (peeking/previewing rooms, etc) for unregistered
150155
users. Set to `true` to disable this functionality.
151-
17. `user_notice`: Optional notice to show to the user, e.g. for sunsetting a deployment and pushing users to move in their own time.
156+
18. `user_notice`: Optional notice to show to the user, e.g. for sunsetting a deployment and pushing users to move in their own time.
152157
Takes a configuration object as below:
153158
1. `title`: Required. Title to show at the top of the notice.
154159
2. `description`: Required. The description to use for the notice.
155160
3. `show_once`: Optional. If true then the notice will only be shown once per device.
156-
18. `help_url`: The URL to point users to for help with the app, defaults to `https://element.io/help`.
157-
19. `help_encryption_url`: The URL to point users to for help with encryption, defaults to `https://element.io/help#encryption`.
158-
20. `force_verification`: If true, users must verify new logins (eg. with another device / their recovery key)
161+
19. `help_url`: The URL to point users to for help with the app, defaults to `https://element.io/help`.
162+
20. `help_encryption_url`: The URL to point users to for help with encryption, defaults to `https://element.io/help#encryption`.
163+
21. `force_verification`: If true, users must verify new logins (eg. with another device / their recovery key)
159164

160165
### `desktop_builds` and `mobile_builds`
161166

package.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "element-web",
3-
"version": "1.11.104",
3+
"version": "1.11.105",
44
"description": "Element: the future of secure communication",
55
"author": "New Vector Ltd.",
66
"repository": {
@@ -69,19 +69,19 @@
6969
},
7070
"resolutions": {
7171
"**/pretty-format/react-is": "19.1.0",
72-
"@playwright/test": "1.52.0",
73-
"@types/react": "19.1.6",
72+
"@playwright/test": "1.53.1",
73+
"@types/react": "19.1.8",
7474
"@types/react-dom": "19.1.6",
75-
"oidc-client-ts": "3.2.1",
75+
"oidc-client-ts": "3.3.0",
7676
"jwt-decode": "4.0.0",
77-
"caniuse-lite": "1.0.30001721",
77+
"caniuse-lite": "1.0.30001724",
7878
"testcontainers": "^11.0.0",
7979
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0",
8080
"wrap-ansi": "npm:wrap-ansi@^7.0.0"
8181
},
8282
"dependencies": {
8383
"@babel/runtime": "^7.12.5",
84-
"@element-hq/element-web-module-api": "1.2.0",
84+
"@element-hq/element-web-module-api": "1.3.0",
8585
"@fontsource/inconsolata": "^5",
8686
"@fontsource/inter": "^5",
8787
"@formatjs/intl-segmenter": "^11.5.7",
@@ -93,8 +93,8 @@
9393
"@types/png-chunks-extract": "^1.0.2",
9494
"@types/react-virtualized": "^9.21.30",
9595
"@vector-im/compound-design-tokens": "^4.0.0",
96-
"@vector-im/compound-web": "^8.0.0",
97-
"@vector-im/matrix-wysiwyg": "2.38.3",
96+
"@vector-im/compound-web": "^8.1.2",
97+
"@vector-im/matrix-wysiwyg": "2.38.4",
9898
"@zxcvbn-ts/core": "^3.0.4",
9999
"@zxcvbn-ts/language-common": "^3.0.4",
100100
"@zxcvbn-ts/language-en": "^3.0.2",
@@ -138,7 +138,7 @@
138138
"opus-recorder": "^8.0.3",
139139
"pako": "^2.0.3",
140140
"png-chunks-extract": "^1.0.0",
141-
"posthog-js": "1.249.4",
141+
"posthog-js": "1.255.1",
142142
"qrcode": "1.5.4",
143143
"re-resizable": "6.11.2",
144144
"react": "^19.0.0",
@@ -212,7 +212,7 @@
212212
"@types/node-fetch": "^2.6.2",
213213
"@types/pako": "^2.0.0",
214214
"@types/qrcode": "^1.3.5",
215-
"@types/react": "19.1.6",
215+
"@types/react": "19.1.8",
216216
"@types/react-beautiful-dnd": "^13.0.0",
217217
"@types/react-dom": "19.1.6",
218218
"@types/react-transition-group": "^4.4.0",

patches/@types+react+19.1.4.patch

Lines changed: 0 additions & 31 deletions
This file was deleted.

playwright/e2e/left-panel/room-list-panel/room-list-filter-sort.spec.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,35 +229,35 @@ test.describe("Room list filters and sort", () => {
229229
// only one room should be visible
230230
await expect(roomList.getByRole("gridcell", { name: "unread dm" })).toBeVisible();
231231
await expect(roomList.getByRole("gridcell", { name: "unread room" })).toBeVisible();
232-
expect(await roomList.locator("role=gridcell").count()).toBe(4);
232+
await expect.poll(() => roomList.locator("role=gridcell").count()).toBe(4);
233233
await expect(primaryFilters).toMatchScreenshot("unread-primary-filters.png");
234234

235235
await primaryFilters.getByRole("option", { name: "People" }).click();
236236
await expect(roomList.getByRole("gridcell", { name: "unread dm" })).toBeVisible();
237237
await expect(roomList.getByRole("gridcell", { name: "invited room" })).toBeVisible();
238-
expect(await roomList.locator("role=gridcell").count()).toBe(2);
238+
await expect.poll(() => roomList.locator("role=gridcell").count()).toBe(2);
239239

240240
await primaryFilters.getByRole("option", { name: "Rooms" }).click();
241241
await expect(roomList.getByRole("gridcell", { name: "unread room" })).toBeVisible();
242242
await expect(roomList.getByRole("gridcell", { name: "favourite room" })).toBeVisible();
243243
await expect(roomList.getByRole("gridcell", { name: "empty room" })).toBeVisible();
244244
await expect(roomList.getByRole("gridcell", { name: "room with mention" })).toBeVisible();
245245
await expect(roomList.getByRole("gridcell", { name: "Low prio room" })).toBeVisible();
246-
expect(await roomList.locator("role=gridcell").count()).toBe(5);
246+
await expect.poll(() => roomList.locator("role=gridcell").count()).toBe(5);
247247

248248
await getFilterExpandButton(page).click();
249249

250250
await primaryFilters.getByRole("option", { name: "Favourite" }).click();
251251
await expect(roomList.getByRole("gridcell", { name: "favourite room" })).toBeVisible();
252-
expect(await roomList.locator("role=gridcell").count()).toBe(1);
252+
await expect.poll(() => roomList.locator("role=gridcell").count()).toBe(1);
253253

254254
await primaryFilters.getByRole("option", { name: "Mentions" }).click();
255255
await expect(roomList.getByRole("gridcell", { name: "room with mention" })).toBeVisible();
256-
expect(await roomList.locator("role=gridcell").count()).toBe(1);
256+
await expect.poll(() => roomList.locator("role=gridcell").count()).toBe(1);
257257

258258
await primaryFilters.getByRole("option", { name: "Invites" }).click();
259259
await expect(roomList.getByRole("gridcell", { name: "invited room" })).toBeVisible();
260-
expect(await roomList.locator("role=gridcell").count()).toBe(1);
260+
await expect.poll(() => roomList.locator("role=gridcell").count()).toBe(1);
261261

262262
await getFilterCollapseButton(page).click();
263263
await expect(primaryFilters.locator("role=option").first()).toHaveText("Invites");

0 commit comments

Comments
 (0)