Skip to content

Commit e69edd2

Browse files
authored
Merge branch 'develop' into safari-home
2 parents 1fd6fdc + cb7d77d commit e69edd2

File tree

159 files changed

+4385
-1224
lines changed

Some content is hidden

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

159 files changed

+4385
-1224
lines changed

.github/workflows/docker.yaml

Lines changed: 10 additions & 7 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@c56c2d3e59e4281cc41dea2217323ba5694b171e # v3
28+
uses: sigstore/cosign-installer@d7d6bc7722e3daa8354c50bcb52f4837da5e9b6a # v3
2929
if: github.event_name != 'pull_request'
3030

3131
- name: Set up QEMU
32-
uses: docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 # v3
32+
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3
3333

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

@@ -53,14 +53,15 @@ jobs:
5353

5454
- name: Build and load
5555
id: test-build
56-
uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v6
56+
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
5757
with:
5858
context: .
5959
load: true
6060

6161
- name: Test the image
6262
env:
6363
IMAGEID: ${{ steps.test-build.outputs.imageid }}
64+
timeout-minutes: 2
6465
run: |
6566
set -x
6667
@@ -86,14 +87,16 @@ jobs:
8687
test "$MODULE_0" = "/${MODULE_PATH}"
8788
8889
# Check healthcheck
89-
test "$(docker inspect -f {{.State.Running}} $CONTAINER_ID)" == "true"
90+
until test "$(docker inspect -f {{.State.Health.Status}} $CONTAINER_ID)" == "healthy"; do
91+
sleep 1
92+
done
9093
9194
# Clean up
9295
docker stop "$CONTAINER_ID"
9396
9497
- name: Docker meta
9598
id: meta
96-
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5
99+
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5
97100
if: github.event_name != 'pull_request'
98101
with:
99102
images: |
@@ -107,7 +110,7 @@ jobs:
107110
108111
- name: Build and push
109112
id: build-and-push
110-
uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v6
113+
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
111114
if: github.event_name != 'pull_request'
112115
with:
113116
context: .

.github/workflows/playwright-image-updates.yaml

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

2424
- name: Create Pull Request
2525
id: cpr
26-
uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7
26+
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7
2727
with:
2828
token: ${{ secrets.ELEMENT_BOT_TOKEN }}
2929
branch: actions/playwright-image-updates

.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@7ca807c2ba3401be532d29a876b93262108099fb
107+
uses: guibranco/github-status-action-v2@5ef6e175c333bc629f3718b083c8a2ff6e0bbfbc
108108
with:
109109
authToken: ${{ secrets.GITHUB_TOKEN }}
110110
state: success

.github/workflows/update-jitsi.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
run: "yarn update:jitsi"
2424

2525
- name: Create Pull Request
26-
uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7
26+
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7
2727
with:
2828
token: ${{ secrets.ELEMENT_BOT_TOKEN }}
2929
branch: actions/jitsi-update

CHANGELOG.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,35 @@
1+
Changes in [1.11.95](https://github.com/element-hq/element-web/releases/tag/v1.11.95) (2025-03-11)
2+
==================================================================================================
3+
## ✨ Features
4+
5+
* Room List Store: Filter rooms by active space ([#29399](https://github.com/element-hq/element-web/pull/29399)). Contributed by @MidhunSureshR.
6+
* Room List - Update the room list store on actions from the dispatcher ([#29397](https://github.com/element-hq/element-web/pull/29397)). Contributed by @MidhunSureshR.
7+
* Room List - Implement a minimal view model ([#29357](https://github.com/element-hq/element-web/pull/29357)). Contributed by @MidhunSureshR.
8+
* New room list: add space menu in room header ([#29352](https://github.com/element-hq/element-web/pull/29352)). Contributed by @florianduros.
9+
* Room List - Store sorted rooms in skip list ([#29345](https://github.com/element-hq/element-web/pull/29345)). Contributed by @MidhunSureshR.
10+
* New room list: add dial to search section ([#29359](https://github.com/element-hq/element-web/pull/29359)). Contributed by @florianduros.
11+
* New room list: add compose menu for spaces in header ([#29347](https://github.com/element-hq/element-web/pull/29347)). Contributed by @florianduros.
12+
* Use EditInPlace control for Identity Server picker to improve a11y ([#29280](https://github.com/element-hq/element-web/pull/29280)). Contributed by @Half-Shot.
13+
* First step to add header to new room list ([#29320](https://github.com/element-hq/element-web/pull/29320)). Contributed by @florianduros.
14+
* Add Windows 64-bit arm link and remove 32-bit link on compatibility page ([#29312](https://github.com/element-hq/element-web/pull/29312)). Contributed by @t3chguy.
15+
* Honour the backup disable flag from Element X ([#29290](https://github.com/element-hq/element-web/pull/29290)). Contributed by @dbkr.
16+
17+
## 🐛 Bug Fixes
18+
19+
* Fix edited code block width ([#29394](https://github.com/element-hq/element-web/pull/29394)). Contributed by @florianduros.
20+
* new room list: keep space name in one line in header ([#29369](https://github.com/element-hq/element-web/pull/29369)). Contributed by @florianduros.
21+
* Dismiss "Key storage out of sync" toast when secrets received ([#29348](https://github.com/element-hq/element-web/pull/29348)). Contributed by @richvdh.
22+
* Minor CSS fixes for the new room list ([#29334](https://github.com/element-hq/element-web/pull/29334)). Contributed by @florianduros.
23+
* Add padding to room header icon ([#29271](https://github.com/element-hq/element-web/pull/29271)). Contributed by @langleyd.
24+
25+
26+
Changes in [1.11.94](https://github.com/element-hq/element-web/releases/tag/v1.11.94) (2025-02-27)
27+
==================================================================================================
28+
## 🐛 Bug Fixes
29+
30+
* [Backport staging] fix: /tmp/element-web-config may already exist preventing the container from booting up ([#29377](https://github.com/element-hq/element-web/pull/29377)). Contributed by @RiotRobot.
31+
32+
133
Changes in [1.11.93](https://github.com/element-hq/element-web/releases/tag/v1.11.93) (2025-02-25)
234
==================================================================================================
335
## ✨ Features

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# syntax=docker.io/docker/dockerfile:1.7-labs
1+
# syntax=docker.io/docker/dockerfile:1.14-labs
22

33
# Builder
44
FROM --platform=$BUILDPLATFORM node:22-bullseye AS builder
@@ -47,4 +47,4 @@ USER nginx
4747
# HTTP listen port
4848
ENV ELEMENT_WEB_PORT=80
4949

50-
HEALTHCHECK --start-period=5s CMD wget --retry-connrefused --tries=5 -q --wait=3 --spider http://localhost:$ELEMENT_WEB_PORT/config.json
50+
HEALTHCHECK --start-period=5s CMD wget -q --spider http://localhost:$ELEMENT_WEB_PORT/config.json

babel.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,7 @@ module.exports = {
3131

3232
"@babel/plugin-syntax-dynamic-import",
3333
"@babel/plugin-transform-runtime",
34+
["@babel/plugin-proposal-decorators", { version: "2023-11" }], // only needed by the js-sdk
35+
"@babel/plugin-transform-class-static-block", // only needed by the js-sdk for decorators
3436
],
3537
};

docker/docker-entrypoint.d/18-load-element-modules.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ entrypoint_log() {
1111
}
1212

1313
# Copy these config files as a base
14-
mkdir /tmp/element-web-config
14+
mkdir -p /tmp/element-web-config
1515
cp /app/config*.json /tmp/element-web-config/
1616

1717
# If there are modules to be loaded

knip.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export default {
1919
ignore: [
2020
// Keep for now
2121
"src/hooks/useLocalStorageState.ts",
22+
"src/hooks/useTimeout.ts",
2223
"src/components/views/elements/InfoTooltip.tsx",
2324
"src/components/views/elements/StyledCheckbox.tsx",
2425
],

package.json

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "element-web",
3-
"version": "1.11.93",
3+
"version": "1.11.95",
44
"description": "Element: the future of secure communication",
55
"author": "New Vector Ltd.",
66
"repository": {
@@ -74,7 +74,7 @@
7474
"@types/react-dom": "18.3.5",
7575
"oidc-client-ts": "3.1.0",
7676
"jwt-decode": "4.0.0",
77-
"caniuse-lite": "1.0.30001699",
77+
"caniuse-lite": "1.0.30001701",
7878
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0",
7979
"wrap-ansi": "npm:wrap-ansi@^7.0.0"
8080
},
@@ -93,7 +93,7 @@
9393
"@types/react-virtualized": "^9.21.30",
9494
"@vector-im/compound-design-tokens": "^4.0.0",
9595
"@vector-im/compound-web": "^7.6.4",
96-
"@vector-im/matrix-wysiwyg": "2.38.0",
96+
"@vector-im/matrix-wysiwyg": "2.38.2",
9797
"@zxcvbn-ts/core": "^3.0.4",
9898
"@zxcvbn-ts/language-common": "^3.0.4",
9999
"@zxcvbn-ts/language-en": "^3.0.2",
@@ -138,7 +138,7 @@
138138
"png-chunks-extract": "^1.0.0",
139139
"posthog-js": "1.157.2",
140140
"qrcode": "1.5.4",
141-
"re-resizable": "6.10.3",
141+
"re-resizable": "6.11.2",
142142
"react": "^18.3.1",
143143
"react-beautiful-dnd": "^13.1.0",
144144
"react-blurhash": "^0.3.0",
@@ -162,9 +162,11 @@
162162
"@babel/core": "^7.12.10",
163163
"@babel/eslint-parser": "^7.12.10",
164164
"@babel/eslint-plugin": "^7.12.10",
165+
"@babel/plugin-proposal-decorators": "^7.25.9",
165166
"@babel/plugin-proposal-export-default-from": "^7.12.1",
166167
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
167168
"@babel/plugin-transform-class-properties": "^7.12.1",
169+
"@babel/plugin-transform-class-static-block": "^7.26.0",
168170
"@babel/plugin-transform-logical-assignment-operators": "^7.20.7",
169171
"@babel/plugin-transform-nullish-coalescing-operator": "^7.12.1",
170172
"@babel/plugin-transform-numeric-separator": "^7.12.7",
@@ -218,12 +220,12 @@
218220
"@typescript-eslint/eslint-plugin": "^8.19.0",
219221
"@typescript-eslint/parser": "^8.19.0",
220222
"babel-jest": "^29.0.0",
221-
"babel-loader": "^9.0.0",
223+
"babel-loader": "^10.0.0",
222224
"babel-plugin-jsx-remove-data-test-id": "^3.0.0",
223225
"blob-polyfill": "^9.0.0",
224226
"chokidar": "^4.0.0",
225227
"concurrently": "^9.0.0",
226-
"copy-webpack-plugin": "^12.0.0",
228+
"copy-webpack-plugin": "^13.0.0",
227229
"core-js": "^3.38.1",
228230
"cronstrue": "^2.41.0",
229231
"css-loader": "^7.0.0",
@@ -274,7 +276,7 @@
274276
"postcss-preset-env": "^10.0.0",
275277
"postcss-scss": "^4.0.4",
276278
"postcss-simple-vars": "^7.0.1",
277-
"prettier": "3.5.1",
279+
"prettier": "3.5.2",
278280
"process": "^0.11.10",
279281
"raw-loader": "^4.0.2",
280282
"rimraf": "^6.0.0",
@@ -288,7 +290,7 @@
288290
"terser-webpack-plugin": "^5.3.9",
289291
"testcontainers": "^10.16.0",
290292
"ts-node": "^10.9.1",
291-
"typescript": "5.7.3",
293+
"typescript": "5.8.2",
292294
"util": "^0.12.5",
293295
"web-streams-polyfill": "^4.0.0",
294296
"webpack": "^5.89.0",

playwright/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM mcr.microsoft.com/playwright:v1.50.1-noble
1+
FROM mcr.microsoft.com/playwright:v1.51.0-noble
22

33
WORKDIR /work
44

playwright/e2e/crypto/crypto.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const checkDMRoom = async (page: Page) => {
2828
};
2929

3030
const startDMWithBob = async (page: Page, bob: Bot) => {
31-
await page.locator(".mx_RoomList").getByRole("button", { name: "Start chat" }).click();
31+
await page.locator(".mx_LegacyRoomList").getByRole("button", { name: "Start chat" }).click();
3232
await page.getByTestId("invite-dialog-input").fill(bob.credentials.userId);
3333
await page.locator(".mx_InviteDialog_tile_nameStack_name").getByText("Bob").click();
3434
await expect(

playwright/e2e/crypto/dehydration.spec.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,6 @@ test.use({
2222
msc3814_enabled: true,
2323
},
2424
},
25-
config: async ({ config, context }, use) => {
26-
const wellKnown = {
27-
...config.default_server_config,
28-
"org.matrix.msc3814": true,
29-
};
30-
31-
await context.route("https://localhost/.well-known/matrix/client", async (route) => {
32-
await route.fulfill({ json: wellKnown });
33-
});
34-
35-
await use(config);
36-
},
3725
});
3826

3927
test.describe("Dehydration", () => {

playwright/e2e/invite/invite-dialog.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ test.describe("Invite dialog", function () {
7777
"should support inviting a user to Direct Messages",
7878
{ tag: "@screenshot" },
7979
async ({ page, app, user, bot }) => {
80-
await page.locator(".mx_RoomList").getByRole("button", { name: "Start chat" }).click();
80+
await page.locator(".mx_LegacyRoomList").getByRole("button", { name: "Start chat" }).click();
8181

8282
const other = page.locator(".mx_InviteDialog_other");
8383
// Assert that the header is rendered

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,17 @@ test.describe("Room list panel", () => {
2525
test.beforeEach(async ({ page, app, user }) => {
2626
// The notification toast is displayed above the search section
2727
await app.closeNotificationToast();
28+
29+
// Populate the room list
30+
for (let i = 0; i < 20; i++) {
31+
await app.client.createRoom({ name: `room${i}` });
32+
}
2833
});
2934

3035
test("should render the room list panel", { tag: "@screenshot" }, async ({ page, app, user }) => {
3136
const roomListView = getRoomListView(page);
37+
// Wait for the last room to be visible
38+
await expect(roomListView.getByRole("gridcell", { name: "Open room room19" })).toBeVisible();
3239
await expect(roomListView).toMatchScreenshot("room-list-panel.png");
3340
});
3441
});
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Copyright 2025 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
5+
* Please see LICENSE files in the repository root for full details.
6+
*/
7+
8+
import { type Page } from "@playwright/test";
9+
10+
import { test, expect } from "../../../element-web-test";
11+
12+
test.describe("Room list", () => {
13+
test.use({
14+
labsFlags: ["feature_new_room_list"],
15+
});
16+
17+
/**
18+
* Get the room list
19+
* @param page
20+
*/
21+
function getRoomList(page: Page) {
22+
return page.getByTestId("room-list");
23+
}
24+
25+
test.beforeEach(async ({ page, app, user }) => {
26+
// The notification toast is displayed above the search section
27+
await app.closeNotificationToast();
28+
for (let i = 0; i < 30; i++) {
29+
await app.client.createRoom({ name: `room${i}` });
30+
}
31+
});
32+
33+
test("should render the room list", { tag: "@screenshot" }, async ({ page, app, user }) => {
34+
const roomListView = getRoomList(page);
35+
await expect(roomListView.getByRole("gridcell", { name: "Open room room29" })).toBeVisible();
36+
await expect(roomListView).toMatchScreenshot("room-list.png");
37+
38+
await roomListView.hover();
39+
// Scroll to the end of the room list
40+
await page.mouse.wheel(0, 1000);
41+
await expect(roomListView.getByRole("gridcell", { name: "Open room room0" })).toBeVisible();
42+
await expect(roomListView).toMatchScreenshot("room-list-scrolled.png");
43+
});
44+
45+
test("should open the room when it is clicked", async ({ page, app, user }) => {
46+
const roomListView = getRoomList(page);
47+
await roomListView.getByRole("gridcell", { name: "Open room room29" }).click();
48+
await expect(page.getByRole("heading", { name: "room29", level: 1 })).toBeVisible();
49+
});
50+
});

playwright/e2e/right-panel/right-panel.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,15 @@ test.describe("RightPanel", () => {
6767
},
6868
);
6969

70+
test("should have padding under leave room", { tag: "@screenshot" }, async ({ page, app }) => {
71+
await viewRoomSummaryByName(page, app, ROOM_NAME);
72+
73+
const leaveButton = await page.getByRole("menuitem", { name: "Leave Room" });
74+
await leaveButton.scrollIntoViewIfNeeded();
75+
76+
await expect(page.locator(".mx_RightPanel")).toMatchScreenshot("with-leave-room.png");
77+
});
78+
7079
test("should handle clicking add widgets", async ({ page, app }) => {
7180
await viewRoomSummaryByName(page, app, ROOM_NAME);
7281

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
Copyright 2025 New Vector Ltd.
3+
4+
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
5+
Please see LICENSE files in the repository root for full details.
6+
*/
7+
8+
import { test, expect } from "../../element-web-test";
9+
10+
test.describe("Quick settings menu", () => {
11+
test("should be rendered properly", { tag: "@screenshot" }, async ({ app, page, user }) => {
12+
await page.getByRole("button", { name: "Quick settings" }).click();
13+
// Assert that the top heading is renderedc
14+
const settings = page.getByTestId("quick-settings-menu");
15+
await expect(settings).toBeVisible();
16+
await expect(settings).toMatchScreenshot("quick-settings.png");
17+
});
18+
});

0 commit comments

Comments
 (0)