From 745c12f10d729184a1bdaa26172901e9f438a184 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 5 Aug 2025 12:53:23 +0000 Subject: [PATCH 1/8] Upgrade dependency to matrix-js-sdk@37.13.0-rc.0 --- package.json | 2 +- yarn.lock | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 675120f452..241b32e68a 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "maplibre-gl": "^5.0.0", "matrix-encrypt-attachment": "^1.0.3", "matrix-events-sdk": "0.0.1", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", + "matrix-js-sdk": "37.13.0-rc.0", "matrix-widget-api": "^1.10.0", "memoize-one": "^6.0.0", "mime": "^4.0.4", diff --git a/yarn.lock b/yarn.lock index b4fe445ee6..c37d94555d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4552,7 +4552,7 @@ resolved "https://registry.yarnpkg.com/@vector-im/matrix-wysiwyg/-/matrix-wysiwyg-2.39.0.tgz#a6238e517f23a2f3025d9c65445914771c63b163" integrity sha512-OROXnzPcQWrCMoUpIrCKEC4FYU+9SsRomUgu+VbJwWtBDkCbfvLD4z6w/mgiADw3iTUpBPgmcWJoGxesFuB20Q== dependencies: - "@vector-im/matrix-wysiwyg-wasm" "link:../../Library/Caches/Yarn/v6/npm-@vector-im-matrix-wysiwyg-2.39.0-a6238e517f23a2f3025d9c65445914771c63b163-integrity/node_modules/bindings/wysiwyg-wasm" + "@vector-im/matrix-wysiwyg-wasm" "link:../../../.cache/yarn/v6/npm-@vector-im-matrix-wysiwyg-2.39.0-a6238e517f23a2f3025d9c65445914771c63b163-integrity/node_modules/bindings/wysiwyg-wasm" "@vitest/expect@3.2.4": version "3.2.4" @@ -10845,9 +10845,10 @@ matrix-events-sdk@0.0.1: resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz#c8c38911e2cb29023b0bbac8d6f32e0de2c957dd" integrity sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA== -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop": - version "37.12.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/56b24c0bdc3e1c6b9778dffa5cab7959848f4e0e" +matrix-js-sdk@37.13.0-rc.0: + version "37.13.0-rc.0" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-37.13.0-rc.0.tgz#fb9b0ec1f473b8a3a9108c2456ab0448e3d2d525" + integrity sha512-8zzmf10FsiDwiYWU+tROGxSDY+H8wWzGDfhX5b7JHdtj/uZSVrNtK+VgNPerje3+blu+DTUxevjmueuquCSxGw== dependencies: "@babel/runtime" "^7.12.5" "@matrix-org/matrix-sdk-crypto-wasm" "^15.1.0" From 9590e59fd2a6ec7fc0477124f5cdc7698b74758c Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 5 Aug 2025 13:09:17 +0000 Subject: [PATCH 2/8] v1.11.109-rc.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 241b32e68a..5efe99122e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "element-web", - "version": "1.11.108", + "version": "1.11.109-rc.0", "description": "Element: the future of secure communication", "author": "New Vector Ltd.", "repository": { From adfa43dcbb83cc8d25a93203ec451d0644c9085f Mon Sep 17 00:00:00 2001 From: ElementRobot Date: Fri, 8 Aug 2025 16:28:52 +0200 Subject: [PATCH 3/8] Support for creator/owner power level (#30525) (#30526) * Support for creator/owner power level This just shows them as 'Owner' in the list. * Add test for owner level (cherry picked from commit 96dbddcb14c2fb8637aa09426c1df1686edbd9bc) Co-authored-by: David Baker --- .../memberlist/tiles/MemberTileViewModel.tsx | 3 +++ .../views/settings/tabs/room/RolesRoomSettingsTab.tsx | 5 +---- src/i18n/strings/en_EN.json | 1 + .../views/rooms/memberlist/MemberTileView-test.tsx | 10 ++++++++-- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/components/viewmodels/memberlist/tiles/MemberTileViewModel.tsx b/src/components/viewmodels/memberlist/tiles/MemberTileViewModel.tsx index 0355fe47a3..d99c127d85 100644 --- a/src/components/viewmodels/memberlist/tiles/MemberTileViewModel.tsx +++ b/src/components/viewmodels/memberlist/tiles/MemberTileViewModel.tsx @@ -31,11 +31,13 @@ export interface MemberTileViewState extends MemberTileViewModelProps { } export enum PowerStatus { + Creator = "creator", Admin = "admin", Moderator = "moderator", } const PowerLabel: Record = { + [PowerStatus.Creator]: _td("power_level|creator"), [PowerStatus.Admin]: _td("power_level|admin"), [PowerStatus.Moderator]: _td("power_level|moderator"), }; @@ -115,6 +117,7 @@ export function useMemberTileViewModel(props: MemberTileViewModelProps): MemberT const name = props.member.name; const powerStatusMap = new Map([ + [Infinity, PowerStatus.Creator], [100, PowerStatus.Admin], [50, PowerStatus.Moderator], ]); diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx index c44812d618..5b6d200e71 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx @@ -348,10 +348,7 @@ export default class RolesRoomSettingsTab extends React.Component { ); expect(container2).toHaveTextContent("Admin"); - member.isInvite = true; + member.powerLevel = Infinity; const { container: container3 } = render( , ); - expect(container3).toHaveTextContent("Invited"); + expect(container3).toHaveTextContent("Owner"); + + member.isInvite = true; + const { container: container4 } = render( + , + ); + expect(container4).toHaveTextContent("Invited"); }); }); From 93095f99dbe03c87b0375fbe3838e5cef07e24fe Mon Sep 17 00:00:00 2001 From: ElementRobot Date: Fri, 8 Aug 2025 18:16:38 +0200 Subject: [PATCH 4/8] Allow /upgraderoom command without developer mode enabled (#30527) (#30529) * Allow /upgraderoom command without developer mode enabled This will make the instructions for upgrading rooms for hydra a lot more straightforward, so maybe let's do this at least while hydra upgrades happen. * Update test to match * Unused imports (cherry picked from commit 4d3fde192d87b2335549324d6a29c2da04938b93) Co-authored-by: David Baker --- src/SlashCommands.tsx | 2 +- test/unit-tests/SlashCommands-test.tsx | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index ed2382c3ff..f0d9085507 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -148,7 +148,7 @@ export const Commands = [ command: "upgraderoom", args: "", description: _td("slash_command|upgraderoom"), - isEnabled: (cli) => !isCurrentLocalRoom(cli) && SettingsStore.getValue("developerMode"), + isEnabled: (cli) => !isCurrentLocalRoom(cli), runFn: function (cli, roomId, threadId, args) { if (args) { const room = cli.getRoom(roomId); diff --git a/test/unit-tests/SlashCommands-test.tsx b/test/unit-tests/SlashCommands-test.tsx index 884031237e..bf8d30c3dd 100644 --- a/test/unit-tests/SlashCommands-test.tsx +++ b/test/unit-tests/SlashCommands-test.tsx @@ -14,14 +14,12 @@ import { act, waitFor } from "jest-matrix-react"; import { type Command, Commands, getCommand } from "../../src/SlashCommands"; import { createTestClient } from "../test-utils"; import { LocalRoom, LOCAL_ROOM_ID_PREFIX } from "../../src/models/LocalRoom"; -import SettingsStore from "../../src/settings/SettingsStore"; import { SdkContextClass } from "../../src/contexts/SDKContext"; import Modal, { type ComponentType, type IHandle } from "../../src/Modal"; import WidgetUtils from "../../src/utils/WidgetUtils"; import { WidgetType } from "../../src/widgets/WidgetType"; import { warnSelfDemote } from "../../src/components/views/right_panel/UserInfo"; import dispatcher from "../../src/dispatcher/dispatcher"; -import { SettingLevel } from "../../src/settings/SettingLevel"; import QuestionDialog from "../../src/components/views/dialogs/QuestionDialog"; import ErrorDialog from "../../src/components/views/dialogs/ErrorDialog"; @@ -127,12 +125,7 @@ describe("SlashCommands", () => { setCurrentRoom(); }); - it("should be disabled by default", () => { - expect(command.isEnabled(client)).toBe(false); - }); - - it("should be enabled for developerMode", () => { - SettingsStore.setValue("developerMode", null, SettingLevel.DEVICE, true); + it("should be enabled by default", () => { expect(command.isEnabled(client)).toBe(true); }); }); From 4abdb74673961fab15a82bf5bb466fd4225be31a Mon Sep 17 00:00:00 2001 From: ElementRobot Date: Mon, 11 Aug 2025 12:22:34 +0200 Subject: [PATCH 5/8] Catch error when encountering invalid m.room.pinned_events event (#30534) (#30536) Co-authored-by: Michael Telatynski <7t3chguy@gmail.com> --- src/TextForEvent.tsx | 7 +++++-- src/Unread.ts | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/TextForEvent.tsx b/src/TextForEvent.tsx index b63e5b2a00..439a079953 100644 --- a/src/TextForEvent.tsx +++ b/src/TextForEvent.tsx @@ -572,8 +572,11 @@ function textForPinnedEvent(event: MatrixEvent, client: MatrixClient, allowJSX: const senderName = getSenderName(event); const roomId = event.getRoomId()!; - const pinned = event.getContent<{ pinned: string[] }>().pinned ?? []; - const previouslyPinned: string[] = event.getPrevContent().pinned ?? []; + const content = event.getContent<{ pinned: string[] }>(); + const prevContent = event.getPrevContent(); + + const pinned = Array.isArray(content.pinned) ? content.pinned : []; + const previouslyPinned: string[] = Array.isArray(prevContent.pinned) ? prevContent.pinned : []; const newlyPinned = pinned.filter((item) => previouslyPinned.indexOf(item) < 0); const newlyUnpinned = previouslyPinned.filter((item) => pinned.indexOf(item) < 0); diff --git a/src/Unread.ts b/src/Unread.ts index e8f4769e25..d6a80a8f97 100644 --- a/src/Unread.ts +++ b/src/Unread.ts @@ -39,7 +39,12 @@ export function eventTriggersUnreadCount(client: MatrixClient, ev: MatrixEvent): } if (ev.isRedacted()) return false; - return haveRendererForEvent(ev, client, false /* hidden messages should never trigger unread counts anyways */); + try { + return haveRendererForEvent(ev, client, false /* hidden messages should never trigger unread counts anyways */); + } catch (e) { + console.warn("Error determining if event should trigger unread count", e); + return false; // If we can't determine if the event should trigger an unread count, assume it does not. + } } export function doesRoomHaveUnreadMessages(room: Room, includeThreads: boolean): boolean { From e94d69058733e02a672d7c816ef37cb78220750d Mon Sep 17 00:00:00 2001 From: ElementRobot Date: Mon, 11 Aug 2025 12:50:40 +0200 Subject: [PATCH 6/8] Use userId to filter users in non-federated rooms when showing the InviteDialog (#30364) (#30537) * Use userId to filter users in non-federated rooms. * a line * another line * Add getDomain to Jest test (cherry picked from commit 700068a558023856f34fc0cbdbad3230c6c80878) Co-authored-by: Will Hunt --- src/components/views/dialogs/InviteDialog.tsx | 16 +++++++++------- .../views/dialogs/InviteDialog-test.tsx | 2 ++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/components/views/dialogs/InviteDialog.tsx b/src/components/views/dialogs/InviteDialog.tsx index 62536acfd6..81a403bacf 100644 --- a/src/components/views/dialogs/InviteDialog.tsx +++ b/src/components/views/dialogs/InviteDialog.tsx @@ -358,20 +358,22 @@ export default class InviteDialog extends React.PureComponent excludedIds.add(m.userId)); room.getMembersWithMembership(KnownMembership.Join).forEach((m) => excludedIds.add(m.userId)); // add banned users, so we don't try to invite them room.getMembersWithMembership(KnownMembership.Ban).forEach((m) => excludedIds.add(m.userId)); - if (isFederated === false) { + const ourHomeserver = cli.getDomain(); + if (isFederated === false && ourHomeserver) { + // If this room isn't federated, we must be on the same server. // exclude users from external servers - const homeserver = props.roomId.split(":")[1]; - this.excludeExternals(homeserver, excludedIds); + this.excludeExternals(ourHomeserver, excludedIds); } } @@ -385,7 +387,7 @@ export default class InviteDialog extends React.PureComponent { expect(getSearchField()).toHaveValue(value); }; +const serverDomain = "example.org"; const roomId = "!111111111111111111:example.org"; const aliceId = "@alice:example.org"; const aliceEmail = "foobar@email.com"; @@ -103,6 +104,7 @@ describe("InviteDialog", () => { beforeEach(() => { mockClient = getMockClientWithEventEmitter({ + getDomain: jest.fn().mockReturnValue(serverDomain), getUserId: jest.fn().mockReturnValue(bobId), getSafeUserId: jest.fn().mockReturnValue(bobId), isGuest: jest.fn().mockReturnValue(false), From 0d3a81ee8fff7d9940cf5cff7f10348d6b0d6239 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Mon, 11 Aug 2025 11:16:00 +0000 Subject: [PATCH 7/8] Upgrade dependency to matrix-js-sdk@37.13.0 --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 5efe99122e..2822a8b5b3 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "maplibre-gl": "^5.0.0", "matrix-encrypt-attachment": "^1.0.3", "matrix-events-sdk": "0.0.1", - "matrix-js-sdk": "37.13.0-rc.0", + "matrix-js-sdk": "37.13.0", "matrix-widget-api": "^1.10.0", "memoize-one": "^6.0.0", "mime": "^4.0.4", diff --git a/yarn.lock b/yarn.lock index c37d94555d..8d0e79a8ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4543,7 +4543,7 @@ classnames "^2.5.1" vaul "^1.0.0" -"@vector-im/matrix-wysiwyg-wasm@link:../../Library/Caches/Yarn/v6/npm-@vector-im-matrix-wysiwyg-2.39.0-a6238e517f23a2f3025d9c65445914771c63b163-integrity/node_modules/bindings/wysiwyg-wasm": +"@vector-im/matrix-wysiwyg-wasm@link:../../../.cache/yarn/v6/npm-@vector-im-matrix-wysiwyg-2.39.0-a6238e517f23a2f3025d9c65445914771c63b163-integrity/node_modules/bindings/wysiwyg-wasm": version "0.0.0" uid "" @@ -10845,10 +10845,10 @@ matrix-events-sdk@0.0.1: resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz#c8c38911e2cb29023b0bbac8d6f32e0de2c957dd" integrity sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA== -matrix-js-sdk@37.13.0-rc.0: - version "37.13.0-rc.0" - resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-37.13.0-rc.0.tgz#fb9b0ec1f473b8a3a9108c2456ab0448e3d2d525" - integrity sha512-8zzmf10FsiDwiYWU+tROGxSDY+H8wWzGDfhX5b7JHdtj/uZSVrNtK+VgNPerje3+blu+DTUxevjmueuquCSxGw== +matrix-js-sdk@37.13.0: + version "37.13.0" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-37.13.0.tgz#d2607de452adff6cc6e130f1954b0d85f1de447b" + integrity sha512-zlASOqgPNcE4o2C24HDvEyOwBjIo1U5xo9kWgr8Kvk6jkA22zGsMKv2Y4EoCZXPxyYdQMPnOy+cBJbUtZIz6JQ== dependencies: "@babel/runtime" "^7.12.5" "@matrix-org/matrix-sdk-crypto-wasm" "^15.1.0" From 29e895095f64145b39bc0a49588792d754b7ad9b Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Mon, 11 Aug 2025 11:26:35 +0000 Subject: [PATCH 8/8] v1.11.109 --- CHANGELOG.md | 33 +++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36dea524a0..01fa572689 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,36 @@ +Changes in [1.11.109](https://github.com/element-hq/element-web/releases/tag/v1.11.109) (2025-08-11) +==================================================================================================== +This release supports the upcoming v12 ("hydra") Matrix room version and is necessary to view and participate in these rooms. + +## ✨ Features + +* [Backport staging] Allow /upgraderoom command without developer mode enabled ([#30529](https://github.com/element-hq/element-web/pull/30529)). Contributed by @RiotRobot. +* [Backport staging] Support for creator/owner power level ([#30526](https://github.com/element-hq/element-web/pull/30526)). Contributed by @RiotRobot. +* New room list: change icon and label of menu item for to start a DM ([#30470](https://github.com/element-hq/element-web/pull/30470)). Contributed by @florianduros. +* Implement the member list with virtuoso ([#29869](https://github.com/element-hq/element-web/pull/29869)). Contributed by @langleyd. +* Add labs option for history sharing on invite ([#30313](https://github.com/element-hq/element-web/pull/30313)). Contributed by @richvdh. +* Bump wysiwyg to 2.39.0 adding support for pasting rich text content in the Rich Text Edtior ([#30421](https://github.com/element-hq/element-web/pull/30421)). Contributed by @langleyd. +* Support `EventShieldReason.MISMATCHED_SENDER` ([#30403](https://github.com/element-hq/element-web/pull/30403)). Contributed by @richvdh. +* Change unencrypted and public pills to blue ([#30399](https://github.com/element-hq/element-web/pull/30399)). Contributed by @florianduros. +* Change color of public room icon ([#30390](https://github.com/element-hq/element-web/pull/30390)). Contributed by @florianduros. +* Script for updating storybook screenshots ([#30340](https://github.com/element-hq/element-web/pull/30340)). Contributed by @dbkr. +* Add toggle to hide empty state in devtools ([#30352](https://github.com/element-hq/element-web/pull/30352)). Contributed by @toger5. + +## 🐛 Bug Fixes + +* [Backport staging] Use userId to filter users in non-federated rooms when showing the InviteDialog ([#30537](https://github.com/element-hq/element-web/pull/30537)). Contributed by @RiotRobot. +* [Backport staging] Catch error when encountering invalid m.room.pinned\_events event ([#30536](https://github.com/element-hq/element-web/pull/30536)). Contributed by @RiotRobot. +* Update for compatibility with v12 rooms ([#30452](https://github.com/element-hq/element-web/pull/30452)). Contributed by @dbkr. +* New room list: fix tooltip on presence ([#30474](https://github.com/element-hq/element-web/pull/30474)). Contributed by @florianduros. +* New room list: add tooltip for presence and room status ([#30472](https://github.com/element-hq/element-web/pull/30472)). Contributed by @florianduros. +* Fix: Clicking on an item in the member list causes it to scroll to the top rather than show the profile view ([#30455](https://github.com/element-hq/element-web/pull/30455)). Contributed by @langleyd. +* Put the 'decrypting' tooltip back ([#30446](https://github.com/element-hq/element-web/pull/30446)). Contributed by @dbkr. +* Use server name explicitly for via. ([#30362](https://github.com/element-hq/element-web/pull/30362)). Contributed by @Half-Shot. +* fix: replace hardcoded string in poll history dialog ([#30402](https://github.com/element-hq/element-web/pull/30402)). Contributed by @florianduros. +* fix: replace hardcoded string on qr code back button ([#30401](https://github.com/element-hq/element-web/pull/30401)). Contributed by @florianduros. +* Fix color of icon button with outline ([#30361](https://github.com/element-hq/element-web/pull/30361)). Contributed by @florianduros. + + Changes in [1.11.108](https://github.com/element-hq/element-web/releases/tag/v1.11.108) (2025-07-30) ==================================================================================================== ## 🐛 Bug Fixes diff --git a/package.json b/package.json index 2822a8b5b3..1142153445 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "element-web", - "version": "1.11.109-rc.0", + "version": "1.11.109", "description": "Element: the future of secure communication", "author": "New Vector Ltd.", "repository": {