Skip to content

Commit 23b498d

Browse files
committed
Merge remote-tracking branch 'upstream/master' into synodim
2 parents 1519447 + c68157e commit 23b498d

File tree

256 files changed

+8396
-3622
lines changed

Some content is hidden

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

256 files changed

+8396
-3622
lines changed

.eslintignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,6 @@ src/component-index.js
88
# Auto-generated file
99
src/modules.ts
1010
src/modules.js
11+
# Test result files
12+
/playwright/test-results/
13+
/playwright/html-report/

CHANGELOG.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,43 @@
1+
Changes in [1.11.96](https://github.com/element-hq/element-web/releases/tag/v1.11.96) (2025-03-25)
2+
==================================================================================================
3+
## ✨ Features
4+
5+
* RoomListViewModel: Track the index of the active room in the list ([#29519](https://github.com/element-hq/element-web/pull/29519)). Contributed by @MidhunSureshR.
6+
* New room list: add empty state ([#29512](https://github.com/element-hq/element-web/pull/29512)). Contributed by @florianduros.
7+
* Implement `MessagePreviewViewModel` ([#29514](https://github.com/element-hq/element-web/pull/29514)). Contributed by @MidhunSureshR.
8+
* RoomListViewModel: Add functionality to toggle message preview setting ([#29511](https://github.com/element-hq/element-web/pull/29511)). Contributed by @MidhunSureshR.
9+
* New room list: add more options menu on room list item ([#29445](https://github.com/element-hq/element-web/pull/29445)). Contributed by @florianduros.
10+
* RoomListViewModel: Provide a way to resort the room list and track the active sort method ([#29499](https://github.com/element-hq/element-web/pull/29499)). Contributed by @MidhunSureshR.
11+
* Change \*All rooms\* meta space name to \*All Chats\* ([#29498](https://github.com/element-hq/element-web/pull/29498)). Contributed by @florianduros.
12+
* Add setting to hide avatars of rooms you have been invited to. ([#29497](https://github.com/element-hq/element-web/pull/29497)). Contributed by @Half-Shot.
13+
* Room List Store: Save preferred sorting algorithm and use that on app launch ([#29493](https://github.com/element-hq/element-web/pull/29493)). Contributed by @MidhunSureshR.
14+
* Add key storage toggle to Encryption settings ([#29310](https://github.com/element-hq/element-web/pull/29310)). Contributed by @dbkr.
15+
* New room list: add primary filters ([#29481](https://github.com/element-hq/element-web/pull/29481)). Contributed by @florianduros.
16+
* Implement MSC4142: Remove unintentional intentional mentions in replies ([#28209](https://github.com/element-hq/element-web/pull/28209)). Contributed by @tulir.
17+
* White background for 'They do not match' button ([#29470](https://github.com/element-hq/element-web/pull/29470)). Contributed by @andybalaam.
18+
* RoomListViewModel: Support secondary filters in the view model ([#29465](https://github.com/element-hq/element-web/pull/29465)). Contributed by @MidhunSureshR.
19+
* RoomListViewModel: Support primary filters in the view model ([#29454](https://github.com/element-hq/element-web/pull/29454)). Contributed by @MidhunSureshR.
20+
* Room List Store: Implement secondary filters ([#29458](https://github.com/element-hq/element-web/pull/29458)). Contributed by @MidhunSureshR.
21+
* Room List Store: Implement rest of the primary filters ([#29444](https://github.com/element-hq/element-web/pull/29444)). Contributed by @MidhunSureshR.
22+
* Room List Store: Support filters by implementing just the favourite filter ([#29433](https://github.com/element-hq/element-web/pull/29433)). Contributed by @MidhunSureshR.
23+
* Move toggle switch for integration manager for a11y ([#29436](https://github.com/element-hq/element-web/pull/29436)). Contributed by @Half-Shot.
24+
* New room list: basic flat list ([#29368](https://github.com/element-hq/element-web/pull/29368)). Contributed by @florianduros.
25+
* Improve rageshake upload experience by providing useful error information ([#29378](https://github.com/element-hq/element-web/pull/29378)). Contributed by @Half-Shot.
26+
* Add more functionality to the room list vm ([#29402](https://github.com/element-hq/element-web/pull/29402)). Contributed by @MidhunSureshR.
27+
28+
## 🐛 Bug Fixes
29+
30+
* New room list: fix compose menu action in space ([#29500](https://github.com/element-hq/element-web/pull/29500)). Contributed by @florianduros.
31+
* Change ToggleHiddenEventVisibility \& GoToHome KeyBindingActions ([#29374](https://github.com/element-hq/element-web/pull/29374)). Contributed by @gy-mate.
32+
* Fix Docker Healthcheck ([#29471](https://github.com/element-hq/element-web/pull/29471)). Contributed by @benbz.
33+
* Room List Store: Fetch rooms after space store is ready + attach store to window ([#29453](https://github.com/element-hq/element-web/pull/29453)). Contributed by @MidhunSureshR.
34+
* Room List Store: Fix bug where left rooms appear in room list ([#29452](https://github.com/element-hq/element-web/pull/29452)). Contributed by @MidhunSureshR.
35+
* Add space to the bottom of the room summary actions below leave room ([#29270](https://github.com/element-hq/element-web/pull/29270)). Contributed by @langleyd.
36+
* Show error screens in group calls ([#29254](https://github.com/element-hq/element-web/pull/29254)). Contributed by @robintown.
37+
* Prevent user from accidentally triggering multiple identity resets ([#29388](https://github.com/element-hq/element-web/pull/29388)). Contributed by @uhoreg.
38+
* Remove buggy tooltip on room intro \& homepage ([#29406](https://github.com/element-hq/element-web/pull/29406)). Contributed by @t3chguy.
39+
40+
141
Changes in [1.11.95](https://github.com/element-hq/element-web/releases/tag/v1.11.95) (2025-03-11)
242
==================================================================================================
343
## ✨ 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

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/sh
22

3-
# Loads modules from `/tmp/element-web-modules` into config.json's `modules` field
3+
# Loads modules from `/modules` into config.json's `modules` field
44

55
set -e
66

@@ -15,15 +15,15 @@ mkdir -p /tmp/element-web-config
1515
cp /app/config*.json /tmp/element-web-config/
1616

1717
# If there are modules to be loaded
18-
if [ -d "/tmp/element-web-modules" ]; then
19-
cd /tmp/element-web-modules
18+
if [ -d "/modules" ]; then
19+
cd /modules
2020

2121
for MODULE in *
2222
do
2323
# If the module has a package.json, use its main field as the entrypoint
2424
ENTRYPOINT="index.js"
25-
if [ -f "/tmp/element-web-modules/$MODULE/package.json" ]; then
26-
ENTRYPOINT=$(jq -r '.main' "/tmp/element-web-modules/$MODULE/package.json")
25+
if [ -f "/modules/$MODULE/package.json" ]; then
26+
ENTRYPOINT=$(jq -r '.main' "/modules/$MODULE/package.json")
2727
fi
2828

2929
entrypoint_log "Loading module $MODULE with entrypoint $ENTRYPOINT"

docker/nginx-templates/default.conf.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ server {
2222
add_header Cache-Control "no-cache";
2323
}
2424
location /modules {
25-
alias /tmp/element-web-modules;
25+
alias /modules;
2626
}
2727
# redirect server error pages to the static page /50x.html
2828
#

docs/install.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,15 @@ image as root (`docker run --user 0`) or, better, change the port that nginx
6767
listens on via the `ELEMENT_WEB_PORT` environment variable.
6868

6969
[Element Web Modules](https://github.com/element-hq/element-modules/tree/main/packages/element-web-module-api) can be dynamically loaded
70-
by being made available (e.g. via bind mount) in a directory within `/tmp/element-web-modules/`.
70+
by being made available (e.g. via bind mount) in a directory within `/modules/`.
7171
The default entrypoint will be index.js in that directory but can be overridden if a package.json file is found with a `main` directive.
7272
These modules will be presented in a `/modules` subdirectory within the webroot, and automatically added to the config.json `modules` field.
7373

7474
If you wish to use docker in read-only mode,
7575
you should follow the [upstream instructions](https://hub.docker.com/_/nginx#:~:text=Running%20nginx%20in%20read%2Donly%20mode)
7676
but additionally include the following directories:
7777

78-
- /tmp/element-web-config/
78+
- /tmp/
7979
- /etc/nginx/conf.d/
8080

8181
The behaviour of the docker image can be customised via the following

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: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "element-web",
3-
"version": "1.11.95",
3+
"version": "1.11.96",
44
"description": "Element: the future of secure communication",
55
"author": "New Vector Ltd.",
66
"repository": {
@@ -62,19 +62,19 @@
6262
"test": "jest",
6363
"test:playwright": "playwright test",
6464
"test:playwright:open": "yarn test:playwright --ui",
65-
"test:playwright:screenshots": "yarn test:playwright:screenshots:build && yarn test:playwright:screenshots:run",
66-
"test:playwright:screenshots:build": "docker build playwright -t element-web-playwright",
67-
"test:playwright:screenshots:run": "docker run --rm --network host -e BASE_URL -e CI -v $(pwd):/work/ -v $(node -e 'console.log(require(`path`).dirname(require.resolve(`matrix-js-sdk/package.json`)))'):/work/node_modules/matrix-js-sdk -v /var/run/docker.sock:/var/run/docker.sock -v /tmp/:/tmp/ -it element-web-playwright --grep @screenshot --project=Chrome",
65+
"test:playwright:screenshots": "playwright-screenshots --project=Chrome",
6866
"coverage": "yarn test --coverage",
6967
"analyse:webpack-bundles": "webpack-bundle-analyzer webpack-stats.json webapp",
7068
"update:jitsi": "curl -s https://meet.element.io/libs/external_api.min.js > ./res/jitsi_external_api.min.js"
7169
},
7270
"resolutions": {
71+
"@playwright/test": "1.50.1",
7372
"@types/react": "18.3.18",
7473
"@types/react-dom": "18.3.5",
7574
"oidc-client-ts": "3.1.0",
7675
"jwt-decode": "4.0.0",
77-
"caniuse-lite": "1.0.30001699",
76+
"caniuse-lite": "1.0.30001701",
77+
"testcontainers": "10.20.0",
7878
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0",
7979
"wrap-ansi": "npm:wrap-ansi@^7.0.0"
8080
},
@@ -84,16 +84,16 @@
8484
"@fontsource/inconsolata": "^5",
8585
"@fontsource/inter": "^5",
8686
"@formatjs/intl-segmenter": "^11.5.7",
87-
"@matrix-org/analytics-events": "^0.29.0",
87+
"@matrix-org/analytics-events": "^0.29.2",
8888
"@matrix-org/emojibase-bindings": "^1.3.4",
8989
"@matrix-org/react-sdk-module-api": "^2.4.0",
9090
"@matrix-org/spec": "^1.7.0",
9191
"@sentry/browser": "^9.0.0",
9292
"@types/png-chunks-extract": "^1.0.2",
9393
"@types/react-virtualized": "^9.21.30",
9494
"@vector-im/compound-design-tokens": "^4.0.0",
95-
"@vector-im/compound-web": "^7.6.4",
96-
"@vector-im/matrix-wysiwyg": "2.38.0",
95+
"@vector-im/compound-web": "^7.7.2",
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",
@@ -128,7 +128,7 @@
128128
"maplibre-gl": "^5.0.0",
129129
"matrix-encrypt-attachment": "^1.0.3",
130130
"matrix-events-sdk": "0.0.1",
131-
"matrix-js-sdk": "37.1.0",
131+
"matrix-js-sdk": "37.2.0",
132132
"matrix-widget-api": "^1.10.0",
133133
"memoize-one": "^6.0.0",
134134
"mime": "^4.0.4",
@@ -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",
@@ -158,7 +158,6 @@
158158
"devDependencies": {
159159
"@action-validator/cli": "^0.6.0",
160160
"@action-validator/core": "^0.6.0",
161-
"@axe-core/playwright": "^4.8.1",
162161
"@babel/core": "^7.12.10",
163162
"@babel/eslint-parser": "^7.12.10",
164163
"@babel/eslint-plugin": "^7.12.10",
@@ -178,13 +177,13 @@
178177
"@babel/preset-typescript": "^7.12.7",
179178
"@babel/runtime": "^7.12.5",
180179
"@casualbot/jest-sonar-reporter": "2.2.7",
180+
"@element-hq/element-web-playwright-common": "^1.1.5",
181181
"@peculiar/webcrypto": "^1.4.3",
182-
"@playwright/test": "^1.40.1",
182+
"@playwright/test": "^1.50.1",
183183
"@principalstudio/html-webpack-inject-preload": "^1.2.7",
184184
"@sentry/webpack-plugin": "^3.0.0",
185185
"@stylistic/eslint-plugin": "^3.0.0",
186186
"@svgr/webpack": "^8.0.0",
187-
"@testcontainers/postgresql": "^10.16.0",
188187
"@testing-library/dom": "^10.4.0",
189188
"@testing-library/jest-dom": "^6.4.8",
190189
"@testing-library/react": "^16.0.0",
@@ -220,12 +219,12 @@
220219
"@typescript-eslint/eslint-plugin": "^8.19.0",
221220
"@typescript-eslint/parser": "^8.19.0",
222221
"babel-jest": "^29.0.0",
223-
"babel-loader": "^9.0.0",
222+
"babel-loader": "^10.0.0",
224223
"babel-plugin-jsx-remove-data-test-id": "^3.0.0",
225224
"blob-polyfill": "^9.0.0",
226225
"chokidar": "^4.0.0",
227226
"concurrently": "^9.0.0",
228-
"copy-webpack-plugin": "^12.0.0",
227+
"copy-webpack-plugin": "^13.0.0",
229228
"core-js": "^3.38.1",
230229
"cronstrue": "^2.41.0",
231230
"css-loader": "^7.0.0",
@@ -259,13 +258,12 @@
259258
"jsqr": "^1.4.0",
260259
"knip": "^5.36.2",
261260
"lint-staged": "^15.0.2",
262-
"mailpit-api": "^1.0.5",
263261
"matrix-web-i18n": "^3.2.1",
264262
"mini-css-extract-plugin": "2.9.2",
265263
"minimist": "^1.2.6",
266264
"modernizr": "^3.12.0",
267265
"node-fetch": "^2.6.7",
268-
"playwright-core": "^1.45.1",
266+
"playwright-core": "^1.51.0",
269267
"postcss": "8.4.46",
270268
"postcss-easings": "^4.0.0",
271269
"postcss-hexrgba": "2.1.0",
@@ -276,21 +274,20 @@
276274
"postcss-preset-env": "^10.0.0",
277275
"postcss-scss": "^4.0.4",
278276
"postcss-simple-vars": "^7.0.1",
279-
"prettier": "3.5.1",
277+
"prettier": "3.5.2",
280278
"process": "^0.11.10",
281279
"raw-loader": "^4.0.2",
282280
"rimraf": "^6.0.0",
283281
"semver": "^7.5.2",
284282
"source-map-loader": "^5.0.0",
285-
"strip-ansi": "^7.1.0",
286283
"stylelint": "^16.13.0",
287284
"stylelint-config-standard": "^37.0.0",
288285
"stylelint-scss": "^6.0.0",
289286
"stylelint-value-no-unknown-custom-properties": "^6.0.1",
290287
"terser-webpack-plugin": "^5.3.9",
291-
"testcontainers": "^10.16.0",
288+
"testcontainers": "^10.20.0",
292289
"ts-node": "^10.9.1",
293-
"typescript": "5.7.3",
290+
"typescript": "5.8.2",
294291
"util": "^0.12.5",
295292
"web-streams-polyfill": "^4.0.0",
296293
"webpack": "^5.89.0",

playwright.config.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
88

99
import { defineConfig, devices } from "@playwright/test";
1010

11-
import { Options } from "./playwright/services";
11+
import { type WorkerOptions } from "./playwright/services";
1212

1313
const baseURL = process.env["BASE_URL"] ?? "http://localhost:8080";
1414

@@ -21,7 +21,7 @@ const chromeProject = {
2121
},
2222
};
2323

24-
export default defineConfig<Options>({
24+
export default defineConfig<WorkerOptions>({
2525
projects: [
2626
{
2727
name: "Chrome",
@@ -83,6 +83,7 @@ export default defineConfig<Options>({
8383
url: `${baseURL}/config.json`,
8484
reuseExistingServer: true,
8585
timeout: (process.env.CI ? 30 : 120) * 1000,
86+
stdout: "pipe",
8687
},
8788
testDir: "playwright/e2e",
8889
outputDir: "playwright/test-results",

playwright/@types/playwright-core.d.ts

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

playwright/Dockerfile

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

playwright/docker-entrypoint.sh

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

playwright/e2e/csAPI.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
55
Please see LICENSE files in the repository root for full details.
66
*/
77

8-
import { type APIRequestContext } from "playwright-core";
8+
import { type APIRequestContext } from "@playwright/test";
99
import { type KeyBackupInfo } from "matrix-js-sdk/src/crypto-api";
10+
import { ClientServerApi } from "@element-hq/element-web-playwright-common/lib/utils/api.js";
1011

1112
import { type HomeserverInstance } from "../plugins/homeserver";
12-
import { ClientServerApi } from "../plugins/utils/api.ts";
1313

1414
/**
1515
* A small subset of the Client-Server API used to manipulate the state of the

playwright/e2e/editing/editing.spec.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,6 @@ test.describe("Editing", () => {
267267
app,
268268
room,
269269
axe,
270-
checkA11y,
271270
}) => {
272271
axe.disableRules("color-contrast"); // XXX: We have some known contrast issues here
273272

@@ -282,15 +281,15 @@ test.describe("Editing", () => {
282281
const line = tile.locator(".mx_EventTile_line");
283282
await line.hover();
284283
await line.getByRole("button", { name: "Edit" }).click();
285-
await checkA11y();
284+
await expect(axe).toHaveNoViolations();
286285
const editComposer = page.getByRole("textbox", { name: "Edit message" });
287286
await editComposer.pressSequentially("Foo");
288287
await editComposer.press("Backspace");
289288
await editComposer.press("Backspace");
290289
await editComposer.press("Backspace");
291290
await editComposer.press("Enter");
292291
await app.getComposerField().hover(); // XXX: move the hover to get rid of the "Edit" tooltip
293-
await checkA11y();
292+
await expect(axe).toHaveNoViolations();
294293
}
295294
await expect(
296295
page.locator(".mx_RoomView_body .mx_EventTile[data-scroll-tokens]", { hasText: "Message" }),
@@ -305,7 +304,6 @@ test.describe("Editing", () => {
305304
user,
306305
app,
307306
axe,
308-
checkA11y,
309307
bot: bob,
310308
}) => {
311309
// This tests the behaviour when a message has been edited some time after it has been sent, and we

0 commit comments

Comments
 (0)