From 2f4fac0f37752023e71a7dae47f640729670e2a5 Mon Sep 17 00:00:00 2001 From: Arnei Date: Wed, 19 Oct 2022 12:51:31 +0200 Subject: [PATCH 001/235] Add leave room warning for last admin If the last room administrator leaves a room, other users cannot gain admin privilges anymore, leaving the room in an unmoderable state. To help in avoiding this scenario without actually preventing an admin from leaving the room if they really want, this commit adds a new warning message. Attempts to help with: https://github.com/vector-im/element-web/issues/2855 Signed-off-by: Arne Wilken arnepokemon@yahoo.de --- src/components/structures/MatrixChat.tsx | 24 ++++++++++++++++++++++++ src/i18n/strings/en_EN.json | 1 + src/utils/TypeUtils.ts | 11 +++++++++++ 3 files changed, 36 insertions(+) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 515355b63d9..368a0492a54 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -138,6 +138,7 @@ import { UseCaseSelection } from '../views/elements/UseCaseSelection'; import { ValidatedServerConfig } from '../../utils/ValidatedServerConfig'; import { isLocalRoom } from '../../utils/localRoom/isLocalRoom'; import { viewUserDeviceSettings } from '../../actions/handlers/viewUserDeviceSettings'; +import { isNumberArray } from '../../utils/TypeUtils'; // legacy export export { default as Views } from "../../Views"; @@ -1125,6 +1126,29 @@ export default class MatrixChat extends React.PureComponent { )); } } + + const client = MatrixClientPeg.get(); + const plEvent = roomToLeave.currentState.getStateEvents(EventType.RoomPowerLevels, ''); + const plContent = plEvent ? (plEvent.getContent() || {}) : {}; + const userLevels = plContent.users || {}; + const currentUserLevel = userLevels[client.getUserId()]; + const userLevelValues = Object.values(userLevels); + if (isNumberArray(userLevelValues)) { + const maxUserLevel = Math.max(...userLevelValues); + // If the user is the only user with highest power level + if (maxUserLevel === currentUserLevel && + userLevelValues.lastIndexOf(maxUserLevel) == userLevelValues.indexOf(maxUserLevel)) { + warnings.push(( + + { ' '/* Whitespace, otherwise the sentences get smashed together */ } + { _t("You are the sole person with the highest role in this room. " + + "If you leave, the room could become unmoderable. Consider giving " + + "another user your role.") } + + )); + } + } + return warnings; } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index fa0b1690dcf..661aae2c7a7 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -3232,6 +3232,7 @@ "You are the only person here. If you leave, no one will be able to join in the future, including you.": "You are the only person here. If you leave, no one will be able to join in the future, including you.", "This space is not public. You will not be able to rejoin without an invite.": "This space is not public. You will not be able to rejoin without an invite.", "This room is not public. You will not be able to rejoin without an invite.": "This room is not public. You will not be able to rejoin without an invite.", + "You are the sole person with the highest role in this room. If you leave, the room could become unmoderable. Consider giving another user your role.": "You are the sole person with the highest role in this room. If you leave, the room could become unmoderable. Consider giving another user your role.", "Are you sure you want to leave the space '%(spaceName)s'?": "Are you sure you want to leave the space '%(spaceName)s'?", "Are you sure you want to leave the room '%(roomName)s'?": "Are you sure you want to leave the room '%(roomName)s'?", "Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s", diff --git a/src/utils/TypeUtils.ts b/src/utils/TypeUtils.ts index abdd0eb2a02..286d844e9e5 100644 --- a/src/utils/TypeUtils.ts +++ b/src/utils/TypeUtils.ts @@ -28,3 +28,14 @@ export function makeType(Type: any, opts: any) { Object.assign(c, opts); return c; } + +/** + * Typeguard that checks if an unknown variable is an array of numbers + * @param value the variable to check + * @returns true if the variable is an array of numbers, false otherwise + */ +export function isNumberArray(value: unknown): value is number[] { + return ( + Array.isArray(value) && value.every(element => typeof element === "number") + ); +} From 0c0706db2261dfd0af7f6e085d13c2ff67619eae Mon Sep 17 00:00:00 2001 From: Arne Wilken Date: Fri, 28 Oct 2022 10:51:54 +0200 Subject: [PATCH 002/235] Update src/components/structures/MatrixChat.tsx getContent already does the || {} step Co-authored-by: Robin --- src/components/structures/MatrixChat.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 847b495f514..ad7c499773a 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -1136,7 +1136,7 @@ export default class MatrixChat extends React.PureComponent { const client = MatrixClientPeg.get(); const plEvent = roomToLeave.currentState.getStateEvents(EventType.RoomPowerLevels, ''); - const plContent = plEvent ? (plEvent.getContent() || {}) : {}; + const plContent = plEvent ? plEvent.getContent() : {}; const userLevels = plContent.users || {}; const currentUserLevel = userLevels[client.getUserId()]; const userLevelValues = Object.values(userLevels); From 626f187177f2aad533555b835474d3c6ccabc86d Mon Sep 17 00:00:00 2001 From: Arnei Date: Mon, 20 Feb 2023 17:38:00 +0100 Subject: [PATCH 003/235] Update warning message for last_admin_warning Switches out a made-up word for a real phrase. --- src/components/structures/MatrixChat.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index ad7c499773a..006e435a5d2 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -1149,8 +1149,8 @@ export default class MatrixChat extends React.PureComponent { { ' '/* Whitespace, otherwise the sentences get smashed together */ } { _t("You are the sole person with the highest role in this room. " + - "If you leave, the room could become unmoderable. Consider giving " + - "another user your role.") } + "If you leave, the room might not be able to be moderated anymore. " + + "Consider giving another user your role.") } )); } From 90bcce9d71720157e53c3aca168e28969ee7e924 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 5 Mar 2024 14:05:20 +0000 Subject: [PATCH 004/235] Upgrade dependency to matrix-js-sdk@31.5.0-rc.0 --- package.json | 2 +- yarn.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index bbbddceb370..faa344219db 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "maplibre-gl": "^2.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": "31.5.0-rc.0", "matrix-widget-api": "^1.5.0", "memoize-one": "^6.0.0", "minimist": "^1.2.5", diff --git a/yarn.lock b/yarn.lock index 0cc4ff904d7..61d6e3ffcb3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6910,9 +6910,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 "31.4.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/6176faef48e5f952a8be82354874fd87358e97a7" +matrix-js-sdk@31.5.0-rc.0: + version "31.5.0-rc.0" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-31.5.0-rc.0.tgz#0db6dc4b349289804a59b114d50774bda7cbd55e" + integrity sha512-63th8wvf4HRNRxp0pcF47yeVo7dW24z7Cuz/b23YKixHFzlGMSwNnUpLl9bgeN/tbcDI1XK40uT89CgG5S4MUg== dependencies: "@babel/runtime" "^7.12.5" "@matrix-org/matrix-sdk-crypto-wasm" "^4.6.0" From 9c8e57257267552c0aa5aa514e022b51aff39226 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 5 Mar 2024 14:09:01 +0000 Subject: [PATCH 005/235] v3.94.0-rc.0 --- package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index faa344219db..5df91677ab2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "3.93.0", + "version": "3.94.0-rc.0", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { @@ -23,7 +23,7 @@ "package.json", ".stylelintrc.js" ], - "main": "./src/index.ts", + "main": "./lib/index.ts", "matrix_src_main": "./src/index.ts", "matrix_lib_main": "./lib/index.ts", "matrix_lib_typings": "./lib/index.d.ts", @@ -233,5 +233,6 @@ "outputDirectory": "coverage", "outputName": "jest-sonar-report.xml", "relativePaths": true - } + }, + "typings": "./lib/index.d.ts" } From e8074572765e50272233ee8ccbd06a62081a11f6 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 8 Mar 2024 14:27:08 +0000 Subject: [PATCH 006/235] Use correct push rule to evaluate room-wide mentions (#12318) Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/utils/pillify.tsx | 8 +++--- test/test-utils/test-utils.ts | 2 +- test/utils/pillify-test.tsx | 50 ++++++++++++++++++++++++++++++++++- 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/utils/pillify.tsx b/src/utils/pillify.tsx index f46892949e9..22fcaec99ae 100644 --- a/src/utils/pillify.tsx +++ b/src/utils/pillify.tsx @@ -17,11 +17,11 @@ limitations under the License. import React from "react"; import ReactDOM from "react-dom"; import { PushProcessor } from "matrix-js-sdk/src/pushprocessor"; -import { MatrixEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, MatrixEvent, RuleId } from "matrix-js-sdk/src/matrix"; import { TooltipProvider } from "@vector-im/compound-web"; import SettingsStore from "../settings/SettingsStore"; -import { Pill, PillType, pillRoomNotifLen, pillRoomNotifPos } from "../components/views/elements/Pill"; +import { Pill, pillRoomNotifLen, pillRoomNotifPos, PillType } from "../components/views/elements/Pill"; import { parsePermalink } from "./permalinks/Permalinks"; import { PermalinkParts } from "./permalinks/PermalinkConstructor"; @@ -127,7 +127,9 @@ export function pillifyLinks( if (roomNotifTextNodes.length > 0) { const pushProcessor = new PushProcessor(matrixClient); - const atRoomRule = pushProcessor.getPushRuleById(".m.rule.roomnotif"); + const atRoomRule = pushProcessor.getPushRuleById( + mxEvent.getContent()["m.mentions"] !== undefined ? RuleId.IsRoomMention : RuleId.AtRoomNotification, + ); if (atRoomRule && pushProcessor.ruleMatchesEvent(atRoomRule, mxEvent)) { // Now replace all those nodes with Pills for (const roomNotifTextNode of roomNotifTextNodes) { diff --git a/test/test-utils/test-utils.ts b/test/test-utils/test-utils.ts index fd4a83e2082..94ec448826b 100644 --- a/test/test-utils/test-utils.ts +++ b/test/test-utils/test-utils.ts @@ -195,7 +195,7 @@ export function createTestClient(): MatrixClient { isUserIgnored: jest.fn().mockReturnValue(false), getCapabilities: jest.fn().mockResolvedValue({}), supportsThreads: jest.fn().mockReturnValue(false), - supportsIntentionalMentions: () => false, + supportsIntentionalMentions: jest.fn().mockReturnValue(false), getRoomUpgradeHistory: jest.fn().mockReturnValue([]), getOpenIdToken: jest.fn().mockResolvedValue(undefined), registerWithIdentityServer: jest.fn().mockResolvedValue({}), diff --git a/test/utils/pillify-test.tsx b/test/utils/pillify-test.tsx index c5a00a68289..4c393ba458c 100644 --- a/test/utils/pillify-test.tsx +++ b/test/utils/pillify-test.tsx @@ -17,6 +17,7 @@ limitations under the License. import React from "react"; import { render } from "@testing-library/react"; import { MatrixEvent, ConditionKind, EventType, PushRuleActionName, Room, TweakName } from "matrix-js-sdk/src/matrix"; +import { mocked } from "jest-mock"; import { pillifyLinks } from "../../src/utils/pillify"; import { stubClient } from "../test-utils"; @@ -36,7 +37,9 @@ describe("pillify", () => { beforeEach(() => { stubClient(); const cli = MatrixClientPeg.safeGet(); - (cli.getRoom as jest.Mock).mockReturnValue(new Room(roomId, cli, cli.getUserId()!)); + const room = new Room(roomId, cli, cli.getUserId()!); + room.currentState.mayTriggerNotifOfType = jest.fn().mockReturnValue(true); + (cli.getRoom as jest.Mock).mockReturnValue(room); cli.pushRules!.global = { override: [ { @@ -58,6 +61,28 @@ describe("pillify", () => { }, ], }, + { + rule_id: ".m.rule.is_room_mention", + default: true, + enabled: true, + conditions: [ + { + kind: ConditionKind.EventPropertyIs, + key: "content.m\\.mentions.room", + value: true, + }, + { + kind: ConditionKind.SenderNotificationPermission, + key: "room", + }, + ], + actions: [ + PushRuleActionName.Notify, + { + set_tweak: TweakName.Highlight, + }, + ], + }, ], }; @@ -81,6 +106,29 @@ describe("pillify", () => { expect(container.querySelector(".mx_Pill.mx_AtRoomPill")?.textContent).toBe("!@room"); }); + it("should pillify @room in an intentional mentions world", () => { + mocked(MatrixClientPeg.safeGet().supportsIntentionalMentions).mockReturnValue(true); + const { container } = render(
@room
); + const containers: Element[] = []; + pillifyLinks( + MatrixClientPeg.safeGet(), + [container], + new MatrixEvent({ + room_id: roomId, + type: EventType.RoomMessage, + content: { + "body": "@room", + "m.mentions": { + room: true, + }, + }, + }), + containers, + ); + expect(containers).toHaveLength(1); + expect(container.querySelector(".mx_Pill.mx_AtRoomPill")?.textContent).toBe("!@room"); + }); + it("should not double up pillification on repeated calls", () => { const { container } = render(
@room
); const containers: Element[] = []; From 8e68d5d6be145a2e94e7e34cd1c09f6a30977b39 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 8 Mar 2024 14:45:15 +0000 Subject: [PATCH 007/235] Improve Forward Dialog a11y by switching to roving tab index interactions (#12306) * Improve Forward Dialog a11y by switching to roving tab index interactions Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Improve screen reader readout Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Improve screen reader readout Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add tests Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- res/css/views/dialogs/_ForwardDialog.pcss | 3 +- src/accessibility/RovingTabIndex.tsx | 20 ++- .../views/dialogs/ForwardDialog.tsx | 155 +++++++++++++----- .../views/elements/TruncatedList.tsx | 3 +- test/accessibility/RovingTabIndex-test.tsx | 58 +++++++ .../views/dialogs/ForwardDialog-test.tsx | 40 ++++- 6 files changed, 235 insertions(+), 44 deletions(-) diff --git a/res/css/views/dialogs/_ForwardDialog.pcss b/res/css/views/dialogs/_ForwardDialog.pcss index e6c322a77c6..69c9bafc89c 100644 --- a/res/css/views/dialogs/_ForwardDialog.pcss +++ b/res/css/views/dialogs/_ForwardDialog.pcss @@ -96,7 +96,8 @@ limitations under the License. padding: 6px; border-radius: 8px; - &:hover { + &:hover, + &.mx_ForwardList_entry_active { background-color: $spacePanel-bg-color; } diff --git a/src/accessibility/RovingTabIndex.tsx b/src/accessibility/RovingTabIndex.tsx index 5f3901a3916..9a2a8552423 100644 --- a/src/accessibility/RovingTabIndex.tsx +++ b/src/accessibility/RovingTabIndex.tsx @@ -175,6 +175,8 @@ interface IProps { handleHomeEnd?: boolean; handleUpDown?: boolean; handleLeftRight?: boolean; + handleInputFields?: boolean; + scrollIntoView?: boolean | ScrollIntoViewOptions; children(renderProps: { onKeyDownHandler(ev: React.KeyboardEvent): void; onDragEndHandler(): void }): ReactNode; onKeyDown?(ev: React.KeyboardEvent, state: IState, dispatch: Dispatch): void; } @@ -212,6 +214,8 @@ export const RovingTabIndexProvider: React.FC = ({ handleUpDown, handleLeftRight, handleLoop, + handleInputFields, + scrollIntoView, onKeyDown, }) => { const [state, dispatch] = useReducer>(reducer, { @@ -234,7 +238,7 @@ export const RovingTabIndexProvider: React.FC = ({ let focusRef: RefObject | undefined; // Don't interfere with input default keydown behaviour // but allow people to move focus from it with Tab. - if (checkInputableElement(ev.target as HTMLElement)) { + if (!handleInputFields && checkInputableElement(ev.target as HTMLElement)) { switch (action) { case KeyBindingAction.Tab: handled = true; @@ -311,9 +315,21 @@ export const RovingTabIndexProvider: React.FC = ({ ref: focusRef, }, }); + if (scrollIntoView) { + focusRef.current?.scrollIntoView(scrollIntoView); + } } }, - [context, onKeyDown, handleHomeEnd, handleUpDown, handleLeftRight, handleLoop], + [ + context, + onKeyDown, + handleHomeEnd, + handleUpDown, + handleLeftRight, + handleLoop, + handleInputFields, + scrollIntoView, + ], ); const onDragEndHandler = useCallback(() => { diff --git a/src/components/views/dialogs/ForwardDialog.tsx b/src/components/views/dialogs/ForwardDialog.tsx index a21acd7b717..fe737386295 100644 --- a/src/components/views/dialogs/ForwardDialog.tsx +++ b/src/components/views/dialogs/ForwardDialog.tsx @@ -57,6 +57,15 @@ import { isLocationEvent } from "../../../utils/EventUtils"; import { isSelfLocation, locationEventGeoUri } from "../../../utils/location"; import { RoomContextDetails } from "../rooms/RoomContextDetails"; import { filterBoolean } from "../../../utils/arrays"; +import { + IState, + RovingTabIndexContext, + RovingTabIndexProvider, + Type, + useRovingTabIndex, +} from "../../../accessibility/RovingTabIndex"; +import { getKeyBindingsManager } from "../../../KeyBindingsManager"; +import { KeyBindingAction } from "../../../accessibility/KeyboardShortcuts"; const AVATAR_SIZE = 30; @@ -87,6 +96,7 @@ enum SendState { const Entry: React.FC = ({ room, type, content, matrixClient: cli, onFinished }) => { const [sendState, setSendState] = useState(SendState.CanSend); + const [onFocus, isActive, ref] = useRovingTabIndex(); const jumpToRoom = (ev: ButtonEvent): void => { dis.dispatch({ @@ -134,16 +144,30 @@ const Entry: React.FC = ({ room, type, content, matrixClient: cli, icon = ; } + const id = `mx_ForwardDialog_entry_${room.roomId}`; return ( -
+
- - {room.name} + + + {room.name} + = ({ room, type, content, matrixClient: cli, disabled={disabled} title={title} alignment={Alignment.Top} + tabIndex={isActive ? 0 : -1} + id={`${id}_send`} >
{_t("forward|send_label")}
{icon} @@ -270,6 +296,26 @@ const ForwardDialog: React.FC = ({ matrixClient: cli, event, permalinkCr ); } + const onKeyDown = (ev: React.KeyboardEvent, state: IState): void => { + let handled = true; + + const action = getKeyBindingsManager().getAccessibilityAction(ev); + switch (action) { + case KeyBindingAction.Enter: { + state.activeRef?.current?.querySelector(".mx_ForwardList_sendButton")?.click(); + break; + } + + default: + handled = false; + } + + if (handled) { + ev.preventDefault(); + ev.stopPropagation(); + } + }; + return ( = ({ matrixClient: cli, event, permalinkCr />

-
- - - {rooms.length > 0 ? ( -
- - rooms - .slice(start, end) - .map((room) => ( - - )) - } - getChildCount={() => rooms.length} - /> -
- ) : ( - {_t("common|no_results")} - )} -
-
+ + {({ onKeyDownHandler }) => ( +
+ + {(context) => ( + { + setQuery(query); + setImmediate(() => { + const ref = context.state.refs[0]; + if (ref) { + context.dispatch({ + type: Type.SetFocus, + payload: { ref }, + }); + ref.current?.scrollIntoView?.({ + block: "nearest", + }); + } + }); + }} + autoFocus={true} + onKeyDown={onKeyDownHandler} + aria-activedescendant={context.state.activeRef?.current?.id} + aria-owns="mx_ForwardDialog_resultsList" + /> + )} + + + {rooms.length > 0 ? ( +
+ + rooms + .slice(start, end) + .map((room) => ( + + )) + } + getChildCount={() => rooms.length} + /> +
+ ) : ( + {_t("common|no_results")} + )} +
+
+ )} +
); }; diff --git a/src/components/views/elements/TruncatedList.tsx b/src/components/views/elements/TruncatedList.tsx index 074df5bfb26..4c6979832d2 100644 --- a/src/components/views/elements/TruncatedList.tsx +++ b/src/components/views/elements/TruncatedList.tsx @@ -36,6 +36,7 @@ interface IProps { // This will be inserted after the children. createOverflowElement: (overflowCount: number, totalCount: number) => React.ReactNode; children?: ReactNode; + id?: string; } export default class TruncatedList extends React.Component { @@ -86,7 +87,7 @@ export default class TruncatedList extends React.Component { const childNodes = this.getChildren(0, upperBound); return ( -
+
{childNodes} {overflowNode}
diff --git a/test/accessibility/RovingTabIndex-test.tsx b/test/accessibility/RovingTabIndex-test.tsx index 4a2e67fece6..c2d5fbf0a86 100644 --- a/test/accessibility/RovingTabIndex-test.tsx +++ b/test/accessibility/RovingTabIndex-test.tsx @@ -16,6 +16,7 @@ limitations under the License. import React, { HTMLAttributes } from "react"; import { render } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; import { IState, @@ -364,4 +365,61 @@ describe("RovingTabIndex", () => { }); }); }); + + describe("handles arrow keys", () => { + it("should handle up/down arrow keys work when handleUpDown=true", async () => { + const { container } = render( + + {({ onKeyDownHandler }) => ( +
+ {button1} + {button2} + {button3} +
+ )} +
, + ); + + container.querySelectorAll("button")[0].focus(); + checkTabIndexes(container.querySelectorAll("button"), [0, -1, -1]); + + await userEvent.keyboard("[ArrowDown]"); + checkTabIndexes(container.querySelectorAll("button"), [-1, 0, -1]); + + await userEvent.keyboard("[ArrowDown]"); + checkTabIndexes(container.querySelectorAll("button"), [-1, -1, 0]); + + await userEvent.keyboard("[ArrowUp]"); + checkTabIndexes(container.querySelectorAll("button"), [-1, 0, -1]); + + await userEvent.keyboard("[ArrowUp]"); + checkTabIndexes(container.querySelectorAll("button"), [0, -1, -1]); + + // Does not loop without + await userEvent.keyboard("[ArrowUp]"); + checkTabIndexes(container.querySelectorAll("button"), [0, -1, -1]); + }); + + it("should call scrollIntoView if specified", async () => { + const { container } = render( + + {({ onKeyDownHandler }) => ( +
+ {button1} + {button2} + {button3} +
+ )} +
, + ); + + container.querySelectorAll("button")[0].focus(); + checkTabIndexes(container.querySelectorAll("button"), [0, -1, -1]); + + const button = container.querySelectorAll("button")[1]; + const mock = jest.spyOn(button, "scrollIntoView"); + await userEvent.keyboard("[ArrowDown]"); + expect(mock).toHaveBeenCalled(); + }); + }); }); diff --git a/test/components/views/dialogs/ForwardDialog-test.tsx b/test/components/views/dialogs/ForwardDialog-test.tsx index 1147a8ac93d..6206087ab85 100644 --- a/test/components/views/dialogs/ForwardDialog-test.tsx +++ b/test/components/views/dialogs/ForwardDialog-test.tsx @@ -24,7 +24,7 @@ import { M_TIMESTAMP, M_TEXT, } from "matrix-js-sdk/src/matrix"; -import { act, fireEvent, getByTestId, render, RenderResult, screen } from "@testing-library/react"; +import { act, fireEvent, getByTestId, render, RenderResult, screen, waitFor } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { MatrixClientPeg } from "../../../../src/MatrixClientPeg"; @@ -44,6 +44,13 @@ import { import { TILE_SERVER_WK_KEY } from "../../../../src/utils/WellKnownUtils"; import SettingsStore from "../../../../src/settings/SettingsStore"; +// mock offsetParent +Object.defineProperty(HTMLElement.prototype, "offsetParent", { + get() { + return this.parentNode; + }, +}); + describe("ForwardDialog", () => { const sourceRoom = "!111111111111111111:example.org"; const aliceId = "@alice:example.org"; @@ -128,6 +135,37 @@ describe("ForwardDialog", () => { expect(container.querySelectorAll(".mx_ForwardList_entry")).toHaveLength(3); }); + it("should be navigable using arrow keys", async () => { + const { container } = mountForwardDialog(); + + const searchBox = getByTestId(container, "searchbox-input"); + searchBox.focus(); + await waitFor(() => + expect(container.querySelectorAll(".mx_ForwardList_entry")[0]).toHaveClass("mx_ForwardList_entry_active"), + ); + + await userEvent.keyboard("[ArrowDown]"); + await waitFor(() => + expect(container.querySelectorAll(".mx_ForwardList_entry")[1]).toHaveClass("mx_ForwardList_entry_active"), + ); + + await userEvent.keyboard("[ArrowDown]"); + await waitFor(() => + expect(container.querySelectorAll(".mx_ForwardList_entry")[2]).toHaveClass("mx_ForwardList_entry_active"), + ); + + await userEvent.keyboard("[ArrowUp]"); + await waitFor(() => + expect(container.querySelectorAll(".mx_ForwardList_entry")[1]).toHaveClass("mx_ForwardList_entry_active"), + ); + + await userEvent.keyboard("[Enter]"); + expect(mockClient.sendEvent).toHaveBeenCalledWith("A", "m.room.message", { + body: "Hello world!", + msgtype: "m.text", + }); + }); + it("tracks message sending progress across multiple rooms", async () => { mockPlatformPeg(); const { container } = mountForwardDialog(); From 89eb8848219719a1ede273a9fbf7549293fb48c4 Mon Sep 17 00:00:00 2001 From: ElementRobot Date: Mon, 11 Mar 2024 06:22:49 +0000 Subject: [PATCH 008/235] [create-pull-request] automated change (#12330) Co-authored-by: github-merge-queue --- src/i18n/strings/eo.json | 1 + src/i18n/strings/et.json | 51 +++++++++++++++++++++++++++++++++------- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index bb2560e3c4d..0d518db05ea 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -1056,6 +1056,7 @@ "group_profile": "Profilo", "group_rooms": "Ĉambroj", "group_spaces": "Aroj", + "group_threads": "Fadenoj", "group_voip": "Voĉo kaj vido", "group_widgets": "Fenestraĵoj", "html_topic": "Montru HTML-prezenton de ĉambrotemoj", diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 0aec099268c..1e7cdab6e4e 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -1,6 +1,8 @@ { "a11y": { + "emoji_picker": "Emojide valija", "jump_first_invite": "Siirdu esimese kutse juurde.", + "message_composer": "Sõnumikoostaja", "n_unread_messages": { "other": "%(count)s lugemata teadet.", "one": "1 lugemata teade." @@ -9,7 +11,10 @@ "one": "1 lugemata mainimine.", "other": "%(count)s lugemata sõnumit kaasa arvatud mainimised." }, + "recent_rooms": "Hiljuti kasutatud jututoad", "room_name": "Jututuba %(name)s", + "room_status_bar": "Jututoa olekuriba", + "seek_bar_label": "Heli kerimisriba", "unread_messages": "Lugemata sõnumid.", "user_menu": "Kasutajamenüü" }, @@ -30,7 +35,7 @@ "click": "Klõpsi", "click_to_copy": "Kopeerimiseks klõpsa", "close": "Sulge", - "collapse": "ahenda", + "collapse": "Ahenda", "complete": "Valmis", "confirm": "Kinnita", "continue": "Jätka", @@ -50,7 +55,7 @@ "enable": "Võta kasutusele", "enter_fullscreen": "Lülita täisekraanivaade sisse", "exit_fullscreeen": "Lülita täisekraanivaade välja", - "expand": "laienda", + "expand": "Laienda", "explore_public_rooms": "Sirvi avalikke jututubasid", "explore_rooms": "Tutvu jututubadega", "export": "Ekspordi", @@ -319,7 +324,7 @@ "set_email_prompt": "Kas sa soovid seadistada e-posti aadressi?", "sign_in_description": "Jätkamaks kasuta oma kontot.", "sign_in_instead": "Pigem logi sisse", - "sign_in_instead_prompt": "Pigem logi sisse", + "sign_in_instead_prompt": "Sul juba on kasutajakonto olemas? Siis logi siin sisse", "sign_in_or_register": "Logi sisse või loo uus konto", "sign_in_or_register_description": "Jätkamaks kasuta oma kontot või loo uus konto.", "sign_in_prompt": "Sul on kasutajakonto olemas? Siis logi sisse", @@ -1052,9 +1057,13 @@ "unknown_error_code": "tundmatu veakood", "update_power_level": "Õiguste muutmine ei õnnestunud" }, - "error_app_open_in_another_tab": "%(brand)s on avatud teises vahekaardis.", + "error_app_open_in_another_tab": "%(brand)s'i kasutamiseks ava teine vahekaart. Selle vahekaardi võid kinni panna.", + "error_app_open_in_another_tab_title": "%(brand)s'i on kasutatav teisel vahekaardil", "error_app_opened_in_another_window": "%(brand)s on avatud teises aknas. Klõpsa \"%(label)s\", et kasutada siin %(brand)s ja katkestada teise akna ühendus.", - "error_database_closed_title": "Andmebaasiühendus sulgus ootamatult", + "error_database_closed_description": { + "for_desktop": "Andmekandja maht võib olla täis saanud. Palun tee ruumi juurde ja laadi leht uuesti." + }, + "error_database_closed_title": "%(brand)s lõpetas ootamatult töö", "error_dialog": { "copy_room_link_failed": { "description": "Jututoa lingi kopeerimine lõikelauale ei õnnestunud.", @@ -1299,6 +1308,7 @@ }, "keyboard": { "activate_button": "Aktiveeri valitud nupp", + "alt": "Alt", "autocomplete_cancel": "Lülita automaatne sõnalõpetus välja", "autocomplete_force": "Sunni lõpetama", "autocomplete_navigate_next": "Järgmine sisestussoovitus", @@ -1322,9 +1332,13 @@ "composer_toggle_link": "Lülita link sisse/välja", "composer_toggle_quote": "Lülita tsiteerimine sisse/välja", "composer_undo": "Võta muudatus tagasi", + "control": "Ctrl", "dismiss_read_marker_and_jump_bottom": "Ära arvesta loetud sõnumite järjehoidjat ning mine kõige lõppu", + "end": "End", + "enter": "Enter", + "escape": "Esc", "go_home_view": "Avalehele", - "home": "Avaleht", + "home": "Home", "jump_first_message": "Mine esimese sõnumi juurde", "jump_last_message": "Mine viimase sõnumi juurde", "jump_room_search": "Suundu jututoa otsingusse", @@ -1336,7 +1350,10 @@ "navigate_prev_message_edit": "Muutmiseks liigu eelmise sõnumi juurde", "next_room": "Järgmine otsevestlus või jututuba", "next_unread_room": "Järgmine lugemata otsevestlus või jututuba", + "number": "[number]", "open_user_settings": "Ava kasutaja seadistused", + "page_down": "Page Down", + "page_up": "Page Up", "prev_room": "Eelmine otsevestlus või jututuba", "prev_unread_room": "Eelmine lugemata otsevestlus või jututuba", "room_list_collapse_section": "Ahenda jututubade loendi valikut", @@ -1348,6 +1365,7 @@ "scroll_up_timeline": "Liigu ajajoonel üles", "search": "Otsing (peab olema lubatud)", "send_sticker": "Saada kleeps", + "shift": "Shift", "space": "Tühikuklahv", "switch_to_space": "Vaata kogukonnakeskust tema numbri alusel", "toggle_hidden_events": "Lülita peidetud sündmuste näitamine sisse/välja", @@ -1383,6 +1401,7 @@ "element_call_video_rooms": "Element Call videotoad", "experimental_description": "Soovid katsetada? Proovi meie uusimaid arendusmõtteid. Need funktsionaalsused pole üldsegi veel valmis, nad võivad toimida puudulikult, võivad muutuda või sootuks lõpetamata jääda. Lisateavet leiad siit.", "experimental_section": "Varased arendusjärgud", + "feature_disable_call_per_sender_encryption": "Lülita Element Call'i kasutamisel krüptimine kasutajakohaselt välja", "feature_wysiwyg_composer_description": "Sõnumite kirjutamisel kasuta Markdown'i asemel täisfunktsionaalset küljendust.", "group_calls": "Uus rühmakõnede lahendus", "group_developer": "Arendajad", @@ -1413,11 +1432,17 @@ "new_room_decoration_ui": "Uus jututoa päis ja infovaade on hetkel aktiivses arenduses", "notification_settings": "Uued teavituste seadistused", "notification_settings_beta_title": "Teavituste seadistused", - "oidc_native_flow": "Luba OIDC liidestus (aktiivselt arendamisel)", + "notifications": "Kasuta jututoa päises teavituste riba", + "oidc_native_flow": "OIDC-põhine autentimine", + "oidc_native_flow_description": "⚠ HOIATUS: Kasuta OIDC liidestust, kui server seda võimaldab (aktiivselt arendamisel).", "pinning": "Sõnumite esiletõstmine", "report_to_moderators": "Teata moderaatoritele", "report_to_moderators_description": "Kui jututoas on modereerimine kasutusel, siis nupust „Teata sisust“ avaneva vormi abil saad jututoa reegleid rikkuvast sisust teatada moderaatoritele.", "rust_crypto": "Rust'is teostatud krüptolahendus", + "rust_crypto_in_config": "Rust'i krüptograafiat ei saa selles %(brand)s'i paigalduses välja lülitada", + "rust_crypto_in_config_description": "Rust'i teekidel põhineva krüptograafia kasutusele võtmine eeldab andmete ümbertõstmist ja selleks võib kuluda õige mitu minutit. Hiljem ei saa seda funktsionaalsust enam välja lülitada. Palun ole kindel, et tead, mida teed!", + "rust_crypto_optin_warning": "Rust'i teekidel põhineva krüptograafia kasutusele võtmine eeldab andmete ümbertõstmist ja selleks võib kuluda õige mitu minutit. Selle funktsionaalsuse väljalülitamiseks pead võrgust välja logima ning seejärel tagasi logima. Palun ole kindel, et tead, mida teed!", + "rust_crypto_requires_logout": "Kui Rust'i põhised teegid on kasutusel, siis selle funktsionaalsuse väljalülitamiseks pead võrgust välja logima ning seejärel tagasi logima", "sliding_sync": "Järkjärgulise sünkroniseerimise režiim", "sliding_sync_checking": "Kontrollin…", "sliding_sync_configuration": "Sliding Sync konfiguratsioon", @@ -1560,6 +1585,7 @@ "toast_description": "%(brand)s toimib nutiseadme veebibrauseris kastseliselt. Parima kasutajakogemuse ja uusima funktsionaalsuse jaoks kasuta meie rakendust.", "toast_title": "Rakendusega saad Matrix'is suhelda parimal viisil" }, + "name_and_id": "%(name)s (%(userId)s)", "no_more_results": "Rohkem otsingutulemusi pole", "notif_panel": { "empty_description": "Sul pole nähtavaid teavitusi.", @@ -2267,6 +2293,8 @@ }, "join_rule_upgrade_upgrading_room": "Uuendan jututoa versiooni", "public_without_alias_warning": "Sellele jututoale viitamiseks palun lisa talle aadress.", + "publish_room": "Tee see jututuba nähtavaks avalikus jututubade kataloogis.", + "publish_space": "Tee see kogukond nähtavaks avalikus jututubade kataloogis.", "strict_encryption": "Ära iialgi saada sellest sessioonist krüptitud sõnumeid verifitseerimata sessioonidesse selles jututoas", "title": "Turvalisus ja privaatsus" }, @@ -2366,7 +2394,7 @@ "layout_irc": "IRC (katseline)", "match_system_theme": "Kasuta süsteemset teemat", "subheading": "Välimuse kohendused kehtivad vaid selles %(brand)s'i sessioonis.", - "timeline_image_size": "Ajajoone piltide suurus", + "timeline_image_size": "Piltide suurus ajajoonel", "use_high_contrast": "Kasuta kontrastset välimust" }, "automatic_language_detection_syntax_highlight": "Kasuta süntaksi esiletõstmisel automaatset keeletuvastust", @@ -2699,6 +2727,7 @@ "device_verified_description": "See sessioon on valmis turvaliseks sõnumivahetuseks.", "device_verified_description_current": "Sinu praegune sessioon on valmis turvaliseks sõnumivahetuseks.", "error_pusher_state": "Tõuketeavituste teenuse oleku määramine ei õnnestunud", + "error_set_name": "Sessiooni nime määramine ei õnnestunud", "filter_all": "Kõik", "filter_inactive": "Pole pidevas kasutuses", "filter_inactive_description": "Pole olnud kasutusel %(inactiveAgeDays)s või enam päeva", @@ -3080,6 +3109,9 @@ "show_thread_filter": "Näita:", "unable_to_decrypt": "Sõnumi dekrüptimine ei õnnestunud" }, + "threads_activity_centre": { + "no_rooms_with_unreads_threads": "Sul veel pole lugemata jutulõngadega jututubasid." + }, "time": { "about_day_ago": "umbes päev tagasi", "about_hour_ago": "umbes tund aega tagasi", @@ -3924,6 +3956,7 @@ "l33t": "Ennustatavatest asendustest nagu '@' 'a' asemel pole eriti kasu", "longerKeyboardPattern": "Kasuta pikemaid klahvikombinatsioone, kus vajutatud klahvid pole kõrvuti ega kohakuti", "noNeed": "Sa ei pea sisestama erilisi tähemärke, numbreid ega suurtähti", + "pwned": "Kui sa kasutad seda salasõna mujalgi, siis palun muuda ta siin ära.", "recentYears": "Väldi hiljutisi aastaid", "repeated": "Väldi korduvaid sõnu ja tähemärke", "reverseWords": "Tagurpidi kirjutatud sõnu pole eriti keeruline ära arvata", @@ -3937,6 +3970,7 @@ "extendedRepeat": "Kordusi, nagu „abcabcabc“ on vaid natuke raskem ära arvata kui „abc“", "keyPattern": "Lühikesi klahvijärjestusi on lihtne ära arvata", "namesByThemselves": "Nimesid ja perenimesid on lihtne ära arvata", + "pwned": "Sinu salasõna on muutunud laiemas internetis toimunud ründe tõttu avalikuks.", "recentYears": "Hiljutisi aastaid on lihtne ära arvata", "sequences": "Jadasid nagu „abc“ või „6543“ on lihtne ära arvata", "similarToCommon": "See on sarnane tavaliselt kasutatavatele salasõnadele", @@ -3944,6 +3978,7 @@ "straightRow": "Klaviatuuril järjest paiknevaid klahvikombinatsioone on lihtne ära arvata", "topHundred": "See on saja levinuima salasõna seas", "topTen": "See on kümne levinuima salasõna seas", + "userInputs": "Siin ei tohiks olla ei isiklikku ega selle lehega seotud andmeid.", "wordByItself": "Üksikut sõna on lihtne ära arvata" } } From 431ae32304c2bfa62c592be6e77f4c253fade846 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 11 Mar 2024 09:30:00 +0000 Subject: [PATCH 009/235] Reuse media content/info types from the js-sdk (#12308) --- .eslintrc.js | 1 + src/@types/matrix-js-sdk.d.ts | 27 +++ src/ContentMessages.ts | 18 +- src/components/views/messages/MAudioBody.tsx | 4 +- src/components/views/messages/MFileBody.tsx | 6 +- src/components/views/messages/MImageBody.tsx | 2 +- .../views/messages/MImageReplyBody.tsx | 2 +- .../views/messages/MStickerBody.tsx | 4 +- src/components/views/messages/MVideoBody.tsx | 10 +- src/customisations/Media.ts | 7 +- .../models/IMediaEventContent.ts | 219 +----------------- src/models/RoomUpload.ts | 3 +- src/utils/DecryptFile.ts | 6 +- src/utils/FileUtils.ts | 6 +- src/utils/MediaEventHelper.ts | 6 +- src/utils/exportUtils/Exporter.ts | 4 +- src/utils/image-media.ts | 3 +- .../models/VoiceBroadcastRecording.ts | 2 +- .../models/VoiceBroadcastRecording-test.ts | 2 +- 19 files changed, 74 insertions(+), 258 deletions(-) create mode 100644 src/@types/matrix-js-sdk.d.ts diff --git a/.eslintrc.js b/.eslintrc.js index 0d877a7bbbd..3beb4d2332f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -76,6 +76,7 @@ module.exports = { group: [ "matrix-js-sdk/src/**", "!matrix-js-sdk/src/matrix", + "!matrix-js-sdk/src/types", "matrix-js-sdk/lib", "matrix-js-sdk/lib/", "matrix-js-sdk/lib/**", diff --git a/src/@types/matrix-js-sdk.d.ts b/src/@types/matrix-js-sdk.d.ts new file mode 100644 index 00000000000..1ce1702f1fb --- /dev/null +++ b/src/@types/matrix-js-sdk.d.ts @@ -0,0 +1,27 @@ +/* +Copyright 2024 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { BLURHASH_FIELD } from "../utils/image-media"; + +// Matrix JS SDK extensions +declare module "matrix-js-sdk" { + export interface FileInfo { + /** + * @see https://github.com/matrix-org/matrix-spec-proposals/pull/2448 + */ + [BLURHASH_FIELD]?: string; + } +} diff --git a/src/ContentMessages.ts b/src/ContentMessages.ts index 9a8a1d7c4fb..0a5198ea567 100644 --- a/src/ContentMessages.ts +++ b/src/ContentMessages.ts @@ -28,19 +28,19 @@ import { UploadProgress, THREAD_RELATION_TYPE, } from "matrix-js-sdk/src/matrix"; +import { + ImageInfo, + AudioInfo, + VideoInfo, + EncryptedFile, + MediaEventContent, + MediaEventInfo, +} from "matrix-js-sdk/src/types"; import encrypt from "matrix-encrypt-attachment"; import extractPngChunks from "png-chunks-extract"; import { logger } from "matrix-js-sdk/src/logger"; import { removeElement } from "matrix-js-sdk/src/utils"; -import { - AudioInfo, - EncryptedFile, - ImageInfo, - IMediaEventContent, - IMediaEventInfo, - VideoInfo, -} from "./customisations/models/IMediaEventContent"; import dis from "./dispatcher/dispatcher"; import { _t } from "./languageHandler"; import Modal from "./Modal"; @@ -537,7 +537,7 @@ export default class ContentMessages { promBefore?: Promise, ): Promise { const fileName = file.name || _t("common|attachment"); - const content: Omit & { info: Partial } = { + const content: Omit & { info: Partial } = { body: fileName, info: { size: file.size, diff --git a/src/components/views/messages/MAudioBody.tsx b/src/components/views/messages/MAudioBody.tsx index 52cd2334afd..de30b65f724 100644 --- a/src/components/views/messages/MAudioBody.tsx +++ b/src/components/views/messages/MAudioBody.tsx @@ -17,12 +17,12 @@ limitations under the License. import React from "react"; import { logger } from "matrix-js-sdk/src/logger"; import { IContent } from "matrix-js-sdk/src/matrix"; +import { MediaEventContent } from "matrix-js-sdk/src/types"; import { Playback } from "../../../audio/Playback"; import InlineSpinner from "../elements/InlineSpinner"; import { _t } from "../../../languageHandler"; import AudioPlayer from "../audio_messages/AudioPlayer"; -import { IMediaEventContent } from "../../../customisations/models/IMediaEventContent"; import MFileBody from "./MFileBody"; import { IBodyProps } from "./IBodyProps"; import { PlaybackManager } from "../../../audio/PlaybackManager"; @@ -67,7 +67,7 @@ export default class MAudioBody extends React.PureComponent // We should have a buffer to work with now: let's set it up // Note: we don't actually need a waveform to render an audio event, but voice messages do. - const content = this.props.mxEvent.getContent(); + const content = this.props.mxEvent.getContent(); const waveform = content?.["org.matrix.msc1767.audio"]?.waveform?.map((p: number) => p / 1024); // We should have a buffer to work with now: let's set it up diff --git a/src/components/views/messages/MFileBody.tsx b/src/components/views/messages/MFileBody.tsx index ab0c1f505ec..12d4c804168 100644 --- a/src/components/views/messages/MFileBody.tsx +++ b/src/components/views/messages/MFileBody.tsx @@ -16,6 +16,7 @@ limitations under the License. import React, { AllHTMLAttributes, createRef } from "react"; import { logger } from "matrix-js-sdk/src/logger"; +import { MediaEventContent } from "matrix-js-sdk/src/types"; import { _t } from "../../../languageHandler"; import Modal from "../../../Modal"; @@ -23,7 +24,6 @@ import AccessibleButton from "../elements/AccessibleButton"; import { mediaFromContent } from "../../../customisations/Media"; import ErrorDialog from "../dialogs/ErrorDialog"; import { fileSize, presentableTextForFile } from "../../../utils/FileUtils"; -import { IMediaEventContent } from "../../../customisations/models/IMediaEventContent"; import { IBodyProps } from "./IBodyProps"; import { FileDownloader } from "../../../utils/FileDownloader"; import TextWithTooltip from "../elements/TextWithTooltip"; @@ -128,8 +128,8 @@ export default class MFileBody extends React.Component { const media = mediaFromContent(this.props.mxEvent.getContent()); return media.srcHttp; } - private get content(): IMediaEventContent { - return this.props.mxEvent.getContent(); + private get content(): MediaEventContent { + return this.props.mxEvent.getContent(); } private get fileName(): string { diff --git a/src/components/views/messages/MImageBody.tsx b/src/components/views/messages/MImageBody.tsx index ff4d573e059..36f3a851687 100644 --- a/src/components/views/messages/MImageBody.tsx +++ b/src/components/views/messages/MImageBody.tsx @@ -21,6 +21,7 @@ import classNames from "classnames"; import { CSSTransition, SwitchTransition } from "react-transition-group"; import { logger } from "matrix-js-sdk/src/logger"; import { ClientEvent, ClientEventHandlerMap } from "matrix-js-sdk/src/matrix"; +import { ImageContent } from "matrix-js-sdk/src/types"; import { Tooltip } from "@vector-im/compound-web"; import MFileBody from "./MFileBody"; @@ -30,7 +31,6 @@ import SettingsStore from "../../../settings/SettingsStore"; import Spinner from "../elements/Spinner"; import { Media, mediaFromContent } from "../../../customisations/Media"; import { BLURHASH_FIELD, createThumbnail } from "../../../utils/image-media"; -import { ImageContent } from "../../../customisations/models/IMediaEventContent"; import ImageView from "../elements/ImageView"; import { IBodyProps } from "./IBodyProps"; import { ImageSize, suggestedSize as suggestedImageSize } from "../../../settings/enums/ImageSize"; diff --git a/src/components/views/messages/MImageReplyBody.tsx b/src/components/views/messages/MImageReplyBody.tsx index c6d61a7ba5b..ded0d374a80 100644 --- a/src/components/views/messages/MImageReplyBody.tsx +++ b/src/components/views/messages/MImageReplyBody.tsx @@ -15,9 +15,9 @@ limitations under the License. */ import React from "react"; +import { ImageContent } from "matrix-js-sdk/src/types"; import MImageBody from "./MImageBody"; -import { ImageContent } from "../../../customisations/models/IMediaEventContent"; const FORCED_IMAGE_HEIGHT = 44; diff --git a/src/components/views/messages/MStickerBody.tsx b/src/components/views/messages/MStickerBody.tsx index 26c33e89fca..a002670b52b 100644 --- a/src/components/views/messages/MStickerBody.tsx +++ b/src/components/views/messages/MStickerBody.tsx @@ -16,10 +16,10 @@ limitations under the License. import React, { ComponentProps, ReactNode } from "react"; import { Tooltip } from "@vector-im/compound-web"; +import { MediaEventContent } from "matrix-js-sdk/src/types"; import MImageBody from "./MImageBody"; import { BLURHASH_FIELD } from "../../../utils/image-media"; -import { IMediaEventContent } from "../../../customisations/models/IMediaEventContent"; export default class MStickerBody extends MImageBody { // Mostly empty to prevent default behaviour of MImageBody @@ -80,7 +80,7 @@ export default class MStickerBody extends MImageBody { return null; } - protected getBanner(content: IMediaEventContent): ReactNode { + protected getBanner(content: MediaEventContent): ReactNode { return null; // we don't need a banner, we have a tooltip } } diff --git a/src/components/views/messages/MVideoBody.tsx b/src/components/views/messages/MVideoBody.tsx index df3ab6abbf9..be6ae4442ce 100644 --- a/src/components/views/messages/MVideoBody.tsx +++ b/src/components/views/messages/MVideoBody.tsx @@ -16,6 +16,7 @@ limitations under the License. import React, { ReactNode } from "react"; import { decode } from "blurhash"; +import { MediaEventContent } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { _t } from "../../../languageHandler"; @@ -23,7 +24,6 @@ import SettingsStore from "../../../settings/SettingsStore"; import InlineSpinner from "../elements/InlineSpinner"; import { mediaFromContent } from "../../../customisations/Media"; import { BLURHASH_FIELD } from "../../../utils/image-media"; -import { IMediaEventContent } from "../../../customisations/models/IMediaEventContent"; import { IBodyProps } from "./IBodyProps"; import MFileBody from "./MFileBody"; import { ImageSize, suggestedSize as suggestedVideoSize } from "../../../settings/enums/ImageSize"; @@ -62,7 +62,7 @@ export default class MVideoBody extends React.PureComponent } private getContentUrl(): string | undefined { - const content = this.props.mxEvent.getContent(); + const content = this.props.mxEvent.getContent(); // During export, the content url will point to the MSC, which will later point to a local url if (this.props.forExport) return content.file?.url ?? content.url; const media = mediaFromContent(content); @@ -82,7 +82,7 @@ export default class MVideoBody extends React.PureComponent // there's no need of thumbnail when the content is local if (this.props.forExport) return null; - const content = this.props.mxEvent.getContent(); + const content = this.props.mxEvent.getContent(); const media = mediaFromContent(content); if (media.isEncrypted && this.state.decryptedThumbnailUrl) { @@ -121,7 +121,7 @@ export default class MVideoBody extends React.PureComponent posterLoading: true, }); - const content = this.props.mxEvent.getContent(); + const content = this.props.mxEvent.getContent(); const media = mediaFromContent(content); if (media.hasThumbnail) { const image = new Image(); @@ -157,7 +157,7 @@ export default class MVideoBody extends React.PureComponent this.props.onHeightChanged?.(); } else { logger.log("NOT preloading video"); - const content = this.props.mxEvent.getContent(); + const content = this.props.mxEvent.getContent(); let mimetype = content?.info?.mimetype; diff --git a/src/customisations/Media.ts b/src/customisations/Media.ts index 05f91325dd7..25e8489658d 100644 --- a/src/customisations/Media.ts +++ b/src/customisations/Media.ts @@ -15,10 +15,11 @@ */ import { MatrixClient, ResizeMethod } from "matrix-js-sdk/src/matrix"; +import { MediaEventContent } from "matrix-js-sdk/src/types"; import { Optional } from "matrix-events-sdk"; import { MatrixClientPeg } from "../MatrixClientPeg"; -import { IMediaEventContent, IPreparedMedia, prepEventContentAsMedia } from "./models/IMediaEventContent"; +import { IPreparedMedia, prepEventContentAsMedia } from "./models/IMediaEventContent"; import { UserFriendlyError } from "../languageHandler"; // Populate this class with the details of your customisations when copying it. @@ -154,11 +155,11 @@ export class Media { /** * Creates a media object from event content. - * @param {IMediaEventContent} content The event content. + * @param {MediaEventContent} content The event content. * @param {MatrixClient} client? Optional client to use. * @returns {Media} The media object. */ -export function mediaFromContent(content: Partial, client?: MatrixClient): Media { +export function mediaFromContent(content: Partial, client?: MatrixClient): Media { return new Media(prepEventContentAsMedia(content), client); } diff --git a/src/customisations/models/IMediaEventContent.ts b/src/customisations/models/IMediaEventContent.ts index 81714000d9b..ad305239b15 100644 --- a/src/customisations/models/IMediaEventContent.ts +++ b/src/customisations/models/IMediaEventContent.ts @@ -14,220 +14,7 @@ * limitations under the License. */ -// TODO: These types should be elsewhere. - -import { MsgType } from "matrix-js-sdk/src/matrix"; - -import { BLURHASH_FIELD } from "../../utils/image-media"; - -/** - * @see https://spec.matrix.org/v1.7/client-server-api/#extensions-to-mroommessage-msgtypes - */ -export interface EncryptedFile { - /** - * The URL to the file. - */ - url: string; - /** - * A JSON Web Key object. - */ - key: { - alg: string; - key_ops: string[]; // eslint-disable-line camelcase - kty: string; - k: string; - ext: boolean; - }; - /** - * The 128-bit unique counter block used by AES-CTR, encoded as unpadded base64. - */ - iv: string; - /** - * A map from an algorithm name to a hash of the ciphertext, encoded as unpadded base64. - * Clients should support the SHA-256 hash, which uses the key sha256. - */ - hashes: { [alg: string]: string }; - /** - * Version of the encrypted attachment's protocol. Must be v2. - */ - v: string; -} - -interface ThumbnailInfo { - /** - * The mimetype of the image, e.g. image/jpeg. - */ - mimetype?: string; - /** - * The intended display width of the image in pixels. - * This may differ from the intrinsic dimensions of the image file. - */ - w?: number; - /** - * The intended display height of the image in pixels. - * This may differ from the intrinsic dimensions of the image file. - */ - h?: number; - /** - * Size of the image in bytes. - */ - size?: number; -} - -interface BaseInfo { - mimetype?: string; - size?: number; -} - -/** - * @see https://spec.matrix.org/v1.7/client-server-api/#mfile - */ -export interface FileInfo extends BaseInfo { - /** - * @see https://github.com/matrix-org/matrix-spec-proposals/pull/2448 - */ - [BLURHASH_FIELD]?: string; - /** - * Information on the encrypted thumbnail file, as specified in End-to-end encryption. - * Only present if the thumbnail is encrypted. - * @see https://spec.matrix.org/v1.7/client-server-api/#sending-encrypted-attachments - */ - thumbnail_file?: EncryptedFile; - /** - * Metadata about the image referred to in thumbnail_url. - */ - thumbnail_info?: ThumbnailInfo; - /** - * The URL to the thumbnail of the file. Only present if the thumbnail is unencrypted. - */ - thumbnail_url?: string; -} - -/** - * @see https://spec.matrix.org/v1.7/client-server-api/#mimage - * - */ -export interface ImageInfo extends FileInfo, ThumbnailInfo {} - -/** - * @see https://spec.matrix.org/v1.7/client-server-api/#mimage - */ -export interface AudioInfo extends BaseInfo { - /** - * The duration of the audio in milliseconds. - */ - duration?: number; -} - -/** - * @see https://spec.matrix.org/v1.7/client-server-api/#mvideo - */ -export interface VideoInfo extends AudioInfo, ImageInfo { - /** - * The duration of the video in milliseconds. - */ - duration?: number; -} - -export type IMediaEventInfo = FileInfo | ImageInfo | AudioInfo | VideoInfo; - -interface BaseContent { - /** - * Required if the file is encrypted. Information on the encrypted file, as specified in End-to-end encryption. - * @see https://spec.matrix.org/v1.7/client-server-api/#sending-encrypted-attachments - */ - file?: EncryptedFile; - /** - * Required if the file is unencrypted. The URL (typically mxc:// URI) to the file. - */ - url?: string; -} - -/** - * @see https://spec.matrix.org/v1.7/client-server-api/#mfile - */ -export interface FileContent extends BaseContent { - /** - * A human-readable description of the file. - * This is recommended to be the filename of the original upload. - */ - body: string; - /** - * The original filename of the uploaded file. - */ - filename?: string; - /** - * Information about the file referred to in url. - */ - info?: FileInfo; - /** - * One of: [m.file]. - */ - msgtype: MsgType.File; -} - -/** - * @see https://spec.matrix.org/v1.7/client-server-api/#mimage - */ -export interface ImageContent extends BaseContent { - /** - * A textual representation of the image. - * This could be the alt text of the image, the filename of the image, - * or some kind of content description for accessibility e.g. ‘image attachment’. - */ - body: string; - /** - * Metadata about the image referred to in url. - */ - info?: ImageInfo; - /** - * One of: [m.image]. - */ - msgtype: MsgType.Image; -} - -/** - * @see https://spec.matrix.org/v1.7/client-server-api/#maudio - */ -export interface AudioContent extends BaseContent { - /** - * A description of the audio e.g. ‘Bee Gees - Stayin’ Alive’, - * or some kind of content description for accessibility e.g. ‘audio attachment’. - */ - body: string; - /** - * Metadata for the audio clip referred to in url. - */ - info?: AudioInfo; - /** - * One of: [m.audio]. - */ - msgtype: MsgType.Audio; -} - -/** - * @see https://spec.matrix.org/v1.7/client-server-api/#mvideo - */ -export interface VideoContent extends BaseContent { - /** - * A description of the video e.g. ‘Gangnam style’, - * or some kind of content description for accessibility e.g. ‘video attachment’. - */ - body: string; - /** - * Metadata about the video clip referred to in url. - */ - info?: VideoInfo; - /** - * One of: [m.video]. - */ - msgtype: MsgType.Video; -} - -/** - * Type representing media event contents for `m.room.message` events listed in the Matrix specification - */ -export type IMediaEventContent = FileContent | ImageContent | AudioContent | VideoContent; +import { EncryptedFile, MediaEventContent } from "matrix-js-sdk/src/types"; export interface IPreparedMedia extends IMediaObject { thumbnail?: IMediaObject; @@ -241,11 +28,11 @@ export interface IMediaObject { /** * Parses an event content body into a prepared media object. This prepared media object * can be used with other functions to manipulate the media. - * @param {IMediaEventContent} content Unredacted media event content. See interface. + * @param {MediaEventContent} content Unredacted media event content. See interface. * @returns {IPreparedMedia} A prepared media object. * @throws Throws if the given content cannot be packaged into a prepared media object. */ -export function prepEventContentAsMedia(content: Partial): IPreparedMedia { +export function prepEventContentAsMedia(content: Partial): IPreparedMedia { let thumbnail: IMediaObject | undefined; if (typeof content?.info === "object" && "thumbnail_url" in content.info && content.info.thumbnail_url) { thumbnail = { diff --git a/src/models/RoomUpload.ts b/src/models/RoomUpload.ts index d6e0be4ca97..cc1b35315f5 100644 --- a/src/models/RoomUpload.ts +++ b/src/models/RoomUpload.ts @@ -15,8 +15,7 @@ limitations under the License. */ import { IEventRelation, UploadProgress } from "matrix-js-sdk/src/matrix"; - -import { EncryptedFile } from "../customisations/models/IMediaEventContent"; +import { EncryptedFile } from "matrix-js-sdk/src/types"; export class RoomUpload { public readonly abortController = new AbortController(); diff --git a/src/utils/DecryptFile.ts b/src/utils/DecryptFile.ts index 9b72c13bd39..c72f57589f7 100644 --- a/src/utils/DecryptFile.ts +++ b/src/utils/DecryptFile.ts @@ -17,9 +17,9 @@ limitations under the License. // Pull in the encryption lib so that we can decrypt attachments. import encrypt from "matrix-encrypt-attachment"; import { parseErrorResponse } from "matrix-js-sdk/src/matrix"; +import { EncryptedFile, MediaEventInfo } from "matrix-js-sdk/src/types"; import { mediaFromContent } from "../customisations/Media"; -import { EncryptedFile, IMediaEventInfo } from "../customisations/models/IMediaEventContent"; import { getBlobSafeMimeType } from "./blobs"; export class DownloadError extends Error { @@ -44,10 +44,10 @@ export class DecryptError extends Error { * This passed to [link]{@link https://github.com/matrix-org/matrix-encrypt-attachment} * as the encryption info object, so will also have the those keys in addition to * the keys below. - * @param {IMediaEventInfo} info The info parameter taken from the matrix event. + * @param {MediaEventInfo} info The info parameter taken from the matrix event. * @returns {Promise} Resolves to a Blob of the file. */ -export async function decryptFile(file?: EncryptedFile, info?: IMediaEventInfo): Promise { +export async function decryptFile(file?: EncryptedFile, info?: MediaEventInfo): Promise { // throws if file is falsy const media = mediaFromContent({ file }); diff --git a/src/utils/FileUtils.ts b/src/utils/FileUtils.ts index 8423a54ce4e..75511756f58 100644 --- a/src/utils/FileUtils.ts +++ b/src/utils/FileUtils.ts @@ -25,22 +25,22 @@ import { FileSizeReturnArray, FileSizeReturnObject, } from "filesize"; +import { MediaEventContent } from "matrix-js-sdk/src/types"; -import { IMediaEventContent } from "../customisations/models/IMediaEventContent"; import { _t } from "../languageHandler"; /** * Extracts a human-readable label for the file attachment to use as * link text. * - * @param {IMediaEventContent} content The "content" key of the matrix event. + * @param {MediaEventContent} content The "content" key of the matrix event. * @param {string} fallbackText The fallback text * @param {boolean} withSize Whether to include size information. Default true. * @param {boolean} shortened Ensure the extension of the file name is visible. Default false. * @return {string} the human-readable link text for the attachment. */ export function presentableTextForFile( - content: IMediaEventContent, + content: MediaEventContent, fallbackText = _t("common|attachment"), withSize = true, shortened = false, diff --git a/src/utils/MediaEventHelper.ts b/src/utils/MediaEventHelper.ts index ea14b175ae9..b9ceae9db5d 100644 --- a/src/utils/MediaEventHelper.ts +++ b/src/utils/MediaEventHelper.ts @@ -15,12 +15,12 @@ limitations under the License. */ import { MatrixEvent, EventType, MsgType } from "matrix-js-sdk/src/matrix"; +import { FileContent, ImageContent, MediaEventContent } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { LazyValue } from "./LazyValue"; import { Media, mediaFromContent } from "../customisations/Media"; import { decryptFile } from "./DecryptFile"; -import { FileContent, ImageContent, IMediaEventContent } from "../customisations/models/IMediaEventContent"; import { IDestroyable } from "./IDestroyable"; // TODO: We should consider caching the blobs. https://github.com/vector-im/element-web/issues/17192 @@ -48,7 +48,7 @@ export class MediaEventHelper implements IDestroyable { public get fileName(): string { return ( this.event.getContent().filename || - this.event.getContent().body || + this.event.getContent().body || "download" ); } @@ -81,7 +81,7 @@ export class MediaEventHelper implements IDestroyable { private fetchSource = (): Promise => { if (this.media.isEncrypted) { - const content = this.event.getContent(); + const content = this.event.getContent(); return decryptFile(content.file!, content.info); } return this.media.downloadSource().then((r) => r.blob()); diff --git a/src/utils/exportUtils/Exporter.ts b/src/utils/exportUtils/Exporter.ts index 9a4f3d42089..57b19e618ba 100644 --- a/src/utils/exportUtils/Exporter.ts +++ b/src/utils/exportUtils/Exporter.ts @@ -15,6 +15,7 @@ limitations under the License. */ import { Direction, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; +import { MediaEventContent } from "matrix-js-sdk/src/types"; import { saveAs } from "file-saver"; import { logger } from "matrix-js-sdk/src/logger"; import sanitizeFilename from "sanitize-filename"; @@ -24,7 +25,6 @@ import { decryptFile } from "../DecryptFile"; import { mediaFromContent } from "../../customisations/Media"; import { formatFullDateNoDay, formatFullDateNoDayISO } from "../../DateUtils"; import { isVoiceMessage } from "../EventUtils"; -import { IMediaEventContent } from "../../customisations/models/IMediaEventContent"; import { _t } from "../../languageHandler"; import SdkConfig from "../../SdkConfig"; @@ -225,7 +225,7 @@ export default abstract class Exporter { let blob: Blob | undefined = undefined; try { const isEncrypted = event.isEncrypted(); - const content = event.getContent(); + const content = event.getContent(); const shouldDecrypt = isEncrypted && content.hasOwnProperty("file") && event.getType() !== "m.sticker"; if (shouldDecrypt) { blob = await decryptFile(content.file); diff --git a/src/utils/image-media.ts b/src/utils/image-media.ts index fa252ee1aee..096fddbcbe9 100644 --- a/src/utils/image-media.ts +++ b/src/utils/image-media.ts @@ -14,8 +14,9 @@ See the License for the specific language governing permissions and limitations under the License. */ +import { EncryptedFile } from "matrix-js-sdk/src/types"; + import { BlurhashEncoder } from "../BlurhashEncoder"; -import { EncryptedFile } from "../customisations/models/IMediaEventContent"; type ThumbnailableElement = HTMLImageElement | HTMLVideoElement; diff --git a/src/voice-broadcast/models/VoiceBroadcastRecording.ts b/src/voice-broadcast/models/VoiceBroadcastRecording.ts index 81e07646a9d..bafb910b8ae 100644 --- a/src/voice-broadcast/models/VoiceBroadcastRecording.ts +++ b/src/voice-broadcast/models/VoiceBroadcastRecording.ts @@ -26,6 +26,7 @@ import { RelationType, TypedEventEmitter, } from "matrix-js-sdk/src/matrix"; +import { EncryptedFile } from "matrix-js-sdk/src/types"; import { ChunkRecordedPayload, @@ -38,7 +39,6 @@ import { VoiceBroadcastRecorderEvent, } from ".."; import { uploadFile } from "../../ContentMessages"; -import { EncryptedFile } from "../../customisations/models/IMediaEventContent"; import { createVoiceMessageContent } from "../../utils/createVoiceMessageContent"; import { IDestroyable } from "../../utils/IDestroyable"; import dis from "../../dispatcher/dispatcher"; diff --git a/test/voice-broadcast/models/VoiceBroadcastRecording-test.ts b/test/voice-broadcast/models/VoiceBroadcastRecording-test.ts index 896e1b303a7..1298b1ff49e 100644 --- a/test/voice-broadcast/models/VoiceBroadcastRecording-test.ts +++ b/test/voice-broadcast/models/VoiceBroadcastRecording-test.ts @@ -29,9 +29,9 @@ import { Relations, SyncState, } from "matrix-js-sdk/src/matrix"; +import { EncryptedFile } from "matrix-js-sdk/src/types"; import { uploadFile } from "../../../src/ContentMessages"; -import { EncryptedFile } from "../../../src/customisations/models/IMediaEventContent"; import { createVoiceMessageContent } from "../../../src/utils/createVoiceMessageContent"; import { createVoiceBroadcastRecorder, From 753fc2d33ace1d5f0775242805ece5e648e1cfa8 Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Mon, 11 Mar 2024 16:48:11 +0100 Subject: [PATCH 010/235] TAC: Fix CSS & component typos (#12333) * Fix CSS & component typo * Update snapshots --- res/css/structures/_ThreadsActivityCentre.pcss | 4 ++-- .../threads-activity-centre/ThreadsActivityCentre.tsx | 8 ++++---- .../__snapshots__/ThreadsActivityCentre-test.tsx.snap | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/res/css/structures/_ThreadsActivityCentre.pcss b/res/css/structures/_ThreadsActivityCentre.pcss index 4f723700f20..4c61d32f776 100644 --- a/res/css/structures/_ThreadsActivityCentre.pcss +++ b/res/css/structures/_ThreadsActivityCentre.pcss @@ -62,12 +62,12 @@ } } -.mx_ThreadsActivity_rows { +.mx_ThreadsActivityCentre_rows { overflow-y: scroll; /* Let some space at the top and the bottom of the pop-up */ max-height: calc(100vh - 200px); - .mx_ThreadsActivityRow { + .mx_ThreadsActivityCentreRow { height: 48px; /* Make the label of the MenuItem stay on one line and truncate with ellipsis if needed */ diff --git a/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentre.tsx b/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentre.tsx index debf8451642..098f2d828cf 100644 --- a/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentre.tsx +++ b/src/components/views/spaces/threads-activity-centre/ThreadsActivityCentre.tsx @@ -84,9 +84,9 @@ export function ThreadsActivityCentre({ displayButtonLabel }: ThreadsActivityCen } > {/* Make the content of the pop-up scrollable */} -
+
{roomsAndNotifications.rooms.map(({ room, notificationLevel }) => ( - { onClick(); diff --git a/test/components/views/spaces/__snapshots__/ThreadsActivityCentre-test.tsx.snap b/test/components/views/spaces/__snapshots__/ThreadsActivityCentre-test.tsx.snap index cbcb4bd6a15..5b9e2091b75 100644 --- a/test/components/views/spaces/__snapshots__/ThreadsActivityCentre-test.tsx.snap +++ b/test/components/views/spaces/__snapshots__/ThreadsActivityCentre-test.tsx.snap @@ -23,10 +23,10 @@ exports[`ThreadsActivityCentre renders notifications matching the snapshot 1`] = Threads activity
+ + +
+
+`; From 3c6fd586281693b07143d344856eb8873b1d360c Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 15 Mar 2024 11:06:12 +0000 Subject: [PATCH 027/235] Replace forceCount prop with hideIfDot (#12344) This replaces the `forceCount` prop on room badge components with `hideIfDot` which hopefully gives a better idea of what it does, since forceCount did not really force a count. Also remove the prop where it was just passing the default value anyway. --- .../views/avatars/DecoratedRoomAvatar.tsx | 10 +++++++--- src/components/views/rooms/ExtraTile.tsx | 2 +- src/components/views/rooms/NotificationBadge.tsx | 15 ++++++++------- src/components/views/rooms/RoomBreadcrumbs.tsx | 2 +- src/components/views/rooms/RoomSublist.tsx | 2 +- src/components/views/rooms/RoomTile.tsx | 6 +----- src/components/views/spaces/SpaceTreeLevel.tsx | 1 - 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/components/views/avatars/DecoratedRoomAvatar.tsx b/src/components/views/avatars/DecoratedRoomAvatar.tsx index ed8afe7b61a..5879dd3b1a7 100644 --- a/src/components/views/avatars/DecoratedRoomAvatar.tsx +++ b/src/components/views/avatars/DecoratedRoomAvatar.tsx @@ -35,7 +35,11 @@ interface IProps { room: Room; size: string; displayBadge?: boolean; - forceCount?: boolean; + /** + * If true, show nothing if the notification would only cause a dot to be shown rather than + * a badge. That is: only display badges and not dots. Default: false. + */ + hideIfDot?: boolean; oobData?: IOOBData; viewAvatarOnClick?: boolean; tooltipProps?: { @@ -178,14 +182,14 @@ export default class DecoratedRoomAvatar extends React.PureComponent ); diff --git a/src/components/views/rooms/ExtraTile.tsx b/src/components/views/rooms/ExtraTile.tsx index 157bfc4d562..3bb3a21525a 100644 --- a/src/components/views/rooms/ExtraTile.tsx +++ b/src/components/views/rooms/ExtraTile.tsx @@ -52,7 +52,7 @@ export default function ExtraTile({ let badge: JSX.Element | null = null; if (notificationState) { - badge = ; + badge = ; } let name = displayName; diff --git a/src/components/views/rooms/NotificationBadge.tsx b/src/components/views/rooms/NotificationBadge.tsx index d152ab6a626..d4f7ee50407 100644 --- a/src/components/views/rooms/NotificationBadge.tsx +++ b/src/components/views/rooms/NotificationBadge.tsx @@ -28,10 +28,10 @@ interface IProps { notification: NotificationState; /** - * If true, the badge will show a count if at all possible. This is typically - * used to override the user's preference for things like room sublists. + * If true, show nothing if the notification would only cause a dot to be shown rather than + * a badge. That is: only display badges and not dots. Default: false. */ - forceCount?: boolean; + hideIfDot?: boolean; /** * The room ID, if any, the badge represents. @@ -48,7 +48,7 @@ interface IClickableProps extends IProps, React.InputHTMLAttributes { } interface IState { - showCounts: boolean; // whether to show counts. Independent of props.forceCount + showCounts: boolean; // whether to show counts. } export default class NotificationBadge extends React.PureComponent, IState> { @@ -97,11 +97,12 @@ export default class NotificationBadge extends React.PureComponent = { diff --git a/src/components/views/rooms/RoomBreadcrumbs.tsx b/src/components/views/rooms/RoomBreadcrumbs.tsx index eca8da46240..cd31dbd8e79 100644 --- a/src/components/views/rooms/RoomBreadcrumbs.tsx +++ b/src/components/views/rooms/RoomBreadcrumbs.tsx @@ -61,7 +61,7 @@ const RoomBreadcrumbTile: React.FC<{ room: Room; onClick: (ev: ButtonEvent) => v room={room} size="32px" displayBadge={true} - forceCount={true} + hideIfDot={true} tooltipProps={{ tabIndex: isActive ? 0 : -1 }} /> diff --git a/src/components/views/rooms/RoomSublist.tsx b/src/components/views/rooms/RoomSublist.tsx index 4e84bee0be2..c8ad9d4acab 100644 --- a/src/components/views/rooms/RoomSublist.tsx +++ b/src/components/views/rooms/RoomSublist.tsx @@ -657,7 +657,7 @@ export default class RoomSublist extends React.Component { const badge = ( { // aria-hidden because we summarise the unread count/highlight status in a manual aria-label below badge = ( ); } diff --git a/src/components/views/spaces/SpaceTreeLevel.tsx b/src/components/views/spaces/SpaceTreeLevel.tsx index c0b71709238..315cba3c1cc 100644 --- a/src/components/views/spaces/SpaceTreeLevel.tsx +++ b/src/components/views/spaces/SpaceTreeLevel.tsx @@ -113,7 +113,6 @@ export const SpaceButton = ({
Date: Mon, 18 Mar 2024 16:25:40 +0200 Subject: [PATCH 028/235] Fix incorrect check for private read receipt support (#12348) Signed-off-by: Tulir Asokan --- src/components/structures/TimelinePanel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/structures/TimelinePanel.tsx b/src/components/structures/TimelinePanel.tsx index 7d1ce90762c..2b94d5a96f7 100644 --- a/src/components/structures/TimelinePanel.tsx +++ b/src/components/structures/TimelinePanel.tsx @@ -1045,7 +1045,7 @@ class TimelinePanel extends React.Component { } if ( - !(await client.doesServerSupportUnstableFeature("org.matrix.msc2285.stable")) || + !(await client.doesServerSupportUnstableFeature("org.matrix.msc2285.stable")) && !(await client.isVersionSupported("v1.4")) ) { logger.warn( From da99bad7b9a4a1a82b5f2429d72cc5fff2e3def8 Mon Sep 17 00:00:00 2001 From: Stanislav Demydiuk Date: Mon, 11 Mar 2024 17:16:53 +0000 Subject: [PATCH 029/235] Introduce Membership type --- playwright/e2e/crypto/crypto.spec.ts | 2 +- playwright/e2e/crypto/verification.spec.ts | 2 +- playwright/e2e/knock/knock-into-room.spec.ts | 10 +- playwright/e2e/knock/manage-knocks.spec.ts | 4 +- playwright/pages/bot.ts | 2 +- src/ScalarMessaging.ts | 4 +- src/SlashCommands.tsx | 4 +- src/TextForEvent.tsx | 18 +- src/VoipUserMapper.ts | 2 +- src/autocomplete/UserProvider.tsx | 2 +- src/components/structures/RoomView.tsx | 30 +- src/components/structures/SpaceHierarchy.tsx | 6 +- src/components/structures/SpaceRoomView.tsx | 4 +- src/components/structures/TimelinePanel.tsx | 14 +- .../structures/grouper/CreationGrouper.tsx | 2 +- .../views/context_menus/RoomContextMenu.tsx | 2 +- .../dialogs/AddExistingToSpaceDialog.tsx | 2 +- .../views/dialogs/ForwardDialog.tsx | 2 +- src/components/views/dialogs/InviteDialog.tsx | 6 +- .../ManageRestrictedJoinRuleDialog.tsx | 2 +- .../views/dialogs/devtools/ServersInRoom.tsx | 2 +- .../dialogs/spotlight/SpotlightDialog.tsx | 4 +- src/components/views/elements/AppTile.tsx | 5 +- .../views/elements/EventListSummary.tsx | 16 +- .../views/elements/RoomFacePile.tsx | 2 +- .../views/right_panel/TimelineCard.tsx | 2 +- src/components/views/right_panel/UserInfo.tsx | 28 +- src/components/views/rooms/MemberList.tsx | 4 +- src/components/views/rooms/NewRoomIntro.tsx | 2 +- src/components/views/rooms/RoomInfoLine.tsx | 4 +- src/components/views/rooms/RoomKnocksBar.tsx | 2 +- src/components/views/rooms/RoomPreviewBar.tsx | 6 +- .../views/rooms/RoomPreviewCard.tsx | 6 +- src/components/views/rooms/RoomTile.tsx | 4 +- .../tabs/room/GeneralRoomSettingsTab.tsx | 2 +- .../tabs/room/PeopleRoomSettingsTab.tsx | 2 +- .../tabs/room/RolesRoomSettingsTab.tsx | 2 +- .../tabs/user/SecurityUserSettingsTab.tsx | 6 +- .../views/spaces/SpaceTreeLevel.tsx | 8 +- src/hooks/useRoomMembers.ts | 4 +- src/hooks/useSpaceResults.ts | 2 +- src/indexing/EventIndex.ts | 4 +- src/models/Call.ts | 8 +- src/shouldHideEvent.ts | 6 +- src/stores/BreadcrumbsStore.ts | 2 +- src/stores/MemberListStore.ts | 8 +- src/stores/OwnBeaconStore.ts | 2 +- src/stores/RoomViewStore.tsx | 2 +- .../notifications/RoomNotificationState.ts | 3 +- src/stores/room-list/RoomListStore.ts | 2 +- src/stores/room-list/algorithms/Algorithm.ts | 2 +- src/stores/spaces/SpaceStore.ts | 39 +-- src/stores/widgets/StopGapWidget.ts | 2 +- src/utils/DMRoomMap.ts | 2 +- src/utils/MultiInviter.ts | 10 +- src/utils/RoomUpgrade.ts | 5 +- src/utils/SortMembers.ts | 2 +- src/utils/WidgetUtils.ts | 2 +- src/utils/dm/createDmLocalRoom.ts | 8 +- src/utils/dm/findDMForUser.ts | 2 +- src/utils/membership.ts | 13 +- src/utils/permalinks/Permalinks.ts | 2 +- src/utils/room/canInviteTo.ts | 2 +- src/utils/space.tsx | 4 +- test/LegacyCallHandler-test.ts | 6 +- test/RoomNotifs-test.ts | 14 +- test/SlashCommands-test.tsx | 8 +- test/TextForEvent-test.ts | 4 +- .../structures/MessagePanel-test.tsx | 28 +- test/components/structures/RoomView-test.tsx | 8 +- .../structures/SpaceHierarchy-test.tsx | 2 +- .../structures/TimelinePanel-test.tsx | 6 +- .../context_menus/RoomContextMenu-test.tsx | 2 +- .../RoomGeneralContextMenu-test.tsx | 4 +- .../dialogs/ConfirmUserActionDialog-test.tsx | 2 +- .../views/dialogs/InviteDialog-test.tsx | 2 +- .../views/dialogs/SpotlightDialog-test.tsx | 6 +- .../views/elements/EventListSummary-test.tsx | 262 +++++++++--------- .../views/elements/FacePile-test.tsx | 2 +- .../views/elements/RoomFacePile-test.tsx | 4 +- .../right_panel/RoomSummaryCard-test.tsx | 2 +- .../views/right_panel/UserInfo-test.tsx | 24 +- .../views/rooms/LegacyRoomHeader-test.tsx | 2 +- .../views/rooms/MemberList-test.tsx | 12 +- .../UnreadNotificationBadge-test.tsx | 2 +- .../views/rooms/RoomHeader-test.tsx | 12 +- .../views/rooms/RoomKnocksBar-test.tsx | 21 +- .../views/rooms/RoomPreviewBar-test.tsx | 14 +- .../views/rooms/RoomPreviewCard-test.tsx | 10 +- test/components/views/rooms/RoomTile-test.tsx | 14 +- .../views/settings/JoinRuleSettings-test.tsx | 2 +- .../tabs/room/PeopleRoomSettingsTab-test.tsx | 6 +- .../tabs/room/RolesRoomSettingsTab-test.tsx | 4 +- test/hooks/useRoomMembers-test.tsx | 12 +- test/hooks/useUnreadNotifications-test.ts | 2 +- test/models/Call-test.ts | 10 +- test/stores/MemberListStore-test.ts | 24 +- test/stores/OwnBeaconStore-test.ts | 2 +- test/stores/SpaceStore-test.ts | 72 ++--- .../RoomNotificationState-test.ts | 10 +- test/stores/room-list/RoomListStore-test.ts | 18 +- .../room-list/algorithms/Algorithm-test.ts | 2 +- .../algorithms/RecentAlgorithm-test.ts | 16 +- test/test-utils/room.ts | 2 +- test/test-utils/test-utils.ts | 12 +- test/utils/MultiInviter-test.ts | 4 +- test/utils/direct-messages-test.ts | 2 +- test/utils/dm/createDmLocalRoom-test.ts | 6 +- test/utils/dm/findDMForUser-test.ts | 32 +-- test/utils/export-test.tsx | 4 +- test/utils/local-room-test.ts | 2 +- test/utils/localRoom/isRoomReady-test.ts | 6 +- test/utils/membership-test.ts | 10 +- test/utils/permalinks/Permalinks-test.ts | 6 +- test/utils/room/canInviteTo-test.ts | 4 +- 115 files changed, 582 insertions(+), 526 deletions(-) diff --git a/playwright/e2e/crypto/crypto.spec.ts b/playwright/e2e/crypto/crypto.spec.ts index d917a408398..3d7327b59de 100644 --- a/playwright/e2e/crypto/crypto.spec.ts +++ b/playwright/e2e/crypto/crypto.spec.ts @@ -87,7 +87,7 @@ const bobJoin = async (page: Page, bob: Bot) => { async function autoJoin(client: Client) { await client.evaluate((cli) => { cli.on(window.matrixcs.RoomMemberEvent.Membership, (event, member) => { - if (member.membership === "invite" && member.userId === cli.getUserId()) { + if (member.membership === Membership.Invite && member.userId === cli.getUserId()) { cli.joinRoom(member.roomId); } }); diff --git a/playwright/e2e/crypto/verification.spec.ts b/playwright/e2e/crypto/verification.spec.ts index 55d65a9b087..fdf01d82361 100644 --- a/playwright/e2e/crypto/verification.spec.ts +++ b/playwright/e2e/crypto/verification.spec.ts @@ -262,7 +262,7 @@ test.describe("User verification", () => { const bobVerificationRequest = await bob.evaluateHandle( async (client, { dmRoomId, aliceCredentials }) => { const room = client.getRoom(dmRoomId); - while (room.getMember(aliceCredentials.userId)?.membership !== "join") { + while (room.getMember(aliceCredentials.userId)?.membership !== Membership.Join) { await new Promise((resolve) => { room.once(window.matrixcs.RoomStateEvent.Members, resolve); }); diff --git a/playwright/e2e/knock/knock-into-room.spec.ts b/playwright/e2e/knock/knock-into-room.spec.ts index 1a4974e891b..4931db65ccb 100644 --- a/playwright/e2e/knock/knock-into-room.spec.ts +++ b/playwright/e2e/knock/knock-into-room.spec.ts @@ -73,7 +73,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === "knock" && + e.getContent()?.membership === Membership.Knock && e.getContent()?.displayname === "Alice", ); }); @@ -108,7 +108,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === "knock" && + e.getContent()?.membership === Membership.Knock && e.getContent()?.displayname === "Alice", ); }); @@ -150,7 +150,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === "knock" && + e.getContent()?.membership === Membership.Knock && e.getContent()?.displayname === "Alice", ); }); @@ -192,7 +192,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === "knock" && + e.getContent()?.membership === Membership.Knock && e.getContent()?.displayname === "Alice", ); }); @@ -258,7 +258,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === "knock" && + e.getContent()?.membership === Membership.Knock && e.getContent()?.displayname === "Alice", ); }); diff --git a/playwright/e2e/knock/manage-knocks.spec.ts b/playwright/e2e/knock/manage-knocks.spec.ts index 3fb5c685517..66f27bcbd5d 100644 --- a/playwright/e2e/knock/manage-knocks.spec.ts +++ b/playwright/e2e/knock/manage-knocks.spec.ts @@ -73,7 +73,7 @@ test.describe("Manage Knocks", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === "leave" && + e.getContent()?.membership === Membership.Leave && e.getContent()?.displayname === "Bob", ); }); @@ -110,7 +110,7 @@ test.describe("Manage Knocks", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === "leave" && + e.getContent()?.membership === Membership.Leave && e.getContent()?.displayname === "Bob", ); }); diff --git a/playwright/pages/bot.ts b/playwright/pages/bot.ts index d6b729420cd..fc4ec758057 100644 --- a/playwright/pages/bot.ts +++ b/playwright/pages/bot.ts @@ -178,7 +178,7 @@ export class Bot extends Client { if (opts.autoAcceptInvites) { cli.on(window.matrixcs.RoomMemberEvent.Membership, (event, member) => { - if (member.membership === "invite" && member.userId === cli.getUserId()) { + if (member.membership === Membership.Invite && member.userId === cli.getUserId()) { cli.joinRoom(member.roomId); } }); diff --git a/src/ScalarMessaging.ts b/src/ScalarMessaging.ts index fb2801c9b64..86d48b678a7 100644 --- a/src/ScalarMessaging.ts +++ b/src/ScalarMessaging.ts @@ -357,7 +357,7 @@ function inviteUser(event: MessageEvent, roomId: string, userId: string): v if (room) { // if they are already invited or joined we can resolve immediately. const member = room.getMember(userId); - if (member && ["join", "invite"].includes(member.membership!)) { + if (member && [Membership.Join, Membership.Invite].includes(member.membership)) { sendResponse(event, { success: true, }); @@ -669,7 +669,7 @@ function canSendEvent(event: MessageEvent, roomId: string): void { sendError(event, _t("scalar|error_room_unknown")); return; } - if (room.getMyMembership() !== "join") { + if (room.getMyMembership() !== Membership.Join) { sendError(event, _t("scalar|error_membership")); return; } diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index f309ca4bc54..a7a39538dc5 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -241,7 +241,7 @@ export const Commands = [ if (args) { const ev = cli.getRoom(roomId)?.currentState.getStateEvents("m.room.member", cli.getSafeUserId()); const content = { - ...(ev ? ev.getContent() : { membership: "join" }), + ...(ev ? ev.getContent() : { membership: Membership.Join }), displayname: args, }; return success(cli.sendStateEvent(roomId, "m.room.member", content, cli.getSafeUserId())); @@ -291,7 +291,7 @@ export const Commands = [ if (!url) return; const ev = room?.currentState.getStateEvents("m.room.member", userId); const content = { - ...(ev ? ev.getContent() : { membership: "join" }), + ...(ev ? ev.getContent() : { membership: Membership.Join }), avatar_url: url, }; return cli.sendStateEvent(roomId, "m.room.member", content, userId); diff --git a/src/TextForEvent.tsx b/src/TextForEvent.tsx index 3389e7d8385..0729841d116 100644 --- a/src/TextForEvent.tsx +++ b/src/TextForEvent.tsx @@ -122,7 +122,7 @@ function textForMemberEvent( const reason = content.reason; switch (content.membership) { - case "invite": { + case Membership.Invite: { const threePidContent = content.third_party_invite; if (threePidContent) { if (threePidContent.display_name) { @@ -138,13 +138,13 @@ function textForMemberEvent( return () => _t("timeline|m.room.member|invite", { senderName, targetName }); } } - case "ban": + case Membership.Ban: return () => reason ? _t("timeline|m.room.member|ban_reason", { senderName, targetName, reason }) : _t("timeline|m.room.member|ban", { senderName, targetName }); - case "join": - if (prevContent && prevContent.membership === "join") { + case Membership.Join: + if (prevContent && prevContent.membership === Membership.Join) { const modDisplayname = getModification(prevContent.displayname, content.displayname); const modAvatarUrl = getModification(prevContent.avatar_url, content.avatar_url); @@ -194,9 +194,9 @@ function textForMemberEvent( if (!ev.target) logger.warn("Join message has no target! -- " + ev.getContent().state_key); return () => _t("timeline|m.room.member|join", { targetName }); } - case "leave": + case Membership.Leave: if (ev.getSender() === ev.getStateKey()) { - if (prevContent.membership === "invite") { + if (prevContent.membership === Membership.Invite) { return () => _t("timeline|m.room.member|reject_invite", { targetName }); } else { return () => @@ -204,9 +204,9 @@ function textForMemberEvent( ? _t("timeline|m.room.member|left_reason", { targetName, reason }) : _t("timeline|m.room.member|left", { targetName }); } - } else if (prevContent.membership === "ban") { + } else if (prevContent.membership === Membership.Ban) { return () => _t("timeline|m.room.member|unban", { senderName, targetName }); - } else if (prevContent.membership === "invite") { + } else if (prevContent.membership === Membership.Invite) { return () => reason ? _t("timeline|m.room.member|withdrew_invite_reason", { @@ -215,7 +215,7 @@ function textForMemberEvent( reason, }) : _t("timeline|m.room.member|withdrew_invite", { senderName, targetName }); - } else if (prevContent.membership === "join") { + } else if (prevContent.membership === Membership.Join) { return () => reason ? _t("timeline|m.room.member|kick_reason", { diff --git a/src/VoipUserMapper.ts b/src/VoipUserMapper.ts index d03a38b333b..ff29f5a6bde 100644 --- a/src/VoipUserMapper.ts +++ b/src/VoipUserMapper.ts @@ -95,7 +95,7 @@ export default class VoipUserMapper { if (!virtualRoomEvent || !virtualRoomEvent.getContent()) return null; const nativeRoomID = virtualRoomEvent.getContent()["native_room"]; const nativeRoom = cli.getRoom(nativeRoomID); - if (!nativeRoom || nativeRoom.getMyMembership() !== "join") return null; + if (!nativeRoom || nativeRoom.getMyMembership() !== Membership.Join) return null; return nativeRoomID; } diff --git a/src/autocomplete/UserProvider.tsx b/src/autocomplete/UserProvider.tsx index 728f4fcec28..e84579ad7d7 100644 --- a/src/autocomplete/UserProvider.tsx +++ b/src/autocomplete/UserProvider.tsx @@ -159,7 +159,7 @@ export default class UserProvider extends AutocompleteProvider { const currentUserId = MatrixClientPeg.safeGet().credentials.userId; this.users = this.room.getJoinedMembers().filter(({ userId }) => userId !== currentUserId); - this.users = this.users.concat(this.room.getMembersWithMembership("invite")); + this.users = this.users.concat(this.room.getMembersWithMembership(Membership.Invite)); this.users = sortBy(this.users, (member) => 1e20 - lastSpoken[member.userId] || 1e20); diff --git a/src/components/structures/RoomView.tsx b/src/components/structures/RoomView.tsx index db4a5e752fc..2ca917a06be 100644 --- a/src/components/structures/RoomView.tsx +++ b/src/components/structures/RoomView.tsx @@ -1454,7 +1454,7 @@ export class RoomView extends React.Component { private async loadMembersIfJoined(room: Room): Promise { // lazy load members if enabled if (this.context.client?.hasLazyLoadMembersEnabled()) { - if (room && room.getMyMembership() === "join") { + if (room && room.getMyMembership() === Membership.Join) { try { await room.loadMembersIfNeeded(); if (!this.unmounted) { @@ -1588,7 +1588,7 @@ export class RoomView extends React.Component { if (room && this.context.client) { const me = this.context.client.getSafeUserId(); const canReact = - room.getMyMembership() === "join" && room.currentState.maySendEvent(EventType.Reaction, me); + room.getMyMembership() === Membership.Join && room.currentState.maySendEvent(EventType.Reaction, me); const canSendMessages = room.maySendMessage(); const canSelfRedact = room.currentState.maySendEvent(EventType.RoomRedaction, me); @@ -1622,7 +1622,7 @@ export class RoomView extends React.Component { private updateDMState(): void { const room = this.state.room; - if (room?.getMyMembership() !== "join") { + if (room.getMyMembership() != Membership.Join) { return; } const dmInviter = room.getDMInviter(); @@ -1662,7 +1662,8 @@ export class RoomView extends React.Component { action: Action.JoinRoom, roomId, opts: { inviteSignUrl: signUrl }, - metricsTrigger: this.state.room?.getMyMembership() === "invite" ? "Invite" : "RoomPreview", + metricsTrigger: + this.state.room?.getMyMembership() === Membership.Invite ? "Invite" : "RoomPreview", canAskToJoin: this.state.canAskToJoin, }); } @@ -2183,7 +2184,7 @@ export class RoomView extends React.Component { const myMembership = this.state.room.getMyMembership(); if ( isVideoRoom(this.state.room) && - !(SettingsStore.getValue("feature_video_rooms") && myMembership === "join") + !(SettingsStore.getValue("feature_video_rooms") && myMembership === Membership.Join) ) { return ( @@ -2200,7 +2201,7 @@ export class RoomView extends React.Component { } // SpaceRoomView handles invites itself - if (myMembership === "invite" && !this.state.room.isSpaceRoom()) { + if (myMembership === Membership.Invite && !this.state.room.isSpaceRoom()) { if (this.state.joining || this.state.rejecting) { return ( @@ -2247,16 +2248,16 @@ export class RoomView extends React.Component { } } - if (this.state.canAskToJoin && ["knock", "leave"].includes(myMembership)) { + if (this.state.canAskToJoin && [Membership.Knock, Membership.Leave].includes(myMembership)) { return (
{ statusBar = ( { ); } else if (showRoomUpgradeBar) { aux = ; - } else if (myMembership !== "join") { + } else if (myMembership !== Membership.Join) { // We do have a room object for this room, but we're not currently in it. // We may have a 3rd party invite to it. let inviterName: string | undefined; @@ -2406,7 +2407,7 @@ export class RoomView extends React.Component { let messageComposer; const showComposer = // joined and not showing search results - myMembership === "join" && !this.state.search; + myMembership === Membership.Join && !this.state.search; if (showComposer) { messageComposer = ( { const myMember = this.state.room!.getMember(this.context.client!.getSafeUserId()); const showForgetButton = - !this.context.client.isGuest() && (["leave", "ban"].includes(myMembership) || myMember?.isKicked()); + !this.context.client.isGuest() && + ([Membership.Leave, Membership.Ban].includes(myMembership) || myMember?.isKicked()); return ( @@ -2640,7 +2642,7 @@ export class RoomView extends React.Component { room={this.state.room} searchInfo={this.state.search} oobData={this.props.oobData} - inRoom={myMembership === "join"} + inRoom={myMembership === Membership.Join} onSearchClick={onSearchClick} onInviteClick={onInviteClick} onForgetClick={showForgetButton ? onForgetClick : null} diff --git a/src/components/structures/SpaceHierarchy.tsx b/src/components/structures/SpaceHierarchy.tsx index feeacb45818..8927628020b 100644 --- a/src/components/structures/SpaceHierarchy.tsx +++ b/src/components/structures/SpaceHierarchy.tsx @@ -112,7 +112,7 @@ const Tile: React.FC = ({ const cli = useContext(MatrixClientContext); const joinedRoom = useTypedEventEmitterState(cli, ClientEvent.Room, () => { const cliRoom = cli?.getRoom(room.room_id); - return cliRoom?.getMyMembership() === "join" ? cliRoom : undefined; + return cliRoom?.getMyMembership() === Membership.Join ? cliRoom : undefined; }); const joinedRoomName = useTypedEventEmitterState(joinedRoom, RoomEvent.Name, (room) => room?.name); const name = @@ -828,7 +828,7 @@ const SpaceHierarchy: React.FC = ({ space, initialText = "", showRoom, a content = ; } else { const hasPermissions = - space?.getMyMembership() === "join" && + space?.getMyMembership() === Membership.Join && space.currentState.maySendStateEvent(EventType.SpaceChild, cli.getSafeUserId()); const root = hierarchy.roomMap.get(space.roomId); @@ -846,7 +846,7 @@ const SpaceHierarchy: React.FC = ({ space, initialText = "", showRoom, a onViewRoomClick={(roomId, roomType) => showRoom(cli, hierarchy, roomId, roomType)} onJoinRoomClick={async (roomId, parents) => { for (const parent of parents) { - if (cli.getRoom(parent)?.getMyMembership() !== "join") { + if (cli.getRoom(parent)?.getMyMembership() !== Membership.Join) { await joinRoom(cli, hierarchy, parent); } } diff --git a/src/components/structures/SpaceRoomView.tsx b/src/components/structures/SpaceRoomView.tsx index dc79a25489a..451a91ead7b 100644 --- a/src/components/structures/SpaceRoomView.tsx +++ b/src/components/structures/SpaceRoomView.tsx @@ -237,7 +237,7 @@ const SpaceLanding: React.FC<{ space: Room }> = ({ space }) => { } const hasAddRoomPermissions = - myMembership === "join" && space.currentState.maySendStateEvent(EventType.SpaceChild, userId); + myMembership === Membership.Join && space.currentState.maySendStateEvent(EventType.SpaceChild, userId); let addRoomButton; if (hasAddRoomPermissions) { @@ -678,7 +678,7 @@ export default class SpaceRoomView extends React.PureComponent { private renderBody(): JSX.Element { switch (this.state.phase) { case Phase.Landing: - if (this.state.myMembership === "join") { + if (this.state.myMembership === Membership.Join) { return ; } else { return ( diff --git a/src/components/structures/TimelinePanel.tsx b/src/components/structures/TimelinePanel.tsx index 7d1ce90762c..ad5da6cc476 100644 --- a/src/components/structures/TimelinePanel.tsx +++ b/src/components/structures/TimelinePanel.tsx @@ -1824,7 +1824,7 @@ class TimelinePanel extends React.Component { // that the event belongs to, and traversing the timeline looking for // that event, while keeping track of the user's membership let i = events.length - 1; - let userMembership = "leave"; + let userMembership = Membership.Leave; for (; i >= 0; i--) { const timeline = this.props.timelineSet.getTimelineForEvent(events[i].getId()!); if (!timeline) { @@ -1837,14 +1837,15 @@ class TimelinePanel extends React.Component { continue; } - userMembership = timeline.getState(EventTimeline.FORWARDS)?.getMember(userId)?.membership ?? "leave"; + userMembership = + timeline.getState(EventTimeline.FORWARDS)?.getMember(userId)?.membership ?? Membership.Leave; const timelineEvents = timeline.getEvents(); for (let j = timelineEvents.length - 1; j >= 0; j--) { const event = timelineEvents[j]; if (event.getId() === events[i].getId()) { break; } else if (event.getStateKey() === userId && event.getType() === EventType.RoomMember) { - userMembership = event.getPrevContent().membership || "leave"; + userMembership = event.getPrevContent().membership || Membership.Leave; } } break; @@ -1855,8 +1856,11 @@ class TimelinePanel extends React.Component { for (; i >= 0; i--) { const event = events[i]; if (event.getStateKey() === userId && event.getType() === EventType.RoomMember) { - userMembership = event.getPrevContent().membership || "leave"; - } else if (userMembership === "leave" && (event.isDecryptionFailure() || event.isBeingDecrypted())) { + userMembership = event.getPrevContent().membership || Membership.Leave; + } else if ( + userMembership === Membership.Leave && + (event.isDecryptionFailure() || event.isBeingDecrypted()) + ) { // reached an undecryptable message when the user wasn't in the room -- don't try to load any more // Note: for now, we assume that events that are being decrypted are // not decryptable - we will be called once more when it is decrypted. diff --git a/src/components/structures/grouper/CreationGrouper.tsx b/src/components/structures/grouper/CreationGrouper.tsx index 0ceb6f58575..375bfd76bc5 100644 --- a/src/components/structures/grouper/CreationGrouper.tsx +++ b/src/components/structures/grouper/CreationGrouper.tsx @@ -48,7 +48,7 @@ export class CreationGrouper extends BaseGrouper { const eventType = event.getType(); if ( eventType === EventType.RoomMember && - (event.getStateKey() !== createEvent.getSender() || event.getContent()["membership"] !== "join") + (event.getStateKey() !== createEvent.getSender() || event.getContent()["membership"] !== Membership.Join) ) { return false; } diff --git a/src/components/views/context_menus/RoomContextMenu.tsx b/src/components/views/context_menus/RoomContextMenu.tsx index 7527ef4feef..5c2d385cd1b 100644 --- a/src/components/views/context_menus/RoomContextMenu.tsx +++ b/src/components/views/context_menus/RoomContextMenu.tsx @@ -144,7 +144,7 @@ const RoomContextMenu: React.FC = ({ room, onFinished, ...props }) => { let favouriteOption: JSX.Element | undefined; let lowPriorityOption: JSX.Element | undefined; let notificationOption: JSX.Element | undefined; - if (room.getMyMembership() === "join") { + if (room.getMyMembership() === Membership.Join) { const isFavorite = roomTags.includes(DefaultTagID.Favourite); favouriteOption = ( = ({ const msc3946ProcessDynamicPredecessor = useSettingValue("feature_dynamic_room_predecessors"); const visibleRooms = useMemo( () => - cli?.getVisibleRooms(msc3946ProcessDynamicPredecessor).filter((r) => r.getMyMembership() === "join") ?? [], + cli?.getVisibleRooms(msc3946ProcessDynamicPredecessor).filter((r) => r.getMyMembership() === Membership.Join) ?? [], [cli, msc3946ProcessDynamicPredecessor], ); diff --git a/src/components/views/dialogs/ForwardDialog.tsx b/src/components/views/dialogs/ForwardDialog.tsx index fe737386295..accc890f289 100644 --- a/src/components/views/dialogs/ForwardDialog.tsx +++ b/src/components/views/dialogs/ForwardDialog.tsx @@ -267,7 +267,7 @@ const ForwardDialog: React.FC = ({ matrixClient: cli, event, permalinkCr sortRooms( cli .getVisibleRooms(msc3946DynamicRoomPredecessors) - .filter((room) => room.getMyMembership() === "join" && !room.isSpaceRoom()), + .filter((room) => room.getMyMembership() === Membership.Join && !room.isSpaceRoom()), ), [cli, msc3946DynamicRoomPredecessors], ); diff --git a/src/components/views/dialogs/InviteDialog.tsx b/src/components/views/dialogs/InviteDialog.tsx index 08dbddc21d2..2301940feba 100644 --- a/src/components/views/dialogs/InviteDialog.tsx +++ b/src/components/views/dialogs/InviteDialog.tsx @@ -372,10 +372,10 @@ export default class InviteDialog extends React.PureComponent excludedIds.add(m.userId)); - room.getMembersWithMembership("join").forEach((m) => excludedIds.add(m.userId)); + room.getMembersWithMembership(Membership.Invite).forEach((m) => excludedIds.add(m.userId)); + room.getMembersWithMembership(Membership.Join).forEach((m) => excludedIds.add(m.userId)); // add banned users, so we don't try to invite them - room.getMembersWithMembership("ban").forEach((m) => excludedIds.add(m.userId)); + room.getMembersWithMembership(Membership.Ban).forEach((m) => excludedIds.add(m.userId)); if (isFederated === false) { // exclude users from external servers const homeserver = props.roomId.split(":")[1]; diff --git a/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx b/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx index 0799ff88f12..3dc353dee08 100644 --- a/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx +++ b/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx @@ -102,7 +102,7 @@ const ManageRestrictedJoinRuleDialog: React.FC = ({ room, selected = [], if (!room) { return { roomId, name: roomId } as Room; } - if (room.getMyMembership() !== "join" || !room.isSpaceRoom()) { + if (room.getMyMembership() !== Membership.Join || !room.isSpaceRoom()) { return room; } }), diff --git a/src/components/views/dialogs/devtools/ServersInRoom.tsx b/src/components/views/dialogs/devtools/ServersInRoom.tsx index 4096a226262..6fff5fd511b 100644 --- a/src/components/views/dialogs/devtools/ServersInRoom.tsx +++ b/src/components/views/dialogs/devtools/ServersInRoom.tsx @@ -27,7 +27,7 @@ const ServersInRoom: React.FC = ({ onBack }) => { const servers = useMemo>(() => { const servers: Record = {}; context.room.currentState.getStateEvents(EventType.RoomMember).forEach((ev) => { - if (ev.getContent().membership !== "join") return; // only count joined users + if (ev.getContent().membership !== Membership.Join) return; // only count joined users const server = ev.getSender()!.split(":")[1]; servers[server] = (servers[server] ?? 0) + 1; }); diff --git a/src/components/views/dialogs/spotlight/SpotlightDialog.tsx b/src/components/views/dialogs/spotlight/SpotlightDialog.tsx index 04df85e79ff..575bdbf3a98 100644 --- a/src/components/views/dialogs/spotlight/SpotlightDialog.tsx +++ b/src/components/views/dialogs/spotlight/SpotlightDialog.tsx @@ -244,7 +244,7 @@ const findVisibleRooms = (cli: MatrixClient, msc3946ProcessDynamicPredecessor: b if (isLocalRoom(room)) return false; // TODO we may want to put invites in their own list - return room.getMyMembership() === "join" || room.getMyMembership() == "invite"; + return room.getMyMembership() === Membership.Join || room.getMyMembership() == Membership.Invite; }); }; @@ -675,7 +675,7 @@ const SpotlightDialog: React.FC = ({ initialText = "", initialFilter = n // world readable, a modal will appear asking you to register first. If // it is readable, the preview appears as normal. const showViewButton = - clientRoom?.getMyMembership() === "join" || + clientRoom?.getMyMembership() === Membership.Join || (result.publicRoom.world_readable && !canAskToJoin(joinRule)) || cli.isGuest(); diff --git a/src/components/views/elements/AppTile.tsx b/src/components/views/elements/AppTile.tsx index f55751420e5..04cbbdd3e9e 100644 --- a/src/components/views/elements/AppTile.tsx +++ b/src/components/views/elements/AppTile.tsx @@ -219,7 +219,10 @@ export default class AppTile extends React.Component { } private onMyMembership = (room: Room, membership: string): void => { - if ((membership === "leave" || membership === "ban") && room.roomId === this.props.room?.roomId) { + if ( + (membership === Membership.Leave || membership === Membership.Ban) && + room.roomId === this.props.room?.roomId + ) { this.onUserLeftRoom(); } }; diff --git a/src/components/views/elements/EventListSummary.tsx b/src/components/views/elements/EventListSummary.tsx index 4d9bbe35c91..8fcb538b809 100644 --- a/src/components/views/elements/EventListSummary.tsx +++ b/src/components/views/elements/EventListSummary.tsx @@ -416,12 +416,12 @@ export default class EventListSummary extends React.Component< case EventType.RoomMember: switch (e.mxEvent.getContent().membership) { - case "invite": + case Membership.Invite: return TransitionType.Invited; - case "ban": + case Membership.Ban: return TransitionType.Banned; - case "join": - if (e.mxEvent.getPrevContent().membership === "join") { + case Membership.Join: + if (e.mxEvent.getPrevContent().membership === Membership.Join) { if (e.mxEvent.getContent().displayname !== e.mxEvent.getPrevContent().displayname) { return TransitionType.ChangedName; } else if (e.mxEvent.getContent().avatar_url !== e.mxEvent.getPrevContent().avatar_url) { @@ -431,17 +431,17 @@ export default class EventListSummary extends React.Component< } else { return TransitionType.Joined; } - case "leave": + case Membership.Leave: if (e.mxEvent.getSender() === e.mxEvent.getStateKey()) { - if (e.mxEvent.getPrevContent().membership === "invite") { + if (e.mxEvent.getPrevContent().membership === Membership.Invite) { return TransitionType.InviteReject; } return TransitionType.Left; } switch (e.mxEvent.getPrevContent().membership) { - case "invite": + case Membership.Invite: return TransitionType.InviteWithdrawal; - case "ban": + case Membership.Ban: return TransitionType.Unbanned; // sender is not target and made the target leave, if not from invite/ban then this is a kick default: diff --git a/src/components/views/elements/RoomFacePile.tsx b/src/components/views/elements/RoomFacePile.tsx index 6ec333c4e55..46490f870f9 100644 --- a/src/components/views/elements/RoomFacePile.tsx +++ b/src/components/views/elements/RoomFacePile.tsx @@ -38,7 +38,7 @@ interface IProps extends HTMLAttributes { const RoomFacePile: FC = ({ room, onlyKnownUsers = true, numShown = DEFAULT_NUM_FACES, ...props }) => { const cli = useContext(MatrixClientContext); - const isJoined = room.getMyMembership() === "join"; + const isJoined = room.getMyMembership() === Membership.Join; let members = useRoomMembers(room); const count = members.length; diff --git a/src/components/views/right_panel/TimelineCard.tsx b/src/components/views/right_panel/TimelineCard.tsx index 7e3ce09e500..094b1675f70 100644 --- a/src/components/views/right_panel/TimelineCard.tsx +++ b/src/components/views/right_panel/TimelineCard.tsx @@ -217,7 +217,7 @@ export default class TimelineCard extends React.Component { const isUploading = ContentMessages.sharedInstance().getCurrentUploads(this.props.composerRelation).length > 0; const myMembership = this.props.room.getMyMembership(); - const showComposer = myMembership === "join"; + const showComposer = myMembership === Membership.Join; return ( ; + if (member.membership !== Membership.Invite && member.membership !== Membership.Join) return <>; const onKick = async (): Promise => { if (isUpdating) return; // only allow one operation at a time @@ -647,17 +647,17 @@ export const RoomKickButton = ({ const commonProps = { member, action: room.isSpaceRoom() - ? member.membership === "invite" + ? member.membership === Membership.Invite ? _t("user_info|disinvite_button_space") : _t("user_info|kick_button_space") - : member.membership === "invite" + : member.membership === Membership.Invite ? _t("user_info|disinvite_button_room") : _t("user_info|kick_button_room"), title: - member.membership === "invite" + member.membership === Membership.Invite ? _t("user_info|disinvite_button_room_name", { roomName: room.name }) : _t("user_info|kick_button_room_name", { roomName: room.name }), - askReason: member.membership === "join", + askReason: member.membership === Membership.Join, danger: true, }; @@ -718,10 +718,10 @@ export const RoomKickButton = ({ }; const kickLabel = room.isSpaceRoom() - ? member.membership === "invite" + ? member.membership === Membership.Invite ? _t("user_info|disinvite_button_space") : _t("user_info|kick_button_space") - : member.membership === "invite" + : member.membership === Membership.Invite ? _t("user_info|disinvite_button_room") : _t("user_info|kick_button_room"); @@ -771,7 +771,7 @@ export const BanToggleButton = ({ }: Omit): JSX.Element => { const cli = useContext(MatrixClientContext); - const isBanned = member.membership === "ban"; + const isBanned = member.membership === Membership.Ban; const onBanOrUnban = async (): Promise => { if (isUpdating) return; // only allow one operation at a time startUpdating(); @@ -808,9 +808,9 @@ export const BanToggleButton = ({ return ( !!myMember && !!theirMember && - theirMember.membership === "ban" && + theirMember.membership === Membership.Ban && myMember.powerLevel > theirMember.powerLevel && - child.currentState.hasSufficientPowerLevelFor("ban", myMember.powerLevel) + child.currentState.hasSufficientPowerLevelFor(Membership.Ban, myMember.powerLevel) ); } : (child: Room) => { @@ -820,9 +820,9 @@ export const BanToggleButton = ({ return ( !!myMember && !!theirMember && - theirMember.membership !== "ban" && + theirMember.membership !== Membership.Ban && myMember.powerLevel > theirMember.powerLevel && - child.currentState.hasSufficientPowerLevelFor("ban", myMember.powerLevel) + child.currentState.hasSufficientPowerLevelFor(Membership.Ban, myMember.powerLevel) ); }, allLabel: isBanned ? _t("user_info|unban_space_everything") : _t("user_info|ban_space_everything"), @@ -903,7 +903,7 @@ const MuteToggleButton: React.FC = ({ const cli = useContext(MatrixClientContext); // Don't show the mute/unmute option if the user is not in the room - if (member.membership !== "join") return null; + if (member.membership !== Membership.Join) return null; const muted = isMuted(member, powerLevels); const onMuteToggle = async (): Promise => { diff --git a/src/components/views/rooms/MemberList.tsx b/src/components/views/rooms/MemberList.tsx index 639e1493b26..1ecd36c2ce1 100644 --- a/src/components/views/rooms/MemberList.tsx +++ b/src/components/views/rooms/MemberList.tsx @@ -171,7 +171,7 @@ export default class MemberList extends React.Component { }; private onMyMembership = (room: Room, membership: string, oldMembership?: string): void => { - if (room.roomId === this.props.roomId && membership === "join" && oldMembership !== "join") { + if (room.roomId === this.props.roomId && membership === Membership.Join && oldMembership !== Membership.Join) { // we just joined the room, load the member list this.updateListNow(true); } @@ -363,7 +363,7 @@ export default class MemberList extends React.Component { const room = cli.getRoom(this.props.roomId); let inviteButton: JSX.Element | undefined; - if (room?.getMyMembership() === "join" && shouldShowComponent(UIComponent.InviteUsers)) { + if (room?.getMyMembership() === Membership.Join && shouldShowComponent(UIComponent.InviteUsers)) { const inviteButtonText = room.isSpaceRoom() ? _t("space|invite_this_space") : _t("room|invite_this_room"); const button = ( diff --git a/src/components/views/rooms/NewRoomIntro.tsx b/src/components/views/rooms/NewRoomIntro.tsx index 4cc9028d487..c02c6191b46 100644 --- a/src/components/views/rooms/NewRoomIntro.tsx +++ b/src/components/views/rooms/NewRoomIntro.tsx @@ -112,7 +112,7 @@ const NewRoomIntro: React.FC = () => { ); } else { - const inRoom = room && room.getMyMembership() === "join"; + const inRoom = room && room.getMyMembership() === Membership.Join; const topic = room.currentState.getStateEvents(EventType.RoomTopic, "")?.getContent()?.topic; const canAddTopic = inRoom && room.currentState.maySendStateEvent(EventType.RoomTopic, cli.getSafeUserId()); diff --git a/src/components/views/rooms/RoomInfoLine.tsx b/src/components/views/rooms/RoomInfoLine.tsx index cca5e2adaf4..a4d88a6d0b8 100644 --- a/src/components/views/rooms/RoomInfoLine.tsx +++ b/src/components/views/rooms/RoomInfoLine.tsx @@ -33,7 +33,7 @@ interface IProps { const RoomInfoLine: FC = ({ room }) => { // summary will begin as undefined whilst loading and go null if it fails to load or we are not invited. const summary = useAsyncMemo(async (): Promise> | null> => { - if (room.getMyMembership() !== "invite") return null; + if (room.getMyMembership() !== Membership.Invite) return null; try { return await room.client.getRoomSummary(room.roomId); } catch (e) { @@ -61,7 +61,7 @@ const RoomInfoLine: FC = ({ room }) => { } let members: JSX.Element | undefined; - if (membership === "invite" && summary) { + if (membership === Membership.Invite && summary) { // Don't trust local state and instead use the summary API members = ( diff --git a/src/components/views/rooms/RoomKnocksBar.tsx b/src/components/views/rooms/RoomKnocksBar.tsx index edac6d47a8f..0ecbbe47ee5 100644 --- a/src/components/views/rooms/RoomKnocksBar.tsx +++ b/src/components/views/rooms/RoomKnocksBar.tsx @@ -35,7 +35,7 @@ export const RoomKnocksBar: VFC<{ room: Room }> = ({ room }) => { const knockMembers = useTypedEventEmitterState( room, RoomStateEvent.Update, - useCallback(() => room.getMembersWithMembership("knock"), [room]), + useCallback(() => room.getMembersWithMembership(Membership.Knock), [room]), ); const knockMembersCount = knockMembers.length; diff --git a/src/components/views/rooms/RoomPreviewBar.tsx b/src/components/views/rooms/RoomPreviewBar.tsx index e3b06e5b9f2..845106c5b52 100644 --- a/src/components/views/rooms/RoomPreviewBar.tsx +++ b/src/components/views/rooms/RoomPreviewBar.tsx @@ -192,13 +192,13 @@ export default class RoomPreviewBar extends React.Component { if (myMember) { const previousMembership = myMember.events.member?.getPrevContent().membership; if (myMember.isKicked()) { - if (previousMembership === "knock") { + if (previousMembership === Membership.Knock) { return MessageCase.RequestDenied; } else if (this.props.promptAskToJoin) { return MessageCase.PromptAskToJoin; } return MessageCase.Kicked; - } else if (myMember.membership === "ban") { + } else if (myMember.membership === Membership.Ban) { return MessageCase.Banned; } } @@ -284,7 +284,7 @@ export default class RoomPreviewBar extends React.Component { return false; } const memberContent = myMember.events.member?.getContent(); - return memberContent?.membership === "invite" && memberContent.is_direct; + return memberContent?.membership === Membership.Invite && memberContent.is_direct; } private makeScreenAfterLogin(): { screen: string; params: Record } { diff --git a/src/components/views/rooms/RoomPreviewCard.tsx b/src/components/views/rooms/RoomPreviewCard.tsx index 91893847d0c..1bdb5baa1ea 100644 --- a/src/components/views/rooms/RoomPreviewCard.tsx +++ b/src/components/views/rooms/RoomPreviewCard.tsx @@ -73,7 +73,7 @@ const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButton let inviterSection: JSX.Element | null = null; let joinButtons: JSX.Element; - if (myMembership === "join") { + if (myMembership === Membership.Join) { joinButtons = ( = ({ room, onJoinButtonClicked, onRejectButton {_t("action|leave")} ); - } else if (myMembership === "invite") { + } else if (myMembership === Membership.Invite) { const inviteSender = room.getMember(cli.getUserId()!)?.events.member?.getSender(); if (inviteSender) { @@ -178,7 +178,7 @@ const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButton }); } else if (isVideoRoom && !videoRoomsEnabled) { notice = - myMembership === "join" + myMembership === Membership.Join ? _t("room|view_failed_enable_video_rooms") : _t("room|join_failed_enable_video_rooms"); diff --git a/src/components/views/rooms/RoomTile.tsx b/src/components/views/rooms/RoomTile.tsx index e0baf41f191..4eb1af107d0 100644 --- a/src/components/views/rooms/RoomTile.tsx +++ b/src/components/views/rooms/RoomTile.tsx @@ -124,7 +124,7 @@ export class RoomTile extends React.PureComponent { private get showContextMenu(): boolean { return ( this.props.tag !== DefaultTagID.Invite && - this.props.room.getMyMembership() !== "knock" && + this.props.room.getMyMembership() !== Membership.Knock && !isKnockDenied(this.props.room) && shouldShowComponent(UIComponent.RoomOptionsMenu) ); @@ -387,7 +387,7 @@ export class RoomTile extends React.PureComponent { mx_RoomTile: true, mx_RoomTile_sticky: SettingsStore.getValue("feature_ask_to_join") && - (this.props.room.getMyMembership() === "knock" || isKnockDenied(this.props.room)), + (this.props.room.getMyMembership() === Membership.Knock || isKnockDenied(this.props.room)), mx_RoomTile_selected: this.state.selected, mx_RoomTile_hasMenuOpen: !!(this.state.generalMenuPosition || this.state.notificationsMenuPosition), mx_RoomTile_minimized: this.props.isMinimized, diff --git a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx index 8e990d7d33c..7ec9a2a571a 100644 --- a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx @@ -73,7 +73,7 @@ export default class GeneralRoomSettingsTab extends React.Component diff --git a/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx index 418addfaf96..3350e7c5ca2 100644 --- a/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx @@ -145,7 +145,7 @@ export const PeopleRoomSettingsTab: VFC<{ room: Room }> = ({ room }) => { const knockMembers = useTypedEventEmitterState( room, RoomStateEvent.Update, - useCallback(() => room.getMembersWithMembership("knock"), [room]), + useCallback(() => room.getMembersWithMembership(Membership.Knock), [room]), ); return ( diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx index 5f03e7f9505..774813a7767 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx @@ -413,7 +413,7 @@ export default class RolesRoomSettingsTab extends React.Component { } } - const banned = room.getMembersWithMembership("ban"); + const banned = room.getMembersWithMembership(Membership.Ban); let bannedUsersSection: JSX.Element | undefined; if (banned?.length) { const canBanUsers = currentUserLevel >= banLevel; diff --git a/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx b/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx index 6d32f683b7a..4b1b01cd91a 100644 --- a/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx @@ -121,12 +121,12 @@ export default class SecurityUserSettingsTab extends React.Component { + private onMyMembership = (room: Room, membership: Membership): void => { if (room.isSpaceRoom()) { return; } - if (membership === "invite") { + if (membership === Membership.Invite) { this.addInvitedRoom(room); } else if (this.state.invitedRoomIds.has(room.roomId)) { // The user isn't invited anymore @@ -167,7 +167,7 @@ export default class SecurityUserSettingsTab extends React.Component { - return r.hasMembershipState(MatrixClientPeg.safeGet().getUserId()!, "invite"); + return r.hasMembershipState(MatrixClientPeg.safeGet().getUserId()!, Membership.Invite); }); }; diff --git a/src/components/views/spaces/SpaceTreeLevel.tsx b/src/components/views/spaces/SpaceTreeLevel.tsx index 315cba3c1cc..4b53181d413 100644 --- a/src/components/views/spaces/SpaceTreeLevel.tsx +++ b/src/components/views/spaces/SpaceTreeLevel.tsx @@ -99,7 +99,7 @@ export const SpaceButton = ({ let notifBadge; if (spaceKey && notificationState) { let ariaLabel = _t("a11y_jump_first_unread_room"); - if (space?.getMyMembership() === "invite") { + if (space?.getMyMembership() === Membership.Invite) { ariaLabel = _t("a11y|jump_first_invite"); } @@ -325,7 +325,7 @@ export class SpaceItem extends React.PureComponent { hasSubSpaces: this.state.childSpaces?.length, }); - const isInvite = space.getMyMembership() === "invite"; + const isInvite = space.getMyMembership() === Membership.Invite; const notificationState = isInvite ? StaticNotificationState.forSymbol("!", NotificationLevel.Highlight) @@ -378,7 +378,9 @@ export class SpaceItem extends React.PureComponent { isNarrow={isPanelCollapsed} size={isNested ? "24px" : "32px"} onKeyDown={this.onKeyDown} - ContextMenuComponent={this.props.space.getMyMembership() === "join" ? SpaceContextMenu : undefined} + ContextMenuComponent={ + this.props.space.getMyMembership() === Membership.Join ? SpaceContextMenu : undefined + } > {toggleCollapseButton} diff --git a/src/hooks/useRoomMembers.ts b/src/hooks/useRoomMembers.ts index c0436562df7..97c92554636 100644 --- a/src/hooks/useRoomMembers.ts +++ b/src/hooks/useRoomMembers.ts @@ -81,8 +81,8 @@ export const useRoomMemberCount = ( }; // Hook to simplify watching the local user's membership in a room -export const useMyRoomMembership = (room: Room): string => { - const [membership, setMembership] = useState(room.getMyMembership()); +export const useMyRoomMembership = (room: Room): Membership => { + const [membership, setMembership] = useState(room.getMyMembership()); useTypedEventEmitter(room, RoomEvent.MyMembership, () => { setMembership(room.getMyMembership()); }); diff --git a/src/hooks/useSpaceResults.ts b/src/hooks/useSpaceResults.ts index f21e0716105..bb209a4403a 100644 --- a/src/hooks/useSpaceResults.ts +++ b/src/hooks/useSpaceResults.ts @@ -57,7 +57,7 @@ export const useSpaceResults = (space: Room | undefined, query: string): [Hierar return rooms?.filter((r) => { return ( r.room_type !== RoomType.Space && - cli.getRoom(r.room_id)?.getMyMembership() !== "join" && + cli.getRoom(r.room_id)?.getMyMembership() !== Membership.Join && (normalize(r.name || "").includes(normalizedQuery) || (r.canonical_alias || "").includes(lcQuery)) ); }); diff --git a/src/indexing/EventIndex.ts b/src/indexing/EventIndex.ts index 69cb0e12184..ea739ffb8d1 100644 --- a/src/indexing/EventIndex.ts +++ b/src/indexing/EventIndex.ts @@ -533,7 +533,7 @@ export default class EventIndex extends EventEmitter { const profiles: Record = {}; stateEvents.forEach((ev) => { - if (ev.getContent().membership === "join") { + if (ev.getContent().membership === Membership.Join) { profiles[ev.getSender()!] = { displayname: ev.getContent().displayname, avatar_url: ev.getContent().avatar_url, @@ -754,7 +754,7 @@ export default class EventIndex extends EventEmitter { // This is sets the avatar URL. const memberEvent = eventMapper({ content: { - membership: "join", + membership: Membership.Join, avatar_url: e.profile.avatar_url, displayname: e.profile.displayname, }, diff --git a/src/models/Call.ts b/src/models/Call.ts index 369f712534f..d9560aa04db 100644 --- a/src/models/Call.ts +++ b/src/models/Call.ts @@ -307,8 +307,8 @@ export abstract class Call extends TypedEventEmitter => { - if (membership !== "join") this.setDisconnected(); + private onMyMembership = async (_room: Room, membership: Membership): Promise => { + if (membership !== Membership.Join) this.setDisconnected(); }; private onStopMessaging = (uid: string): void => { @@ -386,7 +386,7 @@ export class JitsiCall extends Call { devices = devices.filter((d) => d !== this.client.getDeviceId()); } // Must have a connected device and still be joined to the room - if (devices.length > 0 && member?.membership === "join") { + if (devices.length > 0 && member?.membership === Membership.Join) { participants.set(member, new Set(devices)); if (expiresAt < allExpireAt) allExpireAt = expiresAt; } @@ -416,7 +416,7 @@ export class JitsiCall extends Call { * returns null, the update is skipped. */ private async updateDevices(fn: (devices: string[]) => string[] | null): Promise { - if (this.room.getMyMembership() !== "join") return; + if (this.room.getMyMembership() !== Membership.Join) return; const event = this.room.currentState.getStateEvents(JitsiCall.MEMBER_EVENT_TYPE, this.client.getUserId()!); const content = event?.getContent(); diff --git a/src/shouldHideEvent.ts b/src/shouldHideEvent.ts index dcfc5d920c0..54cd7040a7d 100644 --- a/src/shouldHideEvent.ts +++ b/src/shouldHideEvent.ts @@ -39,10 +39,10 @@ function memberEventDiff(ev: MatrixEvent): IDiff { const prevContent = ev.getPrevContent(); const isMembershipChanged = content.membership !== prevContent.membership; - diff.isJoin = isMembershipChanged && content.membership === "join"; - diff.isPart = isMembershipChanged && content.membership === "leave" && ev.getStateKey() === ev.getSender(); + diff.isJoin = isMembershipChanged && content.membership === Membership.Join; + diff.isPart = isMembershipChanged && content.membership === Membership.Leave && ev.getStateKey() === ev.getSender(); - const isJoinToJoin = !isMembershipChanged && content.membership === "join"; + const isJoinToJoin = !isMembershipChanged && content.membership === Membership.Join; diff.isDisplaynameChange = isJoinToJoin && content.displayname !== prevContent.displayname; diff.isAvatarChange = isJoinToJoin && content.avatar_url !== prevContent.avatar_url; return diff; diff --git a/src/stores/BreadcrumbsStore.ts b/src/stores/BreadcrumbsStore.ts index bacbfe97beb..631b99a72dd 100644 --- a/src/stores/BreadcrumbsStore.ts +++ b/src/stores/BreadcrumbsStore.ts @@ -91,7 +91,7 @@ export class BreadcrumbsStore extends AsyncStoreWithClient { // The tests might not result in a valid room object. const room = this.matrixClient.getRoom(payload.room_id); const membership = room?.getMyMembership(); - if (room && membership === "join") await this.appendRoom(room); + if (room && membership === Membership.Join) await this.appendRoom(room); } } else if (payload.action === Action.JoinRoom) { const room = this.matrixClient.getRoom(payload.roomId); diff --git a/src/stores/MemberListStore.ts b/src/stores/MemberListStore.ts index d7c50e00787..133bcbd5c61 100644 --- a/src/stores/MemberListStore.ts +++ b/src/stores/MemberListStore.ts @@ -90,7 +90,7 @@ export class MemberListStore { // pull straight from the server. Don't use a since token as we don't have earlier deltas // accumulated. room.currentState.markOutOfBandMembersStarted(); - const response = await this.stores.client!.members(roomId, undefined, "leave"); + const response = await this.stores.client!.members(roomId, undefined, Membership.Leave); const memberEvents = response.chunk.map(this.stores.client!.getEventMapper()); room.currentState.setOutOfBandMembers(memberEvents); } else { @@ -167,7 +167,7 @@ export class MemberListStore { invited: [], }; members.forEach((m) => { - if (m.membership !== "join" && m.membership !== "invite") { + if (m.membership !== Membership.Join && m.membership !== Membership.Invite) { return; // bail early for left/banned users } if (query) { @@ -179,10 +179,10 @@ export class MemberListStore { } } switch (m.membership) { - case "join": + case Membership.Join: result.joined.push(m); break; - case "invite": + case Membership.Invite: result.invited.push(m); break; } diff --git a/src/stores/OwnBeaconStore.ts b/src/stores/OwnBeaconStore.ts index e2b4a0c07bd..9cb9efe4be5 100644 --- a/src/stores/OwnBeaconStore.ts +++ b/src/stores/OwnBeaconStore.ts @@ -313,7 +313,7 @@ export class OwnBeaconStore extends AsyncStoreWithClient { // in PSF-797 // stop watching beacons in rooms where user is no longer a member - if (member.membership === "leave" || member.membership === "ban") { + if (member.membership === Membership.Leave || member.membership === Membership.Ban) { this.beaconsByRoomId.get(roomState.roomId)?.forEach(this.removeBeacon); this.beaconsByRoomId.delete(roomState.roomId); } diff --git a/src/stores/RoomViewStore.tsx b/src/stores/RoomViewStore.tsx index 4b7b165b441..17c3035f3e6 100644 --- a/src/stores/RoomViewStore.tsx +++ b/src/stores/RoomViewStore.tsx @@ -607,7 +607,7 @@ export class RoomViewStore extends EventEmitter { private getInvitingUserId(roomId: string): string | undefined { const cli = MatrixClientPeg.safeGet(); const room = cli.getRoom(roomId); - if (room?.getMyMembership() === "invite") { + if (room?.getMyMembership() === Membership.Invite) { const myMember = room.getMember(cli.getSafeUserId()); const inviteEvent = myMember ? myMember.events.member : null; return inviteEvent?.getSender(); diff --git a/src/stores/notifications/RoomNotificationState.ts b/src/stores/notifications/RoomNotificationState.ts index 0503485584d..2fd1c182088 100644 --- a/src/stores/notifications/RoomNotificationState.ts +++ b/src/stores/notifications/RoomNotificationState.ts @@ -96,7 +96,8 @@ export class RoomNotificationState extends NotificationState implements IDestroy const { level, symbol, count } = RoomNotifs.determineUnreadState(this.room, undefined, this.includeThreads); const muted = RoomNotifs.getRoomNotifsState(this.room.client, this.room.roomId) === RoomNotifs.RoomNotifState.Mute; - const knocked = SettingsStore.getValue("feature_ask_to_join") && this.room.getMyMembership() === "knock"; + const knocked = + SettingsStore.getValue("feature_ask_to_join") && this.room.getMyMembership() === Membership.Knock; this._level = level; this._symbol = symbol; this._count = count; diff --git a/src/stores/room-list/RoomListStore.ts b/src/stores/room-list/RoomListStore.ts index b6e65fada75..99b8ee2b28f 100644 --- a/src/stores/room-list/RoomListStore.ts +++ b/src/stores/room-list/RoomListStore.ts @@ -350,7 +350,7 @@ export class RoomListStoreClass extends AsyncStoreWithClient implements } private async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise { - if (cause === RoomUpdateCause.NewRoom && room.getMyMembership() === "invite") { + if (cause === RoomUpdateCause.NewRoom && room.getMyMembership() === Membership.Invite) { // Let the visibility provider know that there is a new invited room. It would be nice // if this could just be an event that things listen for but the point of this is that // we delay doing anything about this room until the VoipUserMapper had had a chance diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index 0645b7e49b4..06e28b49d36 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -172,7 +172,7 @@ export class Algorithm extends EventEmitter { } private doUpdateStickyRoom(val: Room | null): void { - if (val?.isSpaceRoom() && val.getMyMembership() !== "invite") { + if (val?.isSpaceRoom() && val.getMyMembership() !== Membership.Invite) { // no-op sticky rooms for spaces - they're effectively virtual rooms val = null; } diff --git a/src/stores/spaces/SpaceStore.ts b/src/stores/spaces/SpaceStore.ts index 0075e992314..c9aa7291294 100644 --- a/src/stores/spaces/SpaceStore.ts +++ b/src/stores/spaces/SpaceStore.ts @@ -255,8 +255,8 @@ export class SpaceStoreClass extends AsyncStoreWithClient { // else view space home or home depending on what is being clicked on if ( roomId && - cliSpace?.getMyMembership() !== "invite" && - this.matrixClient.getRoom(roomId)?.getMyMembership() === "join" && + cliSpace?.getMyMembership() !== Membership.Invite && + this.matrixClient.getRoom(roomId)?.getMyMembership() === Membership.Join && this.isRoomInSpace(space, roomId) ) { defaultDispatcher.dispatch({ @@ -325,7 +325,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { .filter((roomInfo) => { return ( roomInfo.room_type !== RoomType.Space && - this.matrixClient?.getRoom(roomInfo.room_id)?.getMyMembership() !== "join" + this.matrixClient.getRoom(roomInfo.room_id)?.getMyMembership() !== Membership.Join ); }) .map((roomInfo) => ({ @@ -368,7 +368,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { return history[history.length - 1]; }) .filter((room) => { - return room?.getMyMembership() === "join" || room?.getMyMembership() === "invite"; + return room?.getMyMembership() === Membership.Join || room?.getMyMembership() === Membership.Invite; }) || [] ); } @@ -379,7 +379,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { public getChildSpaces(spaceId: string): Room[] { // don't show invited subspaces as they surface at the top level for better visibility - return this.getChildren(spaceId).filter((r) => r.isSpaceRoom() && r.getMyMembership() === "join"); + return this.getChildren(spaceId).filter((r) => r.isSpaceRoom() && r.getMyMembership() === Membership.Join); } public getParents(roomId: string, canonicalOnly = false): Room[] { @@ -593,7 +593,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { private rebuildParentMap = (): void => { if (!this.matrixClient) return; const joinedSpaces = this.matrixClient.getVisibleRooms(this._msc3946ProcessDynamicPredecessor).filter((r) => { - return r.isSpaceRoom() && r.getMyMembership() === "join"; + return r.isSpaceRoom() && r.getMyMembership() === Membership.Join; }); this.parentMap = new EnhancedMap>(); @@ -717,12 +717,12 @@ export class SpaceStoreClass extends AsyncStoreWithClient { return ( !this.parentMap.get(room.roomId)?.size || // put all orphaned rooms in the Home Space !!DMRoomMap.shared().getUserIdForRoomId(room.roomId) || // put all DMs in the Home Space - room.getMyMembership() === "invite" + room.getMyMembership() === Membership.Invite ); // put all invites in the Home Space }; - private static isInSpace(member?: RoomMember | null): boolean { - return member?.membership === "join" || member?.membership === "invite"; + private static isInSpace(member: RoomMember): boolean { + return member.membership === Membership.Join || member.membership === Membership.Invite; } // Method for resolving the impact of a single user's membership change in the given Space and its hierarchy @@ -766,7 +766,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { const hiddenChildren = new EnhancedMap>(); visibleRooms.forEach((room) => { - if (!["join", "invite"].includes(room.getMyMembership())) return; + if (![Membership.Join, Membership.Invite].includes(room.getMyMembership())) return; this.getParents(room.roomId).forEach((parent) => { hiddenChildren.getOrCreate(parent.roomId, new Set()).add(room.roomId); }); @@ -796,7 +796,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { space ?.getMembers() .filter((m) => { - return m.membership === "join" || m.membership === "invite"; + return m.membership === Membership.Join || m.membership === Membership.Invite; }) .map((m) => m.userId), ); @@ -924,7 +924,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { if (!room.isSpaceRoom()) { this.onRoomsUpdate(); - if (membership === "join") { + if (membership === Membership.Join) { // the user just joined a room, remove it from the suggested list if it was there const numSuggestedRooms = this._suggestedRooms.length; this._suggestedRooms = this._suggestedRooms.filter((r) => r.room_id !== room.roomId); @@ -935,7 +935,10 @@ export class SpaceStoreClass extends AsyncStoreWithClient { } // if the room currently being viewed was just joined then switch to its related space - if (newMembership === "join" && room.roomId === SdkContextClass.instance.roomViewStore.getRoomId()) { + if ( + newMembership === Membership.Join && + room.roomId === SdkContextClass.instance.roomViewStore.getRoomId() + ) { this.switchSpaceIfNeeded(room.roomId); } } @@ -943,13 +946,13 @@ export class SpaceStoreClass extends AsyncStoreWithClient { } // Space - if (membership === "invite") { + if (membership === Membership.Invite) { const len = this._invitedSpaces.size; this._invitedSpaces.add(room); if (len !== this._invitedSpaces.size) { this.emit(UPDATE_INVITED_SPACES, this.invitedSpaces); } - } else if (oldMembership === "invite" && membership !== "join") { + } else if (oldMembership === Membership.Invite && membership !== Membership.Join) { if (this._invitedSpaces.delete(room)) { this.emit(UPDATE_INVITED_SPACES, this.invitedSpaces); } @@ -962,10 +965,10 @@ export class SpaceStoreClass extends AsyncStoreWithClient { this.emit(room.roomId); } - if (membership === "join" && room.roomId === SdkContextClass.instance.roomViewStore.getRoomId()) { + if (membership === Membership.Join && room.roomId === SdkContextClass.instance.roomViewStore.getRoomId()) { // if the user was looking at the space and then joined: select that space this.setActiveSpace(room.roomId, false); - } else if (membership === "leave" && room.roomId === this.activeSpace) { + } else if (membership === Membership.Leave && room.roomId === this.activeSpace) { // user's active space has gone away, go back to home this.goToFirstSpace(true); } @@ -1000,7 +1003,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { if ( room.roomId === this.activeSpace && // current space - target?.getMyMembership() !== "join" && // target not joined + target?.getMyMembership() !== Membership.Join && // target not joined ev.getPrevContent().suggested !== ev.getContent().suggested // suggested flag changed ) { this.loadSuggestedRooms(room); diff --git a/src/stores/widgets/StopGapWidget.ts b/src/stores/widgets/StopGapWidget.ts index 64e9a980d1d..8473244cf6b 100644 --- a/src/stores/widgets/StopGapWidget.ts +++ b/src/stores/widgets/StopGapWidget.ts @@ -550,7 +550,7 @@ export class StopGapWidget extends EventEmitter { const evId = ev.getId(); if (evRoomId && evId) { const room = this.client.getRoom(evRoomId); - if (room && room.getMyMembership() === "join" && !isRelationToUnknown) { + if (room && room.getMyMembership() === Membership.Join && !isRelationToUnknown) { this.readUpToMap[evRoomId] = evId; } } diff --git a/src/utils/DMRoomMap.ts b/src/utils/DMRoomMap.ts index eafbe07d5d5..94ce2512796 100644 --- a/src/utils/DMRoomMap.ts +++ b/src/utils/DMRoomMap.ts @@ -172,7 +172,7 @@ export default class DMRoomMap { const joinedRooms = commonRooms .map((r) => this.matrixClient.getRoom(r)) - .filter((r) => r && r.getMyMembership() === "join"); + .filter((r) => r && r.getMyMembership() === Membership.Join); return joinedRooms[0]; } diff --git a/src/utils/MultiInviter.ts b/src/utils/MultiInviter.ts index de8ea1d7bcd..cf257868743 100644 --- a/src/utils/MultiInviter.ts +++ b/src/utils/MultiInviter.ts @@ -159,17 +159,17 @@ export default class MultiInviter { if (!room) throw new Error("Room not found"); const member = room.getMember(addr); - if (member?.membership === "join") { + if (member?.membership === Membership.Join) { throw new MatrixError({ errcode: USER_ALREADY_JOINED, error: "Member already joined", }); - } else if (member?.membership === "invite") { + } else if (member?.membership === Membership.Invite) { throw new MatrixError({ errcode: USER_ALREADY_INVITED, error: "Member already invited", }); - } else if (member?.membership === "ban") { + } else if (member?.membership === Membership.Ban) { let proceed = false; // Check if we can unban the invitee. // See https://spec.matrix.org/v1.7/rooms/v10/#authorization-rules, particularly 4.5.3 and 4.5.4. @@ -177,8 +177,8 @@ export default class MultiInviter { if ( !!ourMember && member.powerLevel < ourMember.powerLevel && - room.currentState.hasSufficientPowerLevelFor("ban", ourMember.powerLevel) && - room.currentState.hasSufficientPowerLevelFor("kick", ourMember.powerLevel) + room.currentState.hasSufficientPowerLevelFor(Membership.Ban, ourMember.powerLevel) && + room.currentState.hasSufficientPowerLevelFor(Membership.Kick, ourMember.powerLevel) ) { const { finished } = Modal.createDialog(ConfirmUserActionDialog, { member, diff --git a/src/utils/RoomUpgrade.ts b/src/utils/RoomUpgrade.ts index 88fc9045419..6f6d6e88c0f 100644 --- a/src/utils/RoomUpgrade.ts +++ b/src/utils/RoomUpgrade.ts @@ -67,7 +67,10 @@ export async function upgradeRoom( let toInvite: string[] = []; if (inviteUsers) { - toInvite = [...room.getMembersWithMembership("join"), ...room.getMembersWithMembership("invite")] + toInvite = [ + ...room.getMembersWithMembership(Membership.Join), + ...room.getMembersWithMembership(Membership.Invite), + ] .map((m) => m.userId) .filter((m) => m !== cli.getUserId()); } diff --git a/src/utils/SortMembers.ts b/src/utils/SortMembers.ts index 534fe6a82e2..adc99defaad 100644 --- a/src/utils/SortMembers.ts +++ b/src/utils/SortMembers.ts @@ -52,7 +52,7 @@ function joinedRooms(cli: MatrixClient): Room[] { return ( cli .getRooms() - .filter((r) => r.getMyMembership() === "join") + .filter((r) => r.getMyMembership() === Membership.Join) // Skip low priority rooms and DMs .filter((r) => !DMRoomMap.shared().getUserIdForRoomId(r.roomId)) .filter((r) => !Object.keys(r.tags).includes("m.lowpriority")) diff --git a/src/utils/WidgetUtils.ts b/src/utils/WidgetUtils.ts index 11918d14589..e6c6d777e9d 100644 --- a/src/utils/WidgetUtils.ts +++ b/src/utils/WidgetUtils.ts @@ -83,7 +83,7 @@ export default class WidgetUtils { return false; } - if (room.getMyMembership() !== "join") { + if (room.getMyMembership() !== Membership.Join) { logger.warn(`User ${me} is not in room ${roomId}`); return false; } diff --git a/src/utils/dm/createDmLocalRoom.ts b/src/utils/dm/createDmLocalRoom.ts index ac14834303e..108ba0492f9 100644 --- a/src/utils/dm/createDmLocalRoom.ts +++ b/src/utils/dm/createDmLocalRoom.ts @@ -76,7 +76,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[]) type: EventType.RoomMember, content: { displayname: userId, - membership: "join", + membership: MembershipJoin, }, state_key: userId, user_id: userId, @@ -93,7 +93,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[]) content: { displayname: target.name, avatar_url: target.getMxcAvatarUrl() ?? undefined, - membership: "invite", + membership: Membership.Invite, isDirect: true, }, state_key: target.userId, @@ -108,7 +108,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[]) content: { displayname: target.name, avatar_url: target.getMxcAvatarUrl() ?? undefined, - membership: "join", + membership: Membership.Join, }, state_key: target.userId, sender: target.userId, @@ -118,7 +118,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[]) }); localRoom.targets = targets; - localRoom.updateMyMembership("join"); + localRoom.updateMyMembership(Membership.Join); localRoom.addLiveEvents(events); localRoom.currentState.setStateEvents(events); localRoom.name = localRoom.getDefaultRoomName(client.getUserId()!); diff --git a/src/utils/dm/findDMForUser.ts b/src/utils/dm/findDMForUser.ts index 92575d41be2..34bfe8caa84 100644 --- a/src/utils/dm/findDMForUser.ts +++ b/src/utils/dm/findDMForUser.ts @@ -42,7 +42,7 @@ function extractSuitableRoom(rooms: Room[], userId: string, findRoomWithThirdpar // a DM is a room of two people that contains those two people exactly. This does mean // that bots, assistants, etc will ruin a room's DM-ness, though this is a problem for // canonical DMs to solve. - if (r && r.getMyMembership() === "join") { + if (r && r.getMyMembership() === Membership.Join) { if (isLocalRoom(r)) return false; const functionalUsers = getFunctionalMembers(r); diff --git a/src/utils/membership.ts b/src/utils/membership.ts index df012e442b6..42d87960484 100644 --- a/src/utils/membership.ts +++ b/src/utils/membership.ts @@ -65,10 +65,13 @@ export function splitRoomsByMembership(rooms: Room[]): MembershipSplit { return split; } -export function getEffectiveMembership(membership: string): EffectiveMembership { - if (membership === "invite") { +export function getEffectiveMembership(membership: Membership): EffectiveMembership { + if (membership === Membership.Invite) { return EffectiveMembership.Invite; - } else if (membership === "join" || (SettingsStore.getValue("feature_ask_to_join") && membership === "knock")) { + } else if ( + membership === Membership.Join || + (SettingsStore.getValue("feature_ask_to_join") && membership === Membership.Knock) + ) { return EffectiveMembership.Join; } else { // Probably a leave, kick, or ban @@ -81,7 +84,7 @@ export function isKnockDenied(room: Room): boolean | undefined { const member = memberId ? room.getMember(memberId) : null; const previousMembership = member?.events.member?.getPrevContent().membership; - return member?.isKicked() && previousMembership === "knock"; + return member?.isKicked() && previousMembership === Membership.Knock; } export function getEffectiveMembershipTag(room: Room, membership?: string): EffectiveMembership { @@ -90,7 +93,7 @@ export function getEffectiveMembershipTag(room: Room, membership?: string): Effe : getEffectiveMembership(membership ?? room.getMyMembership()); } -export function isJoinedOrNearlyJoined(membership: string): boolean { +export function isJoinedOrNearlyJoined(membership: Membership): boolean { const effective = getEffectiveMembership(membership); return effective === EffectiveMembership.Join || effective === EffectiveMembership.Invite; } diff --git a/src/utils/permalinks/Permalinks.ts b/src/utils/permalinks/Permalinks.ts index 9af7476a39d..e30230dd7a6 100644 --- a/src/utils/permalinks/Permalinks.ts +++ b/src/utils/permalinks/Permalinks.ts @@ -178,7 +178,7 @@ export class RoomPermalinkCreator { const entries = Object.entries(users); const allowedEntries = entries.filter(([userId]) => { const member = this.room?.getMember(userId); - if (!member || member.membership !== "join") { + if (!member || member.membership !== Membership.Join) { return false; } const serverName = getServerName(userId); diff --git a/src/utils/room/canInviteTo.ts b/src/utils/room/canInviteTo.ts index 55265e6cc8a..9bda1c45b2b 100644 --- a/src/utils/room/canInviteTo.ts +++ b/src/utils/room/canInviteTo.ts @@ -29,5 +29,5 @@ export function canInviteTo(room: Room): boolean { const canInvite = !!room.canInvite(client.getSafeUserId()) || !!(room.isSpaceRoom() && room.getJoinRule() === JoinRule.Public); - return canInvite && room.getMyMembership() === "join" && shouldShowComponent(UIComponent.InviteUsers); + return canInvite && room.getMyMembership() === Membership.Join && shouldShowComponent(UIComponent.InviteUsers); } diff --git a/src/utils/space.tsx b/src/utils/space.tsx index d6cfc5a4fff..218c43bfc1c 100644 --- a/src/utils/space.tsx +++ b/src/utils/space.tsx @@ -40,7 +40,7 @@ import { SdkContextClass } from "../contexts/SDKContext"; export const shouldShowSpaceSettings = (space: Room): boolean => { const userId = space.client.getUserId()!; return ( - space.getMyMembership() === "join" && + space.getMyMembership() === Membership.Join && (space.currentState.maySendStateEvent(EventType.RoomAvatar, userId) || space.currentState.maySendStateEvent(EventType.RoomName, userId) || space.currentState.maySendStateEvent(EventType.RoomTopic, userId) || @@ -85,7 +85,7 @@ export const showCreateNewRoom = async (space: Room, type?: RoomType): Promise - ((space?.getMyMembership() === "join" && space.canInvite(space.client.getUserId()!)) || + ((space?.getMyMembership() === Membership.Join && space.canInvite(space.client.getUserId()!)) || space.getJoinRule() === JoinRule.Public) && shouldShowComponent(UIComponent.InviteUsers); diff --git a/test/LegacyCallHandler-test.ts b/test/LegacyCallHandler-test.ts index 9e31baad2a2..489a00bd031 100644 --- a/test/LegacyCallHandler-test.ts +++ b/test/LegacyCallHandler-test.ts @@ -102,7 +102,7 @@ function mkStubDM(roomId: string, userId: string) { name: "Member", rawDisplayName: "Member", roomId: roomId, - membership: "join", + membership: Membership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -111,7 +111,7 @@ function mkStubDM(roomId: string, userId: string) { name: "Member", rawDisplayName: "Member", roomId: roomId, - membership: "join", + membership: Membership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -120,7 +120,7 @@ function mkStubDM(roomId: string, userId: string) { name: "Bot user", rawDisplayName: "Bot user", roomId: roomId, - membership: "join", + membership: Membership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, diff --git a/test/RoomNotifs-test.ts b/test/RoomNotifs-test.ts index 371ffea9104..3240a83ea3c 100644 --- a/test/RoomNotifs-test.ts +++ b/test/RoomNotifs-test.ts @@ -277,7 +277,7 @@ describe("RoomNotifs test", () => { }); it("indicates the user has been invited to a channel", async () => { - room.updateMyMembership("invite"); + room.updateMyMembership(Membership.Invite); const { level, symbol, count } = determineUnreadState(room); @@ -290,9 +290,15 @@ describe("RoomNotifs test", () => { jest.spyOn(SettingsStore, "getValue").mockImplementation((name) => { return name === "feature_ask_to_join"; }); - const roomMember = mkRoomMember(room.roomId, MatrixClientPeg.get()!.getSafeUserId(), "leave", true, { - membership: "knock", - }); + const roomMember = mkRoomMember( + room.roomId, + MatrixClientPeg.get()!.getSafeUserId(), + Membership.Leave, + true, + { + membership: Membership.Knock, + }, + ); jest.spyOn(room, "getMember").mockReturnValue(roomMember); const { level, symbol, count } = determineUnreadState(room); diff --git a/test/SlashCommands-test.tsx b/test/SlashCommands-test.tsx index ae90d2bbc42..7da019af4ce 100644 --- a/test/SlashCommands-test.tsx +++ b/test/SlashCommands-test.tsx @@ -162,7 +162,7 @@ describe("SlashCommands", () => { it("should warn about self demotion", async () => { setCurrentRoom(); const member = new RoomMember(roomId, client.getSafeUserId()); - member.membership = "join"; + member.membership = Membership.Join; member.powerLevel = 100; room.getMember = () => member; command.run(client, roomId, null, `${client.getUserId()} 0`); @@ -172,7 +172,7 @@ describe("SlashCommands", () => { it("should default to 50 if no powerlevel specified", async () => { setCurrentRoom(); const member = new RoomMember(roomId, "@user:server"); - member.membership = "join"; + member.membership = Membership.Join; room.getMember = () => member; command.run(client, roomId, null, member.userId); expect(client.setPowerLevel).toHaveBeenCalledWith(roomId, member.userId, 50); @@ -191,7 +191,7 @@ describe("SlashCommands", () => { it("should warn about self demotion", async () => { setCurrentRoom(); const member = new RoomMember(roomId, client.getSafeUserId()); - member.membership = "join"; + member.membership = Membership.Join; member.powerLevel = 100; room.getMember = () => member; command.run(client, roomId, null, client.getSafeUserId()); @@ -366,7 +366,7 @@ describe("SlashCommands", () => { describe("/join", () => { beforeEach(() => { jest.spyOn(dispatcher, "dispatch"); - command = findCommand("join")!; + command = findCommand(Membership.Join)!; }); it("should return usage if no args", () => { diff --git a/test/TextForEvent-test.ts b/test/TextForEvent-test.ts index 4a8258879cd..9e70b2ff512 100644 --- a/test/TextForEvent-test.ts +++ b/test/TextForEvent-test.ts @@ -504,12 +504,12 @@ describe("TextForEvent", () => { type: "m.room.member", sender: "@a:foo", content: { - membership: "join", + membership: Membership.Join, avatar_url: "b", displayname: "Bob", }, prev_content: { - membership: "join", + membership: Membership.Join, avatar_url: "a", displayname: "Andy", }, diff --git a/test/components/structures/MessagePanel-test.tsx b/test/components/structures/MessagePanel-test.tsx index 45fe3b4abec..00d55c371d8 100644 --- a/test/components/structures/MessagePanel-test.tsx +++ b/test/components/structures/MessagePanel-test.tsx @@ -171,8 +171,8 @@ describe("MessagePanel", function () { user: "@user:id", target: bobMember, ts: ts0 + i * 1000, - mship: "join", - prevMship: "join", + mship: Membership.Join, + prevMship: Membership.Join, name: "A user", }), ); @@ -205,8 +205,8 @@ describe("MessagePanel", function () { user: "@user:id", target: bobMember, ts: ts0 + i * 1000, - mship: "join", - prevMship: "join", + mship: Membership.Join, + prevMship: Membership.Join, name: "A user", }), ); @@ -245,7 +245,7 @@ describe("MessagePanel", function () { user: alice, target: aliceMember, ts: ts0 + 1, - mship: "join", + mship: Membership.Join, name: "Alice", }), mkEvent({ @@ -285,7 +285,7 @@ describe("MessagePanel", function () { skey: "@bob:example.org", target: bobMember, ts: ts0 + 5, - mship: "invite", + mship: Membership.Invite, name: "Bob", }), ]; @@ -542,8 +542,8 @@ describe("MessagePanel", function () { user: "@user:id", target: bobMember, ts: Date.now(), - mship: "join", - prevMship: "join", + mship: Membership.Join, + prevMship: Membership.Join, name: "A user", }), ]; @@ -571,8 +571,8 @@ describe("MessagePanel", function () { user: "@user:id", target: bobMember, ts: Date.now(), - mship: "join", - prevMship: "join", + mship: Membership.Join, + prevMship: Membership.Join, name: "A user", }), ...events, @@ -695,8 +695,8 @@ describe("MessagePanel", function () { for (let i = 0; i < 100; i++) { events.push( TestUtilsMatrix.mkMembership({ - mship: "join", - prevMship: "join", + mship: Membership.Join, + prevMship: Membership.Join, room: "!room:id", user: "@user:id", event: true, @@ -716,8 +716,8 @@ describe("MessagePanel", function () { for (let i = 0; i < 100; i++) { events.push( TestUtilsMatrix.mkMembership({ - mship: "join", - prevMship: "join", + mship: Membership.Join, + prevMship: Membership.Join, room: "!room:id", user: "@user:id", event: true, diff --git a/test/components/structures/RoomView-test.tsx b/test/components/structures/RoomView-test.tsx index 916e8a8225a..13856c389aa 100644 --- a/test/components/structures/RoomView-test.tsx +++ b/test/components/structures/RoomView-test.tsx @@ -238,7 +238,7 @@ describe("RoomView", () => { }); it("updates url preview visibility on encryption state change", async () => { - room.getMyMembership = jest.fn().mockReturnValue("join"); + room.getMyMembership = jest.fn().mockReturnValue(Membership.Join); // we should be starting unencrypted expect(cli.isCryptoEnabled()).toEqual(false); expect(cli.isRoomEncrypted(room.roomId)).toEqual(false); @@ -583,7 +583,7 @@ describe("RoomView", () => { it("allows to cancel a join request", async () => { jest.spyOn(MatrixClientPeg, "safeGet").mockReturnValue(client); jest.spyOn(client, "leave").mockResolvedValue({}); - jest.spyOn(room, "getMyMembership").mockReturnValue("knock"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Knock); await mountRoomView(); fireEvent.click(screen.getByRole("button", { name: "Cancel request" })); @@ -594,7 +594,7 @@ describe("RoomView", () => { }); it("should close search results when edit is clicked", async () => { - room.getMyMembership = jest.fn().mockReturnValue("join"); + room.getMyMembership = jest.fn().mockReturnValue(Membership.Join); const eventMapper = (obj: Partial) => new MatrixEvent(obj); @@ -655,7 +655,7 @@ describe("RoomView", () => { const room2 = new Room(`!${roomCount++}:example.org`, cli, "@alice:example.org"); rooms.set(room2.roomId, room2); - room.getMyMembership = jest.fn().mockReturnValue("join"); + room.getMyMembership = jest.fn().mockReturnValue(Membership.Join); const eventMapper = (obj: Partial) => new MatrixEvent(obj); diff --git a/test/components/structures/SpaceHierarchy-test.tsx b/test/components/structures/SpaceHierarchy-test.tsx index 3b851c5a61a..5e85ae25336 100644 --- a/test/components/structures/SpaceHierarchy-test.tsx +++ b/test/components/structures/SpaceHierarchy-test.tsx @@ -181,7 +181,7 @@ describe("SpaceHierarchy", () => { mocked(client.getRoom).mockImplementation( (roomId) => client.getRooms().find((room) => room.roomId === roomId) ?? null, ); - [room1, room2, space1, room3].forEach((r) => mocked(r.getMyMembership).mockReturnValue("leave")); + [room1, room2, space1, room3].forEach((r) => mocked(r.getMyMembership).mockReturnValue(Membership.Leave)); const hierarchyRoot: HierarchyRoom = { room_id: root.roomId, diff --git a/test/components/structures/TimelinePanel-test.tsx b/test/components/structures/TimelinePanel-test.tsx index a5312e43c55..be64b9baeb4 100644 --- a/test/components/structures/TimelinePanel-test.tsx +++ b/test/components/structures/TimelinePanel-test.tsx @@ -988,8 +988,8 @@ describe("TimelinePanel", () => { events.forEach((event) => timelineSet.getLiveTimeline().addEvent(event, { toStartOfTimeline: true })); const roomMembership = mkMembership({ - mship: "join", - prevMship: "join", + mship: Membership.Join, + prevMship: Membership.Join, user: authorId, room: room.roomId, event: true, @@ -999,7 +999,7 @@ describe("TimelinePanel", () => { events.push(roomMembership); const member = new RoomMember(room.roomId, authorId); - member.membership = "join"; + member.membership = Membership.Join; const roomState = new RoomState(room.roomId); jest.spyOn(roomState, "getMember").mockReturnValue(member); diff --git a/test/components/views/context_menus/RoomContextMenu-test.tsx b/test/components/views/context_menus/RoomContextMenu-test.tsx index 3fdd91874c9..ca7236a2d51 100644 --- a/test/components/views/context_menus/RoomContextMenu-test.tsx +++ b/test/components/views/context_menus/RoomContextMenu-test.tsx @@ -106,7 +106,7 @@ describe("RoomContextMenu", () => { it("should render notification option for joined rooms", () => { const chamber = EchoChamber.forRoom(room); chamber.notificationVolume = RoomNotifState.Mute; - jest.spyOn(room, "getMyMembership").mockReturnValue("join"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); renderComponent(); expect( diff --git a/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx b/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx index bb832612bfe..f96425e2d92 100644 --- a/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx +++ b/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx @@ -105,7 +105,7 @@ describe("RoomGeneralContextMenu", () => { }); it("does not render invite menu item when UIComponent customisations disable room invite", () => { - room.updateMyMembership("join"); + room.updateMyMembership(Membership.Join); jest.spyOn(room, "canInvite").mockReturnValue(true); mocked(shouldShowComponent).mockReturnValue(false); @@ -116,7 +116,7 @@ describe("RoomGeneralContextMenu", () => { }); it("renders invite menu item when UIComponent customisations enables room invite", () => { - room.updateMyMembership("join"); + room.updateMyMembership(Membership.Join); jest.spyOn(room, "canInvite").mockReturnValue(true); mocked(shouldShowComponent).mockReturnValue(true); diff --git a/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx b/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx index 1629a7a225f..507157c0905 100644 --- a/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx +++ b/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx @@ -25,7 +25,7 @@ describe("ConfirmUserActionDialog", () => { const { asFragment } = render( , diff --git a/test/components/views/dialogs/InviteDialog-test.tsx b/test/components/views/dialogs/InviteDialog-test.tsx index 95e3131bf02..647e769f267 100644 --- a/test/components/views/dialogs/InviteDialog-test.tsx +++ b/test/components/views/dialogs/InviteDialog-test.tsx @@ -163,7 +163,7 @@ describe("InviteDialog", () => { mkMembership({ event: true, room: roomId, - mship: "join", + mship: Membership.Join, user: aliceId, skey: aliceId, }), diff --git a/test/components/views/dialogs/SpotlightDialog-test.tsx b/test/components/views/dialogs/SpotlightDialog-test.tsx index 5ec1108bc4b..a2ed2f22950 100644 --- a/test/components/views/dialogs/SpotlightDialog-test.tsx +++ b/test/components/views/dialogs/SpotlightDialog-test.tsx @@ -158,9 +158,9 @@ describe("Spotlight Dialog", () => { beforeEach(() => { mockedClient = mockClient({ rooms: [testPublicRoom], users: [testPerson] }); testRoom = mkRoom(mockedClient, "!test23:example.com"); - mocked(testRoom.getMyMembership).mockReturnValue("join"); + mocked(testRoom.getMyMembership).mockReturnValue(Membership.Join); testLocalRoom = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test23", mockedClient, mockedClient.getUserId()!); - testLocalRoom.updateMyMembership("join"); + testLocalRoom.updateMyMembership(Membership.Join); mocked(mockedClient.getVisibleRooms).mockReturnValue([testRoom, testLocalRoom]); jest.spyOn(DMRoomMap, "shared").mockReturnValue({ @@ -169,7 +169,7 @@ describe("Spotlight Dialog", () => { testDM = mkRoom(mockedClient, testDMRoomId); testDM.name = "Chat with Alice"; - mocked(testDM.getMyMembership).mockReturnValue("join"); + mocked(testDM.getMyMembership).mockReturnValue(Membership.Join); mocked(DMRoomMap.shared().getUserIdForRoomId).mockImplementation((roomId: string) => { if (roomId === testDMRoomId) { diff --git a/test/components/views/elements/EventListSummary-test.tsx b/test/components/views/elements/EventListSummary-test.tsx index c57303dff27..19b1a55ec0b 100644 --- a/test/components/views/elements/EventListSummary-test.tsx +++ b/test/components/views/elements/EventListSummary-test.tsx @@ -61,8 +61,8 @@ describe("EventListSummary", function () { interface MembershipEventParams { senderId?: string; userId?: string; - membership: string; - prevMembership?: string; + membership: Membership; + prevMembership?: Membership; } const generateMembershipEvent = ( eventId: string, @@ -145,7 +145,9 @@ describe("EventListSummary", function () { }); it("renders expanded events if there are less than props.threshold", function () { - const events = generateEvents([{ userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }]); + const events = generateEvents([ + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + ]); const props = { events: events, children: generateTiles(events), @@ -163,8 +165,8 @@ describe("EventListSummary", function () { it("renders expanded events if there are less than props.threshold for join and leave", function () { const events = generateEvents([ - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, ]); const props = { events: events, @@ -184,9 +186,9 @@ describe("EventListSummary", function () { it("renders collapsed events if events.length = props.threshold", function () { const events = generateEvents([ - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, ]); const props = { events: events, @@ -203,20 +205,20 @@ describe("EventListSummary", function () { it("truncates long join,leave repetitions", function () { const events = generateEvents([ - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, ]); const props = { events: events, @@ -235,28 +237,28 @@ describe("EventListSummary", function () { const events = generateEvents([ { userId: "@user_1:some.domain", - prevMembership: "ban", - membership: "leave", + prevMembership: Membership.Ban, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, { userId: "@user_1:some.domain", - prevMembership: "leave", - membership: "invite", + prevMembership: Membership.Leave, + membership: Membership.Invite, senderId: "@some_other_user:some.domain", }, ]); @@ -277,30 +279,30 @@ describe("EventListSummary", function () { const events = generateEvents([ { userId: "@user_1:some.domain", - prevMembership: "ban", - membership: "leave", + prevMembership: Membership.Ban, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, { userId: "@user_1:some.domain", - prevMembership: "leave", - membership: "ban", + prevMembership: Membership.Leave, + membership: Membership.Ban, senderId: "@some_other_user:some.domain", }, - { userId: "@user_1:some.domain", prevMembership: "ban", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, + { userId: "@user_1:some.domain", prevMembership: Membership.Ban, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, { userId: "@user_1:some.domain", - prevMembership: "leave", - membership: "invite", + prevMembership: Membership.Leave, + membership: Membership.Invite, senderId: "@some_other_user:some.domain", }, ]); @@ -324,35 +326,35 @@ describe("EventListSummary", function () { // user_1 { userId: "@user_1:some.domain", - prevMembership: "ban", - membership: "leave", + prevMembership: Membership.Ban, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, { userId: "@user_1:some.domain", - prevMembership: "leave", - membership: "ban", + prevMembership: Membership.Leave, + membership: Membership.Ban, senderId: "@some_other_user:some.domain", }, // user_2 { userId: "@user_2:some.domain", - prevMembership: "ban", - membership: "leave", + prevMembership: Membership.Ban, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, - { userId: "@user_2:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_2:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_2:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_2:some.domain", prevMembership: "join", membership: "leave" }, + { userId: "@user_2:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_2:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_2:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_2:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, { userId: "@user_2:some.domain", - prevMembership: "leave", - membership: "ban", + prevMembership: Membership.Leave, + membership: Membership.Ban, senderId: "@some_other_user:some.domain", }, ]); @@ -374,17 +376,17 @@ describe("EventListSummary", function () { it("handles many users following the same sequence of memberships", function () { const events = generateEventsForUsers("@user_$:some.domain", 20, [ { - prevMembership: "ban", - membership: "leave", + prevMembership: Membership.Ban, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, - { prevMembership: "leave", membership: "join" }, - { prevMembership: "join", membership: "leave" }, - { prevMembership: "leave", membership: "join" }, - { prevMembership: "join", membership: "leave" }, + { prevMembership: Membership.Leave, membership: Membership.Join }, + { prevMembership: Membership.Join, membership: Membership.Leave }, + { prevMembership: Membership.Leave, membership: Membership.Join }, + { prevMembership: Membership.Join, membership: Membership.Leave }, { - prevMembership: "leave", - membership: "ban", + prevMembership: Membership.Leave, + membership: Membership.Ban, senderId: "@some_other_user:some.domain", }, ]); @@ -407,30 +409,30 @@ describe("EventListSummary", function () { const events = generateEvents([ { userId: "@user_2:some.domain", - prevMembership: "ban", - membership: "leave", + prevMembership: Membership.Ban, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, { userId: "@user_1:some.domain", - prevMembership: "ban", - membership: "leave", + prevMembership: Membership.Ban, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_1:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, { userId: "@user_1:some.domain", - prevMembership: "leave", - membership: "ban", + prevMembership: Membership.Leave, + membership: Membership.Ban, senderId: "@some_other_user:some.domain", }, - { userId: "@user_2:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_2:some.domain", prevMembership: "join", membership: "leave" }, - { userId: "@user_2:some.domain", prevMembership: "leave", membership: "join" }, - { userId: "@user_2:some.domain", prevMembership: "join", membership: "leave" }, + { userId: "@user_2:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_2:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_2:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_2:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, ]); const props = { events: events, @@ -451,52 +453,52 @@ describe("EventListSummary", function () { it("correctly identifies transitions", function () { const events = generateEvents([ // invited - { userId: "@user_1:some.domain", membership: "invite" }, + { userId: "@user_1:some.domain", membership: Membership.Invite }, // banned - { userId: "@user_1:some.domain", membership: "ban" }, + { userId: "@user_1:some.domain", membership: Membership.Ban }, // joined - { userId: "@user_1:some.domain", membership: "join" }, + { userId: "@user_1:some.domain", membership: Membership.Join }, // invite_reject { userId: "@user_1:some.domain", - prevMembership: "invite", - membership: "leave", + prevMembership: Membership.Invite, + membership: Membership.Leave, }, // left - { userId: "@user_1:some.domain", prevMembership: "join", membership: "leave" }, + { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, // invite_withdrawal { userId: "@user_1:some.domain", - prevMembership: "invite", - membership: "leave", + prevMembership: Membership.Invite, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, // unbanned { userId: "@user_1:some.domain", - prevMembership: "ban", - membership: "leave", + prevMembership: Membership.Ban, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, // kicked { userId: "@user_1:some.domain", - prevMembership: "join", - membership: "leave", + prevMembership: Membership.Join, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, // default for sender=target (leave) { userId: "@user_1:some.domain", - prevMembership: "????", - membership: "leave", + prevMembership: "????" as Membership, + membership: Membership.Leave, senderId: "@user_1:some.domain", }, // default for sender<>target (kicked) { userId: "@user_1:some.domain", - prevMembership: "????", - membership: "leave", + prevMembership: "????" as Membership, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, ]); @@ -520,24 +522,24 @@ describe("EventListSummary", function () { const events = generateEvents([ { userId: "@user_1:some.domain", - prevMembership: "invite", - membership: "leave", + prevMembership: Membership.Invite, + membership: Membership.Leave, }, { userId: "@user_1:some.domain", - prevMembership: "invite", - membership: "leave", + prevMembership: Membership.Invite, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, { userId: "@user_2:some.domain", - prevMembership: "invite", - membership: "leave", + prevMembership: Membership.Invite, + membership: Membership.Leave, }, { userId: "@user_2:some.domain", - prevMembership: "invite", - membership: "leave", + prevMembership: Membership.Invite, + membership: Membership.Leave, senderId: "@some_other_user:some.domain", }, ]); @@ -560,13 +562,13 @@ describe("EventListSummary", function () { const events = generateEvents([ { userId: "@user_1:some.domain", - prevMembership: "invite", - membership: "leave", + prevMembership: Membership.Invite, + membership: Membership.Leave, }, { userId: "@user_1:some.domain", - prevMembership: "invite", - membership: "leave", + prevMembership: Membership.Invite, + membership: Membership.Leave, }, ]); const props = { @@ -584,10 +586,10 @@ describe("EventListSummary", function () { it('handles a summary length = 2, with no "others"', function () { const events = generateEvents([ - { userId: "@user_1:some.domain", membership: "join" }, - { userId: "@user_1:some.domain", membership: "join" }, - { userId: "@user_2:some.domain", membership: "join" }, - { userId: "@user_2:some.domain", membership: "join" }, + { userId: "@user_1:some.domain", membership: Membership.Join }, + { userId: "@user_1:some.domain", membership: Membership.Join }, + { userId: "@user_2:some.domain", membership: Membership.Join }, + { userId: "@user_2:some.domain", membership: Membership.Join }, ]); const props = { events: events, @@ -604,9 +606,9 @@ describe("EventListSummary", function () { it('handles a summary length = 2, with 1 "other"', function () { const events = generateEvents([ - { userId: "@user_1:some.domain", membership: "join" }, - { userId: "@user_2:some.domain", membership: "join" }, - { userId: "@user_3:some.domain", membership: "join" }, + { userId: "@user_1:some.domain", membership: Membership.Join }, + { userId: "@user_2:some.domain", membership: Membership.Join }, + { userId: "@user_3:some.domain", membership: Membership.Join }, ]); const props = { events: events, @@ -622,7 +624,7 @@ describe("EventListSummary", function () { }); it('handles a summary length = 2, with many "others"', function () { - const events = generateEventsForUsers("@user_$:some.domain", 20, [{ membership: "join" }]); + const events = generateEventsForUsers("@user_$:some.domain", 20, [{ membership: Membership.Join }]); const props = { events: events, children: generateTiles(events), diff --git a/test/components/views/elements/FacePile-test.tsx b/test/components/views/elements/FacePile-test.tsx index 3e002145aee..9825c78ddc2 100644 --- a/test/components/views/elements/FacePile-test.tsx +++ b/test/components/views/elements/FacePile-test.tsx @@ -21,7 +21,7 @@ import { mkRoomMember } from "../../../test-utils"; describe("", () => { it("renders with a tooltip", () => { - const member = mkRoomMember("123", "456", "join"); + const member = mkRoomMember("123", "456", Membership.Join); const { asFragment } = render( , diff --git a/test/components/views/elements/RoomFacePile-test.tsx b/test/components/views/elements/RoomFacePile-test.tsx index aa75e92d218..e0358f76a51 100644 --- a/test/components/views/elements/RoomFacePile-test.tsx +++ b/test/components/views/elements/RoomFacePile-test.tsx @@ -27,7 +27,9 @@ describe("", () => { DMRoomMap.makeShared(cli); const room = mkRoom(cli, "!123"); - jest.spyOn(room, "getJoinedMembers").mockReturnValue([mkRoomMember(room.roomId, "@bob:example.org", "join")]); + jest.spyOn(room, "getJoinedMembers").mockReturnValue([ + mkRoomMember(room.roomId, "@bob:example.org", Membership.Join), + ]); const { asFragment } = render( diff --git a/test/components/views/right_panel/RoomSummaryCard-test.tsx b/test/components/views/right_panel/RoomSummaryCard-test.tsx index f26c4e6037d..57683c8bb67 100644 --- a/test/components/views/right_panel/RoomSummaryCard-test.tsx +++ b/test/components/views/right_panel/RoomSummaryCard-test.tsx @@ -86,7 +86,7 @@ describe("", () => { state_key: "", }); room.currentState.setStateEvents([roomCreateEvent]); - room.updateMyMembership("join"); + room.updateMyMembership(Membership.Join); jest.spyOn(Modal, "createDialog"); jest.spyOn(RightPanelStore.instance, "pushCard"); diff --git a/test/components/views/right_panel/UserInfo-test.tsx b/test/components/views/right_panel/UserInfo-test.tsx index 4be9c4b6a9c..aed084d16bc 100644 --- a/test/components/views/right_panel/UserInfo-test.tsx +++ b/test/components/views/right_panel/UserInfo-test.tsx @@ -943,8 +943,8 @@ describe("", () => { describe("", () => { const defaultMember = new RoomMember(defaultRoomId, defaultUserId); - const memberWithInviteMembership = { ...defaultMember, membership: "invite" }; - const memberWithJoinMembership = { ...defaultMember, membership: "join" }; + const memberWithInviteMembership = { ...defaultMember, membership: Membership.Invite }; + const memberWithJoinMembership = { ...defaultMember, membership: Membership.Join }; let defaultProps: Parameters[0]; beforeEach(() => { @@ -1031,7 +1031,7 @@ describe("", () => { // null vs their member followed by // my member vs their member const mockMyMember = { powerLevel: 1 }; - const mockTheirMember = { membership: "invite", powerLevel: 0 }; + const mockTheirMember = { membership: Membership.Invite, powerLevel: 0 }; const mockRoom = { getMember: jest @@ -1052,7 +1052,7 @@ describe("", () => { describe("", () => { const defaultMember = new RoomMember(defaultRoomId, defaultUserId); - const memberWithBanMembership = { ...defaultMember, membership: "ban" }; + const memberWithBanMembership = { ...defaultMember, membership: Membership.Ban }; let defaultProps: Parameters[0]; beforeEach(() => { defaultProps = { @@ -1161,7 +1161,7 @@ describe("", () => { // null vs their member followed by // my member vs their member const mockMyMember = { powerLevel: 1 }; - const mockTheirMember = { membership: "ban", powerLevel: 0 }; + const mockTheirMember = { membership: Membership.Ban, powerLevel: 0 }; const mockRoom = { getMember: jest @@ -1182,7 +1182,7 @@ describe("", () => { describe("", () => { const defaultMember = new RoomMember(defaultRoomId, defaultUserId); - defaultMember.membership = "invite"; + defaultMember.membership = Membership.Invite; let defaultProps: Parameters[0]; beforeEach(() => { @@ -1245,7 +1245,11 @@ describe("", () => { mockMeMember.powerLevel = 51; // defaults to 50 mockRoom.getMember.mockReturnValueOnce(mockMeMember); - const defaultMemberWithPowerLevelAndJoinMembership = { ...defaultMember, powerLevel: 0, membership: "join" }; + const defaultMemberWithPowerLevelAndJoinMembership = { + ...defaultMember, + powerLevel: 0, + membership: Membership.Join, + }; renderComponent({ member: defaultMemberWithPowerLevelAndJoinMembership, @@ -1263,7 +1267,11 @@ describe("", () => { mockMeMember.powerLevel = 51; // defaults to 50 mockRoom.getMember.mockReturnValueOnce(mockMeMember); - const defaultMemberWithPowerLevelAndJoinMembership = { ...defaultMember, powerLevel: 0, membership: "join" }; + const defaultMemberWithPowerLevelAndJoinMembership = { + ...defaultMember, + powerLevel: 0, + membership: Membership.Join, + }; renderComponent({ member: defaultMemberWithPowerLevelAndJoinMembership, diff --git a/test/components/views/rooms/LegacyRoomHeader-test.tsx b/test/components/views/rooms/LegacyRoomHeader-test.tsx index 067059801a3..5244446b61e 100644 --- a/test/components/views/rooms/LegacyRoomHeader-test.tsx +++ b/test/components/views/rooms/LegacyRoomHeader-test.tsx @@ -906,7 +906,7 @@ function mkJoinEvent(roomId: string, userId: string) { room: roomId, user: userId, content: { - membership: "join", + membership: Membership.Join, avatar_url: "mxc://example.org/" + userId, }, }); diff --git a/test/components/views/rooms/MemberList-test.tsx b/test/components/views/rooms/MemberList-test.tsx index fe8f5e3314a..7a30e84dde6 100644 --- a/test/components/views/rooms/MemberList-test.tsx +++ b/test/components/views/rooms/MemberList-test.tsx @@ -170,7 +170,7 @@ describe("MemberList", () => { const usersPerLevel = 2; for (let i = 0; i < usersPerLevel; i++) { const adminUser = new RoomMember(memberListRoom.roomId, `@admin${i}:localhost`); - adminUser.membership = "join"; + adminUser.membership = Membership.Join; adminUser.powerLevel = 100; adminUser.user = User.createUser(adminUser.userId, client); adminUser.user.currentlyActive = true; @@ -180,7 +180,7 @@ describe("MemberList", () => { adminUsers.push(adminUser); const moderatorUser = new RoomMember(memberListRoom.roomId, `@moderator${i}:localhost`); - moderatorUser.membership = "join"; + moderatorUser.membership = Membership.Join; moderatorUser.powerLevel = 50; moderatorUser.user = User.createUser(moderatorUser.userId, client); moderatorUser.user.currentlyActive = true; @@ -190,7 +190,7 @@ describe("MemberList", () => { moderatorUsers.push(moderatorUser); const defaultUser = new RoomMember(memberListRoom.roomId, `@default${i}:localhost`); - defaultUser.membership = "join"; + defaultUser.membership = Membership.Join; defaultUser.powerLevel = 0; defaultUser.user = User.createUser(defaultUser.userId, client); defaultUser.user.currentlyActive = true; @@ -402,7 +402,7 @@ describe("MemberList", () => { }); it("renders disabled invite button when current user is a member but does not have rights to invite", async () => { - jest.spyOn(room, "getMyMembership").mockReturnValue("join"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); jest.spyOn(room, "canInvite").mockReturnValue(false); renderComponent(); @@ -413,7 +413,7 @@ describe("MemberList", () => { }); it("renders enabled invite button when current user is a member and has rights to invite", async () => { - jest.spyOn(room, "getMyMembership").mockReturnValue("join"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); jest.spyOn(room, "canInvite").mockReturnValue(true); renderComponent(); @@ -424,7 +424,7 @@ describe("MemberList", () => { it("opens room inviter on button click", async () => { jest.spyOn(defaultDispatcher, "dispatch"); - jest.spyOn(room, "getMyMembership").mockReturnValue("join"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); jest.spyOn(room, "canInvite").mockReturnValue(true); renderComponent(); diff --git a/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx b/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx index 8f884eeb9c8..51b3cb29c67 100644 --- a/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx +++ b/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx @@ -140,7 +140,7 @@ describe("UnreadNotificationBadge", () => { }); it("adds a warning for invites", () => { - room.updateMyMembership("invite"); + room.updateMyMembership(Membership.Invite); render(getComponent()); expect(screen.queryByText("!")).not.toBeNull(); }); diff --git a/test/components/views/rooms/RoomHeader-test.tsx b/test/components/views/rooms/RoomHeader-test.tsx index 427b68634a8..3a874f9301c 100644 --- a/test/components/views/rooms/RoomHeader-test.tsx +++ b/test/components/views/rooms/RoomHeader-test.tsx @@ -154,7 +154,7 @@ describe("RoomHeader", () => { name: "Member", rawDisplayName: "Member", roomId: room.roomId, - membership: "join", + membership: Membership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -172,7 +172,7 @@ describe("RoomHeader", () => { name: "Member", rawDisplayName: "Member", roomId: room.roomId, - membership: "join", + membership: Membership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -181,7 +181,7 @@ describe("RoomHeader", () => { name: "Member", rawDisplayName: "Member", roomId: room.roomId, - membership: "join", + membership: Membership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -190,7 +190,7 @@ describe("RoomHeader", () => { name: "Member", rawDisplayName: "Member", roomId: room.roomId, - membership: "join", + membership: Membership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -199,7 +199,7 @@ describe("RoomHeader", () => { name: "Bot user", rawDisplayName: "Bot user", roomId: room.roomId, - membership: "join", + membership: Membership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -703,7 +703,7 @@ function mockRoomMembers(room: Room, count: number) { name: `Member ${index}`, rawDisplayName: `Member ${index}`, roomId: room.roomId, - membership: "join", + membership: Membership.Join, getAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, getMxcAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, })); diff --git a/test/components/views/rooms/RoomKnocksBar-test.tsx b/test/components/views/rooms/RoomKnocksBar-test.tsx index 89a1863cbc2..a96b7600334 100644 --- a/test/components/views/rooms/RoomKnocksBar-test.tsx +++ b/test/components/views/rooms/RoomKnocksBar-test.tsx @@ -111,15 +111,26 @@ describe("RoomKnocksBar", () => { const other = new RoomMember(roomId, "@doe:example.org"); bob.setMembershipEvent( - new MatrixEvent({ content: { displayname: "Bob", membership: "knock" }, type: EventType.RoomMember }), + new MatrixEvent({ + content: { displayname: "Bob", membership: Membership.Knock }, + type: EventType.RoomMember, + }), ); jane.setMembershipEvent( - new MatrixEvent({ content: { displayname: "Jane", membership: "knock" }, type: EventType.RoomMember }), + new MatrixEvent({ + content: { displayname: "Jane", membership: Membership.Knock }, + type: EventType.RoomMember, + }), ); john.setMembershipEvent( - new MatrixEvent({ content: { displayname: "John", membership: "knock" }, type: EventType.RoomMember }), + new MatrixEvent({ + content: { displayname: "John", membership: Membership.Knock }, + type: EventType.RoomMember, + }), + ); + other.setMembershipEvent( + new MatrixEvent({ content: { membership: Membership.Knock }, type: EventType.RoomMember }), ); - other.setMembershipEvent(new MatrixEvent({ content: { membership: "knock" }, type: EventType.RoomMember })); beforeEach(async () => { await clearAllModals(); @@ -178,7 +189,7 @@ describe("RoomKnocksBar", () => { it("renders a link to open the room settings people tab", () => { bob.setMembershipEvent( new MatrixEvent({ - content: { displayname: "Bob", membership: "knock", reason: "some reason" }, + content: { displayname: "Bob", membership: Membership.Knock, reason: "some reason" }, type: EventType.RoomMember, }), ); diff --git a/test/components/views/rooms/RoomPreviewBar-test.tsx b/test/components/views/rooms/RoomPreviewBar-test.tsx index 3a52cf290e2..a047a80c8d8 100644 --- a/test/components/views/rooms/RoomPreviewBar-test.tsx +++ b/test/components/views/rooms/RoomPreviewBar-test.tsx @@ -49,10 +49,10 @@ const makeMockRoomMember = ({ }: { userId?: string; isKicked?: boolean; - membership?: "invite" | "ban" | "leave"; + membership?: Membership.Invite | Membership.Ban | Membership.Leave; content?: Partial; memberContent?: Partial; - oldMembership?: "join" | "knock"; + oldMembership?: Membership.Join | Membership.Knock; }) => ({ userId, @@ -180,7 +180,7 @@ describe("", () => { it("renders denied request message", () => { const room = createRoom(roomId, otherUserId); jest.spyOn(room, "getMember").mockReturnValue( - makeMockRoomMember({ isKicked: true, membership: "leave", oldMembership: "knock" }), + makeMockRoomMember({ isKicked: true, membership: Membership.Leave, oldMembership: Membership.Knock }), ); const component = getComponent({ room, promptAskToJoin: true }); @@ -191,7 +191,7 @@ describe("", () => { const onForgetClick = jest.fn(); const room = createRoom(roomId, otherUserId); jest.spyOn(room, "getMember").mockReturnValue( - makeMockRoomMember({ isKicked: true, membership: "leave", oldMembership: "knock" }), + makeMockRoomMember({ isKicked: true, membership: Membership.Leave, oldMembership: Membership.Knock }), ); const component = getComponent({ room, promptAskToJoin: true, onForgetClick }); @@ -201,7 +201,7 @@ describe("", () => { it("renders banned message", () => { const room = createRoom(roomId, otherUserId); - jest.spyOn(room, "getMember").mockReturnValue(makeMockRoomMember({ membership: "ban" })); + jest.spyOn(room, "getMember").mockReturnValue(makeMockRoomMember({ membership: Membership.Ban })); const component = getComponent({ loading: true, room }); expect(getMessage(component)).toMatchSnapshot(); @@ -244,8 +244,8 @@ describe("", () => { const userMember = makeMockRoomMember({ userId }); const userMemberWithDmInvite = makeMockRoomMember({ userId, - membership: "invite", - memberContent: { is_direct: true, membership: "invite" }, + membership: Membership.Invite, + memberContent: { is_direct: true, membership: Membership.Invite }, }); const inviterMember = makeMockRoomMember({ userId: inviterUserId, diff --git a/test/components/views/rooms/RoomPreviewCard-test.tsx b/test/components/views/rooms/RoomPreviewCard-test.tsx index c062497ec89..7422504c15a 100644 --- a/test/components/views/rooms/RoomPreviewCard-test.tsx +++ b/test/components/views/rooms/RoomPreviewCard-test.tsx @@ -68,7 +68,7 @@ describe("RoomPreviewCard", () => { it("shows a beta pill on Jitsi video room invites", async () => { jest.spyOn(room, "getType").mockReturnValue(RoomType.ElementVideo); - jest.spyOn(room, "getMyMembership").mockReturnValue("invite"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); enabledFeatures = ["feature_video_rooms"]; await renderPreview(); @@ -77,7 +77,7 @@ describe("RoomPreviewCard", () => { it("shows a beta pill on Element video room invites", async () => { jest.spyOn(room, "getType").mockReturnValue(RoomType.UnstableCall); - jest.spyOn(room, "getMyMembership").mockReturnValue("invite"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); enabledFeatures = ["feature_video_rooms", "feature_element_call_video_rooms"]; await renderPreview(); @@ -85,7 +85,7 @@ describe("RoomPreviewCard", () => { }); it("doesn't show a beta pill on normal invites", async () => { - jest.spyOn(room, "getMyMembership").mockReturnValue("invite"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); await renderPreview(); expect(screen.queryByRole("button", { name: /beta/i })).toBeNull(); @@ -93,7 +93,7 @@ describe("RoomPreviewCard", () => { it("shows instructions on Jitsi video rooms invites if video rooms are disabled", async () => { jest.spyOn(room, "getType").mockReturnValue(RoomType.ElementVideo); - jest.spyOn(room, "getMyMembership").mockReturnValue("invite"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); await renderPreview(); screen.getByText(/enable video rooms in labs/i); @@ -101,7 +101,7 @@ describe("RoomPreviewCard", () => { it("shows instructions on Element video rooms invites if video rooms are disabled", async () => { jest.spyOn(room, "getType").mockReturnValue(RoomType.UnstableCall); - jest.spyOn(room, "getMyMembership").mockReturnValue("invite"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); enabledFeatures = ["feature_element_call_video_rooms"]; await renderPreview(); diff --git a/test/components/views/rooms/RoomTile-test.tsx b/test/components/views/rooms/RoomTile-test.tsx index 3cf3b3fee5e..591f79faf8f 100644 --- a/test/components/views/rooms/RoomTile-test.tsx +++ b/test/components/views/rooms/RoomTile-test.tsx @@ -187,7 +187,7 @@ describe("RoomTile", () => { return name === "feature_ask_to_join"; }); mocked(shouldShowComponent).mockReturnValue(true); - jest.spyOn(room, "getMyMembership").mockReturnValue("knock"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Knock); const { container } = renderRoomTile(); expect(container.querySelector(".mx_RoomTile_sticky")).toBeInTheDocument(); expect(screen.queryByRole("button", { name: "Room options" })).not.toBeInTheDocument(); @@ -198,9 +198,15 @@ describe("RoomTile", () => { return name === "feature_ask_to_join"; }); mocked(shouldShowComponent).mockReturnValue(true); - const roomMember = mkRoomMember(room.roomId, MatrixClientPeg.get()!.getSafeUserId(), "leave", true, { - membership: "knock", - }); + const roomMember = mkRoomMember( + room.roomId, + MatrixClientPeg.get()!.getSafeUserId(), + Membership.Leave, + true, + { + membership: Membership.Knock, + }, + ); jest.spyOn(room, "getMember").mockReturnValue(roomMember); const { container } = renderRoomTile(); expect(container.querySelector(".mx_RoomTile_sticky")).toBeInTheDocument(); diff --git a/test/components/views/settings/JoinRuleSettings-test.tsx b/test/components/views/settings/JoinRuleSettings-test.tsx index 636c2ffd953..ab8e029d67b 100644 --- a/test/components/views/settings/JoinRuleSettings-test.tsx +++ b/test/components/views/settings/JoinRuleSettings-test.tsx @@ -177,7 +177,7 @@ describe("", () => { const memberBob = new RoomMember(roomId, "@bob:server.org"); const memberCharlie = new RoomMember(roomId, "@charlie:server.org"); jest.spyOn(room, "getMembersWithMembership").mockImplementation((membership) => - membership === "join" ? [memberAlice, memberBob] : [memberCharlie], + membership === Membership.Join ? [memberAlice, memberBob] : [memberCharlie], ); const upgradedRoom = new Room(newRoomId, client, userId); setRoomStateEvents(upgradedRoom, preferredRoomVersion); diff --git a/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx b/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx index 6c9051c0afc..9ddb8b10227 100644 --- a/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx +++ b/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx @@ -91,7 +91,7 @@ describe("PeopleRoomSettingsTab", () => { content: { avatar_url: "mxc://example.org/albert-einstein.png", displayname: "Albert Einstein", - membership: "knock", + membership: Membership.Knock, reason, }, origin_server_ts: -464140800000, @@ -110,7 +110,7 @@ describe("PeopleRoomSettingsTab", () => { new MatrixEvent({ content: { displayname: "albert.einstein", - membership: "knock", + membership: Membership.Knock, }, type: EventType.RoomMember, }), @@ -138,7 +138,7 @@ describe("PeopleRoomSettingsTab", () => { new MatrixEvent({ content: { displayname: "albert.einstein", - membership: "knock", + membership: Membership.Knock, reason, }, type: EventType.RoomMember, diff --git a/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx b/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx index f121f6f045b..643d24b391a 100644 --- a/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx +++ b/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx @@ -197,7 +197,7 @@ describe("RolesRoomSettingsTab", () => { new MatrixEvent({ type: EventType.RoomMember, content: { - membership: "ban", + membership: Membership.Ban, reason: "just testing", }, sender: userId, @@ -218,7 +218,7 @@ describe("RolesRoomSettingsTab", () => { new MatrixEvent({ type: EventType.RoomMember, content: { - membership: "ban", + membership: Membership.Ban, reason: "just testing", }, sender: userId, diff --git a/test/hooks/useRoomMembers-test.tsx b/test/hooks/useRoomMembers-test.tsx index 934f318391f..980bb14dd1c 100644 --- a/test/hooks/useRoomMembers-test.tsx +++ b/test/hooks/useRoomMembers-test.tsx @@ -49,7 +49,7 @@ describe("useRoomMembers", () => { state_key: "!user:server", room_id: room.roomId, content: { - membership: "join", + membership: Membership.Join, }, }), ]); @@ -85,7 +85,7 @@ describe("useRoomMemberCount", () => { state_key: "!user:server", room_id: room.roomId, content: { - membership: "join", + membership: Membership.Join, }, }), ]); @@ -109,14 +109,14 @@ describe("useMyRoomMembership", () => { }); it("should update on RoomState.Members events", async () => { - room.updateMyMembership("join"); + room.updateMyMembership(Membership.Join); const { result } = render(room); - expect(result.current).toBe("join"); + expect(result.current).toBe(Membership.Join); act(() => { - room.updateMyMembership("leave"); + room.updateMyMembership(Membership.Leave); }); - await waitFor(() => expect(result.current).toBe("leave")); + await waitFor(() => expect(result.current).toBe(Membership.Leave)); }); }); diff --git a/test/hooks/useUnreadNotifications-test.ts b/test/hooks/useUnreadNotifications-test.ts index 504dbfddb1c..6a7114995dc 100644 --- a/test/hooks/useUnreadNotifications-test.ts +++ b/test/hooks/useUnreadNotifications-test.ts @@ -66,7 +66,7 @@ describe("useUnreadNotifications", () => { }); it("indicates the user has been invited to a channel", async () => { - room.updateMyMembership("invite"); + room.updateMyMembership(Membership.Invite); const { result } = renderHook(() => useUnreadNotifications(room)); const { level, symbol, count } = result.current; diff --git a/test/models/Call-test.ts b/test/models/Call-test.ts index 1ebdfff5a56..a5031be52aa 100644 --- a/test/models/Call-test.ts +++ b/test/models/Call-test.ts @@ -95,7 +95,7 @@ const setUpClientRoomAndStores = (): { } }); - jest.spyOn(room, "getMyMembership").mockReturnValue("join"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); client.getRoom.mockImplementation((roomId) => (roomId === room.roomId ? room : null)); client.getRoom.mockImplementation((roomId) => (roomId === room.roomId ? room : null)); @@ -380,7 +380,7 @@ describe("JitsiCall", () => { it("disconnects when we leave the room", async () => { await call.start(); expect(call.connectionState).toBe(ConnectionState.Connected); - room.emit(RoomEvent.MyMembership, room, "leave"); + room.emit(RoomEvent.MyMembership, room, Membership.Leave); expect(call.connectionState).toBe(ConnectionState.Disconnected); }); @@ -395,7 +395,7 @@ describe("JitsiCall", () => { it("remains connected if we stay in the room", async () => { await call.start(); expect(call.connectionState).toBe(ConnectionState.Connected); - room.emit(RoomEvent.MyMembership, room, "join"); + room.emit(RoomEvent.MyMembership, room, Membership.Join); expect(call.connectionState).toBe(ConnectionState.Connected); }); @@ -911,14 +911,14 @@ describe("ElementCall", () => { it("disconnects when we leave the room", async () => { await callConnectProcedure(call); expect(call.connectionState).toBe(ConnectionState.Connected); - room.emit(RoomEvent.MyMembership, room, "leave"); + room.emit(RoomEvent.MyMembership, room, Membership.Leave); expect(call.connectionState).toBe(ConnectionState.Disconnected); }); it("remains connected if we stay in the room", async () => { await callConnectProcedure(call); expect(call.connectionState).toBe(ConnectionState.Connected); - room.emit(RoomEvent.MyMembership, room, "join"); + room.emit(RoomEvent.MyMembership, room, Membership.Join); expect(call.connectionState).toBe(ConnectionState.Connected); }); diff --git a/test/stores/MemberListStore-test.ts b/test/stores/MemberListStore-test.ts index a97b00ba0f6..97b8dfd3b04 100644 --- a/test/stores/MemberListStore-test.ts +++ b/test/stores/MemberListStore-test.ts @@ -55,7 +55,7 @@ describe("MemberListStore", () => { type: EventType.RoomMember, state_key: alice, content: { - membership: "join", + membership: Membership.Join, }, sender: alice, room_id: roomId, @@ -77,8 +77,8 @@ describe("MemberListStore", () => { }); it("loads members in a room", async () => { - addMember(room, bob, "invite"); - addMember(room, charlie, "leave"); + addMember(room, bob, Membership.Invite); + addMember(room, charlie, Membership.Leave); const { invited, joined } = await store.loadMemberList(roomId); expect(invited).toEqual([room.getMember(bob)]); @@ -92,8 +92,8 @@ describe("MemberListStore", () => { }); it("sorts by power level", async () => { - addMember(room, bob, "join"); - addMember(room, charlie, "join"); + addMember(room, bob, Membership.Join); + addMember(room, charlie, Membership.Join); setPowerLevels(room, { users: { [alice]: 100, @@ -109,8 +109,8 @@ describe("MemberListStore", () => { it("sorts by name if power level is equal", async () => { const doris = "@doris:bar"; - addMember(room, bob, "join"); - addMember(room, charlie, "join"); + addMember(room, bob, Membership.Join); + addMember(room, charlie, Membership.Join); setPowerLevels(room, { users_default: 10, }); @@ -120,7 +120,7 @@ describe("MemberListStore", () => { expect(joined).toEqual([room.getMember(alice), room.getMember(bob), room.getMember(charlie)]); // Ensure it sorts by display name if they are set - addMember(room, doris, "join", "AAAAA"); + addMember(room, doris, Membership.Join, "AAAAA"); ({ invited, joined } = await store.loadMemberList(roomId)); expect(invited).toEqual([]); expect(joined).toEqual([ @@ -134,15 +134,15 @@ describe("MemberListStore", () => { it("filters based on a search query", async () => { const mice = "@mice:bar"; const zorro = "@zorro:bar"; - addMember(room, bob, "join"); - addMember(room, mice, "join"); + addMember(room, bob, Membership.Join); + addMember(room, mice, Membership.Join); let { invited, joined } = await store.loadMemberList(roomId, "ice"); expect(invited).toEqual([]); expect(joined).toEqual([room.getMember(alice), room.getMember(mice)]); // Ensure it filters by display name if they are set - addMember(room, zorro, "join", "ice ice baby"); + addMember(room, zorro, Membership.Join, "ice ice baby"); ({ invited, joined } = await store.loadMemberList(roomId, "ice")); expect(invited).toEqual([]); expect(joined).toEqual([room.getMember(alice), room.getMember(zorro), room.getMember(mice)]); @@ -180,7 +180,7 @@ describe("MemberListStore", () => { type: EventType.RoomMember, state_key: bob, content: { - membership: "join", + membership: Membership.Join, displayname: "Bob", }, sender: bob, diff --git a/test/stores/OwnBeaconStore-test.ts b/test/stores/OwnBeaconStore-test.ts index 378ebfe94cd..57f3bc668b4 100644 --- a/test/stores/OwnBeaconStore-test.ts +++ b/test/stores/OwnBeaconStore-test.ts @@ -556,7 +556,7 @@ describe("OwnBeaconStore", () => { it("destroys and removes beacons when current user leaves room", async () => { // alice leaves room1 - const membershipEvent = makeMembershipEvent(room1Id, aliceId, "leave"); + const membershipEvent = makeMembershipEvent(room1Id, aliceId, Membership.Leave); const member = new RoomMember(room1Id, aliceId); member.setMembershipEvent(membershipEvent); diff --git a/test/stores/SpaceStore-test.ts b/test/stores/SpaceStore-test.ts index f13174066d4..e20fa4e64f0 100644 --- a/test/stores/SpaceStore-test.ts +++ b/test/stores/SpaceStore-test.ts @@ -57,13 +57,13 @@ const fav2 = "!fav2:server"; const fav3 = "!fav3:server"; const dm1 = "!dm1:server"; const dm1Partner = new RoomMember(dm1, "@dm1Partner:server"); -dm1Partner.membership = "join"; +dm1Partner.membership = Membership.Join; const dm2 = "!dm2:server"; const dm2Partner = new RoomMember(dm2, "@dm2Partner:server"); -dm2Partner.membership = "join"; +dm2Partner.membership = Membership.Join; const dm3 = "!dm3:server"; const dm3Partner = new RoomMember(dm3, "@dm3Partner:server"); -dm3Partner.membership = "join"; +dm3Partner.membership = Membership.Join; const orphan1 = "!orphan1:server"; const orphan2 = "!orphan2:server"; const invite1 = "!invite1:server"; @@ -289,7 +289,7 @@ describe("SpaceStore", () => { }); it("invite to a subspace is only shown at the top level", async () => { - mkSpace(invite1).getMyMembership.mockReturnValue("invite"); + mkSpace(invite1).getMyMembership.mockReturnValue(Membership.Invite); mkSpace(space1, [invite1]); await run(); @@ -335,20 +335,20 @@ describe("SpaceStore", () => { }); [invite1, invite2].forEach((roomId) => { - mocked(client.getRoom(roomId)!).getMyMembership.mockReturnValue("invite"); + mocked(client.getRoom(roomId)).getMyMembership.mockReturnValue(Membership.Invite); }); // have dmPartner1 be in space1 with you const mySpace1Member = new RoomMember(space1, testUserId); - mySpace1Member.membership = "join"; - (rooms.find((r) => r.roomId === space1)!.getMembers as jest.Mock).mockReturnValue([ + mySpace1Member.membership = Membership.Join; + (rooms.find((r) => r.roomId === space1).getMembers as jest.Mock).mockReturnValue([ mySpace1Member, dm1Partner, ]); // have dmPartner2 be in space2 with you const mySpace2Member = new RoomMember(space2, testUserId); - mySpace2Member.membership = "join"; - (rooms.find((r) => r.roomId === space2)!.getMembers as jest.Mock).mockReturnValue([ + mySpace2Member.membership = Membership.Join; + (rooms.find((r) => r.roomId === space2).getMembers as jest.Mock).mockReturnValue([ mySpace2Member, dm2Partner, ]); @@ -683,16 +683,16 @@ describe("SpaceStore", () => { it("should add new DM Invites to the People Space Notification State", async () => { mkRoom(dm1); - mocked(client.getRoom(dm1)!).getMyMembership.mockReturnValue("join"); + mocked(client.getRoom(dm1)!).getMyMembership.mockReturnValue(Membership.Join); mocked(client).getRoom.mockImplementation((roomId) => rooms.find((room) => room.roomId === roomId) || null); await run(); mkRoom(dm2); const cliDm2 = client.getRoom(dm2)!; - mocked(cliDm2).getMyMembership.mockReturnValue("invite"); + mocked(cliDm2).getMyMembership.mockReturnValue(Membership.Invite); mocked(client).getRoom.mockImplementation((roomId) => rooms.find((room) => room.roomId === roomId) || null); - client.emit(RoomEvent.MyMembership, cliDm2, "invite"); + client.emit(RoomEvent.MyMembership, cliDm2, Membership.Invite); [dm1, dm2].forEach((d) => { expect( @@ -721,9 +721,9 @@ describe("SpaceStore", () => { await run(); expect(store.spacePanelSpaces).toStrictEqual([space]); - space.getMyMembership.mockReturnValue("leave"); + space.getMyMembership.mockReturnValue(Membership.Leave); const prom = testUtils.emitPromise(store, UPDATE_TOP_LEVEL_SPACES); - client.emit(RoomEvent.MyMembership, space, "leave", "join"); + client.emit(RoomEvent.MyMembership, space, Membership.Leave, Membership.Join); await prom; expect(store.spacePanelSpaces).toStrictEqual([]); }); @@ -733,7 +733,7 @@ describe("SpaceStore", () => { expect(store.spacePanelSpaces).toStrictEqual([]); expect(store.invitedSpaces).toStrictEqual([]); const space = mkSpace(space1); - space.getMyMembership.mockReturnValue("invite"); + space.getMyMembership.mockReturnValue(Membership.Invite); const prom = testUtils.emitPromise(store, UPDATE_INVITED_SPACES); client.emit(ClientEvent.Room, space); await prom; @@ -743,14 +743,14 @@ describe("SpaceStore", () => { it("updates state when space invite is accepted", async () => { const space = mkSpace(space1); - space.getMyMembership.mockReturnValue("invite"); + space.getMyMembership.mockReturnValue(Membership.Invite); await run(); expect(store.spacePanelSpaces).toStrictEqual([]); expect(store.invitedSpaces).toStrictEqual([space]); - space.getMyMembership.mockReturnValue("join"); + space.getMyMembership.mockReturnValue(Membership.Join); const prom = testUtils.emitPromise(store, UPDATE_TOP_LEVEL_SPACES); - client.emit(RoomEvent.MyMembership, space, "join", "invite"); + client.emit(RoomEvent.MyMembership, space, Membership.Join, Membership.Invite); await prom; expect(store.spacePanelSpaces).toStrictEqual([space]); expect(store.invitedSpaces).toStrictEqual([]); @@ -758,14 +758,14 @@ describe("SpaceStore", () => { it("updates state when space invite is rejected", async () => { const space = mkSpace(space1); - space.getMyMembership.mockReturnValue("invite"); + space.getMyMembership.mockReturnValue(Membership.Invite); await run(); expect(store.spacePanelSpaces).toStrictEqual([]); expect(store.invitedSpaces).toStrictEqual([space]); - space.getMyMembership.mockReturnValue("leave"); + space.getMyMembership.mockReturnValue(Membership.Leave); const prom = testUtils.emitPromise(store, UPDATE_INVITED_SPACES); - client.emit(RoomEvent.MyMembership, space, "leave", "invite"); + client.emit(RoomEvent.MyMembership, space, Membership.Leave, Membership.Invite); await prom; expect(store.spacePanelSpaces).toStrictEqual([]); expect(store.invitedSpaces).toStrictEqual([]); @@ -783,7 +783,7 @@ describe("SpaceStore", () => { expect(store.isRoomInSpace(MetaSpace.Home, invite1)).toBeFalsy(); const invite = mkRoom(invite1); - invite.getMyMembership.mockReturnValue("invite"); + invite.getMyMembership.mockReturnValue(Membership.Invite); const prom = testUtils.emitPromise(store, space1); client.emit(ClientEvent.Room, space); await prom; @@ -845,7 +845,7 @@ describe("SpaceStore", () => { room: spaceId, user: client.getUserId()!, skey: user.userId, - content: { membership: "join" }, + content: { membership: Membership.Join }, ts: Date.now(), }); const spaceRoom = client.getRoom(spaceId)!; @@ -926,7 +926,7 @@ describe("SpaceStore", () => { beforeEach(async () => { mkRoom(room1); // not a space mkSpace(space1, [mkSpace(space2).roomId]); - mkSpace(space3).getMyMembership.mockReturnValue("invite"); + mkSpace(space3).getMyMembership.mockReturnValue(Membership.Invite); await run(); store.setActiveSpace(MetaSpace.Home); expect(store.activeSpace).toBe(MetaSpace.Home); @@ -986,7 +986,7 @@ describe("SpaceStore", () => { const event = mkEvent({ event: true, type: EventType.RoomMember, - content: { membership: "join" }, + content: { membership: Membership.Join }, skey: dm1Partner.userId, user: dm1Partner.userId, room: space1, @@ -994,7 +994,7 @@ describe("SpaceStore", () => { space.getMember.mockImplementation((userId) => { if (userId === dm1Partner.userId) { const member = new RoomMember(space1, dm1Partner.userId); - member.membership = "join"; + member.membership = Membership.Join; return member; } return null; @@ -1249,15 +1249,15 @@ describe("SpaceStore", () => { // receive invite to space const rootSpace = mkSpace(space1, [room1, room2, space2]); - rootSpace.getMyMembership.mockReturnValue("invite"); + rootSpace.getMyMembership.mockReturnValue(Membership.Invite); client.emit(ClientEvent.Room, rootSpace); jest.runOnlyPendingTimers(); expect(SpaceStore.instance.invitedSpaces).toStrictEqual([rootSpace]); expect(SpaceStore.instance.spacePanelSpaces).toStrictEqual([]); // accept invite to space - rootSpace.getMyMembership.mockReturnValue("join"); - client.emit(RoomEvent.MyMembership, rootSpace, "join", "invite"); + rootSpace.getMyMembership.mockReturnValue(Membership.Join); + client.emit(RoomEvent.MyMembership, rootSpace, Membership.Join, Membership.Invite); jest.runOnlyPendingTimers(); expect(SpaceStore.instance.invitedSpaces).toStrictEqual([]); expect(SpaceStore.instance.spacePanelSpaces).toStrictEqual([rootSpace]); @@ -1265,7 +1265,7 @@ describe("SpaceStore", () => { // join room in space expect(SpaceStore.instance.isRoomInSpace(space1, room1)).toBeFalsy(); const rootSpaceRoom1 = mkRoom(room1); - rootSpaceRoom1.getMyMembership.mockReturnValue("join"); + rootSpaceRoom1.getMyMembership.mockReturnValue(Membership.Join); client.emit(ClientEvent.Room, rootSpaceRoom1); jest.runOnlyPendingTimers(); expect(SpaceStore.instance.invitedSpaces).toStrictEqual([]); @@ -1279,7 +1279,7 @@ describe("SpaceStore", () => { // receive room invite expect(SpaceStore.instance.isRoomInSpace(space1, room2)).toBeFalsy(); const rootSpaceRoom2 = mkRoom(room2); - rootSpaceRoom2.getMyMembership.mockReturnValue("invite"); + rootSpaceRoom2.getMyMembership.mockReturnValue(Membership.Invite); client.emit(ClientEvent.Room, rootSpaceRoom2); jest.runOnlyPendingTimers(); expect(SpaceStore.instance.invitedSpaces).toStrictEqual([]); @@ -1292,9 +1292,9 @@ describe("SpaceStore", () => { // start DM in space const myRootSpaceMember = new RoomMember(space1, testUserId); - myRootSpaceMember.membership = "join"; + myRootSpaceMember.membership = Membership.Join; const rootSpaceFriend = new RoomMember(space1, dm1Partner.userId); - rootSpaceFriend.membership = "join"; + rootSpaceFriend.membership = Membership.Join; rootSpace.getMembers.mockReturnValue([myRootSpaceMember, rootSpaceFriend]); rootSpace.getMember.mockImplementation((userId) => { switch (userId) { @@ -1310,7 +1310,7 @@ describe("SpaceStore", () => { event: true, type: EventType.RoomMember, content: { - membership: "join", + membership: Membership.Join, }, skey: dm1Partner.userId, user: dm1Partner.userId, @@ -1320,7 +1320,7 @@ describe("SpaceStore", () => { jest.runOnlyPendingTimers(); expect(SpaceStore.instance.getSpaceFilteredUserIds(space1)!.has(dm1Partner.userId)).toBeTruthy(); const dm1Room = mkRoom(dm1); - dm1Room.getMyMembership.mockReturnValue("join"); + dm1Room.getMyMembership.mockReturnValue(Membership.Join); client.emit(ClientEvent.Room, dm1Room); jest.runOnlyPendingTimers(); expect(SpaceStore.instance.invitedSpaces).toStrictEqual([]); @@ -1333,7 +1333,7 @@ describe("SpaceStore", () => { // join subspace const subspace = mkSpace(space2); - subspace.getMyMembership.mockReturnValue("join"); + subspace.getMyMembership.mockReturnValue(Membership.Join); const prom = testUtils.emitPromise(SpaceStore.instance, space1); client.emit(ClientEvent.Room, subspace); jest.runOnlyPendingTimers(); diff --git a/test/stores/notifications/RoomNotificationState-test.ts b/test/stores/notifications/RoomNotificationState-test.ts index 1e124d15272..e94a84ac048 100644 --- a/test/stores/notifications/RoomNotificationState-test.ts +++ b/test/stores/notifications/RoomNotificationState-test.ts @@ -119,7 +119,7 @@ describe("RoomNotificationState", () => { muteRoom(room); setUnreads(room, 1234, 0); - room.updateMyMembership("join"); // emit + room.updateMyMembership(Membership.Join); // emit expect(roomNotifState.level).toBe(NotificationLevel.None); expect(roomNotifState.symbol).toBe(null); @@ -129,7 +129,7 @@ describe("RoomNotificationState", () => { it("suggests a red ! if the user has been invited to a room", () => { const roomNotifState = new RoomNotificationState(room, false); - room.updateMyMembership("invite"); // emit + room.updateMyMembership(Membership.Invite); // emit expect(roomNotifState.level).toBe(NotificationLevel.Highlight); expect(roomNotifState.symbol).toBe("!"); @@ -140,7 +140,7 @@ describe("RoomNotificationState", () => { const roomNotifState = new RoomNotificationState(room, false); setUnreads(room, 4321, 0); - room.updateMyMembership("join"); // emit + room.updateMyMembership(Membership.Join); // emit expect(roomNotifState.level).toBe(NotificationLevel.Notification); expect(roomNotifState.symbol).toBe(null); @@ -151,7 +151,7 @@ describe("RoomNotificationState", () => { const roomNotifState = new RoomNotificationState(room, false); setUnreads(room, 0, 69); - room.updateMyMembership("join"); // emit + room.updateMyMembership(Membership.Join); // emit expect(roomNotifState.level).toBe(NotificationLevel.Highlight); expect(roomNotifState.symbol).toBe(null); @@ -171,7 +171,7 @@ describe("RoomNotificationState", () => { ); addThread(room); - room.updateMyMembership("join"); // emit + room.updateMyMembership(Membership.Join); // emit expect(roomNotifState.level).toBe(NotificationLevel.Activity); expect(roomNotifState.symbol).toBe(null); diff --git a/test/stores/room-list/RoomListStore-test.ts b/test/stores/room-list/RoomListStore-test.ts index 4c00ac11b66..4057cb13367 100644 --- a/test/stores/room-list/RoomListStore-test.ts +++ b/test/stores/room-list/RoomListStore-test.ts @@ -123,8 +123,8 @@ describe("RoomListStore", () => { // When we tell it we joined a new room that has an old room as // predecessor in the create event const payload = { - oldMembership: "invite", - membership: "join", + oldMembership: Membership.Invite, + membership: Membership.Join, room: roomWithCreatePredecessor, }; store.onDispatchMyMembership(payload); @@ -142,8 +142,8 @@ describe("RoomListStore", () => { // When we tell it we joined a new room with no predecessor const payload = { - oldMembership: "invite", - membership: "join", + oldMembership: Membership.Invite, + membership: Membership.Join, room: roomNoPredecessor, }; store.onDispatchMyMembership(payload); @@ -159,9 +159,9 @@ describe("RoomListStore", () => { const room1 = new Room("!r1:e.com", client, userId, { pendingEventOrdering: PendingEventOrdering.Detached }); const room2 = new Room("!r2:e.com", client, userId, { pendingEventOrdering: PendingEventOrdering.Detached }); const room3 = new Room("!r3:e.com", client, userId, { pendingEventOrdering: PendingEventOrdering.Detached }); - room1.updateMyMembership("join"); - room2.updateMyMembership("join"); - room3.updateMyMembership("join"); + room1.updateMyMembership(Membership.Join); + room2.updateMyMembership(Membership.Join); + room3.updateMyMembership(Membership.Join); DMRoomMap.makeShared(client); const { store } = createStore(); client.getVisibleRooms = jest.fn().mockReturnValue([room1, room2, room3]); @@ -259,8 +259,8 @@ describe("RoomListStore", () => { // When we tell it we joined a new room that has an old room as // predecessor in the create event const payload = { - oldMembership: "invite", - membership: "join", + oldMembership: Membership.Invite, + membership: Membership.Join, room: roomWithPredecessorEvent, }; store.onDispatchMyMembership(payload); diff --git a/test/stores/room-list/algorithms/Algorithm-test.ts b/test/stores/room-list/algorithms/Algorithm-test.ts index 1fd9d3868e2..315c3690e0f 100644 --- a/test/stores/room-list/algorithms/Algorithm-test.ts +++ b/test/stores/room-list/algorithms/Algorithm-test.ts @@ -82,7 +82,7 @@ describe("Algorithm", () => { client.reEmitter.reEmit(room, [RoomStateEvent.Events]); client.reEmitter.reEmit(roomWithCall, [RoomStateEvent.Events]); - for (const room of client.getRooms()) jest.spyOn(room, "getMyMembership").mockReturnValue("join"); + for (const room of client.getRooms()) jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); algorithm.setKnownRooms(client.getRooms()); setupAsyncStoreWithClient(CallStore.instance, client); diff --git a/test/stores/room-list/algorithms/RecentAlgorithm-test.ts b/test/stores/room-list/algorithms/RecentAlgorithm-test.ts index a58254ca6e1..227cdbb0e8d 100644 --- a/test/stores/room-list/algorithms/RecentAlgorithm-test.ts +++ b/test/stores/room-list/algorithms/RecentAlgorithm-test.ts @@ -53,7 +53,7 @@ describe("RecentAlgorithm", () => { event: true, }); - room.getMyMembership = () => "join"; + room.getMyMembership = () => Membership.Join; room.addLiveEvents([event1]); expect(algorithm.getLastTs(room, "@jane:matrix.org")).toBe(5); @@ -74,7 +74,7 @@ describe("RecentAlgorithm", () => { it("works when not a member", () => { const room = mkRoom(cli, "!new:example.org"); - room.getMyMembership.mockReturnValue(EffectiveMembership.Invite); + room.getMyMembership.mockReturnValue(Membership.Invite); expect(algorithm.getLastTs(room, "@john:matrix.org")).toBe(Number.MAX_SAFE_INTEGER); }); }); @@ -84,8 +84,8 @@ describe("RecentAlgorithm", () => { const room1 = new Room("room1", cli, "@bob:matrix.org"); const room2 = new Room("room2", cli, "@bob:matrix.org"); - room1.getMyMembership = () => "join"; - room2.getMyMembership = () => "join"; + room1.getMyMembership = () => Membership.Join; + room2.getMyMembership = () => Membership.Join; const evt = mkMessage({ room: room1.roomId, @@ -112,8 +112,8 @@ describe("RecentAlgorithm", () => { const room1 = new Room("room1", cli, "@bob:matrix.org"); const room2 = new Room("room2", cli, "@bob:matrix.org"); - room1.getMyMembership = () => "join"; - room2.getMyMembership = () => "join"; + room1.getMyMembership = () => Membership.Join; + room2.getMyMembership = () => Membership.Join; const evt = mkMessage({ room: room1.roomId, @@ -142,8 +142,8 @@ describe("RecentAlgorithm", () => { const room1 = new Room("room1", cli, "@bob:matrix.org"); const room2 = new Room("room2", cli, "@bob:matrix.org"); - room1.getMyMembership = () => "join"; - room2.getMyMembership = () => "join"; + room1.getMyMembership = () => Membership.Join; + room2.getMyMembership = () => Membership.Join; const { rootEvent, events: events1 } = mkThread({ room: room1, diff --git a/test/test-utils/room.ts b/test/test-utils/room.ts index 5d188fb0b64..4d533e174af 100644 --- a/test/test-utils/room.ts +++ b/test/test-utils/room.ts @@ -22,7 +22,7 @@ import { TimelineRenderingType } from "../../src/contexts/RoomContext"; import { Layout } from "../../src/settings/enums/Layout"; import { mkEvent } from "./test-utils"; -export const makeMembershipEvent = (roomId: string, userId: string, membership = "join") => +export const makeMembershipEvent = (roomId: string, userId: string, membership = Membership.Join) => mkEvent({ event: true, type: EventType.RoomMember, diff --git a/test/test-utils/test-utils.ts b/test/test-utils/test-utils.ts index 94ec448826b..1c9e3e499cb 100644 --- a/test/test-utils/test-utils.ts +++ b/test/test-utils/test-utils.ts @@ -391,7 +391,7 @@ export function mkEvent(opts: MakeEventProps): MatrixEvent { if (!mxEvent.sender && opts.user && opts.room) { mxEvent.sender = { userId: opts.user, - membership: "join", + membership: Membership.Join, name: opts.user, rawDisplayName: opts.user, roomId: opts.room, @@ -465,8 +465,8 @@ export async function mkEncryptedEvent(opts: { export function mkMembership( opts: MakeEventPassThruProps & { room: Room["roomId"]; - mship: string; - prevMship?: string; + mship: Membership; + prevMship?: Membership; name?: string; url?: string; skey?: string; @@ -506,7 +506,7 @@ export function mkMembership( export function mkRoomMember( roomId: string, userId: string, - membership = "join", + membership = Membership.Join, isKicked = false, prevMemberContent: Partial = {}, ): RoomMember { @@ -654,7 +654,7 @@ export function mkStubRoom( getMembers: jest.fn().mockReturnValue([]), getMembersWithMembership: jest.fn().mockReturnValue([]), getMxcAvatarUrl: () => "mxc://avatar.url/room.png", - getMyMembership: jest.fn().mockReturnValue("join"), + getMyMembership: jest.fn().mockReturnValue(Membership.Join), getPendingEvents: () => [] as MatrixEvent[], getReceiptsForEvent: jest.fn().mockReturnValue([]), getRecommendedVersion: jest.fn().mockReturnValue(Promise.resolve("")), @@ -794,7 +794,7 @@ export const mkRoomMemberJoinEvent = (user: string, room: string, content?: ICon event: true, type: EventType.RoomMember, content: { - membership: "join", + membership: Membership.Join, ...content, }, skey: user, diff --git a/test/utils/MultiInviter-test.ts b/test/utils/MultiInviter-test.ts index 55c40b34e9c..e61a3faac64 100644 --- a/test/utils/MultiInviter-test.ts +++ b/test/utils/MultiInviter-test.ts @@ -168,10 +168,10 @@ describe("MultiInviter", () => { const room = new Room(ROOMID, client, client.getSafeUserId()); mocked(client.getRoom).mockReturnValue(room); const ourMember = new RoomMember(ROOMID, client.getSafeUserId()); - ourMember.membership = "join"; + ourMember.membership = Membership.Join; ourMember.powerLevel = 100; const member = new RoomMember(ROOMID, MXID1); - member.membership = "ban"; + member.membership = Membership.Ban; member.powerLevel = 0; room.getMember = (userId: string) => { if (userId === client.getSafeUserId()) return ourMember; diff --git a/test/utils/direct-messages-test.ts b/test/utils/direct-messages-test.ts index 3e697fb4594..529fa547a15 100644 --- a/test/utils/direct-messages-test.ts +++ b/test/utils/direct-messages-test.ts @@ -86,7 +86,7 @@ describe("direct-messages", () => { }); room1 = new Room("!room1:example.com", mockClient, userId1); - room1.getMyMembership = () => "join"; + room1.getMyMembership = () => Membership.Join; localRoom = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test", mockClient, userId1); diff --git a/test/utils/dm/createDmLocalRoom-test.ts b/test/utils/dm/createDmLocalRoom-test.ts index dc0bcab555f..dec7cb98e79 100644 --- a/test/utils/dm/createDmLocalRoom-test.ts +++ b/test/utils/dm/createDmLocalRoom-test.ts @@ -37,16 +37,16 @@ function assertLocalRoom(room: LocalRoom, targets: Member[], encrypted: boolean) expect(room.name).toBe(targets.length ? targets[0].name : "Empty Room"); expect(room.encrypted).toBe(encrypted); expect(room.targets).toEqual(targets); - expect(room.getMyMembership()).toBe("join"); + expect(room.getMyMembership()).toBe(Membership.Join); const roomCreateEvent = room.currentState.getStateEvents(EventType.RoomCreate)[0]; expect(roomCreateEvent).toBeDefined(); expect(roomCreateEvent.getContent()["room_version"]).toBe(KNOWN_SAFE_ROOM_VERSION); // check that the user and all targets are joined - expect(room.getMember("@userId:matrix.org")?.membership).toBe("join"); + expect(room.getMember("@userId:matrix.org").membership).toBe(Membership.Join); targets.forEach((target: Member) => { - expect(room.getMember(target.userId)?.membership).toBe("join"); + expect(room.getMember(target.userId).membership).toBe(Membership.Join); }); if (encrypted) { diff --git a/test/utils/dm/findDMForUser-test.ts b/test/utils/dm/findDMForUser-test.ts index 72a7764df66..75b3e001d76 100644 --- a/test/utils/dm/findDMForUser-test.ts +++ b/test/utils/dm/findDMForUser-test.ts @@ -51,32 +51,32 @@ describe("findDMForUser", () => { mocked(getFunctionalMembers).mockReturnValue([botId]); room1 = new Room("!room1:example.com", mockClient, userId1); - room1.getMyMembership = () => "join"; + room1.getMyMembership = () => Membership.Join; room1.currentState.setStateEvents([ - makeMembershipEvent(room1.roomId, userId1, "join"), - makeMembershipEvent(room1.roomId, userId2, "join"), + makeMembershipEvent(room1.roomId, userId1, Membership.Join), + makeMembershipEvent(room1.roomId, userId2, Membership.Join), ]); // this should not be a DM room because it is a local room room2 = new LocalRoom("!room2:example.com", mockClient, userId1); - room2.getMyMembership = () => "join"; + room2.getMyMembership = () => Membership.Join; room2.getLastActiveTimestamp = () => 100; room3 = new Room("!room3:example.com", mockClient, userId1); - room3.getMyMembership = () => "join"; + room3.getMyMembership = () => Membership.Join; room3.currentState.setStateEvents([ - makeMembershipEvent(room3.roomId, userId1, "join"), - makeMembershipEvent(room3.roomId, userId2, "join"), + makeMembershipEvent(room3.roomId, userId1, Membership.Join), + makeMembershipEvent(room3.roomId, userId2, Membership.Join), // Adding the bot user here. Should be excluded when determining if the room is a DM. - makeMembershipEvent(room3.roomId, botId, "join"), + makeMembershipEvent(room3.roomId, botId, Membership.Join), ]); // this should not be a DM room because it has only one joined user room4 = new Room("!room4:example.com", mockClient, userId1); - room4.getMyMembership = () => "join"; + room4.getMyMembership = () => Membership.Join; room4.currentState.setStateEvents([ - makeMembershipEvent(room4.roomId, userId1, "invite"), - makeMembershipEvent(room4.roomId, userId2, "join"), + makeMembershipEvent(room4.roomId, userId1, Membership.Invite), + makeMembershipEvent(room4.roomId, userId2, Membership.Join), ]); // this should not be a DM room because it has no users @@ -85,17 +85,17 @@ describe("findDMForUser", () => { // room not correctly stored in userId → room map; should be found by the "all rooms" fallback room6 = new Room("!room6:example.com", mockClient, userId1); - room6.getMyMembership = () => "join"; + room6.getMyMembership = () => Membership.Join; room6.currentState.setStateEvents([ - makeMembershipEvent(room6.roomId, userId1, "join"), - makeMembershipEvent(room6.roomId, userId3, "join"), + makeMembershipEvent(room6.roomId, userId1, Membership.Join), + makeMembershipEvent(room6.roomId, userId3, Membership.Join), ]); // room with pending third-party invite room7 = new Room("!room7:example.com", mockClient, userId1); - room7.getMyMembership = () => "join"; + room7.getMyMembership = () => Membership.Join; room7.currentState.setStateEvents([ - makeMembershipEvent(room7.roomId, userId1, "join"), + makeMembershipEvent(room7.roomId, userId1, Membership.Join), mkThirdPartyInviteEvent(thirdPartyId, "third-party", room7.roomId), ]); diff --git a/test/utils/export-test.tsx b/test/utils/export-test.tsx index 8565c42ef6d..64204af4235 100644 --- a/test/utils/export-test.tsx +++ b/test/utils/export-test.tsx @@ -201,8 +201,8 @@ describe("export", function () { getMxcAvatarUrl: () => "mxc://avatar.url/image.png", } as unknown as RoomMember, ts: ts0 + i * 1000, - mship: "join", - prevMship: "join", + mship: Membership.Join, + prevMship: Membership.Join, name: "A user", }), ); diff --git a/test/utils/local-room-test.ts b/test/utils/local-room-test.ts index 7aadef65a97..2ebc51e1794 100644 --- a/test/utils/local-room-test.ts +++ b/test/utils/local-room-test.ts @@ -36,7 +36,7 @@ describe("local-room", () => { beforeEach(() => { client = createTestClient(); room1 = new Room("!room1:example.com", client, userId1); - room1.getMyMembership = () => "join"; + room1.getMyMembership = () => Membership.Join; localRoom = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test", client, "@test:example.com"); mocked(client.getRoom).mockImplementation((roomId: string) => { if (roomId === localRoom.roomId) { diff --git a/test/utils/localRoom/isRoomReady-test.ts b/test/utils/localRoom/isRoomReady-test.ts index e317301e762..786104e4460 100644 --- a/test/utils/localRoom/isRoomReady-test.ts +++ b/test/utils/localRoom/isRoomReady-test.ts @@ -33,7 +33,7 @@ describe("isRoomReady", () => { beforeEach(() => { client = createTestClient(); room1 = new Room("!room1:example.com", client, userId1); - room1.getMyMembership = () => "join"; + room1.getMyMembership = () => Membership.Join; localRoom = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test", client, "@test:example.com"); }); @@ -70,8 +70,8 @@ describe("isRoomReady", () => { describe("and all members have been invited or joined", () => { beforeEach(() => { room1.currentState.setStateEvents([ - makeMembershipEvent(room1.roomId, userId1, "join"), - makeMembershipEvent(room1.roomId, userId2, "invite"), + makeMembershipEvent(room1.roomId, userId1, Membership.Join), + makeMembershipEvent(room1.roomId, userId2, Membership.Invite), ]); }); diff --git a/test/utils/membership-test.ts b/test/utils/membership-test.ts index 3561625573e..24dedd8206d 100644 --- a/test/utils/membership-test.ts +++ b/test/utils/membership-test.ts @@ -31,16 +31,16 @@ describe("isKnockDenied", () => { }); it("checks that the user knock has been denied", () => { - const roomMember = mkRoomMember(room.roomId, userId, "leave", true, { membership: "knock" }); + const roomMember = mkRoomMember(room.roomId, userId, Membership.Leave, true, { membership: Membership.Knock }); jest.spyOn(room, "getMember").mockReturnValue(roomMember); expect(isKnockDenied(room)).toBe(true); }); it.each([ - { membership: "leave", isKicked: false, prevMembership: "invite" }, - { membership: "leave", isKicked: true, prevMembership: "invite" }, - { membership: "leave", isKicked: false, prevMembership: "join" }, - { membership: "leave", isKicked: true, prevMembership: "join" }, + { membership: Membership.Leave, isKicked: false, prevMembership: Membership.Invite }, + { membership: Membership.Leave, isKicked: true, prevMembership: Membership.Invite }, + { membership: Membership.Leave, isKicked: false, prevMembership: Membership.Join }, + { membership: Membership.Leave, isKicked: true, prevMembership: Membership.Join }, ])("checks that the user knock has been not denied", ({ membership, isKicked, prevMembership }) => { const roomMember = mkRoomMember(room.roomId, userId, membership, isKicked, { membership: prevMembership }); jest.spyOn(room, "getMember").mockReturnValue(roomMember); diff --git a/test/utils/permalinks/Permalinks-test.ts b/test/utils/permalinks/Permalinks-test.ts index 8e85aac02c7..be2e206055c 100644 --- a/test/utils/permalinks/Permalinks-test.ts +++ b/test/utils/permalinks/Permalinks-test.ts @@ -45,7 +45,7 @@ describe("Permalinks", function () { members: RoomMember[], serverACLContent?: { deny?: string[]; allow?: string[] }, ): Room { - members.forEach((m) => (m.membership = "join")); + members.forEach((m) => (m.membership = Membership.Join)); const powerLevelsUsers = members.reduce>((pl, member) => { if (Number.isFinite(member.powerLevel)) { pl[member.userId] = member.powerLevel; @@ -152,11 +152,11 @@ describe("Permalinks", function () { const creator = new RoomPermalinkCreator(room, null); creator.load(); expect(creator.serverCandidates![0]).toBe("pl_95"); - member95.membership = "left"; + member95.membership = Membership.Leave; // @ts-ignore illegal private property creator.onRoomStateUpdate(); expect(creator.serverCandidates![0]).toBe("pl_75"); - member95.membership = "join"; + member95.membership = Membership.Join; // @ts-ignore illegal private property creator.onRoomStateUpdate(); expect(creator.serverCandidates![0]).toBe("pl_95"); diff --git a/test/utils/room/canInviteTo-test.ts b/test/utils/room/canInviteTo-test.ts index c35202912ea..27c3660ca0e 100644 --- a/test/utils/room/canInviteTo-test.ts +++ b/test/utils/room/canInviteTo-test.ts @@ -39,7 +39,7 @@ describe("canInviteTo()", () => { ...mockClientMethodsUser(userId), }); const room = new Room(roomId, client, userId); - jest.spyOn(room, "getMyMembership").mockReturnValue("join"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); jest.spyOn(room, "getJoinRule").mockReturnValue(JoinRule.Public); jest.spyOn(room, "canInvite").mockReturnValue(true); return room; @@ -54,7 +54,7 @@ describe("canInviteTo()", () => { it("should return false when current user membership is not joined", () => { const room = makeRoom(); - jest.spyOn(room, "getMyMembership").mockReturnValue("invite"); + jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); expect(canInviteTo(room)).toEqual(false); }); From 34559d2a897fbeb06f890d2bf52590253a9216be Mon Sep 17 00:00:00 2001 From: Andy Balaam Date: Tue, 12 Mar 2024 14:52:54 +0000 Subject: [PATCH 030/235] Adapt Membership usage for the change to an enum KnownMembership --- playwright/e2e/crypto/crypto.spec.ts | 4 +- playwright/e2e/crypto/verification.spec.ts | 4 +- playwright/e2e/knock/knock-into-room.spec.ts | 13 +- playwright/e2e/knock/manage-knocks.spec.ts | 6 +- playwright/pages/bot.ts | 4 +- src/ScalarMessaging.ts | 9 +- src/SlashCommands.tsx | 13 +- src/TextForEvent.tsx | 19 +- src/VoipUserMapper.ts | 4 +- src/autocomplete/UserProvider.tsx | 3 +- src/components/structures/RoomView.tsx | 36 +-- src/components/structures/SpaceHierarchy.tsx | 7 +- src/components/structures/SpaceRoomView.tsx | 6 +- src/components/structures/TimelinePanel.tsx | 12 +- .../structures/grouper/CreationGrouper.tsx | 5 +- .../views/context_menus/RoomContextMenu.tsx | 4 +- .../dialogs/AddExistingToSpaceDialog.tsx | 6 +- .../views/dialogs/ForwardDialog.tsx | 3 +- src/components/views/dialogs/InviteDialog.tsx | 8 +- .../ManageRestrictedJoinRuleDialog.tsx | 4 +- .../views/dialogs/devtools/ServersInRoom.tsx | 4 +- .../dialogs/spotlight/SpotlightDialog.tsx | 5 +- src/components/views/elements/AppTile.tsx | 4 +- .../views/elements/EventListSummary.tsx | 18 +- .../views/elements/RoomFacePile.tsx | 4 +- .../views/right_panel/TimelineCard.tsx | 3 +- src/components/views/right_panel/UserInfo.tsx | 29 +- src/components/views/rooms/MemberList.tsx | 9 +- src/components/views/rooms/NewRoomIntro.tsx | 4 +- src/components/views/rooms/RoomInfoLine.tsx | 6 +- src/components/views/rooms/RoomKnocksBar.tsx | 4 +- src/components/views/rooms/RoomPreviewBar.tsx | 7 +- .../views/rooms/RoomPreviewCard.tsx | 8 +- src/components/views/rooms/RoomTile.tsx | 6 +- .../tabs/room/GeneralRoomSettingsTab.tsx | 4 +- .../tabs/room/PeopleRoomSettingsTab.tsx | 11 +- .../tabs/room/RolesRoomSettingsTab.tsx | 12 +- .../tabs/user/SecurityUserSettingsTab.tsx | 8 +- .../views/spaces/SpaceTreeLevel.tsx | 8 +- src/hooks/useRoomMembers.ts | 2 +- src/hooks/useSpaceResults.ts | 4 +- src/indexing/EventIndex.ts | 5 +- src/models/Call.ts | 8 +- src/shouldHideEvent.ts | 9 +- src/stores/BreadcrumbsStore.ts | 4 +- src/stores/MemberListStore.ts | 10 +- src/stores/OwnBeaconStore.ts | 3 +- src/stores/RoomViewStore.tsx | 4 +- .../notifications/RoomNotificationState.ts | 4 +- src/stores/room-list/RoomListStore.ts | 4 +- src/stores/room-list/algorithms/Algorithm.ts | 4 +- src/stores/spaces/SpaceStore.ts | 41 +-- src/stores/widgets/StopGapWidget.ts | 11 +- src/utils/DMRoomMap.ts | 4 +- src/utils/MultiInviter.ts | 12 +- src/utils/RoomUpgrade.ts | 6 +- src/utils/SortMembers.ts | 4 +- src/utils/WidgetUtils.ts | 11 +- src/utils/dm/createDmLocalRoom.ts | 16 +- src/utils/dm/findDMForUser.ts | 4 +- src/utils/membership.ts | 19 +- src/utils/permalinks/Permalinks.ts | 4 +- src/utils/room/canInviteTo.ts | 4 +- src/utils/space.tsx | 6 +- test/LegacyCallHandler-test.ts | 7 +- test/RoomNotifs-test.ts | 7 +- test/SlashCommands-test.tsx | 10 +- test/TextForEvent-test.ts | 5 +- .../structures/MessagePanel-test.tsx | 30 +-- test/components/structures/RoomView-test.tsx | 9 +- .../structures/SpaceHierarchy-test.tsx | 4 +- .../structures/TimelinePanel-test.tsx | 7 +- .../context_menus/RoomContextMenu-test.tsx | 4 +- .../RoomGeneralContextMenu-test.tsx | 6 +- .../dialogs/ConfirmUserActionDialog-test.tsx | 3 +- .../views/dialogs/InviteDialog-test.tsx | 4 +- .../views/dialogs/SpotlightDialog-test.tsx | 7 +- .../views/elements/EventListSummary-test.tsx | 254 +++++++++--------- .../views/elements/FacePile-test.tsx | 3 +- .../views/elements/RoomFacePile-test.tsx | 3 +- .../right_panel/RoomSummaryCard-test.tsx | 4 +- .../views/right_panel/UserInfo-test.tsx | 17 +- .../views/rooms/LegacyRoomHeader-test.tsx | 3 +- .../views/rooms/MemberList-test.tsx | 22 +- .../UnreadNotificationBadge-test.tsx | 3 +- .../views/rooms/RoomHeader-test.tsx | 13 +- .../views/rooms/RoomKnocksBar-test.tsx | 11 +- .../views/rooms/RoomPreviewBar-test.tsx | 24 +- .../views/rooms/RoomPreviewCard-test.tsx | 12 +- test/components/views/rooms/RoomTile-test.tsx | 7 +- .../views/settings/JoinRuleSettings-test.tsx | 3 +- .../tabs/room/PeopleRoomSettingsTab-test.tsx | 7 +- .../tabs/room/RolesRoomSettingsTab-test.tsx | 14 +- test/hooks/useRoomMembers-test.tsx | 14 +- test/hooks/useUnreadNotifications-test.ts | 10 +- test/models/Call-test.ts | 20 +- test/stores/MemberListStore-test.ts | 26 +- test/stores/OwnBeaconStore-test.ts | 3 +- test/stores/SpaceStore-test.ts | 73 ++--- .../RoomNotificationState-test.ts | 11 +- test/stores/room-list/RoomListStore-test.ts | 19 +- .../room-list/algorithms/Algorithm-test.ts | 4 +- .../algorithms/RecentAlgorithm-test.ts | 19 +- test/test-utils/room.ts | 4 +- test/test-utils/test-utils.ts | 11 +- test/utils/MultiInviter-test.ts | 14 +- test/utils/direct-messages-test.ts | 4 +- test/utils/dm/createDmLocalRoom-test.ts | 8 +- test/utils/dm/findDMForUser-test.ts | 34 +-- test/utils/export-test.tsx | 5 +- test/utils/local-room-test.ts | 4 +- test/utils/localRoom/isRoomReady-test.ts | 8 +- test/utils/membership-test.ts | 22 +- test/utils/permalinks/Permalinks-test.ts | 8 +- test/utils/room/canInviteTo-test.ts | 6 +- 115 files changed, 764 insertions(+), 593 deletions(-) diff --git a/playwright/e2e/crypto/crypto.spec.ts b/playwright/e2e/crypto/crypto.spec.ts index 3d7327b59de..9d9b461cb43 100644 --- a/playwright/e2e/crypto/crypto.spec.ts +++ b/playwright/e2e/crypto/crypto.spec.ts @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +import { KnownMembership } from "matrix-js-sdk/src/matrix"; + import type { Page } from "@playwright/test"; import { test, expect } from "../../element-web-test"; import { @@ -87,7 +89,7 @@ const bobJoin = async (page: Page, bob: Bot) => { async function autoJoin(client: Client) { await client.evaluate((cli) => { cli.on(window.matrixcs.RoomMemberEvent.Membership, (event, member) => { - if (member.membership === Membership.Invite && member.userId === cli.getUserId()) { + if (member.membership === KnownMembership.Invite && member.userId === cli.getUserId()) { cli.joinRoom(member.roomId); } }); diff --git a/playwright/e2e/crypto/verification.spec.ts b/playwright/e2e/crypto/verification.spec.ts index fdf01d82361..15f1fff68e5 100644 --- a/playwright/e2e/crypto/verification.spec.ts +++ b/playwright/e2e/crypto/verification.spec.ts @@ -15,9 +15,9 @@ limitations under the License. */ import jsQR from "jsqr"; +import { KnownMembership, type Preset, type Visibility } from "matrix-js-sdk/src/matrix"; import type { JSHandle, Locator, Page } from "@playwright/test"; -import type { Preset, Visibility } from "matrix-js-sdk/src/matrix"; import type { VerificationRequest, Verifier } from "matrix-js-sdk/src/crypto-api"; import { test, expect } from "../../element-web-test"; import { @@ -262,7 +262,7 @@ test.describe("User verification", () => { const bobVerificationRequest = await bob.evaluateHandle( async (client, { dmRoomId, aliceCredentials }) => { const room = client.getRoom(dmRoomId); - while (room.getMember(aliceCredentials.userId)?.membership !== Membership.Join) { + while (room.getMember(aliceCredentials.userId)?.membership !== KnownMembership.Join) { await new Promise((resolve) => { room.once(window.matrixcs.RoomStateEvent.Members, resolve); }); diff --git a/playwright/e2e/knock/knock-into-room.spec.ts b/playwright/e2e/knock/knock-into-room.spec.ts index 4931db65ccb..c6eff9d6eef 100644 --- a/playwright/e2e/knock/knock-into-room.spec.ts +++ b/playwright/e2e/knock/knock-into-room.spec.ts @@ -16,7 +16,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import type { Visibility } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, type Visibility } from "matrix-js-sdk/src/matrix"; + import { test, expect } from "../../element-web-test"; import { waitForRoom } from "../utils"; import { Filter } from "../../pages/Spotlight"; @@ -73,7 +74,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === Membership.Knock && + e.getContent()?.membership === KnownMembership.Knock && e.getContent()?.displayname === "Alice", ); }); @@ -108,7 +109,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === Membership.Knock && + e.getContent()?.membership === KnownMembership.Knock && e.getContent()?.displayname === "Alice", ); }); @@ -150,7 +151,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === Membership.Knock && + e.getContent()?.membership === KnownMembership.Knock && e.getContent()?.displayname === "Alice", ); }); @@ -192,7 +193,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === Membership.Knock && + e.getContent()?.membership === KnownMembership.Knock && e.getContent()?.displayname === "Alice", ); }); @@ -258,7 +259,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === Membership.Knock && + e.getContent()?.membership === KnownMembership.Knock && e.getContent()?.displayname === "Alice", ); }); diff --git a/playwright/e2e/knock/manage-knocks.spec.ts b/playwright/e2e/knock/manage-knocks.spec.ts index 66f27bcbd5d..82c1c33bb13 100644 --- a/playwright/e2e/knock/manage-knocks.spec.ts +++ b/playwright/e2e/knock/manage-knocks.spec.ts @@ -16,6 +16,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +import { KnownMembership } from "matrix-js-sdk/src/matrix"; + import { test, expect } from "../../element-web-test"; import { waitForRoom } from "../utils"; @@ -73,7 +75,7 @@ test.describe("Manage Knocks", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === Membership.Leave && + e.getContent()?.membership === KnownMembership.Leave && e.getContent()?.displayname === "Bob", ); }); @@ -110,7 +112,7 @@ test.describe("Manage Knocks", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === Membership.Leave && + e.getContent()?.membership === KnownMembership.Leave && e.getContent()?.displayname === "Bob", ); }); diff --git a/playwright/pages/bot.ts b/playwright/pages/bot.ts index fc4ec758057..0144763db7d 100644 --- a/playwright/pages/bot.ts +++ b/playwright/pages/bot.ts @@ -16,8 +16,8 @@ limitations under the License. import { JSHandle, Page } from "@playwright/test"; import { uniqueId } from "lodash"; +import { KnownMembership, type MatrixClient } from "matrix-js-sdk/src/matrix"; -import type { MatrixClient } from "matrix-js-sdk/src/matrix"; import type { Logger } from "matrix-js-sdk/src/logger"; import type { SecretStorageKeyDescription } from "matrix-js-sdk/src/secret-storage"; import type { Credentials, HomeserverInstance } from "../plugins/homeserver"; @@ -178,7 +178,7 @@ export class Bot extends Client { if (opts.autoAcceptInvites) { cli.on(window.matrixcs.RoomMemberEvent.Membership, (event, member) => { - if (member.membership === Membership.Invite && member.userId === cli.getUserId()) { + if (member.membership === KnownMembership.Invite && member.userId === cli.getUserId()) { cli.joinRoom(member.roomId); } }); diff --git a/src/ScalarMessaging.ts b/src/ScalarMessaging.ts index 86d48b678a7..8ca7010092e 100644 --- a/src/ScalarMessaging.ts +++ b/src/ScalarMessaging.ts @@ -291,7 +291,7 @@ Response: */ -import { IContent, MatrixEvent, IEvent } from "matrix-js-sdk/src/matrix"; +import { IContent, MatrixEvent, IEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { MatrixClientPeg } from "./MatrixClientPeg"; @@ -357,7 +357,10 @@ function inviteUser(event: MessageEvent, roomId: string, userId: string): v if (room) { // if they are already invited or joined we can resolve immediately. const member = room.getMember(userId); - if (member && [Membership.Join, Membership.Invite].includes(member.membership)) { + if ( + member && + ([KnownMembership.Join, KnownMembership.Invite] as Array).includes(member.membership) + ) { sendResponse(event, { success: true, }); @@ -669,7 +672,7 @@ function canSendEvent(event: MessageEvent, roomId: string): void { sendError(event, _t("scalar|error_room_unknown")); return; } - if (room.getMyMembership() !== Membership.Join) { + if (room.getMyMembership() !== KnownMembership.Join) { sendError(event, _t("scalar|error_membership")); return; } diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index a7a39538dc5..aa5ed4f3204 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -18,7 +18,14 @@ limitations under the License. */ import * as React from "react"; -import { User, IContent, Direction, ContentHelpers, MRoomTopicEventContent } from "matrix-js-sdk/src/matrix"; +import { + User, + IContent, + Direction, + ContentHelpers, + MRoomTopicEventContent, + KnownMembership, +} from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import dis from "./dispatcher/dispatcher"; @@ -241,7 +248,7 @@ export const Commands = [ if (args) { const ev = cli.getRoom(roomId)?.currentState.getStateEvents("m.room.member", cli.getSafeUserId()); const content = { - ...(ev ? ev.getContent() : { membership: Membership.Join }), + ...(ev ? ev.getContent() : { membership: KnownMembership.Join }), displayname: args, }; return success(cli.sendStateEvent(roomId, "m.room.member", content, cli.getSafeUserId())); @@ -291,7 +298,7 @@ export const Commands = [ if (!url) return; const ev = room?.currentState.getStateEvents("m.room.member", userId); const content = { - ...(ev ? ev.getContent() : { membership: Membership.Join }), + ...(ev ? ev.getContent() : { membership: KnownMembership.Join }), avatar_url: url, }; return cli.sendStateEvent(roomId, "m.room.member", content, userId); diff --git a/src/TextForEvent.tsx b/src/TextForEvent.tsx index 0729841d116..be85ac64739 100644 --- a/src/TextForEvent.tsx +++ b/src/TextForEvent.tsx @@ -25,6 +25,7 @@ import { MsgType, M_POLL_START, M_POLL_END, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { removeDirectionOverrideChars } from "matrix-js-sdk/src/utils"; @@ -122,7 +123,7 @@ function textForMemberEvent( const reason = content.reason; switch (content.membership) { - case Membership.Invite: { + case KnownMembership.Invite: { const threePidContent = content.third_party_invite; if (threePidContent) { if (threePidContent.display_name) { @@ -138,13 +139,13 @@ function textForMemberEvent( return () => _t("timeline|m.room.member|invite", { senderName, targetName }); } } - case Membership.Ban: + case KnownMembership.Ban: return () => reason ? _t("timeline|m.room.member|ban_reason", { senderName, targetName, reason }) : _t("timeline|m.room.member|ban", { senderName, targetName }); - case Membership.Join: - if (prevContent && prevContent.membership === Membership.Join) { + case KnownMembership.Join: + if (prevContent && prevContent.membership === KnownMembership.Join) { const modDisplayname = getModification(prevContent.displayname, content.displayname); const modAvatarUrl = getModification(prevContent.avatar_url, content.avatar_url); @@ -194,9 +195,9 @@ function textForMemberEvent( if (!ev.target) logger.warn("Join message has no target! -- " + ev.getContent().state_key); return () => _t("timeline|m.room.member|join", { targetName }); } - case Membership.Leave: + case KnownMembership.Leave: if (ev.getSender() === ev.getStateKey()) { - if (prevContent.membership === Membership.Invite) { + if (prevContent.membership === KnownMembership.Invite) { return () => _t("timeline|m.room.member|reject_invite", { targetName }); } else { return () => @@ -204,9 +205,9 @@ function textForMemberEvent( ? _t("timeline|m.room.member|left_reason", { targetName, reason }) : _t("timeline|m.room.member|left", { targetName }); } - } else if (prevContent.membership === Membership.Ban) { + } else if (prevContent.membership === KnownMembership.Ban) { return () => _t("timeline|m.room.member|unban", { senderName, targetName }); - } else if (prevContent.membership === Membership.Invite) { + } else if (prevContent.membership === KnownMembership.Invite) { return () => reason ? _t("timeline|m.room.member|withdrew_invite_reason", { @@ -215,7 +216,7 @@ function textForMemberEvent( reason, }) : _t("timeline|m.room.member|withdrew_invite", { senderName, targetName }); - } else if (prevContent.membership === Membership.Join) { + } else if (prevContent.membership === KnownMembership.Join) { return () => reason ? _t("timeline|m.room.member|kick_reason", { diff --git a/src/VoipUserMapper.ts b/src/VoipUserMapper.ts index ff29f5a6bde..26080de4a21 100644 --- a/src/VoipUserMapper.ts +++ b/src/VoipUserMapper.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room, EventType } from "matrix-js-sdk/src/matrix"; +import { Room, EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { ensureVirtualRoomExists } from "./createRoom"; @@ -95,7 +95,7 @@ export default class VoipUserMapper { if (!virtualRoomEvent || !virtualRoomEvent.getContent()) return null; const nativeRoomID = virtualRoomEvent.getContent()["native_room"]; const nativeRoom = cli.getRoom(nativeRoomID); - if (!nativeRoom || nativeRoom.getMyMembership() !== Membership.Join) return null; + if (!nativeRoom || nativeRoom.getMyMembership() !== KnownMembership.Join) return null; return nativeRoomID; } diff --git a/src/autocomplete/UserProvider.tsx b/src/autocomplete/UserProvider.tsx index e84579ad7d7..05788ce06ad 100644 --- a/src/autocomplete/UserProvider.tsx +++ b/src/autocomplete/UserProvider.tsx @@ -27,6 +27,7 @@ import { RoomState, RoomStateEvent, IRoomTimelineData, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { MatrixClientPeg } from "../MatrixClientPeg"; @@ -159,7 +160,7 @@ export default class UserProvider extends AutocompleteProvider { const currentUserId = MatrixClientPeg.safeGet().credentials.userId; this.users = this.room.getJoinedMembers().filter(({ userId }) => userId !== currentUserId); - this.users = this.users.concat(this.room.getMembersWithMembership(Membership.Invite)); + this.users = this.users.concat(this.room.getMembersWithMembership(KnownMembership.Invite)); this.users = sortBy(this.users, (member) => 1e20 - lastSpoken[member.userId] || 1e20); diff --git a/src/components/structures/RoomView.tsx b/src/components/structures/RoomView.tsx index 2ca917a06be..412ef38e4c5 100644 --- a/src/components/structures/RoomView.tsx +++ b/src/components/structures/RoomView.tsx @@ -37,6 +37,7 @@ import { MatrixError, ISearchResults, THREAD_RELATION_TYPE, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { CallState, MatrixCall } from "matrix-js-sdk/src/webrtc/call"; @@ -1454,7 +1455,7 @@ export class RoomView extends React.Component { private async loadMembersIfJoined(room: Room): Promise { // lazy load members if enabled if (this.context.client?.hasLazyLoadMembersEnabled()) { - if (room && room.getMyMembership() === Membership.Join) { + if (room && room.getMyMembership() === KnownMembership.Join) { try { await room.loadMembersIfNeeded(); if (!this.unmounted) { @@ -1588,7 +1589,8 @@ export class RoomView extends React.Component { if (room && this.context.client) { const me = this.context.client.getSafeUserId(); const canReact = - room.getMyMembership() === Membership.Join && room.currentState.maySendEvent(EventType.Reaction, me); + room.getMyMembership() === KnownMembership.Join && + room.currentState.maySendEvent(EventType.Reaction, me); const canSendMessages = room.maySendMessage(); const canSelfRedact = room.currentState.maySendEvent(EventType.RoomRedaction, me); @@ -1622,10 +1624,10 @@ export class RoomView extends React.Component { private updateDMState(): void { const room = this.state.room; - if (room.getMyMembership() != Membership.Join) { + if (room?.getMyMembership() != KnownMembership.Join) { return; } - const dmInviter = room.getDMInviter(); + const dmInviter = room?.getDMInviter(); if (dmInviter) { Rooms.setDMRoom(room.client, room.roomId, dmInviter); } @@ -1663,7 +1665,7 @@ export class RoomView extends React.Component { roomId, opts: { inviteSignUrl: signUrl }, metricsTrigger: - this.state.room?.getMyMembership() === Membership.Invite ? "Invite" : "RoomPreview", + this.state.room?.getMyMembership() === KnownMembership.Invite ? "Invite" : "RoomPreview", canAskToJoin: this.state.canAskToJoin, }); } @@ -2184,7 +2186,7 @@ export class RoomView extends React.Component { const myMembership = this.state.room.getMyMembership(); if ( isVideoRoom(this.state.room) && - !(SettingsStore.getValue("feature_video_rooms") && myMembership === Membership.Join) + !(SettingsStore.getValue("feature_video_rooms") && myMembership === KnownMembership.Join) ) { return ( @@ -2201,7 +2203,7 @@ export class RoomView extends React.Component { } // SpaceRoomView handles invites itself - if (myMembership === Membership.Invite && !this.state.room.isSpaceRoom()) { + if (myMembership === KnownMembership.Invite && !this.state.room.isSpaceRoom()) { if (this.state.joining || this.state.rejecting) { return ( @@ -2248,16 +2250,19 @@ export class RoomView extends React.Component { } } - if (this.state.canAskToJoin && [Membership.Knock, Membership.Leave].includes(myMembership)) { + if ( + this.state.canAskToJoin && + ([KnownMembership.Knock, KnownMembership.Leave] as Array).includes(myMembership) + ) { return (
{ statusBar = ( { ); } else if (showRoomUpgradeBar) { aux = ; - } else if (myMembership !== Membership.Join) { + } else if (myMembership !== KnownMembership.Join) { // We do have a room object for this room, but we're not currently in it. // We may have a 3rd party invite to it. let inviterName: string | undefined; @@ -2407,7 +2412,7 @@ export class RoomView extends React.Component { let messageComposer; const showComposer = // joined and not showing search results - myMembership === Membership.Join && !this.state.search; + myMembership === KnownMembership.Join && !this.state.search; if (showComposer) { messageComposer = ( { const myMember = this.state.room!.getMember(this.context.client!.getSafeUserId()); const showForgetButton = !this.context.client.isGuest() && - ([Membership.Leave, Membership.Ban].includes(myMembership) || myMember?.isKicked()); + (([KnownMembership.Leave, KnownMembership.Ban] as Array).includes(myMembership) || + myMember?.isKicked()); return ( @@ -2642,7 +2648,7 @@ export class RoomView extends React.Component { room={this.state.room} searchInfo={this.state.search} oobData={this.props.oobData} - inRoom={myMembership === Membership.Join} + inRoom={myMembership === KnownMembership.Join} onSearchClick={onSearchClick} onInviteClick={onInviteClick} onForgetClick={showForgetButton ? onForgetClick : null} diff --git a/src/components/structures/SpaceHierarchy.tsx b/src/components/structures/SpaceHierarchy.tsx index 8927628020b..81cea88a02d 100644 --- a/src/components/structures/SpaceHierarchy.tsx +++ b/src/components/structures/SpaceHierarchy.tsx @@ -41,6 +41,7 @@ import { HistoryVisibility, HierarchyRelation, HierarchyRoom, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { RoomHierarchy } from "matrix-js-sdk/src/room-hierarchy"; import classNames from "classnames"; @@ -112,7 +113,7 @@ const Tile: React.FC = ({ const cli = useContext(MatrixClientContext); const joinedRoom = useTypedEventEmitterState(cli, ClientEvent.Room, () => { const cliRoom = cli?.getRoom(room.room_id); - return cliRoom?.getMyMembership() === Membership.Join ? cliRoom : undefined; + return cliRoom?.getMyMembership() === KnownMembership.Join ? cliRoom : undefined; }); const joinedRoomName = useTypedEventEmitterState(joinedRoom, RoomEvent.Name, (room) => room?.name); const name = @@ -828,7 +829,7 @@ const SpaceHierarchy: React.FC = ({ space, initialText = "", showRoom, a content = ; } else { const hasPermissions = - space?.getMyMembership() === Membership.Join && + space?.getMyMembership() === KnownMembership.Join && space.currentState.maySendStateEvent(EventType.SpaceChild, cli.getSafeUserId()); const root = hierarchy.roomMap.get(space.roomId); @@ -846,7 +847,7 @@ const SpaceHierarchy: React.FC = ({ space, initialText = "", showRoom, a onViewRoomClick={(roomId, roomType) => showRoom(cli, hierarchy, roomId, roomType)} onJoinRoomClick={async (roomId, parents) => { for (const parent of parents) { - if (cli.getRoom(parent)?.getMyMembership() !== Membership.Join) { + if (cli.getRoom(parent)?.getMyMembership() !== KnownMembership.Join) { await joinRoom(cli, hierarchy, parent); } } diff --git a/src/components/structures/SpaceRoomView.tsx b/src/components/structures/SpaceRoomView.tsx index 451a91ead7b..95210e68793 100644 --- a/src/components/structures/SpaceRoomView.tsx +++ b/src/components/structures/SpaceRoomView.tsx @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { EventType, RoomType, JoinRule, Preset, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { EventType, RoomType, JoinRule, Preset, Room, RoomEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import React, { useCallback, useContext, useRef, useState } from "react"; @@ -237,7 +237,7 @@ const SpaceLanding: React.FC<{ space: Room }> = ({ space }) => { } const hasAddRoomPermissions = - myMembership === Membership.Join && space.currentState.maySendStateEvent(EventType.SpaceChild, userId); + myMembership === KnownMembership.Join && space.currentState.maySendStateEvent(EventType.SpaceChild, userId); let addRoomButton; if (hasAddRoomPermissions) { @@ -678,7 +678,7 @@ export default class SpaceRoomView extends React.PureComponent { private renderBody(): JSX.Element { switch (this.state.phase) { case Phase.Landing: - if (this.state.myMembership === Membership.Join) { + if (this.state.myMembership === KnownMembership.Join) { return ; } else { return ( diff --git a/src/components/structures/TimelinePanel.tsx b/src/components/structures/TimelinePanel.tsx index ad5da6cc476..11c288d92f5 100644 --- a/src/components/structures/TimelinePanel.tsx +++ b/src/components/structures/TimelinePanel.tsx @@ -38,6 +38,8 @@ import { Thread, ThreadEvent, ReceiptType, + KnownMembership, + Membership, } from "matrix-js-sdk/src/matrix"; import { debounce, findLastIndex, throttle } from "lodash"; import { logger } from "matrix-js-sdk/src/logger"; @@ -1824,7 +1826,7 @@ class TimelinePanel extends React.Component { // that the event belongs to, and traversing the timeline looking for // that event, while keeping track of the user's membership let i = events.length - 1; - let userMembership = Membership.Leave; + let userMembership: Membership = KnownMembership.Leave; for (; i >= 0; i--) { const timeline = this.props.timelineSet.getTimelineForEvent(events[i].getId()!); if (!timeline) { @@ -1838,14 +1840,14 @@ class TimelinePanel extends React.Component { } userMembership = - timeline.getState(EventTimeline.FORWARDS)?.getMember(userId)?.membership ?? Membership.Leave; + timeline.getState(EventTimeline.FORWARDS)?.getMember(userId)?.membership ?? KnownMembership.Leave; const timelineEvents = timeline.getEvents(); for (let j = timelineEvents.length - 1; j >= 0; j--) { const event = timelineEvents[j]; if (event.getId() === events[i].getId()) { break; } else if (event.getStateKey() === userId && event.getType() === EventType.RoomMember) { - userMembership = event.getPrevContent().membership || Membership.Leave; + userMembership = event.getPrevContent().membership || KnownMembership.Leave; } } break; @@ -1856,9 +1858,9 @@ class TimelinePanel extends React.Component { for (; i >= 0; i--) { const event = events[i]; if (event.getStateKey() === userId && event.getType() === EventType.RoomMember) { - userMembership = event.getPrevContent().membership || Membership.Leave; + userMembership = event.getPrevContent().membership || KnownMembership.Leave; } else if ( - userMembership === Membership.Leave && + userMembership === KnownMembership.Leave && (event.isDecryptionFailure() || event.isBeingDecrypted()) ) { // reached an undecryptable message when the user wasn't in the room -- don't try to load any more diff --git a/src/components/structures/grouper/CreationGrouper.tsx b/src/components/structures/grouper/CreationGrouper.tsx index 375bfd76bc5..e50b8801958 100644 --- a/src/components/structures/grouper/CreationGrouper.tsx +++ b/src/components/structures/grouper/CreationGrouper.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React, { ReactNode } from "react"; -import { EventType, M_BEACON_INFO, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { EventType, KnownMembership, M_BEACON_INFO, MatrixEvent } from "matrix-js-sdk/src/matrix"; import { BaseGrouper } from "./BaseGrouper"; import MessagePanel, { WrappedEvent } from "../MessagePanel"; @@ -48,7 +48,8 @@ export class CreationGrouper extends BaseGrouper { const eventType = event.getType(); if ( eventType === EventType.RoomMember && - (event.getStateKey() !== createEvent.getSender() || event.getContent()["membership"] !== Membership.Join) + (event.getStateKey() !== createEvent.getSender() || + event.getContent()["membership"] !== KnownMembership.Join) ) { return false; } diff --git a/src/components/views/context_menus/RoomContextMenu.tsx b/src/components/views/context_menus/RoomContextMenu.tsx index 5c2d385cd1b..35ee666679b 100644 --- a/src/components/views/context_menus/RoomContextMenu.tsx +++ b/src/components/views/context_menus/RoomContextMenu.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React, { useContext } from "react"; -import { Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Room } from "matrix-js-sdk/src/matrix"; import { IProps as IContextMenuProps } from "../../structures/ContextMenu"; import IconizedContextMenu, { @@ -144,7 +144,7 @@ const RoomContextMenu: React.FC = ({ room, onFinished, ...props }) => { let favouriteOption: JSX.Element | undefined; let lowPriorityOption: JSX.Element | undefined; let notificationOption: JSX.Element | undefined; - if (room.getMyMembership() === Membership.Join) { + if (room.getMyMembership() === KnownMembership.Join) { const isFavorite = roomTags.includes(DefaultTagID.Favourite); favouriteOption = ( = ({ const msc3946ProcessDynamicPredecessor = useSettingValue("feature_dynamic_room_predecessors"); const visibleRooms = useMemo( () => - cli?.getVisibleRooms(msc3946ProcessDynamicPredecessor).filter((r) => r.getMyMembership() === Membership.Join) ?? [], + cli + ?.getVisibleRooms(msc3946ProcessDynamicPredecessor) + .filter((r) => r.getMyMembership() === KnownMembership.Join) ?? [], [cli, msc3946ProcessDynamicPredecessor], ); diff --git a/src/components/views/dialogs/ForwardDialog.tsx b/src/components/views/dialogs/ForwardDialog.tsx index accc890f289..39c404b35b7 100644 --- a/src/components/views/dialogs/ForwardDialog.tsx +++ b/src/components/views/dialogs/ForwardDialog.tsx @@ -28,6 +28,7 @@ import { LocationAssetType, M_TIMESTAMP, M_BEACON, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { _t } from "../../../languageHandler"; @@ -267,7 +268,7 @@ const ForwardDialog: React.FC = ({ matrixClient: cli, event, permalinkCr sortRooms( cli .getVisibleRooms(msc3946DynamicRoomPredecessors) - .filter((room) => room.getMyMembership() === Membership.Join && !room.isSpaceRoom()), + .filter((room) => room.getMyMembership() === KnownMembership.Join && !room.isSpaceRoom()), ), [cli, msc3946DynamicRoomPredecessors], ); diff --git a/src/components/views/dialogs/InviteDialog.tsx b/src/components/views/dialogs/InviteDialog.tsx index 2301940feba..4b1bea1fc86 100644 --- a/src/components/views/dialogs/InviteDialog.tsx +++ b/src/components/views/dialogs/InviteDialog.tsx @@ -16,7 +16,7 @@ limitations under the License. import React, { createRef, ReactNode, SyntheticEvent } from "react"; import classNames from "classnames"; -import { RoomMember, Room, MatrixError, EventType } from "matrix-js-sdk/src/matrix"; +import { RoomMember, Room, MatrixError, EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; import { MatrixCall } from "matrix-js-sdk/src/webrtc/call"; import { logger } from "matrix-js-sdk/src/logger"; import { uniqBy } from "lodash"; @@ -372,10 +372,10 @@ export default class InviteDialog extends React.PureComponent excludedIds.add(m.userId)); - room.getMembersWithMembership(Membership.Join).forEach((m) => excludedIds.add(m.userId)); + room.getMembersWithMembership(KnownMembership.Invite).forEach((m) => 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(Membership.Ban).forEach((m) => excludedIds.add(m.userId)); + room.getMembersWithMembership(KnownMembership.Ban).forEach((m) => excludedIds.add(m.userId)); if (isFederated === false) { // exclude users from external servers const homeserver = props.roomId.split(":")[1]; diff --git a/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx b/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx index 3dc353dee08..37e39643b78 100644 --- a/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx +++ b/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React, { useMemo, useState } from "react"; -import { Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Room } from "matrix-js-sdk/src/matrix"; import { _t } from "../../../languageHandler"; import BaseDialog from "./BaseDialog"; @@ -102,7 +102,7 @@ const ManageRestrictedJoinRuleDialog: React.FC = ({ room, selected = [], if (!room) { return { roomId, name: roomId } as Room; } - if (room.getMyMembership() !== Membership.Join || !room.isSpaceRoom()) { + if (room.getMyMembership() !== KnownMembership.Join || !room.isSpaceRoom()) { return room; } }), diff --git a/src/components/views/dialogs/devtools/ServersInRoom.tsx b/src/components/views/dialogs/devtools/ServersInRoom.tsx index 6fff5fd511b..22b4c0d5951 100644 --- a/src/components/views/dialogs/devtools/ServersInRoom.tsx +++ b/src/components/views/dialogs/devtools/ServersInRoom.tsx @@ -16,7 +16,7 @@ limitations under the License. */ import React, { useContext, useMemo } from "react"; -import { EventType } from "matrix-js-sdk/src/matrix"; +import { EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; import BaseTool, { DevtoolsContext, IDevtoolsProps } from "./BaseTool"; import { _t } from "../../../../languageHandler"; @@ -27,7 +27,7 @@ const ServersInRoom: React.FC = ({ onBack }) => { const servers = useMemo>(() => { const servers: Record = {}; context.room.currentState.getStateEvents(EventType.RoomMember).forEach((ev) => { - if (ev.getContent().membership !== Membership.Join) return; // only count joined users + if (ev.getContent().membership !== KnownMembership.Join) return; // only count joined users const server = ev.getSender()!.split(":")[1]; servers[server] = (servers[server] ?? 0) + 1; }); diff --git a/src/components/views/dialogs/spotlight/SpotlightDialog.tsx b/src/components/views/dialogs/spotlight/SpotlightDialog.tsx index 575bdbf3a98..920da6b472e 100644 --- a/src/components/views/dialogs/spotlight/SpotlightDialog.tsx +++ b/src/components/views/dialogs/spotlight/SpotlightDialog.tsx @@ -25,6 +25,7 @@ import { Room, HierarchyRoom, JoinRule, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { normalize } from "matrix-js-sdk/src/utils"; import React, { ChangeEvent, RefObject, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react"; @@ -244,7 +245,7 @@ const findVisibleRooms = (cli: MatrixClient, msc3946ProcessDynamicPredecessor: b if (isLocalRoom(room)) return false; // TODO we may want to put invites in their own list - return room.getMyMembership() === Membership.Join || room.getMyMembership() == Membership.Invite; + return room.getMyMembership() === KnownMembership.Join || room.getMyMembership() == KnownMembership.Invite; }); }; @@ -675,7 +676,7 @@ const SpotlightDialog: React.FC = ({ initialText = "", initialFilter = n // world readable, a modal will appear asking you to register first. If // it is readable, the preview appears as normal. const showViewButton = - clientRoom?.getMyMembership() === Membership.Join || + clientRoom?.getMyMembership() === KnownMembership.Join || (result.publicRoom.world_readable && !canAskToJoin(joinRule)) || cli.isGuest(); diff --git a/src/components/views/elements/AppTile.tsx b/src/components/views/elements/AppTile.tsx index 04cbbdd3e9e..fc7bdbe6a17 100644 --- a/src/components/views/elements/AppTile.tsx +++ b/src/components/views/elements/AppTile.tsx @@ -20,7 +20,7 @@ limitations under the License. import React, { ContextType, createRef, CSSProperties, MutableRefObject, ReactNode } from "react"; import classNames from "classnames"; import { IWidget, MatrixCapabilities } from "matrix-widget-api"; -import { Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { ApprovalOpts, WidgetLifecycle } from "@matrix-org/react-sdk-module-api/lib/lifecycles/WidgetLifecycle"; @@ -220,7 +220,7 @@ export default class AppTile extends React.Component { private onMyMembership = (room: Room, membership: string): void => { if ( - (membership === Membership.Leave || membership === Membership.Ban) && + (membership === KnownMembership.Leave || membership === KnownMembership.Ban) && room.roomId === this.props.room?.roomId ) { this.onUserLeftRoom(); diff --git a/src/components/views/elements/EventListSummary.tsx b/src/components/views/elements/EventListSummary.tsx index 8fcb538b809..6e8490808a8 100644 --- a/src/components/views/elements/EventListSummary.tsx +++ b/src/components/views/elements/EventListSummary.tsx @@ -17,7 +17,7 @@ limitations under the License. */ import React, { ComponentProps, ReactNode } from "react"; -import { MatrixEvent, RoomMember, EventType } from "matrix-js-sdk/src/matrix"; +import { MatrixEvent, RoomMember, EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; import { _t } from "../../../languageHandler"; import { formatList } from "../../../utils/FormattingUtils"; @@ -416,12 +416,12 @@ export default class EventListSummary extends React.Component< case EventType.RoomMember: switch (e.mxEvent.getContent().membership) { - case Membership.Invite: + case KnownMembership.Invite: return TransitionType.Invited; - case Membership.Ban: + case KnownMembership.Ban: return TransitionType.Banned; - case Membership.Join: - if (e.mxEvent.getPrevContent().membership === Membership.Join) { + case KnownMembership.Join: + if (e.mxEvent.getPrevContent().membership === KnownMembership.Join) { if (e.mxEvent.getContent().displayname !== e.mxEvent.getPrevContent().displayname) { return TransitionType.ChangedName; } else if (e.mxEvent.getContent().avatar_url !== e.mxEvent.getPrevContent().avatar_url) { @@ -431,17 +431,17 @@ export default class EventListSummary extends React.Component< } else { return TransitionType.Joined; } - case Membership.Leave: + case KnownMembership.Leave: if (e.mxEvent.getSender() === e.mxEvent.getStateKey()) { - if (e.mxEvent.getPrevContent().membership === Membership.Invite) { + if (e.mxEvent.getPrevContent().membership === KnownMembership.Invite) { return TransitionType.InviteReject; } return TransitionType.Left; } switch (e.mxEvent.getPrevContent().membership) { - case Membership.Invite: + case KnownMembership.Invite: return TransitionType.InviteWithdrawal; - case Membership.Ban: + case KnownMembership.Ban: return TransitionType.Unbanned; // sender is not target and made the target leave, if not from invite/ban then this is a kick default: diff --git a/src/components/views/elements/RoomFacePile.tsx b/src/components/views/elements/RoomFacePile.tsx index 46490f870f9..92e98c37ebc 100644 --- a/src/components/views/elements/RoomFacePile.tsx +++ b/src/components/views/elements/RoomFacePile.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React, { FC, HTMLAttributes, useContext } from "react"; -import { Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Room, RoomMember } from "matrix-js-sdk/src/matrix"; import { sortBy } from "lodash"; import { _t } from "../../../languageHandler"; @@ -38,7 +38,7 @@ interface IProps extends HTMLAttributes { const RoomFacePile: FC = ({ room, onlyKnownUsers = true, numShown = DEFAULT_NUM_FACES, ...props }) => { const cli = useContext(MatrixClientContext); - const isJoined = room.getMyMembership() === Membership.Join; + const isJoined = room.getMyMembership() === KnownMembership.Join; let members = useRoomMembers(room); const count = members.length; diff --git a/src/components/views/right_panel/TimelineCard.tsx b/src/components/views/right_panel/TimelineCard.tsx index 094b1675f70..b447f4791df 100644 --- a/src/components/views/right_panel/TimelineCard.tsx +++ b/src/components/views/right_panel/TimelineCard.tsx @@ -22,6 +22,7 @@ import { Room, EventTimelineSet, Thread, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import BaseCard from "./BaseCard"; @@ -217,7 +218,7 @@ export default class TimelineCard extends React.Component { const isUploading = ContentMessages.sharedInstance().getCurrentUploads(this.props.composerRelation).length > 0; const myMembership = this.props.room.getMyMembership(); - const showComposer = myMembership === Membership.Join; + const showComposer = myMembership === KnownMembership.Join; return ( ; + if (member.membership !== KnownMembership.Invite && member.membership !== KnownMembership.Join) return <>; const onKick = async (): Promise => { if (isUpdating) return; // only allow one operation at a time @@ -647,17 +648,17 @@ export const RoomKickButton = ({ const commonProps = { member, action: room.isSpaceRoom() - ? member.membership === Membership.Invite + ? member.membership === KnownMembership.Invite ? _t("user_info|disinvite_button_space") : _t("user_info|kick_button_space") - : member.membership === Membership.Invite + : member.membership === KnownMembership.Invite ? _t("user_info|disinvite_button_room") : _t("user_info|kick_button_room"), title: - member.membership === Membership.Invite + member.membership === KnownMembership.Invite ? _t("user_info|disinvite_button_room_name", { roomName: room.name }) : _t("user_info|kick_button_room_name", { roomName: room.name }), - askReason: member.membership === Membership.Join, + askReason: member.membership === KnownMembership.Join, danger: true, }; @@ -718,10 +719,10 @@ export const RoomKickButton = ({ }; const kickLabel = room.isSpaceRoom() - ? member.membership === Membership.Invite + ? member.membership === KnownMembership.Invite ? _t("user_info|disinvite_button_space") : _t("user_info|kick_button_space") - : member.membership === Membership.Invite + : member.membership === KnownMembership.Invite ? _t("user_info|disinvite_button_room") : _t("user_info|kick_button_room"); @@ -771,7 +772,7 @@ export const BanToggleButton = ({ }: Omit): JSX.Element => { const cli = useContext(MatrixClientContext); - const isBanned = member.membership === Membership.Ban; + const isBanned = member.membership === KnownMembership.Ban; const onBanOrUnban = async (): Promise => { if (isUpdating) return; // only allow one operation at a time startUpdating(); @@ -808,9 +809,9 @@ export const BanToggleButton = ({ return ( !!myMember && !!theirMember && - theirMember.membership === Membership.Ban && + theirMember.membership === KnownMembership.Ban && myMember.powerLevel > theirMember.powerLevel && - child.currentState.hasSufficientPowerLevelFor(Membership.Ban, myMember.powerLevel) + child.currentState.hasSufficientPowerLevelFor("ban", myMember.powerLevel) ); } : (child: Room) => { @@ -820,9 +821,9 @@ export const BanToggleButton = ({ return ( !!myMember && !!theirMember && - theirMember.membership !== Membership.Ban && + theirMember.membership !== KnownMembership.Ban && myMember.powerLevel > theirMember.powerLevel && - child.currentState.hasSufficientPowerLevelFor(Membership.Ban, myMember.powerLevel) + child.currentState.hasSufficientPowerLevelFor("ban", myMember.powerLevel) ); }, allLabel: isBanned ? _t("user_info|unban_space_everything") : _t("user_info|ban_space_everything"), @@ -903,7 +904,7 @@ const MuteToggleButton: React.FC = ({ const cli = useContext(MatrixClientContext); // Don't show the mute/unmute option if the user is not in the room - if (member.membership !== Membership.Join) return null; + if (member.membership !== KnownMembership.Join) return null; const muted = isMuted(member, powerLevels); const onMuteToggle = async (): Promise => { diff --git a/src/components/views/rooms/MemberList.tsx b/src/components/views/rooms/MemberList.tsx index 1ecd36c2ce1..7a1b8fd3fce 100644 --- a/src/components/views/rooms/MemberList.tsx +++ b/src/components/views/rooms/MemberList.tsx @@ -30,6 +30,7 @@ import { UserEvent, EventType, ClientEvent, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { throttle } from "lodash"; import { Button, Tooltip } from "@vector-im/compound-web"; @@ -171,7 +172,11 @@ export default class MemberList extends React.Component { }; private onMyMembership = (room: Room, membership: string, oldMembership?: string): void => { - if (room.roomId === this.props.roomId && membership === Membership.Join && oldMembership !== Membership.Join) { + if ( + room.roomId === this.props.roomId && + membership === KnownMembership.Join && + oldMembership !== KnownMembership.Join + ) { // we just joined the room, load the member list this.updateListNow(true); } @@ -363,7 +368,7 @@ export default class MemberList extends React.Component { const room = cli.getRoom(this.props.roomId); let inviteButton: JSX.Element | undefined; - if (room?.getMyMembership() === Membership.Join && shouldShowComponent(UIComponent.InviteUsers)) { + if (room?.getMyMembership() === KnownMembership.Join && shouldShowComponent(UIComponent.InviteUsers)) { const inviteButtonText = room.isSpaceRoom() ? _t("space|invite_this_space") : _t("room|invite_this_room"); const button = ( diff --git a/src/components/views/rooms/NewRoomIntro.tsx b/src/components/views/rooms/NewRoomIntro.tsx index c02c6191b46..1e52d015827 100644 --- a/src/components/views/rooms/NewRoomIntro.tsx +++ b/src/components/views/rooms/NewRoomIntro.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React, { useContext } from "react"; -import { EventType, Room, User, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { EventType, Room, User, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; import RoomContext from "../../../contexts/RoomContext"; @@ -112,7 +112,7 @@ const NewRoomIntro: React.FC = () => { ); } else { - const inRoom = room && room.getMyMembership() === Membership.Join; + const inRoom = room && room.getMyMembership() === KnownMembership.Join; const topic = room.currentState.getStateEvents(EventType.RoomTopic, "")?.getContent()?.topic; const canAddTopic = inRoom && room.currentState.maySendStateEvent(EventType.RoomTopic, cli.getSafeUserId()); diff --git a/src/components/views/rooms/RoomInfoLine.tsx b/src/components/views/rooms/RoomInfoLine.tsx index a4d88a6d0b8..53ed1498ca7 100644 --- a/src/components/views/rooms/RoomInfoLine.tsx +++ b/src/components/views/rooms/RoomInfoLine.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React, { FC } from "react"; -import { Room, JoinRule, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { Room, JoinRule, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix"; import { _t } from "../../../languageHandler"; import RightPanelStore from "../../../stores/right-panel/RightPanelStore"; @@ -33,7 +33,7 @@ interface IProps { const RoomInfoLine: FC = ({ room }) => { // summary will begin as undefined whilst loading and go null if it fails to load or we are not invited. const summary = useAsyncMemo(async (): Promise> | null> => { - if (room.getMyMembership() !== Membership.Invite) return null; + if (room.getMyMembership() !== KnownMembership.Invite) return null; try { return await room.client.getRoomSummary(room.roomId); } catch (e) { @@ -61,7 +61,7 @@ const RoomInfoLine: FC = ({ room }) => { } let members: JSX.Element | undefined; - if (membership === Membership.Invite && summary) { + if (membership === KnownMembership.Invite && summary) { // Don't trust local state and instead use the summary API members = ( diff --git a/src/components/views/rooms/RoomKnocksBar.tsx b/src/components/views/rooms/RoomKnocksBar.tsx index 0ecbbe47ee5..a61f875a9c9 100644 --- a/src/components/views/rooms/RoomKnocksBar.tsx +++ b/src/components/views/rooms/RoomKnocksBar.tsx @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { EventTimeline, JoinRule, MatrixError, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { EventTimeline, JoinRule, KnownMembership, MatrixError, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; import React, { ReactElement, ReactNode, useCallback, useState, VFC } from "react"; import { Icon as CheckIcon } from "../../../../res/img/feather-customised/check.svg"; @@ -35,7 +35,7 @@ export const RoomKnocksBar: VFC<{ room: Room }> = ({ room }) => { const knockMembers = useTypedEventEmitterState( room, RoomStateEvent.Update, - useCallback(() => room.getMembersWithMembership(Membership.Knock), [room]), + useCallback(() => room.getMembersWithMembership(KnownMembership.Knock), [room]), ); const knockMembersCount = knockMembers.length; diff --git a/src/components/views/rooms/RoomPreviewBar.tsx b/src/components/views/rooms/RoomPreviewBar.tsx index 845106c5b52..f2f0f686bae 100644 --- a/src/components/views/rooms/RoomPreviewBar.tsx +++ b/src/components/views/rooms/RoomPreviewBar.tsx @@ -23,6 +23,7 @@ import { IJoinRuleEventContent, JoinRule, MatrixError, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import classNames from "classnames"; import { RoomPreviewOpts, RoomViewLifecycle } from "@matrix-org/react-sdk-module-api/lib/lifecycles/RoomViewLifecycle"; @@ -192,13 +193,13 @@ export default class RoomPreviewBar extends React.Component { if (myMember) { const previousMembership = myMember.events.member?.getPrevContent().membership; if (myMember.isKicked()) { - if (previousMembership === Membership.Knock) { + if (previousMembership === KnownMembership.Knock) { return MessageCase.RequestDenied; } else if (this.props.promptAskToJoin) { return MessageCase.PromptAskToJoin; } return MessageCase.Kicked; - } else if (myMember.membership === Membership.Ban) { + } else if (myMember.membership === KnownMembership.Ban) { return MessageCase.Banned; } } @@ -284,7 +285,7 @@ export default class RoomPreviewBar extends React.Component { return false; } const memberContent = myMember.events.member?.getContent(); - return memberContent?.membership === Membership.Invite && memberContent.is_direct; + return memberContent?.membership === KnownMembership.Invite && memberContent.is_direct; } private makeScreenAfterLogin(): { screen: string; params: Record } { diff --git a/src/components/views/rooms/RoomPreviewCard.tsx b/src/components/views/rooms/RoomPreviewCard.tsx index 1bdb5baa1ea..16c09c9a44e 100644 --- a/src/components/views/rooms/RoomPreviewCard.tsx +++ b/src/components/views/rooms/RoomPreviewCard.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React, { FC, useContext, useState } from "react"; -import { Room, JoinRule } from "matrix-js-sdk/src/matrix"; +import { Room, JoinRule, KnownMembership } from "matrix-js-sdk/src/matrix"; import { _t } from "../../../languageHandler"; import defaultDispatcher from "../../../dispatcher/dispatcher"; @@ -73,7 +73,7 @@ const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButton let inviterSection: JSX.Element | null = null; let joinButtons: JSX.Element; - if (myMembership === Membership.Join) { + if (myMembership === KnownMembership.Join) { joinButtons = ( = ({ room, onJoinButtonClicked, onRejectButton {_t("action|leave")} ); - } else if (myMembership === Membership.Invite) { + } else if (myMembership === KnownMembership.Invite) { const inviteSender = room.getMember(cli.getUserId()!)?.events.member?.getSender(); if (inviteSender) { @@ -178,7 +178,7 @@ const RoomPreviewCard: FC = ({ room, onJoinButtonClicked, onRejectButton }); } else if (isVideoRoom && !videoRoomsEnabled) { notice = - myMembership === Membership.Join + myMembership === KnownMembership.Join ? _t("room|view_failed_enable_video_rooms") : _t("room|join_failed_enable_video_rooms"); diff --git a/src/components/views/rooms/RoomTile.tsx b/src/components/views/rooms/RoomTile.tsx index 4eb1af107d0..b716e9dedba 100644 --- a/src/components/views/rooms/RoomTile.tsx +++ b/src/components/views/rooms/RoomTile.tsx @@ -16,7 +16,7 @@ limitations under the License. */ import React, { createRef } from "react"; -import { Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; import classNames from "classnames"; import type { Call } from "../../../models/Call"; @@ -124,7 +124,7 @@ export class RoomTile extends React.PureComponent { private get showContextMenu(): boolean { return ( this.props.tag !== DefaultTagID.Invite && - this.props.room.getMyMembership() !== Membership.Knock && + this.props.room.getMyMembership() !== KnownMembership.Knock && !isKnockDenied(this.props.room) && shouldShowComponent(UIComponent.RoomOptionsMenu) ); @@ -387,7 +387,7 @@ export class RoomTile extends React.PureComponent { mx_RoomTile: true, mx_RoomTile_sticky: SettingsStore.getValue("feature_ask_to_join") && - (this.props.room.getMyMembership() === Membership.Knock || isKnockDenied(this.props.room)), + (this.props.room.getMyMembership() === KnownMembership.Knock || isKnockDenied(this.props.room)), mx_RoomTile_selected: this.state.selected, mx_RoomTile_hasMenuOpen: !!(this.state.generalMenuPosition || this.state.notificationsMenuPosition), mx_RoomTile_minimized: this.props.isMinimized, diff --git a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx index 7ec9a2a571a..fa1b9d7ee6f 100644 --- a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React, { ContextType } from "react"; -import { Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Room } from "matrix-js-sdk/src/matrix"; import { _t } from "../../../../../languageHandler"; import RoomProfileSettings from "../../../room_settings/RoomProfileSettings"; @@ -73,7 +73,7 @@ export default class GeneralRoomSettingsTab extends React.Component diff --git a/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx index 3350e7c5ca2..14c78d345a7 100644 --- a/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx @@ -14,7 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { EventTimeline, MatrixError, Room, RoomMember, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { + EventTimeline, + KnownMembership, + MatrixError, + Room, + RoomMember, + RoomStateEvent, +} from "matrix-js-sdk/src/matrix"; import React, { useCallback, useState, VFC } from "react"; import { Icon as CheckIcon } from "../../../../../../res/img/feather-customised/check.svg"; @@ -145,7 +152,7 @@ export const PeopleRoomSettingsTab: VFC<{ room: Room }> = ({ room }) => { const knockMembers = useTypedEventEmitterState( room, RoomStateEvent.Update, - useCallback(() => room.getMembersWithMembership(Membership.Knock), [room]), + useCallback(() => room.getMembersWithMembership(KnownMembership.Knock), [room]), ); return ( diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx index 774813a7767..f374f785839 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx @@ -15,7 +15,15 @@ limitations under the License. */ import React from "react"; -import { EventType, RoomMember, RoomState, RoomStateEvent, Room, IContent } from "matrix-js-sdk/src/matrix"; +import { + EventType, + RoomMember, + RoomState, + RoomStateEvent, + Room, + IContent, + KnownMembership, +} from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { throttle, get } from "lodash"; import { compare } from "matrix-js-sdk/src/utils"; @@ -413,7 +421,7 @@ export default class RolesRoomSettingsTab extends React.Component { } } - const banned = room.getMembersWithMembership(Membership.Ban); + const banned = room.getMembersWithMembership(KnownMembership.Ban); let bannedUsersSection: JSX.Element | undefined; if (banned?.length) { const canBanUsers = currentUserLevel >= banLevel; diff --git a/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx b/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx index 4b1b01cd91a..087383e23af 100644 --- a/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx @@ -16,7 +16,7 @@ limitations under the License. import React, { ReactNode } from "react"; import { sleep } from "matrix-js-sdk/src/utils"; -import { Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { _t } from "../../../../../languageHandler"; @@ -37,7 +37,7 @@ import InlineSpinner from "../../../elements/InlineSpinner"; import { PosthogAnalytics } from "../../../../../PosthogAnalytics"; import { showDialog as showAnalyticsLearnMoreDialog } from "../../../dialogs/AnalyticsLearnMoreDialog"; import { privateShouldBeEncrypted } from "../../../../../utils/rooms"; -import type { IServerVersions } from "matrix-js-sdk/src/matrix"; +import type { IServerVersions, Membership } from "matrix-js-sdk/src/matrix"; import SettingsTab from "../SettingsTab"; import { SettingsSection } from "../../shared/SettingsSection"; import SettingsSubsection, { SettingsSubsectionText } from "../../shared/SettingsSubsection"; @@ -126,7 +126,7 @@ export default class SecurityUserSettingsTab extends React.Component { - return r.hasMembershipState(MatrixClientPeg.safeGet().getUserId()!, Membership.Invite); + return r.hasMembershipState(MatrixClientPeg.safeGet().getUserId()!, KnownMembership.Invite); }); }; diff --git a/src/components/views/spaces/SpaceTreeLevel.tsx b/src/components/views/spaces/SpaceTreeLevel.tsx index 4b53181d413..1743d2b366f 100644 --- a/src/components/views/spaces/SpaceTreeLevel.tsx +++ b/src/components/views/spaces/SpaceTreeLevel.tsx @@ -24,7 +24,7 @@ import React, { RefObject, } from "react"; import classNames from "classnames"; -import { Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; import { DraggableProvidedDragHandleProps } from "react-beautiful-dnd"; import RoomAvatar from "../avatars/RoomAvatar"; @@ -99,7 +99,7 @@ export const SpaceButton = ({ let notifBadge; if (spaceKey && notificationState) { let ariaLabel = _t("a11y_jump_first_unread_room"); - if (space?.getMyMembership() === Membership.Invite) { + if (space?.getMyMembership() === KnownMembership.Invite) { ariaLabel = _t("a11y|jump_first_invite"); } @@ -325,7 +325,7 @@ export class SpaceItem extends React.PureComponent { hasSubSpaces: this.state.childSpaces?.length, }); - const isInvite = space.getMyMembership() === Membership.Invite; + const isInvite = space.getMyMembership() === KnownMembership.Invite; const notificationState = isInvite ? StaticNotificationState.forSymbol("!", NotificationLevel.Highlight) @@ -379,7 +379,7 @@ export class SpaceItem extends React.PureComponent { size={isNested ? "24px" : "32px"} onKeyDown={this.onKeyDown} ContextMenuComponent={ - this.props.space.getMyMembership() === Membership.Join ? SpaceContextMenu : undefined + this.props.space.getMyMembership() === KnownMembership.Join ? SpaceContextMenu : undefined } > {toggleCollapseButton} diff --git a/src/hooks/useRoomMembers.ts b/src/hooks/useRoomMembers.ts index 97c92554636..fb294debe69 100644 --- a/src/hooks/useRoomMembers.ts +++ b/src/hooks/useRoomMembers.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { useMemo, useState } from "react"; -import { Room, RoomEvent, RoomMember, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { Membership, Room, RoomEvent, RoomMember, RoomStateEvent } from "matrix-js-sdk/src/matrix"; import { throttle } from "lodash"; import { useTypedEventEmitter } from "./useEventEmitter"; diff --git a/src/hooks/useSpaceResults.ts b/src/hooks/useSpaceResults.ts index bb209a4403a..39422af9ea2 100644 --- a/src/hooks/useSpaceResults.ts +++ b/src/hooks/useSpaceResults.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { useCallback, useEffect, useMemo, useState } from "react"; -import { Room, RoomType, HierarchyRoom } from "matrix-js-sdk/src/matrix"; +import { Room, RoomType, HierarchyRoom, KnownMembership } from "matrix-js-sdk/src/matrix"; import { RoomHierarchy } from "matrix-js-sdk/src/room-hierarchy"; import { normalize } from "matrix-js-sdk/src/utils"; @@ -57,7 +57,7 @@ export const useSpaceResults = (space: Room | undefined, query: string): [Hierar return rooms?.filter((r) => { return ( r.room_type !== RoomType.Space && - cli.getRoom(r.room_id)?.getMyMembership() !== Membership.Join && + cli.getRoom(r.room_id)?.getMyMembership() !== KnownMembership.Join && (normalize(r.name || "").includes(normalizedQuery) || (r.canonical_alias || "").includes(lcQuery)) ); }); diff --git a/src/indexing/EventIndex.ts b/src/indexing/EventIndex.ts index ea739ffb8d1..5b08163f99c 100644 --- a/src/indexing/EventIndex.ts +++ b/src/indexing/EventIndex.ts @@ -37,6 +37,7 @@ import { SyncState, TimelineIndex, TimelineWindow, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { sleep } from "matrix-js-sdk/src/utils"; import { logger } from "matrix-js-sdk/src/logger"; @@ -533,7 +534,7 @@ export default class EventIndex extends EventEmitter { const profiles: Record = {}; stateEvents.forEach((ev) => { - if (ev.getContent().membership === Membership.Join) { + if (ev.getContent().membership === KnownMembership.Join) { profiles[ev.getSender()!] = { displayname: ev.getContent().displayname, avatar_url: ev.getContent().avatar_url, @@ -754,7 +755,7 @@ export default class EventIndex extends EventEmitter { // This is sets the avatar URL. const memberEvent = eventMapper({ content: { - membership: Membership.Join, + membership: KnownMembership.Join, avatar_url: e.profile.avatar_url, displayname: e.profile.displayname, }, diff --git a/src/models/Call.ts b/src/models/Call.ts index d9560aa04db..82cb021b07a 100644 --- a/src/models/Call.ts +++ b/src/models/Call.ts @@ -23,6 +23,8 @@ import { IMyDevice, Room, RoomMember, + Membership, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { randomString } from "matrix-js-sdk/src/randomstring"; @@ -308,7 +310,7 @@ export abstract class Call extends TypedEventEmitter => { - if (membership !== Membership.Join) this.setDisconnected(); + if (membership !== KnownMembership.Join) this.setDisconnected(); }; private onStopMessaging = (uid: string): void => { @@ -386,7 +388,7 @@ export class JitsiCall extends Call { devices = devices.filter((d) => d !== this.client.getDeviceId()); } // Must have a connected device and still be joined to the room - if (devices.length > 0 && member?.membership === Membership.Join) { + if (devices.length > 0 && member?.membership === KnownMembership.Join) { participants.set(member, new Set(devices)); if (expiresAt < allExpireAt) allExpireAt = expiresAt; } @@ -416,7 +418,7 @@ export class JitsiCall extends Call { * returns null, the update is skipped. */ private async updateDevices(fn: (devices: string[]) => string[] | null): Promise { - if (this.room.getMyMembership() !== Membership.Join) return; + if (this.room.getMyMembership() !== KnownMembership.Join) return; const event = this.room.currentState.getStateEvents(JitsiCall.MEMBER_EVENT_TYPE, this.client.getUserId()!); const content = event?.getContent(); diff --git a/src/shouldHideEvent.ts b/src/shouldHideEvent.ts index 54cd7040a7d..e82e64e7f7f 100644 --- a/src/shouldHideEvent.ts +++ b/src/shouldHideEvent.ts @@ -14,7 +14,7 @@ limitations under the License. */ -import { MatrixEvent, EventType, RelationType } from "matrix-js-sdk/src/matrix"; +import { MatrixEvent, EventType, RelationType, KnownMembership } from "matrix-js-sdk/src/matrix"; import SettingsStore from "./settings/SettingsStore"; import { IRoomState } from "./components/structures/RoomView"; @@ -39,10 +39,11 @@ function memberEventDiff(ev: MatrixEvent): IDiff { const prevContent = ev.getPrevContent(); const isMembershipChanged = content.membership !== prevContent.membership; - diff.isJoin = isMembershipChanged && content.membership === Membership.Join; - diff.isPart = isMembershipChanged && content.membership === Membership.Leave && ev.getStateKey() === ev.getSender(); + diff.isJoin = isMembershipChanged && content.membership === KnownMembership.Join; + diff.isPart = + isMembershipChanged && content.membership === KnownMembership.Leave && ev.getStateKey() === ev.getSender(); - const isJoinToJoin = !isMembershipChanged && content.membership === Membership.Join; + const isJoinToJoin = !isMembershipChanged && content.membership === KnownMembership.Join; diff.isDisplaynameChange = isJoinToJoin && content.displayname !== prevContent.displayname; diff.isAvatarChange = isJoinToJoin && content.avatar_url !== prevContent.avatar_url; return diff; diff --git a/src/stores/BreadcrumbsStore.ts b/src/stores/BreadcrumbsStore.ts index 631b99a72dd..5fbe7c6eddb 100644 --- a/src/stores/BreadcrumbsStore.ts +++ b/src/stores/BreadcrumbsStore.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room, RoomEvent, ClientEvent } from "matrix-js-sdk/src/matrix"; +import { Room, RoomEvent, ClientEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; import { isNullOrUndefined } from "matrix-js-sdk/src/utils"; import SettingsStore from "../settings/SettingsStore"; @@ -91,7 +91,7 @@ export class BreadcrumbsStore extends AsyncStoreWithClient { // The tests might not result in a valid room object. const room = this.matrixClient.getRoom(payload.room_id); const membership = room?.getMyMembership(); - if (room && membership === Membership.Join) await this.appendRoom(room); + if (room && membership === KnownMembership.Join) await this.appendRoom(room); } } else if (payload.action === Action.JoinRoom) { const room = this.matrixClient.getRoom(payload.roomId); diff --git a/src/stores/MemberListStore.ts b/src/stores/MemberListStore.ts index 133bcbd5c61..911f99e15de 100644 --- a/src/stores/MemberListStore.ts +++ b/src/stores/MemberListStore.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Room, RoomMember } from "matrix-js-sdk/src/matrix"; import SettingsStore from "../settings/SettingsStore"; import { SdkContextClass } from "../contexts/SDKContext"; @@ -90,7 +90,7 @@ export class MemberListStore { // pull straight from the server. Don't use a since token as we don't have earlier deltas // accumulated. room.currentState.markOutOfBandMembersStarted(); - const response = await this.stores.client!.members(roomId, undefined, Membership.Leave); + const response = await this.stores.client!.members(roomId, undefined, KnownMembership.Leave); const memberEvents = response.chunk.map(this.stores.client!.getEventMapper()); room.currentState.setOutOfBandMembers(memberEvents); } else { @@ -167,7 +167,7 @@ export class MemberListStore { invited: [], }; members.forEach((m) => { - if (m.membership !== Membership.Join && m.membership !== Membership.Invite) { + if (m.membership !== KnownMembership.Join && m.membership !== KnownMembership.Invite) { return; // bail early for left/banned users } if (query) { @@ -179,10 +179,10 @@ export class MemberListStore { } } switch (m.membership) { - case Membership.Join: + case KnownMembership.Join: result.joined.push(m); break; - case Membership.Invite: + case KnownMembership.Invite: result.invited.push(m); break; } diff --git a/src/stores/OwnBeaconStore.ts b/src/stores/OwnBeaconStore.ts index 9cb9efe4be5..26ca80529e0 100644 --- a/src/stores/OwnBeaconStore.ts +++ b/src/stores/OwnBeaconStore.ts @@ -27,6 +27,7 @@ import { ContentHelpers, MBeaconInfoEventContent, M_BEACON, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; @@ -313,7 +314,7 @@ export class OwnBeaconStore extends AsyncStoreWithClient { // in PSF-797 // stop watching beacons in rooms where user is no longer a member - if (member.membership === Membership.Leave || member.membership === Membership.Ban) { + if (member.membership === KnownMembership.Leave || member.membership === KnownMembership.Ban) { this.beaconsByRoomId.get(roomState.roomId)?.forEach(this.removeBeacon); this.beaconsByRoomId.delete(roomState.roomId); } diff --git a/src/stores/RoomViewStore.tsx b/src/stores/RoomViewStore.tsx index 17c3035f3e6..5e6eb7330d1 100644 --- a/src/stores/RoomViewStore.tsx +++ b/src/stores/RoomViewStore.tsx @@ -18,7 +18,7 @@ limitations under the License. import React, { ReactNode } from "react"; import * as utils from "matrix-js-sdk/src/utils"; -import { MatrixError, JoinRule, Room, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { MatrixError, JoinRule, Room, MatrixEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { ViewRoom as ViewRoomEvent } from "@matrix-org/analytics-events/types/typescript/ViewRoom"; import { JoinedRoom as JoinedRoomEvent } from "@matrix-org/analytics-events/types/typescript/JoinedRoom"; @@ -607,7 +607,7 @@ export class RoomViewStore extends EventEmitter { private getInvitingUserId(roomId: string): string | undefined { const cli = MatrixClientPeg.safeGet(); const room = cli.getRoom(roomId); - if (room?.getMyMembership() === Membership.Invite) { + if (room?.getMyMembership() === KnownMembership.Invite) { const myMember = room.getMember(cli.getSafeUserId()); const inviteEvent = myMember ? myMember.events.member : null; return inviteEvent?.getSender(); diff --git a/src/stores/notifications/RoomNotificationState.ts b/src/stores/notifications/RoomNotificationState.ts index 2fd1c182088..d3dcf4970e7 100644 --- a/src/stores/notifications/RoomNotificationState.ts +++ b/src/stores/notifications/RoomNotificationState.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixEventEvent, RoomEvent, ClientEvent } from "matrix-js-sdk/src/matrix"; +import { MatrixEventEvent, RoomEvent, ClientEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; import type { Room, MatrixEvent } from "matrix-js-sdk/src/matrix"; import type { IDestroyable } from "../../utils/IDestroyable"; @@ -97,7 +97,7 @@ export class RoomNotificationState extends NotificationState implements IDestroy const muted = RoomNotifs.getRoomNotifsState(this.room.client, this.room.roomId) === RoomNotifs.RoomNotifState.Mute; const knocked = - SettingsStore.getValue("feature_ask_to_join") && this.room.getMyMembership() === Membership.Knock; + SettingsStore.getValue("feature_ask_to_join") && this.room.getMyMembership() === KnownMembership.Knock; this._level = level; this._symbol = symbol; this._count = count; diff --git a/src/stores/room-list/RoomListStore.ts b/src/stores/room-list/RoomListStore.ts index 99b8ee2b28f..76e11704505 100644 --- a/src/stores/room-list/RoomListStore.ts +++ b/src/stores/room-list/RoomListStore.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixClient, Room, RoomState, EventType } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, Room, RoomState, EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import SettingsStore from "../../settings/SettingsStore"; @@ -350,7 +350,7 @@ export class RoomListStoreClass extends AsyncStoreWithClient implements } private async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise { - if (cause === RoomUpdateCause.NewRoom && room.getMyMembership() === Membership.Invite) { + if (cause === RoomUpdateCause.NewRoom && room.getMyMembership() === KnownMembership.Invite) { // Let the visibility provider know that there is a new invited room. It would be nice // if this could just be an event that things listen for but the point of this is that // we delay doing anything about this room until the VoipUserMapper had had a chance diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index 06e28b49d36..41565abcc61 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Room } from "matrix-js-sdk/src/matrix"; import { isNullOrUndefined } from "matrix-js-sdk/src/utils"; import { EventEmitter } from "events"; import { logger } from "matrix-js-sdk/src/logger"; @@ -172,7 +172,7 @@ export class Algorithm extends EventEmitter { } private doUpdateStickyRoom(val: Room | null): void { - if (val?.isSpaceRoom() && val.getMyMembership() !== Membership.Invite) { + if (val?.isSpaceRoom() && val.getMyMembership() !== KnownMembership.Invite) { // no-op sticky rooms for spaces - they're effectively virtual rooms val = null; } diff --git a/src/stores/spaces/SpaceStore.ts b/src/stores/spaces/SpaceStore.ts index c9aa7291294..9d9fdd9570f 100644 --- a/src/stores/spaces/SpaceStore.ts +++ b/src/stores/spaces/SpaceStore.ts @@ -25,6 +25,7 @@ import { MatrixEvent, ClientEvent, ISendEventResponse, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; @@ -255,8 +256,8 @@ export class SpaceStoreClass extends AsyncStoreWithClient { // else view space home or home depending on what is being clicked on if ( roomId && - cliSpace?.getMyMembership() !== Membership.Invite && - this.matrixClient.getRoom(roomId)?.getMyMembership() === Membership.Join && + cliSpace?.getMyMembership() !== KnownMembership.Invite && + this.matrixClient.getRoom(roomId)?.getMyMembership() === KnownMembership.Join && this.isRoomInSpace(space, roomId) ) { defaultDispatcher.dispatch({ @@ -325,7 +326,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { .filter((roomInfo) => { return ( roomInfo.room_type !== RoomType.Space && - this.matrixClient.getRoom(roomInfo.room_id)?.getMyMembership() !== Membership.Join + this.matrixClient?.getRoom(roomInfo.room_id)?.getMyMembership() !== KnownMembership.Join ); }) .map((roomInfo) => ({ @@ -368,7 +369,10 @@ export class SpaceStoreClass extends AsyncStoreWithClient { return history[history.length - 1]; }) .filter((room) => { - return room?.getMyMembership() === Membership.Join || room?.getMyMembership() === Membership.Invite; + return ( + room?.getMyMembership() === KnownMembership.Join || + room?.getMyMembership() === KnownMembership.Invite + ); }) || [] ); } @@ -379,7 +383,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { public getChildSpaces(spaceId: string): Room[] { // don't show invited subspaces as they surface at the top level for better visibility - return this.getChildren(spaceId).filter((r) => r.isSpaceRoom() && r.getMyMembership() === Membership.Join); + return this.getChildren(spaceId).filter((r) => r.isSpaceRoom() && r.getMyMembership() === KnownMembership.Join); } public getParents(roomId: string, canonicalOnly = false): Room[] { @@ -593,7 +597,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { private rebuildParentMap = (): void => { if (!this.matrixClient) return; const joinedSpaces = this.matrixClient.getVisibleRooms(this._msc3946ProcessDynamicPredecessor).filter((r) => { - return r.isSpaceRoom() && r.getMyMembership() === Membership.Join; + return r.isSpaceRoom() && r.getMyMembership() === KnownMembership.Join; }); this.parentMap = new EnhancedMap>(); @@ -717,12 +721,12 @@ export class SpaceStoreClass extends AsyncStoreWithClient { return ( !this.parentMap.get(room.roomId)?.size || // put all orphaned rooms in the Home Space !!DMRoomMap.shared().getUserIdForRoomId(room.roomId) || // put all DMs in the Home Space - room.getMyMembership() === Membership.Invite + room.getMyMembership() === KnownMembership.Invite ); // put all invites in the Home Space }; - private static isInSpace(member: RoomMember): boolean { - return member.membership === Membership.Join || member.membership === Membership.Invite; + private static isInSpace(member?: RoomMember | null): boolean { + return member?.membership === KnownMembership.Join || member?.membership === KnownMembership.Invite; } // Method for resolving the impact of a single user's membership change in the given Space and its hierarchy @@ -766,7 +770,8 @@ export class SpaceStoreClass extends AsyncStoreWithClient { const hiddenChildren = new EnhancedMap>(); visibleRooms.forEach((room) => { - if (![Membership.Join, Membership.Invite].includes(room.getMyMembership())) return; + if (!([KnownMembership.Join, KnownMembership.Invite] as Array).includes(room.getMyMembership())) + return; this.getParents(room.roomId).forEach((parent) => { hiddenChildren.getOrCreate(parent.roomId, new Set()).add(room.roomId); }); @@ -796,7 +801,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { space ?.getMembers() .filter((m) => { - return m.membership === Membership.Join || m.membership === Membership.Invite; + return m.membership === KnownMembership.Join || m.membership === KnownMembership.Invite; }) .map((m) => m.userId), ); @@ -924,7 +929,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { if (!room.isSpaceRoom()) { this.onRoomsUpdate(); - if (membership === Membership.Join) { + if (membership === KnownMembership.Join) { // the user just joined a room, remove it from the suggested list if it was there const numSuggestedRooms = this._suggestedRooms.length; this._suggestedRooms = this._suggestedRooms.filter((r) => r.room_id !== room.roomId); @@ -936,7 +941,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { // if the room currently being viewed was just joined then switch to its related space if ( - newMembership === Membership.Join && + newMembership === KnownMembership.Join && room.roomId === SdkContextClass.instance.roomViewStore.getRoomId() ) { this.switchSpaceIfNeeded(room.roomId); @@ -946,13 +951,13 @@ export class SpaceStoreClass extends AsyncStoreWithClient { } // Space - if (membership === Membership.Invite) { + if (membership === KnownMembership.Invite) { const len = this._invitedSpaces.size; this._invitedSpaces.add(room); if (len !== this._invitedSpaces.size) { this.emit(UPDATE_INVITED_SPACES, this.invitedSpaces); } - } else if (oldMembership === Membership.Invite && membership !== Membership.Join) { + } else if (oldMembership === KnownMembership.Invite && membership !== KnownMembership.Join) { if (this._invitedSpaces.delete(room)) { this.emit(UPDATE_INVITED_SPACES, this.invitedSpaces); } @@ -965,10 +970,10 @@ export class SpaceStoreClass extends AsyncStoreWithClient { this.emit(room.roomId); } - if (membership === Membership.Join && room.roomId === SdkContextClass.instance.roomViewStore.getRoomId()) { + if (membership === KnownMembership.Join && room.roomId === SdkContextClass.instance.roomViewStore.getRoomId()) { // if the user was looking at the space and then joined: select that space this.setActiveSpace(room.roomId, false); - } else if (membership === Membership.Leave && room.roomId === this.activeSpace) { + } else if (membership === KnownMembership.Leave && room.roomId === this.activeSpace) { // user's active space has gone away, go back to home this.goToFirstSpace(true); } @@ -1003,7 +1008,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { if ( room.roomId === this.activeSpace && // current space - target?.getMyMembership() !== Membership.Join && // target not joined + target?.getMyMembership() !== KnownMembership.Join && // target not joined ev.getPrevContent().suggested !== ev.getContent().suggested // suggested flag changed ) { this.loadSuggestedRooms(room); diff --git a/src/stores/widgets/StopGapWidget.ts b/src/stores/widgets/StopGapWidget.ts index 8473244cf6b..21f19ed37f2 100644 --- a/src/stores/widgets/StopGapWidget.ts +++ b/src/stores/widgets/StopGapWidget.ts @@ -14,7 +14,14 @@ * limitations under the License. */ -import { Room, MatrixEvent, MatrixEventEvent, MatrixClient, ClientEvent } from "matrix-js-sdk/src/matrix"; +import { + Room, + MatrixEvent, + MatrixEventEvent, + MatrixClient, + ClientEvent, + KnownMembership, +} from "matrix-js-sdk/src/matrix"; import { ClientWidgetApi, IModalWidgetOpenRequest, @@ -550,7 +557,7 @@ export class StopGapWidget extends EventEmitter { const evId = ev.getId(); if (evRoomId && evId) { const room = this.client.getRoom(evRoomId); - if (room && room.getMyMembership() === Membership.Join && !isRelationToUnknown) { + if (room && room.getMyMembership() === KnownMembership.Join && !isRelationToUnknown) { this.readUpToMap[evRoomId] = evId; } } diff --git a/src/utils/DMRoomMap.ts b/src/utils/DMRoomMap.ts index 94ce2512796..620affcb65d 100644 --- a/src/utils/DMRoomMap.ts +++ b/src/utils/DMRoomMap.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { uniq } from "lodash"; -import { Room, MatrixEvent, EventType, ClientEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { Room, MatrixEvent, EventType, ClientEvent, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { Optional } from "matrix-events-sdk"; @@ -172,7 +172,7 @@ export default class DMRoomMap { const joinedRooms = commonRooms .map((r) => this.matrixClient.getRoom(r)) - .filter((r) => r && r.getMyMembership() === Membership.Join); + .filter((r) => r && r.getMyMembership() === KnownMembership.Join); return joinedRooms[0]; } diff --git a/src/utils/MultiInviter.ts b/src/utils/MultiInviter.ts index cf257868743..5c096f6b3e9 100644 --- a/src/utils/MultiInviter.ts +++ b/src/utils/MultiInviter.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixError, MatrixClient, EventType, HistoryVisibility } from "matrix-js-sdk/src/matrix"; +import { MatrixError, MatrixClient, EventType, HistoryVisibility, KnownMembership } from "matrix-js-sdk/src/matrix"; import { defer, IDeferred } from "matrix-js-sdk/src/utils"; import { logger } from "matrix-js-sdk/src/logger"; @@ -159,17 +159,17 @@ export default class MultiInviter { if (!room) throw new Error("Room not found"); const member = room.getMember(addr); - if (member?.membership === Membership.Join) { + if (member?.membership === KnownMembership.Join) { throw new MatrixError({ errcode: USER_ALREADY_JOINED, error: "Member already joined", }); - } else if (member?.membership === Membership.Invite) { + } else if (member?.membership === KnownMembership.Invite) { throw new MatrixError({ errcode: USER_ALREADY_INVITED, error: "Member already invited", }); - } else if (member?.membership === Membership.Ban) { + } else if (member?.membership === KnownMembership.Ban) { let proceed = false; // Check if we can unban the invitee. // See https://spec.matrix.org/v1.7/rooms/v10/#authorization-rules, particularly 4.5.3 and 4.5.4. @@ -177,8 +177,8 @@ export default class MultiInviter { if ( !!ourMember && member.powerLevel < ourMember.powerLevel && - room.currentState.hasSufficientPowerLevelFor(Membership.Ban, ourMember.powerLevel) && - room.currentState.hasSufficientPowerLevelFor(Membership.Kick, ourMember.powerLevel) + room.currentState.hasSufficientPowerLevelFor("ban", ourMember.powerLevel) && + room.currentState.hasSufficientPowerLevelFor("kick", ourMember.powerLevel) ) { const { finished } = Modal.createDialog(ConfirmUserActionDialog, { member, diff --git a/src/utils/RoomUpgrade.ts b/src/utils/RoomUpgrade.ts index 6f6d6e88c0f..bf85f622ca4 100644 --- a/src/utils/RoomUpgrade.ts +++ b/src/utils/RoomUpgrade.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room, EventType, ClientEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { Room, EventType, ClientEvent, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { inviteUsersToRoom } from "../RoomInvite"; @@ -68,8 +68,8 @@ export async function upgradeRoom( let toInvite: string[] = []; if (inviteUsers) { toInvite = [ - ...room.getMembersWithMembership(Membership.Join), - ...room.getMembersWithMembership(Membership.Invite), + ...room.getMembersWithMembership(KnownMembership.Join), + ...room.getMembersWithMembership(KnownMembership.Invite), ] .map((m) => m.userId) .filter((m) => m !== cli.getUserId()); diff --git a/src/utils/SortMembers.ts b/src/utils/SortMembers.ts index adc99defaad..abe70eed2e0 100644 --- a/src/utils/SortMembers.ts +++ b/src/utils/SortMembers.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { groupBy, mapValues, maxBy, minBy, sumBy, takeRight } from "lodash"; -import { MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix"; import { Member } from "./direct-messages"; import DMRoomMap from "./DMRoomMap"; @@ -52,7 +52,7 @@ function joinedRooms(cli: MatrixClient): Room[] { return ( cli .getRooms() - .filter((r) => r.getMyMembership() === Membership.Join) + .filter((r) => r.getMyMembership() === KnownMembership.Join) // Skip low priority rooms and DMs .filter((r) => !DMRoomMap.shared().getUserIdForRoomId(r.roomId)) .filter((r) => !Object.keys(r.tags).includes("m.lowpriority")) diff --git a/src/utils/WidgetUtils.ts b/src/utils/WidgetUtils.ts index e6c6d777e9d..63c9b032cff 100644 --- a/src/utils/WidgetUtils.ts +++ b/src/utils/WidgetUtils.ts @@ -17,7 +17,14 @@ limitations under the License. import { base32 } from "rfc4648"; import { IWidget, IWidgetData } from "matrix-widget-api"; -import { Room, ClientEvent, MatrixClient, RoomStateEvent, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { + Room, + ClientEvent, + MatrixClient, + RoomStateEvent, + MatrixEvent, + KnownMembership, +} from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { CallType } from "matrix-js-sdk/src/webrtc/call"; import { randomString, randomLowercaseString, randomUppercaseString } from "matrix-js-sdk/src/randomstring"; @@ -83,7 +90,7 @@ export default class WidgetUtils { return false; } - if (room.getMyMembership() !== Membership.Join) { + if (room.getMyMembership() !== KnownMembership.Join) { logger.warn(`User ${me} is not in room ${roomId}`); return false; } diff --git a/src/utils/dm/createDmLocalRoom.ts b/src/utils/dm/createDmLocalRoom.ts index 108ba0492f9..08de20786e9 100644 --- a/src/utils/dm/createDmLocalRoom.ts +++ b/src/utils/dm/createDmLocalRoom.ts @@ -15,7 +15,13 @@ limitations under the License. */ import { MEGOLM_ALGORITHM } from "matrix-js-sdk/src/crypto/olmlib"; -import { EventType, KNOWN_SAFE_ROOM_VERSION, MatrixClient, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { + EventType, + KNOWN_SAFE_ROOM_VERSION, + KnownMembership, + MatrixClient, + MatrixEvent, +} from "matrix-js-sdk/src/matrix"; import { LocalRoom, LOCAL_ROOM_ID_PREFIX } from "../../../src/models/LocalRoom"; import { determineCreateRoomEncryptionOption, Member } from "../../../src/utils/direct-messages"; @@ -76,7 +82,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[]) type: EventType.RoomMember, content: { displayname: userId, - membership: MembershipJoin, + membership: KnownMembership.Join, }, state_key: userId, user_id: userId, @@ -93,7 +99,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[]) content: { displayname: target.name, avatar_url: target.getMxcAvatarUrl() ?? undefined, - membership: Membership.Invite, + membership: KnownMembership.Invite, isDirect: true, }, state_key: target.userId, @@ -108,7 +114,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[]) content: { displayname: target.name, avatar_url: target.getMxcAvatarUrl() ?? undefined, - membership: Membership.Join, + membership: KnownMembership.Join, }, state_key: target.userId, sender: target.userId, @@ -118,7 +124,7 @@ export async function createDmLocalRoom(client: MatrixClient, targets: Member[]) }); localRoom.targets = targets; - localRoom.updateMyMembership(Membership.Join); + localRoom.updateMyMembership(KnownMembership.Join); localRoom.addLiveEvents(events); localRoom.currentState.setStateEvents(events); localRoom.name = localRoom.getDefaultRoomName(client.getUserId()!); diff --git a/src/utils/dm/findDMForUser.ts b/src/utils/dm/findDMForUser.ts index 34bfe8caa84..ba72a7f6bc3 100644 --- a/src/utils/dm/findDMForUser.ts +++ b/src/utils/dm/findDMForUser.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; import DMRoomMap from "../DMRoomMap"; import { isLocalRoom } from "../localRoom/isLocalRoom"; @@ -42,7 +42,7 @@ function extractSuitableRoom(rooms: Room[], userId: string, findRoomWithThirdpar // a DM is a room of two people that contains those two people exactly. This does mean // that bots, assistants, etc will ruin a room's DM-ness, though this is a problem for // canonical DMs to solve. - if (r && r.getMyMembership() === Membership.Join) { + if (r && r.getMyMembership() === KnownMembership.Join) { if (isLocalRoom(r)) return false; const functionalUsers = getFunctionalMembers(r); diff --git a/src/utils/membership.ts b/src/utils/membership.ts index 42d87960484..4eb8173e056 100644 --- a/src/utils/membership.ts +++ b/src/utils/membership.ts @@ -14,7 +14,16 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room, RoomMember, RoomState, RoomStateEvent, MatrixEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { + Room, + RoomMember, + RoomState, + RoomStateEvent, + MatrixEvent, + MatrixClient, + Membership, + KnownMembership, +} from "matrix-js-sdk/src/matrix"; import { MatrixClientPeg } from "../MatrixClientPeg"; import SettingsStore from "../settings/SettingsStore"; @@ -66,11 +75,11 @@ export function splitRoomsByMembership(rooms: Room[]): MembershipSplit { } export function getEffectiveMembership(membership: Membership): EffectiveMembership { - if (membership === Membership.Invite) { + if (membership === KnownMembership.Invite) { return EffectiveMembership.Invite; } else if ( - membership === Membership.Join || - (SettingsStore.getValue("feature_ask_to_join") && membership === Membership.Knock) + membership === KnownMembership.Join || + (SettingsStore.getValue("feature_ask_to_join") && membership === KnownMembership.Knock) ) { return EffectiveMembership.Join; } else { @@ -84,7 +93,7 @@ export function isKnockDenied(room: Room): boolean | undefined { const member = memberId ? room.getMember(memberId) : null; const previousMembership = member?.events.member?.getPrevContent().membership; - return member?.isKicked() && previousMembership === Membership.Knock; + return member?.isKicked() && previousMembership === KnownMembership.Knock; } export function getEffectiveMembershipTag(room: Room, membership?: string): EffectiveMembership { diff --git a/src/utils/permalinks/Permalinks.ts b/src/utils/permalinks/Permalinks.ts index e30230dd7a6..e9d0e8bede4 100644 --- a/src/utils/permalinks/Permalinks.ts +++ b/src/utils/permalinks/Permalinks.ts @@ -16,7 +16,7 @@ limitations under the License. import isIp from "is-ip"; import * as utils from "matrix-js-sdk/src/utils"; -import { Room, MatrixClient, RoomStateEvent, EventType } from "matrix-js-sdk/src/matrix"; +import { Room, MatrixClient, RoomStateEvent, EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import MatrixToPermalinkConstructor, { @@ -178,7 +178,7 @@ export class RoomPermalinkCreator { const entries = Object.entries(users); const allowedEntries = entries.filter(([userId]) => { const member = this.room?.getMember(userId); - if (!member || member.membership !== Membership.Join) { + if (!member || member.membership !== KnownMembership.Join) { return false; } const serverName = getServerName(userId); diff --git a/src/utils/room/canInviteTo.ts b/src/utils/room/canInviteTo.ts index 9bda1c45b2b..89283dd2462 100644 --- a/src/utils/room/canInviteTo.ts +++ b/src/utils/room/canInviteTo.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { JoinRule, Room } from "matrix-js-sdk/src/matrix"; +import { JoinRule, KnownMembership, Room } from "matrix-js-sdk/src/matrix"; import { shouldShowComponent } from "../../customisations/helpers/UIComponents"; import { UIComponent } from "../../settings/UIFeature"; @@ -29,5 +29,5 @@ export function canInviteTo(room: Room): boolean { const canInvite = !!room.canInvite(client.getSafeUserId()) || !!(room.isSpaceRoom() && room.getJoinRule() === JoinRule.Public); - return canInvite && room.getMyMembership() === Membership.Join && shouldShowComponent(UIComponent.InviteUsers); + return canInvite && room.getMyMembership() === KnownMembership.Join && shouldShowComponent(UIComponent.InviteUsers); } diff --git a/src/utils/space.tsx b/src/utils/space.tsx index 218c43bfc1c..f1a61cbc39f 100644 --- a/src/utils/space.tsx +++ b/src/utils/space.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React from "react"; -import { Room, ICreateRoomStateEvent, RoomType, EventType, JoinRule } from "matrix-js-sdk/src/matrix"; +import { Room, ICreateRoomStateEvent, RoomType, EventType, JoinRule, KnownMembership } from "matrix-js-sdk/src/matrix"; import { calculateRoomVia } from "./permalinks/Permalinks"; import Modal from "../Modal"; @@ -40,7 +40,7 @@ import { SdkContextClass } from "../contexts/SDKContext"; export const shouldShowSpaceSettings = (space: Room): boolean => { const userId = space.client.getUserId()!; return ( - space.getMyMembership() === Membership.Join && + space.getMyMembership() === KnownMembership.Join && (space.currentState.maySendStateEvent(EventType.RoomAvatar, userId) || space.currentState.maySendStateEvent(EventType.RoomName, userId) || space.currentState.maySendStateEvent(EventType.RoomTopic, userId) || @@ -85,7 +85,7 @@ export const showCreateNewRoom = async (space: Room, type?: RoomType): Promise - ((space?.getMyMembership() === Membership.Join && space.canInvite(space.client.getUserId()!)) || + ((space?.getMyMembership() === KnownMembership.Join && space.canInvite(space.client.getUserId()!)) || space.getJoinRule() === JoinRule.Public) && shouldShowComponent(UIComponent.InviteUsers); diff --git a/test/LegacyCallHandler-test.ts b/test/LegacyCallHandler-test.ts index 489a00bd031..9ce83729ae9 100644 --- a/test/LegacyCallHandler-test.ts +++ b/test/LegacyCallHandler-test.ts @@ -16,6 +16,7 @@ limitations under the License. import { IProtocol, + KnownMembership, LOCAL_NOTIFICATION_SETTINGS_PREFIX, MatrixEvent, PushRuleKind, @@ -102,7 +103,7 @@ function mkStubDM(roomId: string, userId: string) { name: "Member", rawDisplayName: "Member", roomId: roomId, - membership: Membership.Join, + membership: KnownMembership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -111,7 +112,7 @@ function mkStubDM(roomId: string, userId: string) { name: "Member", rawDisplayName: "Member", roomId: roomId, - membership: Membership.Join, + membership: KnownMembership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -120,7 +121,7 @@ function mkStubDM(roomId: string, userId: string) { name: "Bot user", rawDisplayName: "Bot user", roomId: roomId, - membership: Membership.Join, + membership: KnownMembership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, diff --git a/test/RoomNotifs-test.ts b/test/RoomNotifs-test.ts index 3240a83ea3c..994d0a65e7e 100644 --- a/test/RoomNotifs-test.ts +++ b/test/RoomNotifs-test.ts @@ -24,6 +24,7 @@ import { EventType, MatrixEvent, PendingEventOrdering, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; @@ -277,7 +278,7 @@ describe("RoomNotifs test", () => { }); it("indicates the user has been invited to a channel", async () => { - room.updateMyMembership(Membership.Invite); + room.updateMyMembership(KnownMembership.Invite); const { level, symbol, count } = determineUnreadState(room); @@ -293,10 +294,10 @@ describe("RoomNotifs test", () => { const roomMember = mkRoomMember( room.roomId, MatrixClientPeg.get()!.getSafeUserId(), - Membership.Leave, + KnownMembership.Leave, true, { - membership: Membership.Knock, + membership: KnownMembership.Knock, }, ); jest.spyOn(room, "getMember").mockReturnValue(roomMember); diff --git a/test/SlashCommands-test.tsx b/test/SlashCommands-test.tsx index 7da019af4ce..37e7f3616eb 100644 --- a/test/SlashCommands-test.tsx +++ b/test/SlashCommands-test.tsx @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix"; import { mocked } from "jest-mock"; import { Command, Commands, getCommand } from "../src/SlashCommands"; @@ -162,7 +162,7 @@ describe("SlashCommands", () => { it("should warn about self demotion", async () => { setCurrentRoom(); const member = new RoomMember(roomId, client.getSafeUserId()); - member.membership = Membership.Join; + member.membership = KnownMembership.Join; member.powerLevel = 100; room.getMember = () => member; command.run(client, roomId, null, `${client.getUserId()} 0`); @@ -172,7 +172,7 @@ describe("SlashCommands", () => { it("should default to 50 if no powerlevel specified", async () => { setCurrentRoom(); const member = new RoomMember(roomId, "@user:server"); - member.membership = Membership.Join; + member.membership = KnownMembership.Join; room.getMember = () => member; command.run(client, roomId, null, member.userId); expect(client.setPowerLevel).toHaveBeenCalledWith(roomId, member.userId, 50); @@ -191,7 +191,7 @@ describe("SlashCommands", () => { it("should warn about self demotion", async () => { setCurrentRoom(); const member = new RoomMember(roomId, client.getSafeUserId()); - member.membership = Membership.Join; + member.membership = KnownMembership.Join; member.powerLevel = 100; room.getMember = () => member; command.run(client, roomId, null, client.getSafeUserId()); @@ -366,7 +366,7 @@ describe("SlashCommands", () => { describe("/join", () => { beforeEach(() => { jest.spyOn(dispatcher, "dispatch"); - command = findCommand(Membership.Join)!; + command = findCommand(KnownMembership.Join)!; }); it("should return usage if no args", () => { diff --git a/test/TextForEvent-test.ts b/test/TextForEvent-test.ts index 9e70b2ff512..0b13311ad54 100644 --- a/test/TextForEvent-test.ts +++ b/test/TextForEvent-test.ts @@ -18,6 +18,7 @@ import { EventType, HistoryVisibility, JoinRule, + KnownMembership, MatrixClient, MatrixEvent, Room, @@ -504,12 +505,12 @@ describe("TextForEvent", () => { type: "m.room.member", sender: "@a:foo", content: { - membership: Membership.Join, + membership: KnownMembership.Join, avatar_url: "b", displayname: "Bob", }, prev_content: { - membership: Membership.Join, + membership: KnownMembership.Join, avatar_url: "a", displayname: "Andy", }, diff --git a/test/components/structures/MessagePanel-test.tsx b/test/components/structures/MessagePanel-test.tsx index 00d55c371d8..42f537e8785 100644 --- a/test/components/structures/MessagePanel-test.tsx +++ b/test/components/structures/MessagePanel-test.tsx @@ -17,7 +17,7 @@ limitations under the License. import React from "react"; import { EventEmitter } from "events"; -import { MatrixEvent, Room, RoomMember, Thread, ReceiptType } from "matrix-js-sdk/src/matrix"; +import { MatrixEvent, Room, RoomMember, Thread, ReceiptType, KnownMembership } from "matrix-js-sdk/src/matrix"; import { render } from "@testing-library/react"; import { TooltipProvider } from "@vector-im/compound-web"; @@ -171,8 +171,8 @@ describe("MessagePanel", function () { user: "@user:id", target: bobMember, ts: ts0 + i * 1000, - mship: Membership.Join, - prevMship: Membership.Join, + mship: KnownMembership.Join, + prevMship: KnownMembership.Join, name: "A user", }), ); @@ -205,8 +205,8 @@ describe("MessagePanel", function () { user: "@user:id", target: bobMember, ts: ts0 + i * 1000, - mship: Membership.Join, - prevMship: Membership.Join, + mship: KnownMembership.Join, + prevMship: KnownMembership.Join, name: "A user", }), ); @@ -245,7 +245,7 @@ describe("MessagePanel", function () { user: alice, target: aliceMember, ts: ts0 + 1, - mship: Membership.Join, + mship: KnownMembership.Join, name: "Alice", }), mkEvent({ @@ -285,7 +285,7 @@ describe("MessagePanel", function () { skey: "@bob:example.org", target: bobMember, ts: ts0 + 5, - mship: Membership.Invite, + mship: KnownMembership.Invite, name: "Bob", }), ]; @@ -542,8 +542,8 @@ describe("MessagePanel", function () { user: "@user:id", target: bobMember, ts: Date.now(), - mship: Membership.Join, - prevMship: Membership.Join, + mship: KnownMembership.Join, + prevMship: KnownMembership.Join, name: "A user", }), ]; @@ -571,8 +571,8 @@ describe("MessagePanel", function () { user: "@user:id", target: bobMember, ts: Date.now(), - mship: Membership.Join, - prevMship: Membership.Join, + mship: KnownMembership.Join, + prevMship: KnownMembership.Join, name: "A user", }), ...events, @@ -695,8 +695,8 @@ describe("MessagePanel", function () { for (let i = 0; i < 100; i++) { events.push( TestUtilsMatrix.mkMembership({ - mship: Membership.Join, - prevMship: Membership.Join, + mship: KnownMembership.Join, + prevMship: KnownMembership.Join, room: "!room:id", user: "@user:id", event: true, @@ -716,8 +716,8 @@ describe("MessagePanel", function () { for (let i = 0; i < 100; i++) { events.push( TestUtilsMatrix.mkMembership({ - mship: Membership.Join, - prevMship: Membership.Join, + mship: KnownMembership.Join, + prevMship: KnownMembership.Join, room: "!room:id", user: "@user:id", event: true, diff --git a/test/components/structures/RoomView-test.tsx b/test/components/structures/RoomView-test.tsx index 13856c389aa..9de521d02eb 100644 --- a/test/components/structures/RoomView-test.tsx +++ b/test/components/structures/RoomView-test.tsx @@ -28,6 +28,7 @@ import { MatrixEvent, SearchResult, IEvent, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { MEGOLM_ALGORITHM } from "matrix-js-sdk/src/crypto/olmlib"; import { fireEvent, render, screen, RenderResult, waitForElementToBeRemoved, waitFor } from "@testing-library/react"; @@ -238,7 +239,7 @@ describe("RoomView", () => { }); it("updates url preview visibility on encryption state change", async () => { - room.getMyMembership = jest.fn().mockReturnValue(Membership.Join); + room.getMyMembership = jest.fn().mockReturnValue(KnownMembership.Join); // we should be starting unencrypted expect(cli.isCryptoEnabled()).toEqual(false); expect(cli.isRoomEncrypted(room.roomId)).toEqual(false); @@ -583,7 +584,7 @@ describe("RoomView", () => { it("allows to cancel a join request", async () => { jest.spyOn(MatrixClientPeg, "safeGet").mockReturnValue(client); jest.spyOn(client, "leave").mockResolvedValue({}); - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Knock); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Knock); await mountRoomView(); fireEvent.click(screen.getByRole("button", { name: "Cancel request" })); @@ -594,7 +595,7 @@ describe("RoomView", () => { }); it("should close search results when edit is clicked", async () => { - room.getMyMembership = jest.fn().mockReturnValue(Membership.Join); + room.getMyMembership = jest.fn().mockReturnValue(KnownMembership.Join); const eventMapper = (obj: Partial) => new MatrixEvent(obj); @@ -655,7 +656,7 @@ describe("RoomView", () => { const room2 = new Room(`!${roomCount++}:example.org`, cli, "@alice:example.org"); rooms.set(room2.roomId, room2); - room.getMyMembership = jest.fn().mockReturnValue(Membership.Join); + room.getMyMembership = jest.fn().mockReturnValue(KnownMembership.Join); const eventMapper = (obj: Partial) => new MatrixEvent(obj); diff --git a/test/components/structures/SpaceHierarchy-test.tsx b/test/components/structures/SpaceHierarchy-test.tsx index 5e85ae25336..f2889a13bd8 100644 --- a/test/components/structures/SpaceHierarchy-test.tsx +++ b/test/components/structures/SpaceHierarchy-test.tsx @@ -17,7 +17,7 @@ limitations under the License. import React from "react"; import { mocked } from "jest-mock"; import { fireEvent, render, screen, waitFor, waitForElementToBeRemoved } from "@testing-library/react"; -import { MatrixClient, Room, HierarchyRoom } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, Room, HierarchyRoom, KnownMembership } from "matrix-js-sdk/src/matrix"; import { RoomHierarchy } from "matrix-js-sdk/src/room-hierarchy"; import { TooltipProvider } from "@vector-im/compound-web"; @@ -181,7 +181,7 @@ describe("SpaceHierarchy", () => { mocked(client.getRoom).mockImplementation( (roomId) => client.getRooms().find((room) => room.roomId === roomId) ?? null, ); - [room1, room2, space1, room3].forEach((r) => mocked(r.getMyMembership).mockReturnValue(Membership.Leave)); + [room1, room2, space1, room3].forEach((r) => mocked(r.getMyMembership).mockReturnValue(KnownMembership.Leave)); const hierarchyRoot: HierarchyRoom = { room_id: root.roomId, diff --git a/test/components/structures/TimelinePanel-test.tsx b/test/components/structures/TimelinePanel-test.tsx index be64b9baeb4..964c5bbe3c9 100644 --- a/test/components/structures/TimelinePanel-test.tsx +++ b/test/components/structures/TimelinePanel-test.tsx @@ -34,6 +34,7 @@ import { THREAD_RELATION_TYPE, ThreadEvent, ThreadFilterType, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import React, { createRef } from "react"; import { Mocked, mocked } from "jest-mock"; @@ -988,8 +989,8 @@ describe("TimelinePanel", () => { events.forEach((event) => timelineSet.getLiveTimeline().addEvent(event, { toStartOfTimeline: true })); const roomMembership = mkMembership({ - mship: Membership.Join, - prevMship: Membership.Join, + mship: KnownMembership.Join, + prevMship: KnownMembership.Join, user: authorId, room: room.roomId, event: true, @@ -999,7 +1000,7 @@ describe("TimelinePanel", () => { events.push(roomMembership); const member = new RoomMember(room.roomId, authorId); - member.membership = Membership.Join; + member.membership = KnownMembership.Join; const roomState = new RoomState(room.roomId); jest.spyOn(roomState, "getMember").mockReturnValue(member); diff --git a/test/components/views/context_menus/RoomContextMenu-test.tsx b/test/components/views/context_menus/RoomContextMenu-test.tsx index ca7236a2d51..4b03ffe9c59 100644 --- a/test/components/views/context_menus/RoomContextMenu-test.tsx +++ b/test/components/views/context_menus/RoomContextMenu-test.tsx @@ -19,7 +19,7 @@ limitations under the License. import { render, screen } from "@testing-library/react"; import React, { ComponentProps } from "react"; import { mocked } from "jest-mock"; -import { MatrixClient, PendingEventOrdering, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, MatrixClient, PendingEventOrdering, Room } from "matrix-js-sdk/src/matrix"; import MatrixClientContext from "../../../../src/contexts/MatrixClientContext"; import RoomContextMenu from "../../../../src/components/views/context_menus/RoomContextMenu"; @@ -106,7 +106,7 @@ describe("RoomContextMenu", () => { it("should render notification option for joined rooms", () => { const chamber = EchoChamber.forRoom(room); chamber.notificationVolume = RoomNotifState.Mute; - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Join); renderComponent(); expect( diff --git a/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx b/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx index f96425e2d92..7369219e881 100644 --- a/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx +++ b/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx @@ -16,7 +16,7 @@ limitations under the License. import { fireEvent, getByLabelText, render, screen } from "@testing-library/react"; import { mocked } from "jest-mock"; -import { ReceiptType, MatrixClient, PendingEventOrdering, Room } from "matrix-js-sdk/src/matrix"; +import { ReceiptType, MatrixClient, PendingEventOrdering, Room, KnownMembership } from "matrix-js-sdk/src/matrix"; import React from "react"; import userEvent from "@testing-library/user-event"; @@ -105,7 +105,7 @@ describe("RoomGeneralContextMenu", () => { }); it("does not render invite menu item when UIComponent customisations disable room invite", () => { - room.updateMyMembership(Membership.Join); + room.updateMyMembership(KnownMembership.Join); jest.spyOn(room, "canInvite").mockReturnValue(true); mocked(shouldShowComponent).mockReturnValue(false); @@ -116,7 +116,7 @@ describe("RoomGeneralContextMenu", () => { }); it("renders invite menu item when UIComponent customisations enables room invite", () => { - room.updateMyMembership(Membership.Join); + room.updateMyMembership(KnownMembership.Join); jest.spyOn(room, "canInvite").mockReturnValue(true); mocked(shouldShowComponent).mockReturnValue(true); diff --git a/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx b/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx index 507157c0905..e71d5a0a805 100644 --- a/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx +++ b/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx @@ -16,6 +16,7 @@ limitations under the License. import React from "react"; import { render } from "@testing-library/react"; +import { KnownMembership } from "matrix-js-sdk/src/matrix"; import ConfirmUserActionDialog from "../../../../src/components/views/dialogs/ConfirmUserActionDialog"; import { mkRoomMember } from "../../../test-utils"; @@ -25,7 +26,7 @@ describe("ConfirmUserActionDialog", () => { const { asFragment } = render( , diff --git a/test/components/views/dialogs/InviteDialog-test.tsx b/test/components/views/dialogs/InviteDialog-test.tsx index 647e769f267..562395acb21 100644 --- a/test/components/views/dialogs/InviteDialog-test.tsx +++ b/test/components/views/dialogs/InviteDialog-test.tsx @@ -17,7 +17,7 @@ limitations under the License. import React from "react"; import { fireEvent, render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; -import { RoomType, MatrixClient, MatrixError, Room } from "matrix-js-sdk/src/matrix"; +import { RoomType, MatrixClient, MatrixError, Room, KnownMembership } from "matrix-js-sdk/src/matrix"; import { sleep } from "matrix-js-sdk/src/utils"; import { mocked, Mocked } from "jest-mock"; @@ -163,7 +163,7 @@ describe("InviteDialog", () => { mkMembership({ event: true, room: roomId, - mship: Membership.Join, + mship: KnownMembership.Join, user: aliceId, skey: aliceId, }), diff --git a/test/components/views/dialogs/SpotlightDialog-test.tsx b/test/components/views/dialogs/SpotlightDialog-test.tsx index a2ed2f22950..b4fef8f4035 100644 --- a/test/components/views/dialogs/SpotlightDialog-test.tsx +++ b/test/components/views/dialogs/SpotlightDialog-test.tsx @@ -21,6 +21,7 @@ import { IProtocol, IPublicRoomsChunkRoom, JoinRule, + KnownMembership, MatrixClient, Room, RoomMember, @@ -158,9 +159,9 @@ describe("Spotlight Dialog", () => { beforeEach(() => { mockedClient = mockClient({ rooms: [testPublicRoom], users: [testPerson] }); testRoom = mkRoom(mockedClient, "!test23:example.com"); - mocked(testRoom.getMyMembership).mockReturnValue(Membership.Join); + mocked(testRoom.getMyMembership).mockReturnValue(KnownMembership.Join); testLocalRoom = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test23", mockedClient, mockedClient.getUserId()!); - testLocalRoom.updateMyMembership(Membership.Join); + testLocalRoom.updateMyMembership(KnownMembership.Join); mocked(mockedClient.getVisibleRooms).mockReturnValue([testRoom, testLocalRoom]); jest.spyOn(DMRoomMap, "shared").mockReturnValue({ @@ -169,7 +170,7 @@ describe("Spotlight Dialog", () => { testDM = mkRoom(mockedClient, testDMRoomId); testDM.name = "Chat with Alice"; - mocked(testDM.getMyMembership).mockReturnValue(Membership.Join); + mocked(testDM.getMyMembership).mockReturnValue(KnownMembership.Join); mocked(DMRoomMap.shared().getUserIdForRoomId).mockImplementation((roomId: string) => { if (roomId === testDMRoomId) { diff --git a/test/components/views/elements/EventListSummary-test.tsx b/test/components/views/elements/EventListSummary-test.tsx index 19b1a55ec0b..828c66bb4aa 100644 --- a/test/components/views/elements/EventListSummary-test.tsx +++ b/test/components/views/elements/EventListSummary-test.tsx @@ -16,7 +16,7 @@ limitations under the License. import React, { ComponentProps } from "react"; import { render, RenderResult } from "@testing-library/react"; -import { MatrixEvent, RoomMember } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, MatrixEvent, Membership, RoomMember } from "matrix-js-sdk/src/matrix"; import { getMockClientWithEventEmitter, @@ -146,7 +146,7 @@ describe("EventListSummary", function () { it("renders expanded events if there are less than props.threshold", function () { const events = generateEvents([ - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, ]); const props = { events: events, @@ -165,8 +165,8 @@ describe("EventListSummary", function () { it("renders expanded events if there are less than props.threshold for join and leave", function () { const events = generateEvents([ - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, ]); const props = { events: events, @@ -186,9 +186,9 @@ describe("EventListSummary", function () { it("renders collapsed events if events.length = props.threshold", function () { const events = generateEvents([ - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, ]); const props = { events: events, @@ -205,20 +205,20 @@ describe("EventListSummary", function () { it("truncates long join,leave repetitions", function () { const events = generateEvents([ - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, ]); const props = { events: events, @@ -237,28 +237,28 @@ describe("EventListSummary", function () { const events = generateEvents([ { userId: "@user_1:some.domain", - prevMembership: Membership.Ban, - membership: Membership.Leave, + prevMembership: KnownMembership.Ban, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, { userId: "@user_1:some.domain", - prevMembership: Membership.Leave, - membership: Membership.Invite, + prevMembership: KnownMembership.Leave, + membership: KnownMembership.Invite, senderId: "@some_other_user:some.domain", }, ]); @@ -279,30 +279,30 @@ describe("EventListSummary", function () { const events = generateEvents([ { userId: "@user_1:some.domain", - prevMembership: Membership.Ban, - membership: Membership.Leave, + prevMembership: KnownMembership.Ban, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, { userId: "@user_1:some.domain", - prevMembership: Membership.Leave, - membership: Membership.Ban, + prevMembership: KnownMembership.Leave, + membership: KnownMembership.Ban, senderId: "@some_other_user:some.domain", }, - { userId: "@user_1:some.domain", prevMembership: Membership.Ban, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Ban, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, { userId: "@user_1:some.domain", - prevMembership: Membership.Leave, - membership: Membership.Invite, + prevMembership: KnownMembership.Leave, + membership: KnownMembership.Invite, senderId: "@some_other_user:some.domain", }, ]); @@ -326,35 +326,35 @@ describe("EventListSummary", function () { // user_1 { userId: "@user_1:some.domain", - prevMembership: Membership.Ban, - membership: Membership.Leave, + prevMembership: KnownMembership.Ban, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, { userId: "@user_1:some.domain", - prevMembership: Membership.Leave, - membership: Membership.Ban, + prevMembership: KnownMembership.Leave, + membership: KnownMembership.Ban, senderId: "@some_other_user:some.domain", }, // user_2 { userId: "@user_2:some.domain", - prevMembership: Membership.Ban, - membership: Membership.Leave, + prevMembership: KnownMembership.Ban, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, - { userId: "@user_2:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_2:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_2:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_2:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_2:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_2:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_2:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_2:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, { userId: "@user_2:some.domain", - prevMembership: Membership.Leave, - membership: Membership.Ban, + prevMembership: KnownMembership.Leave, + membership: KnownMembership.Ban, senderId: "@some_other_user:some.domain", }, ]); @@ -376,17 +376,17 @@ describe("EventListSummary", function () { it("handles many users following the same sequence of memberships", function () { const events = generateEventsForUsers("@user_$:some.domain", 20, [ { - prevMembership: Membership.Ban, - membership: Membership.Leave, + prevMembership: KnownMembership.Ban, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, - { prevMembership: Membership.Leave, membership: Membership.Join }, - { prevMembership: Membership.Join, membership: Membership.Leave }, - { prevMembership: Membership.Leave, membership: Membership.Join }, - { prevMembership: Membership.Join, membership: Membership.Leave }, + { prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, { - prevMembership: Membership.Leave, - membership: Membership.Ban, + prevMembership: KnownMembership.Leave, + membership: KnownMembership.Ban, senderId: "@some_other_user:some.domain", }, ]); @@ -409,30 +409,30 @@ describe("EventListSummary", function () { const events = generateEvents([ { userId: "@user_2:some.domain", - prevMembership: Membership.Ban, - membership: Membership.Leave, + prevMembership: KnownMembership.Ban, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, { userId: "@user_1:some.domain", - prevMembership: Membership.Ban, - membership: Membership.Leave, + prevMembership: KnownMembership.Ban, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_1:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, { userId: "@user_1:some.domain", - prevMembership: Membership.Leave, - membership: Membership.Ban, + prevMembership: KnownMembership.Leave, + membership: KnownMembership.Ban, senderId: "@some_other_user:some.domain", }, - { userId: "@user_2:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_2:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, - { userId: "@user_2:some.domain", prevMembership: Membership.Leave, membership: Membership.Join }, - { userId: "@user_2:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_2:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_2:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, + { userId: "@user_2:some.domain", prevMembership: KnownMembership.Leave, membership: KnownMembership.Join }, + { userId: "@user_2:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, ]); const props = { events: events, @@ -453,52 +453,52 @@ describe("EventListSummary", function () { it("correctly identifies transitions", function () { const events = generateEvents([ // invited - { userId: "@user_1:some.domain", membership: Membership.Invite }, + { userId: "@user_1:some.domain", membership: KnownMembership.Invite }, // banned - { userId: "@user_1:some.domain", membership: Membership.Ban }, + { userId: "@user_1:some.domain", membership: KnownMembership.Ban }, // joined - { userId: "@user_1:some.domain", membership: Membership.Join }, + { userId: "@user_1:some.domain", membership: KnownMembership.Join }, // invite_reject { userId: "@user_1:some.domain", - prevMembership: Membership.Invite, - membership: Membership.Leave, + prevMembership: KnownMembership.Invite, + membership: KnownMembership.Leave, }, // left - { userId: "@user_1:some.domain", prevMembership: Membership.Join, membership: Membership.Leave }, + { userId: "@user_1:some.domain", prevMembership: KnownMembership.Join, membership: KnownMembership.Leave }, // invite_withdrawal { userId: "@user_1:some.domain", - prevMembership: Membership.Invite, - membership: Membership.Leave, + prevMembership: KnownMembership.Invite, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, // unbanned { userId: "@user_1:some.domain", - prevMembership: Membership.Ban, - membership: Membership.Leave, + prevMembership: KnownMembership.Ban, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, // kicked { userId: "@user_1:some.domain", - prevMembership: Membership.Join, - membership: Membership.Leave, + prevMembership: KnownMembership.Join, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, // default for sender=target (leave) { userId: "@user_1:some.domain", prevMembership: "????" as Membership, - membership: Membership.Leave, + membership: KnownMembership.Leave, senderId: "@user_1:some.domain", }, // default for sender<>target (kicked) { userId: "@user_1:some.domain", prevMembership: "????" as Membership, - membership: Membership.Leave, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, ]); @@ -522,24 +522,24 @@ describe("EventListSummary", function () { const events = generateEvents([ { userId: "@user_1:some.domain", - prevMembership: Membership.Invite, - membership: Membership.Leave, + prevMembership: KnownMembership.Invite, + membership: KnownMembership.Leave, }, { userId: "@user_1:some.domain", - prevMembership: Membership.Invite, - membership: Membership.Leave, + prevMembership: KnownMembership.Invite, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, { userId: "@user_2:some.domain", - prevMembership: Membership.Invite, - membership: Membership.Leave, + prevMembership: KnownMembership.Invite, + membership: KnownMembership.Leave, }, { userId: "@user_2:some.domain", - prevMembership: Membership.Invite, - membership: Membership.Leave, + prevMembership: KnownMembership.Invite, + membership: KnownMembership.Leave, senderId: "@some_other_user:some.domain", }, ]); @@ -562,13 +562,13 @@ describe("EventListSummary", function () { const events = generateEvents([ { userId: "@user_1:some.domain", - prevMembership: Membership.Invite, - membership: Membership.Leave, + prevMembership: KnownMembership.Invite, + membership: KnownMembership.Leave, }, { userId: "@user_1:some.domain", - prevMembership: Membership.Invite, - membership: Membership.Leave, + prevMembership: KnownMembership.Invite, + membership: KnownMembership.Leave, }, ]); const props = { @@ -586,10 +586,10 @@ describe("EventListSummary", function () { it('handles a summary length = 2, with no "others"', function () { const events = generateEvents([ - { userId: "@user_1:some.domain", membership: Membership.Join }, - { userId: "@user_1:some.domain", membership: Membership.Join }, - { userId: "@user_2:some.domain", membership: Membership.Join }, - { userId: "@user_2:some.domain", membership: Membership.Join }, + { userId: "@user_1:some.domain", membership: KnownMembership.Join }, + { userId: "@user_1:some.domain", membership: KnownMembership.Join }, + { userId: "@user_2:some.domain", membership: KnownMembership.Join }, + { userId: "@user_2:some.domain", membership: KnownMembership.Join }, ]); const props = { events: events, @@ -606,9 +606,9 @@ describe("EventListSummary", function () { it('handles a summary length = 2, with 1 "other"', function () { const events = generateEvents([ - { userId: "@user_1:some.domain", membership: Membership.Join }, - { userId: "@user_2:some.domain", membership: Membership.Join }, - { userId: "@user_3:some.domain", membership: Membership.Join }, + { userId: "@user_1:some.domain", membership: KnownMembership.Join }, + { userId: "@user_2:some.domain", membership: KnownMembership.Join }, + { userId: "@user_3:some.domain", membership: KnownMembership.Join }, ]); const props = { events: events, @@ -624,7 +624,7 @@ describe("EventListSummary", function () { }); it('handles a summary length = 2, with many "others"', function () { - const events = generateEventsForUsers("@user_$:some.domain", 20, [{ membership: Membership.Join }]); + const events = generateEventsForUsers("@user_$:some.domain", 20, [{ membership: KnownMembership.Join }]); const props = { events: events, children: generateTiles(events), diff --git a/test/components/views/elements/FacePile-test.tsx b/test/components/views/elements/FacePile-test.tsx index 9825c78ddc2..fe48197d298 100644 --- a/test/components/views/elements/FacePile-test.tsx +++ b/test/components/views/elements/FacePile-test.tsx @@ -15,13 +15,14 @@ limitations under the License. import { render } from "@testing-library/react"; import React from "react"; import { TooltipProvider } from "@vector-im/compound-web"; +import { KnownMembership } from "matrix-js-sdk/src/matrix"; import FacePile from "../../../../src/components/views/elements/FacePile"; import { mkRoomMember } from "../../../test-utils"; describe("", () => { it("renders with a tooltip", () => { - const member = mkRoomMember("123", "456", Membership.Join); + const member = mkRoomMember("123", "456", KnownMembership.Join); const { asFragment } = render( , diff --git a/test/components/views/elements/RoomFacePile-test.tsx b/test/components/views/elements/RoomFacePile-test.tsx index e0358f76a51..74bf5648b10 100644 --- a/test/components/views/elements/RoomFacePile-test.tsx +++ b/test/components/views/elements/RoomFacePile-test.tsx @@ -15,6 +15,7 @@ limitations under the License. import { render } from "@testing-library/react"; import React from "react"; import { TooltipProvider } from "@vector-im/compound-web"; +import { KnownMembership } from "matrix-js-sdk/src/matrix"; import { mkRoom, mkRoomMember, stubClient, withClientContextRenderOptions } from "../../../test-utils"; import RoomFacePile from "../../../../src/components/views/elements/RoomFacePile"; @@ -28,7 +29,7 @@ describe("", () => { const room = mkRoom(cli, "!123"); jest.spyOn(room, "getJoinedMembers").mockReturnValue([ - mkRoomMember(room.roomId, "@bob:example.org", Membership.Join), + mkRoomMember(room.roomId, "@bob:example.org", KnownMembership.Join), ]); const { asFragment } = render( diff --git a/test/components/views/right_panel/RoomSummaryCard-test.tsx b/test/components/views/right_panel/RoomSummaryCard-test.tsx index 57683c8bb67..c5d7c8c97f2 100644 --- a/test/components/views/right_panel/RoomSummaryCard-test.tsx +++ b/test/components/views/right_panel/RoomSummaryCard-test.tsx @@ -16,7 +16,7 @@ limitations under the License. import React from "react"; import { render, fireEvent, screen } from "@testing-library/react"; -import { EventType, MatrixEvent, Room, MatrixClient, JoinRule } from "matrix-js-sdk/src/matrix"; +import { EventType, MatrixEvent, Room, MatrixClient, JoinRule, KnownMembership } from "matrix-js-sdk/src/matrix"; import { mocked, MockedObject } from "jest-mock"; import { TooltipProvider } from "@vector-im/compound-web"; @@ -86,7 +86,7 @@ describe("", () => { state_key: "", }); room.currentState.setStateEvents([roomCreateEvent]); - room.updateMyMembership(Membership.Join); + room.updateMyMembership(KnownMembership.Join); jest.spyOn(Modal, "createDialog"); jest.spyOn(RightPanelStore.instance, "pushCard"); diff --git a/test/components/views/right_panel/UserInfo-test.tsx b/test/components/views/right_panel/UserInfo-test.tsx index aed084d16bc..6e786351db5 100644 --- a/test/components/views/right_panel/UserInfo-test.tsx +++ b/test/components/views/right_panel/UserInfo-test.tsx @@ -28,6 +28,7 @@ import { CryptoApi, DeviceVerificationStatus, Device, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { Phase, @@ -943,8 +944,8 @@ describe("", () => { describe("", () => { const defaultMember = new RoomMember(defaultRoomId, defaultUserId); - const memberWithInviteMembership = { ...defaultMember, membership: Membership.Invite }; - const memberWithJoinMembership = { ...defaultMember, membership: Membership.Join }; + const memberWithInviteMembership = { ...defaultMember, membership: KnownMembership.Invite }; + const memberWithJoinMembership = { ...defaultMember, membership: KnownMembership.Join }; let defaultProps: Parameters[0]; beforeEach(() => { @@ -1031,7 +1032,7 @@ describe("", () => { // null vs their member followed by // my member vs their member const mockMyMember = { powerLevel: 1 }; - const mockTheirMember = { membership: Membership.Invite, powerLevel: 0 }; + const mockTheirMember = { membership: KnownMembership.Invite, powerLevel: 0 }; const mockRoom = { getMember: jest @@ -1052,7 +1053,7 @@ describe("", () => { describe("", () => { const defaultMember = new RoomMember(defaultRoomId, defaultUserId); - const memberWithBanMembership = { ...defaultMember, membership: Membership.Ban }; + const memberWithBanMembership = { ...defaultMember, membership: KnownMembership.Ban }; let defaultProps: Parameters[0]; beforeEach(() => { defaultProps = { @@ -1161,7 +1162,7 @@ describe("", () => { // null vs their member followed by // my member vs their member const mockMyMember = { powerLevel: 1 }; - const mockTheirMember = { membership: Membership.Ban, powerLevel: 0 }; + const mockTheirMember = { membership: KnownMembership.Ban, powerLevel: 0 }; const mockRoom = { getMember: jest @@ -1182,7 +1183,7 @@ describe("", () => { describe("", () => { const defaultMember = new RoomMember(defaultRoomId, defaultUserId); - defaultMember.membership = Membership.Invite; + defaultMember.membership = KnownMembership.Invite; let defaultProps: Parameters[0]; beforeEach(() => { @@ -1248,7 +1249,7 @@ describe("", () => { const defaultMemberWithPowerLevelAndJoinMembership = { ...defaultMember, powerLevel: 0, - membership: Membership.Join, + membership: KnownMembership.Join, }; renderComponent({ @@ -1270,7 +1271,7 @@ describe("", () => { const defaultMemberWithPowerLevelAndJoinMembership = { ...defaultMember, powerLevel: 0, - membership: Membership.Join, + membership: KnownMembership.Join, }; renderComponent({ diff --git a/test/components/views/rooms/LegacyRoomHeader-test.tsx b/test/components/views/rooms/LegacyRoomHeader-test.tsx index 5244446b61e..393c4bc0345 100644 --- a/test/components/views/rooms/LegacyRoomHeader-test.tsx +++ b/test/components/views/rooms/LegacyRoomHeader-test.tsx @@ -24,6 +24,7 @@ import { RoomStateEvent, PendingEventOrdering, ISearchResults, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { CallType } from "matrix-js-sdk/src/webrtc/call"; import { ClientWidgetApi, Widget } from "matrix-widget-api"; @@ -906,7 +907,7 @@ function mkJoinEvent(roomId: string, userId: string) { room: roomId, user: userId, content: { - membership: Membership.Join, + membership: KnownMembership.Join, avatar_url: "mxc://example.org/" + userId, }, }); diff --git a/test/components/views/rooms/MemberList-test.tsx b/test/components/views/rooms/MemberList-test.tsx index 7a30e84dde6..cb78fb95fb3 100644 --- a/test/components/views/rooms/MemberList-test.tsx +++ b/test/components/views/rooms/MemberList-test.tsx @@ -17,7 +17,15 @@ limitations under the License. import React from "react"; import { act, fireEvent, render, RenderResult, screen } from "@testing-library/react"; -import { Room, MatrixClient, RoomState, RoomMember, User, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { + Room, + MatrixClient, + RoomState, + RoomMember, + User, + MatrixEvent, + KnownMembership, +} from "matrix-js-sdk/src/matrix"; import { compare } from "matrix-js-sdk/src/utils"; import { mocked, MockedObject } from "jest-mock"; import { TooltipProvider } from "@vector-im/compound-web"; @@ -170,7 +178,7 @@ describe("MemberList", () => { const usersPerLevel = 2; for (let i = 0; i < usersPerLevel; i++) { const adminUser = new RoomMember(memberListRoom.roomId, `@admin${i}:localhost`); - adminUser.membership = Membership.Join; + adminUser.membership = KnownMembership.Join; adminUser.powerLevel = 100; adminUser.user = User.createUser(adminUser.userId, client); adminUser.user.currentlyActive = true; @@ -180,7 +188,7 @@ describe("MemberList", () => { adminUsers.push(adminUser); const moderatorUser = new RoomMember(memberListRoom.roomId, `@moderator${i}:localhost`); - moderatorUser.membership = Membership.Join; + moderatorUser.membership = KnownMembership.Join; moderatorUser.powerLevel = 50; moderatorUser.user = User.createUser(moderatorUser.userId, client); moderatorUser.user.currentlyActive = true; @@ -190,7 +198,7 @@ describe("MemberList", () => { moderatorUsers.push(moderatorUser); const defaultUser = new RoomMember(memberListRoom.roomId, `@default${i}:localhost`); - defaultUser.membership = Membership.Join; + defaultUser.membership = KnownMembership.Join; defaultUser.powerLevel = 0; defaultUser.user = User.createUser(defaultUser.userId, client); defaultUser.user.currentlyActive = true; @@ -402,7 +410,7 @@ describe("MemberList", () => { }); it("renders disabled invite button when current user is a member but does not have rights to invite", async () => { - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Join); jest.spyOn(room, "canInvite").mockReturnValue(false); renderComponent(); @@ -413,7 +421,7 @@ describe("MemberList", () => { }); it("renders enabled invite button when current user is a member and has rights to invite", async () => { - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Join); jest.spyOn(room, "canInvite").mockReturnValue(true); renderComponent(); @@ -424,7 +432,7 @@ describe("MemberList", () => { it("opens room inviter on button click", async () => { jest.spyOn(defaultDispatcher, "dispatch"); - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Join); jest.spyOn(room, "canInvite").mockReturnValue(true); renderComponent(); diff --git a/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx b/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx index 51b3cb29c67..0677ae8bf7c 100644 --- a/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx +++ b/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx @@ -26,6 +26,7 @@ import { EventStatus, PendingEventOrdering, ReceiptType, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; @@ -140,7 +141,7 @@ describe("UnreadNotificationBadge", () => { }); it("adds a warning for invites", () => { - room.updateMyMembership(Membership.Invite); + room.updateMyMembership(KnownMembership.Invite); render(getComponent()); expect(screen.queryByText("!")).not.toBeNull(); }); diff --git a/test/components/views/rooms/RoomHeader-test.tsx b/test/components/views/rooms/RoomHeader-test.tsx index 3a874f9301c..c824e834b1b 100644 --- a/test/components/views/rooms/RoomHeader-test.tsx +++ b/test/components/views/rooms/RoomHeader-test.tsx @@ -19,6 +19,7 @@ import { CallType, MatrixCall } from "matrix-js-sdk/src/webrtc/call"; import { EventType, JoinRule, + KnownMembership, MatrixClient, MatrixEvent, PendingEventOrdering, @@ -154,7 +155,7 @@ describe("RoomHeader", () => { name: "Member", rawDisplayName: "Member", roomId: room.roomId, - membership: Membership.Join, + membership: KnownMembership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -172,7 +173,7 @@ describe("RoomHeader", () => { name: "Member", rawDisplayName: "Member", roomId: room.roomId, - membership: Membership.Join, + membership: KnownMembership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -181,7 +182,7 @@ describe("RoomHeader", () => { name: "Member", rawDisplayName: "Member", roomId: room.roomId, - membership: Membership.Join, + membership: KnownMembership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -190,7 +191,7 @@ describe("RoomHeader", () => { name: "Member", rawDisplayName: "Member", roomId: room.roomId, - membership: Membership.Join, + membership: KnownMembership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -199,7 +200,7 @@ describe("RoomHeader", () => { name: "Bot user", rawDisplayName: "Bot user", roomId: room.roomId, - membership: Membership.Join, + membership: KnownMembership.Join, getAvatarUrl: () => "mxc://avatar.url/image.png", getMxcAvatarUrl: () => "mxc://avatar.url/image.png", }, @@ -703,7 +704,7 @@ function mockRoomMembers(room: Room, count: number) { name: `Member ${index}`, rawDisplayName: `Member ${index}`, roomId: room.roomId, - membership: Membership.Join, + membership: KnownMembership.Join, getAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, getMxcAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, })); diff --git a/test/components/views/rooms/RoomKnocksBar-test.tsx b/test/components/views/rooms/RoomKnocksBar-test.tsx index a96b7600334..d69f4c78fee 100644 --- a/test/components/views/rooms/RoomKnocksBar-test.tsx +++ b/test/components/views/rooms/RoomKnocksBar-test.tsx @@ -19,6 +19,7 @@ import { EventTimeline, EventType, JoinRule, + KnownMembership, MatrixError, MatrixEvent, Room, @@ -112,24 +113,24 @@ describe("RoomKnocksBar", () => { bob.setMembershipEvent( new MatrixEvent({ - content: { displayname: "Bob", membership: Membership.Knock }, + content: { displayname: "Bob", membership: KnownMembership.Knock }, type: EventType.RoomMember, }), ); jane.setMembershipEvent( new MatrixEvent({ - content: { displayname: "Jane", membership: Membership.Knock }, + content: { displayname: "Jane", membership: KnownMembership.Knock }, type: EventType.RoomMember, }), ); john.setMembershipEvent( new MatrixEvent({ - content: { displayname: "John", membership: Membership.Knock }, + content: { displayname: "John", membership: KnownMembership.Knock }, type: EventType.RoomMember, }), ); other.setMembershipEvent( - new MatrixEvent({ content: { membership: Membership.Knock }, type: EventType.RoomMember }), + new MatrixEvent({ content: { membership: KnownMembership.Knock }, type: EventType.RoomMember }), ); beforeEach(async () => { @@ -189,7 +190,7 @@ describe("RoomKnocksBar", () => { it("renders a link to open the room settings people tab", () => { bob.setMembershipEvent( new MatrixEvent({ - content: { displayname: "Bob", membership: Membership.Knock, reason: "some reason" }, + content: { displayname: "Bob", membership: KnownMembership.Knock, reason: "some reason" }, type: EventType.RoomMember, }), ); diff --git a/test/components/views/rooms/RoomPreviewBar-test.tsx b/test/components/views/rooms/RoomPreviewBar-test.tsx index a047a80c8d8..a4b81618a11 100644 --- a/test/components/views/rooms/RoomPreviewBar-test.tsx +++ b/test/components/views/rooms/RoomPreviewBar-test.tsx @@ -16,7 +16,7 @@ limitations under the License. import React, { ComponentProps } from "react"; import { render, fireEvent, RenderResult, waitFor } from "@testing-library/react"; -import { Room, RoomMember, MatrixError, IContent } from "matrix-js-sdk/src/matrix"; +import { Room, RoomMember, MatrixError, IContent, KnownMembership } from "matrix-js-sdk/src/matrix"; import { withClientContextRenderOptions, stubClient } from "../../../test-utils"; import { MatrixClientPeg } from "../../../../src/MatrixClientPeg"; @@ -49,10 +49,10 @@ const makeMockRoomMember = ({ }: { userId?: string; isKicked?: boolean; - membership?: Membership.Invite | Membership.Ban | Membership.Leave; + membership?: KnownMembership.Invite | KnownMembership.Ban | KnownMembership.Leave; content?: Partial; memberContent?: Partial; - oldMembership?: Membership.Join | Membership.Knock; + oldMembership?: KnownMembership.Join | KnownMembership.Knock; }) => ({ userId, @@ -180,7 +180,11 @@ describe("", () => { it("renders denied request message", () => { const room = createRoom(roomId, otherUserId); jest.spyOn(room, "getMember").mockReturnValue( - makeMockRoomMember({ isKicked: true, membership: Membership.Leave, oldMembership: Membership.Knock }), + makeMockRoomMember({ + isKicked: true, + membership: KnownMembership.Leave, + oldMembership: KnownMembership.Knock, + }), ); const component = getComponent({ room, promptAskToJoin: true }); @@ -191,7 +195,11 @@ describe("", () => { const onForgetClick = jest.fn(); const room = createRoom(roomId, otherUserId); jest.spyOn(room, "getMember").mockReturnValue( - makeMockRoomMember({ isKicked: true, membership: Membership.Leave, oldMembership: Membership.Knock }), + makeMockRoomMember({ + isKicked: true, + membership: KnownMembership.Leave, + oldMembership: KnownMembership.Knock, + }), ); const component = getComponent({ room, promptAskToJoin: true, onForgetClick }); @@ -201,7 +209,7 @@ describe("", () => { it("renders banned message", () => { const room = createRoom(roomId, otherUserId); - jest.spyOn(room, "getMember").mockReturnValue(makeMockRoomMember({ membership: Membership.Ban })); + jest.spyOn(room, "getMember").mockReturnValue(makeMockRoomMember({ membership: KnownMembership.Ban })); const component = getComponent({ loading: true, room }); expect(getMessage(component)).toMatchSnapshot(); @@ -244,8 +252,8 @@ describe("", () => { const userMember = makeMockRoomMember({ userId }); const userMemberWithDmInvite = makeMockRoomMember({ userId, - membership: Membership.Invite, - memberContent: { is_direct: true, membership: Membership.Invite }, + membership: KnownMembership.Invite, + memberContent: { is_direct: true, membership: KnownMembership.Invite }, }); const inviterMember = makeMockRoomMember({ userId: inviterUserId, diff --git a/test/components/views/rooms/RoomPreviewCard-test.tsx b/test/components/views/rooms/RoomPreviewCard-test.tsx index 7422504c15a..f5d29e9424a 100644 --- a/test/components/views/rooms/RoomPreviewCard-test.tsx +++ b/test/components/views/rooms/RoomPreviewCard-test.tsx @@ -17,7 +17,7 @@ limitations under the License. import React from "react"; import { mocked, Mocked } from "jest-mock"; import { render, screen, act } from "@testing-library/react"; -import { PendingEventOrdering, Room, RoomStateEvent, RoomType } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, PendingEventOrdering, Room, RoomStateEvent, RoomType } from "matrix-js-sdk/src/matrix"; import type { MatrixClient, RoomMember } from "matrix-js-sdk/src/matrix"; import { stubClient, wrapInMatrixClientContext, mkRoomMember } from "../../../test-utils"; @@ -68,7 +68,7 @@ describe("RoomPreviewCard", () => { it("shows a beta pill on Jitsi video room invites", async () => { jest.spyOn(room, "getType").mockReturnValue(RoomType.ElementVideo); - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Invite); enabledFeatures = ["feature_video_rooms"]; await renderPreview(); @@ -77,7 +77,7 @@ describe("RoomPreviewCard", () => { it("shows a beta pill on Element video room invites", async () => { jest.spyOn(room, "getType").mockReturnValue(RoomType.UnstableCall); - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Invite); enabledFeatures = ["feature_video_rooms", "feature_element_call_video_rooms"]; await renderPreview(); @@ -85,7 +85,7 @@ describe("RoomPreviewCard", () => { }); it("doesn't show a beta pill on normal invites", async () => { - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Invite); await renderPreview(); expect(screen.queryByRole("button", { name: /beta/i })).toBeNull(); @@ -93,7 +93,7 @@ describe("RoomPreviewCard", () => { it("shows instructions on Jitsi video rooms invites if video rooms are disabled", async () => { jest.spyOn(room, "getType").mockReturnValue(RoomType.ElementVideo); - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Invite); await renderPreview(); screen.getByText(/enable video rooms in labs/i); @@ -101,7 +101,7 @@ describe("RoomPreviewCard", () => { it("shows instructions on Element video rooms invites if video rooms are disabled", async () => { jest.spyOn(room, "getType").mockReturnValue(RoomType.UnstableCall); - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Invite); enabledFeatures = ["feature_element_call_video_rooms"]; await renderPreview(); diff --git a/test/components/views/rooms/RoomTile-test.tsx b/test/components/views/rooms/RoomTile-test.tsx index 591f79faf8f..6a8e1ee7490 100644 --- a/test/components/views/rooms/RoomTile-test.tsx +++ b/test/components/views/rooms/RoomTile-test.tsx @@ -24,6 +24,7 @@ import { MatrixEvent, RoomStateEvent, Thread, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { Widget } from "matrix-widget-api"; @@ -187,7 +188,7 @@ describe("RoomTile", () => { return name === "feature_ask_to_join"; }); mocked(shouldShowComponent).mockReturnValue(true); - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Knock); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Knock); const { container } = renderRoomTile(); expect(container.querySelector(".mx_RoomTile_sticky")).toBeInTheDocument(); expect(screen.queryByRole("button", { name: "Room options" })).not.toBeInTheDocument(); @@ -201,10 +202,10 @@ describe("RoomTile", () => { const roomMember = mkRoomMember( room.roomId, MatrixClientPeg.get()!.getSafeUserId(), - Membership.Leave, + KnownMembership.Leave, true, { - membership: Membership.Knock, + membership: KnownMembership.Knock, }, ); jest.spyOn(room, "getMember").mockReturnValue(roomMember); diff --git a/test/components/views/settings/JoinRuleSettings-test.tsx b/test/components/views/settings/JoinRuleSettings-test.tsx index ab8e029d67b..f2ce64a1f36 100644 --- a/test/components/views/settings/JoinRuleSettings-test.tsx +++ b/test/components/views/settings/JoinRuleSettings-test.tsx @@ -27,6 +27,7 @@ import { RoomMember, MatrixError, Visibility, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { defer, IDeferred } from "matrix-js-sdk/src/utils"; @@ -177,7 +178,7 @@ describe("", () => { const memberBob = new RoomMember(roomId, "@bob:server.org"); const memberCharlie = new RoomMember(roomId, "@charlie:server.org"); jest.spyOn(room, "getMembersWithMembership").mockImplementation((membership) => - membership === Membership.Join ? [memberAlice, memberBob] : [memberCharlie], + membership === KnownMembership.Join ? [memberAlice, memberBob] : [memberCharlie], ); const upgradedRoom = new Room(newRoomId, client, userId); setRoomStateEvents(upgradedRoom, preferredRoomVersion); diff --git a/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx b/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx index 9ddb8b10227..300889440ce 100644 --- a/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx +++ b/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx @@ -18,6 +18,7 @@ import { act, fireEvent, render, screen, within } from "@testing-library/react"; import { EventTimeline, EventType, + KnownMembership, MatrixError, MatrixEvent, Room, @@ -91,7 +92,7 @@ describe("PeopleRoomSettingsTab", () => { content: { avatar_url: "mxc://example.org/albert-einstein.png", displayname: "Albert Einstein", - membership: Membership.Knock, + membership: KnownMembership.Knock, reason, }, origin_server_ts: -464140800000, @@ -110,7 +111,7 @@ describe("PeopleRoomSettingsTab", () => { new MatrixEvent({ content: { displayname: "albert.einstein", - membership: Membership.Knock, + membership: KnownMembership.Knock, }, type: EventType.RoomMember, }), @@ -138,7 +139,7 @@ describe("PeopleRoomSettingsTab", () => { new MatrixEvent({ content: { displayname: "albert.einstein", - membership: Membership.Knock, + membership: KnownMembership.Knock, reason, }, type: EventType.RoomMember, diff --git a/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx b/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx index 643d24b391a..a74a5280277 100644 --- a/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx +++ b/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx @@ -16,7 +16,15 @@ limitations under the License. import React from "react"; import { fireEvent, render, RenderResult, screen, waitFor } from "@testing-library/react"; -import { MatrixClient, EventType, MatrixEvent, Room, RoomMember, ISendEventResponse } from "matrix-js-sdk/src/matrix"; +import { + MatrixClient, + EventType, + MatrixEvent, + Room, + RoomMember, + ISendEventResponse, + KnownMembership, +} from "matrix-js-sdk/src/matrix"; import { mocked } from "jest-mock"; import { defer } from "matrix-js-sdk/src/utils"; @@ -197,7 +205,7 @@ describe("RolesRoomSettingsTab", () => { new MatrixEvent({ type: EventType.RoomMember, content: { - membership: Membership.Ban, + membership: KnownMembership.Ban, reason: "just testing", }, sender: userId, @@ -218,7 +226,7 @@ describe("RolesRoomSettingsTab", () => { new MatrixEvent({ type: EventType.RoomMember, content: { - membership: Membership.Ban, + membership: KnownMembership.Ban, reason: "just testing", }, sender: userId, diff --git a/test/hooks/useRoomMembers-test.tsx b/test/hooks/useRoomMembers-test.tsx index 980bb14dd1c..f97153c4fee 100644 --- a/test/hooks/useRoomMembers-test.tsx +++ b/test/hooks/useRoomMembers-test.tsx @@ -16,7 +16,7 @@ limitations under the License. import { waitFor } from "@testing-library/react"; import { renderHook, act } from "@testing-library/react-hooks/dom"; -import { MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; import { MatrixClientPeg } from "../../src/MatrixClientPeg"; import { stubClient } from "../test-utils"; @@ -49,7 +49,7 @@ describe("useRoomMembers", () => { state_key: "!user:server", room_id: room.roomId, content: { - membership: Membership.Join, + membership: KnownMembership.Join, }, }), ]); @@ -85,7 +85,7 @@ describe("useRoomMemberCount", () => { state_key: "!user:server", room_id: room.roomId, content: { - membership: Membership.Join, + membership: KnownMembership.Join, }, }), ]); @@ -109,14 +109,14 @@ describe("useMyRoomMembership", () => { }); it("should update on RoomState.Members events", async () => { - room.updateMyMembership(Membership.Join); + room.updateMyMembership(KnownMembership.Join); const { result } = render(room); - expect(result.current).toBe(Membership.Join); + expect(result.current).toBe(KnownMembership.Join); act(() => { - room.updateMyMembership(Membership.Leave); + room.updateMyMembership(KnownMembership.Leave); }); - await waitFor(() => expect(result.current).toBe(Membership.Leave)); + await waitFor(() => expect(result.current).toBe(KnownMembership.Leave)); }); }); diff --git a/test/hooks/useUnreadNotifications-test.ts b/test/hooks/useUnreadNotifications-test.ts index 6a7114995dc..456577da813 100644 --- a/test/hooks/useUnreadNotifications-test.ts +++ b/test/hooks/useUnreadNotifications-test.ts @@ -15,7 +15,13 @@ limitations under the License. */ import { renderHook } from "@testing-library/react-hooks"; -import { EventStatus, NotificationCountType, PendingEventOrdering, Room } from "matrix-js-sdk/src/matrix"; +import { + EventStatus, + KnownMembership, + NotificationCountType, + PendingEventOrdering, + Room, +} from "matrix-js-sdk/src/matrix"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; import { useUnreadNotifications } from "../../src/hooks/useUnreadNotifications"; @@ -66,7 +72,7 @@ describe("useUnreadNotifications", () => { }); it("indicates the user has been invited to a channel", async () => { - room.updateMyMembership(Membership.Invite); + room.updateMyMembership(KnownMembership.Invite); const { result } = renderHook(() => useUnreadNotifications(room)); const { level, symbol, count } = result.current; diff --git a/test/models/Call-test.ts b/test/models/Call-test.ts index a5031be52aa..cde65df3d52 100644 --- a/test/models/Call-test.ts +++ b/test/models/Call-test.ts @@ -17,7 +17,15 @@ limitations under the License. import EventEmitter from "events"; import { mocked } from "jest-mock"; import { waitFor } from "@testing-library/react"; -import { RoomType, Room, RoomEvent, MatrixEvent, RoomStateEvent, PendingEventOrdering } from "matrix-js-sdk/src/matrix"; +import { + RoomType, + Room, + RoomEvent, + MatrixEvent, + RoomStateEvent, + PendingEventOrdering, + KnownMembership, +} from "matrix-js-sdk/src/matrix"; import { Widget } from "matrix-widget-api"; // eslint-disable-next-line no-restricted-imports import { MatrixRTCSessionManagerEvents } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSessionManager"; @@ -95,7 +103,7 @@ const setUpClientRoomAndStores = (): { } }); - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Join); client.getRoom.mockImplementation((roomId) => (roomId === room.roomId ? room : null)); client.getRoom.mockImplementation((roomId) => (roomId === room.roomId ? room : null)); @@ -380,7 +388,7 @@ describe("JitsiCall", () => { it("disconnects when we leave the room", async () => { await call.start(); expect(call.connectionState).toBe(ConnectionState.Connected); - room.emit(RoomEvent.MyMembership, room, Membership.Leave); + room.emit(RoomEvent.MyMembership, room, KnownMembership.Leave); expect(call.connectionState).toBe(ConnectionState.Disconnected); }); @@ -395,7 +403,7 @@ describe("JitsiCall", () => { it("remains connected if we stay in the room", async () => { await call.start(); expect(call.connectionState).toBe(ConnectionState.Connected); - room.emit(RoomEvent.MyMembership, room, Membership.Join); + room.emit(RoomEvent.MyMembership, room, KnownMembership.Join); expect(call.connectionState).toBe(ConnectionState.Connected); }); @@ -911,14 +919,14 @@ describe("ElementCall", () => { it("disconnects when we leave the room", async () => { await callConnectProcedure(call); expect(call.connectionState).toBe(ConnectionState.Connected); - room.emit(RoomEvent.MyMembership, room, Membership.Leave); + room.emit(RoomEvent.MyMembership, room, KnownMembership.Leave); expect(call.connectionState).toBe(ConnectionState.Disconnected); }); it("remains connected if we stay in the room", async () => { await callConnectProcedure(call); expect(call.connectionState).toBe(ConnectionState.Connected); - room.emit(RoomEvent.MyMembership, room, Membership.Join); + room.emit(RoomEvent.MyMembership, room, KnownMembership.Join); expect(call.connectionState).toBe(ConnectionState.Connected); }); diff --git a/test/stores/MemberListStore-test.ts b/test/stores/MemberListStore-test.ts index 97b8dfd3b04..245f20576e8 100644 --- a/test/stores/MemberListStore-test.ts +++ b/test/stores/MemberListStore-test.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { EventType, IContent, MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; +import { EventType, IContent, KnownMembership, MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; import SdkConfig from "../../src/SdkConfig"; import SettingsStore from "../../src/settings/SettingsStore"; @@ -55,7 +55,7 @@ describe("MemberListStore", () => { type: EventType.RoomMember, state_key: alice, content: { - membership: Membership.Join, + membership: KnownMembership.Join, }, sender: alice, room_id: roomId, @@ -77,8 +77,8 @@ describe("MemberListStore", () => { }); it("loads members in a room", async () => { - addMember(room, bob, Membership.Invite); - addMember(room, charlie, Membership.Leave); + addMember(room, bob, KnownMembership.Invite); + addMember(room, charlie, KnownMembership.Leave); const { invited, joined } = await store.loadMemberList(roomId); expect(invited).toEqual([room.getMember(bob)]); @@ -92,8 +92,8 @@ describe("MemberListStore", () => { }); it("sorts by power level", async () => { - addMember(room, bob, Membership.Join); - addMember(room, charlie, Membership.Join); + addMember(room, bob, KnownMembership.Join); + addMember(room, charlie, KnownMembership.Join); setPowerLevels(room, { users: { [alice]: 100, @@ -109,8 +109,8 @@ describe("MemberListStore", () => { it("sorts by name if power level is equal", async () => { const doris = "@doris:bar"; - addMember(room, bob, Membership.Join); - addMember(room, charlie, Membership.Join); + addMember(room, bob, KnownMembership.Join); + addMember(room, charlie, KnownMembership.Join); setPowerLevels(room, { users_default: 10, }); @@ -120,7 +120,7 @@ describe("MemberListStore", () => { expect(joined).toEqual([room.getMember(alice), room.getMember(bob), room.getMember(charlie)]); // Ensure it sorts by display name if they are set - addMember(room, doris, Membership.Join, "AAAAA"); + addMember(room, doris, KnownMembership.Join, "AAAAA"); ({ invited, joined } = await store.loadMemberList(roomId)); expect(invited).toEqual([]); expect(joined).toEqual([ @@ -134,15 +134,15 @@ describe("MemberListStore", () => { it("filters based on a search query", async () => { const mice = "@mice:bar"; const zorro = "@zorro:bar"; - addMember(room, bob, Membership.Join); - addMember(room, mice, Membership.Join); + addMember(room, bob, KnownMembership.Join); + addMember(room, mice, KnownMembership.Join); let { invited, joined } = await store.loadMemberList(roomId, "ice"); expect(invited).toEqual([]); expect(joined).toEqual([room.getMember(alice), room.getMember(mice)]); // Ensure it filters by display name if they are set - addMember(room, zorro, Membership.Join, "ice ice baby"); + addMember(room, zorro, KnownMembership.Join, "ice ice baby"); ({ invited, joined } = await store.loadMemberList(roomId, "ice")); expect(invited).toEqual([]); expect(joined).toEqual([room.getMember(alice), room.getMember(zorro), room.getMember(mice)]); @@ -180,7 +180,7 @@ describe("MemberListStore", () => { type: EventType.RoomMember, state_key: bob, content: { - membership: Membership.Join, + membership: KnownMembership.Join, displayname: "Bob", }, sender: bob, diff --git a/test/stores/OwnBeaconStore-test.ts b/test/stores/OwnBeaconStore-test.ts index 57f3bc668b4..700c46940c2 100644 --- a/test/stores/OwnBeaconStore-test.ts +++ b/test/stores/OwnBeaconStore-test.ts @@ -24,6 +24,7 @@ import { RoomMember, ContentHelpers, M_BEACON, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { Mocked } from "jest-mock"; @@ -556,7 +557,7 @@ describe("OwnBeaconStore", () => { it("destroys and removes beacons when current user leaves room", async () => { // alice leaves room1 - const membershipEvent = makeMembershipEvent(room1Id, aliceId, Membership.Leave); + const membershipEvent = makeMembershipEvent(room1Id, aliceId, KnownMembership.Leave); const member = new RoomMember(room1Id, aliceId); member.setMembershipEvent(membershipEvent); diff --git a/test/stores/SpaceStore-test.ts b/test/stores/SpaceStore-test.ts index e20fa4e64f0..7dad0515c3e 100644 --- a/test/stores/SpaceStore-test.ts +++ b/test/stores/SpaceStore-test.ts @@ -24,6 +24,7 @@ import { MatrixEvent, Room, RoomEvent, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { defer } from "matrix-js-sdk/src/utils"; @@ -57,13 +58,13 @@ const fav2 = "!fav2:server"; const fav3 = "!fav3:server"; const dm1 = "!dm1:server"; const dm1Partner = new RoomMember(dm1, "@dm1Partner:server"); -dm1Partner.membership = Membership.Join; +dm1Partner.membership = KnownMembership.Join; const dm2 = "!dm2:server"; const dm2Partner = new RoomMember(dm2, "@dm2Partner:server"); -dm2Partner.membership = Membership.Join; +dm2Partner.membership = KnownMembership.Join; const dm3 = "!dm3:server"; const dm3Partner = new RoomMember(dm3, "@dm3Partner:server"); -dm3Partner.membership = Membership.Join; +dm3Partner.membership = KnownMembership.Join; const orphan1 = "!orphan1:server"; const orphan2 = "!orphan2:server"; const invite1 = "!invite1:server"; @@ -289,7 +290,7 @@ describe("SpaceStore", () => { }); it("invite to a subspace is only shown at the top level", async () => { - mkSpace(invite1).getMyMembership.mockReturnValue(Membership.Invite); + mkSpace(invite1).getMyMembership.mockReturnValue(KnownMembership.Invite); mkSpace(space1, [invite1]); await run(); @@ -335,20 +336,20 @@ describe("SpaceStore", () => { }); [invite1, invite2].forEach((roomId) => { - mocked(client.getRoom(roomId)).getMyMembership.mockReturnValue(Membership.Invite); + mocked(client.getRoom(roomId)!).getMyMembership.mockReturnValue(KnownMembership.Invite); }); // have dmPartner1 be in space1 with you const mySpace1Member = new RoomMember(space1, testUserId); - mySpace1Member.membership = Membership.Join; - (rooms.find((r) => r.roomId === space1).getMembers as jest.Mock).mockReturnValue([ + mySpace1Member.membership = KnownMembership.Join; + (rooms.find((r) => r.roomId === space1)!.getMembers as jest.Mock).mockReturnValue([ mySpace1Member, dm1Partner, ]); // have dmPartner2 be in space2 with you const mySpace2Member = new RoomMember(space2, testUserId); - mySpace2Member.membership = Membership.Join; - (rooms.find((r) => r.roomId === space2).getMembers as jest.Mock).mockReturnValue([ + mySpace2Member.membership = KnownMembership.Join; + (rooms.find((r) => r.roomId === space2)!.getMembers as jest.Mock).mockReturnValue([ mySpace2Member, dm2Partner, ]); @@ -683,16 +684,16 @@ describe("SpaceStore", () => { it("should add new DM Invites to the People Space Notification State", async () => { mkRoom(dm1); - mocked(client.getRoom(dm1)!).getMyMembership.mockReturnValue(Membership.Join); + mocked(client.getRoom(dm1)!).getMyMembership.mockReturnValue(KnownMembership.Join); mocked(client).getRoom.mockImplementation((roomId) => rooms.find((room) => room.roomId === roomId) || null); await run(); mkRoom(dm2); const cliDm2 = client.getRoom(dm2)!; - mocked(cliDm2).getMyMembership.mockReturnValue(Membership.Invite); + mocked(cliDm2).getMyMembership.mockReturnValue(KnownMembership.Invite); mocked(client).getRoom.mockImplementation((roomId) => rooms.find((room) => room.roomId === roomId) || null); - client.emit(RoomEvent.MyMembership, cliDm2, Membership.Invite); + client.emit(RoomEvent.MyMembership, cliDm2, KnownMembership.Invite); [dm1, dm2].forEach((d) => { expect( @@ -721,9 +722,9 @@ describe("SpaceStore", () => { await run(); expect(store.spacePanelSpaces).toStrictEqual([space]); - space.getMyMembership.mockReturnValue(Membership.Leave); + space.getMyMembership.mockReturnValue(KnownMembership.Leave); const prom = testUtils.emitPromise(store, UPDATE_TOP_LEVEL_SPACES); - client.emit(RoomEvent.MyMembership, space, Membership.Leave, Membership.Join); + client.emit(RoomEvent.MyMembership, space, KnownMembership.Leave, KnownMembership.Join); await prom; expect(store.spacePanelSpaces).toStrictEqual([]); }); @@ -733,7 +734,7 @@ describe("SpaceStore", () => { expect(store.spacePanelSpaces).toStrictEqual([]); expect(store.invitedSpaces).toStrictEqual([]); const space = mkSpace(space1); - space.getMyMembership.mockReturnValue(Membership.Invite); + space.getMyMembership.mockReturnValue(KnownMembership.Invite); const prom = testUtils.emitPromise(store, UPDATE_INVITED_SPACES); client.emit(ClientEvent.Room, space); await prom; @@ -743,14 +744,14 @@ describe("SpaceStore", () => { it("updates state when space invite is accepted", async () => { const space = mkSpace(space1); - space.getMyMembership.mockReturnValue(Membership.Invite); + space.getMyMembership.mockReturnValue(KnownMembership.Invite); await run(); expect(store.spacePanelSpaces).toStrictEqual([]); expect(store.invitedSpaces).toStrictEqual([space]); - space.getMyMembership.mockReturnValue(Membership.Join); + space.getMyMembership.mockReturnValue(KnownMembership.Join); const prom = testUtils.emitPromise(store, UPDATE_TOP_LEVEL_SPACES); - client.emit(RoomEvent.MyMembership, space, Membership.Join, Membership.Invite); + client.emit(RoomEvent.MyMembership, space, KnownMembership.Join, KnownMembership.Invite); await prom; expect(store.spacePanelSpaces).toStrictEqual([space]); expect(store.invitedSpaces).toStrictEqual([]); @@ -758,14 +759,14 @@ describe("SpaceStore", () => { it("updates state when space invite is rejected", async () => { const space = mkSpace(space1); - space.getMyMembership.mockReturnValue(Membership.Invite); + space.getMyMembership.mockReturnValue(KnownMembership.Invite); await run(); expect(store.spacePanelSpaces).toStrictEqual([]); expect(store.invitedSpaces).toStrictEqual([space]); - space.getMyMembership.mockReturnValue(Membership.Leave); + space.getMyMembership.mockReturnValue(KnownMembership.Leave); const prom = testUtils.emitPromise(store, UPDATE_INVITED_SPACES); - client.emit(RoomEvent.MyMembership, space, Membership.Leave, Membership.Invite); + client.emit(RoomEvent.MyMembership, space, KnownMembership.Leave, KnownMembership.Invite); await prom; expect(store.spacePanelSpaces).toStrictEqual([]); expect(store.invitedSpaces).toStrictEqual([]); @@ -783,7 +784,7 @@ describe("SpaceStore", () => { expect(store.isRoomInSpace(MetaSpace.Home, invite1)).toBeFalsy(); const invite = mkRoom(invite1); - invite.getMyMembership.mockReturnValue(Membership.Invite); + invite.getMyMembership.mockReturnValue(KnownMembership.Invite); const prom = testUtils.emitPromise(store, space1); client.emit(ClientEvent.Room, space); await prom; @@ -845,7 +846,7 @@ describe("SpaceStore", () => { room: spaceId, user: client.getUserId()!, skey: user.userId, - content: { membership: Membership.Join }, + content: { membership: KnownMembership.Join }, ts: Date.now(), }); const spaceRoom = client.getRoom(spaceId)!; @@ -926,7 +927,7 @@ describe("SpaceStore", () => { beforeEach(async () => { mkRoom(room1); // not a space mkSpace(space1, [mkSpace(space2).roomId]); - mkSpace(space3).getMyMembership.mockReturnValue(Membership.Invite); + mkSpace(space3).getMyMembership.mockReturnValue(KnownMembership.Invite); await run(); store.setActiveSpace(MetaSpace.Home); expect(store.activeSpace).toBe(MetaSpace.Home); @@ -986,7 +987,7 @@ describe("SpaceStore", () => { const event = mkEvent({ event: true, type: EventType.RoomMember, - content: { membership: Membership.Join }, + content: { membership: KnownMembership.Join }, skey: dm1Partner.userId, user: dm1Partner.userId, room: space1, @@ -994,7 +995,7 @@ describe("SpaceStore", () => { space.getMember.mockImplementation((userId) => { if (userId === dm1Partner.userId) { const member = new RoomMember(space1, dm1Partner.userId); - member.membership = Membership.Join; + member.membership = KnownMembership.Join; return member; } return null; @@ -1249,15 +1250,15 @@ describe("SpaceStore", () => { // receive invite to space const rootSpace = mkSpace(space1, [room1, room2, space2]); - rootSpace.getMyMembership.mockReturnValue(Membership.Invite); + rootSpace.getMyMembership.mockReturnValue(KnownMembership.Invite); client.emit(ClientEvent.Room, rootSpace); jest.runOnlyPendingTimers(); expect(SpaceStore.instance.invitedSpaces).toStrictEqual([rootSpace]); expect(SpaceStore.instance.spacePanelSpaces).toStrictEqual([]); // accept invite to space - rootSpace.getMyMembership.mockReturnValue(Membership.Join); - client.emit(RoomEvent.MyMembership, rootSpace, Membership.Join, Membership.Invite); + rootSpace.getMyMembership.mockReturnValue(KnownMembership.Join); + client.emit(RoomEvent.MyMembership, rootSpace, KnownMembership.Join, KnownMembership.Invite); jest.runOnlyPendingTimers(); expect(SpaceStore.instance.invitedSpaces).toStrictEqual([]); expect(SpaceStore.instance.spacePanelSpaces).toStrictEqual([rootSpace]); @@ -1265,7 +1266,7 @@ describe("SpaceStore", () => { // join room in space expect(SpaceStore.instance.isRoomInSpace(space1, room1)).toBeFalsy(); const rootSpaceRoom1 = mkRoom(room1); - rootSpaceRoom1.getMyMembership.mockReturnValue(Membership.Join); + rootSpaceRoom1.getMyMembership.mockReturnValue(KnownMembership.Join); client.emit(ClientEvent.Room, rootSpaceRoom1); jest.runOnlyPendingTimers(); expect(SpaceStore.instance.invitedSpaces).toStrictEqual([]); @@ -1279,7 +1280,7 @@ describe("SpaceStore", () => { // receive room invite expect(SpaceStore.instance.isRoomInSpace(space1, room2)).toBeFalsy(); const rootSpaceRoom2 = mkRoom(room2); - rootSpaceRoom2.getMyMembership.mockReturnValue(Membership.Invite); + rootSpaceRoom2.getMyMembership.mockReturnValue(KnownMembership.Invite); client.emit(ClientEvent.Room, rootSpaceRoom2); jest.runOnlyPendingTimers(); expect(SpaceStore.instance.invitedSpaces).toStrictEqual([]); @@ -1292,9 +1293,9 @@ describe("SpaceStore", () => { // start DM in space const myRootSpaceMember = new RoomMember(space1, testUserId); - myRootSpaceMember.membership = Membership.Join; + myRootSpaceMember.membership = KnownMembership.Join; const rootSpaceFriend = new RoomMember(space1, dm1Partner.userId); - rootSpaceFriend.membership = Membership.Join; + rootSpaceFriend.membership = KnownMembership.Join; rootSpace.getMembers.mockReturnValue([myRootSpaceMember, rootSpaceFriend]); rootSpace.getMember.mockImplementation((userId) => { switch (userId) { @@ -1310,7 +1311,7 @@ describe("SpaceStore", () => { event: true, type: EventType.RoomMember, content: { - membership: Membership.Join, + membership: KnownMembership.Join, }, skey: dm1Partner.userId, user: dm1Partner.userId, @@ -1320,7 +1321,7 @@ describe("SpaceStore", () => { jest.runOnlyPendingTimers(); expect(SpaceStore.instance.getSpaceFilteredUserIds(space1)!.has(dm1Partner.userId)).toBeTruthy(); const dm1Room = mkRoom(dm1); - dm1Room.getMyMembership.mockReturnValue(Membership.Join); + dm1Room.getMyMembership.mockReturnValue(KnownMembership.Join); client.emit(ClientEvent.Room, dm1Room); jest.runOnlyPendingTimers(); expect(SpaceStore.instance.invitedSpaces).toStrictEqual([]); @@ -1333,7 +1334,7 @@ describe("SpaceStore", () => { // join subspace const subspace = mkSpace(space2); - subspace.getMyMembership.mockReturnValue(Membership.Join); + subspace.getMyMembership.mockReturnValue(KnownMembership.Join); const prom = testUtils.emitPromise(SpaceStore.instance, space1); client.emit(ClientEvent.Room, subspace); jest.runOnlyPendingTimers(); diff --git a/test/stores/notifications/RoomNotificationState-test.ts b/test/stores/notifications/RoomNotificationState-test.ts index e94a84ac048..aa96fdfc001 100644 --- a/test/stores/notifications/RoomNotificationState-test.ts +++ b/test/stores/notifications/RoomNotificationState-test.ts @@ -22,6 +22,7 @@ import { NotificationCountType, EventType, MatrixEvent, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; @@ -119,7 +120,7 @@ describe("RoomNotificationState", () => { muteRoom(room); setUnreads(room, 1234, 0); - room.updateMyMembership(Membership.Join); // emit + room.updateMyMembership(KnownMembership.Join); // emit expect(roomNotifState.level).toBe(NotificationLevel.None); expect(roomNotifState.symbol).toBe(null); @@ -129,7 +130,7 @@ describe("RoomNotificationState", () => { it("suggests a red ! if the user has been invited to a room", () => { const roomNotifState = new RoomNotificationState(room, false); - room.updateMyMembership(Membership.Invite); // emit + room.updateMyMembership(KnownMembership.Invite); // emit expect(roomNotifState.level).toBe(NotificationLevel.Highlight); expect(roomNotifState.symbol).toBe("!"); @@ -140,7 +141,7 @@ describe("RoomNotificationState", () => { const roomNotifState = new RoomNotificationState(room, false); setUnreads(room, 4321, 0); - room.updateMyMembership(Membership.Join); // emit + room.updateMyMembership(KnownMembership.Join); // emit expect(roomNotifState.level).toBe(NotificationLevel.Notification); expect(roomNotifState.symbol).toBe(null); @@ -151,7 +152,7 @@ describe("RoomNotificationState", () => { const roomNotifState = new RoomNotificationState(room, false); setUnreads(room, 0, 69); - room.updateMyMembership(Membership.Join); // emit + room.updateMyMembership(KnownMembership.Join); // emit expect(roomNotifState.level).toBe(NotificationLevel.Highlight); expect(roomNotifState.symbol).toBe(null); @@ -171,7 +172,7 @@ describe("RoomNotificationState", () => { ); addThread(room); - room.updateMyMembership(Membership.Join); // emit + room.updateMyMembership(KnownMembership.Join); // emit expect(roomNotifState.level).toBe(NotificationLevel.Activity); expect(roomNotifState.symbol).toBe(null); diff --git a/test/stores/room-list/RoomListStore-test.ts b/test/stores/room-list/RoomListStore-test.ts index 4057cb13367..43315e03aa7 100644 --- a/test/stores/room-list/RoomListStore-test.ts +++ b/test/stores/room-list/RoomListStore-test.ts @@ -18,6 +18,7 @@ import { ConditionKind, EventType, IPushRule, + KnownMembership, MatrixEvent, PendingEventOrdering, PushRuleActionName, @@ -123,8 +124,8 @@ describe("RoomListStore", () => { // When we tell it we joined a new room that has an old room as // predecessor in the create event const payload = { - oldMembership: Membership.Invite, - membership: Membership.Join, + oldMembership: KnownMembership.Invite, + membership: KnownMembership.Join, room: roomWithCreatePredecessor, }; store.onDispatchMyMembership(payload); @@ -142,8 +143,8 @@ describe("RoomListStore", () => { // When we tell it we joined a new room with no predecessor const payload = { - oldMembership: Membership.Invite, - membership: Membership.Join, + oldMembership: KnownMembership.Invite, + membership: KnownMembership.Join, room: roomNoPredecessor, }; store.onDispatchMyMembership(payload); @@ -159,9 +160,9 @@ describe("RoomListStore", () => { const room1 = new Room("!r1:e.com", client, userId, { pendingEventOrdering: PendingEventOrdering.Detached }); const room2 = new Room("!r2:e.com", client, userId, { pendingEventOrdering: PendingEventOrdering.Detached }); const room3 = new Room("!r3:e.com", client, userId, { pendingEventOrdering: PendingEventOrdering.Detached }); - room1.updateMyMembership(Membership.Join); - room2.updateMyMembership(Membership.Join); - room3.updateMyMembership(Membership.Join); + room1.updateMyMembership(KnownMembership.Join); + room2.updateMyMembership(KnownMembership.Join); + room3.updateMyMembership(KnownMembership.Join); DMRoomMap.makeShared(client); const { store } = createStore(); client.getVisibleRooms = jest.fn().mockReturnValue([room1, room2, room3]); @@ -259,8 +260,8 @@ describe("RoomListStore", () => { // When we tell it we joined a new room that has an old room as // predecessor in the create event const payload = { - oldMembership: Membership.Invite, - membership: Membership.Join, + oldMembership: KnownMembership.Invite, + membership: KnownMembership.Join, room: roomWithPredecessorEvent, }; store.onDispatchMyMembership(payload); diff --git a/test/stores/room-list/algorithms/Algorithm-test.ts b/test/stores/room-list/algorithms/Algorithm-test.ts index 315c3690e0f..5c9db560d2b 100644 --- a/test/stores/room-list/algorithms/Algorithm-test.ts +++ b/test/stores/room-list/algorithms/Algorithm-test.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { mocked, MockedObject } from "jest-mock"; -import { PendingEventOrdering, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, PendingEventOrdering, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; import { Widget } from "matrix-widget-api"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; @@ -82,7 +82,7 @@ describe("Algorithm", () => { client.reEmitter.reEmit(room, [RoomStateEvent.Events]); client.reEmitter.reEmit(roomWithCall, [RoomStateEvent.Events]); - for (const room of client.getRooms()) jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); + for (const room of client.getRooms()) jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Join); algorithm.setKnownRooms(client.getRooms()); setupAsyncStoreWithClient(CallStore.instance, client); diff --git a/test/stores/room-list/algorithms/RecentAlgorithm-test.ts b/test/stores/room-list/algorithms/RecentAlgorithm-test.ts index 227cdbb0e8d..5254d632b97 100644 --- a/test/stores/room-list/algorithms/RecentAlgorithm-test.ts +++ b/test/stores/room-list/algorithms/RecentAlgorithm-test.ts @@ -14,13 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { Room, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix"; import { mkMessage, mkRoom, stubClient } from "../../../test-utils"; import { MatrixClientPeg } from "../../../../src/MatrixClientPeg"; import "../../../../src/stores/room-list/RoomListStore"; import { RecentAlgorithm } from "../../../../src/stores/room-list/algorithms/tag-sorting/RecentAlgorithm"; -import { EffectiveMembership } from "../../../../src/utils/membership"; import { makeThreadEvent, mkThread } from "../../../test-utils/threads"; import { DefaultTagID } from "../../../../src/stores/room-list/models"; @@ -53,7 +52,7 @@ describe("RecentAlgorithm", () => { event: true, }); - room.getMyMembership = () => Membership.Join; + room.getMyMembership = () => KnownMembership.Join; room.addLiveEvents([event1]); expect(algorithm.getLastTs(room, "@jane:matrix.org")).toBe(5); @@ -74,7 +73,7 @@ describe("RecentAlgorithm", () => { it("works when not a member", () => { const room = mkRoom(cli, "!new:example.org"); - room.getMyMembership.mockReturnValue(Membership.Invite); + room.getMyMembership.mockReturnValue(KnownMembership.Invite); expect(algorithm.getLastTs(room, "@john:matrix.org")).toBe(Number.MAX_SAFE_INTEGER); }); }); @@ -84,8 +83,8 @@ describe("RecentAlgorithm", () => { const room1 = new Room("room1", cli, "@bob:matrix.org"); const room2 = new Room("room2", cli, "@bob:matrix.org"); - room1.getMyMembership = () => Membership.Join; - room2.getMyMembership = () => Membership.Join; + room1.getMyMembership = () => KnownMembership.Join; + room2.getMyMembership = () => KnownMembership.Join; const evt = mkMessage({ room: room1.roomId, @@ -112,8 +111,8 @@ describe("RecentAlgorithm", () => { const room1 = new Room("room1", cli, "@bob:matrix.org"); const room2 = new Room("room2", cli, "@bob:matrix.org"); - room1.getMyMembership = () => Membership.Join; - room2.getMyMembership = () => Membership.Join; + room1.getMyMembership = () => KnownMembership.Join; + room2.getMyMembership = () => KnownMembership.Join; const evt = mkMessage({ room: room1.roomId, @@ -142,8 +141,8 @@ describe("RecentAlgorithm", () => { const room1 = new Room("room1", cli, "@bob:matrix.org"); const room2 = new Room("room2", cli, "@bob:matrix.org"); - room1.getMyMembership = () => Membership.Join; - room2.getMyMembership = () => Membership.Join; + room1.getMyMembership = () => KnownMembership.Join; + room2.getMyMembership = () => KnownMembership.Join; const { rootEvent, events: events1 } = mkThread({ room: room1, diff --git a/test/test-utils/room.ts b/test/test-utils/room.ts index 4d533e174af..bf4cc5b9e6b 100644 --- a/test/test-utils/room.ts +++ b/test/test-utils/room.ts @@ -15,14 +15,14 @@ limitations under the License. */ import { MockedObject } from "jest-mock"; -import { MatrixClient, MatrixEvent, EventType, Room, EventTimeline } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, MatrixEvent, EventType, Room, EventTimeline, KnownMembership } from "matrix-js-sdk/src/matrix"; import { IRoomState } from "../../src/components/structures/RoomView"; import { TimelineRenderingType } from "../../src/contexts/RoomContext"; import { Layout } from "../../src/settings/enums/Layout"; import { mkEvent } from "./test-utils"; -export const makeMembershipEvent = (roomId: string, userId: string, membership = Membership.Join) => +export const makeMembershipEvent = (roomId: string, userId: string, membership = KnownMembership.Join) => mkEvent({ event: true, type: EventType.RoomMember, diff --git a/test/test-utils/test-utils.ts b/test/test-utils/test-utils.ts index 1c9e3e499cb..35595a60fe0 100644 --- a/test/test-utils/test-utils.ts +++ b/test/test-utils/test-utils.ts @@ -38,6 +38,7 @@ import { JoinRule, IEventDecryptionResult, OidcClientConfig, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { normalize } from "matrix-js-sdk/src/utils"; import { ReEmitter } from "matrix-js-sdk/src/ReEmitter"; @@ -49,7 +50,7 @@ import { MatrixRTCSessionManager } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSe // eslint-disable-next-line no-restricted-imports import { MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; -import type { GroupCall } from "matrix-js-sdk/src/matrix"; +import type { GroupCall, Membership } from "matrix-js-sdk/src/matrix"; import { MatrixClientPeg as peg } from "../../src/MatrixClientPeg"; import { ValidatedServerConfig } from "../../src/utils/ValidatedServerConfig"; import { EnhancedMap } from "../../src/utils/maps"; @@ -391,7 +392,7 @@ export function mkEvent(opts: MakeEventProps): MatrixEvent { if (!mxEvent.sender && opts.user && opts.room) { mxEvent.sender = { userId: opts.user, - membership: Membership.Join, + membership: KnownMembership.Join, name: opts.user, rawDisplayName: opts.user, roomId: opts.room, @@ -506,7 +507,7 @@ export function mkMembership( export function mkRoomMember( roomId: string, userId: string, - membership = Membership.Join, + membership = KnownMembership.Join, isKicked = false, prevMemberContent: Partial = {}, ): RoomMember { @@ -654,7 +655,7 @@ export function mkStubRoom( getMembers: jest.fn().mockReturnValue([]), getMembersWithMembership: jest.fn().mockReturnValue([]), getMxcAvatarUrl: () => "mxc://avatar.url/room.png", - getMyMembership: jest.fn().mockReturnValue(Membership.Join), + getMyMembership: jest.fn().mockReturnValue(KnownMembership.Join), getPendingEvents: () => [] as MatrixEvent[], getReceiptsForEvent: jest.fn().mockReturnValue([]), getRecommendedVersion: jest.fn().mockReturnValue(Promise.resolve("")), @@ -794,7 +795,7 @@ export const mkRoomMemberJoinEvent = (user: string, room: string, content?: ICon event: true, type: EventType.RoomMember, content: { - membership: Membership.Join, + membership: KnownMembership.Join, ...content, }, skey: user, diff --git a/test/utils/MultiInviter-test.ts b/test/utils/MultiInviter-test.ts index e61a3faac64..8c610bb21e8 100644 --- a/test/utils/MultiInviter-test.ts +++ b/test/utils/MultiInviter-test.ts @@ -15,7 +15,15 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { EventType, MatrixClient, MatrixError, MatrixEvent, Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { + EventType, + KnownMembership, + MatrixClient, + MatrixError, + MatrixEvent, + Room, + RoomMember, +} from "matrix-js-sdk/src/matrix"; import { MatrixClientPeg } from "../../src/MatrixClientPeg"; import Modal, { ComponentType, ComponentProps } from "../../src/Modal"; @@ -168,10 +176,10 @@ describe("MultiInviter", () => { const room = new Room(ROOMID, client, client.getSafeUserId()); mocked(client.getRoom).mockReturnValue(room); const ourMember = new RoomMember(ROOMID, client.getSafeUserId()); - ourMember.membership = Membership.Join; + ourMember.membership = KnownMembership.Join; ourMember.powerLevel = 100; const member = new RoomMember(ROOMID, MXID1); - member.membership = Membership.Ban; + member.membership = KnownMembership.Ban; member.powerLevel = 0; room.getMember = (userId: string) => { if (userId === client.getSafeUserId()) return ourMember; diff --git a/test/utils/direct-messages-test.ts b/test/utils/direct-messages-test.ts index 529fa547a15..b7e653bef3a 100644 --- a/test/utils/direct-messages-test.ts +++ b/test/utils/direct-messages-test.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { ClientEvent, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { ClientEvent, KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import DMRoomMap from "../../src/utils/DMRoomMap"; @@ -86,7 +86,7 @@ describe("direct-messages", () => { }); room1 = new Room("!room1:example.com", mockClient, userId1); - room1.getMyMembership = () => Membership.Join; + room1.getMyMembership = () => KnownMembership.Join; localRoom = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test", mockClient, userId1); diff --git a/test/utils/dm/createDmLocalRoom-test.ts b/test/utils/dm/createDmLocalRoom-test.ts index dec7cb98e79..921c2fd5bb2 100644 --- a/test/utils/dm/createDmLocalRoom-test.ts +++ b/test/utils/dm/createDmLocalRoom-test.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { EventType, KNOWN_SAFE_ROOM_VERSION, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { EventType, KNOWN_SAFE_ROOM_VERSION, KnownMembership, MatrixClient } from "matrix-js-sdk/src/matrix"; import { canEncryptToAllUsers } from "../../../src/createRoom"; import { LocalRoom, LOCAL_ROOM_ID_PREFIX } from "../../../src/models/LocalRoom"; @@ -37,16 +37,16 @@ function assertLocalRoom(room: LocalRoom, targets: Member[], encrypted: boolean) expect(room.name).toBe(targets.length ? targets[0].name : "Empty Room"); expect(room.encrypted).toBe(encrypted); expect(room.targets).toEqual(targets); - expect(room.getMyMembership()).toBe(Membership.Join); + expect(room.getMyMembership()).toBe(KnownMembership.Join); const roomCreateEvent = room.currentState.getStateEvents(EventType.RoomCreate)[0]; expect(roomCreateEvent).toBeDefined(); expect(roomCreateEvent.getContent()["room_version"]).toBe(KNOWN_SAFE_ROOM_VERSION); // check that the user and all targets are joined - expect(room.getMember("@userId:matrix.org").membership).toBe(Membership.Join); + expect(room.getMember("@userId:matrix.org")?.membership).toBe(KnownMembership.Join); targets.forEach((target: Member) => { - expect(room.getMember(target.userId).membership).toBe(Membership.Join); + expect(room.getMember(target.userId)?.membership).toBe(KnownMembership.Join); }); if (encrypted) { diff --git a/test/utils/dm/findDMForUser-test.ts b/test/utils/dm/findDMForUser-test.ts index 75b3e001d76..45dc2e3d6ba 100644 --- a/test/utils/dm/findDMForUser-test.ts +++ b/test/utils/dm/findDMForUser-test.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; import DMRoomMap from "../../../src/utils/DMRoomMap"; import { createTestClient, makeMembershipEvent, mkThirdPartyInviteEvent } from "../../test-utils"; @@ -51,32 +51,32 @@ describe("findDMForUser", () => { mocked(getFunctionalMembers).mockReturnValue([botId]); room1 = new Room("!room1:example.com", mockClient, userId1); - room1.getMyMembership = () => Membership.Join; + room1.getMyMembership = () => KnownMembership.Join; room1.currentState.setStateEvents([ - makeMembershipEvent(room1.roomId, userId1, Membership.Join), - makeMembershipEvent(room1.roomId, userId2, Membership.Join), + makeMembershipEvent(room1.roomId, userId1, KnownMembership.Join), + makeMembershipEvent(room1.roomId, userId2, KnownMembership.Join), ]); // this should not be a DM room because it is a local room room2 = new LocalRoom("!room2:example.com", mockClient, userId1); - room2.getMyMembership = () => Membership.Join; + room2.getMyMembership = () => KnownMembership.Join; room2.getLastActiveTimestamp = () => 100; room3 = new Room("!room3:example.com", mockClient, userId1); - room3.getMyMembership = () => Membership.Join; + room3.getMyMembership = () => KnownMembership.Join; room3.currentState.setStateEvents([ - makeMembershipEvent(room3.roomId, userId1, Membership.Join), - makeMembershipEvent(room3.roomId, userId2, Membership.Join), + makeMembershipEvent(room3.roomId, userId1, KnownMembership.Join), + makeMembershipEvent(room3.roomId, userId2, KnownMembership.Join), // Adding the bot user here. Should be excluded when determining if the room is a DM. - makeMembershipEvent(room3.roomId, botId, Membership.Join), + makeMembershipEvent(room3.roomId, botId, KnownMembership.Join), ]); // this should not be a DM room because it has only one joined user room4 = new Room("!room4:example.com", mockClient, userId1); - room4.getMyMembership = () => Membership.Join; + room4.getMyMembership = () => KnownMembership.Join; room4.currentState.setStateEvents([ - makeMembershipEvent(room4.roomId, userId1, Membership.Invite), - makeMembershipEvent(room4.roomId, userId2, Membership.Join), + makeMembershipEvent(room4.roomId, userId1, KnownMembership.Invite), + makeMembershipEvent(room4.roomId, userId2, KnownMembership.Join), ]); // this should not be a DM room because it has no users @@ -85,17 +85,17 @@ describe("findDMForUser", () => { // room not correctly stored in userId → room map; should be found by the "all rooms" fallback room6 = new Room("!room6:example.com", mockClient, userId1); - room6.getMyMembership = () => Membership.Join; + room6.getMyMembership = () => KnownMembership.Join; room6.currentState.setStateEvents([ - makeMembershipEvent(room6.roomId, userId1, Membership.Join), - makeMembershipEvent(room6.roomId, userId3, Membership.Join), + makeMembershipEvent(room6.roomId, userId1, KnownMembership.Join), + makeMembershipEvent(room6.roomId, userId3, KnownMembership.Join), ]); // room with pending third-party invite room7 = new Room("!room7:example.com", mockClient, userId1); - room7.getMyMembership = () => Membership.Join; + room7.getMyMembership = () => KnownMembership.Join; room7.currentState.setStateEvents([ - makeMembershipEvent(room7.roomId, userId1, Membership.Join), + makeMembershipEvent(room7.roomId, userId1, KnownMembership.Join), mkThirdPartyInviteEvent(thirdPartyId, "third-party", room7.roomId), ]); diff --git a/test/utils/export-test.tsx b/test/utils/export-test.tsx index 64204af4235..dd002156e3a 100644 --- a/test/utils/export-test.tsx +++ b/test/utils/export-test.tsx @@ -23,6 +23,7 @@ import { RoomMember, RelationType, EventType, + KnownMembership, } from "matrix-js-sdk/src/matrix"; import { MatrixClientPeg } from "../../src/MatrixClientPeg"; @@ -201,8 +202,8 @@ describe("export", function () { getMxcAvatarUrl: () => "mxc://avatar.url/image.png", } as unknown as RoomMember, ts: ts0 + i * 1000, - mship: Membership.Join, - prevMship: Membership.Join, + mship: KnownMembership.Join, + prevMship: KnownMembership.Join, name: "A user", }), ); diff --git a/test/utils/local-room-test.ts b/test/utils/local-room-test.ts index 2ebc51e1794..8de7ddfac4f 100644 --- a/test/utils/local-room-test.ts +++ b/test/utils/local-room-test.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; import { LocalRoom, LocalRoomState, LOCAL_ROOM_ID_PREFIX } from "../../src/models/LocalRoom"; import * as localRoomModule from "../../src/utils/local-room"; @@ -36,7 +36,7 @@ describe("local-room", () => { beforeEach(() => { client = createTestClient(); room1 = new Room("!room1:example.com", client, userId1); - room1.getMyMembership = () => Membership.Join; + room1.getMyMembership = () => KnownMembership.Join; localRoom = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test", client, "@test:example.com"); mocked(client.getRoom).mockImplementation((roomId: string) => { if (roomId === localRoom.roomId) { diff --git a/test/utils/localRoom/isRoomReady-test.ts b/test/utils/localRoom/isRoomReady-test.ts index 786104e4460..1d4843196fe 100644 --- a/test/utils/localRoom/isRoomReady-test.ts +++ b/test/utils/localRoom/isRoomReady-test.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { EventType, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { EventType, KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; import { LocalRoom, LOCAL_ROOM_ID_PREFIX } from "../../../src/models/LocalRoom"; import { DirectoryMember } from "../../../src/utils/direct-messages"; @@ -33,7 +33,7 @@ describe("isRoomReady", () => { beforeEach(() => { client = createTestClient(); room1 = new Room("!room1:example.com", client, userId1); - room1.getMyMembership = () => Membership.Join; + room1.getMyMembership = () => KnownMembership.Join; localRoom = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test", client, "@test:example.com"); }); @@ -70,8 +70,8 @@ describe("isRoomReady", () => { describe("and all members have been invited or joined", () => { beforeEach(() => { room1.currentState.setStateEvents([ - makeMembershipEvent(room1.roomId, userId1, Membership.Join), - makeMembershipEvent(room1.roomId, userId2, Membership.Invite), + makeMembershipEvent(room1.roomId, userId1, KnownMembership.Join), + makeMembershipEvent(room1.roomId, userId2, KnownMembership.Invite), ]); }); diff --git a/test/utils/membership-test.ts b/test/utils/membership-test.ts index 24dedd8206d..7ad6f6911a8 100644 --- a/test/utils/membership-test.ts +++ b/test/utils/membership-test.ts @@ -14,7 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixClient, MatrixEvent, Room, RoomMember, RoomState, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { + KnownMembership, + MatrixClient, + MatrixEvent, + Room, + RoomMember, + RoomState, + RoomStateEvent, +} from "matrix-js-sdk/src/matrix"; import { mocked } from "jest-mock"; import { isKnockDenied, waitForMember } from "../../src/utils/membership"; @@ -31,16 +39,18 @@ describe("isKnockDenied", () => { }); it("checks that the user knock has been denied", () => { - const roomMember = mkRoomMember(room.roomId, userId, Membership.Leave, true, { membership: Membership.Knock }); + const roomMember = mkRoomMember(room.roomId, userId, KnownMembership.Leave, true, { + membership: KnownMembership.Knock, + }); jest.spyOn(room, "getMember").mockReturnValue(roomMember); expect(isKnockDenied(room)).toBe(true); }); it.each([ - { membership: Membership.Leave, isKicked: false, prevMembership: Membership.Invite }, - { membership: Membership.Leave, isKicked: true, prevMembership: Membership.Invite }, - { membership: Membership.Leave, isKicked: false, prevMembership: Membership.Join }, - { membership: Membership.Leave, isKicked: true, prevMembership: Membership.Join }, + { membership: KnownMembership.Leave, isKicked: false, prevMembership: KnownMembership.Invite }, + { membership: KnownMembership.Leave, isKicked: true, prevMembership: KnownMembership.Invite }, + { membership: KnownMembership.Leave, isKicked: false, prevMembership: KnownMembership.Join }, + { membership: KnownMembership.Leave, isKicked: true, prevMembership: KnownMembership.Join }, ])("checks that the user knock has been not denied", ({ membership, isKicked, prevMembership }) => { const roomMember = mkRoomMember(room.roomId, userId, membership, isKicked, { membership: prevMembership }); jest.spyOn(room, "getMember").mockReturnValue(roomMember); diff --git a/test/utils/permalinks/Permalinks-test.ts b/test/utils/permalinks/Permalinks-test.ts index be2e206055c..444007f00f5 100644 --- a/test/utils/permalinks/Permalinks-test.ts +++ b/test/utils/permalinks/Permalinks-test.ts @@ -14,7 +14,7 @@ limitations under the License. */ import { EventEmitter } from "events"; -import { Room, RoomMember, EventType, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { Room, RoomMember, EventType, MatrixEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; import { MatrixClientPeg } from "../../../src/MatrixClientPeg"; import { PermalinkParts } from "../../../src/utils/permalinks/PermalinkConstructor"; @@ -45,7 +45,7 @@ describe("Permalinks", function () { members: RoomMember[], serverACLContent?: { deny?: string[]; allow?: string[] }, ): Room { - members.forEach((m) => (m.membership = Membership.Join)); + members.forEach((m) => (m.membership = KnownMembership.Join)); const powerLevelsUsers = members.reduce>((pl, member) => { if (Number.isFinite(member.powerLevel)) { pl[member.userId] = member.powerLevel; @@ -152,11 +152,11 @@ describe("Permalinks", function () { const creator = new RoomPermalinkCreator(room, null); creator.load(); expect(creator.serverCandidates![0]).toBe("pl_95"); - member95.membership = Membership.Leave; + member95.membership = KnownMembership.Leave; // @ts-ignore illegal private property creator.onRoomStateUpdate(); expect(creator.serverCandidates![0]).toBe("pl_75"); - member95.membership = Membership.Join; + member95.membership = KnownMembership.Join; // @ts-ignore illegal private property creator.onRoomStateUpdate(); expect(creator.serverCandidates![0]).toBe("pl_95"); diff --git a/test/utils/room/canInviteTo-test.ts b/test/utils/room/canInviteTo-test.ts index 27c3660ca0e..93a44213d2b 100644 --- a/test/utils/room/canInviteTo-test.ts +++ b/test/utils/room/canInviteTo-test.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { JoinRule, Room } from "matrix-js-sdk/src/matrix"; +import { JoinRule, KnownMembership, Room } from "matrix-js-sdk/src/matrix"; import { shouldShowComponent } from "../../../src/customisations/helpers/UIComponents"; import { UIComponent } from "../../../src/settings/UIFeature"; @@ -39,7 +39,7 @@ describe("canInviteTo()", () => { ...mockClientMethodsUser(userId), }); const room = new Room(roomId, client, userId); - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Join); jest.spyOn(room, "getJoinRule").mockReturnValue(JoinRule.Public); jest.spyOn(room, "canInvite").mockReturnValue(true); return room; @@ -54,7 +54,7 @@ describe("canInviteTo()", () => { it("should return false when current user membership is not joined", () => { const room = makeRoom(); - jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite); + jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Invite); expect(canInviteTo(room)).toEqual(false); }); From d3c0435446545e7d459142d4384869719d5d33b9 Mon Sep 17 00:00:00 2001 From: Andy Balaam Date: Mon, 18 Mar 2024 14:40:52 +0000 Subject: [PATCH 031/235] Adept KnownMembership imports for new location in types --- playwright/e2e/crypto/crypto.spec.ts | 2 +- playwright/e2e/crypto/verification.spec.ts | 3 ++- playwright/e2e/knock/knock-into-room.spec.ts | 3 ++- playwright/e2e/knock/manage-knocks.spec.ts | 2 +- playwright/pages/bot.ts | 3 ++- src/ScalarMessaging.ts | 3 ++- src/SlashCommands.tsx | 10 ++-------- src/TextForEvent.tsx | 2 +- src/VoipUserMapper.ts | 3 ++- src/autocomplete/UserProvider.tsx | 2 +- src/components/structures/RoomView.tsx | 2 +- src/components/structures/SpaceHierarchy.tsx | 2 +- src/components/structures/SpaceRoomView.tsx | 3 ++- src/components/structures/TimelinePanel.tsx | 3 +-- .../structures/grouper/CreationGrouper.tsx | 3 ++- .../views/context_menus/RoomContextMenu.tsx | 3 ++- .../views/dialogs/AddExistingToSpaceDialog.tsx | 3 ++- src/components/views/dialogs/ForwardDialog.tsx | 2 +- src/components/views/dialogs/InviteDialog.tsx | 3 ++- .../views/dialogs/ManageRestrictedJoinRuleDialog.tsx | 3 ++- .../views/dialogs/devtools/ServersInRoom.tsx | 3 ++- .../views/dialogs/spotlight/SpotlightDialog.tsx | 2 +- src/components/views/elements/AppTile.tsx | 3 ++- src/components/views/elements/EventListSummary.tsx | 3 ++- src/components/views/elements/RoomFacePile.tsx | 3 ++- src/components/views/right_panel/TimelineCard.tsx | 2 +- src/components/views/right_panel/UserInfo.tsx | 2 +- src/components/views/rooms/MemberList.tsx | 2 +- src/components/views/rooms/NewRoomIntro.tsx | 3 ++- src/components/views/rooms/RoomInfoLine.tsx | 3 ++- src/components/views/rooms/RoomKnocksBar.tsx | 3 ++- src/components/views/rooms/RoomPreviewBar.tsx | 2 +- src/components/views/rooms/RoomPreviewCard.tsx | 3 ++- src/components/views/rooms/RoomTile.tsx | 3 ++- .../settings/tabs/room/GeneralRoomSettingsTab.tsx | 3 ++- .../settings/tabs/room/PeopleRoomSettingsTab.tsx | 10 ++-------- .../settings/tabs/room/RolesRoomSettingsTab.tsx | 11 ++--------- .../settings/tabs/user/SecurityUserSettingsTab.tsx | 5 +++-- src/components/views/spaces/SpaceTreeLevel.tsx | 3 ++- src/hooks/useRoomMembers.ts | 3 ++- src/hooks/useSpaceResults.ts | 3 ++- src/indexing/EventIndex.ts | 2 +- src/models/Call.ts | 3 +-- src/shouldHideEvent.ts | 3 ++- src/stores/BreadcrumbsStore.ts | 3 ++- src/stores/MemberListStore.ts | 3 ++- src/stores/OwnBeaconStore.ts | 2 +- src/stores/RoomViewStore.tsx | 3 ++- src/stores/notifications/RoomNotificationState.ts | 3 ++- src/stores/room-list/RoomListStore.ts | 3 ++- src/stores/room-list/algorithms/Algorithm.ts | 3 ++- src/stores/spaces/SpaceStore.ts | 2 +- src/stores/widgets/StopGapWidget.ts | 10 ++-------- src/utils/DMRoomMap.ts | 3 ++- src/utils/MultiInviter.ts | 3 ++- src/utils/RoomUpgrade.ts | 3 ++- src/utils/SortMembers.ts | 3 ++- src/utils/WidgetUtils.ts | 10 ++-------- src/utils/dm/createDmLocalRoom.ts | 9 ++------- src/utils/dm/findDMForUser.ts | 3 ++- src/utils/membership.ts | 12 ++---------- src/utils/permalinks/Permalinks.ts | 3 ++- src/utils/room/canInviteTo.ts | 3 ++- src/utils/space.tsx | 3 ++- test/LegacyCallHandler-test.ts | 2 +- test/RoomNotifs-test.ts | 2 +- test/SlashCommands-test.tsx | 3 ++- test/TextForEvent-test.ts | 2 +- test/components/structures/MessagePanel-test.tsx | 3 ++- test/components/structures/RoomView-test.tsx | 2 +- test/components/structures/SpaceHierarchy-test.tsx | 3 ++- test/components/structures/TimelinePanel-test.tsx | 2 +- .../views/context_menus/RoomContextMenu-test.tsx | 3 ++- .../context_menus/RoomGeneralContextMenu-test.tsx | 3 ++- .../views/dialogs/ConfirmUserActionDialog-test.tsx | 2 +- test/components/views/dialogs/InviteDialog-test.tsx | 3 ++- .../views/dialogs/SpotlightDialog-test.tsx | 2 +- .../views/elements/EventListSummary-test.tsx | 3 ++- test/components/views/elements/FacePile-test.tsx | 2 +- test/components/views/elements/RoomFacePile-test.tsx | 2 +- .../views/right_panel/RoomSummaryCard-test.tsx | 3 ++- test/components/views/right_panel/UserInfo-test.tsx | 2 +- .../components/views/rooms/LegacyRoomHeader-test.tsx | 2 +- test/components/views/rooms/MemberList-test.tsx | 11 ++--------- .../UnreadNotificationBadge-test.tsx | 2 +- test/components/views/rooms/RoomHeader-test.tsx | 2 +- test/components/views/rooms/RoomKnocksBar-test.tsx | 2 +- test/components/views/rooms/RoomPreviewBar-test.tsx | 3 ++- test/components/views/rooms/RoomPreviewCard-test.tsx | 3 ++- test/components/views/rooms/RoomTile-test.tsx | 2 +- .../views/settings/JoinRuleSettings-test.tsx | 2 +- .../tabs/room/PeopleRoomSettingsTab-test.tsx | 2 +- .../settings/tabs/room/RolesRoomSettingsTab-test.tsx | 11 ++--------- test/hooks/useRoomMembers-test.tsx | 3 ++- test/hooks/useUnreadNotifications-test.ts | 9 ++------- test/models/Call-test.ts | 11 ++--------- test/stores/MemberListStore-test.ts | 3 ++- test/stores/OwnBeaconStore-test.ts | 2 +- test/stores/SpaceStore-test.ts | 2 +- .../notifications/RoomNotificationState-test.ts | 2 +- test/stores/room-list/RoomListStore-test.ts | 2 +- test/stores/room-list/algorithms/Algorithm-test.ts | 3 ++- .../room-list/algorithms/RecentAlgorithm-test.ts | 3 ++- test/test-utils/room.ts | 3 ++- test/test-utils/test-utils.ts | 5 +++-- test/utils/MultiInviter-test.ts | 11 ++--------- test/utils/direct-messages-test.ts | 3 ++- test/utils/dm/createDmLocalRoom-test.ts | 3 ++- test/utils/dm/findDMForUser-test.ts | 3 ++- test/utils/export-test.tsx | 2 +- test/utils/local-room-test.ts | 3 ++- test/utils/localRoom/isRoomReady-test.ts | 3 ++- test/utils/membership-test.ts | 11 ++--------- test/utils/permalinks/Permalinks-test.ts | 3 ++- test/utils/room/canInviteTo-test.ts | 3 ++- 115 files changed, 193 insertions(+), 216 deletions(-) diff --git a/playwright/e2e/crypto/crypto.spec.ts b/playwright/e2e/crypto/crypto.spec.ts index 9d9b461cb43..515cddbc1b9 100644 --- a/playwright/e2e/crypto/crypto.spec.ts +++ b/playwright/e2e/crypto/crypto.spec.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { KnownMembership } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import type { Page } from "@playwright/test"; import { test, expect } from "../../element-web-test"; diff --git a/playwright/e2e/crypto/verification.spec.ts b/playwright/e2e/crypto/verification.spec.ts index 15f1fff68e5..0c8047f4a19 100644 --- a/playwright/e2e/crypto/verification.spec.ts +++ b/playwright/e2e/crypto/verification.spec.ts @@ -15,7 +15,8 @@ limitations under the License. */ import jsQR from "jsqr"; -import { KnownMembership, type Preset, type Visibility } from "matrix-js-sdk/src/matrix"; +import { type Preset, type Visibility } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import type { JSHandle, Locator, Page } from "@playwright/test"; import type { VerificationRequest, Verifier } from "matrix-js-sdk/src/crypto-api"; diff --git a/playwright/e2e/knock/knock-into-room.spec.ts b/playwright/e2e/knock/knock-into-room.spec.ts index c6eff9d6eef..ac552ede2f5 100644 --- a/playwright/e2e/knock/knock-into-room.spec.ts +++ b/playwright/e2e/knock/knock-into-room.spec.ts @@ -16,7 +16,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { KnownMembership, type Visibility } from "matrix-js-sdk/src/matrix"; +import { type Visibility } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { test, expect } from "../../element-web-test"; import { waitForRoom } from "../utils"; diff --git a/playwright/e2e/knock/manage-knocks.spec.ts b/playwright/e2e/knock/manage-knocks.spec.ts index 82c1c33bb13..d1bf7ee92bb 100644 --- a/playwright/e2e/knock/manage-knocks.spec.ts +++ b/playwright/e2e/knock/manage-knocks.spec.ts @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { KnownMembership } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { test, expect } from "../../element-web-test"; import { waitForRoom } from "../utils"; diff --git a/playwright/pages/bot.ts b/playwright/pages/bot.ts index 0144763db7d..d9fbc717bb6 100644 --- a/playwright/pages/bot.ts +++ b/playwright/pages/bot.ts @@ -16,7 +16,8 @@ limitations under the License. import { JSHandle, Page } from "@playwright/test"; import { uniqueId } from "lodash"; -import { KnownMembership, type MatrixClient } from "matrix-js-sdk/src/matrix"; +import { type MatrixClient } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import type { Logger } from "matrix-js-sdk/src/logger"; import type { SecretStorageKeyDescription } from "matrix-js-sdk/src/secret-storage"; diff --git a/src/ScalarMessaging.ts b/src/ScalarMessaging.ts index 8ca7010092e..d9f67f87efa 100644 --- a/src/ScalarMessaging.ts +++ b/src/ScalarMessaging.ts @@ -291,7 +291,8 @@ Response: */ -import { IContent, MatrixEvent, IEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { IContent, MatrixEvent, IEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { MatrixClientPeg } from "./MatrixClientPeg"; diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index aa5ed4f3204..59dffea88af 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -18,14 +18,8 @@ limitations under the License. */ import * as React from "react"; -import { - User, - IContent, - Direction, - ContentHelpers, - MRoomTopicEventContent, - KnownMembership, -} from "matrix-js-sdk/src/matrix"; +import { User, IContent, Direction, ContentHelpers, MRoomTopicEventContent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import dis from "./dispatcher/dispatcher"; diff --git a/src/TextForEvent.tsx b/src/TextForEvent.tsx index be85ac64739..96eb38f01b1 100644 --- a/src/TextForEvent.tsx +++ b/src/TextForEvent.tsx @@ -25,8 +25,8 @@ import { MsgType, M_POLL_START, M_POLL_END, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { removeDirectionOverrideChars } from "matrix-js-sdk/src/utils"; import { PollStartEvent } from "matrix-js-sdk/src/extensible_events_v1/PollStartEvent"; diff --git a/src/VoipUserMapper.ts b/src/VoipUserMapper.ts index 26080de4a21..09e7cbd1af7 100644 --- a/src/VoipUserMapper.ts +++ b/src/VoipUserMapper.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room, EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, EventType } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { ensureVirtualRoomExists } from "./createRoom"; diff --git a/src/autocomplete/UserProvider.tsx b/src/autocomplete/UserProvider.tsx index 05788ce06ad..f362ff75eb5 100644 --- a/src/autocomplete/UserProvider.tsx +++ b/src/autocomplete/UserProvider.tsx @@ -27,8 +27,8 @@ import { RoomState, RoomStateEvent, IRoomTimelineData, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { MatrixClientPeg } from "../MatrixClientPeg"; import QueryMatcher from "./QueryMatcher"; diff --git a/src/components/structures/RoomView.tsx b/src/components/structures/RoomView.tsx index 412ef38e4c5..8d625fffb45 100644 --- a/src/components/structures/RoomView.tsx +++ b/src/components/structures/RoomView.tsx @@ -37,8 +37,8 @@ import { MatrixError, ISearchResults, THREAD_RELATION_TYPE, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { CallState, MatrixCall } from "matrix-js-sdk/src/webrtc/call"; import { throttle } from "lodash"; diff --git a/src/components/structures/SpaceHierarchy.tsx b/src/components/structures/SpaceHierarchy.tsx index 81cea88a02d..6889988be37 100644 --- a/src/components/structures/SpaceHierarchy.tsx +++ b/src/components/structures/SpaceHierarchy.tsx @@ -41,8 +41,8 @@ import { HistoryVisibility, HierarchyRelation, HierarchyRoom, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { RoomHierarchy } from "matrix-js-sdk/src/room-hierarchy"; import classNames from "classnames"; import { sortBy, uniqBy } from "lodash"; diff --git a/src/components/structures/SpaceRoomView.tsx b/src/components/structures/SpaceRoomView.tsx index 95210e68793..edc857edaf0 100644 --- a/src/components/structures/SpaceRoomView.tsx +++ b/src/components/structures/SpaceRoomView.tsx @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { EventType, RoomType, JoinRule, Preset, Room, RoomEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { EventType, RoomType, JoinRule, Preset, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import React, { useCallback, useContext, useRef, useState } from "react"; diff --git a/src/components/structures/TimelinePanel.tsx b/src/components/structures/TimelinePanel.tsx index 11c288d92f5..739cd631119 100644 --- a/src/components/structures/TimelinePanel.tsx +++ b/src/components/structures/TimelinePanel.tsx @@ -38,9 +38,8 @@ import { Thread, ThreadEvent, ReceiptType, - KnownMembership, - Membership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Membership } from "matrix-js-sdk/src/types"; import { debounce, findLastIndex, throttle } from "lodash"; import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/components/structures/grouper/CreationGrouper.tsx b/src/components/structures/grouper/CreationGrouper.tsx index e50b8801958..fa91a1bd90c 100644 --- a/src/components/structures/grouper/CreationGrouper.tsx +++ b/src/components/structures/grouper/CreationGrouper.tsx @@ -15,7 +15,8 @@ limitations under the License. */ import React, { ReactNode } from "react"; -import { EventType, KnownMembership, M_BEACON_INFO, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { EventType, M_BEACON_INFO, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { BaseGrouper } from "./BaseGrouper"; import MessagePanel, { WrappedEvent } from "../MessagePanel"; diff --git a/src/components/views/context_menus/RoomContextMenu.tsx b/src/components/views/context_menus/RoomContextMenu.tsx index 35ee666679b..6ae926707d1 100644 --- a/src/components/views/context_menus/RoomContextMenu.tsx +++ b/src/components/views/context_menus/RoomContextMenu.tsx @@ -15,7 +15,8 @@ limitations under the License. */ import React, { useContext } from "react"; -import { KnownMembership, Room } from "matrix-js-sdk/src/matrix"; +import { Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { IProps as IContextMenuProps } from "../../structures/ContextMenu"; import IconizedContextMenu, { diff --git a/src/components/views/dialogs/AddExistingToSpaceDialog.tsx b/src/components/views/dialogs/AddExistingToSpaceDialog.tsx index 7effd5a1748..3567dbecc75 100644 --- a/src/components/views/dialogs/AddExistingToSpaceDialog.tsx +++ b/src/components/views/dialogs/AddExistingToSpaceDialog.tsx @@ -16,7 +16,8 @@ limitations under the License. import React, { ReactElement, ReactNode, useContext, useMemo, useRef, useState } from "react"; import classNames from "classnames"; -import { Room, EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, EventType } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { sleep } from "matrix-js-sdk/src/utils"; import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/components/views/dialogs/ForwardDialog.tsx b/src/components/views/dialogs/ForwardDialog.tsx index 39c404b35b7..a72b2b6296c 100644 --- a/src/components/views/dialogs/ForwardDialog.tsx +++ b/src/components/views/dialogs/ForwardDialog.tsx @@ -28,8 +28,8 @@ import { LocationAssetType, M_TIMESTAMP, M_BEACON, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { _t } from "../../../languageHandler"; import dis from "../../../dispatcher/dispatcher"; diff --git a/src/components/views/dialogs/InviteDialog.tsx b/src/components/views/dialogs/InviteDialog.tsx index 4b1bea1fc86..2b3c7af8dbd 100644 --- a/src/components/views/dialogs/InviteDialog.tsx +++ b/src/components/views/dialogs/InviteDialog.tsx @@ -16,7 +16,8 @@ limitations under the License. import React, { createRef, ReactNode, SyntheticEvent } from "react"; import classNames from "classnames"; -import { RoomMember, Room, MatrixError, EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { RoomMember, Room, MatrixError, EventType } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { MatrixCall } from "matrix-js-sdk/src/webrtc/call"; import { logger } from "matrix-js-sdk/src/logger"; import { uniqBy } from "lodash"; diff --git a/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx b/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx index 37e39643b78..9bc28ab4a0d 100644 --- a/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx +++ b/src/components/views/dialogs/ManageRestrictedJoinRuleDialog.tsx @@ -15,7 +15,8 @@ limitations under the License. */ import React, { useMemo, useState } from "react"; -import { KnownMembership, Room } from "matrix-js-sdk/src/matrix"; +import { Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { _t } from "../../../languageHandler"; import BaseDialog from "./BaseDialog"; diff --git a/src/components/views/dialogs/devtools/ServersInRoom.tsx b/src/components/views/dialogs/devtools/ServersInRoom.tsx index 22b4c0d5951..bf980163eac 100644 --- a/src/components/views/dialogs/devtools/ServersInRoom.tsx +++ b/src/components/views/dialogs/devtools/ServersInRoom.tsx @@ -16,7 +16,8 @@ limitations under the License. */ import React, { useContext, useMemo } from "react"; -import { EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { EventType } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import BaseTool, { DevtoolsContext, IDevtoolsProps } from "./BaseTool"; import { _t } from "../../../../languageHandler"; diff --git a/src/components/views/dialogs/spotlight/SpotlightDialog.tsx b/src/components/views/dialogs/spotlight/SpotlightDialog.tsx index 920da6b472e..ee42a59221d 100644 --- a/src/components/views/dialogs/spotlight/SpotlightDialog.tsx +++ b/src/components/views/dialogs/spotlight/SpotlightDialog.tsx @@ -25,8 +25,8 @@ import { Room, HierarchyRoom, JoinRule, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { normalize } from "matrix-js-sdk/src/utils"; import React, { ChangeEvent, RefObject, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react"; import sanitizeHtml from "sanitize-html"; diff --git a/src/components/views/elements/AppTile.tsx b/src/components/views/elements/AppTile.tsx index fc7bdbe6a17..0ca83a0edbc 100644 --- a/src/components/views/elements/AppTile.tsx +++ b/src/components/views/elements/AppTile.tsx @@ -20,7 +20,8 @@ limitations under the License. import React, { ContextType, createRef, CSSProperties, MutableRefObject, ReactNode } from "react"; import classNames from "classnames"; import { IWidget, MatrixCapabilities } from "matrix-widget-api"; -import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { ApprovalOpts, WidgetLifecycle } from "@matrix-org/react-sdk-module-api/lib/lifecycles/WidgetLifecycle"; diff --git a/src/components/views/elements/EventListSummary.tsx b/src/components/views/elements/EventListSummary.tsx index 6e8490808a8..a1270427ccd 100644 --- a/src/components/views/elements/EventListSummary.tsx +++ b/src/components/views/elements/EventListSummary.tsx @@ -17,7 +17,8 @@ limitations under the License. */ import React, { ComponentProps, ReactNode } from "react"; -import { MatrixEvent, RoomMember, EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { MatrixEvent, RoomMember, EventType } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { _t } from "../../../languageHandler"; import { formatList } from "../../../utils/FormattingUtils"; diff --git a/src/components/views/elements/RoomFacePile.tsx b/src/components/views/elements/RoomFacePile.tsx index 92e98c37ebc..0d1491edba6 100644 --- a/src/components/views/elements/RoomFacePile.tsx +++ b/src/components/views/elements/RoomFacePile.tsx @@ -15,7 +15,8 @@ limitations under the License. */ import React, { FC, HTMLAttributes, useContext } from "react"; -import { KnownMembership, Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { sortBy } from "lodash"; import { _t } from "../../../languageHandler"; diff --git a/src/components/views/right_panel/TimelineCard.tsx b/src/components/views/right_panel/TimelineCard.tsx index b447f4791df..7dfcd633070 100644 --- a/src/components/views/right_panel/TimelineCard.tsx +++ b/src/components/views/right_panel/TimelineCard.tsx @@ -22,8 +22,8 @@ import { Room, EventTimelineSet, Thread, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import BaseCard from "./BaseCard"; import ResizeNotifier from "../../../utils/ResizeNotifier"; diff --git a/src/components/views/right_panel/UserInfo.tsx b/src/components/views/right_panel/UserInfo.tsx index b6acc9d0578..aa7b54ddf97 100644 --- a/src/components/views/right_panel/UserInfo.tsx +++ b/src/components/views/right_panel/UserInfo.tsx @@ -29,8 +29,8 @@ import { User, Device, EventType, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { UserVerificationStatus, VerificationRequest } from "matrix-js-sdk/src/crypto-api"; import { logger } from "matrix-js-sdk/src/logger"; import { CryptoEvent } from "matrix-js-sdk/src/crypto"; diff --git a/src/components/views/rooms/MemberList.tsx b/src/components/views/rooms/MemberList.tsx index 7a1b8fd3fce..828f9691dae 100644 --- a/src/components/views/rooms/MemberList.tsx +++ b/src/components/views/rooms/MemberList.tsx @@ -30,8 +30,8 @@ import { UserEvent, EventType, ClientEvent, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { throttle } from "lodash"; import { Button, Tooltip } from "@vector-im/compound-web"; import { Icon as UserAddIcon } from "@vector-im/compound-design-tokens/icons/user-add-solid.svg"; diff --git a/src/components/views/rooms/NewRoomIntro.tsx b/src/components/views/rooms/NewRoomIntro.tsx index 1e52d015827..70ea6c23a2a 100644 --- a/src/components/views/rooms/NewRoomIntro.tsx +++ b/src/components/views/rooms/NewRoomIntro.tsx @@ -15,7 +15,8 @@ limitations under the License. */ import React, { useContext } from "react"; -import { EventType, Room, User, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { EventType, Room, User, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; import RoomContext from "../../../contexts/RoomContext"; diff --git a/src/components/views/rooms/RoomInfoLine.tsx b/src/components/views/rooms/RoomInfoLine.tsx index 53ed1498ca7..b443ecfada6 100644 --- a/src/components/views/rooms/RoomInfoLine.tsx +++ b/src/components/views/rooms/RoomInfoLine.tsx @@ -15,7 +15,8 @@ limitations under the License. */ import React, { FC } from "react"; -import { Room, JoinRule, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, JoinRule, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { _t } from "../../../languageHandler"; import RightPanelStore from "../../../stores/right-panel/RightPanelStore"; diff --git a/src/components/views/rooms/RoomKnocksBar.tsx b/src/components/views/rooms/RoomKnocksBar.tsx index a61f875a9c9..9feb23a1477 100644 --- a/src/components/views/rooms/RoomKnocksBar.tsx +++ b/src/components/views/rooms/RoomKnocksBar.tsx @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { EventTimeline, JoinRule, KnownMembership, MatrixError, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { EventTimeline, JoinRule, MatrixError, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import React, { ReactElement, ReactNode, useCallback, useState, VFC } from "react"; import { Icon as CheckIcon } from "../../../../res/img/feather-customised/check.svg"; diff --git a/src/components/views/rooms/RoomPreviewBar.tsx b/src/components/views/rooms/RoomPreviewBar.tsx index f2f0f686bae..bbb3154f121 100644 --- a/src/components/views/rooms/RoomPreviewBar.tsx +++ b/src/components/views/rooms/RoomPreviewBar.tsx @@ -23,8 +23,8 @@ import { IJoinRuleEventContent, JoinRule, MatrixError, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import classNames from "classnames"; import { RoomPreviewOpts, RoomViewLifecycle } from "@matrix-org/react-sdk-module-api/lib/lifecycles/RoomViewLifecycle"; diff --git a/src/components/views/rooms/RoomPreviewCard.tsx b/src/components/views/rooms/RoomPreviewCard.tsx index 16c09c9a44e..ee31206c382 100644 --- a/src/components/views/rooms/RoomPreviewCard.tsx +++ b/src/components/views/rooms/RoomPreviewCard.tsx @@ -15,7 +15,8 @@ limitations under the License. */ import React, { FC, useContext, useState } from "react"; -import { Room, JoinRule, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, JoinRule } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { _t } from "../../../languageHandler"; import defaultDispatcher from "../../../dispatcher/dispatcher"; diff --git a/src/components/views/rooms/RoomTile.tsx b/src/components/views/rooms/RoomTile.tsx index b716e9dedba..79f0b93f78b 100644 --- a/src/components/views/rooms/RoomTile.tsx +++ b/src/components/views/rooms/RoomTile.tsx @@ -16,7 +16,8 @@ limitations under the License. */ import React, { createRef } from "react"; -import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import classNames from "classnames"; import type { Call } from "../../../models/Call"; diff --git a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx index fa1b9d7ee6f..7b260e3a7e6 100644 --- a/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx @@ -15,7 +15,8 @@ limitations under the License. */ import React, { ContextType } from "react"; -import { KnownMembership, Room } from "matrix-js-sdk/src/matrix"; +import { Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { _t } from "../../../../../languageHandler"; import RoomProfileSettings from "../../../room_settings/RoomProfileSettings"; diff --git a/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx index 14c78d345a7..22c2bc471f1 100644 --- a/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/PeopleRoomSettingsTab.tsx @@ -14,14 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { - EventTimeline, - KnownMembership, - MatrixError, - Room, - RoomMember, - RoomStateEvent, -} from "matrix-js-sdk/src/matrix"; +import { EventTimeline, MatrixError, Room, RoomMember, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import React, { useCallback, useState, VFC } from "react"; import { Icon as CheckIcon } from "../../../../../../res/img/feather-customised/check.svg"; diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx index f374f785839..665f8db2444 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx @@ -15,15 +15,8 @@ limitations under the License. */ import React from "react"; -import { - EventType, - RoomMember, - RoomState, - RoomStateEvent, - Room, - IContent, - KnownMembership, -} from "matrix-js-sdk/src/matrix"; +import { EventType, RoomMember, RoomState, RoomStateEvent, Room, IContent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { throttle, get } from "lodash"; import { compare } from "matrix-js-sdk/src/utils"; diff --git a/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx b/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx index 087383e23af..81ff32e38ee 100644 --- a/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx @@ -16,7 +16,8 @@ limitations under the License. import React, { ReactNode } from "react"; import { sleep } from "matrix-js-sdk/src/utils"; -import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Membership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { _t } from "../../../../../languageHandler"; @@ -37,7 +38,7 @@ import InlineSpinner from "../../../elements/InlineSpinner"; import { PosthogAnalytics } from "../../../../../PosthogAnalytics"; import { showDialog as showAnalyticsLearnMoreDialog } from "../../../dialogs/AnalyticsLearnMoreDialog"; import { privateShouldBeEncrypted } from "../../../../../utils/rooms"; -import type { IServerVersions, Membership } from "matrix-js-sdk/src/matrix"; +import type { IServerVersions } from "matrix-js-sdk/src/matrix"; import SettingsTab from "../SettingsTab"; import { SettingsSection } from "../../shared/SettingsSection"; import SettingsSubsection, { SettingsSubsectionText } from "../../shared/SettingsSubsection"; diff --git a/src/components/views/spaces/SpaceTreeLevel.tsx b/src/components/views/spaces/SpaceTreeLevel.tsx index 1743d2b366f..6b43399c28b 100644 --- a/src/components/views/spaces/SpaceTreeLevel.tsx +++ b/src/components/views/spaces/SpaceTreeLevel.tsx @@ -24,7 +24,8 @@ import React, { RefObject, } from "react"; import classNames from "classnames"; -import { KnownMembership, Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { Room, RoomEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { DraggableProvidedDragHandleProps } from "react-beautiful-dnd"; import RoomAvatar from "../avatars/RoomAvatar"; diff --git a/src/hooks/useRoomMembers.ts b/src/hooks/useRoomMembers.ts index fb294debe69..09c9773842d 100644 --- a/src/hooks/useRoomMembers.ts +++ b/src/hooks/useRoomMembers.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { useMemo, useState } from "react"; -import { Membership, Room, RoomEvent, RoomMember, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { Room, RoomEvent, RoomMember, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { Membership } from "matrix-js-sdk/src/types"; import { throttle } from "lodash"; import { useTypedEventEmitter } from "./useEventEmitter"; diff --git a/src/hooks/useSpaceResults.ts b/src/hooks/useSpaceResults.ts index 39422af9ea2..d2dde1315c6 100644 --- a/src/hooks/useSpaceResults.ts +++ b/src/hooks/useSpaceResults.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { useCallback, useEffect, useMemo, useState } from "react"; -import { Room, RoomType, HierarchyRoom, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, RoomType, HierarchyRoom } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { RoomHierarchy } from "matrix-js-sdk/src/room-hierarchy"; import { normalize } from "matrix-js-sdk/src/utils"; diff --git a/src/indexing/EventIndex.ts b/src/indexing/EventIndex.ts index 5b08163f99c..15419eecf6d 100644 --- a/src/indexing/EventIndex.ts +++ b/src/indexing/EventIndex.ts @@ -37,8 +37,8 @@ import { SyncState, TimelineIndex, TimelineWindow, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { sleep } from "matrix-js-sdk/src/utils"; import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/models/Call.ts b/src/models/Call.ts index 82cb021b07a..f6be7598377 100644 --- a/src/models/Call.ts +++ b/src/models/Call.ts @@ -23,9 +23,8 @@ import { IMyDevice, Room, RoomMember, - Membership, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Membership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { randomString } from "matrix-js-sdk/src/randomstring"; import { CallType } from "matrix-js-sdk/src/webrtc/call"; diff --git a/src/shouldHideEvent.ts b/src/shouldHideEvent.ts index e82e64e7f7f..0ee16009e12 100644 --- a/src/shouldHideEvent.ts +++ b/src/shouldHideEvent.ts @@ -14,7 +14,8 @@ limitations under the License. */ -import { MatrixEvent, EventType, RelationType, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { MatrixEvent, EventType, RelationType } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import SettingsStore from "./settings/SettingsStore"; import { IRoomState } from "./components/structures/RoomView"; diff --git a/src/stores/BreadcrumbsStore.ts b/src/stores/BreadcrumbsStore.ts index 5fbe7c6eddb..36bb0a78b63 100644 --- a/src/stores/BreadcrumbsStore.ts +++ b/src/stores/BreadcrumbsStore.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room, RoomEvent, ClientEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, RoomEvent, ClientEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { isNullOrUndefined } from "matrix-js-sdk/src/utils"; import SettingsStore from "../settings/SettingsStore"; diff --git a/src/stores/MemberListStore.ts b/src/stores/MemberListStore.ts index 911f99e15de..f9e1df79a41 100644 --- a/src/stores/MemberListStore.ts +++ b/src/stores/MemberListStore.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { KnownMembership, Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import SettingsStore from "../settings/SettingsStore"; import { SdkContextClass } from "../contexts/SDKContext"; diff --git a/src/stores/OwnBeaconStore.ts b/src/stores/OwnBeaconStore.ts index 26ca80529e0..55399ef264b 100644 --- a/src/stores/OwnBeaconStore.ts +++ b/src/stores/OwnBeaconStore.ts @@ -27,8 +27,8 @@ import { ContentHelpers, MBeaconInfoEventContent, M_BEACON, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import defaultDispatcher from "../dispatcher/dispatcher"; diff --git a/src/stores/RoomViewStore.tsx b/src/stores/RoomViewStore.tsx index 5e6eb7330d1..1bb98ed5e53 100644 --- a/src/stores/RoomViewStore.tsx +++ b/src/stores/RoomViewStore.tsx @@ -18,7 +18,8 @@ limitations under the License. import React, { ReactNode } from "react"; import * as utils from "matrix-js-sdk/src/utils"; -import { MatrixError, JoinRule, Room, MatrixEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { MatrixError, JoinRule, Room, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { ViewRoom as ViewRoomEvent } from "@matrix-org/analytics-events/types/typescript/ViewRoom"; import { JoinedRoom as JoinedRoomEvent } from "@matrix-org/analytics-events/types/typescript/JoinedRoom"; diff --git a/src/stores/notifications/RoomNotificationState.ts b/src/stores/notifications/RoomNotificationState.ts index d3dcf4970e7..b556563aba9 100644 --- a/src/stores/notifications/RoomNotificationState.ts +++ b/src/stores/notifications/RoomNotificationState.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixEventEvent, RoomEvent, ClientEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { MatrixEventEvent, RoomEvent, ClientEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import type { Room, MatrixEvent } from "matrix-js-sdk/src/matrix"; import type { IDestroyable } from "../../utils/IDestroyable"; diff --git a/src/stores/room-list/RoomListStore.ts b/src/stores/room-list/RoomListStore.ts index 76e11704505..dc35cd7b5b6 100644 --- a/src/stores/room-list/RoomListStore.ts +++ b/src/stores/room-list/RoomListStore.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixClient, Room, RoomState, EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, Room, RoomState, EventType } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import SettingsStore from "../../settings/SettingsStore"; diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index 41565abcc61..acb9be710f8 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { KnownMembership, Room } from "matrix-js-sdk/src/matrix"; +import { Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { isNullOrUndefined } from "matrix-js-sdk/src/utils"; import { EventEmitter } from "events"; import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/stores/spaces/SpaceStore.ts b/src/stores/spaces/SpaceStore.ts index 9d9fdd9570f..e0fd0090c87 100644 --- a/src/stores/spaces/SpaceStore.ts +++ b/src/stores/spaces/SpaceStore.ts @@ -25,8 +25,8 @@ import { MatrixEvent, ClientEvent, ISendEventResponse, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { AsyncStoreWithClient } from "../AsyncStoreWithClient"; diff --git a/src/stores/widgets/StopGapWidget.ts b/src/stores/widgets/StopGapWidget.ts index 21f19ed37f2..302ca5711d2 100644 --- a/src/stores/widgets/StopGapWidget.ts +++ b/src/stores/widgets/StopGapWidget.ts @@ -14,14 +14,8 @@ * limitations under the License. */ -import { - Room, - MatrixEvent, - MatrixEventEvent, - MatrixClient, - ClientEvent, - KnownMembership, -} from "matrix-js-sdk/src/matrix"; +import { Room, MatrixEvent, MatrixEventEvent, MatrixClient, ClientEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { ClientWidgetApi, IModalWidgetOpenRequest, diff --git a/src/utils/DMRoomMap.ts b/src/utils/DMRoomMap.ts index 620affcb65d..cdabb50ec09 100644 --- a/src/utils/DMRoomMap.ts +++ b/src/utils/DMRoomMap.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { uniq } from "lodash"; -import { Room, MatrixEvent, EventType, ClientEvent, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, MatrixEvent, EventType, ClientEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { Optional } from "matrix-events-sdk"; diff --git a/src/utils/MultiInviter.ts b/src/utils/MultiInviter.ts index 5c096f6b3e9..3df4e747a9f 100644 --- a/src/utils/MultiInviter.ts +++ b/src/utils/MultiInviter.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixError, MatrixClient, EventType, HistoryVisibility, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { MatrixError, MatrixClient, EventType, HistoryVisibility } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { defer, IDeferred } from "matrix-js-sdk/src/utils"; import { logger } from "matrix-js-sdk/src/logger"; diff --git a/src/utils/RoomUpgrade.ts b/src/utils/RoomUpgrade.ts index bf85f622ca4..a62ea1bf508 100644 --- a/src/utils/RoomUpgrade.ts +++ b/src/utils/RoomUpgrade.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room, EventType, ClientEvent, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, EventType, ClientEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { inviteUsersToRoom } from "../RoomInvite"; diff --git a/src/utils/SortMembers.ts b/src/utils/SortMembers.ts index abe70eed2e0..413f7971b2c 100644 --- a/src/utils/SortMembers.ts +++ b/src/utils/SortMembers.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { groupBy, mapValues, maxBy, minBy, sumBy, takeRight } from "lodash"; -import { KnownMembership, MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { Member } from "./direct-messages"; import DMRoomMap from "./DMRoomMap"; diff --git a/src/utils/WidgetUtils.ts b/src/utils/WidgetUtils.ts index 63c9b032cff..a0bb8d57e25 100644 --- a/src/utils/WidgetUtils.ts +++ b/src/utils/WidgetUtils.ts @@ -17,14 +17,8 @@ limitations under the License. import { base32 } from "rfc4648"; import { IWidget, IWidgetData } from "matrix-widget-api"; -import { - Room, - ClientEvent, - MatrixClient, - RoomStateEvent, - MatrixEvent, - KnownMembership, -} from "matrix-js-sdk/src/matrix"; +import { Room, ClientEvent, MatrixClient, RoomStateEvent, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { CallType } from "matrix-js-sdk/src/webrtc/call"; import { randomString, randomLowercaseString, randomUppercaseString } from "matrix-js-sdk/src/randomstring"; diff --git a/src/utils/dm/createDmLocalRoom.ts b/src/utils/dm/createDmLocalRoom.ts index 08de20786e9..5ffa491bcfc 100644 --- a/src/utils/dm/createDmLocalRoom.ts +++ b/src/utils/dm/createDmLocalRoom.ts @@ -15,13 +15,8 @@ limitations under the License. */ import { MEGOLM_ALGORITHM } from "matrix-js-sdk/src/crypto/olmlib"; -import { - EventType, - KNOWN_SAFE_ROOM_VERSION, - KnownMembership, - MatrixClient, - MatrixEvent, -} from "matrix-js-sdk/src/matrix"; +import { EventType, KNOWN_SAFE_ROOM_VERSION, MatrixClient, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { LocalRoom, LOCAL_ROOM_ID_PREFIX } from "../../../src/models/LocalRoom"; import { determineCreateRoomEncryptionOption, Member } from "../../../src/utils/direct-messages"; diff --git a/src/utils/dm/findDMForUser.ts b/src/utils/dm/findDMForUser.ts index ba72a7f6bc3..55b5f0093f2 100644 --- a/src/utils/dm/findDMForUser.ts +++ b/src/utils/dm/findDMForUser.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import DMRoomMap from "../DMRoomMap"; import { isLocalRoom } from "../localRoom/isLocalRoom"; diff --git a/src/utils/membership.ts b/src/utils/membership.ts index 4eb8173e056..2ff99fa3609 100644 --- a/src/utils/membership.ts +++ b/src/utils/membership.ts @@ -14,16 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { - Room, - RoomMember, - RoomState, - RoomStateEvent, - MatrixEvent, - MatrixClient, - Membership, - KnownMembership, -} from "matrix-js-sdk/src/matrix"; +import { Room, RoomMember, RoomState, RoomStateEvent, MatrixEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Membership } from "matrix-js-sdk/src/types"; import { MatrixClientPeg } from "../MatrixClientPeg"; import SettingsStore from "../settings/SettingsStore"; diff --git a/src/utils/permalinks/Permalinks.ts b/src/utils/permalinks/Permalinks.ts index e9d0e8bede4..537494b26b6 100644 --- a/src/utils/permalinks/Permalinks.ts +++ b/src/utils/permalinks/Permalinks.ts @@ -16,7 +16,8 @@ limitations under the License. import isIp from "is-ip"; import * as utils from "matrix-js-sdk/src/utils"; -import { Room, MatrixClient, RoomStateEvent, EventType, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, MatrixClient, RoomStateEvent, EventType } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import MatrixToPermalinkConstructor, { diff --git a/src/utils/room/canInviteTo.ts b/src/utils/room/canInviteTo.ts index 89283dd2462..bd306d930ee 100644 --- a/src/utils/room/canInviteTo.ts +++ b/src/utils/room/canInviteTo.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { JoinRule, KnownMembership, Room } from "matrix-js-sdk/src/matrix"; +import { JoinRule, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { shouldShowComponent } from "../../customisations/helpers/UIComponents"; import { UIComponent } from "../../settings/UIFeature"; diff --git a/src/utils/space.tsx b/src/utils/space.tsx index f1a61cbc39f..4222ab14f3a 100644 --- a/src/utils/space.tsx +++ b/src/utils/space.tsx @@ -15,7 +15,8 @@ limitations under the License. */ import React from "react"; -import { Room, ICreateRoomStateEvent, RoomType, EventType, JoinRule, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, ICreateRoomStateEvent, RoomType, EventType, JoinRule } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { calculateRoomVia } from "./permalinks/Permalinks"; import Modal from "../Modal"; diff --git a/test/LegacyCallHandler-test.ts b/test/LegacyCallHandler-test.ts index 9ce83729ae9..8e54ac04903 100644 --- a/test/LegacyCallHandler-test.ts +++ b/test/LegacyCallHandler-test.ts @@ -16,7 +16,6 @@ limitations under the License. import { IProtocol, - KnownMembership, LOCAL_NOTIFICATION_SETTINGS_PREFIX, MatrixEvent, PushRuleKind, @@ -24,6 +23,7 @@ import { RuleId, TweakName, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { CallEvent, CallState, CallType, MatrixCall } from "matrix-js-sdk/src/webrtc/call"; import EventEmitter from "events"; import { mocked } from "jest-mock"; diff --git a/test/RoomNotifs-test.ts b/test/RoomNotifs-test.ts index 994d0a65e7e..3526acf4bf4 100644 --- a/test/RoomNotifs-test.ts +++ b/test/RoomNotifs-test.ts @@ -24,8 +24,8 @@ import { EventType, MatrixEvent, PendingEventOrdering, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; import { mkEvent, mkRoom, mkRoomMember, muteRoom, stubClient, upsertRoomStateEvents } from "./test-utils"; diff --git a/test/SlashCommands-test.tsx b/test/SlashCommands-test.tsx index 37e7f3616eb..6ef56aa7fd9 100644 --- a/test/SlashCommands-test.tsx +++ b/test/SlashCommands-test.tsx @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { KnownMembership, MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { mocked } from "jest-mock"; import { Command, Commands, getCommand } from "../src/SlashCommands"; diff --git a/test/TextForEvent-test.ts b/test/TextForEvent-test.ts index 0b13311ad54..a389333dc47 100644 --- a/test/TextForEvent-test.ts +++ b/test/TextForEvent-test.ts @@ -18,12 +18,12 @@ import { EventType, HistoryVisibility, JoinRule, - KnownMembership, MatrixClient, MatrixEvent, Room, RoomMember, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { render } from "@testing-library/react"; import { ReactElement } from "react"; import { Mocked, mocked } from "jest-mock"; diff --git a/test/components/structures/MessagePanel-test.tsx b/test/components/structures/MessagePanel-test.tsx index 42f537e8785..3513cee91f7 100644 --- a/test/components/structures/MessagePanel-test.tsx +++ b/test/components/structures/MessagePanel-test.tsx @@ -17,7 +17,8 @@ limitations under the License. import React from "react"; import { EventEmitter } from "events"; -import { MatrixEvent, Room, RoomMember, Thread, ReceiptType, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { MatrixEvent, Room, RoomMember, Thread, ReceiptType } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { render } from "@testing-library/react"; import { TooltipProvider } from "@vector-im/compound-web"; diff --git a/test/components/structures/RoomView-test.tsx b/test/components/structures/RoomView-test.tsx index 9de521d02eb..d0d12d71052 100644 --- a/test/components/structures/RoomView-test.tsx +++ b/test/components/structures/RoomView-test.tsx @@ -28,8 +28,8 @@ import { MatrixEvent, SearchResult, IEvent, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { MEGOLM_ALGORITHM } from "matrix-js-sdk/src/crypto/olmlib"; import { fireEvent, render, screen, RenderResult, waitForElementToBeRemoved, waitFor } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; diff --git a/test/components/structures/SpaceHierarchy-test.tsx b/test/components/structures/SpaceHierarchy-test.tsx index f2889a13bd8..0246329d8d6 100644 --- a/test/components/structures/SpaceHierarchy-test.tsx +++ b/test/components/structures/SpaceHierarchy-test.tsx @@ -17,7 +17,8 @@ limitations under the License. import React from "react"; import { mocked } from "jest-mock"; import { fireEvent, render, screen, waitFor, waitForElementToBeRemoved } from "@testing-library/react"; -import { MatrixClient, Room, HierarchyRoom, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, Room, HierarchyRoom } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { RoomHierarchy } from "matrix-js-sdk/src/room-hierarchy"; import { TooltipProvider } from "@vector-im/compound-web"; diff --git a/test/components/structures/TimelinePanel-test.tsx b/test/components/structures/TimelinePanel-test.tsx index 964c5bbe3c9..afbe173940d 100644 --- a/test/components/structures/TimelinePanel-test.tsx +++ b/test/components/structures/TimelinePanel-test.tsx @@ -34,8 +34,8 @@ import { THREAD_RELATION_TYPE, ThreadEvent, ThreadFilterType, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import React, { createRef } from "react"; import { Mocked, mocked } from "jest-mock"; import { forEachRight } from "lodash"; diff --git a/test/components/views/context_menus/RoomContextMenu-test.tsx b/test/components/views/context_menus/RoomContextMenu-test.tsx index 4b03ffe9c59..535e03f5179 100644 --- a/test/components/views/context_menus/RoomContextMenu-test.tsx +++ b/test/components/views/context_menus/RoomContextMenu-test.tsx @@ -19,7 +19,8 @@ limitations under the License. import { render, screen } from "@testing-library/react"; import React, { ComponentProps } from "react"; import { mocked } from "jest-mock"; -import { KnownMembership, MatrixClient, PendingEventOrdering, Room } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, PendingEventOrdering, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import MatrixClientContext from "../../../../src/contexts/MatrixClientContext"; import RoomContextMenu from "../../../../src/components/views/context_menus/RoomContextMenu"; diff --git a/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx b/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx index 7369219e881..fabf56d4248 100644 --- a/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx +++ b/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx @@ -16,7 +16,8 @@ limitations under the License. import { fireEvent, getByLabelText, render, screen } from "@testing-library/react"; import { mocked } from "jest-mock"; -import { ReceiptType, MatrixClient, PendingEventOrdering, Room, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { ReceiptType, MatrixClient, PendingEventOrdering, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import React from "react"; import userEvent from "@testing-library/user-event"; diff --git a/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx b/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx index e71d5a0a805..c87e2103c99 100644 --- a/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx +++ b/test/components/views/dialogs/ConfirmUserActionDialog-test.tsx @@ -16,7 +16,7 @@ limitations under the License. import React from "react"; import { render } from "@testing-library/react"; -import { KnownMembership } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import ConfirmUserActionDialog from "../../../../src/components/views/dialogs/ConfirmUserActionDialog"; import { mkRoomMember } from "../../../test-utils"; diff --git a/test/components/views/dialogs/InviteDialog-test.tsx b/test/components/views/dialogs/InviteDialog-test.tsx index 562395acb21..16f756cb01b 100644 --- a/test/components/views/dialogs/InviteDialog-test.tsx +++ b/test/components/views/dialogs/InviteDialog-test.tsx @@ -17,7 +17,8 @@ limitations under the License. import React from "react"; import { fireEvent, render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; -import { RoomType, MatrixClient, MatrixError, Room, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { RoomType, MatrixClient, MatrixError, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { sleep } from "matrix-js-sdk/src/utils"; import { mocked, Mocked } from "jest-mock"; diff --git a/test/components/views/dialogs/SpotlightDialog-test.tsx b/test/components/views/dialogs/SpotlightDialog-test.tsx index b4fef8f4035..5bf1029bc9e 100644 --- a/test/components/views/dialogs/SpotlightDialog-test.tsx +++ b/test/components/views/dialogs/SpotlightDialog-test.tsx @@ -21,11 +21,11 @@ import { IProtocol, IPublicRoomsChunkRoom, JoinRule, - KnownMembership, MatrixClient, Room, RoomMember, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import sanitizeHtml from "sanitize-html"; import { fireEvent, render, screen } from "@testing-library/react"; diff --git a/test/components/views/elements/EventListSummary-test.tsx b/test/components/views/elements/EventListSummary-test.tsx index 828c66bb4aa..485c1c75b56 100644 --- a/test/components/views/elements/EventListSummary-test.tsx +++ b/test/components/views/elements/EventListSummary-test.tsx @@ -16,7 +16,8 @@ limitations under the License. import React, { ComponentProps } from "react"; import { render, RenderResult } from "@testing-library/react"; -import { KnownMembership, MatrixEvent, Membership, RoomMember } from "matrix-js-sdk/src/matrix"; +import { MatrixEvent, RoomMember } from "matrix-js-sdk/src/matrix"; +import { KnownMembership, Membership } from "matrix-js-sdk/src/types"; import { getMockClientWithEventEmitter, diff --git a/test/components/views/elements/FacePile-test.tsx b/test/components/views/elements/FacePile-test.tsx index fe48197d298..313a0299be7 100644 --- a/test/components/views/elements/FacePile-test.tsx +++ b/test/components/views/elements/FacePile-test.tsx @@ -15,7 +15,7 @@ limitations under the License. import { render } from "@testing-library/react"; import React from "react"; import { TooltipProvider } from "@vector-im/compound-web"; -import { KnownMembership } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import FacePile from "../../../../src/components/views/elements/FacePile"; import { mkRoomMember } from "../../../test-utils"; diff --git a/test/components/views/elements/RoomFacePile-test.tsx b/test/components/views/elements/RoomFacePile-test.tsx index 74bf5648b10..29af3818978 100644 --- a/test/components/views/elements/RoomFacePile-test.tsx +++ b/test/components/views/elements/RoomFacePile-test.tsx @@ -15,7 +15,7 @@ limitations under the License. import { render } from "@testing-library/react"; import React from "react"; import { TooltipProvider } from "@vector-im/compound-web"; -import { KnownMembership } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { mkRoom, mkRoomMember, stubClient, withClientContextRenderOptions } from "../../../test-utils"; import RoomFacePile from "../../../../src/components/views/elements/RoomFacePile"; diff --git a/test/components/views/right_panel/RoomSummaryCard-test.tsx b/test/components/views/right_panel/RoomSummaryCard-test.tsx index c5d7c8c97f2..8fce2fdf868 100644 --- a/test/components/views/right_panel/RoomSummaryCard-test.tsx +++ b/test/components/views/right_panel/RoomSummaryCard-test.tsx @@ -16,7 +16,8 @@ limitations under the License. import React from "react"; import { render, fireEvent, screen } from "@testing-library/react"; -import { EventType, MatrixEvent, Room, MatrixClient, JoinRule, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { EventType, MatrixEvent, Room, MatrixClient, JoinRule } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { mocked, MockedObject } from "jest-mock"; import { TooltipProvider } from "@vector-im/compound-web"; diff --git a/test/components/views/right_panel/UserInfo-test.tsx b/test/components/views/right_panel/UserInfo-test.tsx index 6e786351db5..789ae075bf9 100644 --- a/test/components/views/right_panel/UserInfo-test.tsx +++ b/test/components/views/right_panel/UserInfo-test.tsx @@ -28,8 +28,8 @@ import { CryptoApi, DeviceVerificationStatus, Device, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { Phase, VerificationRequest, diff --git a/test/components/views/rooms/LegacyRoomHeader-test.tsx b/test/components/views/rooms/LegacyRoomHeader-test.tsx index 393c4bc0345..198badd6fbd 100644 --- a/test/components/views/rooms/LegacyRoomHeader-test.tsx +++ b/test/components/views/rooms/LegacyRoomHeader-test.tsx @@ -24,8 +24,8 @@ import { RoomStateEvent, PendingEventOrdering, ISearchResults, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { CallType } from "matrix-js-sdk/src/webrtc/call"; import { ClientWidgetApi, Widget } from "matrix-widget-api"; import EventEmitter from "events"; diff --git a/test/components/views/rooms/MemberList-test.tsx b/test/components/views/rooms/MemberList-test.tsx index cb78fb95fb3..753b247e59e 100644 --- a/test/components/views/rooms/MemberList-test.tsx +++ b/test/components/views/rooms/MemberList-test.tsx @@ -17,15 +17,8 @@ limitations under the License. import React from "react"; import { act, fireEvent, render, RenderResult, screen } from "@testing-library/react"; -import { - Room, - MatrixClient, - RoomState, - RoomMember, - User, - MatrixEvent, - KnownMembership, -} from "matrix-js-sdk/src/matrix"; +import { Room, MatrixClient, RoomState, RoomMember, User, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { compare } from "matrix-js-sdk/src/utils"; import { mocked, MockedObject } from "jest-mock"; import { TooltipProvider } from "@vector-im/compound-web"; diff --git a/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx b/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx index 0677ae8bf7c..173b52fabc3 100644 --- a/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx +++ b/test/components/views/rooms/NotificationBadge/UnreadNotificationBadge-test.tsx @@ -26,8 +26,8 @@ import { EventStatus, PendingEventOrdering, ReceiptType, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; import { mkThread } from "../../../../test-utils/threads"; diff --git a/test/components/views/rooms/RoomHeader-test.tsx b/test/components/views/rooms/RoomHeader-test.tsx index c824e834b1b..55506bae499 100644 --- a/test/components/views/rooms/RoomHeader-test.tsx +++ b/test/components/views/rooms/RoomHeader-test.tsx @@ -19,13 +19,13 @@ import { CallType, MatrixCall } from "matrix-js-sdk/src/webrtc/call"; import { EventType, JoinRule, - KnownMembership, MatrixClient, MatrixEvent, PendingEventOrdering, Room, RoomMember, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { createEvent, fireEvent, diff --git a/test/components/views/rooms/RoomKnocksBar-test.tsx b/test/components/views/rooms/RoomKnocksBar-test.tsx index d69f4c78fee..22d69863f94 100644 --- a/test/components/views/rooms/RoomKnocksBar-test.tsx +++ b/test/components/views/rooms/RoomKnocksBar-test.tsx @@ -19,13 +19,13 @@ import { EventTimeline, EventType, JoinRule, - KnownMembership, MatrixError, MatrixEvent, Room, RoomMember, RoomStateEvent, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import React from "react"; import ErrorDialog from "../../../../src/components/views/dialogs/ErrorDialog"; diff --git a/test/components/views/rooms/RoomPreviewBar-test.tsx b/test/components/views/rooms/RoomPreviewBar-test.tsx index a4b81618a11..4bc442fbaad 100644 --- a/test/components/views/rooms/RoomPreviewBar-test.tsx +++ b/test/components/views/rooms/RoomPreviewBar-test.tsx @@ -16,7 +16,8 @@ limitations under the License. import React, { ComponentProps } from "react"; import { render, fireEvent, RenderResult, waitFor } from "@testing-library/react"; -import { Room, RoomMember, MatrixError, IContent, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, RoomMember, MatrixError, IContent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { withClientContextRenderOptions, stubClient } from "../../../test-utils"; import { MatrixClientPeg } from "../../../../src/MatrixClientPeg"; diff --git a/test/components/views/rooms/RoomPreviewCard-test.tsx b/test/components/views/rooms/RoomPreviewCard-test.tsx index f5d29e9424a..dbec1c72527 100644 --- a/test/components/views/rooms/RoomPreviewCard-test.tsx +++ b/test/components/views/rooms/RoomPreviewCard-test.tsx @@ -17,7 +17,8 @@ limitations under the License. import React from "react"; import { mocked, Mocked } from "jest-mock"; import { render, screen, act } from "@testing-library/react"; -import { KnownMembership, PendingEventOrdering, Room, RoomStateEvent, RoomType } from "matrix-js-sdk/src/matrix"; +import { PendingEventOrdering, Room, RoomStateEvent, RoomType } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import type { MatrixClient, RoomMember } from "matrix-js-sdk/src/matrix"; import { stubClient, wrapInMatrixClientContext, mkRoomMember } from "../../../test-utils"; diff --git a/test/components/views/rooms/RoomTile-test.tsx b/test/components/views/rooms/RoomTile-test.tsx index 6a8e1ee7490..86be3a823f3 100644 --- a/test/components/views/rooms/RoomTile-test.tsx +++ b/test/components/views/rooms/RoomTile-test.tsx @@ -24,8 +24,8 @@ import { MatrixEvent, RoomStateEvent, Thread, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { Widget } from "matrix-widget-api"; import type { RoomMember } from "matrix-js-sdk/src/matrix"; diff --git a/test/components/views/settings/JoinRuleSettings-test.tsx b/test/components/views/settings/JoinRuleSettings-test.tsx index f2ce64a1f36..d64b1c23673 100644 --- a/test/components/views/settings/JoinRuleSettings-test.tsx +++ b/test/components/views/settings/JoinRuleSettings-test.tsx @@ -27,8 +27,8 @@ import { RoomMember, MatrixError, Visibility, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { defer, IDeferred } from "matrix-js-sdk/src/utils"; import { diff --git a/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx b/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx index 300889440ce..c91d0029af8 100644 --- a/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx +++ b/test/components/views/settings/tabs/room/PeopleRoomSettingsTab-test.tsx @@ -18,13 +18,13 @@ import { act, fireEvent, render, screen, within } from "@testing-library/react"; import { EventTimeline, EventType, - KnownMembership, MatrixError, MatrixEvent, Room, RoomMember, RoomStateEvent, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import React from "react"; import ErrorDialog from "../../../../../../src/components/views/dialogs/ErrorDialog"; diff --git a/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx b/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx index a74a5280277..92a694e2c24 100644 --- a/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx +++ b/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx @@ -16,15 +16,8 @@ limitations under the License. import React from "react"; import { fireEvent, render, RenderResult, screen, waitFor } from "@testing-library/react"; -import { - MatrixClient, - EventType, - MatrixEvent, - Room, - RoomMember, - ISendEventResponse, - KnownMembership, -} from "matrix-js-sdk/src/matrix"; +import { MatrixClient, EventType, MatrixEvent, Room, RoomMember, ISendEventResponse } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { mocked } from "jest-mock"; import { defer } from "matrix-js-sdk/src/utils"; diff --git a/test/hooks/useRoomMembers-test.tsx b/test/hooks/useRoomMembers-test.tsx index f97153c4fee..1db551acdad 100644 --- a/test/hooks/useRoomMembers-test.tsx +++ b/test/hooks/useRoomMembers-test.tsx @@ -16,7 +16,8 @@ limitations under the License. import { waitFor } from "@testing-library/react"; import { renderHook, act } from "@testing-library/react-hooks/dom"; -import { KnownMembership, MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { MatrixClientPeg } from "../../src/MatrixClientPeg"; import { stubClient } from "../test-utils"; diff --git a/test/hooks/useUnreadNotifications-test.ts b/test/hooks/useUnreadNotifications-test.ts index 456577da813..5a71bee9a57 100644 --- a/test/hooks/useUnreadNotifications-test.ts +++ b/test/hooks/useUnreadNotifications-test.ts @@ -15,13 +15,8 @@ limitations under the License. */ import { renderHook } from "@testing-library/react-hooks"; -import { - EventStatus, - KnownMembership, - NotificationCountType, - PendingEventOrdering, - Room, -} from "matrix-js-sdk/src/matrix"; +import { EventStatus, NotificationCountType, PendingEventOrdering, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; import { useUnreadNotifications } from "../../src/hooks/useUnreadNotifications"; diff --git a/test/models/Call-test.ts b/test/models/Call-test.ts index cde65df3d52..cf1aed9ca70 100644 --- a/test/models/Call-test.ts +++ b/test/models/Call-test.ts @@ -17,15 +17,8 @@ limitations under the License. import EventEmitter from "events"; import { mocked } from "jest-mock"; import { waitFor } from "@testing-library/react"; -import { - RoomType, - Room, - RoomEvent, - MatrixEvent, - RoomStateEvent, - PendingEventOrdering, - KnownMembership, -} from "matrix-js-sdk/src/matrix"; +import { RoomType, Room, RoomEvent, MatrixEvent, RoomStateEvent, PendingEventOrdering } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { Widget } from "matrix-widget-api"; // eslint-disable-next-line no-restricted-imports import { MatrixRTCSessionManagerEvents } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSessionManager"; diff --git a/test/stores/MemberListStore-test.ts b/test/stores/MemberListStore-test.ts index 245f20576e8..9610f7e6fe4 100644 --- a/test/stores/MemberListStore-test.ts +++ b/test/stores/MemberListStore-test.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { EventType, IContent, KnownMembership, MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; +import { EventType, IContent, MatrixClient, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import SdkConfig from "../../src/SdkConfig"; import SettingsStore from "../../src/settings/SettingsStore"; diff --git a/test/stores/OwnBeaconStore-test.ts b/test/stores/OwnBeaconStore-test.ts index 700c46940c2..b546558f74a 100644 --- a/test/stores/OwnBeaconStore-test.ts +++ b/test/stores/OwnBeaconStore-test.ts @@ -24,8 +24,8 @@ import { RoomMember, ContentHelpers, M_BEACON, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { Mocked } from "jest-mock"; diff --git a/test/stores/SpaceStore-test.ts b/test/stores/SpaceStore-test.ts index 7dad0515c3e..a0f53d38cff 100644 --- a/test/stores/SpaceStore-test.ts +++ b/test/stores/SpaceStore-test.ts @@ -24,8 +24,8 @@ import { MatrixEvent, Room, RoomEvent, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { defer } from "matrix-js-sdk/src/utils"; import SpaceStore from "../../src/stores/spaces/SpaceStore"; diff --git a/test/stores/notifications/RoomNotificationState-test.ts b/test/stores/notifications/RoomNotificationState-test.ts index aa96fdfc001..fc3ef9983b2 100644 --- a/test/stores/notifications/RoomNotificationState-test.ts +++ b/test/stores/notifications/RoomNotificationState-test.ts @@ -22,8 +22,8 @@ import { NotificationCountType, EventType, MatrixEvent, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; import { mkEvent, muteRoom, stubClient } from "../../test-utils"; diff --git a/test/stores/room-list/RoomListStore-test.ts b/test/stores/room-list/RoomListStore-test.ts index 43315e03aa7..4a446eff9a7 100644 --- a/test/stores/room-list/RoomListStore-test.ts +++ b/test/stores/room-list/RoomListStore-test.ts @@ -18,12 +18,12 @@ import { ConditionKind, EventType, IPushRule, - KnownMembership, MatrixEvent, PendingEventOrdering, PushRuleActionName, Room, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import defaultDispatcher, { MatrixDispatcher } from "../../../src/dispatcher/dispatcher"; import { SettingLevel } from "../../../src/settings/SettingLevel"; diff --git a/test/stores/room-list/algorithms/Algorithm-test.ts b/test/stores/room-list/algorithms/Algorithm-test.ts index 5c9db560d2b..62f2abc42b9 100644 --- a/test/stores/room-list/algorithms/Algorithm-test.ts +++ b/test/stores/room-list/algorithms/Algorithm-test.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { mocked, MockedObject } from "jest-mock"; -import { KnownMembership, PendingEventOrdering, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { PendingEventOrdering, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { Widget } from "matrix-widget-api"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; diff --git a/test/stores/room-list/algorithms/RecentAlgorithm-test.ts b/test/stores/room-list/algorithms/RecentAlgorithm-test.ts index 5254d632b97..f925e47726b 100644 --- a/test/stores/room-list/algorithms/RecentAlgorithm-test.ts +++ b/test/stores/room-list/algorithms/RecentAlgorithm-test.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room, MatrixClient, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { mkMessage, mkRoom, stubClient } from "../../../test-utils"; import { MatrixClientPeg } from "../../../../src/MatrixClientPeg"; diff --git a/test/test-utils/room.ts b/test/test-utils/room.ts index bf4cc5b9e6b..0a188c7cd59 100644 --- a/test/test-utils/room.ts +++ b/test/test-utils/room.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { MockedObject } from "jest-mock"; -import { MatrixClient, MatrixEvent, EventType, Room, EventTimeline, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, MatrixEvent, EventType, Room, EventTimeline } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { IRoomState } from "../../src/components/structures/RoomView"; import { TimelineRenderingType } from "../../src/contexts/RoomContext"; diff --git a/test/test-utils/test-utils.ts b/test/test-utils/test-utils.ts index 35595a60fe0..933d324dd5f 100644 --- a/test/test-utils/test-utils.ts +++ b/test/test-utils/test-utils.ts @@ -38,8 +38,8 @@ import { JoinRule, IEventDecryptionResult, OidcClientConfig, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { normalize } from "matrix-js-sdk/src/utils"; import { ReEmitter } from "matrix-js-sdk/src/ReEmitter"; import { MediaHandler } from "matrix-js-sdk/src/webrtc/mediaHandler"; @@ -50,7 +50,8 @@ import { MatrixRTCSessionManager } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSe // eslint-disable-next-line no-restricted-imports import { MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; -import type { GroupCall, Membership } from "matrix-js-sdk/src/matrix"; +import type { GroupCall } from "matrix-js-sdk/src/matrix"; +import type { Membership } from "matrix-js-sdk/src/types"; import { MatrixClientPeg as peg } from "../../src/MatrixClientPeg"; import { ValidatedServerConfig } from "../../src/utils/ValidatedServerConfig"; import { EnhancedMap } from "../../src/utils/maps"; diff --git a/test/utils/MultiInviter-test.ts b/test/utils/MultiInviter-test.ts index 8c610bb21e8..ae1c6ef91b9 100644 --- a/test/utils/MultiInviter-test.ts +++ b/test/utils/MultiInviter-test.ts @@ -15,15 +15,8 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { - EventType, - KnownMembership, - MatrixClient, - MatrixError, - MatrixEvent, - Room, - RoomMember, -} from "matrix-js-sdk/src/matrix"; +import { EventType, MatrixClient, MatrixError, MatrixEvent, Room, RoomMember } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { MatrixClientPeg } from "../../src/MatrixClientPeg"; import Modal, { ComponentType, ComponentProps } from "../../src/Modal"; diff --git a/test/utils/direct-messages-test.ts b/test/utils/direct-messages-test.ts index b7e653bef3a..6a6e54edcf1 100644 --- a/test/utils/direct-messages-test.ts +++ b/test/utils/direct-messages-test.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { ClientEvent, KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { ClientEvent, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import DMRoomMap from "../../src/utils/DMRoomMap"; diff --git a/test/utils/dm/createDmLocalRoom-test.ts b/test/utils/dm/createDmLocalRoom-test.ts index 921c2fd5bb2..2d9da9b75d8 100644 --- a/test/utils/dm/createDmLocalRoom-test.ts +++ b/test/utils/dm/createDmLocalRoom-test.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { EventType, KNOWN_SAFE_ROOM_VERSION, KnownMembership, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { EventType, KNOWN_SAFE_ROOM_VERSION, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { canEncryptToAllUsers } from "../../../src/createRoom"; import { LocalRoom, LOCAL_ROOM_ID_PREFIX } from "../../../src/models/LocalRoom"; diff --git a/test/utils/dm/findDMForUser-test.ts b/test/utils/dm/findDMForUser-test.ts index 45dc2e3d6ba..9d0852d1083 100644 --- a/test/utils/dm/findDMForUser-test.ts +++ b/test/utils/dm/findDMForUser-test.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import DMRoomMap from "../../../src/utils/DMRoomMap"; import { createTestClient, makeMembershipEvent, mkThirdPartyInviteEvent } from "../../test-utils"; diff --git a/test/utils/export-test.tsx b/test/utils/export-test.tsx index dd002156e3a..42ee1dedcd6 100644 --- a/test/utils/export-test.tsx +++ b/test/utils/export-test.tsx @@ -23,8 +23,8 @@ import { RoomMember, RelationType, EventType, - KnownMembership, } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { MatrixClientPeg } from "../../src/MatrixClientPeg"; import { IExportOptions, ExportType, ExportFormat } from "../../src/utils/exportUtils/exportUtils"; diff --git a/test/utils/local-room-test.ts b/test/utils/local-room-test.ts index 8de7ddfac4f..593a045d88b 100644 --- a/test/utils/local-room-test.ts +++ b/test/utils/local-room-test.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { LocalRoom, LocalRoomState, LOCAL_ROOM_ID_PREFIX } from "../../src/models/LocalRoom"; import * as localRoomModule from "../../src/utils/local-room"; diff --git a/test/utils/localRoom/isRoomReady-test.ts b/test/utils/localRoom/isRoomReady-test.ts index 1d4843196fe..8f91553d6ee 100644 --- a/test/utils/localRoom/isRoomReady-test.ts +++ b/test/utils/localRoom/isRoomReady-test.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { EventType, KnownMembership, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { EventType, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { LocalRoom, LOCAL_ROOM_ID_PREFIX } from "../../../src/models/LocalRoom"; import { DirectoryMember } from "../../../src/utils/direct-messages"; diff --git a/test/utils/membership-test.ts b/test/utils/membership-test.ts index 7ad6f6911a8..3a44263481a 100644 --- a/test/utils/membership-test.ts +++ b/test/utils/membership-test.ts @@ -14,15 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { - KnownMembership, - MatrixClient, - MatrixEvent, - Room, - RoomMember, - RoomState, - RoomStateEvent, -} from "matrix-js-sdk/src/matrix"; +import { MatrixClient, MatrixEvent, Room, RoomMember, RoomState, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { mocked } from "jest-mock"; import { isKnockDenied, waitForMember } from "../../src/utils/membership"; diff --git a/test/utils/permalinks/Permalinks-test.ts b/test/utils/permalinks/Permalinks-test.ts index 444007f00f5..3c3bbbbec94 100644 --- a/test/utils/permalinks/Permalinks-test.ts +++ b/test/utils/permalinks/Permalinks-test.ts @@ -14,7 +14,8 @@ limitations under the License. */ import { EventEmitter } from "events"; -import { Room, RoomMember, EventType, MatrixEvent, KnownMembership } from "matrix-js-sdk/src/matrix"; +import { Room, RoomMember, EventType, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { MatrixClientPeg } from "../../../src/MatrixClientPeg"; import { PermalinkParts } from "../../../src/utils/permalinks/PermalinkConstructor"; diff --git a/test/utils/room/canInviteTo-test.ts b/test/utils/room/canInviteTo-test.ts index 93a44213d2b..2ee0ca87af1 100644 --- a/test/utils/room/canInviteTo-test.ts +++ b/test/utils/room/canInviteTo-test.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { JoinRule, KnownMembership, Room } from "matrix-js-sdk/src/matrix"; +import { JoinRule, Room } from "matrix-js-sdk/src/matrix"; +import { KnownMembership } from "matrix-js-sdk/src/types"; import { shouldShowComponent } from "../../../src/customisations/helpers/UIComponents"; import { UIComponent } from "../../../src/settings/UIFeature"; From 26b4d47af18c47e60e55ef097d7f4341dbbffbfc Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 18 Mar 2024 11:47:55 -0400 Subject: [PATCH 032/235] Refine the colors of some more components (#12343) * Refine the colors of some more components This is a reintroduction of https://github.com/matrix-org/matrix-react-sdk/pull/12255, and should be the last part of the Compound color refinement work (https://github.com/element-hq/element-web/issues/26992). I've updated the following components to reflect design decisions (https://www.figma.com/file/pqhlirZFEwEp5XpudSbiia/Theming-Web-templates?type=design&node-id=80-60219&mode=design&t=mjqwylUie1vRwzOV-0) that will help them fit in better with the new design system: - Message bubbles - Pills - Sent indicators - Jump to bottom/unread buttons - Composer placeholder - Notification badges - Room sublists - Verification shields - Date separators - Tooltips Closes https://github.com/element-hq/element-web/issues/22122 * Update some screenshots --- .../permalink-rendering-linux.png | Bin 63574 -> 64742 bytes ...iew-with-a-poll-on-bubble-layout-linux.png | Bin 24432 -> 24634 bytes ...View-with-a-poll-on-group-layout-linux.png | Bin 24333 -> 24554 bytes .../room-header-highlighted-linux.png | Bin 5666 -> 5648 bytes ...with-apps-button-not-highlighted-linux.png | Bin 6755 -> 6737 bytes ...ly-to-the-location-on-ThreadView-linux.png | Bin 20860 -> 21091 bytes ...sed-gels-and-messages-irc-layout-linux.png | Bin 48040 -> 48225 bytes .../collapsed-gels-bubble-layout-linux.png | Bin 42235 -> 42405 bytes .../configured-room-irc-layout-linux.png | Bin 42275 -> 42468 bytes ...e-inline-start-margin-irc-layout-linux.png | Bin 53166 -> 53422 bytes ...-tile-reply-chains-bubble-layout-linux.png | Bin 7713 -> 7806 bytes ...ply-chains-compact-modern-layout-linux.png | Bin 8239 -> 8309 bytes ...ent-tile-reply-chains-irc-layout-linux.png | Bin 9340 -> 9480 bytes ...ent-tile-reply-chains-irc-modern-linux.png | Bin 8404 -> 8462 bytes .../event-tiles-bubble-layout-linux.png | Bin 41285 -> 41508 bytes ...vent-tiles-compact-modern-layout-linux.png | Bin 51402 -> 51573 bytes .../event-tiles-irc-layout-linux.png | Bin 56824 -> 57004 bytes .../event-tiles-modern-layout-linux.png | Bin 41188 -> 41371 bytes ...ded-gels-and-messages-irc-layout-linux.png | Bin 57906 -> 58101 bytes .../expanded-gels-bubble-layout-linux.png | Bin 51918 -> 52164 bytes .../expanded-gels-emote-irc-layout-linux.png | Bin 59409 -> 59574 bytes .../expanded-gels-irc-layout-linux.png | Bin 53166 -> 53422 bytes .../expanded-gels-modern-layout-linux.png | Bin 52553 -> 52816 bytes ...anded-gels-redaction-placeholder-linux.png | Bin 56652 -> 56826 bytes ...event-line-padding-modern-layout-linux.png | Bin 52331 -> 52562 bytes ...ent-line-zero-padding-irc-layout-linux.png | Bin 50694 -> 50908 bytes res/css/_common.pcss | 2 +- res/css/views/elements/_Pill.pcss | 10 ++++++---- res/css/views/elements/_Tooltip.pcss | 4 ++-- res/css/views/messages/_DateSeparator.pcss | 2 +- .../views/messages/_TimelineSeparator.pcss | 4 ++-- .../views/rooms/_BasicMessageComposer.pcss | 2 +- res/css/views/rooms/_E2EIcon.pcss | 12 ++---------- res/css/views/rooms/_EventTile.pcss | 6 +++--- res/css/views/rooms/_JumpToBottomButton.pcss | 11 +++++------ res/css/views/rooms/_LegacyRoomHeader.pcss | 17 ++++++++--------- res/css/views/rooms/_MessageComposer.pcss | 2 +- res/css/views/rooms/_NotificationBadge.pcss | 5 +++-- res/css/views/rooms/_RoomSublist.pcss | 4 ++-- res/css/views/rooms/_RoomTile.pcss | 2 +- .../views/rooms/_TopUnreadMessagesBar.pcss | 8 ++++---- .../wysiwyg_composer/components/_Editor.pcss | 2 +- res/themes/dark/css/_dark.pcss | 15 +++++++-------- res/themes/legacy-dark/css/_legacy-dark.pcss | 5 ++--- .../legacy-light/css/_legacy-light.pcss | 5 ++--- res/themes/light-custom/css/_custom.pcss | 1 - .../css/_light-high-contrast.pcss | 1 - res/themes/light/css/_light.pcss | 17 ++++++++--------- .../security/AccessSecretStorageDialog.tsx | 2 +- 49 files changed, 63 insertions(+), 76 deletions(-) diff --git a/playwright/snapshots/permalinks/permalinks.spec.ts/permalink-rendering-linux.png b/playwright/snapshots/permalinks/permalinks.spec.ts/permalink-rendering-linux.png index 300b7e011a0a26125340777dc2f855dcbc5f323a..b4c72b673356daa7266134710becac7c6e7582ff 100644 GIT binary patch literal 64742 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 diff --git a/playwright/snapshots/polls/polls.spec.ts/ThreadView-with-a-poll-on-group-layout-linux.png b/playwright/snapshots/polls/polls.spec.ts/ThreadView-with-a-poll-on-group-layout-linux.png index c4b69dd6e65844723f0b7b81b5d756cb8402dd7a..a4c053e7a7f1c0e23d15188899ddf0b5349d737e 100644 GIT binary patch literal 24554 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 z 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 literal 24333 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 T{uB_I7l0aH|D*oepZEU{JlDz) diff --git a/playwright/snapshots/room/room-header.spec.ts/room-header-highlighted-linux.png b/playwright/snapshots/room/room-header.spec.ts/room-header-highlighted-linux.png index 6d6ea59ae83072018a391010f594652ad9de0692..5fa24a887f88e4ec2f538da0bc6836a2e0086d95 100644 GIT binary patch literal 5648 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 diff --git a/playwright/snapshots/room/room-header.spec.ts/room-header-with-apps-button-not-highlighted-linux.png b/playwright/snapshots/room/room-header.spec.ts/room-header-with-apps-button-not-highlighted-linux.png index ad2bf20e946888fd482fc86637bf78e7056361d1..84eb8fcccca25faa88c2c83e222793d191ebc03c 100644 GIT binary patch literal 6737 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 literal 6755 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/collapsed-gels-and-messages-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/collapsed-gels-and-messages-irc-layout-linux.png index 8ea537d424e8412d49829a259c176e583115604b..5703f384498a613989a7aba09b668835cf913842 100644 GIT binary patch literal 48225 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�z(O5wa%tu#2u)-u+)ROft^%%fd!F(@#it?G&nj4{yfz4N0UdD zFK&15w$o7HI0k_tz#xCQ5@F6~)+VWRuLo=@O~w6|WqA!h+ZSUsKbxwR#<`YMZkZ_U z{jx|cq4*_kOoJ($ytwQR#wH=t%w?>rK{T|By6#~N^4|R15Wyr#HKuCre2?W5`k;pz z*rTD3bjd@-P7Xl7=v-}q7r0J`<3TayJl8MO-Pl0A zU~y`#C#W*1Coin9lG^P+mn(ma)voO-Gi7~n3z`B0`IH`WEmqvH8s4g`8sD(X) zFqB^;X#v+~>x6{CbPKshK zR7HTx!pl%}fF z-<`Se(sJ5PprKSj9B6ZWXGuel#ex_%-I`0|jU)^sbLgE+vub+W<)j^k>v%9%I00n6 zM^;=#qNwOcko9`mUxq{K$@kS2 z>I8lFd&HM|ZnCq?UcB;Zt{0Nn&z|=DF$*A>?J8 zhQsi2x-lsMc*fd{9dX*gRkg)TJ@NALA{?7}AISzp^g!zb5Qlp}^t|;84%ZEZtvw3= zPf&vyBVn_;LfL%THBOrECUX_<^<7oxfLhcFflX^zckhfE({j*-!CFv*nC;FWE=dUX ziBvRtr}Yi<{_+uJs#Fyqv4Da_Be|k~Z9cGqgI`ZjUisXhegF59N((J0{{Ikb?Z0$9 zH^6d^tSz@|s_<`Cb(*FoC_a8n%SJd))q#NC$TZ<>TYtYcP>~%g^Vu(&L-VOuJ;{2t zm0KkK7b^o`O{k))zd8##SG6gx@)PkMhf6g3BW&w`S)F%0|l&WVW$K$9w}qEaxRwU_0J8|}r$ z;KgMiV6MMs`3dk-a+a1}nkJk!3NI)qsH-R06Xrf6pQYCob%I3n>$#2V;g0uaDaM3R zl8<@a>*()6?2DjL6)hqcn)HQD9R^hj0pjwn=qB}q#s(Hj>TRl+QkBberRUu@GqQ4W z;?`{s>mT^%{bBRIwgxQr?PWVCVG)|+y3WMOUo0fVDzjG5{4K75<&d)pVA()5h7o<0ZOg%N47dm#Gp!8Imd zRV(bitZ}j#J-wU9D>3VXhqjXq0j6B=t(r4}U;*8P&Y3bt#rl)Fz1;vtsjeQTe?Z=N zg|C_p(+_3p)~Q=uUcLdL1*D+&&`r=%0JPPxpPEPnj_knqM@`ol8EtUBZ@NGmQvB}u ztKu(4{xMAeaFpfMi9s7BG+_u2NNh!8xyi}N@xta`7n=Tl_b#HqI8x8F_hkfG0hTBpYRT7Q}}{L=5M2o0bKPS8h~?OY({t&fj1m=B7wk+6%j) zD~T~#ETXmqz%Ggt;`nAP3fGNo3HR9BV$?|757l3JxC0mn<$!_jNm(-|PLU#uK)T>R z*J4)){6Pqia2~pcn?G}LUo|EpBa_@!-V4YMB&11pS*H<*n~;Rs`1(Ch z&)r@e4)-PGSB_B^ZO?GXeS^Z&1h^1~F7~Zu89Kh4_M>jC~Rn>{nCm$suvXX!FmdprM;}N5u8)G zEQ4_E`Hp3%Vxl%8<_{-t90LI>G~_av(}Ayg7_zAv14x|V2MhefBfs2tTAa8Y1xbf( z{!D8Z#16_7+zxRHt?~YB!?(;}%JO`IvaPRde1$02tQVL=wQ@UE*7XUE;s^H7VJYg- zSUpLLL&59WU|?#-yM~74wel`7d#(&d)A`4YfZKnbA+p35@p*>uh%0jMA&oXkJ)8o> zT9+~}Dm7aV1trBG9m^*z_U10FhYDjQ6uLLTw_#>zpi>}9bzaq^!m^mpAn#iZiRtBjSR$Xn zkk%mlKx*<=oCQK0riZVS!WNjIkx7#9bS6Oyq_5`+Z04O5A5`d`T7YT{;07yWWmP*3 z3qc=TyP*n*RlxSlLH>@o&DImol`&&5u5(B$HirPf8sKh5v+n)g5UUb~>}@URPRsW? zjJaSPC~0zutXj4$#8?HaG9dqgM;dCs%1eGyj{)@9V&LZF?OkMA=}P=Z++pkq7yR%M zhHN{m-%tYVs%*|{-}JaI+YA-^^Fd(S#CjX7hXF-YzgQ9HF)q9N=F`v7)O{@pKp@V$ zu)h!MT_a*RS@J{TkZLgt-KqKDY4U6eyrkW>zf#vzkL@?Uon$>CumLAH5P5Vvq6zgC zUPe5YpEVSR?PmFI`)e-tOkQ*hR0@5$)3r?VjXnML6E9J^-v{)hNtx5J%BE`zhYy1g zodjtUfJV^^0z)t0x zj}J?`ZhZl2B4wd8D(ho-GXH~JkDOL3``VwxA>`mg5I#gzRaNb*Px1griw_6mzj^bA zY{SOJEB$-}neL-FV*uAl2N1sE_JPx|i?YmFx$JeDTMRc3AmhGXtoq>gGS=bv?fd*n zDK;-5wedQ@-d0?5q5RHPqtUGalec?a*r?=b%utR7|1x!UATuKq{bHV=?oyykhQ(w_ zmD?@#7O|1R2~Co7#{fd|@*4ph6b<_m+L@tS>Kyk%;$pI3ASO*;hG3w@W;IDKu-r7t zE)DgIa7q^U?07=QxeXLA;;HB>o=N3_?{SHn*0vKgRw7W(+>jZH9b#>&z5sM%C+%{# z<8Zila^P{^gl)9F=HJ}j9s+Ggi^dkY;Eozz_Ml385tqAug2V6E)K>tizie^A-hl_Y zkjg-LD@b9oX!r|3OI58}{J(()|MobfIL)fX3z-*#On{A#-{auOFL!U;7~QI_-W4Dx z3`>-iN1|FH20^PwT%qw*{X!${_vh&P*icv`3cIHXg_DSnU7E&-WuXa%gd24FqPAE)zo_mIezCBaYRp0FJ4yng4#|v{pgy(ZM=7 zaXYQj%W3>+3}{1|kS#CT1Q_7G+pEPPaeRb>O$FFS)C_F+_tXwzC2nUv#=g`;mO*rF zHAVp*Xqo`@jOEoXQ1ApGzcXhzs$hs*%`*;Db!P}u^~va+W}kyoq#LFpIa>`3*|dH?aH< zdw?euHS zNw`p({Du2svO5{M5Y+59!q}~(N~iH+RYv}$y+uSEpk8w?uVat3@wte8sEl|1kuGrv z3*}N$Rwl$5PPc8;whR#5DQj}R7!_gSIQ$_EXs;?xMY{v7usjClHL-W=AQGdaqP}s; zAqIaasp-{v3DN=1C=l|2tae@U))HQH5|KUY^VQYv9QeW^^_%|VLj48cnV6Cici2E- z95@LMCMX=C%)*BfpaDf6&ZYf4C)=}1B$8WJGR6J>$Gb|sjX?jG3t)K_ z7%_g3@cKx3a5D00!!2MxnVUnHa63-PPUfIA{^usVC zTjB%zkQ}XJa{yU_3Jh(41Xp=N9)8^N^|>p3+oYkPfiQR=1?m_OMQXs|eLZ&>A_n)NsX{iy+iSIhzH!~}q|At$aoQ{ zr=cLureo-wCR8azE4O&s*aL{8j^=+wML%BAg6*rRG5RbUAlLo&7y3!F(s?gPZyZrz zBTqbKNWU0a*Tkl^e87n{9rF5FXm{QM{QY&-D=lVDds;>MSQ`&h6@ogTGuhyU?@I#z z+*l&LJY%kk8t^65V>d((B@V`hT%F*m z9HZQhgfX z`}eF8cpz~mUn*awW>p@cRczD}1`sk{rlkWaoy2i(v>Q>`G-0!?mNigA#(N#tx?Z0% zbJ~w~b^xWW($kn}1{6hy(E@w9=~`@uVIdMcE>f+E6BsrI(!ufcRDg<#zL+!naZWHd z_ro{Wc|LrYQd|1xRC=aI{<~ieN&(F~AvgaH8R_HVyKbozb;Wnx+&6kk?as}t;O$9k z3Pr{8hOO=!0VPDQRLbLpp43DcHXg0Di5g%Sn(?SpH=LxS($eU^yNKH9j!C{rcd4V3 zjNdsk?D7Lxq4O7EycDvOm8g>lnOeTi1(tq=e}IC{V4SNSM+Q( z2GdvSRN%O{X|cGVx!++=1t2Ksv1_w1(abLEb_r;@cS&O3+*>7{JW*bJ5OJ$jOJpyY zB`aCIPIT+4;=APjis#q40wvPU&&rpDxwotavCDg%@|KkJ^;rHcjP17hQ5^|d2X*LC zc2F)ojj4gfKB>$O2-hN3{gWd#b_$@Pm*>Wf%h)oTf5C$T3wE*%eLQaCO*h(Im1^E% zzBnNtx#MI~;?{lp!nId6ZRMv&(3BIVRqHL2li`n!{B%m|;1SaoZ{B=idXAnm!!L3Q zG@Tq+X-^v&A20V2`s7vUb)+Gx<@?E_J)1EP+n%Jyz}?t;F=2RZYwN|& zjpy-|FJ^!LyVdbb+S4(z-TJ1-ntz&K;NPNl>bLIXv5*#o=fbO|(yiNLWJz7ui_P{z zmql&e$YbJxR99p+n0@q=y1wG#^LtYhj9mFlUXk3QeqsQV2(Fv})CHS1e$)(spgJvI ze=oVa?!g?E!J1l@*~i0x7Qv~#a-22p#8cm9`xNTjH<6qE$M2lXg@mn)XP@8wvGd9P~kFjV;dzn9c^7mn{3Be_oqzBlay zS)qm_uPcp$?@sJakGqrsbhRZwDh8QtHR0MP5^Ge8&j}irp`9VMtpYIDZ1T&|_83&-c=YU#eRz zP91HpPtpN)q3pyY&>D1pJCkGAxrMC`4*qq64O)to9Y;28uWkMXF8|txDNC2$8?k2N zyjFoqS?C4-1)6AkEv-M^?h%8uH>_!0hB7A|G4XGh@($O7nERT{b{D`ImEgXkwdlr- zSV`?s^TNpWb22mArKG05oGfEu7NREp+0~kEZ|7Fx>gr3zp=;m{2}8(_qmDVxEuFv~ z=jj%(UXIotjR4~v*CGQBs3*R8PoETHxRCDi?C*dBJArxy&;79Mv|PJKpbS(Kblbfq9cLf+niP8eR!kd$GR=nNQM4z&@;?R zj8zmpOCW?mN6Svg8f5%+=EAk>LTi|L&~%o!Y#Ub@PKMr*zk?YBr}^6>@`#9&a64Z2 zFjV@w^R3$wLU`A?+dv7&wm;d-s0y?)to!O6u{f~?PM-`=)^3=oI)CWA z7oFrHckNyeu{tyJy^R!#!)s)GdcPh~pBfM`-E{M&8ywK!*;ZFYrxAMxw^$?*iyiGm z)L#;@o0R0^$}m>Bk6eL=iJ&a7ufd!R<4yb#`q+X8eCe`P9h-i^H>fWJuS{PH67tFO zIbeG6OVa$S$Q>~)@;QyAkSdoO1+6qK$c*p_kwznpJD3EFn|I6)mWG5#96@^T-*N>e zHm{&$9ei5mdif2dUhj@@K;H)k%YfVzuv^-zEespVR;-^tLq>to15v!lJeB8;oQAXs|XLs&geH$5n^({4E5<^x5sIq5H|* zpnr8lE7$tp-#g-1l3(f->6~$PY*$Y7pR%7hA4=(`e^Nou{NK8f7 z#c>b){ZD~Xmr8cZ*4EGV_UM3f^j7!&9j)+Gi6G7|+P#VEeIQvwM&KpflGYFRWx?#F zT_5GCz<$tDYj1@p84PmhZRNcUZ8A+CMR#I*mnYEYtQ7WANY9xC$nvbD^Zot(buz0? z^6cX8em95S-x(CH_970?p558msUxkunqrfWdA{Dz>(``mYGXjH_w+BrVdnDDu5Wf} zv$Lg${@m$@z;9ZA-SybHg3^+FJUhu25FooFnv#;T^;~%?STRBN3bIP5_uTl$zU89p z$iEJBOY+#xgkrRLMi81VXEqxvZ|J$0%a4<)h+}H=s`IX1J%?P-nlhWGYHG7{%kGIC z7prYo3nl!fu22uK3}5fruzJD_W}N|pg>n5y5X*gAc9#aq<>lquXMyThZMyvgp2Ck^%v0^{|&(-pBfQU3nqNWGu1yW*mDfi2zs&T>$2@VQ$mbt?Y; zvbPleb+QMQ^g%8y@MgdWNtAJs2dy&}7rAl=0Em8~f%BN>?OXCly#oWl!+#Map{)m% zt>?Fp0kxItNgLt~HUWuj(vb@E>~q2S(=%&pX_2DtE~{PeV@B+!Pev1F@_)bD>wtzG z*z(OP9Q}I4p!Vd+T)F`WG)|ql@M?c9`kdUC;CE@uS1z}=OayfTcck1gzrm}?;PA+w zYr6zATHBhWD$w`Us73lYFK#uL8+WK4oSks5rF4u{uklXO-l*)ME+G1t*_E*BbAr$C z?{DyRXJASF`yPXdWOenKq4z#jMgvi$rHz?>EKSl*UyjFFn@jkf2w6( zxOrD7h#c$f=Dcnr#8q?Q;WB||gF!%}Ej0WU2}5G8{xk8r4I3;m(AF63Y4=s$Ze^rqV3y!w(%?5&la34H0%`0DiW zx$J<`PazuhnN~Gu&)h{@{O~Rc+g+)NnmQt7M~)v4<>R9mlmni)xow%F@6sNCk^rb< zkkY&A2kXBD<{!O3mB@ZSMvMMZx1M~!(v>S#ZpSAd;G#66qw*h!r#-DdSza{k3X{Ez ziq~CxzU_wXKA#$lW@`b1N?sg9r0xy0_7F`+u-?3W6i2%sRkNcNJ{NB(NA!^PD6IEr zbDrnc?s^!PTJ4+!OqM47S}Pv)Wn17)|EwCeir)gyvzp?55AS8@$Z$)({qOJTqT1{- zT&cac63)#Ka1KC8-%{I4>GOHLFsSAc%EYe<8iU-KnSDHXJDg>w$5goCb zuCrA3d!j+1{7Vg!N4ieA+o8ObLXL+hT1KyfoPtfRUl2PXeyYyJKY(w#MW9Ok!1L^* z#-j6i&w`i)$L|H~yZA`E5GV=*S;qHHG9vpb&3O%qO;U47fKuFDIGUc=p?>=+7$W-( zA1fzlb3i$Mi-Mks7lcBZTDt8yuek*qdifpL0u4!$rS_PMwrDpf>eFP*6H8ljx5aCi z!UtH2TYMR-6W_02*1g3w!4Ikyub^cNddMl`&AcqerE-_-c>QkEUHmw%XylwDsPJeq z*H-u5YY`jH%Yx|;lOH}?K6OHUn)6N>!xG$~z)Wxq4>_x8f zYRtTkZW^t4F1Swbm%KTxZn^bk-CcG)*@ahRx%O@t)$%VkJnA_Z$Xd5Wcm`?+zBnL2 za_2dYfcx3fY}`>vZ3xf$`2@7#h|Mo~2h8z`>l) z;b7q2NoUiXJAZ^KvNEjd$JeCz>_W}l4sNK{e6Q6^%7ky4rc2egJm~YAO)tvi7QI3x z5x026Q|UE22J(E*^X)VJ9%?r7;;d24B=D5UxwLe|%F5Wv+4#%8CbyfIU5K z{M34eIaPpMti&t2&?+a(qVqOR=7&+KVAyfQxZ)Boaot{s^R_r_xKqdWe{1i$!kX;5 zEMnmkK|Y#vQBZmZ=|xdd1nE+wiu4YlR}m4ECN1=UKnMuZ0)!%6LArE82puB5_XOtP zH#5&%{Bt?a-29j1A?4lgd-hp-?RC}`PvHxa03}4SWXhBkUJ)x@d4WqiPpqSZ+y59% z_wBF+q6?I@_k@<}3j9U(*~cq7s!xXcP!hnj^EG~y+GbcpvfcHbjee#U{8^dHj5!ca z{MEE71zDP`=LOi>U^#|x_^=bYS6^r^kusnR*n@#DchCGzqGV$lT|O(iyiUn3jOb$7 z$}v=}dhuzuCdHhR4JpyfP6Y!@_B*xw(09P%All(`uJs zAe3huqUhF{%zAK3fgnqcL`P<17)QTe8AVATt-?gSf87V{szJRke;1VR7667S#+g*| zJ`Ia$P9}9|i^Znqhu=;n|56G%6n-tw_!vxHES{qSD>0Vj3ApaYuwtI()9Pv&!c2#c%K6APSQHF1`Xu-AkU%ZI2l>opym;fO?+acc7KWWGJC zK71nE%@y>2_E)h_;Lm6aURIKVl^lx` zcXKCg9P06R~3_*gV-shrJ5LypvY@_44fGpsY0>AAzHkD#@e z@$71`3bT<<+?y+wT>3*%#4v$NqTlxfuE#7*@)J=Q3=Bf3bPrxeNXdDpbBSgt;mAnd_agXDJhCq8eKaO@Hyu`?#e zl@gN;q2-Rwz2lMOqP`WRO^vxpaQ~?e7xC4a?xK4L8*EnOFeFIdpGHPzOr(;tS8d;@ z7JA=Jpf84CSW{cQx&4XGJLtPjWSiJB$;ceAA0qQR2uKxo?6%Gfbl8&xCFT2XyRtb- zG0m;m5HM$~eDA;!zq=#oudr7qdoYD^cD_O$c%6jA57<4YBOoSB#~damCjOGX7SVfb z>};-{o*dW&HT|*6U^Lz}Ma7rq&d!;LtrHr->rLRxZ2Q^%V$GcOX%P5x%@U->=={L~ zk&^D^_TA4a;mGY?0U|+GiYt*Ds(T{~NJpHTH?bjwQS%RUaKT1p%OGK-jkLYhJRj}F z5h0%OdKS}MU29={dPAc#qSZR*_x6a0ogQCj96yeGdNzMLG3u=0SOok$)#O7Kupzc! zFlk_B*ybYBLx^18@Ngm}Yvkg1rAsHtp{Q%iXpK|0YhBi2&*m1l8lmYv7WNZp_M$Mq`+44= zS*@|krTxJ9drS zWw%5B+=hSs(tzJTh-p5S+Dk4Nu$Yj=iOa=GkBB$*x6Bg`4&c6tq~14ny?;Hd_}R!m zx3&#WJW*#_j5z-?SrIMrD>wK}+u^*UHq82I?ayd(K&4D%RDYuxDEwC^yu#fY;J+st zXw}pxPUYhj0pvM<-%s{t8`ZgXhMi4rlZ5E6A;9jt>ZPF6-Nd`R5}!ULf1eJ-g29KS z>Myw67u@!gUAc=gzr{lU=so)Rg6Nr^U~rI`t)hv;yR@Vg0t4dDCpJ!G)2_IBxPA_J zij*BTEp_0(x$acqh#p#e-St6H@48-)1(qR?!dP*l@={@Yy}vBIP=n~OVG;^^_y^*> z3(u#w64dYI?b~nf6~Jv$Qu}4JgvtujN2=moIr_-`sVKZqC*mWGgX^Ja$=Vq{>f_#S zahD6nT4h6>sJ}MgFw)rO$XR!Ud2$N!~;J% zWo3xa+c-TCW0g3mCa7olk{_83Jpm(=r&@oX12waaV0JNE4bIV~N?Z(kw_!OW5%9HJ z9x3V!ZslAbW()6zsuIP-I zUR-RKLKG6Y7xr*t1k~rCqwoZ}E%kY4bC)k!Fo1?%Hvv?gnl0^NdCwU|S2Ixh72dWD z73bUfnaS4G57o5Qm6?jF4(SUUOG``LrnOM)2}OSiZZ4%NLQrcgBK#-G2?PazHg2Dg z0`IQOx|W!lICsEsA`DL}z<$;$#^JH6_YfEIDW?PGRK>gmk&naU#S|8)ybVlLio+S&zHKb@FvGHIep{|1NIsG5d_6fnlX)4{)`g8hXEo3y(HK9Z!5wvQ&uqEK` z;E{mWkA*^=j(o>gf1C#bJkWVz0yDoq47#t4rN-U;Xf54$T}CyJq|UPDJRk>Fga=hh zX{3^pXr%r6?cTMTM{CiE5P%N1l$CTHC|c1SFy+>_GgW^>(`>ucH4X~UG-NQxA%I0v`U`pL78Ex&^v(LKPOWPxE#Y%SN`6it}&Lm;!*UMXSePK5Rsd}$gz!_ro#{t|7#HP>ZxKA9LJxaJ-e8Yc02K^ew^ zgo()C{B~@?FA&-;>M^5P{OC^kW`r8lcQiYmVQ20pjI5xkljT*>*p0TJcE{Vh@%sm2 zbQJN7_f{;qMblKFjZ9=$I8@WSokasb174mefm=Iuex3&S_FXgapOGqD%gbX--o@(3 zGn`O5j$2IhFX1q0U?8mU>B`j#I|hfnZ<&GVioUfS<$TV+1}}QsHJJf$1DM0}g;B;D z^b}L|^#T_T_hc;e8W?`2?qk=Q`l@v@@7Y3RT~P@|K%$;W01FbGzH$*R@xQ@(U8qR( zKd8P(8zX_mr>o|@WY4*OPgz-#ozslR-H0%Rn;SJ?fsE_ZJv1!kaH z>8ihq1>UUT?9rt{FOzN^L1FaIw|z2H8sia3e#75Ob_5+JysTCFZhCel34HHBb8Dl) z_+OtbxE_&YkbERKDC2wJ!=ufD?0EFdj>pz^BxDOncb-0dn)QItq`E-PcxfBZJ>}&0 zqNCLuCMsZHF0|{`tmSoP*>J$7nu)pH?)FXVNfqm$sdWQEb_+zEhG~A&7uM3!dU}t3 zohyBJ1(Rlge8?bca|;M=i%jaFmMS+sfi?@gSp90IEXr@Nr?1071TsB+dosZJQjP*X zS(r77jgOCSwC22mFUxc4`J$RuAFdQ!>EiNJzf>>B?y>(zpScA~0@^*N|L3Ga^ycat z&i{<*?8fK9XQc`P>%Dw<8#!xF%Xb;p93DBIVb6R>jbqEWi!cFK{rqHLHn6g}XQR_Z z@|g{pzdR5O2QNjLnTw_h@>lhe^H;dL^*!QptaGG-?nZ0Vy+#i4PR~BQzZ8kdgMX}< zTU>tXfLE|TkeDiOFlc$K>aGg)MOvRequgLK=wtyOQ)S<0@|_tjk7rzX3;q_zA;FO?8-%Ug~LxENVSE3A~e(Xp8mo@XQ}@hhcwFBl3UQE zTLuHUQ8IDAvU6c;d-rEmFCojiwg~h#Vu)d=K>cFuXOSf(>a?KAF0^ryWZeoCi5~1u z)&mC88y-1t5Z4}rlnVsZ*`B@^%|)aMr*zAX%sfeFRL|`QS|tAaW_B(58-?us1`HQYPvD@Y zL3nD>0jdwoF@HAdg?(ByYH*A4Q5l&(^iBDmYY~`MmrxB-$5kgc({`Jvb$5fAHN)`W zDfd^MS&_z*d5sMTOC{Em+tRy);dc$0Wpm>yjr(mFlt$HBk3m}5E2S9S3x`SH_Wqt~ zh@Wv7gQOVPtM%7DU?{|$mL76>dX`$+si$YG*0}Qr&l|y5Pf)RHJD##8n9Qn;2lhSnO>+=fi?2~~f%Rjuir$88I z>0T49Q94WVu?ep%*4a_lMV9Y zO8o-elglLz_=Djja7E@V-#4lORGgfg1e2FSC8p?8SA2j2MC75F*l2O6wtQ3O2kM4i zPwFVeP*P#SXr}i;J*8^$Cd;tBj`dGajGhFcJUN+9*JY~fYIaUfa>74G=RF8H_7~a? zfCasJ3d2-W4_bH6$Ez#g#$qqljF8(+l7SL(h=S~USC^>zTBbY%3QhpxUY2Oa-y#A{ z%FTTN#k7&zWUTVtZnCHv0dV_FqfR1A+Jah7*q=bm&IEw!ZCgy~&prV;;haOHW5g0px-!$>9tIAjiJ zCHAxbsx~b?^Us~vEdL7y|1Vhif4}r6T>rXd@$caLJ2>YN_@8a8|J!Hc=hg#?`+tJ& z07%#Jz^?1P>5WhQ71?ZUmxv^#r8R!FhJ3tWdG)H@yPP>f%w>|8^!e$2YNO*FK~mpp z?a4+yFbTQ2V=0qPbG6$FdGvrn@z1Aik3w1e(B%Pw9P!-kzMxn9?$W(%SHk##rBT6^ zi#yPwnbo5RP_b$QN8c9q9ANNwNF&&ZRNrfAZk}m~TnN2D@Hv1_()b0dv_mb^L(ZUtlJHNV+tz71ido+yg#IgzLHj8$(;{r+9B9nU_R z0-#X%&m8BSDmgFOYA0Yx#(Y9?Gso%cmm_K58zY(5W755McnMGF{Dtys=TrGhC5i9C zeH~SYhJAvNckV!IE^A&q4Ay%s;K`wlVbqBbU8`PCdxqD4M{I1~yvf zV+~B`Z&Lo~7_>g>Ynn`;*v!fIqGTK{d04U@0~B$l6u#d7Fo{FU>FXSm8l63d-y|)KNVGczEN`~XI(|RnUEEFVh$)UuR*_F&eHN} z^j|u8wf%Eq2^`M3cuSh&1_&$v!gHp}0~MN!Bx~Z1*yiIN47gu#o7k3jmn7gnqV9&{ zS_HPyX94X@C9+-4kQFydKAVGaT_Cp0c?OJeiAJExXdO&d?%hIlYohH>v#rW?y=8&V(pcs_(WZAD)L+!Y7Z#Ht8vy&1<#)oc-U8?C zep$*K()<*dz5O03xYsZ2stPE&8AX^Z7Qssd{)EcBg5Ts-)0hhy;b0^>pLWQ&mqijw z=j3#`+J8Y1TBNU{I(HxuSxVwf<5y%+V*cN786g0VN_1C7L zimC&1e1KhNv_>zQucRw}4 zpw5<8S-At;oRGYz6$pNw0qECMcR0wm-HkseD@PvTnSdg#t*JrIhF(7mC{iH1hun-; zMtb+Wokq*RG#zn=$u{l!x~)fH;*!#mrDh#Gaq-%GkT?weIhy$HIpT~?f%A#*ya$E6 zkk=Lukf84Pcblo^_{{lw$w3Ek0z&r9Za^{tbTCw)xyT{Q_R-Xe|Bf(s3V6q~X_XkI zrZ8T_{`S=m$_ad$=?GuBU?g(K_@FC_>8icBBhJqI5}cLyl|g56dU{LSl$WdcDi!?M zu|8CtG0N5fTb9Jmsis~2$Q9`B)(e8{Z>Go?6A6;7_d(a{(6x?qU{nk|D@+DxLTsjL zFN5@!3x^|t68HV}BMQ**A(}SM6}l1<8>*t$FFrp4F~w%us24C%tjJBuzhg!8v^j{! zL!rInQHDN1Fk+`$LVUk0d-9ReW27C{s&LMC;RpdTA`RCx>HV%O4u1kxJ-KI*@AGCJ z!q=-E;oX)|$|?PBa{)EAGs#qxV`74@Jb{FDB)^M^!)wVzz?vBS~grS zt=}II9m81q$1ixwB36VLql&QAi9iRVRjAbVF!4vkJq|XJRA6OAJkdXK&g(xtMecLt zYg@M-Zbm5UuHfAH`1#k0+g)e2X#qtZ41|UzU+vuOFmDykNO7nd6=mh;aODtbkm6_U zyzdO+_&5NSF9Lt|s}V#DYBhP8N_Fyr9UM#nXqGV@7jqo2=>?`C3gP^j7?3z~w0E5x0a4Wim*Z-c5n12YjA z=x(^}Ph4ip$(9P5iM!imi5h$r+Y-tb8 z(x6hXKmG?wr{v{_?F)fJMY^Hpk0XfYeL*Y_SL`IYxeF2w`o1+(Y5gEl`Q6zyA*1hO zrggpxo=RzHX&aQf^IIWPu6Wr0lFyZTm2_$`f~TdAQtFbaKE?BfXONw?)=4kd<+gN%qjG=t<3n3tF0j7MrS^}z`m}zv zvUf@Cqn_upjBMP;&hMhIFS|KbHa@ATtK)V`IODBU5t<>=It4l~uuw&T#a>Njcc`Ac96O%TMXoP1hL2Won>1eBr5emL^|o}Jqg5GOcJijZAlr^R;- z6xyHgVcMr6s`%4pmS^805G28sg$A8z64$>wh|f(=-``O}LDjB|6e~S@#`B@0qrxU` zZz~JG`STqpv?)r#kqf17J1_HOI5^@NtT{PB>Bprz!~{B+**UL8u?4j^!1+gRISf1y z#cR^d1hl!)8M4nqd@K1EIFUZen8e0nO3xXQ%;=j|HGY-$8^M0x#=E!OjKSjp9wlz= z+B-iYdAq$gp|#wdrk0D3>obxNB;a3D;1gfp@UA^f zwdVG6bIZ2ed4DkBtadYH&jffoao)Zi+o8}q?LT%G7$25eVg$gkh3pp*97K{*QUeVh zLdZpaD;$gfG@j?_xgiBFx+3A&rL6$YGgdg#eow#LCFy-g4`jk%SLFmarR-(n(^y5Y z2bKnm%4cW4mJHk`1Mbf~qxOAW9>&$X!1D09*~&il(c^ZPt$|FCBGckxj=)Uwq?N7o z;#M^J!?aaYif9mb5VQ0%??*Ji(%Z6qo!}*=^d>W}@6|s3F0|w!9p4;c3BqSuqK}Nd zs*PB{INSbNC;U8z)>ylMnes~dD6~RmqMeYCbH_5@LSko9U7_$h<74VKR6iozmR0G& zt}~SXGFJND7nf~SdQludJ3oI^>M&3L+=nV7@|gKisfZ7CH#6-qG38Gd)sleDdeV38 z@(q5&o_8CF*z|N&%?&nLkc3D0(+rk9>_$nwP{c*x*MO5Kq`uz2@&j3|x|*$VmA>=S1G>f7aOWkhb7WA0T*P52aSOG; zFRXo#;8*U8y#Wku-Xf9Iz*xq@Z0e?uGz{b6zAb^lbaG%`M5Tu8S3oG4N8U|rg|kHqZc)Zsh`KG$ewoSQvgYf)wl*b$gqN(1l5Cf zjE3+n2$u{%n-RK2T~wVw%yHFee7d-8TDK{2NarHh0juk1iKg+PT}9~XDC3jsuf)>| z3=4T;P~?l-iG|(CbwlOdn_E@QUc*8Von*HrNSPM1~A+VSV_oOSXm#-drA;9B2`+W%l#i0U|bE&>Bg&%TScPM{^_cDq0iRM3t8Tc$S@sj$bsB;BAH(*P zKr;Jr{N5LCmvaCwdnZ*azqO`RMb|VTJua@(l$%ltW?HG$WK1IP=Gfy4WOi2ywAUiO zBoceqs?!02N5x&0`Q8`Z+-Hx2dQGbxe8Th=NEd#ik1|=Re`N@C6z1ky03)v-&8_W# zd(X{6kO0*v;)Ht5)wKpiH+KG=Pft^C*1p@(eXFPTMQ0b+A+WYlvjH!Z*lPd$x|-Gn z{yObOg1}Npo#BOS^I1ud5M}l)97c4%y7|;9OfH&kUGx8^?;abJ)q~kDwQM&j6nx&0 zQC}|yEP+2iz@{DzIQ!Oqs7$LW^E-Q0*ba#7zwC@+z@AOuC8qmNmE)Na2(7pSwqprG zr~Fj)4nP0gLL*qjG~moj=$rBiyGbF_sd$gU4$)WOe9_0o;?Vd{$&Wq&b)NA+7|6ww zd(hn&p8pmA99t`t{Shs&ZNK6Er!)#5`}ALQ4*CD%OTW%8b``x#5)fTZ%aCZsr?l9HA z_x--_&a9br*ZptSo$0lbK3%6yojSXA?Y*C8??bSnyd*jbF$x3%L6?>iQ-(kgbRm$( zLr;-FizOBD9{76Xs4OW0DIOr*f@NDo5K zlqpl(Wu~Piu5XojKUSIX`wGWc*m1X!ZkVQP3iTZ2s{zw5Heyr*gu>@p`##WIMpW&O zv1IsX_qqhJyZ!tJ0=Dta6xoGhv{Ap`iT(3Qf6eX$`PZQ>JFV`&j;M@A#Q!;>q59vo z30HLQQtKo6z(M1;ih7pSh4C9VFIH5DVo~@@3;t%`iTQ+dQ%zjeYIbhbpnpA-DQ)C$ zlk(#^!;c;q=L7s-aD|eE4fP^t%4yfTo)YeUDOH$h?X8xn>y-MZepntfzZS8SSB!TxZHUZ*}jBq=F}Z(J!W zd3e_T`w3;cjVG7u**i2bk1eZU80rM3R(RnH4`bcRfW{L>_U z9|~e&I=V?iHJ(9w+w7{)&2*g~#kE2#277VV9(k5Sx8#R+rO|rZ;1R(yQuA-nud_Z7 ziHn!m2ppHmwlGpS$}$Xg!QJ_nC<9mpDYcI z6Uylqh1qhbO-jWl^c2B9X2-V>1Eo3~+AtFJbq};@3K-U%!0Z|>cd5^17kmQ?~nn}^?G%U@DGDWFp7Ot_qBl_aar706RJGK*F6 zC%%lmle0hq67NrXmU^Uc;=VbVI`wRCEFjuQJ6?rUdfoeju;-+q!IIxob8>Hl5-(lj zYYvtUvPzja7)hF~rxAk1zDD|9o9k|j@BHQ=kNQx~Cq_)t<#a+ljV?1|>L|W^XKcjR}42r6s#1 z5Pwo~Uv7V}?Hz48D0$~gXFgq8tfsaxMXPYFdVkY!6{@JH_^b3i(|}yU>U4$K`^_Nm zkx{((?Eh2SReZ6z7&BP0%6ogy^U`{UTwwHQSKi0xk;@)`ekl`APtDj%hja8jgT*0? zZle`@rVmGG-+}nT8zo;`Y~CP2}`h3{Sv*ShiXE9y^ykY8 zX$WMH%jWRHMe>)e_8crKz>-_}`F7pIA$GBzf&?y|XR@)o`5|)S(2)EUPu`Ct59A#v zUK6Gq}~hO6p|5S8m}B#nbA|<#|5cd3m6`3KBj1X*MDW7(&qfz z1)cP0cbensAfLs)(sJo(M0Jy9lM$XyLRH6{JL=kwe5!oQ%^h;O^eDca`2-FE5=QG4 zYH-#zmhwRH7wX&FS>ws#w};jQh>{!Gn->d#wca-vF-*GQ)hRyk3HTymcF%iWjGYfp zqsIOuN7S0;H5F7-0Qy zn7-P%E$>BOt{F@jcO0t78oKkWMy#N|)^UUNm%`$Op|!RD#dRYpH8u6_TpbAoI&nZM z^n>rO76_yz2s^`W|MtnHn`i5M;~OLSPQ!&;|JPhxZ8^A9p9x|)Q5t_9EoVq-*4&$+ zk#k~MznyyodG^d~=->|1@Z-mTi$zZYabqT_ajBZA1LF3>VmcQ%ExVMf77$=F?LOX04G-6 zBNvj{1TM&DR07#lugjgbmxxs-V#zbrGCMFwZe3Qkq6al01)53m-}kTRfeol2D8g2q zO!mCq!b}sBgQ1+DJc+$KO8t#eqV`rwG#1uJ#DHruVY8lN@I2yfH%hj%7kq9RY06J@b zvG7)GZ~hSp2?-hrAELEDL*)0v*j~*7O;w4Sp%=R|uFoyGY&uIZZ{9IP8_nC!evdkN zJ}=@MX9u@|FT%)3(%ef3fcWYV~6w9g3i{+z%y9vS09(Kl(UtbH#1@#;KqQ-SrlOd>K+#9;R;KcDq} zElA4^g_o+ud~`uc6OB#BVOm_X0k+rOqdtsk`I+DC9<|gt zZajkM@&)$BI`7OpS@gOg8%W{Lapr~O>eR7sPk5)iZ#oGN^NJ7qbFye{oeD+0?dzjb zGapSSdjBn~%zBWLN#`om%e{n!Y`Co|cw&zZxVRdP4f#h>bh5CkuSl|L9_oVbooPJ5 z#WlVBMdHK??Gej*Y>5f`38S6`Ms(1R?z2E&y$;Gwa6;p>Q@CZO* zPPa#}ZT=94Ht7Q&?NOmxY!ZIq;cvLtRdjr_I!JquPHjx>gpR@KGj~jnRe93 zy^)7)|*)N%>0^+vw{?!sj8-IzDf$>GET8*A-`#d;2(JI9(^ zw61u^L5h)yES1l<9BRi!{6WF|q1)qyLu@T1+1c4hVcMw{lOB?kTQILPB>B!%Uxit9 z;7$UYYdrI;zupQ&CVAwHxu)d7CS|n)8gdF;iW1xoH_P<4^9yqBv1Gi+tur;(}r*7+!NSX=F*NYz*dhqL66fck?E>- z&N|!M$)NW~jQ8BGk6iX=!ftOL^YHO4jXuM6duVih1nKJPy1bjzf6eHCAurMW!ea5! zSiWg!Bz2(Su~=u$^MO0IOHg`wfh}zf9t$z>UBnc>V)#L|J@o9V93B$4hUm*gH-g|{;-MP-&Lg0$b2@G8 z`uOicFJAQ<>)z9~9yt>JrNiKSw;%CErMCx+lRpJW`Sl4eYN zbl76`?iVqt)*j)z%Hk7`W9Hj(^T4HJwF1pwa(y3zgcAMC1|29PrC!%UOTg0J*qq}e z*D&WftjWX)*u)LYT5e-%5STTnWDuKtr(6bF!fc-{OL3Qms?#+=q zvC+qG_Z56QMS}3SKmRg;+qvtr&%B|{$LzAg_q3wDMf@KQGODyy9%WU|F7%c&2$J8X z$Uh^1@Nia&-ngWE?K1;0#8DjL)pXSm#vVh*S_~^MXQ6)A-uMMvrRa7Tr@x2mBjJqS{Q$^a4tk#oXz?zdE(JB9e9BTb~$#Vb-qT02#SOl(HDq5CgP>Xrz)W|;)xQ};7CMn6&uu7 zcS&MY!k+?N4jpWj*6%1ngIOKP)bcfdnHwYfRbTi6b5HJKw0S?|zZpx=RLOBn=rX8& zXWA{|luR15pW6I3;@L~MEY?O2ggSmtaa`W?zIl$<=%MKkhL!TvcdM)6{N!a+>+zPT z{+vu)-6ed+;Z44FhUX_w&cc%0o61VHnlk9=gJf%NFhQZmT zrB7o^^tu7skm_^$Os7x|d8Rl&gW_yC+m@!}UCT4u-XjHd#cq5L>+gS$J<&>0G^cZ_ z?y5zU4sKlxZY=;y4h~B_kXZ3CjPP_qweJdy)KzLsiQX)Oiyb>MJzD7Q5yY)V@+nvV zE+?LnEC&Uc9*j8Z8#LW^r7M267J7nBzSxHd(VVOn`y=sYC|B-nZKWlmnf^lazgUA3 zR^ONZW)f@>+V$rC1*lI0jQ_W16{7y~W1^8E{3D5B5?QLK-zEVVU*X0iXj87U4>kCo zL$Qv`(0>l3#NNaHISBgyUz3T^CIme7pDLHV4^=yX7-ab>jYLF5Q&pA(Na)0f#>U2E z8Gr;~pn!`&iu3N~BKF~asTF~g#}0CLeP)~vcTsq7`iLf>H=3~z%FWFk%leNB*y6&Q zO%$c2rE9&e*i!_(Q5YE+D{bb9(Mh;eUq!{myhrzI6OZOh>pfnR#CCv9HR6(Y(+lqz=U9s3xIe67xBrHXl?D_pv}DwWOFR+$krqw zD0y&j@Zs^X$iYJ6aG@3lDZdL^jm`XzSYFR_CKkPhr?$4Xr(2`Q0|Ns=p`j|d8&hS* zZnu|ge9qf`DQ`X7dU~FAM^GR`rlzM`=jKScZ5MvV4)*o67irfl?e6M?7rg`_B;KGC z*gV3|@$e|w*szwAXV9qvXJut&cX#a!d_EO3Gy2|4)u@W>*y=-sm{^A=(4L+bg@uI%78W6u zm7M--TU%SDWo3`_bZkC>CVtobS3m1KFN$w3z#^>P-`zaLz>qju|6>T``St6FSuD7r z9hj<4y$gDEb#-ZZIZlx^(7jH!EnvER0RRn1Oe9%ZS^1uj5VE^#rBmndB$h>2q(Hss zuW16eZFp@hPiAK33m}SER(%Nvhw_FL2DSVau<9Bmdg3lFT>Eo%z7=MJF*B(d8Px0? z9FaeN`gMho#9IENW?lbMvr4OJ91z9?g@ttj5C(8^SWC-0pfSJuDlNuk^wt4GQ(9H! z-`p&8zB`T3aCu+y{X14iN5@i|KPq_KFJO-885wxzrZzU=*JnGc=X**c^3klL4-n~qJbh{hhgjK0rP6xP*}(`S8I;|l#}VKvll$S(dwE% zP?9cwhrdr992}O`*8E);+`EUCv9O1=17Znq{xNdFLH~6mP4G`sWKbMXW%wsJ=>InT zA0&yMj-f|b(W)Tc@DZjA$y5fET#rdWINZVI8bwM$0O>^2xdJ=%)3p#FA8QFXcky+0MKUEDz#PPnWGKddU2uNimg#)D&gS}>F7m4ou z_?mr1t0W|VS_DtTM;IHI1#H!H_U|%TJ*=1n{35#NT}$6z+1 zfx<6eZ&CU7vA*JTdI}%T_FIFOPj&vMIH$-~yrU8}c$-K2pgJDrzXoVxgHyR%sI07o zZvWQmM&V1V1XRgw600sg% zd5YWlu2y{1TLy~!uAQ1iD02;AucdxcBAEY-;fQz%^Hzn<-_9=T2NN_0g`~$O@3J8J zaW^+@{e1`$(TrQFCBebc{!%b00bqC~BpP4|K=!@JLe4{$;tBEoyJ|wq_uq$WC%LdN zCFS0ovnDFWC55#8R5f`x<|p@qe)Y6Qu!n9Env~o>8|i0i+*=$UM>kBae_>(!TtuXO zsJe)t>l;z%w{JHnYv=pZp$m=I>1qXBn-fLID@Mju3xmKM{%wwJ*gfixZ+>kx_0-M7 zqrI;WnF2~0o|zf?VUL=Ai%P;jBA_OMRX{+1?bDD!k^qsejrDjX)Y?dj#}P?108MnZ zS`T>T)>`{j`_(RVe-FOOgCOUfiB>R>Y%ELr@fzdu_IAK@#YRuxZxeRJCslz31th>2 zGcK~QaN+CLyGZU#>~GHIumabw$sn(`y0*QIgo&x(e=O3a@M%`o=EOnYd~54+yRQTb z3oA&yXyyeCCt4^zvxJh8Qv5}ljZIAEp#4I%Gs*SoKEeeT`BM~&h=ZmZ^6BYm6w?)4 zoI{)Di=~AwghtP^&igy$u`W7JiOuC&THx+u#b{S2b0Q7j{`O#~wYslE?Qw(Vs-I2X zdXx2k$a^rj`~l_)+=w5uHWwpP$wzDS9gFcLFh5jO)UhIMf-hel@z~$e6zep8U0RZl z9SN4O*BKSB-)9&RXJu+cvQeZ&jYneDEf9uK4n zMZle0f7~$NfvB!_C+Wr>zsu52$-OTK$bQMj4%E7`qSw0~NZgzYYgT@u)X|+cu(CoU zNhIE!Dx(JJx4*_!Mx73qjf4e1Rw+3pyh$g;#MXY#jI<3=DzY^+eAnZ^$&$5>84P3+ zqQLA{U^yXoaC98blI8X{HSYS>1zaoyqL3=s+2(&T{7V?Yi)TsHX?N(EeU85O(uYP1 zbcn%3A<^bo9xmjUX+g~8b-}}{F?SI1D&M%+*+KNYf^@4a-k_kM$aw$Kt^M>2%;@!5 zBK_ucM)%3y?jD}d{iB)>U;R>Q)r91TYa+MSjStz1)VSya^oT4R5Hg;)m6&(U6mybFDT4`J4zLLltJ2?(uVTI-TcLpT0c2j}NKZnfx8a;=HQ%1HKL}&c%zh zk3b&l3F>-#Z!eC!`_)u4RESi+|B>!Rnw<6-?|{vpL}OsDK8@$U0Tip=WM?P=-hdPy z9tZ>p>y;&gME?C9u-$LsPHJYc*$#8zeJj-|7O$W)bx24X<6S9*msIIC5N z(pKp*_qM%Ghu<-2SCbm1B`@y}BmGINr+nQ)!6K)7T8$}p$~%C8fdPjIF8g!A1rPV3 z+VpuKJkJ&(gMEu0B6LpP0d^dCKiiOW$%se6#}x)M?Ck6kpFRckp5c7Cq4!xUeoxC> zbq{^GQR;pg-Kpvk|NR=8#6j`{2lMA^Huva;T%+~P|ELAnE+~S*A56qpRh@;W78k&x z0O~-@4CC%|I3|EOZGFvGD`5Dk@@X-&Lx0o9zmrzrV_H`PMc~qs0RTIs&}%r^Cil6oSAxLq3DxSClqtd8k$N*fbE6f?kbW}aOs`)ul8&&v>+tt%2LR(E%_6o*jJ+m}Xr2U!;|GtJW&6-(S|E4?i{`+qe z9*@&Fuj$_Cg5iV43v67n3>R%#S=q{ip+^KbxJNg(iJu9~nnM60=TR<{L)NdXlE&@y z+)xdREq9|dxb3Cl;6P2}eh3DtPqMsB&1SoxV>RFO1X5}~n$14RT3h5ny74EG8^D>R z*i@*9+hzBsk<79Yzn!VF)#FLl?tJ^GF4J(O$vSy4F~pRu^hx=bYY|^qVV(+Wv^dNZ zWcmO^0Sg@af#sC#xIGY4T&x4}eLOqfk=ejI+US**FQUMFjx%6*B75opZ@=6w@yj_; zJ?^#PV~D}-6q}TkREz7PcSL3f&2#C{Qqw;CxWq)m{!OK?+vGwvXah7fOHn}zLyeNI zz+M~Lsy^SJYw~4ny411z2CG)nzd`=YW-LifN%=_M`|OQ;svtA;yF?iA_!>p-_||YE zfBLzEVS87Y+XflQ<@NQeLT+H~q0KiKIjgIb(K2PuJ6ubhFTZu>5tsZpW%Ef;%`^I< zR-i%s<|Q7TeA4H}#<%jR;mDBM`uf;9pET?74Ib`X+dycsPUn>U>e5KZ+Ev!CXa;&3 zJwU0)aaj`sIHd^W0jv!IBmj*(y<9JiZF}b*&xkwdG;G;fsf3W#M*-z0i)cIQCl_2^WJKwlFJdT4O$K`Ct_-4Yo_Iq5=)yW1()`qCt-@e}SbaQuK9$AF0 zUdTavC`R}87mzF`i-iH`D|4RZ+MO!H-6!9_+{#InnJ>wZ0sf}U=k7zTXDzkGqM+4O zDYm-0dK}lDCmQi-THR>r1Y z^1TO4miH!RKbbYnNuesFr!RH$VH$JGx z(0FBRsPx3qC&{;YAf*wR(Bu;(yAa-aTwEyG zt?B!lj^E$ly@*~ua^=8_Nrb^#T>6k2JEU!CvJsd4Q zp&-&PJ3JQg*i$9rC5)g|P}4lOx*^ZvuF?)C)(eju-uXBWbLR2pBcCkM4~&hC{dK?t zFKijXk7DuI(>&e$I)@;6X!THljQuzHt$w~v^uoL%Z>A`(q+|&yxGOpdv@;_x0&D32 z#7z$aLzE!c9wrHiCHT>5?&(em=|Mq>Y;<~A9#i69SSn?h+%fh%20O!m_m=vd!s0xf zEIj2~Uh~I81<^W>?vLVFlwv*6^Muq$&r8H_4Dsy(Ed*+k7+<6j_#3<6B;qNb;fPup z90D-P{)4Up@R7P`)^KHa09@dQR;QEKfk%qNC*5f z8osu4s?W7ne6@aqTkwKW8h2trLE^~bBF!}qIp>+2*0sE@*UQPgSp}^{ZnV6@GJ*qw zwAG?~)=mM8UXKPm+r*}guTAR_O*at_slz*d07^gr^W=4R78}R!O73uS41v_SyMv%k z@c!gX1DJ(3PC*Wi8}}veXIZt%Rc*_#8uuBlkAATTS{t$M+yqc=ah!(;E|^kQTEkAw z#FK?=kKINR0Yn)_)zj0nvmAa5tT!^GQ2zpVZfcMqz34&X*dt zOL%eF|7g(B(-Q>!BU4fyK|r3L1s=D@#$p1RiE?pbb`}J8%ge$4>~we}W4j=5d4t@# zDD-qR`|h*ZU<&-U$J*YGiwJTr!1Ri5#y^wMf*y(|HqNo=TsO+KF{S+IclP@7SgJIdwna^fY2-_!9UjhFXK>*ORwBG+A7c}d7@jjhn_ zo$u1>PT-bM|2rR_Ca>iD3oO&4#!QR(>Y~}Doly+RG(#RTiV`OZk#$%(ZvU zMrQfFB0&wTE;Db?DT{&J`GM|}W1(>9s+`vB=^Fy4d5QV5^x_D=CR+x}ifmrZB-n+6 zoMW&Q0q_zbS6;_7z+^pw>R*$PaND%}{T)^6btR)y=YglBRF7Td%FROi(hwM@uiJft zgMpEe*y$MxEwkPAW7ma+?@8afpn19+h^dZ|>oj>0F{&4i)OvsV^wcQb_^;WTk&)5T z%F1Ky*#yXExkR79s0v*96oK$8S$yMxhm?nCb}lX?$oKDd#El+jh>${^Iurs{-L_)g zS!}#2lK6P7IBwUb-g5!3ODxF<^0p0qukfHFY`|3szdx0JpTL7X3XP*=Ey!B{5#Kj5 zZhT-7pJHNm+cw{2yVSv49<_wvF&=>k!(eft5wOPmE(g;Ehpp<9ZZgVvz97P=wxtko z`y53VZhTp47M58l{lVCD(C99?tMthTy3DVwSxQ1WzLy*yfFxXG{0 z&3(1IP=#=FzTX*LpiyQu%^o)UDpX+DrEnhIsmh~e~aVSx9@euR`TWvfgzcm!-HGMZTb3-Fu(0Cpkf94XQ|pQK2TSLJwfuD) zB`si`7_wdVW(au>sl7Nqy+%SK30-c2ezX8$6wjB}!kz z!WG$sEMM+D6|SGehA1Ixi*7K!f=ErCG{HErJ)*I z3J_#Fq3rwp9DCk+mY|XE2T0mq09B?Lronw?Ro|N`%bRer%azbUFwZBJmX_Zl2n*Es z$MWpNETxN)Q4n^bQ;(h^(Q|q&uJ;E-s;qm*QEtrt=cq5a= zz92!?2zw@?(;V!*zSSZc?|~<})x&3+!{^==Jl6Nk>fHEiZ(}$24B&YUh6GAcB*XjL zD?)Y?EXa$u%w*^!oZm}qO%|V;UyLA5YW$wl*}DcN@Hf!+02Spyr1Uk0CTT z&mcVqt{gyUM2rS?QY>)E zpS88$HhRUYK67pz&7cN>tgnAWS@Y``Ha!vB)HLVNhX6{05X9gT^)5ac!CocJ#+lD~HwffLR{#F~#A&(y zb$i^hXHqVn{Rt{Q)4Nc7o1WjlTQS~1)oQAWf&s0O{_&4%WwdP%{TXxb-EijiGybq;(|-iUQ%YVw657)coxqU$ z_N8&|)rzvg=JH!HZJ>bC3F~Q7C#sXR&Po{p=r(h;lu)5ZpMf1;N_Ms4?8>kasCql` ztMe!uRrgwTlWRL1&)Hjb{Q~`qqhf5?3kKlbr80%VHo_+2CDGE-0zf!etAc8{UW4_@ zLlW83YQ7u~pmAW&>L$(x6S*nk71$%MXmBGVD~2lqOFhv6H8WJ6MM7ovM*9k z{BtAmo6C{|*_jA6y&NF&Okn{0>|7iG7ANp?-Vezx{_`3nNUp9~o3C*IM3CqXZ?&_t z8-m?~^bNd2X(@}Hy?tvpMFdvqxT7x2scYWTbvR8F*?(;`TdqA;-#ctcJ}pB zjIL0`2EtYAbfoI31c@R*>W&i7lyG{}t~=Z`{6D0AmUYdmsXkM=l~p=~)j>z|f~Phr zq1M^<0Z_`HrhZYj@wp1u*fe4h<9r3!CV554^_#h;z&G-@DB06p;E>&2o1s4aFaKdL}zW+4E8&i6G^5CQM& z=S@v}cKdVs0T?@BP7LeM@mX~I!kTSfJH7gx;MRLW2q*wJQwuP7o|hX&Bn!jLkwgiy zr7Wsw;JePl_XOCD*y<&Ez6Z^z0sZ||9y9f1Kw?haC^bT(x=E~vp z>fMtNuyN|`tk-+}LQnJ4`)#QhNI-J>RAO^9hk#tj{pPM zp6aI3_ReHlxVv{toZ>{Wq}O!(cqt2(MSgwYE;UUQt8<5k+;&^@)d^rB!0^`EM|*w7 z*Ys011b?X@5ymA7~MAh;0QoBe~~bYVOP77k8f>~&|Z0n8g`tRfV*g88(Y>Lwdtc8W9&Cz$cCqPyi6&Gzso4?d(LzCEhDe+a~np&rSkddop8ZC(G(WfK*%0BLOG|H@aJwZmn#V9O{r#+eIHZssfM+1l3<|Z@q-Q zwY={0`Dy=W@Th)7bBv67JDl0s-eQ(QWW~e$>NuK^%L?)M`1nniQc|{q$Oaw+F!BT$ zZIbY`%slK&F)n8&WmttPTqHu;^h8sIe>^OY!R2fh>-qCn59Tw4c>>|)qdqN?6zBng zfpmfox3X9Ek;%znAb!UI`0(%qwWUxi5+vx3`6?XCkB+*R4-XGJ{GO#!@$+kMHG!Cy)Jhvg5e1buXxEQI5zL>wg>+08Kt?t>&of%-RX+U&5YK=(^CmWMbARbG8wx?2Fs}IYKstN zetr^cY~26IZ-HEoUK+Xc5e|KOW~kI>Aa(&@9q1HDyAKW9U#|vk9XkU;gOJ~b$;j9k zi<~@s(dR}^Fx(Vv0N4T!p5Va4NEruMp$x2w ze_^&4l*^nD_Ks5DsNO?UW6(@J2`G2a zn8ueg9p7W*vU}9LyhKW#7Y5zo%u{ui+!&-huX33? z%|~q)1Q)WZ2SHu{*hu@+O-ir(&W#{K3V0EChgfPyW-u<>T_6#$aY$Gg{Tp(~_n4F~ zt90Q;9f!+tyxsvzaR7orfs!WoUrR{}8@&0bvoyXzN4 z7h$~hqciSAXns(Kof!}Pq7r}yf& z%Ddxv%PYT0mP=sB{WWdyLNM8Z-mAqNEtM@@>)rdDd;PdQ%bP;f(mrtcI$3jOLl+wM zAbZcZuG-Mw$NkRm#*+wBt!rg#l~opY8F70yZuz^MYk%Q*l03zyyw6)fwdw@+b6Gdig`f934-C^k7n z?t8PK_j=)sn`)!Ft5sg83b4qoUic5*qwCh?E$5WwB){`MkV%U4JxkW;gzjh0$0iFp zsvF*_Rtf9!M~7v6H&&h&U za&^uMF06N7n7Hm)@+gk%#7G{R?3pWgM6;5i*H-QMgwUVk}ZM6mfzd;nr3Z4HYELwGxo4!A# zOpsH3N7+#rU!ho(@P{3bL?H@L1tFJ|Y`-xu&t4@r&4a>A z8$CQGue-o1Dk}QgpapWZBN3+ehmNst;{XAqs0J^hAH4LRnGL*Pci<}4uMh7U7;w8h ze3U6Je!RCmR>1f$KQMq{Z=a)9y>VVNdwA;QJTcoLb|pzCXR6kj0Py|Z?d{*S#|Q|| zx2y6k=pW{%rU-@i5U|N`eF5>9BuEzV1p)chPu7L%YnL;7J{EG3tQ@nJ5=|yxuv$PV z7~ZPVFov_A6)rD7j^hJ2=G}rP1(?^;wHG?0D4DHUdE11)v8AcPb0N#kQY}U9rE_Z%l->ps}?K3(e4XabV7bLi!*$Y zRY0nS-&IgP<(ovsN0wZ@#()v;%uJg0>1iU!cK}A+BE8J>n^oVMZgQtp21`rnZW~Q} zEc|7nH_qfT9VfU_ou`E0da&T%cz4pVv!FXJ{RL($HeZ&-B5!>o8U)HCjC;py;Q)B? zeR6s!E9G6*;MHr>-seo3r4Z&1wUl&p$oww*IHl1pexy;opDc1Xa`}t9C^MfIW-bxW!uIX!Ix^w zcfw3S%g%NtyGOD@4MAn%-3{iF&_n#!>obz2)dv8op2R-_W^yl^2Zoxm7 z-|C8W^6*U=gVGH6%U$KBeQ#n0LD{F&C&FUAMwDQ&$Dpc8DpYU2uqdwyFdEb+(zNWU zCR9K#J_Bvxda({s9({?R*ZKB13CG8Q4p0^HJuxvf6?*jqL@D}L*B~85 z4Mt(-NS$mpXr%(L;V>3yt7ysHl$TeF^u^c&CA}d@=66+xMS$Fq!9Wtl(cj;=fb4~c z2B5dsooqZA*H5ax%Vv~gizdZ%=Iku|qxq;MT|5+TT@3*BC*90qni~Ug92?ymH$DAr zRBs~iG@QSE;;SC(%*zvMYnL?4i3tvIuCf5EB0s5+3+c@T1=e#(`|HigSU{GAgrGzw z#^%`BrV2jerA=GA3CU(t8>gtTS!^55=>97N%A1H+W2IS~$8ngx@7)8n$76)e)iTXUDU9!}lyejHNo8$N5-*ckTy%tOIE8m_Xk2Z;s=9V@2w z!PE$$hqkcX!nwVxTe@XU#)B!4dz0_8n^egSEgllxEir<6>!)VhPR;Q?d9H8nFc*+5uwl?5&Yu*2{| zlgs9Z8}b^xBy_A9eYnEFD;@wrL)@AyqEzJZCV3l6WR&e0^P&c4*w!Bs?&$qhI19+{ zl5}g9_qlsaA(`)qf}_K0>lw^X<1n>6*(Q(kegE3gGR-ohmoqh(ZMA?gpWyH~ebuno zECjaFKU@J4sJbm+ZDw+uUXchV{Q}-TGCo-^iWBrky1l)9?c6)b(3hB)*ecXQK}2*h zoM)V)ywffsitT+&qh6>Pj6ud{;MKw7f2NY{<)5@`b$i(E^mlzd=2QD8G}70Qg2}?x z?KhUM?OGsyfzZM-bW>A9!!IDK+|tpH_HY4x2qfcoF}OT51pc<3bwzoxCVwWgxG3TM z?XJq@)wR*|NEQzsN$7ws>}fbRH!H!Fe*$ZLW=*JAb_uJ`i;>}|!khq%))$}_%I?T0 zePAb;fj#~`tx)~p>6Xgnb#;54Bb11b2^4IDGP-UMW{#zx)8zN~e0ae9C_c~?fG(5) zH2ruDV6V$hOYeYs5+H>g$h`n8Tco}I{n!A&Ypun)_4c3`KWtY0`9utU0LGUPxOo%H z)F{v>Y2BNxVKZz)1Vs)1#kM@w^XiVafG3{LG^W4w$S~% zb|m!Sa#PtX=r7!3Z|lq%kZXy1!+`^}TKG0dr|_5tXLq)S!dh=m`&A~iy{rl1j-2FsCp2JL=4LBf$859HZRYs`Fv2#gTyDZ{ktfY$Jkh2 z6n>5OvROe$AhigR*~i|4O8jAdi-iA84>U5wVc9zOCp~?vubl|t_btJ5s_=&?jzQU3H>;D0*8KZ33Jla>q-Z&u?@t1L8~ib`Dk`+_Gc)eG^h zmp|W$Y|>y^T;Jb+E_`O5SQ^!N=##w4n>Y<(3fGTcZ~hMSKmPpXDfp8p5QxDG5d!!( zVbIVM_%{-j(ikG*YvAnFp0@jYLrE6;;}PchS|^oB)&oY@MOZv+zev7iRL%D5 zC&TCWU!5}@xS$R6?Y=egAMZXbR$b_eLI0vq0Ki^^%bCAIl3 zgV(l1-AYxb+G=pPQ~0frb;k9eT3^f_{NXPN(ilm^7sH1KMG4Fw@?RucHGAARY~Sfh z*8R0F|9uYneD20hV@&khZT|HeVSQ&i-jb^*>#Juu2UmlsZ^zCu3p z8Sy1WmCi&TF$U_!Jav%A_tk$-WWndcORgVoRf=F4VR@cdV5KX;Za;i#j*2&b&YQiS@84M@!q0$m!nVm3+04R3r?$Ar^SorXNrTkbJIpQ;?ZHq^sTk+p%qc}JA#;aKnz`35tr@HFZ z&~dipw{F7|rY1ANdz5@ld*6!sz)6S$DY7=f_o%q{BOxXCZn=WAdhQo#JA^AIhA|V` z=biXrddjzHHJG61l77FF)^Jvo#zRzvPO!Wc=5QyjhP5sdIQ2aP3s(4PvDdhoWjSrl zj}1O>1P%*pWx6+`FF7nCHIPNd*}W>KH}6AzIewKl;f*>{-dQe^`T<<4-E^>Fg)~4z zfw<;GFDfkWTUBETUd6MDZ^{(xwey?|^1?--_hi0kfgAKc7HHN>GtBiQR)PU(V|a^I7-->USuA&crXCg5^%yiw5vTRZP&q0p{{DY-;Wc;J zv@!WvBnvt~9MD8!qyJ_Ob-ssB&EPGNtG(U&)(!leGL@57u-O-ZYL-?DhY?M9lQuPI z3bY+~#=vXN1b%-m0?*Pxjr<2=Ewc>Xp;}_I{6~_Lw4OXMD)?z&2?nHB$_OfwElo(` z#0O0+6JULm%iQU;V-4O!fB2j9pV#4NV4C5T+%Kk5GUzo1>C7enTiV7z+PN09?Ejs# zMPl*59-f$ZDNvd88onq?N=9bD)m5`l(GktsCx8Vjb0(s{{Ml1LOvae2lkuZhdrCCr zqB)fDc!k+NPvHc%!p3uL<)-=V@aRE514b`m?stI? zZz7W$lmAqw)|3VY$Q|U-B3R(og3}O^RouEqAwOAvRcDaQn9PQ=U=Z_UC4y0BP5zPl z4{9f(zj+!Y`3`*}(@pa}xO@dB%*|GdEbuvu9lbzDm=FFo64xa}PsPNpU9FKNM}&S? zBnh)F){PiT<#(ae#@8&b?Tua*CV^jp{ZtnTbs8$HU-ckf=DLcuIKiKY)K`*j3$tFh zUqaP=79mx4JC4n;K8Ob2c?Q-xdY?*-)KIprN@hu#l5yUIWD?hclxCi3!Gz`Fm-Y`8 zKC<~=WPji@=@v~*X}0emf~&~6`<+aqRO$yT+8isKZ)S8wuMcjaf5t3K?o9fMbAJ-sin9EO1fcY`(S( zX|sK# zrDt#U)U}i=6Oy$1qVDM}o_Zw}+b%v~3PtBM`Wtf#Pr$!+N!wzmlmYqUYXQoWd!ZRo z!%ZwIRWR>Zt@S?>?_Brv)C5~nrzty~y;|-PbJA<0&E$R!XZqfFv-qc3%%6npbO)*2 z(iDawq}*6erR(CoP_DY%cJ&&s`9V#39EgLvsK(1fciNGe4e~)Vi>s+B!HdvE{qg2( zylG>Q@}+zYZ4d1+k&>xONo6@XWXxaSwf*ET)^k4u2VB711mXh`L-_UzFXuM?l}Zm3 zM-hSb9(PsRiftVr5H{o}eeKJa?t3h73Q0+6IZ8Xdc*M%+UV_ut>mO^2t*2jV+u1Do zB_F%+b1{_u_5bvM{%_9j{|CR_{(bb+0&g(&xRJ4_(C()ZNBSqXX?M*_;c0I=gD#pJ z)va`CkN#QAgAlkf6r-e3whnW}I0jS5j;PxxI7A9U&t1MH{X4fJ3nJ#mV2xlc$ z7zsb^@oM?`695by0#N!(%P@$W#r$2kV%L)@XR*U3V&JxEKZ6d01P3b*XZwp231cRq z=UCLrdV$zf0$;;!+~5+Tl_sB;TI13&Gh@ag@Cnk#tqnk$z4D5Rguz;@&}w<)iSdx% z?!**tviGFxIR*tJ{3*I{02LX}J5%SWg6aE`1Du&|^YT7%ci$4gEf-Wfn;^9b=G%LF zS_8fYqyAshhYI>u8VE2z@D5x26{{|ZfQ+r7(Aj{{wbGj=$3bg;B5cz12y{*%pwmB` z>;4$MMYdxRF}*+IPTzn`5y>JUMq)$Wzvq;RuvcG!KIfAI4>$J)`PEU4!{9#F2m#uv zM874O(9kq>&nXIdZ&Zb+37#E2Y{lorz}c^zP;m5`daww8>aZ)AbD1N+0D8zYyfx3S zgKr+Ic@vy2tEw*m5fkm|lw}&-+4{`1+e<^E&S+ahAP`|A32o7sU^CEwP^}{93nn2R z9MAA-V+7YF4^F-BV&}|&4gfcu*Fc?U(2m!u_qtPMKciM!S~^KymI6FSv-pLLjnWZ8 zIKuEAOjU=VC~7yK-xJR(s;#XsgGPp57Ae;KULfhaA+M~`_AEYME4k1>*u;*!i}l8n zy`fu+V@uBb=rj0(v_DSiY%aYJsn;YEG$&Mb zfDj4@F!DCEef5iU-jbIy(8f)#6a8l%p0wz1ppgvfEzf{k<~|K)n;g$pR_}g`G#cVd zk+sg|PhnzBx73rDk#i>K%pEU64_%GS4$4gvs#0@s&pPw!$x0qq{`gA`@m9>suAyXxaSPr zTfL$%w#L45=!)4%&!bvbw5WHZEI98CbJj95a7%nU3TWws+1dpK zZKqlg&^(jORdxd!CN)m|(=r&OFKdW?z|$zsI3YLH!T7wc9@H6z6<0>>_=UN-?6{jB z^6XL*y>*5PNS+ zwFg9L;nC4?V6UBS?ANA|HqON7YAYS;V5qWY01DCpDi+{N4NudgF$rFpOu<>I3vPX;c+|=cA%x2cg5m-CcFBqM$&fJi~0pvbT#*o$33c3N^S;*Hd+YUqZ`uU?VQBnGJ<<@$oPV7778L;GhUu*-( z>PNEpvX%OZ0Lv9S#^(*bv=W5A0DmA1yywywm8!hBu<$9*8@%Kj8VAU)%NV)R#V}Oz znydHW9^Q(;BkN@-=`f-@RUo?>C5=tu#ZSQ=5Hp;z2dxE*4ARJVY(AiBuJysRK& z1Az@r&B|$e=e27X%OT}bs>LN&_&n>~IYveL5?%#SkiM!9ia?JsNngV&670qtAXP8a zY+%Gq7v*d(b|FC!wWGdMUZR>*Ik^O(_bIc#MiaMb+%BYC$%G@)u|dw2NzNmv2-O=NfE zyvDP?$-7*cx&`la@y%`gn0&1R)e)pVw9s1&vAjNUcLa%TKk_tODY9B~!EV9pNwuWg zlpD(D9G9a@?4#+~rJrH9m%@o~mYuQfyz`QQz4F3F^`_sy7l7v@%pzp?+`8-2i;UU6 zqF2qQJ4TCMEWj@_@<=@a zeorIAMHpQBKn_@9*O|1L%o@E^L(j1W6}n#*HP8@D5+01i+S+#vE}lDk_C-+8yQ8D< zLT_XeZfg0!3M-m4@~@S{Y(vjsj(vL||BQYp9lP*kg}$YaoxJ$(|9?-)$!f z|AXI-r57G|0On2ny^KW|4&1=ef?}))0NI1?9{6r=brfWY%DYx@@K}GheMFoXyR_Rp ze$T_Jd%v=~5V{bR%5gZu3*GOv3lRwRy1;Q@Q%}$)Z-_VV!7m=lR4o6Pf7$!an(W!; z62&>Gop(Yl*H0z%6H`Xr#GcO&~gAVa<)*%tkX7ObrLN*)shRNwO7Cj(P0_<6BV2teBN z1%yF4X=Q6`yCw!e1p`pW2G)DZQLvv;l~C{uENb$TicJNXn0zH22ft0*%(RwFR(gk( zs?0wBenQa!n_q{}uOt1wU8Rl`tDkn*8ReS%>Yw@pWu_ZU2yz%Hj>Cf~-mP9r?NX?d2|{P1G9lMM(XUqU&^Ho^qFgBP}Z@{Nu+L zMQ@mK6D1)*&~5d2#lwJiy!QJmzPV>a%sLBQ6FPDwuU6Z2WypCeY<~!65zgjgSj(%^ z9-12cs9PWzNYzm`Z75}Kp^Vf(r2Ut>QeS7JT~N$X?iyXuSTT~hf4|Ul^#Kt#V6@@y zQ7~>Ea43wnwCyOPfJ-HI{(U?}#`Pm8=^$md{R8snTD*;|n-h7c@~9XwQcMvzx^HDyvGd{GUU__aAeFkEE*E`I%$ zak)pyJMA!m>(?K)L>v@7o?`6~F=_PQNn#Z-DS52&&g-z(%zv4vGta+PWHe7+l2Ua% zbno1iXiFa7NOs|>vS0H70itDk!)lXV*sM;=_EEEySh8NW;R|oOsYh>bMewgR$NPMo zVjm~5J5QIJUAOHkdUoA{2x|)4B0lxTk3Th=ta%YkXe2{7Zm{eU z*)JC*Y1G{H-Z zQ9UL!9n?nJaF(-YU454vu}ZCuMz(KH)|Y z=}sBS$}0BVY}g{>#B(@`24tkjNE1eoD{NMYL2C6N?nJ+ut7qD%iHuImYm=Ir^j4Tc zCvZp?7BshM+087K)O#+M1}F{b6W2xt2Qm}Lw%CUX2T$-C88G`a!KZjs*hHU^LUmHQ z?MD}EUBW9f`?S7Q3U{t|dhQrDL`>Ee*m~uZ=bh+=*45S9_%RBZRGG)?Ap=-gwuNKY z(L>j5i7mAs>%9&T;g`2Tu3ez@MK%ZHL(pIS7QggdE_hG^ui$35=d&kZ)L1BDT3>uJ zEV^?>AtwCrP&NKhbMM;Vq9Cc&q+7e?h@#io<9L<{D3d`%gfXQx8JSSgDEw08P#*UJ`I6 zG}e1aKC*4@71U0j7BHGtYKERY_NMCYkoB8Z?a`6yv_OfyLsf(cGUY(D-QC^YxZ+hr zfH$F7fTc?{KD`)X0_k3}Q<0`UN(Us`1*?picZ!(mJXZ zEW;%5FVfh@F+^1=aqugfUbf#0)p*~gMi4tjvaOLL>ud4IksRnAJkxUoi9gUg7EQ+-&oGKjEK{6q?l{&2+i-^H{D%7{v zd_&7l*4XElVYNq1P?2<>0p23#Eb5d*A$ zK2RM@?yrc?jm8@z>~r|Nj;y|d?Vhr}-3ns9El#I(QWA+fNH^>fVwRL}s$KJvb4rC_rY3J8K;Jg7$~K7)jp&4?HSM9fDug9j%Ff0e(c%44^HKCpo1_y zy1n)ZFN=U&h2*Z4># z3SKHC6CGB=REN0h2~VOKJG2#aA1$?AQ}torKnIfLr!<|7B?bmEFUhiVX5SJVrJD>p zj3J7Y*KEDk%LAM$QU?y#UXeU)9I6)N13%Yu?~$(Etd_S0hwTkf(LRZqspSb5#PjM( zMoz{2*os$^yKO$sWXlG61c3%Bq~$qJP82AX55HS%7CH&A>z_C0E8~ootevh+ZW$-e%}v^ zl)3E>eaQcAXxbITesQpLyrk9}&+YrsbB};5UnUT(%>+lCDr@^9qs>5q!_GZL3oqV4 z6&J%3Egd`jlP2nQkj?SfkV-=_5p}A<*J|dL4YO!=kY9aZS}y@R4e1=ghcGOybTB{( zsn!Qdt92QajD@PhiC)V-IW2BF zs|p|%+4_#sc@q}k^pkWQI42`}zwpUcwyd}8lObDSJ=&~7w=|J|amCLy&1eUHTk*R2 z@mt|*4u0=#x{Y$n^G@yt^@()C`_vg3>;6goAPw~*7H7xG_1EHw^Q-;@YP>=qQ{kh! z!R=kQnnKqzXUU`0v6Su zT(C_!C2~GR0EmuI8n^LU7m}$qBJS+U0Dg&nUnv(if=Auj8)j{dF6J~*@2%(_O*H08 zI^xc4iFarB@6FA#Y)F!I-{yB7FV}3-PD_fYr~oOtfTH58{Ms@OmwhrU=FaZA3_W!} zp>}zwY@Yv?s$25$as<@5lV6+*{ZXq@}xpeW{Z%gv#j_a)iuZ26f-FBI0l!+m8(!8Gz!|r*W8g)_lBoVd)Kvk)%r~d^psh!lp}U*i9u_ z=QwUxugi)QWIXwwAAPyFH8Dk)Ua3C#P+RaXIR3vaRUcKGR0TvyxlB6I%a~(toF1-- zJ@E31>`X%4P@)~HavBlQT_YcyDb!02H*h4~CjSomNVXr;Gl6G;;)Gs)wY0WQRK}>Z zG)Laz$A>+cxR>94Rhqc*x$FbVvgnH+=m`5={;U4N*H`m=z(PPh-fLmy9+y(^kI`F3 zx!^^&cbM)5$#ubn2fr8%RWvH{T-dUB+2M~{{axyd4O-0_JwVNou7D=zbuadp9r1bb zxgOSC&*E9JH1=cM3%_CoP3U+`_591V6CNpm)n(uOL6Z)XE@wcC0jy}h6>l9tsT#O5 z3AVW@7OM2H;9bZf!9p)1^5EKtqOdc3c)D&!(!aA$7D|qkmsbFO!spSH(W{*a{Mrb7 zLa*DcCdTs$*5=iYW86`cfG>M^rE79>awCQ2nkbB-F+i8qs?8r-SU}}A1Stf(FAJ-W z*4yK^h}&H^NAkUqR(Ml0Gw&NKvHlaiW(~v<2-c4FHl)0!27(Uo-t9GU6}XmZ6>hBb z9~By}YC_Xt_t9*9lnJO;7|miDv)-Kw8gA0`)JN)EpMiSM4cqsmWArYLl_HL~**e}#Wvqp&G$v%;KX?_KZ#w6yet3ccc} zavagCLO}cr_mYNVXUD}&Ol;bynZV#s^Rt-Qi-7?S$y`jYS#4n-=HLY?@=7LlS;*ig zaqZmg7aHh{)f6X-0_hJRsM$?+A8?Q+0y`7e%vbhZ=0wk(Wf+3+U~Ym>NOh3kvJLrY zVh}f8YF(Zp))1U`&N}ZxZ_HI`SNnnTkxAG}AxH)F1TxuJlx!#*A2eKjpS5J?<{DQxdagTy!WR4H8ar9fgC*! zfS~e${^<7o{YvVAEeZjl zksf!YRIN!k{k&aQTf35+J_9mU39Iq;%M_zYks>;Xmk7Z=rz7wfm<2%R9uC=d19B~V zw`*9nsB~u%De5>~GtYAMDss#mDl-vC$3+VQ-*KeO1kL zDfQ;l@~H5|uG~5deRWXLf$g)i=0i5UW4jaQ>3Kh|Dss$qbg2YZ1Odm5X*(qA)v~1L z#%s{AD73ElaEA=)fq_b+osqo9S6S}pJ#UN77#0;@x&zWng!!#S1;3=qn%vXst?3h! zVsd++QRJR-*S{X5kP;4dFc~=+)p(F-jJixC*vPw|(sJ!9Sb3+$*rT#^4$8x0V#Yq| z+Uiw%y#ct8*U^)&0Ka1K*!u!Xt<|NHsdHx)3T!hrK4q77muAGq#{NFIcQ9rIlqe$+ zA%~qkJ^DLrCH5Q28zo$8`lgn zUE*^9QKaM17}KTTcwQ)NW^BnQlS2}*mIt@c9L>nX$0LmM%7d>cX-PT`KaaZ+dQ0^T zBlqx94=lH?w=nLe1U2j<{j$Mdy)r{m93I0472HXH zNz_DzhpQPl5*_r3ok&-^x!ex>52a-m*fm<)Su7Gyp|Jk-TnAVRj(!gb8_xWGsbg}v z7tg1rszJm3n1wfFcEluCWcdYV(_?Zu$bY&c0dQ} z*>x_(0Mix<#cSU#R$gI7e;O;Q?3`?-w69@TFF7?aVgEBzQSI5YSR^unw@9^_e-|I4 z)MX`>7m#kl3!ZeNzsbFOWe(44lKiV3Kn74=qfY7E+Qn&pSxv~TE=kFi*B*7&AtG3K zaK89gt>-|~ft^-Rkqta3C}l+LiK!{1b%f0zWs?Z7Z{vEWy4gUI^NzJ95a1@HrKP1v zJ35$StRt50kSiUJP5WQP?QJPVT2|MY0UApxs+G?H3lxR_Bjqwi?a|ty-KxHm$j?q z?`GD5&6za!*jfi z$kH6Z90&W+So6a!NU4os$SunnD-%_t@)^^;J4)j*84{Y`3m$_ZDX#f{ns&alF!4A- z7>J;VskGstw8_=}xN87cH&BkaJeZ{9i!ejx%lh4a1{$H-WiwBVjFd`JxVX4J3Bu8g zTnvLnzy6{>{MFbBK%xN;S-ax2qrl2q4%yogH!q5Tv}{{nzVh5OQSeg&h{Q$J^sV-t zpW->Vy~A+q*!1I-@@y7CgFA}U*|3sMeaBmY1l))lXrkV1anc@Sx_vf(Sm~#2ei|>D z_WcUI$p~Qn+|d%_LiK`Z4zYDm6f0Z%JhN95{3dURRL#FIRX|G5W3EZac0E5@)s;EY z)qJL1ArTBj87e&d&XmRu{j(|;8X#$9vz}ZcTwy7y(+;8IWn;-Z5+2W#CY1i_9-JIY zip~OPGJw@yhpLzkW!-!j05mJ~C^uvy(qA&=>$N}b&VV~~N}2EIB-@X0^6;QUo6-tv z$Nff1%rqA}|3CzzjmfVDDp#lzia^lMg##LHjL(PCtPz1FGczyG7e zwCZVebcbk1IS2&+dR|*8yGFz-J!k2JkAc(ybc*9&ZJxVup&w{@Msk)tfhy<2Y|y-< z>fj2*e9%J9ceRIx&H*BDK}ALLiskM^&=ochUTv|0j!#XkMbXeDcsZ)hqet(Sy3<5e zIbZdIHtv^vG>(q11IZE(TzMpw=f8*1%^^y5O<>>{>XlR2i;kf>7h%pEj^vnqK z0VHgHd(_>Rql0d;%wCVKRyz#=0#kw9MkTP*F7)1MO_79soVzr~@;tj1q=9y=Uz7nP z`Jj)q9*+wE5EeWkC*dgk@?e~0Ta|m46wq)9_TY2JX5%@;#C_BqyKv*)v{}@5N}&Dp z`yv73T(|Io**rdR%R=L#cS*&DNJL^+s_0mWY1WsdQqzKz5y4b=-r}nqpz>g-tMGNN;-6^3-jMvXPr?XdiH zCG$=~upaGr2n!d5V39$u4r=CGaV5U9L#1gA-sD|&G;wK-W2eJb)^{VQ-g4h&osC2o znnZz?EQh4WdywnvH~47wq>AfWL{VBfvvI>kCDP_FeHH;;46S8i!U!96Xv_m6*FAdl zNDrZxX?~Sbj#GLe+JhejIADdXCh+Z^mvE&%0zIoD`=QnVQd-SITxVD>Xj%=|j13uA zJD_cPOtMjm{wlp%T6Dze3n!PPBk0)7)`CjmoZU;Ttx!{$k|f?(QvbiKnL$qCsUYh( z+IXv;nfp5S!~yXUA$=)~*(wixOVUtwuX{Ktv5cR-GPHdi3P6tZ{Gmn0g(+K`3!v@Q z51?WFq9CK4ay6FD+4DN9>$Z+18MkXvQ=c;6QS6?q_9OM0+a$s4(VnYoHAd%iy?Tds zt$fl3-`*N7fJm1Z(ZXzcEChgXm%euCrNnB$CHlS6t8jp6$ilYDgSMA-!LHUX*~VC) zV+YE>OaS<4(pnz7C);XHA4b1pj*9Cq4dtVVi8q&-*ZLXx>-bMA96Ls{_TekVze&v9 zqnN}b3^%2=r{F6pq(D_`$du7k%)1IdujCRR{L$lvBR=N1=`q#UE#YED%G5IG0QbNd38j{QM+;$#y=H1xv<+$8bY zOryVUSy@@N2t#a6PR{hqOyXFVI<@6UpZ2jn0AXfwaKKXLZ4W*Y8oLjm#9OW1;8vN3 z?Y|fTEQqzSQb9goT(otzTI6hdEEhsp25OMvW5sYhi_Ulo!Cy-|W?wBsz zML`m5D-$?qS#P$#%I|uKjXc!41WU;Vc5YMkm%q8Cr>Ap>S!J4YDh~fcbe9(cyjVIZ zg193(RO@>l$ky1{7&vy{nFkVCOyGbau=(uQ_M?#Qba8D^5%RkIF7uQYP@@-zN2g33 z{siEwO?@N~)!*}89eoV!_RGERyy*e9Z7S+)eUR0`JSQ_S>h+E0#rg}+QNcIU6t3D- z-~$5#1wk*#X6g(xi{KK<*+hDx{sOqSR64~wb$`f8`H5-8#2ylYM7U#v>?`mmfin+B zX@_ob^*^+DDdm;&a&1M*kFWeJtao$_n?Ep)9{E>zE%YmfhNcgWqZGAA`QRZToLrm? z6N<4$HLlpvwu~T`hw9)`zI6S=X~YKYqyhZ&GMG0u609IUO~gxEj$|uWTqgJj1U!om z@FL^`7EpWhj9GASaEi2VK0v4>-1_f=6wRoL`Hmtu8I)FRHWUAKZPHnK|z;njO`MM(fw>Wp*YB=Kzx0NEi<^8@RCHXKJtr zqG2}RYtRee{2r5X=v4J)ZIrZN_~kp!!B|GMSx8t}v~3Rm+1!Kh@Gz?K2~a>I?j zjKKpo2Wv}zLd;sP?DZ)iQ8SeL(agfegQBzW+AQS6*X00nlTOG1=Y&z!5>Pv>01>YY z-+Qad439~_C?KjS1xW+o^E|2+0c6cG_ z7rP)5);Ljvl9LmCz=~@0mf;Av*Q&rirGHco|Gbt5P^}_K6SXgzfqp<}MNl<7JbF~T zPZ8z0+>3Nb>`b9f^-Y%Br!DoQ6@k^1xQeH*kqi@Q9N-~39A>1lcjnNTwoxZ9I-58{n5=qd`+n6fA(9wSEd!(}`g1sdQfB;{u-$ z2F!D@z@E6%DyZ7jbV_0)6;(+hq@7dr*PEhE7tJ;P~=qAKy^u~*Y?kgJ!v})=h#GwvmT$eC-o|MAB{iMJoFAfM<(Yt^oa@H zzTJ)hQ;d!sL4b&WS6==H4$Aidc?K%KbP|xTOb&JekuXeC$KVQ!Ien{Q(5D=IO9~|ew?>iO%r}B(!jA+x* zm1macQK) z(KhYAzmAe-3Id=7D|CwNLPYb>bQAAlSE@GjP#$HEp_I-9?pZm=C$raRQ;#?#|G6a{ ze(f*Amxwrrj_f)d*c?luhQ;ExkA{owFF}vC&a9568bJlm^9nSQaJS-gbnhQPLwBiPKWPl1;^y>kjt4xR& ztN{w@Fn-lmY+9OWPbP55OVV!h{Zq7r@p)E}BwqT7!voz+0#zWD(FG114brt;qFpHd*`Gp)2dP;+E3(D4x#c12uj!cMQE@ zuZz?=X;$m@aCUZf65|U8r4&LBSpu+xo&6up&H8!9cnK232Hz#a#59KrXr+`hjQNvGPUCe#&O1PPeXb5O69E^Y^8`UVR{}#t2n|9n3pXp$8j5Bm%^;(qn{U zr+iV+KrJ4judehypMN#D4hW#bDe=RfiZFE8Pp;Z|bokCCNx%N{=VXI#^n6S7x~h5- zV$+(C?2ZM5Z$N#F>19VRpuzLYLOdE-$yi=r61!xDBWuIo^$fRe` z7Ou1NH1zO`f~p?jrRhR z3cLvuf)k5T;Cod83h{uPDqLdHU=FyL1N~Vcw>pAkOpKY^V!;Nn>LTIg=*a#Ipvedt zl+r)=DlnDu;P6mTM3K@)C>U9$Qb=Tt0Bw_oYG+>6K+;B+PDb)?KmoT6@PV|bu@EWy zpuN-XCh6$zde}!)JM`$NG?YybWB2vx$WX%kBdGd%)~3EVSMTMUckiN2s`>!4Qqpzy zgg0SU6VxTo4Q1gM((k+L0B0H=_V%+HF zg3u;94%Wsc37Zw-Mv(RZ1|$D!jwvx$(Eg}&3NMLswzD(1$`n{-svYTwM#o(P6LaVyN^z(GqUlY6G2 z$YiW{vd$9@koGKKZDCW?*A2YXpU0&4+5gVIg)nPK`oMHG8%$BMA6zI3@ZVia-sl_L zlJBmq0K)nZhY`f9e_CKp?+VzARSm~wB<)AlfFDIw0G1mF5?rRo96)H}UEN(3r}O{m zEI8^VqF(W53@>Oh769EJ!KIv?EfeIv62H)w2{)O2g`jHcZ*?4 zm>Yoi870K ztE2mWZ~?xgr4je0fS~f9wDNU+*D>!5yU!c*GjH2MVFTHdP0khnC?UVzv8lhXxhAR$ zs%jv1JC+Kl=L4=o`Tzb!AVJG?N**Mygpd|~Z@2*cTdG@Mf=ULI9Cza6!6PdWF#z`> zVAszW%uI+!3W}TiHP+VEt+ud*f#(Etwc!4K#r>jp?aJ9yE&xfE>ZRZ#RgjNXd&|7} z-PkBE88rSE9W4EKGX76)FBw>>xc@TJp1r2-+)?^>G67QSg4;cixvedCdJ( zRTyi)h?v%XgY(~1+1hl29M3pG_Qz=p7?r;VwF96CEVyYyr0(boJeTtYVoq$pV=$y) zdM%VD4<^sa$jPk{Ar=EmnvQ2p!K>Q8%

2rcfMTUY9TX`0eb@f2XZ|1easPiKEdLM7)c>}B{eSbm8LLH( zeH~6~zwP{aAO4Q?9_WdcRpTvM-U%2DY4>~>PE0L`C{d^DEp)z$18TJi+i|OfesV$z zbx=pyygm_knBL^SdsNGa7?;00LE0gP2krr)^8S0-3!cc$#qwK<#0oE zX3)ZO@2c@7@ME#;??vPX-_aD|uai^Z5v^h9l0L>JAs|PO7*)jq0=A^xLaMCq@7Lvv zaMXLppGcZ*D8iYrmnLUi=QH$}7?*a~Y;ZVhCALcMkL5`#_A@2GbTu@JgFhdcRF46c z*j`si+kO5t0H-ZT(BDgoa8|vn*o7n@3tKPeEz*h5VJ%4*uEy*YY81uO>EVI~WV<@( zVW~msjNO_Tw?CvAWxu?EChw!iB!XVL%E-t#?0=iB7U{adX?g6;i#?wEh0B2?$U(Ti zKDb?aot#>8^eULvpVhoAYOdB}TuJBc@vf4RD;Ae|GU4X_n)NVyiymVzwW%8KFuqTl zY9MSDB7R2AV|Ud~{P8T8_j>4a<^a*Go65%@Dhmm1Od8CXnR+W<{3Gxotnke{mWTD% zuHDc)zWSb9_Uzk!X6E=<#f0u7>Yo>WYQ!HGy9`z8Yu>rLoF3R)XPe!f>PblEe*a!F zb1aQwxYxD)8rqX4mywPpGqcXdE(uRek>k(4L->&_qet z#)b>9RTcM~z2Vcg(Ka!W3<~U3Yz_aiPA^<0di-SA{!thEVfQo{Ze z^jQr~+6U_|fOup@poaMQ2Z;GS;Ax@+b6;x1Jlw7ue(jA4g4#2d?m?@(&5O}(n%NvD zzWPrwvI?828W>1@f9QQh$_t27^iSQcp$R7XFy!^rgghQVc={7m24_c&)o1?veJ2AB5Bd!LwMEy>pB>b;zom#=2lkP!L#+Z8pkG6 zXU4o%IW?`UZhlbM{tK&>+S_g9S!??erg(*RF%b%7S8&M9E7^^_kRI&w2M{c_T8Z8B zon?}z{u}~x2BKD0qPuCYuG65uZ#j$>cVKCXUx5DSF0@snm+#hA4@6fO|3wb|g9bgi zMYKcU?Ijd4&Bbdf>ApZ%!qMA6r;hiuc==n14!P>%ME*`v~yf z+F{fK60>s;_0_$iwD@WMw(OQ=nH_j+ zVp>mwrHamT!}d=o%&NFwtfk{vds{*xpW(NlqMfp zuhvYM5vENwEv$R6^RTO(Bu^MGSa2k)Unp4r^GfOOYT#@yqHtg}wV%FtYw6B`sY6+? zZMV@g7jtf&#(Uw@jq>?H&Ql^Ori~PW0~TVk+%g&XB}jxNr|iw8j|J?9+n)FD-@ofQ z8xy4Dd;MlQHB6H-PG?x+>uksVB!z}IB;|r%xUQ#+xau`LNeK01H#!l|Pt4Q$@Gm}+0xrt%RuwCuz zx|=JznHYwc5GxTZfV`v=kI|MC2PG1?fX@tANQCf1$VxvpF4m4<3v>$qqFge z{yNJkG1q&XVE=@WN#DO8FR$J)PUz*( zC|+KEfm=X-8^E%mprPrBeG_~PjA9sQ0D|~1WAI7$+>`UOYgYhcgMQ-|JKi)YOjJ|0 zPhYQ&#K&0PMrwkf6P*^wF1GJ7ZECg!7A8i_AfwdQrL-DVzSQ?pf*FLP$ER7U7IiyP zsg!{7;GJrZwin#=Uo$IHp7-+1D@QS*>s6+_M8-Co%<+w%meLyn=a-hkk;wB3^*#&x zA9baOu3eI!q_K-!zHV-rCSGR%IBhqYd(oyM8Bn(8e*Jn-!54KO9&d~@eDY+Wb-W46 z4;;=E9~G=@c!h8D_J@VLpp}9a3iHxqv~RUWaw|JH2!P$M1z;<7@;6G$Bxu8Bs*t*9 zNi+VoqQ`*8>YopQ*{~#`HiU;&h`wo?&3v(sgO2V+KD8|K0kQHdLz z4{!Gt!S~do(d<5})WL#7}`JHCp-TnQadsswvUs26FKyOH4Oq!$-E zY4BZ=M3_;d%%X6?*6E&kNT>zM$GrH?T7dIGodAJDq({|$$86T!)|S5u-^h6X*NWc( zDL9%j+M0SH;_vn-;zX{to10LR;!c~2n2183ev%-Dd0b-vD@vIX^O;Ts_EXXlE}Y5) zxj-?yU&qn|$QIzZVR4-Aghe>vyR4e3sG2WU;!RR4URr;EioLnhygaD~+yD7?|CB*> zfDJpT3l84+r;uA$uz zC#iX`B5e#NES#Um5x!U5M!`&`ZaX&N4}!rM+&I)+iuA7KPc80uV|*1jXGA5*BuGo9*_SOh&lRJvP9Bti{Zic}OpDW(@M7=Mu2=7yvhbLmJU{!~^3~!ae{_(wJgXN12VaHE>#q zPx<0oUfwNV0+U**A#sG`2D9_qpT;mH&YvW)EX3f;moIPjT$lU^*UQ=9WoYy*&YI!C`5xcx;qNQ-YSE zX^J!@^QQ4J6IV=FM1=aO?q@B}SK_B0S;gEnpW2k5nE##s5dN2d{!Xrrq&A1w*(~h& zfyV0J_BR6GCk9YI2;Uoy`LlVXY9AKl9fAX+zrSVO+-m7mn2zu`8qxnDb@NiCA-n0OHa@=nL2Fr860WrQV)h_xM#*xa(=$HoYc4Ki4Sc z2BQaIRFR@W(i@%G`87N?U#c^i5bmc0?9XLVy?Q^S0H?A6<7%hxOglCM`I?SNN0lJi zNdACAiSk6lV%m5DFTW`(E9-xDG}6@ zr!9Qt__co~-bQj=37El~i#pEN$5jsAx}g)kW53${O7fq=K1_$8wDVFG zB!CH=Ns2*zxbDio26~s>bk4mFRx-$TRnD3H^OqYwx&3snH~N1~qQ7#=u=^KNgT%M) z@yoCWvc8#&JN~}1Sd&yRIky@}wD?80qPuYe#x?mY=Rz4WS`7O0wOD+4F*k`wT8cYM z={nLe2i9{JFCI7!;Y0JrNsgSC!g_@y-Hu!FTHkYD(RdBvLT6bXA}7i$`KwMo?&#{n zAS@TFysMUzMn~VrC<#~fQXX?7Viik|hKiN1nqNIU4Ia+ea6Wy|^t9nQGlPZP<$HK+ zgxV(+CfAPT<<`yK(u*yf1u=#iKE?+;Z*~|$_3(-;aGwObt#&7*x9OzjkD9elYgf?I zcAiVUZIkb|K3@9hG+kNuh&QaUC%}YvY-vF)Wih|9To@EQyZb+F-gX|_zWYG@IeQbj4d1$YR#*5w zzCi6$9mL~iwx!u<-}u|2evKi;i;L+yDisjU599-Gm9j6UQ?Q{NDh^_;R1AjpE!+KlsC2H+%N0qIApKE8w86z$-s4yQ zq)fcf*3l9tytDTgMmR1Xx&{yIO%(HtJZijm9Kxo;7qfl>^8V|#hDku|5>sEk4!p0( zb4*%(hsx0v&d%nl8d>WryJNs}E2!UBZ$m2axTw&glS6bA<9VRtgLU(Yrsk9kF%Vd9#jFexs4&te*vr`ltK z&qAj2Z`1EkI=VWt=ErA?=h?+Z81jO7`|>c=ijfi=87%6PZ|ugR!#t>_u&fp_+L{2j zc$TsEurlgGruj>2#*AmSp6f=FPfvden2od!^IPv38Qvl-S&$^J-;+rwI!|&Zn@XKm zTCpvHdnv-DF_W#(nP#KvJ8v_jc{d4LYo8Cb2x}=3CaQY#thYM5LAFLX9rE^Lg5vTa zJ9ejwv?>wVWc zY34_$o_Ul`otSB(=DO6C?mW@FGUD8|yO}EonOtZ3 z%7S)2z9yD?MhW?0M6;@({!7%>KS;DBY&9HB_W57!U3oav@4J?YL}W|$Z`qQ)WM4`` zWs9>T?E*5U@+9Aj`>z?>ud2I=&JH4Sh&eAXyT1upJAbRsY zHT#Mx1RhBNW1^od3{nyn4<-(+?44Rp&dophT{aWqFaya#bjO?8Mq~{?bH<9tM_Xt9G%5;^% z;6)-Y!QUvtx7;RB^;uH^Pgh2I`uECLxi>x@iRnvgd-l~11ng4JOzgtSy_^NnFDmJ2 zpTq$hk{_0E%{254L?ViVPKPPDr8ya8wgCPcy^cTsN?YKTI+U^hm+{mzWdB#dpu#r4 zc&fpn29>KZT?9J5W94Po1xM4cN5gXKYpz_r-kru+;r(e;Hi-OUDczX<1p#n(emPd0 zKl464$#_0;Xp??q5Z8HL(2P|pyRRVH_a`HV6HmFDG^JP&#l4n$AojU#4Dm0KksA|} zHLRn_Eb|MWwcKj~0J_}6SiN+^Q4Ads87b(MNZAbRC(1sc5mrJ@PkTEuyf${pPaldQ@KRrWS;pWY>nnRQfe7-LWMB+k)3m^(@ zY$;}0ELTge?`!~t>Bbam*%WFQ)2q0*R6<&^6f|5%1WO{IKfOk@1R!VVm9|QGbFlO7(Lg z!#^6G;L)jG}D`K7iY{o3hS405M2A$xU{R0A0q!w>$rmMB} z_QtgYldT;Esebg!1c|0>b5>Oyom)mQNHG59?PnT3vi zsRF%x9jAs$LiQOzCz^XpZp!<)+YEjC03rz}2l|T>&Tgb*a==p-t=@P^SIRhb%Gn5qs~3TLlRHUhtt?uRM~8wG--kF#?Ea5v$QK0 zUyt<*%oddi<`%IFLgHVid5y26Sx5EsD=0frhYFtp6>H}I67Ap9HhHcvR$h9Z)@tLVumSGA?3huIdQVNOn&O4WdZaN{n!!Fw4V1w`W z|NM!n82{imoY3Oy>+W;}BMDsW>!ou;-^iNBav<{<1H(e0#Qo(%=(;lOE(5p1$nvn5lgOs^Kqo~Wp!{o-(k%<1!LhZ!gpfED3dmp zEor8wv_1FK9yi@h>{0-XjW^&<0z7OYtO~kti51Ujx7(_-e0V1|;=WB1OEn3=i^)>% zyZ}8;_LUwF1IOls@i(96a0}+cr5oe5;}GYcIXPA`UIfEyj;6IE6r4du_8Es^a_**^ zuK95SC*rUA-=ScQ_ne$oJfh9O>YRJw**?(dQSNpYRhd!RZC=kt0;U&$#>$T326E@V z8%4Um%dYdu$Jw2jJ^do*>-|_kQSzOaXUq*f1pr^m2D?tQQ=D()*ze|7|4dVkQnfZN znjLVWYc$O>f&a$!wql#e1fU{CeG&`Z8F3Zu1bRNYv1&U==vJxEtc+)y1Ftn&g*Q;< z&7D^$G2d>fwBDxSUq4RaDx2!8)@53~s%{xDli>y7T@h7HUfkF3W(K0FaqLZJxCApm znK;dQb>?j%V{vW(mndUuz78U+nb*sp>vnwEsGN;g4S`rM_NJSSi^MNBx9nte{~|}t z(O7k@QIOP@QHFe48;~_W`q-Ny%gLGbh;cx*Vrlr>lWdtYM54PbHui%^LvvhI(o;1w z*nAtP#FWICJUH%{0pyGXgG2-c=fZdd#%e8TXeRyiO9?ZDdh0loF61$$2n7G59bKL- zj6e--f2lCuX1V#PZLVEbxLfaj_Lx8{$z{eRul4Qei>&1)5`;QtWv|71w%%vKL+jjH z#G>6NheR5`1i*zu-bwy@A>|f63*@*rMe3DjbBiv-h0jf^a^OZw&mmkvLOZ83Yp~Xl zPpOqfbnEl;BjVw^7ll$UE7sx0*Ukq28vEf&59%n~a@XU@Is8M~+7k5dNP6uowR|6g zL?wc%+&t2}`FMBY6@T3j_CF!pg22csXW`OvZ9~XJkVU^#Yb&dctmsziAtOLIicBDc z0}3frl7}>Fqj{|72KMtJgsFUWik57La1Z&KrM(Bzd?sOW-pQ~S5P{OZf zGaX4je&N_8H2{PV02-!9s{~Fazb=g8N>KHDBcNp9lPe^zwi#xln~zu+s=>2n`UJ(i zY>$qr;#R@PX807w(JB0vz3G+K^_nTkP2vt5CP3UgH7e%S$ZUOOsZu(RO01XLc);s_ z>qBpz|C4#2EPt7Z&Mb}Rm{-~Rj@uXC(Qv}bPgq(?nu_?h(@)_rm+EZt4gvao565R> zV!GE05iy88!G>t19JHhA?>^T9BeYq0A1dE_x_|KMyIDo_q}R?&JJhVPK%y9^*OFzn z1r(0=xUO_(X&4#FhybBm!TbV%%4>)XT#k(i5!ttjmwca)fz0r_5){}C${Vjn*mC_9 zB78Qj&7LVj+2q{AcNO>ElZPo-@C!H>=Ybw66W27*c@=))E~7c;EnzDoGc3A^iJTg~ zK87lna^0Yskg53kT)ESHH20;+CwoRLtK9gE6HzjB;%)T)d7iG+?Lw`UP=8H=)_mV8 z{P*q)n}YND*LbcK4MB>3+B(Yl?1ygIaVn!bNS4m)&96ncOTaU~I$GV$UqBjohQlXK zG}wcji5}+kbP2apYF#+752nRe&=C!n7Jx`=hq@wGOT5NGTtsfcZ!>&@Nh zK|A-A+w@2F1i!fttRQS!;q;3m6;Z>RjYRv4AVG_8^!atNbAd*2;|6a61xSnoveu4v zZqO_-lPCGc%BJ4BKI^~Uj*_T&j_mj#GVm#||0W*7MQkrW@ue;wGg&$N75dX@FcNq_ zmby$|2hf)4^%!Jc%(m|?<~ycqZ^yWVo`Jzu7Y#M>%~H=*0?k+Mt0Rdg4SVK4T#E~z z7E>`f>$-bE>IxbG!kz0C`04Z)NEPTd7(FAgM^Rba&2kbnsg3L)n|60VW0ri#aLj(G%lzTt#^yeN1iG^gOOBWDhEc(>NTl8J^Qff^^;Td)Z$Uvg^+O z2zypGY>l|Z-fifb)7>{*cJGpP{bZEqlQZYY7y?AGu4`-v$*dcCBC@ECx4VaQMrf$b zinF@QiSxeW;qZj7XQA=`h68+k$6{l{6lh$Y3bafRpb7CLOva2kz%0bw8gBF+Q;w zJyUBDTXfrUm~@IF)1MATg|$qXD?K?j#2U{aN~(*3w88^Dd5Pa7{pP)%ZWkJT!GIC7 z_I2}7<|8|B6Pz{-+RGfHLWY$+2S~(J%Whw(B{|1cH_kZXECq==)30DOCk($l;{ajR z8>{~EEa`BCy{&FF#%6WWpt9Y84`5;7Tm+2fGEfr|LEc$PN=q+9uU_38$Jg(}Mqj1A zI)xj;PT{mhRn(y8=yTAjQ_=>@@bM#goBlF$yQhj&=A5fKc+3UgTtpt9jqRsK4)o$7SkjmowU+pu!_o`{->*tD`p+{@@Cl@J^$?DcCzc(3$ z3B3J8&P@_EO@t8S!O}hjesN=t^h!xg-V@trD)QqOX{zE4Ye*HMusd(x2Cr>w%*^HM z4qc+IJQ7RmzIq9!|?eG!I6rxl@JL?${%jcGo8nlrpf&8g4|9{t`;r)K{=wjy$#(CnFN_5|W#|AEcOzBxEEYb~lsWyIzaRG#$tGi5X=l3JV;O3fx{! zIHS&N_7j2LT1XN-u9-15>kaUbhL{VDyAranms&)A0Fx#pV8hR0049eF)gN8P?%eM@ zswHrj>#^mk;$`%DkKOte*w`#4hWuPTT)D;gqcConoQH*OUXa<8ysWw5{#j8LO55SG z^AQnz%=;UKKtmb3I~jmj@&QR9x#M2GtFkK^^$qnA;osmO46JQSVmI1{dcSAt7V2q$ z_NNrtRdO<#+OS!;)>^+Rr*W*GxA$7dk1%gX3~P054IN;sLdKP+)e4EK=UPA;_Ixip zZgy_2qxsCSqs)RLS0)^Vf}-Ft{N-j{H4NYr`NbLI-@BxHVUJ$}y)3B2+YXu>qHc`4 z+Jb2i!16DqDJbUFAw7uVP1HgClqsvgo12U@W1 zt<}bPoW9C!*BKjSl?NMJgIXIiC&H_mQcF1K+Q!z*us%HAmna7&Jb!e6dB#ww>|Rn7oVm#W4|41DqA_VxM(+c z^-q}SMIsZ)$+mgqxe|b8!?4bk^v1g+;EmNufjYxpJgwpw(PCf?~^JPiBFB?0wxf0C)p`=-iw2ms8+6YEmu8S z;U3-TuW?ZHj+J)awbn*ypJr^wWU<2ER&lscaT zTK6RDeI`VL!`HF>Fw{a8ZfgXs4;xTLLv<*>38{0W=N-W#4+;u1njChuWrgV8$0_V z$3zkst2O!F6~{^ivKnuzE%|^eTaHRa0e4F65;6aE2rOf4#+vvr6E^>`@^A7zLu7I=g7~GHLQZ1{74B_ z4cpk@>i$#@&~Q+o>>a;^F6MVJb(?aLll5H9^GSHeC{z4%iz*lJ^3ZNUrMGxdcWo?P z)#Z_5W|F)1M!umt0Rq)UO8VV9?8)l9Mn7%efsCb{-QsdgO#4&Y>)bgjNRG_YC)A;F zimYli#84AGWy5$|%r~=8$Knt1sW30dl@Ey-_mvGqcQ5^D40l~pry~JEzMDB%<4(tN zD=-d3!~W4t!27;}CIN3>UmXB-SnfEe!9pn|{ea~(cu5X#n4>n~1eVtOZ?A6742GN= z7Jkz7(-Kg=5vO|M8kx(1!!7fGld~W{H$+1--FT)!>}oWR#O|pG^KF(M>1En0Cf5S6 zkDSsHg~5P05-{9teQoW>M^wIUnv6%}$tP|$#hy}2ilo|W9(Xzih6_+9dd!aq(6m%; z<17f+$8$&;SWYEl%(Xg<{ zphLOlp8%Z-_$?sinlX8F5k5mN%5q8E36tF1d{;+DM+!1e_2$hR2~%i`#nkRL>xBy! zK0Tbh0owMFi??m0yo5smkx%lgug6RI?_Ge$@-QGDHn@QEF72}R*LfHzBK@PJ$|++i z%^Jo_KyN&LsKEsi%9~e?m3&olk#H&)DR8%OMOsSJ1*IEOCh2HvtIev=Vg^gdftG9E zb3~~O;uhg>SyN5hvFB^m2utAcb3W36iFzF-pzK?Z`%|V75xthzQ zfH^4K8DDi7`d+Olm6(L)i-C~_Vj1o)w{U^m;!R;8!eiSR=~zB+zVFKeNNko=OT=sh zTa@Cv!a{*-*E}dLT>`p=GYOq-AF@^L26OL#329`_K;O{%R*9NT&emrIaps%3A}MFq zmuES?w9_EvOHTr5(NU?TxZ}Xppc597bLY>;C!{^b^h*`a+5;+LUCzt|{UUioN-9~% zxGK??o%-(VH#NjX9pwfW3CD4zuvo&nix>G{a)QxFrf*lJvsw8AMm6Pvs{M@ZdxNSe{fiU!6EOrU#=AO#1^Z< zZG?=Twzdm$Rw{5qyqxJMddwmBL4wK_emF(fCVoF~l5S&T(+*q9JdurdlaLNw1ouc9 zR4c>ijGX)G1S6eypkc#g+1W37VdO=r4@iG_T2dJUm2`7w=ZBSk0?BA4qy%Ru1(HBu z+gGoM9rZgh)`H6A1?rpQMWT|DP~ALD$lUKI;3@#6GHzMfG*ZhmX_C(To|zz%@znO_ zPVjFW&ThZ1E{!!;iJmthVtLu&BIU)$-@Eso6+L1bxev|G=CVnMSJQe7W|4($ZBdD) ziKVE2U2*ru6-7fmom}g#4}*@kmiFeC2oE1WKkx?~1I?S>fNn$G;gXx695uCQ=$?UN z7s1Qix_z5p^on+c{knAi{DKXIX=U_!oIuFw5#Lydhi3J@?}Oi^g+h{61jZI0LjqQIYUtGwIK`^CZSqp^|Ax2TV0ZLZ>=myyBZ)5sSxC z@>pfj3l4>P9Us(i&O^)AR;7mzAL9ItSb!lcuQ+!IxJcdNpdRedvVv^Obw~Lkgrq^-$A3<{oaG%-MU0JQ0K=t6PIPR(~hQET^{)$A;gm4y+noW zJ)sD0QTv-fn!Y&P!}k}yQpHSQ*4Ec^Uk<7yZDg-JT%24Sjxp(>g22Cgw%B0z&337^8jPtvCdMfwH`w$39 z8zviYi+nRI&;2ULb7$E8n3Cz%L#^IVs&P)$=Jj{hhVoyXIE4(ro=$o&GB6lO;7<4S zjT`T8+w_(}7KA}-YL`6N^Pn0#^LtLs9y~kgAmY)pm?x*;U^y?oijSG8EHY8vd(|{# zSjbPeygEd=F{>)aVC<`iP@@qAU!;Pfr#-67b{LA{81;sy(jvlAW`9!9tvw;N|EAwCl zm*ePA9N5qx{*^gn&-7$!TnC#PU{oUIUJ(r3MG%?c2AJ^W6NWr-zPS3kcokp2g5w zfI&gPQ53u3dqO?6j}Z(2)0jOB5Vf&kXSf;fZY z>EdcFCionMwCR$7S{`gVn__Nmj&Aq|2l5Mx%WqrK+Y2YkVC7<1ABgU)n5AoIPS;6C zbyUAMbV65^qpgAe3^Eb)&bols)fbhHa0_wJn((k;ZS6&xct}{-^vqIgf3;NE?%dS; zyh@Rgm$u^d*7?SzVM=&sXT)g0VMnhdIHHWHcN|+`F+5%&K+^fuF->oIj1>W{GjP-2k%EUWD-7e!H&cn$} zfm4(C?w;3nj+yPcwkLpeip2T?3|IeS1rJPnBhW7KCP^muzH>(a1NJ-aj6IO>{7`UIe$qUSYCeg=n=2=A@#vFAwU=Y zr&j(z!fB!t45<6g0rB$6jx3=G<)vq4x)pUibNDF0SJ~L}sLluybQBt_IwREU93UN_ zkk`v=99!i$7Gh>9>oQ~24>48A{t*7779%;OnYR11nteh-z|;-W4qM@xZ9RXwC}Cmb zDJh0*Qr>-Kq4lT865~%WmgG{n*1yEWvw*`vcvnqQ79^uDG|V@j?<+9m255K_eIO(r zeF5i8LuEmLT?L@#GT0NBmO@>Y_Z}j=yoYH@5DmvCm^YL~?h!@NDqH}s%`A^`Q>kzP z!Tq^&d%8`5A-E{qA5cFc3MQ7t8d8|Ow9^&|IV3YVVOM{gRPuZw^Vl1lw<;SOd(;*j zF&I4blL`6q8JC9 zpMQ=>d?oS2BWzoq8ffIholtLM9gUB8NSXdo^$s!v4?gfX;I`_F7HI0wxOcA~dLkn$ zt2>rQH~smZJANovsfiCCe_xe;wC+UICO*EitLNG$6%X*W@-(7gsCu4b!lS<#igH^l t5u^3}Z<>d(`e$AJKZJSS*Dg8{Bsjs{5=bC;a0?zJxVr=i?rwqL9)eqd;10pvEx}=McXyZD^LyV< zPMuqI>z=>9I#UIEX74@Sy}MWUdY)&ko?tl{aa1HiBnSk8D)CW70RnlZ4S_rzMuZ1v z%qa=?!QqL$g18W*WRQ3p0wIS;hzKgVr0mT*YhhhJA{?nEgglj*dxIFV0#6`_fzZ)Z zK%!9aciDxT3G8`r97*#t71ceh5@%zqM?bC5)_m1XYLT4?PYK6x0IjF zX_0~GF%3hW2loVcCxhAyEP@!%F)(4T=vUH`+z?9GE0cpDhT)%glrNaK|MliO#{bY$ zQR))=S6?*PWyG~Q`%>|2H&6I@>toO$d2$_u6RCwiji6$tq;nWXmhYr!MgDn~OoNyg zzT}PlBsuecMLHX)I8W>;PbyBU;@B$R`!A9^Klh%2XLnlHQ4bUO=hb~88B@aQ{@At? z^|!abcf`DbWu5+LWJSkxAwT1DIjr;Kw{3O@weOtS2xKB0<+C&H_Temiee z2a(QqCj@({7vAU&_M4W+ig@F%#Jyx(_CkbZF)uZh2avynh;Bw zJEYxt(d*}OjC{)&)K{3;Yw461lEXWO`@Kk6k51W=A8zn83fr?knYTd+xLKkH}^eh@^?8W)9iMYg!u2G%#m zTe$0M#ui_N?$MW2fsF{eC#4&O)PV*o(JnWD7s2=U)^?Kd`~xNa9N|BjF>k5eKQ$8 z8;m@n8m2<_&(onj>PRR^)I!MVc!+qAQm(%%j7P6>ViT3Bw)=1P8Jvw^1##PHeXq?l zl-Y{agZPjmPT`S+t_GWgG2T&8MQR&Wk{W8YPIeZij?uqrZFYmYUQ512>!HqjXFmRuAJ!3mp7fB`iC;uP0h!`iJ2j*eUgSG)J?hnTM$N+ma2*!DG?!BC&imkGgA{ z&3B(y2iM&R2ht)MzxBK&C@WT3Sel{^dz8L*(YX>@+t?_07ZYONLG5yL_7;m9Hj9OR z&+AcKcU$&dT5o-#d~fM}zd>?WZN!mA=;A~}Lxab2DN^_j`6wQ*PGm5{%93-uI9#~= zm=in84gMp>bBjpMAWX6*%@vNAHw=#V@=@WAt{%K)jL#thP%9BPG2>_!UvfS1wZcPm ziI@__hAwZ7qp>{tUXPy-W2lZ`Hhx>w>nKgWfA8@7d3yOewzF-bOCr&Rgg?&bDrOS` zAuUd7hYp}xt{2;`svtcyBo!$PH6fteg8nAt=E5f)K=xZW46d)5h>W3@fLiPCTX(gz z2roapDYEUjDXXAG<`p1vSz$bnf4Sg(gzWEI*AMy_85It`_eUdq>^^d2llawdIbs1UD%*=PFJK*UM;}>lAx2t}E=;g-y zjQHN8kYtuU%XU@FE%uqu__%ul zUNgpgy_4WsMh7RZGclk0xu`!<_10J}O=e~$rXv%fuIvMDp(=wSkvW*QQ{^;-?33%v zTTP^SYHb&;M5KoM)|%02(ZK;SXl1mT-5;}H)@V&zI{DXj|K?MyQI(kzUAc?oXlg@& zZcTZi1_8uo!($`{-8=P~=)sa#E~`Furrv74+5AVs()be!8T)g34cDcM zRGy%)sfhkqI>TOZzmfiV0 zxHj}HG$<%Y*h2` z2Pb*EHAOlIvX#HRIjq*AF6FE2M1RdS1sa)in9<*I?oV60|b z^A&TSKvH?&-o`ubj}k0;+>*$oac4VoLEdOqzcZWkh?7>yS5U7jvRgNa+}}&PN4g6g zpk(_pQN;X5`ct{%<&$@6BeR8y;sUQ0Yr}t^p@3C;EqSVr zhH&0@HrBzk^ha>8*>~5?1HSQmMr3WopX6tP}IyZT2{q+H|QUrR$=ND zEsOK#k92G#P1qxfHaCLd<5xdU=L6z6M&01DX@RB6@(ldT>s+@(**zMrZU$9i#_xs2 z4d@?$Z-qU;OzqdT+t)DkCN<3xw*_Uz7qFblyz{#2tHjeYF!N=2VkyPlsM?+5;X3Dj zBzJwMcJ~(c7$kR%V9G@RSE*-a@Km$1{M_>@P(HG}xPUgFSA{q#%6`}6m&)O#z#0-fRz$x+AS6J_F10l33S z`la1 z=X!pPajEr__AC0$sGsWxfh8mkkG18@()b*>J(20HW%^XZxw4E?GcyLa5vjGdtJKZ+ z#w?JZT3mGRG#arbB>FgAm4R^RQy{JJ$WD?_YQ z=>9?E&ig!FyiGlapP>ZG`As(Z4du~RSe6@wTe7TED?P}yAhu$E%{qb%0 zCkRAV7Ttr{wz1#2r!$TU*b43bTv7w2fbQ4cXW~Bw9-5NEt_PqvZ`}{ugp2Mi>259% zeM2h^qt8pfYa**oDHm%Mk%?Q4w_?hR_pjP&1oWREKi=hD#BHgT%(pIGx@X#TA=%hE zDe0K0)fvFOcW}FpVfb_}KODMPW4Sv<$W>RziR)ePG4cBrdZJ#D^~4vZmPNNaPq|yq zlk*AQS_-j;lM?yeS1=gZMIGj67TFI2q^UcOzIvXQoJx+O7R}abJ6xZv7Y!G<8g{1h2Ik6ElE?HhZ8fEJ zao=9f?{&djYpP9G7%}OeVffWRC&)?|2J;m1pFT(Y$mvKbi9 zS~8`i098yM#&|O-FmN3AM*!wSwZ-e~R7}Ar3+}I#mAzT`DJn;I@jmrS)N8SYNWPEK_fiiD_RD9Tca)2zS}!~a&R z`TMt2_e=mX@~gD6L#nrM$I%>j^B(!=J#m^F%K#YN8gElQ{53iC598|p&H&*gv3()n zSpla`kaSpDDwBAEi(gU1kpy?bkq&$Kt?ZN(EiH-qukM#*h4?IktMn|fYciU~*&f+CQmsZC_XL7CcJ_YH##52g0N{!frTdZ8EGJWmud;}A&mX?2r zqeyA#OR0L;gMe{_f9-Bd^-swoL=h5r|El9#g2O*=FeQTiXPx@<-D;k38~@*JR|A5{ zx9@1a|9sr~)HQ$%vxlIdSDn9L5DA!uko3Qw^Z&k6pH)VmU|^0UAFd8dXh0d$1;&25 zm1;?K{~^OO96?vqw;B}qA|j&1eawiBi78=qF1$-pwCb(f`X|gA%;c@V zJuOavQ*&t&nXj+ftrtNc?30tcJit(_;U21}C^HrGb;mJ@dF@buWRg*@t?aNnj!B=~ zKnq3o_2EN6TOJ-+bvffib=(~n;t{Zp!ogQYVqS9}P%b<%ag^Y|scK1MM$%u*B#OFeV3LJxN!-WXNNh?L;Y%Wpr z?T!6!^WAV9bMLOY7RI*&dqGo?&qkPC9#apl4t9qqE*&}!y$|H_O}dhFZEpv)!(I@C zz18(VVpUYUI~x##e2D2r)mI)w3Z@yN9Wdc{^*#00^^J_brL&+1HCnpl085cn($OKk zAm;q`aPOAk8Y2dQ=vt%y`Zd=v*!#?Mw3foo{GjG>nf9R`EJ&2g3BX|eS@OcUFTe1B zYDvQ499}OrTNf385x^-gm9P6H+&Vvg+uPqCV1MsMJCM2q?f5FpjPd+Q{^bD`4-djQ z$xgwKFH3uQ-yIT@l9uNDrLGPoUxGE(r%(b)f%x>~mdYg)ZkzcXF=HH%q<8{hFr zh@4%lID?6nC!$=a0cX^&wz5bERf>CbfBgcOg)abz+7tb66uVz~>(&=3Y>ckc_4m|R z`ohf~Z6&Y!!-q!^+C~ z+|e|2k>jv4(H_s{u}zqm%jqcsTGvl=8w8_7P|lU-sZ0w0Er-J4d{0J}?bYrXml0nq zt+G#I;#-4Anw1B?z*?JaU0_72pS?*B=%ef|NiRf6Hc;P#frwoS2Zy{)#}{Vk$oBSk z^gk*LvFAr zI0Y^7Uy69Rx`qlUUnm3ZEs4#x?Hc*9waKVbbwP!a((ShQxuBdkGaq0#L}u$Vi!dS{ z34cbnEeF~_-wIpAwu+GA44g?ww5E6XlM*s2c zu?#E(dIknh6|u0?5|Z1-e{3pAQYDff6~Bw+SD&uy9qgmuW`a3U9lAK&jW>p0bVl{% zD5UH2lz?j3>yd=&?>qJ#T<*o7rlx+QI{B2Ens--O!{$|yJGks#IO;2b z7fX13_Z|i}drhwv3eNOk_j&Q_{^S0`{NwTBNdN8L7d|wKyKcArA9#J8ulKi?t4GUJ z)^p9EqK_Pv-_d;XYO!T2qe$=~Q?kl?x$RIed|15f)NcCqm$%VkDvZub#wM!ryB#-& z(&<$iOG-Y$7|*L$DQ{HxO8si`i|dQD%8^vo2Rep^F01CCyDV`AtM8rMb>bf=C^Nr< zR_aKF{C41-u7y(HPFg72>4KJ<%lY#JE=U`XfT81V!zC{``>?9Tgn~W5~q3tUL+6^@_fE_9yg*^!{l7K)d{x zHjBQ?gPj@dwp4B^7Rr}j1=|1t#!B~KLCVj+RO%Pqi}+BQ<~f`xO6RaYL(;Rla<(uu zmMa?@iL85(kZ^?;fI)4vaX1=t&9sXJ>&S1I%2gpq! z)0LZV2446=ydRxlA2n;N=xTUK@d6pN>obg`IL@}`5pFLJ8DHk+9NRfsA~`#w$DSB; z%UaALTb~-}zI8ra8IaIzA1bBS_-*Rn`cvB+a)6?w>z@&ifH8`>~bB^R}%xmdEXU&#%e-@=Lg^MHo}N?I!@0$f&i?l3tE8 zu$3M{PN~DgD-i@gC@6gIZ|R97eG6S|aVC?BV-U8H!!UyugbN3v8P5Fv(tnPSnaSkU zF7irORxF*rX?b~sFg-FkPZh$%P#Oe*CC3&{zU@>@JCVS^Q2 z{F4#66h3!cJ~sz(Jv|5-33r&FA3W8*ZBoTthj?V!GIa51!Tm7PC=_>VvX~CCq^I<| z;?MS2Zgi3xda-7W*xw{J2qbcB6twx3i>qs<$q;F+-8muu{TXX#cV`G;Y5N(0fVL%c zV~jZ+rnJ~N6h*fAA!JIf(+9ocEb2_r(~Yf#ES{3r+8rk8o)HO84UJ60x;aaLgWT^JK;91j z{&<8*uIP;`t*frCzBN}@*k2*bPY^7h#s37t>w5AW8TVVq!U8GT*&~Ex#<}wti*fNs ziAEhEgvopo#bIv>6EfT=YVUEr4yAR}sk6)OZ6+Zhc>OR< zt=t1{=JzqPnIZbt@zA!1GpILOvWRzrofib|Z>Z4z4tG$wZ`x5}LSGJ2P|w7oMT zJ)zp%etkz7Xcd3b$K!gL#pHQCUSEc~6;t_fTXCo#m4LhPW1{z?dtwnmVX=Skd`klUU>e^oFTB8d z1%)twdlUs3PJXUlI~-)b!CBbDgBL^;memPSca$%^0KxvEdwa3}M7m8N{$XTV z#_?Z$ak?D%tjuAXTXyo|Hp*FMQ>e$}@X!$h_|aOKX42<9$!K@lIeRsu1G%!Nkf+FIQ?iW486s)k)4S z=D7a!DYwDScs?gSjz1d7%<@c?IWSz-{&>bx1(|HmAx2xA23_0o;7Ii%W#g+}s2l3o>%kMRa_8V762|jyl5y`-yO% z*SF!}@&sO2q!lbIiZ|F(HHSVY8_x{5IJuYZ>Q3>wKjUjun|&=e?0E_i3%_~(;>C-r zgN8%fgFUV_x|4F(Q)4v^jis1qDv=33<1?C%(jQxMGtx6PFRjYT%LPR~zp|Qd^k;0w z@V18t&zcq8KWnAQ5~HM`c%tidjU$u7`E_s4!eYK274R0N=8VZ4_Zq99u%ONxR3f=- zNu%EN1=`(D($YsQhs_k*wv>;q~e4pGN(8AhN!(k-+Up8$l)z z0YU(UYs$2Ko^~!;wdHgOtH}^0uLna>QU5kh&+q)jjbltHS=u-VNcVoI>%DY*|7E)3^<>HY3#$XGpt(wfU8uEBcsOc~ z%suHd1g|%)n&DO65F2Ovj(%mj;olNi7PHkP?iYLh>FJD>W^5r(xv?blgHzL!UT|ad5jWQm=%kk?C9o(Z-{*GbM>y zfOdmI0I_bG{JddYhDH+1lKM2d{08r{D9Kj|0x7kdK6$Szy@Y8f!!}0#53J`;b~)}s z0?|p^hoE?io{!oRfdD&-SmW#He9R7@h{t;gSVgpPV`G`aKQtOv{QrsQhSWPSARI~B zROWtZ6}#Txv@cX+#TS*FtZ7h=b1`j_j%R)=8j4FqkLy-hSI@3|d-cg6Y*kQo5j*$r zcbBS5YV|$#rDN7B9F7a$drGH9w)5;CJ%YB8HNKXt7g|h{cg#+Y$A<(>Xh7k_(K9v< zC~Z#qR%gFS0Ww)2QL(AvuBYwC=c>Bxb90Tqgq4zbE_)0tTU?G`W_1aj)zj_w_*Gw> z1vk}}620zAD38B5WqWc?)|wR`6p(-X5m3>XR0@!6TknDO5-r@tDI))_W|tS@6Z zHrD$Q>Xq$FtE&igb9nmt_EGWixpO5)G|q78H5S_e0OGa}NJZ2d+KOJhjlVSjFw}G` zhkk9rlF8mUpIMykx6 z*Q<4O>>xf34G7g%^Y9Q@kgC!3bZK`NU02szI+Yt05D4X2aeB>q{f+=#iul`1;oFFy z;NY%I(a>f3OTiBx$RkL@<>Mxl4-;8Ujvw5~T0z4=_-}Qt?o=b*+#C-A5?l->mF2j9MRimcazwWQcyZoc`PfX?z> zV~TNiQvdE-aQ`M3*U*Me|9pdJ|BhKpHTxzgb|Xw36#Mg2a`n}AZu)q&vMTRP1ha5N z;M|53w_hs;4)^+GPvdLco3R~y?R7$b4;x0H=U#wXz zbTAJO2n;7CS*a75!A5;OSGGB6NMf$R<}Z-sgIiNw_p5LSCHpO@r8m|Y*W}NhkF(}=C3Pad(5baW%%oG8NOz&7J^n3>dL04h2~7ID zarByBy%}`HKCdx|i0!ps+i#YcO_<4_udl7Oc6L5zW)@#s-&g+Z>E=cVa#z|9w0STH z>WJ_dbvjSh=^U-du(5-t64ch!>!zmEYHMp-2TN!ndaK=w%WHezvc%C1`&L8~PFE{s z->$A0Jb}D;K{H%wf(~g7!J)H#IBY4m-((jNI}idv-HpGf(5W;8bW-4hA=F;Xm>Gsb z@^yAbo!!J;SGKE6o--&$>e}Z40RaZ%Tk=7np`sr@B6{8Ka}*C$RUtz_bo;ARJcGWh z$aANIxd813Dy4-fLPA;nBm+4Pm79xwz?N;#di7CASe~=yd{QkLV?&tO*Gw-TohcGkCKu?pF6EA7MlrpoDSNXJ#RyQ|L5QW z=gUVF%7+Q^A^bZ6(arY?eJQD^%FQ>O_JV_21>zYEw@0(NYvl3LOB~-iE81Rtd>?>H z5|TJ(@_~feUVA=elnuS>k7BvK!eVXJ-)sPHclKn3gFOGf`Iv5q>PBq6GhPw_9Bd8{4AdVtqq% zKgQ;Spud{cK_&LXOM*;nY|0HX8FEWwvcllvY0*J2R+;0hO6sg?z5-myCoN2@)4iBw z&)bU(#azAh8-NuI?yhXX+SW0)m+Nx372SQsZawX5o$K*TQ&aN?ohlj@byyGRl=n3z z!ynYt)X15bAnMc8Ad!aSGYbJXyo1Qe`R9>yjkvddfZtMaaNr5H2_|r#yB7~QR+-OU z>|d>f2A7preJw7g@BS7sT9`U>p&3<;j}#f(?8&3|!8;)-DHEXHtHXZfbvtG-8+kE# zRBrynn>jhz6dZnA?U98*0Kmq;$NpJelyG5gc6zZt%k0(83F79N3fcW?m2Paje7qsB zK{JS8_B2?iw&ZEPGI(lXkrv)%k{&*xrYe|`VW?ynXmK}HW0%J?8`Vlr3nsJZ%} zc<^f}wfSBt?n{GhP*oKh1f+31@j1D*%E`&WcrNJB1c;>Japr5pbUd_pF$P3bRR2&Z z;c(FNbn7xm#Ka^&hW7V&cP3;kZ|Og3qWJenE;iGvmJmZ)M@NOSQxdrHtkQx==sY)& zAvTx9N9nl`T1p~ zrz|BJRp#bJQsyZ6mm-$AjGyk+qo(R~YSSJ63NxQ7?WMebWyNgCL0x{Y7S-HCc*ePa z#JZuy^qELF630`Q19b3VRdu<`gnjUW1@KSr%gV~+t{1@?^SxA8yaOH;0+E1z*HhhJ z&n7W8Hty}~`|9rx$HKyLwy=1<+h=2E_Y|Vl;Pxro%97h@%csu1!}iP+g^t_ak4=eWJtNt+Y#RyM zqxf+e!mABMHOX*p9fjA3-+z7=gaXswMRrEA5Zc>~srdLvzC?~OnXBLfJt$vGcX8y2 zCcCwulM`ATgLaPd{pp53&{haXNpmUQS+Kh~;9UYVs!8oSB7>M8wu{@ z^c27j?KQWH3ZsD)x03+@FFyB+_OL|OL0Ve+XRoTM7DJ9Ukn8jZQ^?ZJjWoD%aqDBtD30^8=;1wYK9K#pD|uT`YTUvJ z5z{%y1O>km4&db8176*e!X>bDyxQY(w8RgOPT;GUD@%kOS#2o2xS9dPHALj(@ZY~p z44J(jgkq(RgoMQMnjCDF+eK-a9d>6#>ttrlKQ3Q&mW+v{|Eqh~dFf^5;BXFDKb@9a zFD@jotZQmDIH3Yk`1b7!#T<`Nult+rF!5QJ9rq%^$kk7a*Lok*cPjtY*W0J{^0j|& z{s;#Q=z2U~k$HQd6l0hf5r-0S* zMgy4aJkqOn%=<|94k!i6g#kcCbl4t6eL}*G%|q(=yX&Vc*%mZ@W)o(>Ie5N)PchS@ ze0+Q&G*;Lf?}4`Tv&2*Tx${m~iMBiC8zu}duV(nJtbP2kOBZ}DyXQMlXAwCYCbvsh zgeOl(^vp=wK+L#RHj?NysUTH_qCdDpkjK1j~0Q3_<|rqt8}03myL%3^h@TD z7Nazj_lI2?F3o{2(&aQ8>Y^iXW!QIjcNi=NuYmXpJIqv__Vh+mIdo@P@}hE0lApMY zIrHO>=H6KR3-;VJT4D2fbqxs$_xOI)Wf6pSjfs@@uAb4nCJ_p@b+jyKti;7hCr9i* z41uX^cCJJz+~=wif#+h}xb7&(xbHdxbfNJMZ+zlhbk>=v5ue`O&r;Ct_;e?4Vi08h zCb2$qE32xe-NpzqsSn!vR0*Jx$K$;cApWpWC*V6Gr^bIJxr;bP0o*8GhU$(~X+poF z!MzbZ2J1CZNw{{RO|*P$-1R4s0R2%>5$hidP3|irt38M)D88koWDIwnn5@QTkMm@s zx&RYBefktcNN>)z6-SqU6u6j86a;rk;l`SxoEg9UbebH50<^^ZahGI9Mp$Ix`%^~7 zcO?JBg#m^6|B*qkz!Hi}&)`G?DBA0{g@1u!Y4yWRGP!+Kzvy99S=aXBlsnQt!3po3 zVp(xFDbd^D;D*{&H5+%s#uC%jotfXgEw-yP*bRe;ti}Y54~{jaBL>7=c1lL-AiEbv z0EsNgx=Up794$wG-zoQqfgFb|`bwAM@88kd$n7^D)J7>jt~e4$ayY&lch#Pyr9N1x zE?&AQH6X1q-;4yDiS`kdh(+YYGfu4gCOf?=G@g9JG_1cuoz(fw10aD61mC|w2ubpO7+y*;zNF+N~JuzJ?TCF>Wa`uoN?C$P&E(4y!IiECvwji6i!zi8Z70QFF`uP@CwSGrw)PUzm zhNpOEXQ#nPW*6WbIG<69)pbX(}PH_OUS{?FJ{+#N3;-5k-y&gGdR-Q#Dnd zs_=a3D)Whe7H`e<7O`-mx2r&+A>_Za!GOh5Y*${b+eSx6e+|Z>X#*wj^Lr(*(Sf*| zkh+POF+BeR=ktRDQhc5ZR#+Hg-Wg;%cwH@vgRubg5riSOX?sGaDrOA+0-AVteF|e! zAZFt6aLvizGzF_VJ3`H{&8U!C#XA$E`v-3j6r zzJY;wV13ZPK8ek|Rnbm%s8Uw7ARr(>L?sEGEap4zqscm&cU~+U&!X4K^aZqin}UW0 z;qq{?XM`${*`XKXPXfDk9mD(g*jZwcLRwnygoK2SX02O-3t0L1P)7pM^e;67FBz~!NF0oQ{w{M z4)OU^v^31^S=z&7Y;PoI3vh3oHQwdkh8G7Y;dyb zNee=RJrw{Sv}Q#}mwq{h2G=JzwGP`aFGNK2HU}-Is(6G}iIgpWlW5MYjMoTs-mFG` z3JT%&fkSTB|MDe+HNw{+7K^9!evOK6eXZ&n3e%w|5hk`)QR8Y3&V5-GqAi~$Eeb^?1B5ZrPwTxZ*3Sh`+ZFMycY z<-91XXjNk}q=Q2G9`WnfCx}~9Pr$0dX}iJ+A*bG$#()0YK`w6bY%@K|-CcjGEF&l+ zq`lFV@z#4J(`4Vn_M)r|7EYYMIlnSJ5{Lb%)p&VEUznK%vKv$r2zXH*EH*@zHm7`( zN#&;CGaYtn3^xFqkY z9nJzzox+GLo6`&JWqFO9sP8v&d7D#m>fMS5G)4F8subrBR3qn2E*>XmTV;i?#J%-kaVsjb=#mv(vD)9JdX>hTrIqG!UmXSh z@@|kH#%dPF!?(|qoxh2HNo?=vArLC&j_5CMd1U&O2X@jKUA>y#anW;v`E}_Q%a6&~zvxsz|S?I8t?9J|UHI>lxA{ZK^^ssB`x`T&~ z_ia`A$w$+*jQ@0k&sX8+0*{c`Ddg(nL-%|CIIA?#n={c{Bt~=4gJ)iwp6e$%o(ouD zER_4d?AkltVl;e`;*iY{)-$0vaLKfJ)K9WmRSC&!o*1Xrww%C8PHw0fzHEBv-(PUO zd=`6MLccJ25-EvL`CaBFNQYy+KlT{}#0c`VtjhHSIdK^^e2-k0ZN9Ae4iC%K*1pG9 zHu>*F_Ap4@``>&w{oj0-b~e8J_jv6gpuR4-)&j9caI>*VNl3Tcjz5OXCrXOT8MKWY z_Y40w`diY=f3WaLbbp5N637-*^S)|MryKZnRCC$Zr ziUa{tVq4>p4Tw^_cW~+kN@eH-yW{GcjRYleRUTB=CKMzjk;jMo*rDACcdm4cqVy&- zHFb5qS=GTx&)2W0DFJsXxpRg?O-VgoYV&+^avD23k*BP9UF)kKWbF?+1c3qy&I~7g2P2YoC1VHdVHST zEBE7BXr|6M+N`+ncGkOd;PAs4LFjam6=YLDs9y)Eg@g*%>#iV8rO zt$4c9A|Su}oDjkDOUVAh{jKTjpsxC0a|B<+@_OPs%j1_g0Gxe91?g%amA%E$F|LkQzJF)w~NvthU1VslgGPJjnC+p_wK<7V~7uMe}#nfp_txVg>u6x|ztlbKxmYhXmsI!9V%IzHinWy1qR z$5=Lo(j$%kCQ-7oV$C}5VVB2xbrQ$yY?dn-|O#Z$OqCxogKjU`l1dy!U^A_#1u`%UOLvg>EoP5+isCDBU|8;%;uAdSh)F8I%_gV_K zZElX({qmp#3X&^Qxi7A+R`ua8Ep36AwRG`UvwyP&iFXo*QC{#)1|Z#Y5|T2bQ(Rcs z94M9C1G%}mFn$%!s0%Xt{epvEV1q5TMa6~9AUY6z!HEipKL##45nuf!MpH8o)nJ`- zcIE&&yQ4^5e`}&Lw_9x>jy`m^k8#oCVs9Fm)p)QI=(r#{>#sXm+)=amAY0e`U-bHX zD7^&(Xia9jlgcX4W(y0;;YL?QkWmm0d{F+p_~pSov&kU3%iR?-DQ|6Ln{WWw&o>4@ z?Z-tg)*mGaNRff;^#(9Bpa-Morv;i&hRju5s#-;wKZ&Oum7c${4Kw0qL(I9w9RBhC z6J!(=RAs_LB3;!&aMGzaBxq#ZVIZd^I3$bQ@N5?uq-|YayY}`Es$5&8GY4}~XKe0< zlrT?>lW|xrd~i6USZ}E`8QKohrH)x1+{Xq<3jU9`i_ZO(fsCC!J%(K&%4*dXTq_YI z;val&8m1i&7f^#=1arDypjge-e(j6N&714&8LogkKbSxU{uP6iG(zBUE^J7EEHGh8 zEquMHsY$*>iwo?;gH)M;lqR(`;CpN}W{u4?pOp7R z^v?5pRMc{wxh?{q+nH~Axwr-l#pUB+o%jpbq(??Z23cEh^YzZ+ zdU8xaxWqWQ8#83K4aL0K##bs-K?T~<)@U}-Q*MW0HI*^u%w5hCRVk5!gfxXObj;g0u^SS%#ZE-NRmx6jykitT9F>Mt=oSIVw83LOCKagAb1n zYE^D*D#beCPwsE2Uac9XTE1bRqoaGL#Ytw2i+k1bcq;%x7bGBetBuEV(Umm*0_N;3 zEhmiTHq+b08G1%vOWC|*KuhIz#wD>)qEWhJ@4y<7&V zbs%w&&4o|?3pJwe$zFR5jVyV5O;v2FZs;lrWelzKbQf}tj&`veGSj!e9+z(6U<#hPyg@0Ff1$k zBW%-=#MRw@PS1I@T>+c3j76zh|E#2miVG>~>`wKm(Q7L9xPkx)HUMVIKD0ZgN z;Cc$1tPwjP;Bpi8MU?-~QX<2ugsg1O<)UoIaz`M@y+UVXWRy-jVJny>cpKhFK3gw0`);06Q{aWFW(i|6iBa^md;{%@muD%rvazwWH}O zt#uLAdofEw8ARTmte{GK&$Z@v#c_%cEN$TRJnbvZEG?)({*fFXS}cVCinl@MiRt@X z;fNX4J|to`R6#XUL;I2D0WJ0|v$=I>YEx=I`N7- z6^yT1%5vl`+o)B(Egmf>;%=GM5~ahgFl&L`QxPz1M1`pzt#P+4wx3d?E7tVP$w^_} zN_k@WFZBt-ve6%~0|Wy395ih7%=`YK)VQTm(styStAbA)58?c-sF;vnlS;fA*2pD+ zZzaUo_N*!`DB5|Rbbb~U_eruUa_NWM{jbwwK2@WGdw4?-wYgq>UUa?ZwMi>UX*L_< zMv8s=v#rHRwLC;?7Y^LA_FPC6?dr58^r;M40S&r$G*V*NHxfEqj{+`|t5Q0ss~;UO-B)f!6%X`Qc;k|c)={B9Y)65stsUKM zlW=S7$cOgbrYq~02Mqxf{A5PvO|FNf6TMtb2ky7vF33ZNbUcnWr)QM;Le-h)a}>TL#X)Hm1X(=N*fKe$s$Bue>1J z41&h^h1Z@o<}davLiHwHaOaY|=vKw|-cSyQo5jk@`Jq8qgi$S>Jn64W8FWq6m#b$j zCXV|;KN^u5G@GpdxxaJUU!}s@=zxpf`mx|Py&N`5HV7F5l7qyxrn@hTs5!!6!&=5B z6d$YA;?ObqTJ4h+A#B#@nSW!T3;rW2`1-%yvX(QQF&jNn%>Zk6FB_t^%J*a;JXY|F zL=c~IjQXO^w#0@*SREh3hmBsR`JYVJKQHY2WC*+60(OeDxsE1pEvFoOhE$7fRlJPU zde8GCxf?e0Q-q*hc4Kc{>%P1LAAO23>x+Il6dP1Cw3*qBslmRYN#&p}v5sqGsqH(V z^d-^#zrLr%m!e#-(IEihWyZ{PwLJeGP$;>By8OA*x}|oz=K!i9tPIju;K2$O7=|Zb z&(+K^!Hi-_(7=QxQM#Iel7nE(wjjb9x!jRpTH&JnyPJ`%u4X)}`D?U)fNk{DB+b-+ zv)Db8VbzR>mA1wWN<+@m6`Gjg^?-^hn=9%(IEMa5?Y3o(PwM0YYm&?!lMGp2^K+V5 z-TW9V)gYnE7g}ZM*Buv5Yj*a6aGkWHihdITmdFdVap(seJ z3ZgcAJq|(f$R{ra5w*_|Rvg~)=%`oup-*?>dq?(Ro&GWWEylAt*Lu?<>-qJqB>VV5 zu6oX`>%MtJEm#T9e20z7zE6bYT~5*1TeuH>+A3mkytA_af+GaN(!K4^wYE0Mnsl`H zZobiNw#-t=TvJEb`!HHRxe!Wu4!zKR8wdB}Z8p++-3Y9s^5ow`G387;{6a+N%-b)flM0yEP5s+R( zqy?3p5ReX`fZ(1t{#2Bt9yCfZ|Fkybxe4~H2 zzVEX5wArf-bHWl!RBA1{ikX$Vp5QYd3SOs4T||!*H&JY5?@3E9W7%T6CXf-~NvBJ! z19o-CDy@^1!q+y!%zp((-$3~;+t1xKt#8-GOgIX0h6|g7r0@@buT*JPH!J>JW^f~z zF;`jVxrs>{Mu&;l&v#)Z$B}LW?@8#f)U)R*tHQupj<{X*SHIj86N1@&!+=8yo4xE} zMkt)xoB=!eSEMQZn=!@>0Rp;jxxMcqk0o0;AcJ-qx`q^U_Qe>T_y=u@{dY~OUgBS{ zFL{Pja8Ogt$-2DFjGAKCcI6Uq^2dlj8u)H_*-Hg4rBPpO*nPsgVw{c^=@qfD*6We7 zXYLJrG9|Y^nMj_7@WKw;%K^q~;b<5A^9&>I2fhPR6Mbml@OA+UnlJ=+W(N zv#~94mgn5slqqDn=WoWh{_VAWf(5|eNB(-*&$2~FPF(S4eaqt~zx{Ka_b=b#X1)Ah z@U}0@9K3>^VtSNwa|I7lt6BFI_&0b=0xrGJ(KlP#=H{QPgV#O;0;|GUN{Ba+454Lh zcgMpb=uWfSYn|UQtdD#}WpzBfKHBhdLSk1mYP{CVeDz1T0=Bg@4F|w{Wo2cnB582g zyF$*DO(aB)~h+wmP^xJcH4A>vrEltFiP# zQi`??Xn1ZY(s1q``J@@cdG>7n&d#r#+v}!{0iMIPM$$ncAth8*RoaA2AE=dW0>PGr z4dHE{Cs@N42S(%a5&Kl^XARH%|M1#WMq~Ba=dSoRuHcd ztO4b9>(E^Y4*%xI2m;b$^U?$*6MU1JZeE_tFrK-t60j7Q9=5~a8k9B_Mq87_=A1^Y z<|)CD3kP|W10sk2O5PHcifKJPPc5>rXK}cPmO^INgv89gh_w9USGS)5TiJcf;?}LF zD#%4##P(8>AjtR4J;$q(u~=-)el-*TDG7pLXx&NCLSk0$p9`XmrjCxi^GOiw=o&IL zLabmOXvR<<{uJ#=leLhMsX!HqCWv4V*yMBtI)@!0zyKC5Khi{>A?I!`Pj>zAxr-u3 zTu>iq&T49EGHbTABH>{cM*a)=Em84zQPEtIm~8cI6lhZ6lCmz#&2=1{%&iQc6blLp z7E@4A=%N)uYUrKe8!lY?@5;%(Js({zWo%504*wuUZpC2!V;Pbof57^ zCEwq`}T@;^@9qw^Vcrx@F?ZxsQ6Qh!F?|LXw^%Xb9-+e zLFeqrApQ;Rs>p79gb^_D*ZTV7BN4HOGk!XQAgSEkbt%~Nz?bykiR;UI>5RP%v%NpT zP5k|fMx2M^X)Z|xjc|w0_x!%;UJvZQu|7R3ewdNBx+>}#-Zby!syF!F$JqORyyuaYV&6Hc57G-Pg5 zqELl>5T-8iK*0bs+ZdBDNzg`f15&B6-PTsyLu#Svr3BUReWK4W&QzR4+oY1@HO`zm z1@-Xos2S0rNxgzVMDZQIK0Z3D6GKB+Tm38)E!L+ChyGyM*Mh%?oE*RZ`KJ{eNaaaQ z5_H3Ws zaD7|xK4S+KmD#vLd1X~N@c3fCCR;>)SetVq?yEpo2odwW&t;vvd*Aj$6)u0clp8>2 zXoChIgH=XcR%3U(Ug9+=5s?y)@_(IDiO}Ds;ve{FKXB=*Hv+&1=kfe%fp@E^a`zfV zR2E|ur``(ECu?EsOtRVRFW6E;!V9$XtIkAG&+t%Hm9hP=9|eq}0{}`=JEoK!x<<@^ z>NA3(ub{FNF7Wb}ue2Net+5h_>>joHe}>3NodhK^A$DLi7QYN!R;Lt3svwqfuV}J~ zEA1rC^}tGjkyr$idaiL9`rGej9{Oc0!wOzRd+wc~PM{0e&VRuJ5X+siA31kuQww(p zw|#g2=4?*}`O;FucBpwQkGvTgC1f%oBx5tZFal-G9_?pO{SWtps@=#kJyR3FW@$gm z=6^#+fPsA+#SRw0yYBEyR>+lZa>Td$eqZi(ouiM#_qV6JYZICCIT56ismF5oNL`ak zXZ8aKLN}V9^U&ebov^K43(+xPPN*LaBL|By1sk_i*@v}RQf*&l@cycn=m;8$Ew1sf$1g^74}!_)zcrz3 z*T^L*Eo}rv+gkCes^#@&sfrn8CzhN)!>@3MQ|woGXX2Fq&X+$mwd_-(N}{A}n@X=l zo}MBr=_W~_XZ5(@41U?_z>e#Y&!1lt5HJo8Zyhd1h;P!yRa;kLoRGX=$i6vz(*Ji% z0(8h&WBA__t9)VQxLlx9h_Mjk4SgRdv$-;PwbflXL5DwLH7hif&2`~1MFG2dlPgrk zEGIrIm%r_Ga)IMql#?_4Dqh>I8=0^%(1`!bZ1tIA{})Bs(6B*d&czzy>#u!Q>Rf!s zE9a$2Fc1mP^v|1(5dAS^S=AH%+e%;%Yd-3yB+YarXcHQcgHw%L*LM6}qsgpdaSG1X zI9|$VtPJ7~LRHMot5asSw)@BGC5y@@Kf0s;aW5VRUDX;{G-PaDjQaA}*Aox47d zzBtm(`aUm-YTWgqGQ$K@?|ia7>lyEQBjTQik=U> zDg#=$JSX1Uk+0yfj|BMDM{6SCW{vB!*UC+?*HtIsL&X4srpN2vrGGx~u3tnT!mVmfwXP zllLC%pAZi6)G*9WURFvNQ=cp^Q1BWpKFuwiF`o4sq+CdRgzE2_sxO?Nn<9ZbL$?;o z)kmKXvmBIiQ|;RhvA(F_ZTcmxQq26b#X-n+fAh1bYOiTnbW9A8piA2Hi0|!8h|=IX za>Um#n**}*?U)Vs+YBXD)sEItEAZT*H_}k)GRTS(+bcy+DaQqMx-7i=#|$FS7Tbo@ zuehSM`gzjug>}|SAwAh<@GTi$)*o|IItH8_66a|~0`h`86jB?$#N=A5*>Xqq7N zI?@ovqv3|Rg4aeztnk4Hs@}$($m)-q3?Y@?f>$GplFw z;m9^CS9j~0qLK&+Dpl?R7TnxDu%=rTK0a=7GUc8^^n{FBFRV-L8Tf{!9i37M(~i$F zJ5Z4~U8-D2b&Wk-Qzey}>x5-5V}d~sY7XI~|H2m;64p+g6p~uCOxTmG-0mIRR`@}c zS05rIq|3o`Z)?Z9(~BipYn7ok31z=HJn%O690R#>^kAi;!3uIXsA~Rt47OdFQ@Ka6 z4$c&+52BeDBZ`n}E*r{sSCl$Ri6Kq_-D;F~*}rr#GWLA^5Iq}zSvL4)38D>q;9@^) zuC=(){=&?%Xnm_F>03QlGV}dA?n-myh9$vTB}nX! zV{=Afm&KJC+VoXL3yUl^a*f_tZ^ySkf&%Mk)atu-1THkl$VGSj zOPdJmVBP$dbxO4)baxG-k3O5WtOs)b$TX>Aa=WlF&&diK$L5?u1_GYSe0qtW9}ku> z)?&LCV_yGMa4~|NO8wC)4w^>^VipoPMRZUrb)QW)pbl*6fPue_nlXL%c&(wnXh+-& zznnE|`tHLd;%t>~k1#>WBX{tj+LtninP*$-i@cV56gA2^ z^;5cNGo!Ycv6hhrUPq{^SSN`k>Qyx97Ts7}M#E4uvx{#%vcwxe*eWwEQe@fw@H*h~ z*`Ip#s?*UMuNJg~_<8q@;fbgP-N5IDk(qBh9-4%P-fDndkzCvZ2DN(2|Z88#bYTxu%&b3!#ECy4*-$HzxS1q5!w!c~n| zeNF)>;1^Av)WOKQQ4w0G{-lBjr!XZ-msj-;u^^e>fL^ytl!QI z{FrqgZU}O$_MYs{-;@nmdA~=QlPlOJA1u$84Z}Np0yGelEAy9SYt)>9yA=kBn1Ag! zYu%i;G~DChg?>r<+jHM9L*cOAAfALR3MXWDjwsNVhWMv?yaS&oZ9cKFm^UAcAg_@wN-WD(ZsQ&a zD9ngHK*=?hQO z7Y6_6he)FTc6wb|%`s3HXw$biScKQ>l~l374yj!7-|zMQ`FqoPK?j6# zd}i@GZgf2b;|I7cfvfM$aighT5uVm^13;Z~cHvv@U{N$}2K|RYM*WS0y^X(N!#SA+ z(^&}TUYoM#pMTv=kt!1Z{%1NQB=485T`aOsO6=YTy)$Qmsyy2@;P+~arR>g-2b0`Q zH>MYZ<{7BTkS(l9r0?3squNsMlP7`V=T@Dww570%hzO_T4=i|2w5hO@LzCWap5o%S zdNWCi(-9-Gld9+k_pK(Ig7j=^R?G&jG;>8%^eho7X9ztwSaDA>kXa87pg)2gSc*07 ziL26_<_Xm^N?mX}HOI3a-Ty2*7M6%?6An4dqA!K>k&KQp;Gam#~Poc28#QowsBV@aEkLZk`&N zyC}&@6rSbKiWdF2sMFHT&@>aF;k+y@KH@P9d<=*?OMnwBz1^6MDs1xd;*qZ+7WdhgCb=tOp2K9S-3IOu z`!cPv7Ke#=P7MrvUxvIi0f8Eo>46N}rGJ*A8Mxb6 z8B66>F}A41B--I{caR>S*p=#XcB1=+>?((ioLB6e@h;@u(yqr^sw zA$8*p_B=V%dQ7U(m$82QNTA$k+WU}R5R?LIVQM?{{|_!N&|Yp^4Z>kBP_qRmz7coX z|H5TqVe==P*be-2A_zNkiVz37J6Mn1PILF|%Z%?)uNXiR#U>>WxH=xWH3Lvf7_W*y z*?RC=NRb{Ts4P?bg=QS=z42EIxx&mVlpn~A{_zK>?}oQ%P1gC`Mu9xvm{&DmVnoQQ z5S(;P{JZx~K(eG=>8NapQ%G3zUq2k~clc1j`rW34t~QSZS*|LdIHINt>SmTrfv*J7 zx9$h&4CXiX9sOnxR;2Gkkp16RJyRofxwhVC`o#!->KbSt4qM$7q4uLQxFqc{WLSt0 zbR6)u7aLbZ79Ku&r<-^UXQUmG>YM|jHLu>xAb_Pwt01UVYHI4k4NyJ8`qo9DsRB!< zC-glMQa^KA-OawnZ{92Rf~sN2Ha#UPD+^94%Ok@gG)Wk9oeFyg7%WV6*`2W28^U&4 z6?=qvJ$SL`EquHf5gmZT;Z*qi`1V?^!uM=vv)VbL4tHI_9DrMWb||KUYP24ZdME!e&85~d#+vj z#^@$+W%>xXc_V%+dHBu1*Gg*}^Y(E3&Q2h!#xx)!!y{iv?9C?T{wL?taF#atT&6_W%CFY4^NDZa{fD zIy{R*Kt_9WRQ4GnQ6O>%$deSk@Jv?Hj#Z^zA87)plY?nIsFq^B& z>?_S%v|h82;_T&7JAkX)ei5rr0x>o!Lop)HK75m%Q_|WD^pg#Nb|raF#_x7@fyP9` zw8S|TJb{5~3sbfC@$m_!lTu8YYC^U(f-&u~pu5KeNIoULNi7AkV;DX1vUNk?6F{)N z?-e3>-K0gUsdS4z#)@|R=6cEN&tAB-ZJ=2InwuBk(M(b)1u2(!c}WE!iXf14?VZ>i zt8~FDc-sOy5`Uf!1E9(jb0Y(?_l;dyX&?EUG>mZb;^9Ow#0UwkxYDfRyYxIfTg9~H z#FqJN^z6_i4B#wKCPe+Aw>KUwJLfi5c0AbU>k*wn3?kz{iC{F>D%AC>a!+dIT~O$N zllE85!a%GAr*;QX2lL9KIYr9~+6@=Ti+)KWMtr2QWCo9#-k6QaGa<)5xTh6w2#Pg> zc7oC$Oh1qZ!N0PqvJML5;3FPi^N)swbQ%s0r>&bV(Yo926+OrW0xJIdGj7L|*DY*q zo8ovm%t4g~I7cYRSfd+!Oa<~>HoHx;Oh`$jO~7K3RfmKhdKUlq@nhrDw{XyOL)}3!o8$a`o8U9(F&8jrhFm1g z+PBKP+dEcd=es%vjODQwH4B964}f~DTKA4dR+6NBlNoBbhMtv{RpV(*i#m0#+I4mC zd>;5sLkHE&^ePMDDm5=p4_+;@Fx_x*Yn;JYU@`n{@uqa^YO^v+W1YdnV<)TJhH@5h zvhbPTSmiTt*>doim*??e^3Ivy&NoI&_^~$RUR2@xqldvO2l1dMZAET(p1;Qvw4|C2 zTUTl!2>aBF=}L?9{!(8Zpwq~JbEi=y+H@1HZj=~ zp&1_^Po{2Wkgy>xP;98kuZQ@Xc6LpHnqB7QeLrLF{|`A^;+r?Xu_`RKIvg`=F!Rwt zA)oBC#_dxPcJOyTkZT0z8~8!-CdRD%5(mtO>uh?g+lh?svG#V6ht|)E9Q$-VlRXqA zS65flH^zT&1zG9Ln?o@Bs~*8b9;%#haS=J5%-;W`MVr&I7uIh0D;BuzT~6`*+uCtx zvr`(pDrW_ajF2D!Pr=lb;rK&UP!!-0$ONI1O77w;5GC3puGhd8B(2Ukxcb?m{srGn_G140s;{M|s9&3SzA3lv# z;qlkc6UYN)+a$UVeX`LA)&1lyD%*9+aD~8pyR|f#kxwU71Mw8y;7xX3Wna0;!)>tf z7m`ps=X5*j_rZRFXA-#8!P!Te+U=!f5$N+>$M*GDu^YPCOn82J+B19!xW2D-O0Df8 z3m}V|jEfsdT@`gXX&{^cCQ;HOr0|UW>@OzSXD?Vv-Edd%(5Za^V3USWp&=fL3ynhK zy1gj+T!qm=Yd8Qq*dUzweULy|=rU<(*U-nXg zS$&&sqd4^B_Dzg^{R0eLxTBY`NCH}Cx&PZVQ{K|l0rn3PniIOof+X-qm?ju&^wUr_ zuDg|CTARWgkPG|?$^3xz^zF>86i!K4v&pGb$Yu{{xxGlMy9MsKJ8guHb`C*B+|-dP zIuL@0(*+lwacH}*CBmSf`@h<4(!@>$G5p3s`kIQ03ih_HMexx%inYOYr!hzYSt6+_ z%Ph?19nMa;+@1$=Z`sZEv`dcRSJCl$_YNB5&GJGY^C*-S@CzFlAosKu_Vg92Jx9&7pT^PdJbKB3qepr!V#8?8 zqGL`)l-F?yOW`BGIRZMz1*CLUz9!O064W1U*e|Ml-G>b>`kYRfY<+ht@&-tE%B`#0 znmjhC)o4alm7Q-ycd8KZr;^rxYhQ)^g^T7qCdp>2^IZf2nU&1MT42Q{3HFj5YnyQ^njJSr@i9QSdk#SQ@aZqqsA zoEJEY9$zm?l!nWOVA);S&vA_lNb zQej3kr5=5A@~c;`NNMlR^LDtUP7u4EVHBOL&FsNO9GpsTweP{I?e5|S3yxh8=4{~5B)!WOX z;Q!_XM8iy)xYkg!@>SIILB4sJt)zB)V#!0RF)5%pp|=2Pgqt*GlNhwDl;l3r+1e^J z^oI*)8nx4phQrdH!ZLa)f}(!RGhloGT!(YJl-%D zb)!Djy@2iP1B_W-CP2Vu0b&oPn)}vMCtn{hfAb>|N(*%(-V}_(u@D!f#u-bIAPvM*)Ef)yDJV|b%*=uy@qwoQ&Vr2R*Cyz*Y+BNCz;(E{ z4!hNb#-eH`PAm{bzJg2m|9La8F5S1ijhBpEAcD(T>hO?)HW?pV~6ToFq zdOEbHYtWBK6A}HNGH2$2!DuLD)oC8Q&1BWLtyogms{^a!-vT61rkzaQvek(%u;0{fzSt}O!VGZjmoP+p(m z|Ay~K2sZChBpMvE`dZtX&PPZ-4kyGSe-bR1wup8lEj>dDaIIj}2W&6T$$GJNN zi60s(DY$u)N8b0jt(_gT*2}XeOZ_%1ez)yXK9z*UD%wXtlf;Ue4qHb@t)^lxVvQhs zw*&+PSR4*KVGYFt8M!=3AHmvaS2`OGrOHgpAt}GGT#!|zaPZ1x?d;pOl-^%<3B!1@ zsWm{moqO%d@ETzjy@rOYibCckUU@&tSxtK)?o%Y&;%>N+O{hbJHOSG6o4jz=70w0V zVSiDFK}dMh+q`4d`p7Jo5dV?x`WS?=+O6hDHu#O4?757y4@(F_@|G%FWy8r?6(Xm= z%qUT*CW8+SLi>JUzZ)i(keVZxVCtzbp|t6GY-qXpr@W<|T&PVWHUTMY^T8_ma~$ zXs`9#gAYFm&FW1DY_npwCH>6tqvATW?OHw|w*!T@^5gRlSv10Te9d82I&1vg;lqN= zKW7C;#`uq&R4d`2M3BY8ShS0p8-T)F^|Za<^#SY8iI0ns;Kz~sm%T2qIN1Ni?6?1w z)_2l|`)8@DpRhh)7WLP7Mu^MFnOWd9#l*yPL4s2w#r_6Fr(nmQq^T}FA>HJAE$vj= zt1bG>yhZm&5g0o)xh3FdIz}|rqT8513yKdRc4VBrsfTSDh12?+sYIP{Gt z`@uLEKRfUBFC#*%5B>x^caKlcb2fHUU|nFP)Ot_VAe3*^04ZZpVPP$A;%37M4jxyU zFL)k&mVh|_9^}#Ne<|Hz3GwLbzb@}OTGmD)K`E5ua z50A35vw5!11QGrYEiKn$o$fxsGB!r%VT&oS5??wOpD0dBibu}%v3sfcYy2Vg&-{nW&-}(VyAN<ZN4X=Gbl!;gzxovE$=wZipUlufk4xu#H z&2Y9>|D5B#DJUMuxqh_-6vR=FJqm@w#=%iLy7fd5pcwrlk{3N$#QDbtKEZiO2K$RH zns;ogN4MNZN^w3@p-z?bV;y$&XK^_q%zrW5J)--aoN~gqiX4z)66R&4K>e&N$j^oP z^CN-nv^rV_7V$RUfbZljz9H3KcBB=7iyX)L#VtK*dt9%&BY9#DQw6#j!goDAmSE-Ks&rjUCnm&)G7ER zrl^KVxH{C_a?6N1Qf?#0ZP|*E=irCj0gBk&@&baD2Z`ft?$2Moe3YdTVXql|z5*c% z21q&1y`k*kEQS;vA72a4VF|C6#POO)@ZQ5y0!Su0AuP1|mkAl>1Pyj7D&i z%&~tM!T+2KsL7R6ToT&iOX`~*Ie=Xw{q zf=u624%m3STLB*H?kYi62Q=yqteBQ8^gmHo0dLIpWfTE^qx6u9EVa@wYb;&eFFlTr zQgStF3(lxwMgMIj_nb#c1gkwpZEb2jhARqAZtM+bYp5fw=>0>i2CcbD+dwRSozikE4!*_J>a`SIa0aCUp&D zkpc}fN>dQ@U2ZKygDkD78o|5{zemg-tMW=K_hg)xC{58K;3Sbn$K~7$<#sEo9v6%vT#0u!aoHyCrp0#l7LHg~lVJjHm{~Q?uEzgf!pD*<- z(oL5|HWwS@dpc1%rBLs z5FQsOpm*e4tEEx{LuU*!D6~&suD*ukEvv zEk+v`w98RjE#x9TUeOu!I{*yWcnY}_irw7Lb+B4qryTqM(-=%62a5D|-1frvFaRu> z7KzDoa&ig*7`fV;tkrImISkCiV3@Sv;;OLZ`AeZtmoOR}uf!{7AY;Us* zZz}IO#y?ieypitN`#h^>M8SKix%^GzIN{N1J|GziNgElh)7Iyu69qwkuysR7Ecm4YuElkPCcUc&+{_UbU2utA!d@w1cc_xdZQ7f;}3#_#ggy}zDa_IeLk zL6wNZCPC5t<)tCeEd0;CT~L{fNv~tkcti5%WdneSzZk#)a5_j z7VF{dz3}txbs^zmOFsUbH|2+e<64GWtDC7l))fzu(iOciK;OpwXYP~W=}ilH7HGDW z;k^=aal|Xdw5e(E44UP#ctO7RgKqbM8rGXB-@f0f3@RFv4H{Wuk91fTf0*EcKVPEA zdXKt!cQE#%VpTwo3iLM#eBSModZ=Chnhn8N0i$d+(d3oMMi>ZCqZ{~&X2s3jcB7$V z_3pKxfRMNI{IxfTP;>USCKqLQKuwyh7ssf+JX00?AbQ*kCijIw_p0hus~5TZz* zBElRlWL^i&`=@x79^C_Op?^cencAP%VqOjyGN-wy9U|jczY@^F!$B_YiE#dU__^ag z*hxvV(!~G>(=!)hq*o@aRUq0Ek%$hX&&_6(Lv)5YsvLCoF2|^XIRPj)yMJlB*Cj1;85BA%tjL<>uzr8Ps6z zV{u06Bc|%XZY#|P)B!?91A<-#%1r=& z=TiyYxm&~Nj{f}l&gQ~y8JC1D*iew>y7Nu|bTYgYK2Xz?CaeV~?^XJ%ZOblavNlvu zLBRjjOq20#Inw+rSAe-eM(qe#3FVYpK>lmKsAw)}EteperGl`wIUExMMGE=QvM0L9 z5&}BbRe`VULk>J|!;dUS#l%$B?APDaWaF;+chCTO4#AG8gTM>0)20B$TLnqYHQ3eh z`VSYN*dV?1R^%E88pyz9SA(rJTZ}}1U5?6u$s7YpLC&e!62<K3-qrvEf@KJEd1oPSt0XF?8th6U9%j)MSNcw&8aXg(*b?D3KCKR|`?alg|W zKK1Ou{=8>1)Xvx3e3D*XUcuiZ9jGJKpm&!QVP97I+VFT{De}*j#8lV8=ll_@P61E5 zGxwDMor@h1h5?NF{+~hQ_}#1U?J?)x^a2izOXU}Tm7aM3L{dm8IT87Byg60>I_5lR zZ&L=-FPlCD1FZ1*_Jp_Cz`(#S?IpS4S=V)(Iuk*j0cI`7CEQ}CfK%5A*Y+)q&E9eE zFCRZXaVPxj2dXv+AnO4EzK|!SF8Ko}yuLZ(+~D!>M`6c5Js|aG0e@ZFju6}fQkk^Q zmDwU7L$SNFQ|i6qBInwF!zKl^r~UkJ)qnIWkUFh)rU$c@a?~0A0idJjze$CH66$D! z+zr68>CDj}vh8u16zOt8fvPAg`uS(duo%r8?Eh)Ha{qtTQvLs}A^ZP)8ax8f#tsV2 z-)+aWajaeXV0SC_2WOey zE6v9WuAO7XM+BHYk^9Zy#xFVxgxWuTdGbdv=biIii<2F@d(@zSGfQ?7zhytrOn*+v zxVv)KB6wv{APiZ#w|C6)+>nmeuTyy97d2U<4AM;HdbfUNcA&F|=muj%&p>bJJ=9&# ztesz(zZSmCdnT$m17c&O&cq0Z?Ghxou;9l5KP7(uyqq*qqa8Uo4;cL)T%Y4S4CyL4 z?lyZ4J^rhYsszzG@hX}s!i_!S0ciWI8=hkgmFGhk^QiQ6oD(*@fi$@@6cel0zm*lT zG1t{cg~i9B8XGeXH@}wJOqO5ye(Bhed!c(<{QbuY_>5cHdY~otj_iCYwzLuNN6GwZ zJ2CJPOuRF9;Sm{eV@*LZw^|y+|E_y-C3tH9An$%v zoSgF7>Q{or>kMyKdraC(H_MreiW1AeVT@((0#y$ZXdWTunR1iLr|xh-_Dcch!*{sS zb>J*wWx%HT85IlM6YI1eD>uj=u1;50IFI>yo~|cGDufelX0dzM9-8UVVL?^>j$U+q39Wvg@AzY5 zYe$Dip$-p7-bKU1a>qw-XydCdz7TKiPE5ZWlXLlgo&L4j!fH#R+I8&i)fZ>_Ni*jO z>fxw{7Xkh0n;G(j5z>(XaFG}irZh;e%DpeVzPS_=6F4fG%bd=bzAX(hBONE+wI+527D=%I};%!EabLv&IoO^a(9#-pxKj+ zZ9jxq18IC?SJ#(w-C6jOoFID=20C;#Uab%)P`Xj8E;NMBMmHY>zpu;&B)zbWjuI-l zHa?u;mNimlg=NNtStSs6^ifs5BzSE251pXkVEAW3%giICjlKaUQg3d>@b*II+;SUq zlQwp)H|LlQx!-P63_U(I-m&z+WS82!hNYH&?&?sE>*y;kSLGZ-XN86}abB|2+dFfJ zG4IKksb2wWcoz22Xr+mfU#5VCr0*m(XUNz{Lk^^MOss<&db5b77VT=1%7t!~bM9kh zyTNO#+P&sHoz@zl}^?dWIfT{?s+lO8__lBs3(`wwo;F-*%n&j^lJ!F1!ef#UPt8(h_Cxfy;iJT@aDm#?V0olD}Kii4cDPSDmD)4z0Tt6qO zA}pod2)5g>2-bQ*i3oemI=od;GbFkgC(RUJ4w9rc%^>0m9Dh8l9s`X`nuN6GICx0L;r(?*j`g*=tahKdcz6GwL)FHWJNG zb_cx|JbRajcaI!t3tTx^eQzm|uJrvX6l-sQ8kR4M(RzKU$VlTr-@)#dkWQca9>1hr zjV=FcrX`TB1Pz3ll#p%7-Mu|kTIZK9{UzrhX814JsKR8)blRdzHhDgQXa?p@x}rNq z=bVN)s}yq(Y_rF4sUJwh`fi9yN*YXs9z?>A|GMx!N*ir3ZaCKDgslu6bb;M9iL0@$ zhNDXk4_<#?N0c}QIVcc0?g?;I4O3>d0wdYukd#%J8z$B0BRpmz;gT z1KF{*gHY_LQzcOfp5s=o8f=ag*41F6c=v;iM=3e@_$!}o$M~0d{b=Gs+OPd{xoQ)$ z%ge>fcDMcKmLjiI!xClAD@;WuW#|hdPSXWJ7EWa&f^EG7>jc3m$m{Ix^$%h&%>bbL6vZ%bg!6D~9 zc#u~cCzmCVett@`98r#=922(SB)Ij_9TSWvry=t)! zYNoM3((n1_!drXBsfmeZz#>9%JL9$1N#eWQf%*Zh>iE{Il&14?l>AT}+r^exC~7x?N0RgEt+S>niOl-iq};8WuO-6RpX4?#$-Z zkaZTGWC4r778_(-d+)-*&Zl&PdFgF8InrbV=f4>sirMa9LljYKRqh7v~C1crJ>jF{HUX4{0l{LlJn+(|fWcvuc@bK{HmkYSkQss07&lh}w_Y3{_qgwKy*l;tT zJ1L~ol>!TSsRcHFD5P;r{hg+7{kOF4^71lZT0g*jfSzaP8741JhEzRh728~yvH;#_ zmU_1L*UxL8CagEmcoAoc$ds7z*_ z##pw!_9W_I?YPtR41}YfZRpcE3EKeE10>SVblkj$W!_PyCQcRB@}47VJ@$2SQwKJ+ zt{AIzE^+m%w^@;gvdh~!No)I=X3&n)^`JsbW)=RH>JL8NHD@5_zWl(+T0*xWy^N&c zxf4d#bz->=hxPg8xngt4boj_b>wC*GT|*sGz7v*I5k|34jR9Lt+8JCVku#5XC8oI< z`}#(km)WmKY;SJ91-yfBO2`ea7${A_OY&XwpxVjK=}X+j@3vyBwQsK5S z_io1|JYGv7r37<6$#2UDXUFe z53Bj-BnFx4+wZ~7L7I~33WGfj-d}I*g1reVyhC%DO&bmG-!BE<-}x50&9Ch72Fy_V z&{;cmjb%?jbt<(8dW2i z5?6OmWuiF|I5&kOQ_H?4v$dS0OD5 z#6G6&!%0>tAkGmE-OsD>oXQ*Zo5L7p-3OTOLj?8fP1Ht5`!uNmAx{6=Yznq_9javR z*6vqMiW!@|RlmA1`q{`#Hn-SWyJrB@el|!mOtdZ7VpK^s!a%rvMY{1wos*XYe_|o4 zf8yDxgw0h|=_#t$(Iby-3blGJCyAPBwZ~m*BH7(M^~i|(r-%&TO8{cg{8f?#vM zHJtL#!4JLyAe6!Jm&uRd-W>I}?l!UMH-&Jug=-lWTnh`YOi`dO z?Wvsa&gET3;1m_d`l{#RcE}U|!6Z(yAd3H{rtAND<(vPt_Wz$J`QNVi^MCG}wNn4L z5>B?>2$nL&k-u6VRKR;)l&geO%UE8v(n$ve2u?F#qo;FgvCwg#`6gslo$Ia*X)g!XNXW;;#KefMVTMQzyH zh81D`yGy#3jaxV`ndxyJh?jFWzVsZJm3guqtu|4uNoTONYk(2Vuq`Sq1}zvjCS@<1aK*@z zThwvFC9V_{2~`;Uv0Ar?u8}Z4r<*eBff8iJ{lr^A^IL{=8?5PGrs7!ncpcPz#M>M^ zHZk*S_@D0#slH*Sesm1EY%XgvhlY&QFpHI3*B~;+H>;1aaz+;d$il?QWn_lIcv7lA z^eEE8g4};*cZ&}9jRx)Ud0{6xIv!M%8s77qRIMUn%rL3$Q%m%|RKh)(3Lmz*#ut3e z5vg%GYUM@Z5hf2zP`@nW^7dAE3*k`gc{f`Wt381Qsg?9)CjfAYXPABD%lBt9bSUob z?D5#?w#>5eIs=P@1gJ=9&6UQe#R47JtfjA&CFprNa{qOLOYi)c!aF439(woT(*F*E zzwL^g}agn*rtpqr6rm= znxkViIa*O*=3cIVUJ8Gh`{@Y{adT`e zd}|L(O9Igomk}-M`D4PLEu&_(8RO9sqs^NzO7^$bzm4&0r=-m5+T?Q?qrWUccA}Pi zX=%}2rkAgU%{OGYxx4q4Z*l0UaM07YK8F)14ZLKTlj-H>v5k(EHM!dIx5X;`#lXM6>flK7A2^Bx!m6`uTD8``ea@ z7U!GbeG&5y>#tki<8>65(v)Kr{6j?;BY;<}FqC*gB4aVgW(T_*e6>tGj@F`i^26m++f8_JQ!AeKD>}_rRD`VHy3m1ybBl?Om za_Yk8J@w$C77w78S0{&@Ai|jk(dis)8K5IH{8tm#8IBhL++bFhZwH%Gw*1ZI$KU3dxC2h=NmXk3ceiSN=So8?BF#|*WD>4`*qr}qDYd#^j__^u z1&YMIXZLy7;+*BK`XeJ+%FTu>1dW5=IMIv5joPbxOl?(vEHASwPssIO`WGxu=|Ps= zC(k_6M$64bq_;4xFOYLFuk(Lf-ja>(wL6_g(>2p(ieY@pf;3k3J4rGoMbl_Vir3Ky zVE|`vuWQR4_14K-O~RqIl({EijSDNpI7P5mwkT9Eo|J2K(cAt-&>l!e0z^A2JRNoM z{B4!vHM&Tn1HStGwO$u~O~7YnihBYzY56xQ1Wb(hX_3m!_#^9B&9l#IpH#!G(&+S7 zYVmwfOjw&jMFsX!^N7Pa-Cr+Do+Vf^#ifT68?yMDn`490P=H?{0Dq+!#`*MzBYC*q z*&U-Qe)8nIL5qk&C}YDf6hY^U%(7!7@+pb;1F~QG(v7y9x4JMtO>ZI5M0BXyS%!pS zxB1z~XxR;vFK4yzC{(Eap=ihNJ@UOHa6*qfE7_*V&$i=LN8;>d&4UB%L_RblObomm z89@mK*^qgkJURN6K1PgCFPIE({Jc^|8mP)oNhMW;-CNJ_yPxu%4wlemiNa?F0QXMO zIM3!(Vl1BSXt=sxiHaN82Nj!S8|Pm_OW&CgOu%d~gT8mau*Rc6P?&u_>luk>J^YX| z;=?T!5sF_NO@|>wHjH)Ol79WDCV2K~dwV-kVA~(#o4=G*+K-41!4wG#;+>-XTdwNN ziF)>C@QKMalf$d=enSL8edbTZ9Iu-*OnS}?Qs_C$42EdS#@AdPZL@5 zV7V^KLtpwUEQ_=FiIJjX&fYMk#~|1?eCWDy$~tN0FLgN~e+1uCMyxyXTytkz##!{4 zKOXDhW-s_&@P20iu2Iq%VJ?gRxka?7lAAg4rv5%*Tvm+W$Do}q#Y&z*&EWBT$R%4r zS~;FsY8^X5E$s~44Ss0-`xiUS_wDZ;9d+M*H~b1*9Xd8TS^{0}R&}w8E-Zw76bkiW zV5P3)W@V0r4;a&@yIWjxO3|O{_L%%NbnZ);0I^7uv!3txCr{Sdj49qhUuvPwjMRO-lt4&%H8kVXw=Yt^8WT?@Qe|QOX`Mn=gd5> z9J(l1ZfFz5IF<;NyW}WgV>@D;@OAl%uQal+y55wkBnPdwB7KbbABqTWd zFkRc$tXXH|>IiGUW!jY-{5-ZA3&CU2DaJp2j~4rKRY-MT1nHQmOX|`>7wxvClgY6n z=@(+LeRV&Ymy^f2mIWUb@fss`c!IS%c!MGl8gEmFj1sJ?Crc94PZu~_;>x@k@CJ{p zd#AW3W@AKGu!U#v)^1d|GFhk3_UHj=zOimfq|{?N3vm(s6pgJY6En!W$?(s z@S&}8n~zLzd~Q;=xqK*gU#AM`_Yuy^^xBBkz^Lhs*3n~p7>B_#PMNmzJ8}hub#}MQ zGlF9FqU;V6JMmqul{S8IHUi*S8Xdw-Y^;U)0Abaq^N6daz!kgSkp)~zo8siWH?=9- z+TH#Ier(x_G_*DG0EIp)3t>t~Z^nKoSuoLpVqvgT-h+W_*n;NMJeFj6s`DRl*^cX< zSl8QBVV7$cdzk9S1CDK*gbfQDC%vj-W6i<}joLiJTXT)o_Jot-(p-Ai+xN#3?Zb^-_zrF;^?`rA=?2{C{9^7bDCEB*}j@Q#mfKrCXshMz`Krgpv=;CObPL11eCqE}*> zP>PF7h^qh{^^BzsK0o7XlZN~w?qeq=V`ZcrBrl> z11`%5&G>M2(x7yT*kQuEuN#7+q=rvCyy3u`Y12~UEWqVG<%jW5y()Hjo0f6vV=`gp zV`MLALRv1BVSSiq77-Z?&y>4c=}m<|L+_n;?wMF@Jl?lzl>TQ%cgb@M0JYiQ!qji) zjKqYSmo%hw&)h&NCY~lO6NgEW!v+k!TL*6GTgUro(p9&Sw;-B>eopXB+#A&Do1MK~ zt?_Vu`>Dmg#Ex*WR3u%QO|sgh&5MwDB^o`7UU?IO&S`vI|Dx)w<7+f8&Ssz0O#F+D z*DteJtX&girQxCC&gSe=*U{nQpTB`eR`7tXpD;JNSQ$qLmQya|T&tdpQJX2W)VNa> zPuWbdo96KEZfA9Y0?$*PO*}}+L=iG$=yfo}yajJFKKVIZNeQeB5Non46V}fO?=?p@ zliATD60lbhj1&}qt4gR47I09(f4&qtA$x?bMqjE6%LR^YwI*Rrr?WY$B~?zbb})w-`i7ZygNGqA`6d*uVC#vUuhDyE~!G3I@LF?(#~#nTjIgUFIER7_uHFCM+8_ zJ^22=yLe*@;TkT|V+lU4$;`?IPQNQ`eQ|9_w@;V_@;O^PVIJP5(1@c8`24+G2V@%e z?0nY0aR21Kv1~XzlB9fen@7IC8;KE78*aKvp-^ZA*Xlm3T~{6?iz!*mXX$0`vai%= zHV~H}U%I)XeZ}oGzk666SmZEQYUp}V@V`V_F=-VrAhHVGIcgX}mjh zy>q8VrY{1$dW%2-SFEd(TOY$svQL!zmfHITA>o0ZWU7vmBiqT#@H)*X0?RNlm6aTFVaUoC`;=anKzhhq{>@=mYgi} za(nVO@sh3VW4q_lXYyk%!Gg(i$m{$_JT}L@O4S*)r28Dqv5^`Be!r)?1Gc={z8#9Q zAwzE}h)YFabHG6U(2`mB#R2ZMq8*DHKL6>f?>z%%ScIenYTY4QKi9@^3LLIHO6eR) zV+8Wmg5V%dO(cl1($p7c*Q$rh%E-w%P=?)y(XefIR-tMr?z<2u=4ZSQMkV^~)^;!5 zLXulaR5U4i#_Aj`*X)go8*PaBESa4dcXW#`{#hN}=EB38O?Mr{Z^NTwgFE8F3U5Ud z9GWKQ-H*=Ib(1pVBbFQX0wt-seu(+HmY+h;B}t-UwRESy#Xnup;|?|m_JRZuM>ITl zr-9QdU!tqJf1p+=)EYpjceUPaJv@=o@ZUCljHjC{vkksEH?;K+PjksHc)zOOD;hLt z$ah7Ka%$vP?RW_Ftur5yx(lYIPpvH0kUE^DQMgk-_UP(<^;X?E2*yWjOrKysa@U2YFsZa5ID&$MtqIXS7aURKFBhkF>uPX6(SyEeo? zLQhh9fRaP@8ts!l%Rp?~8#b$LZ*xD+h;h{^aw#2M^{zL;H{uw^Q#T4fe*9ukk!DFY zv*;~3#8gQrukrrquUl#NOY@zu`u$EQ!`6ji;PUhPiuC)JHl=IFpYs_%Wo1>=mI}rH zd{=QVCJqetn?lcxs|E`&jUy-fOiQO6y0JAMZHYcKQ5w$n$%<`u?cIJCF(z z#x-&hKpE?mjjputV71XtIX|va>$hcw_s6<<4V-kZTzco`ltCR;Y1ywa zrXLM&ZUu1<%i5!5kIM&*(KrVSyOZDpzek zW#RfGwks071^A{&`+k-644KUQO;1-5^3BC9q``iC`!KU# zM8Nss^I$LqHD}3W0TlSM?S18`LF~iH3N2I5L%R&a7Qq(>;e7hVA5kIYhH~m&OVc&n zM|apwd9;d@jJx#J)tPHQjz5AFU=)T?~ z)^jv8BHG=NK@KtQ4OijwJ`iec6I%T{jWR}SR%N_u`hu8vb>i5h^Hh!~#BlKHXpH)< z_JIJ6jO)4W!XgB6d|WVg*@kKS{(b1>OQl<}C{{8&w zJzQ|5$1#W0xa)a`^(UE^+AZ&2F)=fLN>2}4^uFl+dA#|jRH?fkrTq&#D=TKlLn{Ub z2CMxGj?3%R8XeA#o)%v(ILKEL(xY?U<+ZTusLJ=}P8ox6of8F0$EP>kg?bGv(y=c> zlgfl0E|-KQ_ZH!-t*z0B1)h~Hwmm0*Y?#w#)G7|Q6MLAgJEZelXvFIg*+x&556$vh z4lOM$*v8)&`3MUEo_*Lj!bszG><$^y!W(jvCh6+*6Q=MS@+;*Qq}AH-6cdA!S5TlF zJF3HRb@!aS(9^64-Xj@ajv*G_^PQ|M5B)NEtKH<6&|j@IZUj7>-=%ntOH(`oBqgOI zZB!{s@uR?n8&qqWh#sNzlWiUTg@Td9*56R9`<0TDOdX$3XW= zAL4Ma#}9d({97#2e6iWBYi8Leiqm2Qs*eF-&@2sacFlT~z-^_?n53g8>TP3ox~H{b zq>o>uxcgVZ#MCC*)*Hj*7;1z!M(+!&Sx}Gt_2*!ZQXso2 z`(t=Wt;MgedHMMKTO9n^KZQotdW@Y>R+p?b1^Y7<0fN& z|NhzU|hZC`L38{*ey(1{a2mlOO{f*Fsz%kD!G za~d_n%}c5a($|NEl#l?h0-iv0>uidg`PsSLKSW33F}|jX?;I-+EW8C#K`yV>;vA1h zg_gzL#f)7aVf2JW*5bD^Ia<*^@8VuP_vfVE2vfznxp`Rxz&3}t>?Dc}NETnd6z-o}V>E3KLQyhU9M@Iauycq%d&zdH> z=EA)bG>}NXP;G8yv)hI5wQju4k$bZ*YG;F#KokAOW{*Dl1v`rG%~?=lBA(mcLWo|2 z-FkXO!4n9BR{6*LAx#Q)cH}p)Bq71UPji*}ArK+qIl8H>?d^cmEu166$3V-8esndF ztZz;o#qw7+LZ+rlCW8cOj=S-xT5_Fqg3b0`ud|w*qW7HZ`ga#5#PqA$T8)`S0pl0G< z`&Q2EAH)@NIa!8BX_ceUA=f6iNPmC-)p~;wJFO3y zqNEhH=`!48v3YPjb(qQcv&|OV-;W}9*X||1R|iEOR}w0#3bm_pv$chU7LK>biP;Zt zudmD|-a`Tk3J^uIgj9A~%*2Oav1_8c9kaf&Hl0Lo&U&QzZ~l`CTHl0W%&?9sk67oHOA zA53I4=^l{yl9X@pZtarUn<8F@%}LoPW4ATa1GU3$j0%&cGVM_7}D>T7jri~eSeU-i?u>XoO*$o6!iUeAr2$f765PNY_{DWoGnOEe3NwjoFA_Tdy-HVe7m>p{_W| z@?acEN2w-0?c%lBpV$8MU_pITyLUskrDXrS@(}#y$Iu8ts{t5^6|bQO8_W1zoc4E*5CM0RI}UF4y+>oYquv{iI_?S^MhbJsxnuf&2MK zF4ijFk0Vw=?7uhXjte3Tq9Kin_aO&j`(u^u(B+A7jpHHIbP$Mc#kLF3)`e=|6bYaByg7;JjC_@o|L`1=ZYgx)*tR zswBx(JC~l0t~aq{#_`;XN_CuUnG|p)sny|R{9r+e9hQ1e)q1?9;;2J`PVOb ztc5NDW`hiLP4^FpQvTcPi8Ka~qir_<9>t}YkN4enm)k_!A2GXIa&?8}#>}W;#z|#f z;{SjHIkJm;tzKfKF}>QFWav45-aWM~d57bQ!>hR5f1e(AbY&<2=`5~?w`x}-J*+K9 z+^Rq9d^>n(53?PtvE7nipIQECEw@4JkKuw046aI^g_?~^{qyc66^+3^ZzQQq|9cfB z^a^4Q3LyNe@4QJcvSdgA>E9pmSXp2G^A;N`;a`tOg~h(}PYKokeMRwabr4@mO4_%( z?oNNu7j@ZIZi6bw$@P>Qw6Ix@Qh?xomyi?-E50$s1^mB#b9q?daktX-l!VU#;(L2x zo(pE!9v(K)FPp(G&Onx)p3ayA8?W33IN10x5U}Vs1~6)suk1_|RMyr?mS~oZR+>oU zb08xlM{-P0Pg{CUgyw|?+WQu930pUc8jWC z_?`cvu^6@@v9hwB9V`+nDk_G@#Ap=Lg8DdeQRxE3jOWNd(={Aja0#sLsyL z3$31NDk8kR1fYqagoFu38)gti+IoBkG4r6hi3ue(Ha10~tV)NUFC-u&1U^&9GpNR5 zqP=xDJ?A$^x#{5J{$zx zJvt_4bz|dW6agz0Cnt_Zv3ggX^~}n~#5i#vBU_LtHfRArj zl2KXo?)r(P8WMlLo2{|HL_tMe-QEVF_-?LBo;07wQFg9;oz;}Ft!>QiOhr#u7aTo3 zz2$s;S)gt%;bYcIDlhM2L0}^4-vI(Lv9gN%@&z}4v#6-3vc4W6)5y*e6bZT?&?Po` zUzV>OuMfmIK0f$9d-g0_r{;ZSU7eJl-_IJk*x1-cw|ydDnFz$h#M-*Lk<&b2S+c=w zt@^!<4VspgR&Rel6+b^=YHI4$<+8uy&iJcZn?I^5-$6TI(xp^Yu{k(695x5>UeeGo zK#TO7IKcEcoI^FMO^u0}*;6AUqrE>hh#n8OMuCBW z;jyv(*QZ-1wzlY?laf+W^!q~#3nb^eGXwkc4JH;AmxJ@NU?Gu5=qE?*fZbsU5+5JW z#=#L(QDLtW251#~I736=VC`eTTrM;^KIOGvVmj^_1gp<Xn_H z2qJE)FRpx`Flhx=2YXSi{pY*?X3qG(>n8DkZ@)O`K|)}Xp6LrEYX>BRgAlldjgx8^ zw+Q&|co_(Ag)fK+yM9eR>+csTP$hf2;nbd(e?m*kOWx#pZBB{++x@Nk7JlL4{Zbeb zKw}7fOOVLOk&34Cr|HvAK4w^Sa|R=j2JwcC-}TlQZor(=hI`ZS&I@sM~F95`1w*f_=w6dO@hYfq^x} zMWspQhmskrvuL4*WrLWo>u~W;LIOd_4`mNelk2X3 z6@2L5hjApeoUjp-l}pM9UP$5F$OxDIeVh%E#lz!7HHy6q5$)CV>U3(nm>D#Ro`{Mr&o~)X3~8gpOpNY(8r+0|9R(qQ z#f$mpIOmbegyzOqzKGVV4$2W$W!uqA}7QHBVXr#C9 z-&t5Nk`Z+59iQ!Vu-nWcd3bnqO-vAz`{G8T60ksP>f4qco^q=P2Z3V229WB=8%^0=HQfr zqhsGf(<$!eh70fU8a%5izD%n7uy3MXUDrtrC6!^lz>R(-my}ysSvh$-%EcSSxxr^Y-;Cbo zeIBZ3?S6IJFwn5<7X~8ld=AIsV~+-V(Z)KrHx-$_mHv-#F~`U;SO|ROuq~tKTa=-i zQ=*&#>7MaiX_3hVMKU!zyUNbt&-H=GbIb$L&J#RFEE3#j^IrAg(L$kwobTzT$pw5~ z;Ls{at2$xdob8}v#_?R)bid0meZgzT1lSI|xPchr5^eXtzX;Jt1<ZbUao)rM)@8Ync!$OEZE_C(EJQ-C&KUkX7!?M{sp&H?RdIE)f|J%qqr%b z?~OfR3`syBhJ?Hm*x3n@lqTz0>5};L@X|o#U~GM0_GeH$74H}ZMP@@383BCN#Xl|(%LFCR%3xwzT6n0Byx>ArZN`PU&3e5ucSB6 zef@5McDBlyU~iw4?cEQG$;$F$p+EZh6Cx~z^2#^upIL0V!6+|RJvCCu2tA9IM|;5s zAtTGYT8~pm;n+l#N(GI}XL1oT>(#!F`$X25>VcExcSD#P8J*b9PPEoY142PeR@QI4 zva5Lm0g~rBYzCVf8`*NncCtev4<20o(bq2^M`t@~Oopw`(TTV^5ub{@9>B7EmYQ{{35o?vbx3@Q>vrr{RyXHOf$?2(_KD5!} zCkLQyOy_3Qu*UNSYWDZ`*sP~*nDpvNq5z|*`~nBDWzTippnz6ab9WPEddbwE~dDQ5ldZcR|Tkcr=+KwOqc4&4v~-;wyTsW z=R6_evV=ei4NC9e_)N%u z9T6fXCYHi&&4Z2o8@2dx;g7{;C_1@L?l1otLmKN)tACHt$B!Sk*sti5(203)dqUBf zRg}g+9>nWxJGQZrk3_@=7sQ2pK37N#Dd~)#c_FXnW^yDDArnW3qK{U#1q|W?N;1Iw zj(P&Mt4v=71q<{Hw{fR&J4*?Q8u9Tu^300VvTyLs&(E)exO2A2nYR4llHBgqtM$Lb z>9VfdoSNchlkVjp4xWzzel(MzupQlJb=`_KafQ+fA$OC$;YL+y z?+v-%m0>|6mkQqJPd6P|yab<3dB3o+v$LpHn9LO)K7{mAaG9U)v;Bt_Kw4w-$rAw+ zu-5sUuGj?JY~o-LKrWf3P&GeNl|TPNxT9BN+b^V#M(BM`e++R{K!8QEu3@_m@~*#b zoKzG(eMTMgzQ{+8UcQk`(pV$EYj~Dn{n083M3>z;JRBN%Nkzq2RelXK^THQ$lNCMs zv|y>=bWBK9yqa()D%5|tN>BB;8@`whUHXWROSg>Q0fK2rb|WrEz}kDb^73K$spVhie}*xOwYBM{>+BYZV34V*>S*NM z$ND-xiGA{sTM5wK_Lxjx^;F4Bu6@Vlmv;C3NPwE=+yOs|jC{3zsnB^^VS-umrUrwX-Ih$X8JRq8f(;vGxhmx^~1h7%@e+^9U>p>vtJhlw3_d)Yk zosLVbo}7RQ^1I)(_!#Q<5sXxkd?OWg9DQcTixTM=;zWV}Fk}GY4COwf;2F>Tz`A~X zD5!0PKDI;NISD$Juw>V-R4oWGici0|vbl z@Vn%3WUmSj9L+@gcdk5qurH9CFSjuO$lZ$x@5}&6=j*L*dyH&*J@h(%$d$)0%ie*3 z^(fZ%-XgUEkT{C6ov+XHI=71ColHC1ULwWvrmi$um!2#%K`)xr`_L92kM(f5-@u1Q zfCv&jWqJ*8BdjJ&vWp&g7U9Pe-<>vPwQJm%KPP;4yt{Io{qtvavWO1=&UC$^U4l7H ziCE|0oBFG*<&qbiZcJZ^1w~tMYsKO7dxs_`aY5GUjg1Wx3JOZ4?YtYL^HZ0^6bn9(xTCFTI zBA;)t>$(2;j7gu5Jdr_Tnm(3rq9Yg}cNT;8Xi=W~qDF;=bUo`*y-VseZtKvp`FfLq z*bE0}_nr~aNBy;10cfq&6be9^!Ral;R2TceD-fG}_z-rab){r>3mwD0Czv`e)!&h++5Mx{*G737)94NPoGecq-vHSxb6Nej8U znwV|(72G4;t9tj-)Wge*AyJLju#eF6u9lsLr+<#ydbG@13r1B~PnY(!dAqY)9#P0= zJsA9Z5Kn*U)QlEuFy4_q@?PvO$2pn}WP>@AHD}N$j`mz0=~=e;ZM+qmQRzK^0nAv- z8wcIMlxxya0mQfj5v|)HJCf$xZ~N6U8a(;zu&Xc0r?tO3RoE2@+&;=;5w@X&AP4xq z2=Mgl6&*Z1f37#pgIQS0VRZR8^8^UJ4G}f*69)yJ0l;_GTyoLFl)_>Z6P>tA!AhsD zOUuq3A~j2=jW)BN;No?AcQ&EK=gNQq_PMZvf&$fU7;~qtE8o0bN5jq?C^c)TzD*MT zi`-xA_v$)Zu`!0TD1C7>$&&u|i=+w^UfldzmW+Zj0# z@L$?E{>F<4+BFpt7G9le<)416C4*Ex6lASJp(vL;2PvGiBqAbypJaWp$V4#V;o&3q zBmJGU&OA#r?X=r{;9Fb2h4T}tnP#aLvDVuzhSuB8i$NFhYb?STGc?rd+M=Qud2D9G zM`+~LzYGlz2PY@v78QMf1OP(ipXl1lD^IV1EYh~E^&14@?v80QUr!2A*47S(N5$`) znIUg)e@GGWMF6~o#)S&F=WOFKuS|aX_G}JLZftcQ-f~A@zRvE4qCVrjPGERu%7)GTo*`fy}kZzHF;fm;HI* zzk?bk5yiSPu>5aoO%24v0{i(3t(Kdk6Tka0A0!+3_w~L_z#BO|$sBI`GC7HDURP(N zmVSDA%I-Z)0y;5TZ!1`;*Pv*wSJ#)f^I~Gl1IS|r_WrDX@@fcChej!+Kd8@ZNdZO$ z_E1MjH^zUXbwFZXtyJxjD3_s~U=p|zSK@C=wy+Ri&C!wJlJZ@7Nt)W+-<(gL3@(br zP)r3!>omE!8+jw>+Sr+Y5X%6O3*VA@-LSH=*s?7bDP!7=%=Yg0Vjk=CV5tvY%riX6 z;VuAg%7pw(pfLrGsL^MKgU4in6b#rzfCx z#MLJqJv_Y=wX@>mWAozUXKTD^si-biKvqb*&MIblKRD~0u2sQYS@NAz-rK4ZZMC9RYknB zL#WN>pEGwMO&nSG#t1F7jsA<$vN9}E*C#l%@}0j3YhV*gjE^76ZZ<$cLqn94 zlXG={xy;QnGsyx0z2Sbi-Xhy5yPY>$bE2+7N%w)!*sg|4LRK5eemv`-e$ za8#y;WP7t!@Ph99{ee#rU;(?ZP#;!JywR#SwX@zt?7W;BNBZBLbd2;m9Py2j{D z=r?L<5y0&`crZ`Fi__X5Sbh?v?Rh@G2@JB7`CiD-Z#949!w<5G>Frehml;dh%}T z{W<`JR_pWCu8i%e7u=<#rOHiC=JIJ=Scn)T%FCHu!7vF8z-YiHU z&$mIl+!e}jm}Ek*6&Ms0%;tOJPLynIJ##@S2qKCElMm*|jEs!YsKj|{g53KJbPDXa zF=E4GgyA6|wq|=0{6swo zZ`{w-cB#q?kw!5M0vc4Wu#3s^yTi&PBYQPh%uGf(kix=lzuf*b%U=XJDQTpCZ9-|F zq^zW{veHqOeQ%*jZq%)ri0|lWN=gdF%a_k)>=)E^q__21MG9(%CB#nESH4ct+PONv zWfH%wqBDr)-u7t4v-r`JJ;HNC#@O6$ho3+6IFr`DrZMu$t0wh}D@1a0>Jw#frNgQ? z8X*S~ATN<89a79h z`|aLp{%ab7-uzAE7BDBPc`(Sfut6@!&(9INPj;NDsngI)?td|UfI6qB1-+@E%W-b= z5VcMZ6aQN@%3q|kAUwTTh1(v=cD1yCLy?kYzRua@daY|V0yY1&g4NNZObi-3?OmV`eNq(4?W z1MjVX=_b3LLmRy>S@!laUm0E=Fm$Aj@n)_K=GxZ{ca4wdD?pyVcpiYcL>^Eh+?)pp zr$U34`nkq)+YTV?dim;A_fMEM1&|nr9xnX-wS6{bYB&)QZzFkA8$Kt%*A;l6ac3E! zpgnC3-IfLRr#LT!>zxTDZV)NfY5=%_7q@~I;;`P24kGI^ZZd`SqTMP4(pX+!phgpK z7;`DLgyyMs*dculzKMp97xD0lfb>po%|IKyY`Yj7{ARxi=DIr~N z&Fcc>)TsD(HvRpCfoQDsPtEbwG4;mA#tLk=y>luACBcA{vEz0Q_2+T>IuVSdpFDWRoGpz!h?&{teFfG@IY@ouJpeZh!RIh zMJ3T01Q8Gk$ZqBb%Ox>sMCN!mlt;Rz8A?PB(7I#@H2*qZ1B;t|>%)gNmST^rqVzbB zHSDkbu)G5B^{1gt8F~3$@G0APT{wXb1u zR?e!T_{T2?ic5$FCFJ1*1vOJNI%{z`eu#{xenU5{bZv?59;9X@ z9Jb1lFbmP41Zsiujb3M&h)>S3bD= zW%7WIhq;qhU+S?+G2f3L&w{eDL}STf!0yuHV)w=osMRVfJ7=rR*xdAAw6^AJ*E!*J zZ-tf^uzWKx$%>W$>C5LJ!~pCgb+*}n>cGDTeep*1l!S@dVD3!ZL78H0Z5`|R=v#?} zn+E^MLS-(S(dS(mE!lbvnMf#TAAzja@YqtI-$j^AI*tq;5z+e@JYt@EmOJua_eTaZ*le zxf}^JT1V`PugfP=*v(e9w!%hL@?hjE_%qhtCJOG9|Bu0sR3QWoq?ezHWr<9g6Dtfv zeis?vbj{m1X7s^;3gSyPfBsQtAf#{>DfH7rcbf7GA&9#BGU^J?Hk_K)TBv~RFGPI~ z-(uv!VA`ZDUQs%$cdbvZ^0)!roD?OSGE>Vl8bEy*le*dyHn}7eCPTit?~ykXoG6uF zjS&dTvMzC1&pd=5wx`FQouO^~{cAFu#%(#)>ZucUF70)+0>|@kLEP+ms5zYj*`&(^ z4!b+Q2o;Bgqws{IBSJRXI<1Ow=LVhRD0t3a4&d+-`<+RwW>;Ep_Q!eHgSWr+< zJO}s%NV@2E9R@Xo&Y@F%)thodTnJt@Uka`jByT`sP2H|__+KCS+pbT&uTqTR2;*0D>wM(%(Z>N#Gg{gQNkaLV#+8IQ$$dZec8?5y9d9olw3}Tb z*6e#LO>z%wgg7Qy?_mt43T^I}q~TOy)WASEgd(Hp|99i+bPqp|qP9S6Z*uy#V}r;dUNv^N2gJuYDagBd}b-22^5@R@* z^0*Sh#l@wYZm`-61+0GOkQ@p?Dv*Gd7DNDdFd%eHOua$ys4Kg>m_|na@<3DylV$J! z0}b5xKtNBKcw;*8U3BUqy}ml_qRym8+K0y^H`m6_jtt-w83hG3Xbqquer0kaE~%2k zIt_n~JnYUf#QwnmM#Pc|P%l~qaE2tT7EEj9vn(=>i! za8poEZEF8ax6Vn8FzUORuVvX+ASAv@>4*<{W+d1 z36Qb>qh%ij2@Z(yIh4E6V+Y%9e-30#7iE-2I)koJ@#ZVEt4?(8Z!Z9(u>)cfd0V~O z#Href?CjT)Z=|Scc?lrT{}akFRmFjB0o`^msbIbFR{0{I!%B8`J#M~ShbKUVvm!th z4p_(DvAi(0>(ie|!~_UH;4S$kqq7$oht0X4sf@j^S2FnpCPe0~LQmED8+OwxhhLfe zat^e(x*ZNRR?CidC$L7{1;s{hgjKKn1+1>y=K&;7ib$-fa@PkFU zdQ9G^nd+3#^t7U{A?qpXNqk~r{uSd*sPAQ_@b+{WBS1R+fUl{tI5dQGu1U#(r6Lkd z!vDmqKe`|Ac2&+ZEPZa?mwO>$VTjVPBoP2hnjGi8Vz_McIwu1Blo!ZyJpe=+EO2o`ndI@rs#D_6`PSq*MVGgyC<;WzkPque!{JPpMljLeY; zg~^y@Yqbmnxv;8-dm|E#S00}FT=(I+94rum)TN}2eDrj?#te>n+pT%d1I2%?8(O;Lt{$<}pJ?zZc7x!~rUkJnccb!L@dg67yk7xF{ zqSCxj9~hjSqCSl7>MXAZ3@mZbb90Bb5*pWC57o3={1(PQANe$zn$BgVPY)s@wgd3UwVhQsfJVHlW+;QMNXCEu&lOwW%l z5-$&K19LO?1uq$HT3~Gttcz%rdLPjl9IQcU9$mV(P6l>#P6C5Nf8O6c{bI^GSKoe* z_(QMBGiiH*V4tzQG^QY~^|IxVG3gRIVRW#%U!tz4mQ^wrHfpQe5f1YA z?|a!~Jy@=CD2ZjD8ye-piHS+5`>d3kAAd1I zV2BYFpXH-Gjf5F3El4XjsN1S>$BM_k)u^pg%bFPit`qGA+w0@I40prdv~p1v6;DCN zz^lHZ)#5f%)R$;=)!FfW&Xvo_sT)8Q3PvV%8?6FEgFZ7oJ-y!kOx5{JSgxUGeN)FC z2WQGYr#4Z8z#8EC+Vf+TFV-`^m5L0981N$pfH?igei=h$Yz#&z7O6SD;ByF2z0S2Q zvDYInFkPomx3VJgiR>M(GiuV2ltf zbEmkT&FEUS=zj#+pSxuo&>o-2Cw=#bhy)6(Z$S|e$Y9F?q|WyXqQ^BNe(vrd z_){PVblmu%5>3pDfrzn3p#EQx_D2O~;;vm=8!IY$e!>`H?kA9!OY%%rZ8ZM{SMT5S z_P*>R&ei+*lW2EbU30!&z;!SD`jh~0aCBU@&}bkTELnJ?s!H|s>sJV5M`=88>t}NP zjohSKq#urKa>~caeERnW{U{87HHN8@V+g72cA-;_mj?#3e}v^)4;D4Da4iL-|8rVr ztIavTE8Zf2c{o0=Et0*(9ybd8iupf*f3qzXIK3Tdu)-tj-K>bz>RhL513`u-W9@No zVq|o-i5<{;C=rsmSBAT&?skisLW;7AL9VV-`z1OxG<$o?U4^465D5Rqr`M{`YH%*h z0F@Uf0e2*hR4}%-mg{V1LeKm~wLE4^tTTx$REunf+mOM}Uim^>3 zT#6}e17xe=g%$>AVu1@UuT*6ULGuhd;r1D z&Ir_~))E;=4mGCB%1Y~fb-+nuDO9bGBdJk9um~nIj!c-%e(BQVWCNK@#3z8VCvR|(t{+zFxDR*F3Z;TR#6=t9ktuMm^I7w zLsAl|kdTypd0WVYo7Y|LKD>PSbpYfn*+7alKmBT3ufA}p&5M$U1_A7~y+;1FT^3mi zuhm^@=T4TEmcUVJ4t!R_Xs`NnTwZ+7)pzpI{q;IJ8d7IJ6J&XhJ#&DNG(0Av3*-;0 z-Vf^nS!nK?%LCncWnF%L{_Qd0XA)s(eSmFt1Pp;im9B{3P(hjfRNY&k(>lJq9Ed2S zD>b|?WmW8J6Cy5VUg`=CH9jQUUv|xFcnaf%zx%MmTThou4aCA#HZ;uWE`jkd8;I?i zbu>9TNiv-p)IiE2W@&5(@f9T?D4rp@2iDX$M=1T^D#Jv-M^cPcL_&cEfe3o6H(zjo z>C1m;0qCV;)gO`P0bf4)cn=r3OpA<88WD;PrGEL1;O_3u@yzmND5k$Bj0g?-rQRu&m*gkE^1QhyEz#9^YZ znes)f(W<<;YG^E$?Lg9ZzPj@_va$?ciTHOWX&{x=)!o2}ANfCClG+K25>wQ6pp8|q z0*FAW)_#Qzml32~r>oHheJ(!Fj!bH#RU5N2Ow6lsu>K=H?*-@k(lz_0fcZ(KbRImV znrc8}qt)6>RrkI!qHOb`x==?0eTcc(zh`$_c#(J>O(u+Tczzf+RpQ_4zN`R_FrOdy zeWA~1(VP4cPtE4E;b61WipOd3J18y=^Si>ms;#H9Gw0RKH5Cv`0H>&K>g%BVJXi5+ zXR$`f7?6wre!QgC4?4;EDKRwyKp-kw+5&B2X|t68IPKf@IM}}ze8vz!J&n(Wju)#J zVJ9)^Jj3DSyjy;}CwJSM4Fp`q>SFt$NSvHAY_I=bZ^gMA-N9)Lq08`(vZMMj@7lb$S4AwGeafyOu&!y{RsgQV{r!C zs2Yn$mfcE<Tatz^Ck+Q6ocK z?Yx2dEN^t@eESRp3lwgNfE1@cm9wDEPR~$VN1b8!c{p%xR8&=^2Dj99%k42h{?Y?9 z$snsO7WH>{NPubO+Frkj%hja&oG3-q9}eh!^rlU|FcPrR7!Rk_&7N&#SegE3 zoIDkv?3j^;8nmVa@YnPlZ~Yxk5&A$y5f96{TkcQmIxL3*Ne0LR!ZnDsu0qqoP}5Upm4f>UeWf4O1{ zwrED9rKWzm?92OfAeK}DDDhicTiIOav>`Jkg$rz)oA$0apglsAWxYfoHU&i-pR8j1hsW&?gbTwhi6mC z9JUc)eabzv|`VtIX!0Mz%T_%&#VAo}3NSR&*bn9JwYJ*o$0ioN1ib2RfZPRk?znQh`7YOf5K4J>>GM% zdut)=TrKBtyn4T1Is0e6$R-%Oc)Gc@xS@pNa4j=*3idNColYNFhy@8;-kyr;mfV-b z>C`PVFb@?^vywV2G>9yDP1%zr%D zH^6$Aus`Ed9pvRdBgS(5)u!4PT(V*!xjjfp={>Tu1?TK~J&Bh-tx_lthkjF+9;vZm z$O^j^?ek`*&a968@w1tv`Q~Wco5x8VR{^bhS3*$xx_ls+nwZJMBISL1-T1Wmx0Bt< z5P=8x!m=Sy3vm(_PYx{q+V-71Gb5+>N)lvCWleo@Y0fgr7%j^GG~>csD zdOb66pdtnpmRKIB;dTATQ>A#a_4@l?yN+i zp5-a1{ZR*Mkwi(0Tt)9~cR85q?beo2Fx#wlIY4EAe#EGGz%_Z9hL259*-)jnk9^Qy z|JL8r=AaVNgq<@q7~~$ZlNEw!YapF;UvrfGo2>njHS8IvCF8=VXQ61&afsuT#$jo5 zAK^y3xTe$F9rpE)k^XhyIWmt3t~w%r-(0$VS2ZM1&)qw1{%$@8oz~@H)?6F9OWB|!A@NpLBWG?UddM8hQ{n7)E71s znA9w+wV&G0qe($wz&w(Hrjyqryk4>~chd(ZSWy{PbLqxh-)=oimzC3m zHYkGVQM>58eaC{r@Lw)@$vcd(7#UsfiVQAzT`sm={dobmIb{ddx6-gt^H&(Zg?!0j zbynapkD0!VOuy1rup@#Qv#~X-=xA72>=kbeZ2eVogNO0h$o-SEz=aP!cTR(TeNJcj zIiz3)8!DR^&|tnbUX3fVW>jg3IYY7xqK4D3W)tz7EdI0ey;D6p`BoxVoRaxg z_z6)hHUBm_bn#?74ST(%=~oLi3v94oLt60@->%Mu+CH^4=oTJAHv>hG16ntlgrDzr zshkqVNWX8-PCwU6j%PL}r!UgNKd<_?ZFkEjC%Sr+6qU*SsE-`1Oiy*ozWA;WYr-F^JO~|Nuc6$66(bNX5)JLhm z+is@>=gN;+0*u*y5hRN&;F5sJlqc+;(hH&x?xz)E%lX}Rzve{+XJ$<%cEVa%papA* zQKu~2E5?&!p#E~bzY~c7At2W+JbLDq$z+GIvOpxDZeFeb`VLCf;tiaIviT&#n%m$|WH$(V;w0uln(iQIf#Hz$%P@3u;uSzMPs zj;8;a%l=rludh$14faqgCIj-xF?$At-|)H~ z^zMbHiZXP$d?y*|V7J2LeBW&IO?UUi%lRDA)>;?`X2^Nu{#t|OtJR3?sH|EVu z)(Rf``Jxaxt$ZspS@~b%7ypC3_ke0LYuiR09d*V(e)e;h>%Q*m=Dugn+irOJvdmJ!boe}O>pPqDpZXx$5p!4sZR*FojKO&5DsEPa z9CcRn#zjcag?a&%4D{Aag>;G}oeeJ>sS?vtB`9+*9zMJqE&|+C&&4hir5wheNG)UO zW0!0sp|jk3>7meQAM>3u|DTC&7Rv<>Qu?_Ms{Q_(4PVmQX<66poC1}QrRP~$1otgE z)3Vgg7whk@SilQj)Pkt0T|QstJbrU=D4_damXq(G6UpbQcJqR>o0-{Z+`vDJ;WvFI zt*^+)z;IMgqeqIoPg0X9CWF-GcO-Lqs@5DxEJtyiAsoUoV55+jq|>JY0QsmK|14zz3>f@>z58k zs$rp}d9biWM<~G>0@?}tt3fnB25Tfp5AUs?$IMhpe#%})O;|>uX4wFe2l%B%`&FE zPsG0<%p6w3q)Y6$?QZ3s)}Bp3YfFOfz}^Uf0RTg{l+Skj7Ta<44isnESbIfve$=K* zB3q-sW{-0tAia%1AXt_?jDZDD!G+WUFLl(LU9rO7iU_@SP8EEx$FjgywqNlR6BW%j zp7CM_u!JE-fILOXgG*JDNNzx_q|CA16oLXapY z6N|&3hhKN9JpsDIhBNPQI#v8;i$n`tda~#}JC^~};QINC*3qLXlC&c#^8 zd)CFGhU|r?HWYK?3)b`YW1b$LpKDEjqSRU#>!r!xGW7vo*ok`FSTin`v|t9KhO#_fQ6 z@l78G!4&f2_glhpZe zPN$-_mX_lU#=puyEXx85wwRxO+4=SZg0i-@mVdO_ZQ@y4s&C0&M=CaUb)+cht*pfv zl!%M#FV;)jEu}>-dWM?uH-cN{W|Xy}D8!`|3CJ zlA5Uf!Uy8yjM;tC+TSr+(dgL;!}NmN7>r4sllqR@oZ0PLTD>QZ$JO{uVYkZBXlE>o z0rLmsQjbFJQBZRM%K;530~?Z`1<7{^W;cH8Y()T2V<9gMmzR?K7x4|+&&%AYnks?I z?}laubGaoj?*6;XlANX2S9y z%Q?2pQi>!1ZYox9-qgZUQ$|Lge}6mf*2AE+5?f?y7Hf>WYSTEkrI7e_Shkm^p~DoKD97RBN_cRk+{E|9-? zLWtRv!nlXpSfF8E#wtRqKS^SZiFR0vtZR-sDYoNLF^XjW$1QPLv})fOykd+*`ZmLk z|3p|C{*?n-@2evQtiR% zU90lY(QVSh&(GUZl!(fM@c9)y=)2B064T8I)Ol3V)KeafKiXlP#4DM((KGJTcxCP__B`Bx-t=}}(z>c>e>>VNeXNUK+$@l5jxj9+9A4Md zyq&AY+`4R1sWY7EmIM0qpt(MdaF@LoDsXy+T96UU=(@-3LumdV`K@tbeVGlB{AYvo zgwupo!hSrDIw=!sFmVZ5l9MQHk>MKltvjnxm;cW{vtGQov$e%4g76ti_PtMI*tbkO+Y_@DYwDo5r5b|Q3WF*}e zM{G9+tgc+nIKLAzgm2<-qeg^=Q!Vn0x=u_?QhH)id2H>e+@5j0er-nmqX&(w*k>2V zzAf*(9!Gc$?p}MO>CChaJo7EN@(xH03Xb1SGq%|4Eg0)sIMB>jM2jH#+jGLIKJ)vHnpJ^G*wO4QZ`n)YM0rV=1x%meie} zI77yVy%4(xwvb+Dky<;L)9ZyLVhF8EIY@ZQL1hD9 zYI+Y9FFA*v_Hh@u{!@?V+)AE5L)GQp9>~;BZJ!;AYC9NjSU0R7Z{K;LZioID@O?m- zV`W+9Q9fMhnz?_g&co*C?Z(gNV?kC3D9B6G)SxvI1f@1gD^=5tr|mF{7M!iPxe)5) zgS`0FLCj7-iCq^O8Z5bnZ^f85dtF6o%S8ZK@`W|zqnwk`PJ-lkN# z(wd}?l6|xe)*Z`-t~GI2cy16ukM>6Pf0{|_`FOB>^7}jO>|NGy*u2MZ*77Tyr1@Xu zWF^=9rnmGIPVFhU&9Ov$|JZ>@enCN8$!;zs+dX89eKKB@d%;Cr2c;M~0XC#~i*fNd z2yVc$H;-H~?>4EBa0PZ>PsIJ*l17J%RkQxb{%_UM{7htaL?_2q9Y+2z}N4R?z>+nQVeIz?B>ePl_K)M6EoJFl$aCTf96mMNn)0HVD_2MpO zkB7hMjC<1ruYA*)G>PWn4VkjRSzid06ulpvNHkq;eIO<-jx~X3mV1v}XmpG=G^8qo zwdx36Kba$_7tMq=ag@>Dx>{0#yYGk8)e>Dv*y)Berj2Cgfs z3M%{pARy1_6^q6pMot~QWGtyAl31oY+_{EGA7JZQ@%ylWy4(ts45O8^KAkV5Eu(+_ z{0S`$c2pm!i(8%i5qogo(~og8;d~mKpFmtM4&rT}C;kIjQ|{p0H1V_doW13U&ai}% z*O*Z(c(>X2q~Y?A^q6z%nQXXQ-k@{O)gA%nQ~=hn5EZOR(_*?&yEQ{L=D+{Q#+uax zW9>hbEzvmArS{Hq#c!*8pk03R`QmQ{X1~9;w=8{93LIzdm_dMH!y&le_1UUjTB&WU zhLKYHjBW5tlp$vxw&Cj^TbMgzfdbdt$&isSy{0x_lgVlpU-hikh+Hw_IzLlWM>9?6Xs2-A8lRnl+e(CNtt?^ zuw)FdutfosX!`Sm@zf6KM%yPL{`1`bE#c!b_;E_~#>^ck$>a$H74U2u#G!r9#iS@D zTlT1&9|t&>fa(B&AcM-ui&f9^4%==Fb$wuoF1F|mu(qxp@EF8vbooIks+>=lj7phE zZI`KGJ=YkyY~5)U%^}Ois8fle>OG`taf77Gajo%LdM5omAl)r6+)}zHLZ18d<1cAgeUo)`?jlM)WZ`(Z>yXL3 zqE`=oOV>|fHCZEwp|EvwePEU$AvtSa1WYnu&eb#VO<@mX*_8-Sp&iYsayT7t>WDfbN zEQg_sZr}&G>RyfTZx09_Nq)D@?uLfeb`aIoNBIR$V>UNmob)`(VdvZJ46`S33~2SE zpo5!eBZ>~c5#m9;RohPDN^#BOm6FD0#jQF7=%Y6(;hQ7LStWn?kpJS>`AC_IEHi&< zyIUbzCeq4}*D9Ov2FZsK)ifyif(qlqBN)cLw_&73)8Zy+{+$1 zmgv^38DdiMB3;t#lJjn*n5yK#yzKzGL(Aerv(jMxwd?LwJoZ3j_&0`Qt_|u-gm>2x z|E1+|Mv}qjkr|_22F%05x}y1)eK-8U9{-&7=UmH}L?1|s_s?%zu!jcQT`3^rUn)R? zT?hA7&$Of6s_RlyfhgDdRON}2BIpb@+&%x+);gk<+)qBk0n4v$=|{RYq+6B$=qe1(fk`tLw@fN3T%FT5 zT6&KrvPyp6_mp!y_D$E#dX0lqKY!vUK4XloXbPXpLN!KnBam|g0Q}KBCNl-#-G62T zD3QZfi~?Wo2&wp7X#D9|P|X(ruc%k>MS)mu0gq0#cW(_!q>y^C4XE+(b@OX7 zy1VK{6}@8KwlQZxfb~*++^QjsQCK0JjP;4|!P=B!MdtoLH9YWpn90zX>r{VY;dvNTX5J(b&P{&*o?+S{=svKW z3tX~kaaIKU((K?O?|h zhlhjchj2pTwmiHklsQkMg&K$X#KcrmldcB5|MSlileVOIuCW`&9|Tq%z&a|p8^6dZ zU!Uw5Slr9MNlPXLUbY6F2htOZnOWrM`Y(=Qbokp^`xfxqBkwKKPv*a*;?E| zu+8g4rKI43{anKgcFZMfI8v(fjx&RnK535Sgfe>3B@Njboc%Rs=FO3xx^X@$Z!Mi1(x zRNol!-^LvePjB~;=I{#lXxoNLCFRJ?bV>m`qf+LcH03{(&_}if`0$BLsmOA7%6f|G8P9<;7ugi1XM@qnc zq?SD%a?`S|mSpUQ(Z`q&3f@$if|i#co+qZ@5{Y9Oz?Olq(||eO|A12=EeZ*ujmrDn z)6`2Tzacf?@!$ygk=st-i5(65wCY$8>i1X97+aP+Ds=j0kwer(n04ywCvBvbA+)t4 zRXKm@{NkvC9WSME@BCi8QlY1#R`t_fdS5BXN_ULqrezZ2;<6>7moOk8X*JRWNBi4Y z7XhHMlC~ET6OA`*Rg=CwY$AmG2lNG#+ z^&?)+O&0V;#l%3?V%6s;tMrzeK(DWS>$A{QI~zA~LfUwA&DFJLp>1wlcHgIl*3NjE zdj&VM-Iw$;jayXN_xB(F#_R9=Q$N^u;5Zk?-}mXpi~p-nD|C z*(Jv-)vlVNt*@_Y!J>OZvhNDk$K?7d0-2!U>z*!6e zz$IPOsj;oI`$k1R1R3~5wu zQyW-N&q3De|9TjA=k-svUw@?Q2H4$6r>-;{K%cV!eAC*{2O6|0x>dc&nW0;&xkDOT zznk^W7j>VQc2xCW=$*Z4U+&D%02yb2X@@}Y4%5t}&@JKQJpTrhQfW^f0CfROQIXuy zW!Y>rOdwOS&??tuhEB)Y-#q-Sor|v#$-8$$Sc~Yox;g>*d`!SN(s*~*(TKv{`mln^ zu_M+3ba|6DGtC;nkK;i?GY1klewoQ^i4iq|07cTViWrl6y&%c=wA9ZwXo3v%79zwy z0Yr7vED){d!BZ+Osr|$rJ=H>-))T-!$z~U@k7)2?y_@&4PDgG~iDBOcrj~!>U%i~~ zUzl8=-{HpUA43UT69_SNZ>JA3PKk&RSK{&{RmAUJJk07#@||HeDrtfc>cDz4J|e0r z7`mIQi)HoM7%j}dX)1DOY3Lmy+OgSj0glej5)iiE`gQ2h zD;VBI%e?%{xOuaJlb0NQkk-*8!a-eAH^#FD5R5_r-azjuuM0&SbqY)q*F3BtA_voa zBP<5)V2?sywaxfbS1fXkGci-Zfm2U$qrIW)Ev+Y&Cad_?ciL8Qz`7_@Y+Ix6aB*1*ZT!7cu}PZmVjyw^{a&`T-tJ0WGGEZSkg{?6SjQcv0|MgiJ_wK`mLUG6?!z%DJb@$sFJ?rta6XM&@LwI$c9glv4w(+BNur)6fT ztta}dXUffNdk4LnF9X<(6c;y@PSH%n5&@}OFX^fo7|CE*d?5lpIs0Ts#WQAgvNb!IVl*D^3<=S7D{@${ zD3r$88~n*VL7E0o4{Q8g-Z=?p2?+?Q)uETpOreks_=X_K*X&_Yh}5AoSd-sPZryqg zPBVy+cB7)BsXg|eb?)7J&@v|{3H@SVNcFxXy8b3D2y2fem5`7Cg3p_2?jmEv zPEWxi?lQ%dJg4`ARG>FBZ5ucdFh+r!@khrb9JfEX@B7WBy*a!`PnH-eN72)(YoW}Q zrla{LJtHDIG3PfM%{O}x)cQ_<{kPH^K-9E9TDC4ZOH+45%&g85y7RXe9uxv{0c@&+ z0`e}zw}N~315)2#eCa;QcjDyf(-`niOdtc-W1sNuT}GG2jya&&qeK&UmZ>3(u$-&o zp%{qfo{N{DkWgyYK(YdMe#&gT`^9Tbj3DW5Y&C5!c7kj+qRQzQC%;LQwJq4;@Z}q3 zYa5kyrBL-ylRuWccBO(rkZ)Qzl9NVLDX^RxIltU<2oB;OM`@dCnFhY+sp%etkF<{I zqS9Pw)^V6`@vROYrVeK4CdY7~Qv9bA=CRMZDp(|x%>QBiUF>wykvosJd+ zW$>9qIwzb7GRmB@9@pGOMAF~6@+8KnOO;!c(8_=yk^4{YK7Mclj)!wVy|d>FBK6%I z=zC8+X|8yK!zW}25n=5$bU5}t5^AAY;I_=%edIVPyWZSozmq*9mD zwgPNI@?2a_MPYKDh5-l{I_L?ExqwAj)6spO!r$!mSs32A^I~^&8x8IPN{N>5oc<=; zZu?hhScwUP%!=76$!my=Z2>`ZEWjRMWXI@cVO(B^x2M32vE62%`-Xl1gX4XFVq4)9o7*O z!`l|u3_Hwwc<#>QS0Eyu1^5a#vuKvcu?klJZqKlRUCwMZ8^`%Ht^&80i%pPh!908> zKjLiSz4|?FMcH+03ov}VxV7^VN2&OCk2wvd6gu3fHek!As={L^(XB#a>u~%X<6)7X zrM>znjm^jL;(EJKD9+RnK>YpH_J?_d+0V1GvrAQS{Bln}Tq00Jjq?`eg1d|$BM?gE z!TDjwUV5(GfyuO{y2l%H{RmcM=QoWPmc1I;0wvcr@B@jIV&E@vR+U-Ik#%K(tDDM0 z8(6;V*cKc>mmvTxEetq^s%;88E03~qo2!Qz| zX4#n1J7(2dmly(oT(Y!Ygh82mcINFvNqf2^HLsf`m@}sNe_R4dKImUd zL4!tdacFvCh3-=9oE-3{n20rJ_piqqOo|_6Xg!mar6IaUYd@L{YKZ5$zJ=4vY(osmV`u+)+lF5a)Joif0=c_6Z@zd zpg$6@5MNpvSI=IRtFEa@83#dKRkEUYF4*z;QUlGz=+aWq;+OwR7hg|1v6kRD63`O= zA%9BBw6*8zl$Zs$8U&NpKUG3S?;$wqL@-RqjY3xdVMD8Y;6YH=2ApR4*n|b8z*yJ2 zekECSE&*-ZKRyyL+fg}2Ndw|I-~<7(a{JH_M7D18R+I)XL(C>ChRb{fIRPLm7Ns*f zsF%M(_KZHGZG{WSm5lC|)3!YWg(KhidY3n3GUyazO^dF+wT*fjfMh}DB4NN605qw& z6$Ng>36ei3-o;Mns0ue2TR?TvMKu+U&*r?M| z$@GE%*VeW(ShIp0t#(sfFePfb9gZ`_W;C`_^Zh%p(~fi1RA$`COW(x+r(~G4BLZd< z8K0JoaBq#;+x`3fz`raxfZ^-UvP#qD1`PQRw1a|T%5be`WYnn@J^nXxIHhXJyb?ym zAdM_{z@@c#bw%bc@Rd72!76pQ5|9+oWsjJLqMO+5{T4pHzR*~iMLC)+D1Bc76`K;E z#R)NrZcf4cW{onb@OX+fEzAOapxhk6japG|S?N}=GEq+%WHh;UE>y4bEmLz|YhppQ zHR|;igV@Er`2c5uxlzM#Z{A2%30jRGL$1N!ve$i6m3X|m~bYC-0Pr&SJ69i^$dHht70ofJMl ze(NBBclg$BA1UbrslXMX5L37I&cV1}6W6F*AHh1i2H0T|eH#{MZ@O{0XQ`>=kh~qDk#?_&;$O#`=aUb8ZNV z8`v#4>wCJrwbd{|GTxYhsd1WvfZeRs+?A>jKt^!z7bh$}O~_&HSn46G+?enMmVl0=-ahO4NPpIeS%T|8@UajTl3A?6U z?ti@|R&R0t{`-$u(A5uq{ohZkxj*&$|Kp_m|FfTd7hZTQa4;1R-*Vd%-RB3$`~m`4 zP{QCchJdE375Y$1Pmkf!(o!2^D)&z@-TWUHnan#i6{~AfPV>FsV+)`8H)~h;?gVnv z&={GXhchEcD$1B1Ir6$f=15CCNPR(rp-ILKq&l^-^5yTsF7qhxgG(VV2;1S-gg`H9SI*`jKi!wqWE22r z{SP^tCZL@4N+n>Cke?6e-3N=30NCKV@}(Ngx559jM$zS4=wAfnJ@9>)29FAax3@QF zf*!lYi5C%OsfYL!7^sX-%+ITi8W6MkJibMX3 zD6Oak2+;z>CZNTwcT`!{G8A^o*|8QP@t#X zEs>72yQvF!6{GF{P$b7g*HX`&J9ko0(4B%*R~uz6DrHl$wAM@*LBYZIP~1F~V58dJ zK(j$2k;!r)BoMMOw?Ab9c&oxq{f6n_$cX#s<`Dr6zoLJA#Uo2|C0Qy=0Xk6VHeKxN z=+M(W-DSYC`}O8cZAz_{U{FX1&U$Fy!9$5=l^D`&HV{nr^DFab47pQ+uk?_hx{Y7I zx->NDDc5^i1r9c)2!YhPZ^JWen8ao9r##GS*U?Ys?W5q{n=)AKvKkQnDxg}p-Z99a z6k44=m?%pGoTa%>&%%dK2@^J7{95idbZcaHEX{S?E>ps9ZCWqk82%9@Ig&>ZFG%&C zO#TBkglzMiPyizrsz7@sm;5%!?T>hRu2~)UnnzQTjm^zg2%@a#1| zEeq?-X(d~h^G>R%s;Yu!0w_@2?d`PL`}d}B*Xqe`#*aD2HO1yu*FLthg&6tWf0KsH zLw9~u#sOBA8=XOR>3gZby@XA`+a*?>J{5c`%o9eGNOQpzhIyKF|3I)8(dknY#()a< zWf@E;QqSD0Jy}{EJLl9(#)_lGMC2tu2mDxgM7gMjN6Qtq-{Y1<_p{0X+ipIfX z^xXHdT&C<%b)mdw5$`-hk+4gUWTmk8fEx^=4OcJQ8h>ei$;oWbFmLKmsk1SY#bu8g z_-?P_uCl?OX%-e*n00W?3FnimldSHX#s!=HY}}D&vTU#Y4m-=Vz?tfGBrzl1`tu3O zzBBHhzcjjm?)~Yml-wx({iPI)DBzZYxbv>tT*(wSVo6r;%!<`y|J6}1zN2;%Kn}gd z6V1%NudO6783q>o2!<;m?}xNT$abXnZRg!;`+9_CEk>1SbtZgG=x3GgB~C zYxe!l^bi^!6%}O^p+k}L@MRsifN}~D&=@uWq)5qyd7O=ECEd*-N7Ag|GK72Pxciw{ zI6T+=<05;!#@n^~(=WkO6eW50jZt}yoY1*w79 za9BSz_$`q9PzILDov|bYDpgq1YyxNt{5ElnkI$@J0NzKlwV0Zn&5x6aF)!5QlGF|Y z`ggJM`Ak=t@zQ{Fr}If4=b9N=>+X&erKzboS7g{& z?LjUgWeEuoMhgp_$OdSlixb-t?u~D^-h^^#Hs-UH~~203eO?Hz7u!p{j5*2(jmmY;z^=VV@tY>u3k9ut|lUPKqnlenUs!3NSM*E4^}o z0!@KK>z|eYpC{Oo(-s$b&MMx@`}*}{`^3bF5{hl`NK30my|B7zJDO+$%rX@4w|NAv z-|(*8#Wn$_1pX|ldp8U(`b444hR^eZDru!XF#ff5$IR=x&dNEbXkKsr`W5S5i7`GX z0|A#ZgT$Oo`nlQ!p0lbGhLDguqyan(cl6nm0vJF5xn|p$n3i*OvNcYkaTOpupa!dN zNX;tq*wT@E_GP{H_L$$Am)&;|vTh7@gb-@bUpj$oI&lvcI`m-EF1^Zi+ppuu%V9{quz{pHi zaK%qZ=+C}C#FOLEsbQ&-7IHQ~|Hv|{G6QV?jim;VZueuM#(*~fd~fO=0!ZD(;Pg|6 zEw6|9CmS%`hjWS(ucQ${555a4t&Y8%ZGeYq`v@xSy4Ig|>G_$fbFXF7=o1=-)U&Ga zfPw*k{Wz)|$g|&z?yPl@>8t&H><|vG`qmv)W(Xnn!o`csRh+j2+s1y535dTk>XbSR zmm<7GBVpaq`or~zNR@y&0+1VU1{Vhi3!1QmyWDo4Yk_Pn<|U619-#X!fEds0l_EM< zYw9-p%1(410b_Tu#=sV}gDX^YBn{>wW@qQzUlt?<`Ze0=h>*al`I=(;_05S6QHX>= zTJJQuq6LuWKt7l8PagpoW{ao7!baW+JPiT;+xU(!g4z2o5uV&`u^TY}5i_K*-}-?u zpABr*npB>?&10p*hA3OZhN%_$Ch0K9p6J;^6nxVGBOH16)_6RF< zYkkXEMCz}nvUdOy_?O?=oDdd9-l642HR;+!L}WA=3kM6d%P0BIdCVJutzJ6DZRu1B zvD*Yxz-0N|=5#+GxM_txaHbOoHaEQF9eDQ{Gzx-E{DcTU>^k`r+{W__eA;s=pO00W zgC+^))J%H*?MR7#zb2wP;WiKvAvlMy`oQ7XTy>a~6c!c+tl4~92?LX)Yq_2_yxhei zLr6aNKr}U6zi3dmwjt>A`0;m`tlBcjKqi3=r@|1B6h-{`#~{Yf2~Uy{O#1r?ifg>l zvXR`3){J0X4u{;xTMY@iEUsv(p`k(Vn?K8Q?)s+zG4La!EYLXY54=SotW=-F5&=UL zA^|k7Wdmf!fc8a&49`1I?pdAbB7UilFexz7f)*HAfavF6M@9gAzysm`?veg~t@sOe z`@dqA`afLs{vY_>+zh$OmiFe&0O?4WRG`_1FT5YoqM#!Yf319{KlCx8I*2q#y2E`3 zzJ02ofwcsFoRxCGJ=UEb9nBx~BRH86!k#uJ7B51#R-T?C@_-k93XkZ9qr>M7W;sh? z=KcPgZ=8RFaaXtoT25O>YXu4~Up!?oiUcdbC)%WMyK{TgJX%5Jye*OFF@H_iukpBMp?yQdZX1ZKKVs%ipi}j!?J9JOCq_ncsC3SLl zw8Z9sc5MNmdSJ|vD@Ii>$!tw26VDJ(P3~W%2rd=GejF947-j)#**`_J`jt%N=2ifp z_{~M8hjp!}^v3ldt2t-($aS2USnT~l4P-|S>yJO)p+gyR+CSb9QU+$f5fNhWd92qL*F$YPDzjD}F@! ziG6K$*~u%E9_&p&9o>kfxYyT@c5Du{%UvA#x96h=u)d*)#8_lN7rvc#CHC># zU-r4wgJIRPF%|&@+K*%#B}Com9hLME#y~ZTL8~!%-?Jj1%)SdXGt)(Bm~XyU(Q2aC zb421hX~R?&>E>{eU3TxwSfl&a0dK4AYBlzLwyVIUVYMdN&2NmYL;09 z#3ZP1eJ|cR7-3mY*L6Inl7*E_d1RmEH&XVRRDrOXn&zJ!LXUT^7n~^jS*lQCE_t#~ z%&64qzVZAkQzpkQz-2CqGK{J>rgXY7^_L3HDj68LT2!YYws_v&6U-;pk7T%>@HQF# zzFRW1Xj!{poXZ%L7V-AxSwLeU6WZ(oJ3lf7LmN3QK(5PUDD3MGT{#C0GeYPdo_dthKP2 zcqFg``raQG`!5Xxtj7y#Zl0ev?o;~BsnoQPeLvtENq22;i;qVn5d^kr$?)d;b*$Y` z>Fvkw^X{kRpSER3e`)w4AJBPmsU%8QN1ijrkw=c2E2rv9!&ZxzwwNB$*30$1y)Rwn zn%m)f2l#Lxlp)O%R1@NSE!R$8=?5J)%%$;he{>ug4LBx?3N(4U+WK9#6@p1oVl%2^ z=N2o+K&L>pQ=!v1CuEDmac}bMoARk%PZ`>STQo7;ZqH(KeIJD^?oH=&W`2@u(@|Rn;Po6$eXcNMc0`!{jW&&*Ot)=#h z`D#r~$(jZNxqdfh%&O{6?AV?v#3+J-Jt5({KBLUim2v%?HDy`kQjOdjsi7x;oE3gfeRg4zm06|?#J$*dLxeE%~EM;Y@n>k7#fSg2c!q!ey_TJ>~&$C6QVo-$lP z5y{&2d8uK({TiQ;5d5Q6vjE$chu+;td>;NhzQ5Eed-2{v+5_*8K5Iwm{WTAJd@Q7- zm_Oru9SZUNR(s1H{CcT1JH%=#rSFOBtia4Pe~VYZ?B?rp>btWd4%d>(9=A%cAFlY& zlsJ2VCS(ajRd-z;6b!^ZC4H;OJQ9*OudfeC#A5U-K&TdA_I&S!z6S5 zAm0OB#(_T?(T=4<>ug*YG%`j=6msz;U*DUg()D3?Z@0}Nc}VYVzFoug!d+|Gy6q@l zVYQs??frGj+j4F+Qh5!&txczHgKq0LF(@bs0ZqQWJA7(j+&O3Ovb5)`;9OB|XlOXz zZvs~{qXJZEeX(+$URIEmb!%^vV-*z>)k{Pw=u(-2cpgEeY8H8A+6rZYA@uiakQjV? zXEb1Ds$R1ADaIBtiYUy;hT+k`>d4~gvSv+UE zXQf{P%hK2XTB*$ebtUmA7$intPa0KezF+N%-ws7g&CK8g@8({Xs@W}k>tAy_rNX06 z)+;sZ-MfcdY_`k58&{HJZy=yUqtQ(<0@J(M17Oo5*B6t6=1+o?eEIsN2XRer2L?Pf zW&ZdH89@%eY-%eTS{$yokM&CRj|1<(e@Y;0?Nm=su=bpdp`)&k= zG~Gt|&A(BVm-ozhnfJE;O_D+^|2dV=uLx@wmsisrso7xQ1J^R-=56%68OftwZU;Gh ze~U<%!T95bGmzeA2hO4Z2izQ9wPA^<^{D3F%z9O>QP<>RTfHi&mz&4OZF>w2Q914- zm1Z|?Jk`g=mwd9*oKlJc~Swv0S<>3;`RE^7*cKj@KL3wy@d#6o>lP?vs<|1;;`=xF)_zrmod2|PYOk!pC6qM4K%Nts9YS)?xG^4qH}K*Ui`v;>Xam= zZ*Gh+F(ECIE+UI2#u68JL+X6m+S;f5Nd0;6JE^`64Yw0g%>I&oR zVk||p_3FxQF(Gew;DMlkRB7$#1x!11W}s!DaDH5T=ui8;QIdcl`AgO#U&H)Nrtk`*=BS!?`_AA zZEa|>L3Ql+%jR)iv8=dCF9ryAy$46S#Dh|u|1V~fb9Nt4dA zi^HYlA;fRIynrZW1VcU}D654U<; zyG+jLrZsIp&pOmj>MwTHw{d&4-HC>pn=J53fkCWp{HB_Bl*}GH%n&WeDZBr}E)zA$ z%csIh_l1`m%b>Xj({bu8c{oFi__@&qi!^9=@u+=UE4*)?H5OK9R0c${BVN3$@)rBn z(b3l%i!N~Aj*Tt_2=x4GiFCujz^bMjf@A-!l@LfzN* zPpj&R>c=K(=EnHE&CF}Q9}_+?AY;x#2G$sP-FJB$_T)(cuZVhH8m(qvXiTa)64a6+o|^EWu`&3s$8D6W-nYm?>%C`B$wiTKTh=gq9eR6M9v zw^~|Uc6ZFxuqGL`nI_}GtTk7nV@Zg^-)ovpj0_tm{ z(SV@XtbG~89l}Vzm|c12G~u9iG83b`CJG|>MWPs_$M8K+6eFz>Le|&iy5=iJoLk4o z$wQuL2tqAqZ}Xk7x*4^vOHCHgyH1^XzvuCSa7Z*Js?T1~$$k5PD_ukF?s?Ds{Jr82 zXpzk>;E`aD1`n~AsG9Fvf{GZN)vb@Ahp56lDrsV%;ItZYdi^rMQiIo5W|+&h&LEb` znUCbzsPeSSJfD2st890BRLXLVLK1I}&q=D(PmGO?75=am|4(pwP9x`YMfumkKufg5 zgwonT>ne-Y7w(%rFwwQGg)sV40sDGYjoCipok+8z9`H@;HI}W+$*mc3^8H zeVm+bieM-0t}JoDe2%_$S#@H_(r$vNYkQ)fv}LWyn&zrQBT zDXqBz0-ic{o9%kTw6tZ(x;>~L&C$r@!q4G{bWpn+ZSC|CC8(96HwBYkI1nDT9d1bt zHu+*~?|mj)$#yU0LiUAnhZUp6!D?Mb?T#jxz~}b){Z^NQ&yL^l!B399yBjwlDoMVU zvUThVSkO{2$aO%7n&cPt1`1pQugGXfb;@(yPjWV&y1t^O(gE$Y8f{|BVX~rL$JCB? zfF!e{2+^#s_fdWk)vg@0?NaBNdcj_{dQ_M4pr%{iiS#u6HL%ap*4wXnh1A6%^iv`@ za6JsoU0SBR0ANvd|HB+f<&S?e(y#pgt||LJQLg)sp6&nnG#A47?}C2+b6dFE@xRkK z{I9nytM#K?&}!eq-%~mWM9|{*-o6=X>h-?CP#Utjv0-%YaS^HMuB*fFzMzmjj{Rql z=9jzMzSRGyQuyxsUyY4-T-S?kuC7$GFGK+)(`uQ3i`>=9@Nh6}*~^~vQQtYcIjO_x z?R~+FXH+J;vJBVe)YqHf?zcYp1Uz2uc_MRk`xZAUbRW4Ju=gk#sC@29du|1s|3_KU zEQzJbzB44@lML6V4!Y13;UDchQKGnVqqWn-{-n`RxXZX{pF}Lw?~@ z3GSQUkvf9?)NcRnnw9%pNy^9k)gL~IK_X+ETw9}Le|L=&O-Qg>U-~ko5|=`p?G%E~ zylFkkb0kr;JmxoQjvx^&>UgeG9?yer=Z81s(7dRh!z2CJ-_8zs`X4-WP*O!j2L$FX zsbCU3oAaN-CuT=KUnL zw*+*X`4x&@J}*PkqVFnKKXM|0GP!80Te;+4e|@T}^PSNL+>oWiVp6JB%`uLxmUhq^ z51*3mXiKS(rcZtS`SX$IU=ifNq4hqH$U2sr0*b+7rVfN)yaYx*C8Q#(p-|{io?}q- z>@nMIfPaBOBYuiXX1v{9&_DZt|dGzh_ z3lR6T>9hkW=i@^Q{#)!#pikc=)YPf!GnpSF)Nb_Xk%5?~AM~EfD_#eOdoq_VWF<&S zNx`=_UnfV8mtrnlRF#sLDO){uw7f_)Z4i%5H6>xC1kg>bTZjb>UWRgpb*GwZjB#?tdDVY0;woaxPrWY zpPB%U4;TAv5fq zH%XI*S2B##kjnYc5XSkCmfB3QIV9vTG%@3Rm3aW% z_j`SR`Civtb6wBjCIT9i9X_M!$%pUr+=Nt z&noHE4wr3{KItAdH0Cy7yC34dSD#d}*DnWPV@)3ZL~n;IQXN}o^wi>+oG~JCn~hGR z)?MA&Ww7UDpsi+u*X?KbRY{{wz^BK995u?!KdDqcF1ggHd1N3;RolLSbWWK|8`OEm zS95jc6DsUKcy_a+>DFFBORSGv@f>3dAO;_*u!=Yn@X82nK3xr<%|oRNU74;%_2by3$}1?4 z!NO+A2YjkrILnq9U4qmUtM2b0v5F14C)z{1Go8&*AlC8A;gAQMHd1l(038s5q-2U?d7m#8Q0RcN zVf1;}p^`1wcKzWPj`_?oXC_abVLe;2WU^C6CS-Gj-)l8EC3Mg+Q12`2PGV*=HS`;n%WO<|4 zta^k(p{#!xn~U>Z`0^+OnOMQyx^*j55tX*INX?EmU}3|}#cY%Q>=)=%Bfh1tAoZJz zB2N(H1J%ToP{Y9n8+ED=^TI>z%;)}N+_H`ELUJtWshXy?wp~QTR}BqqHtctWz59#4 ze5wEUiUB)i$#KxXf?noj>Nd$30>4op$m*Vol(ls}rc+741_W?;JHh|Sa}J~3%;Yeh zVpL4Xoc`|BWQO5QVci*rRkFW6{k>bEUW{lcva8)S>BONs9WV<-Vk@+`DUMp} zi;n?&P6`Ah;%&zE$xa1~_}h&W?8 z=%nPyo?%jhPEqj8p&y00taaxfuv&Lt6IFIpXB%Ft>zPvUUQ~B2v9L9>JP@^x9K>QB zysL0ZMuj|ai&Pw}iaK5>M7kgR%-u|#x$#z^);$`!*Sph3GV)$pBHP+Dbad=P#W!b% z=~n&L2vs!z#`>Y3C774_4~;}7ik4*SJS-Z)1Bgmg;Fm*>wYjv- zTaxU)q$C*+509C*A9Z)BsP1_OA-T+CRpW!DgA@oML(ju{dP0;mj(sn? zdG`qIMv6Z8{;I`~Pw1JAsP0`|V|M(#@_wuSv4#!^E2!ENDusvl) z$VFU%2QaUhLZQg>G@M^V9`=KL(&gmkv~2FC|dQw$^ZAX)1m6sq=DjM1@W^Ld{o z0(nP|G7Ph`$dH}W)iq+laSncfjyxPy*G!K6Jk7J@!Qaxo^8NL5oRD?sl)N#R$Lb)pVFL`y1xe<0W5^~V$hM^ zuO5#B_rCyTd_jEAQ`g=u5GYILSA$NFq;{|C{gC^goKlEJ`;FFDXHq4qX(iP+yX4kq z=&S$wE>&_VXLpSVFoHol*?l0)b8!bUrmiejHYmo45>Lu`HRkgpy*AK-Ck*_&YM%kp z?ZQs>Vj7|sKRg?H_%D3FRvK<0+%i$KA0{WU%Ws|+qj6LVlQK6Zzh_SY1jUp)Ixf?L zEjj>Z-ih|JDrqNcFX??Lob2q>$gOzm_xW$wID3`r)jl@z?scAeLJnXD*rg;mtc#w1 za~3iL^K@2GX=B)fei-*$SU8?AUznqQWh~y}ZAhz4DBT6TD}L&e<1ob^8o}GFiDy~m z*xPGuK`_uS5s#b0Ny&&kO-jrce)n-%As@qzm#>PjvqLXj!R(7)oI8@6!qk@%DGQ>Iri21f=p1Wt*~-B4kEc67hRfGhcb#Ic}s?H&Tg hB~}0S|3M`|Yu-?B@UGidiQ1|Z3VG>##ks4u{{cOqg%bb( diff --git a/playwright/snapshots/timeline/timeline.spec.ts/configured-room-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/configured-room-irc-layout-linux.png index 27425c632624957445ea353051ab3aa22500e79e..0453bf932a9b6591123b89c8bfdc48fb3d46a607 100644 GIT binary patch literal 42468 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 ME?&;8qi28lFO4&_wg3PC literal 42275 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 u?^auAr(_I8J?THBl&*yU diff --git a/playwright/snapshots/timeline/timeline.spec.ts/event-line-inline-start-margin-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/event-line-inline-start-margin-irc-layout-linux.png index 02fec4dee6d37ec8e18f7828c7fd137160da1ee9..077ecbf7176fa730370b8586dfab1339fd237346 100644 GIT binary patch literal 53422 zcmdqJbyS?+(k9vo2@u?ZYXk`HE+M!>@Zb>Kg1ZEFNU)IL?(Xg+KyY^n?gVXUxVwMn zoSFO0%)0mAZ%wZSZ})z8Z>?Qb&r|hwn394dItnog1Oh>qmJ)jpfgtEYAdg3p5kZO7 z3*tj?dF1$B@*SjXm~lj`0D?B}&%Y17+hZ|K|sIxkp~U1@x%erb%Q37x%hJ zNe4s8>?3cg54z(Mp7~Syh5qw;WoWtw`PW-L6S<~;7xv^t{PRxg-GA32{JiBV0@MRA4okhHiu4879c=6B6*gaEvrZDxvK>Ux#pO2fnwYrTc z>Vyp$NZ%zn;u*N$b?8WJ7iIc=lT_CB-V<;Zsc|~;iB30NxKfj-vxTrP|^CCq~9x~6w1}|kIhqEDf>*%ErGYaLE z-8pRZy%~0AO_Q$nB$Z0x=iY62&oa=^F_4 zWzH>lr2~nL`w_t?KI|oJah#dWgOy&O(G`^cYyG~vzv60CS$ch*!d0&P2?FGaNJkm$ zl;^uw(c~?+dY4H_liU(TaO~Y~&}|}VK$g;9k*b|b4a+3ER3C_Twya)s0j-k3!cz3_*%zFvAbo!FLX^=^hxB$yB- zYhByGTz-CJLp!`mTz1xLiT4jUm8Kgc<}AQ0Pn2IhP(_7&;@u?1iAnFfiAa*QZg~5?-Y4Dwg_zxlZ_%d=uMvwLROVe?gU*%R@xh-L~&sgY#*0 zUlolp^Qz$oe9|H{7M{A(4Wak<0#=s-f3~-a8REjVyQ$sou32&UfJkN;)d(6;UChh> zy0Y65eZgVldjVyY#c0JJ0!pC7?whv2jT$=w>rcHvhj%!b;aDf&} zi9AbMjoFRZW^)!I9iP~APdl(&_E>1=3jYa2R=rf*RNW?PYg?@<96bZ~ef#JFf&2ldyN0Zo8N`@H3;kH(glh z(kMqAP_FTpfLzfcg~yv*+w~~qT_#IIw2H63k~Arh&4gz&oiC-O1bh%7t4l?19(xI5 zzp{(6;vPR)*;GyNI9hCuiAZ`sIyyDCs+qR?VCyHVKQ0zkw`%4ynC21c; zG93~n@4mV_*J12i*dBi}+y)=qa|641->0)li=SSn@U ztJg?1z0;)&RCc(LP}`^z_2a8gFeo~MW&>eqD{O7L;u-XUBJxMQt;J#XM*h9JC)P(( zlO(9BAUOA}aKif0 zO!%D(P&NEcc(<4o2#{+FDFtRd8Rh0XaatQ;0hJcv@Y~xiU$;9RB(1raPe&Ao8VRsl z|69>sJC25}q#~!KhK5qukx!QtZqXbJtmai0O+W*;T`U*sin%fTl8Kw-si6 zS1F@kk&0iD+hrPwBc1O}k$GMn^)Gwho^A$~R~pS3)mEAcdqgtwUv>lOg|<(iC(!W; z*mR4QKy6;KRacFTP7!f!4iZ_Yf9~Qo4^A3_3zV$OhX@u6`5O z-ut7~0|Hsp+21HGZ|}rp-!_;V5AsMr@RN)oU&~h;RH`wxHi-nF<_!?bd_m$To&7Esy_|oq0!iM77=;Gz{p57;jj>vmoKmfWhzeU z+#o%?>O-eEXDU)J46Hfl*KDyYovy-U*R%GOx<7wcdF~#I2+`DR|27&I7lQy<_PK)L z?B6$D-^s2AqmhTsIc|v@Q9Q9rpEe(B;hnEX4Gxhs4!G1V)8S1BM1?4%@H~U;5Mt-) zOgE}XdR<&_^Z2X>E^k6Iyl&14wEjx7-Sm;D#Sa##x}Q~NZ^YSs_I1(9p)UQ-864Ee z%VoO~&?xJx%yhh5Dfr!;W3m|rW_b<`-@yuN!yqe@+_B`7In{WIit4yIveEAy zs6f_T={X{l!t01Ao5&z~etvv9_Kh|Yb}ia^MRUo_+sC9qJo2?TYT@cFbzG)r|E2kS z!{YCLk@Z-NaqSvR87Wm9p zYnkDl!CX?pV9#-bH}rdGbz=_A;W)8lVi0X=+Jpv{Bulct%qR~W5lU`m#SN&q@O^N3 zUksMoOa!#*&>!5UIvZQD{vpxn}GFsWN!q+3XTcW4SSLn!y-T;4k?%F+UtaukrqS>A!|&6|KL7PB z(9!$Wu!i=vMgTUN-Fn2#%@urV+`qarW=zQTkhDQjhHSKJe|wmm^#u(t)z$% z=^8V>KKT2L$A0}43M%U9!m*X1jZIKYU*vRiit3`yo=h7iu%{jujePu>#!{4Zhh9GE zzGq?8Zr3chWTKDlx0ey_>U^5d&<1nqXGVD$2o-9rzOn4l@C7}gG9Af$p9-^gEG%}g zBY_;uQ^Ww%3Ks%Uhm!vm+cs~dbM7wz_Nyy!kmw9MJOxiS_AcC1|J-)!)#VEpO=S4! zrU?2fi%C;TEfY)A44dC|9TF^20PRP9sC(MqlbSWawYyq$2Hhh%R1`Wl-!5`)t#osD zUmp?n>4ht+!D*YHgM*SVDATpM93EWrLpl~0N!uTwsCnWe9cvA4Jx8-amQ$pxPCJy5 z6vfc^uH+R-;nw=SSHt=Zewf)3nc%Qz8J%8Uc2TsKcSatYtzXsdLm)yz%h%^|_HJ4sfEm)$!-* z*fO?rVSf)3)0MkLx$(slWGOy-{Fw06T{a2efsZpwBKj?_1a)=|=!i+%Gn5RS4%Z-O zPr(;Y%tSvnZMK$j!t3Rr`Z< zV*rYpHGpodJD$x>?!M|84L7H0RB(58Mm{(E(tK+SG8aSs5_YLuY9bo2Sy5X%R_wFg zR7=Gkw>G?V3l^QARrjej$&-OrEZVDaD_^6jQWab_cA~NzJpyIuvt+s83Ktt7-zAf` z!dU5=dwkY5HlqNFbMx(mf3>vWx6Y{f};PjoVBuwo?${eIAA2EIx z1~iUT>pB0`Cmt%I?fV7b+8*)^XeEBBU{u_iYNrkxd!{uu%AN%(;vzlUL!d@ zvx;bPp7c#mYzx=dn{6=k7OTM=)YPILSzgvOX@wI7=#HZJ$(2D%qtY!D<8 z;hCjH+x{2cVQAXm;9!4lyj6qa6*&s(bMx_^=xTHt9L}0w-_X+b07&ua^gYVB?MiQV zNU|SV!5@Q|?^9%J@5?b3mr@K(O_^J_X-|WS`?5hM;ryp)E>N!iGp_>s>%r4#e{VH&=plK%nB&%c7M})lCz&2 zar&kK%k^neT=~Xu!Yx4D2#{5!B@DHFHHlXB+STPe^2I+bzW?G5^z^7@|IH`pA?39; zeEFy0o#*}k{kerV+(+N}5aDnInAJo%tS6n5B3N+1jon)0=1%p`yDx#?oc?)(EgdRN z@PBI&gB%$I%(_V^6e_n5eeIY>ta_YFU-%8${dnlX2Zw?2rZ^HHb*}q7uvWk1($90x zwkL~cSY1zL5TXL@eEfMtXyGJq(t^;n zjqJ~cc>io}c9yoWFS}RM7pZw8(2S&XXPF2a_x*WRQCq2O%Wn6J4(Kk!9Y0rnbI-8Q zor`WH3oPs}zpNK334lphJ=D`Z`JF_OZ4*n8SO$G=cHfr4Q2pAJ`|=>ByV=gAms{Tl ztucni=fN>TMo?DcKKw`hI4hq6gxUv6#W3{ybYsNo5k#JtJ20vg{cB9Rdg6%BIkMS9 z8^l+?oM83?n7r<(9FUJ>G2ke>9Ps)HwR&c_$4Nl^Ai{Pzxl5hXvx4U14OC};Q7f!g zsLp+l^Tz3D6yJEf@LbvDz$m>Lf$UC z#TWh7mjd$k>~x}{y4+6!T~~hG1$5g=$ha%h>OP~XhK>EDC&f~g)fri;-J5`yxA9Z4 zzM@H^70hGSkrKn7a`iH``RDK7qTbt0bSA_NjRmiCx3)}q9FHE~H^=+)yB@DO45%Ud z`}zC71K!lzqx~@5Ta2}%*4u*jjW{@8qeYJnfr_Pe=fAoA61uZVHFYeR{aV*#jerM; zj=&RS%cNr20EP&`LnS4FmAZ-wtg&i>Ov-kwwq?e#f=v25*azeLuWAEqwU(+ODu>^B z61{MQ^cYW8a`DjIju~IpNwDAhyn69sc>=%@YUR>B5?YO6;s?E^tg5>e**9>Z0Pu;l zSY4#iVfy;EOFV&%fJyKDz1M~*aaoQ|cfrqlWE+CeJo2NTzkV@R3OB|OL{pRXkLBPN z9P1E7t0kjhV~<62!qt*oS6A0#!^41+TWBed^A_pRa&wHRWVGSPXC5aEyK)BHc_ys( z@|Ezo{D;0nepma|Pmk~U+$FRWHwT^@8X87lXa8#OJQf<(y(Z8$a!Hs?uh&4$$zACz zYel+&po2}xyru*fwqymvLjx0wF#Q>uzV1jgRad8;(MQKw(i_2aCIC#OCH@L5meobu zTOa{T^$22ZV|}uAB67WXg&sOriwT@GsuoceALxZ*g11^ltw=TX5s&8)gV;G9~gJa}f>bv6n&nf@J9TZJC%@k;3l@7o)oyWEVv%M*u8%9DxD{)?z4kR zh$tu|`uDwFdi9O_fDpH44T4F>BAdNW;HYwT52F5Km_lFm{Lgp)?X~%TR|fn4l5u@B z1o4A#dInWW=5|OB%2Pa)r@&nPV-FJ;*@z5GO%Wa0*)_F3bS$Q9zaL;rraXDcm_Wwc zc=Pl3Ah$Ci+{EY=OziMAn1aokNjk ztpmi-$O+HfZ-V3+;0}e1NTw3#d34e+mRPRo=O5rGwdBNt8$Xd9{+z>qo4&VTOdlCqS}G1e9rysx zQP!$|4U$vq!asVp&IwxLhI@PxZ1|71E-HE9xHw;2 zdB}M~q9Ko!n3OQ~A-pACEe7gsDIymiG&SSHaw2lFm1qr2`-+RfY2N8w&ByR4q-A6K zQhPwNNW?-~{{d-jxq|g4)Pxb`eOVUe1znZT4Vmjp;hxfIkp}ipPpT3ho`_52ja?qE zjp40flVOwKMvPW`sr`%DR%^j=){lh?DVg%uh#-FU)XOAX|-O$|D#2aV(1I=wzRa2mFxSG3XxuQ%@UV2p-PY^$#S_uWf9E1fdcbp04MfoS292PMFaS zKJ)imU9E$EB;mHDtLOh7>!*;~lwl&Pc)mA>+U$DFgq@#vdUj%t!pv-!aAwq}XuS|& z_t#qAVt4oYu6hKUkT4LR@dFhH1L@zb-;zMV7hYxB*y5WF*)KO3z63P?ReKcGWgli4d0L&!GVO?KXeEfjPP7%iR z!*w0cwp~!E99n$ehNI3{3_emk0{^A3 zFh#ax%wx#rT>VCWOt$aC=ZdPTcQNEk$^}XW-B9${Uw)ic(;Z8#nZr=UbfEwr7_@tN z83P-e4B&`hvdT&+S;hV=an!NAsP-J2=hY8p8=3UMfBv+yd|IUhE6dJw_d7xdWmrf79NG3o?g|tBs}!w)3uvtc3L(2yLa!DX9}6>`mLWrQh4kidqZ1d zrc1SrfdL)3F)%ic7#+n>qQ#qSu*U_AX@%1-qo1%%zW(BCL1CkQMY)9t`lfQ%Wgmk4 zkra{r>C&+*aduMv#K1TjMWa7Iu?bm?8ai)Br`6x|yH9NWzFz;!teh=@?sP!-S-XC` z!e)W1#)c%){qI&6SZH7rm2+iGYV20XgMxwvDnC?xWW7s|Ry#e#BFScrwtA68@T+sU zZ<0z0yQL*okBzNXwwNIeor)RrN+O2&g51HuVYJfNEWzZZ1X};kFE1gG7;?d`#m4Hj zKYs$Rpe-SnhkUC$mD>~zfZBZo`Nm~~!soODftW96@wNe~Gl7p;w@KA#g^7u&V*;~s zFp*Kx$HylOv&M0o@hu1=Qu}Z|T559fu1c+D&y!0Ie~OB4G@PQvx1Y}LiUAe}OVEa{ zXr|y11lfEehDubpWBj#j0tH9Z)bx7Kk-i+--)-UDnB(^J&#|#ItUUbu#xuY#xjk-Q z+uufo0P>}KT^x1o;Gkr&&Ut@YN=~k){ox)}Lqp?Wu9^TcTB@yKlAMx4I(5lu70gT{ z*Ar8$P8Y{yv!RwUdx|^ZV#B1{h6aE&ucIkkRvH`KXB!=9_JmUrf{#Sg>xdmwesEd% z?@r`ribo{ENm*U9ku){lmui}tq0H@fSv{JiI<@bUors9DGaXYyLy_g0b~dx`drC~a z&5*aYB<2EYYoCK@XH}K>z_uw=2NUR#XlQ64Z!avTfG6z!QD8`^>|s0ImlD8mJiHv8 zX|4vFFqqTscxewCD<(CMBUCy$HlN}SLdn2@rjjSu3&tWg<$Kl>=MaF1$*8=w@{mSj z1xRpvqbp|W;E8-i;V3GlM(fdx&x9Q224NoI)H;ySS}THA)YL}D%dk(*&b`a6w@SnF zACg-h(T=sb9L_)b7V67%mtCE@7fL3~YBRG1ySg~1S>CsG4Gxj%H`Z%yt<20q>JI1E zCU+;UVfD2g6V>|Sz!Z3k&)3{qXp?ZMwz?`zxD`eayyz?EU}Iyev|UQ)aXlh^@iN3{ zx+HnF!a@*Ya5!I^Tc+=%9mO*Y)J%XJbvLu{L*UP!n4=Yj2(`~KqvVLBb>tEhu39#$xyaCoYZ( zXt`P|OyKTcgm=&N5}A#p^sb7Cj#jCmMiQ|jLRcLBAcNr8+7G+7-sA~0r2^U>=*2#q z1IF$S2`lnEFTj>kkm(9hrpS_=VXCOFmz1++u+?e*tSAfoDGF+L=W|hwjEyQieiOHxN<9C$=|i{wduZsS-L9>(vPX;- z55;=60^7~wnX&TszG5EZ$aJQ-y57?kAupYn|KZc;~2){LMH8SRywwDLE zgC-5QFX1MFG_`{iUV=oJZD}PgsX>mqt(RZY(_J z!Tx>|^rW`7w!R48XqH~->hDMLP3I3;nYqvOlB>@*qrbb}Kmlj)2?>{N&(?44)!ogo zbRTG84~*}7jrAN(u{sP{ky#NC&7Y@=XF8Ub$>XTKBYa@XNiC&)^TH4}cMqevvt0A} zoM&7%^O0oyE-zSEAjRsXfvv5n!-p`~W`SxU8zjRxUx9_$#V(_^mNQQw**_=eqxF2v zGo}k&7Q1B~;H(tHPjKk<5*gn)v2t_wpP3AfHmcCPqM?wknXFNsCKuq?f0%Dz%H+dq5k|+$Od#u zA}mf%-k&nVYUZfHX&2}I&M|f1WDm<2(9i3n;))kBlV~O z`U3$_&D98Iq3)sNYLMarZ1S()y(L=Jr<(-n-Q(lqlT>uSQ*J~H>+~xOGRKUlJmwNE zHbk_&pgnr?SLiBirUxe8EwZB43uwC|ReZjBo2NM%m~l*5`CeXLqcvLWB_A45AQhII zia?pZY5Cx3IA3FaeT(#t3G=PfIT{`w9&J7SeNuB)xpv)oPghXH>OQ?>*Ox$?+xS6* z3j1z}8VlSfjrt^Vsl=rY>hepM|9v8%30xl_4I<~gtUf!EhitXr-2Kx=_U~!C) zm>3G+>lZCf&uCykPR`EyfIA3*0N3gprxpI=$Ntz@Sdl=?yMYTjb*Vgt8Tz9Gvj(kd1f~=PA!Ukdbja?0IsLkZl%|#^bnEGQBxJ{}gg_ zbMuYOo$l_>Ju)(~gtZ*Qhq`kHXMtXeaFHd=-G%!7Y1lL2M&YimmjE@C=x8V@WjJFL zEz}Dc=a%Y6+}Yd%4Z3?iu6^L2aS zk_)V+KTm-O#1yJzQ(ajhGzvhhfQqRs51+3zrU4UMqq*w;bDT%X%&gd`FyR^6be%R< zW4jR?6?NOW%X0PO(ZKgSqBE~QE%B+~MiTtGrl(EwzDMF@-H8vJkwku43 zTSig{V?+=z_X-m*zuHS|{4?5XW;Nyp1H@IzTHC|u4H8eMOk5$saP2kGf-WJ#lOrtgbn{TJx zaqaJ^U-ckBzJ86)^t=MW-CWtEwSyI36V0=vChjZ+jB zncSgOEqwp<)INmO_CQna-Zs3dq|75bD~rWpQtH*Ko|kNFIPI{@AOG4}5cKW^Fs|Yy zHKKOCZCBkPD;Kr~pjjRiXBinASK92G9)yNL)(uS)Q!@t?Ae~ zYJ(=I-qU7RWK}KHUS8XpWc6KEEEiCZ1)+OW#o2Z%SEoMh_d65$%$Ab{pQC)tp+VHwV_h9{d~`k<@e}q?U)O z?>p!o&eyoJ!^a1P0`h|%WoJw5O)1#iGRkP9_4doGv>h(gV*raavLD%Z5+k%^_i|D=sb`r51)lTLpoeKs=zI;I^U7VM}MS|eB3rStgJkx zws!gg!07k)I`w+Gi#{G<8D)q3&Ih4O{H|2AELb5Jy@q$!l>^QpnEi&+2Xg@Bn(u4{ z18>N3(RaR-qvb~3F2Q7;oYct73<&}vxsZ&OmERyHF5Z5rsL|@UJ>2JigUaeTZQa1_ zAgQW~x41-NsZ&<0Yf(SGdaz#Nb@)eBquj-E!A^PJh*n4)dRbap$_VM0pO?u^`Jd~J z3JDAjGB{ptHJ|9CK*AvHs4)CuIT&Wq-p7@{B5^qH9AAD&cEDK&jz&{7tG5wIS>Q_9 z69DMX#$LZi??v!}tC&qbvph^IezsAsCEfYADC=Ll2o2*`Q*lA0Rz`@?16aJ{z?4hRW8Q!mSv76h$ z(&ZW2)-!yu?(|!doxz?!nDpBsxt9yF*vV}+3Xdxh1*5q|3CHt| z>c?D4%=fe3x7&rL1O!JuRkk=ed-sB@$$39`XJ_~4(2yADSndaY6!}s!{mhK3eP8ee zN$igwaD}$7`vAO&FQ+UBM40SYWP)T%P2tVJ&Fv%ylNCR&*##7(l2$$lENN=`r7SMu z%v2{a>yvA!q(7YPFSjD)$)$!PVIIAtp+ORUI74l_hx&TdXY<%xfYiSifD^RVJ z#KOlfs?@QVU#Ydy82WZ9NG{|R3XZ=~M}`QG{aKF4sX2e&xgdFy)2=^!ra#@-@WBqN zG(KTwbNDtdi?sdwM>&pY(r{}0eobo#UX0=apZt09elM`F?}sPGdvsM#g(f&CRy>Mn zs1@#rHOh28Qz8Q!(Ag8FpY3|Q%(pSdl?ElZ8r^W4a1{b;4Ykfb)Et|Zgtpk>*;NZU zj>c9}(xC%>mrqQ>2g0qv9T?;+<|anNab_L~;1BJL@8yjd91qRcV}6c^h*-Wrdis<~ zAPcvvo4;#miHyRFMXX0%5zakr$$GFP`AM(HGUre|*`Q z?px+N-7AhL{rF};TVs{DA0Bc>QL-Jm1a zoFzmWWjR#@=O|P8oJFK=FLR^+v*;JOm%N%Epf$V6ClyMss9#gP$_YqpK(~7UM;`P< z0Jz(+Mn~7cpkRP&Ix^g9$c&-nn84nPg0viDR7^>b?)d^R2Xv|xDrJhYvLV_C+zBvk zEv-z)ZH1ljTKae0U26yHkw1SL4qVJHi-z~pxTI1;hyIcAH`^8#>r6#%>AGW|$|nFl z2H4clpN8FQfW`)wu{s-;U`&cUxWHTdtVI0M|D)}1XROea8Hr7Qc%9Jrws-cQQ+gi^ zVm^Ga;IGe`n6jw9&UOz;=3#Vx1fDltdWm>04YL24-WQPYD8ghHfJ<}F=B!zs^YT=Z z#q~&_K1KyvD9iNMDG?*KS1VVPLp$ly3rzutVsiu?aA z@{k`&Z_k)?1`&sZoDwby@AFFKy*F0jF(H*uSq<;pxsgEue4}~Y8o9ALVo&RwSJX%2 z(Z*wkQKxNLQ6Z8OI1hc%B>H=N`3lLVC(xuN0Chg?j2b4G2zs`L2|wuA)p!#&3+YbQ zN>7{-kdchBgPH5$qT(}fI3pt_^ZrFr384&2vKP>ss#MxGu_^x6AiGePwa^~wz6kbv zYa~7Yj{D;%<*zF(e4>34AAAPQ(1vb%y1_j8RR7UYtn5iFjg(82vR21&AcI$Nk|63 z^M*U{4((ju_&AAySD!UQfQM)Bzrmjwc&otM>;!-XL;xUuNlDyXwu?_7v)o@d(f*)`5%V=-{l`Gq5T<4M8KHLk?yuaUVVEJc+wCK66!x zO-iCEVvZQrx9J!2@e#_COG5$Z2adQvWG0bOaH=oskZ{b!+9E<_k?HbSUeywbrqS`WRK@5SM;O5X}-`#j5p4cs%F$*dJ?DbtpM-6HIy6xmK|gZZfwN# zuXhIA4jcj%jsnzGr9tOA_;vs*{28DP$XiQGI-m@UK-6d8OodvpH=|P&J|4ib0o%yH zdI=0y#DKugax2Z&h<1j<0rVG))#OYyVTFHwUU{+_dOo)W{9d;Q*!{`nrTC{$+6-D% za!xBnR&iwj`Z3beqbe&Kk2cj}N<=N(HvG2rRaG5`M_G)Fe$r;zkxSs0eOWbPHVRhSf^RacBi{nrL zY`91T+?0&9of4+%$}1|Adir}`(r^<%uqY@nU0q#y_|zFIW8&lSdit#Uw|?(en(T8O z%-3qGYKM>KuXw?{WUbSal0txnG<>)hy#6zxh{ef=qE@6T;_WYaFF5t@1TxYxWF>|aCRI& zzYRt;P2pS8z1->vw6?XTw)SphHm&Yv&oDhiv-#4sp{WsIx&X}v10mBpgX?5^=MCD+ zZ>roe&b1SoxTW3R3*WUwyYz-%e0NT!AXOxPN z*MUd9TrYr8yPmE-VvZca&dv^vj1Lcl0Xr9Y|4trxf;HA`ba;-4K?+#YU~pci4S#*j zMNF8&+aJ#ztZ+Mh4}aJIFsVcsWPFi!Z7_w#CBUh&X88IB1_x8-hCWM1E2dF=f3;HNcuxg>c}uTe*LGl7k5=2oQN2Np`Q^D z*OR7-WotB4_-nAMe>d2tuO6i~g9z3Lh);i>t2Wy(f9F5kHZ@7DYcutHp{4O}rR%XC z8W9`eZ@>lS$^Q`Vm(59h`_TxKt!i+n{e!d4WLue9zj%WWyRKX87si~WHs(o3ivos? zmza3!u)E?>n^SJO)yms8cUlWn2 zV=1GO{HJosL3d(Tx48x|CUWweywVHT+$be>Uhg@(a=D=L>B~dr9N= zE;EZ$=lfJuN_rnaDC$F_ZBGGfS3sooT3_kHyHY-;uAcICHQOH^hl!u)VP&zg*GZ!_ z?pA9N&mQs@kCv{W^n({Z`F3HIAWOSE{?NVs!C(#g+X?<>xVkFUIU_7(Q!+nb88NlM z{C4MN+H=5z%O*_u(iPrx=orPDnWffrDmRV`JR#!S!V}7u+B*w&u~>wpSva0!b*&c) z6q&jCieW3$6O!f>^U6{@-x(G` zgF4M$sEh14Yo#@`oqM--H)&cxOPel0T+;@;X7KH_ZX``2f(qk=vXX-SgAX?yA{rgd zj63gwz6n}!Es`|8q@zPQIzktp(yBIP+#GS59SZc{VPpP?dGq^bcU1R0h)5T-VnG6jE)u0vW&2)vzuy3R+L5s6C;u zk9C-L&OdN-TTYRBs~>i3w5wtbmqr{=0Wc zwrSP`e{O?}EktcB5KF2rX(M1TVm@`lpt&lF#I3C%4Cx>HnCR=QV}x6s_m$S6oSojd73 zk8wbH+}d($vl1RYU45}~ao*WBh)QjM?0@0~N7%fxo2RhwzKvn#eKz2nzZ=OnCj@id z-w!y5heHgDAd0vqkrdFM|D<}Z3=0IB-$ zqH?lyKM+u*#eLbCWb>hO)E*ujruQtUb{9S*ARPeEGoAVAKK>wtx5J469miWpZFa?; zm{zr8_^cH?IK#-mH#W)*xvkq%Ueox$wP7?X8r&{O2D(NFbCOhKMH|H{)u)VIDGL zc1F9nao?J1dP_z$MSiywefU$wYTTon>tM3j;*L8!tcX*t&CN;kbUqr}ra!Tc=i(5P zb-G+X}sli_x zRoKT@%-1zhouGH>dpFi^zO#%4AZ>^owaW4gbSTPdCP6q~PhLD>U~fUA)>4h9d9u6W zry+PA`|-!vgeGg{sUnT;gm~4>eLxDXT^=s%Ocm$PpHY$V!JW+67I)OD>T2xq%m5La ziOFD)_?l*y?xD5`6QM&1dhEP6+1VBJ*U-WuES2ANZIGEJLxGIO>!cGa;I@u~l=Q&< zFBE-qpG4ee`Z@C#zLtEz0z#RFXDfUV931~vn2#ByZnCqpV-w>?17G1CbzJAr5L$TG zHn-J&k==C3+)uY}pCdzvLZj27ZFQT&^i}}7CMKyUX=+N%Ms5msch7g0b&X3l2b21z zCbubsfT{cZMkOEaQGraz&XM*z|MK?xbO-MwCS5o`Kt!atm(FfR4w$;B>C)noGVeM5 z*=+Z}d7)`sWFS&vc{TQb2I~dTi1GRrv|ReU^^MG^vTqke^pJ1dc5MSKd*h99I}N?a zF`*riL@UB`k`mNg7VaetdB$QhmAQ-xx-e`aUNr4g%a>gbQcBTxJbb9CJCJE^L zq-)gVx{EJgC^~*mp&J^KVUv$NixMC<-ckDPYY6y9hGqBqn6q1H5CG3AQz3KOpGNrn zxpTJt0fLC>b5Faq)*X`R<4q746q0RL&W(*T{^)tQ&er?*vZ|)brw}rJiPf#rALcV< zsq@|-RV}PZ!5Q>`4P;(Y)13A(0)p6#oq0QvjD}oqzo@6~yz#VI33!cybP=cB`RAF2 zYoA=~CH_pblShPUM;2g8W`C%)L`FxI%vaFG8gFautNI>|tqWHJ&KHs&KJYCPH|$PP zLq2`_)N#H$apL=M#aJdNNJ3fH9ywM%BKMu+S-SWA(|3Gt1xx*a(PVY_L%Z1?^nzSP*na(qz`$@H5WP(CLHyTDH+$3B{L$pH9baF|!bu8= zDDuL(G_V9~hpx+=vhrH4!?^0jOtoC_i(}IO%gft4 z&qC^bd)|5WoW8=V7v=nL0tsx|jZ|8w;7*S*X{GU!@k>eVEE90C5eNBHCCCug_?n<{oXY$f()wV;{^h+)`ij=p3g!3h5BRK^m$(Ubq#=1NTMkeryFgw)(p&y z_pl0(|HjLK+uOmLVVY|mN z5MOPk2tQLG*@FVkSOMZv;}(gJb!A54d#a!(@kE})MvU|R$**gBKe=Gw>1Rz%c%t^6 z+kO0l6dFzpdz_V<^mGKoiBIK{4EMtZif*rt*A}GXuqg;IgWf$FQ7>gVEe->zb-{(A zFFgu%+kFspo1Mfjh&fr@2V7s@f9qt|?TbrJ4zp{AVSw}vF#u1!yuDcs*OLmi%N&Np2`WX7$Uljq|4V)-ybNCS(SgmPT{R6bJ>dC=5p@#~ zwPoXVWEW~m21P$LL2@cQ@s!%kcGv=BYJ*hNJ8QMePhvm+lrY?oEx}vq`yXFpXD1ra z(*Dke1}LJeBt2d$`ftgnd1Y0>(gX?5rqvT!xHtZlL>u3jOjJ_pmRQX275x0iH$LPn zGY5yiUw$On?XiGvL-puD?G}duG~;n`69w?VocqmFT2?L3BG5&m;KkO}_r|L=BeKq=~58CP2|i-)2OKG*ZA7tAZ; zD`47vxj({Nykx)rS&P$13tIehv_XxT-g3rxoLyvtkgzb(JDrOF+IRCy{q>P;t_fLc z&Fp2ZT`wz{CT>ogZ{V-^*v9(a;bn!~{hLCW{i>q*vXqu^cS3b~_^1Z4o2(CvM%5TS z>;f=KQR^(*6FwxWZ`Xe>lxp->KO_KE-fm$vS-)D>$w~BS&}t?ijaNSQOHEa6);4i= zYpra#6Ns8a2G#tWKvSz%`uF3D+%vRXbWGZH+dJzSdK9(FFrld`6Hj<|_aZw35@Yqo z=Nl)zd=-2@sTazZ+ftxDOUg{{sn%8ApvtPf*vY2^x4A9Pq@ zNOGKKS7ph#zSTg(TN(r!x)5 z_Qg~k)63+B9XFVOWf(?DsnBW`s^9!=Bx+$Bqqn>`L z?}Q+gJhjEq4=Zb3`0wq+zQk@SIq2Bi;Pc%1S~~c%W|b_HuM!qnItXq;97vJ031Z{E z$&C+;_<9xyQR{o(X6_Si!SoWRweNS;qjW#4XVznanyVB;PFiD|aWnS`)jDDRu7P{+ zPdK%c;IsQf8^}aI-@eySD(hy>YlsGlI5id)my{r;*Otrfo9escXm-z64pwBK zI`+rZEqp@ck|}!TuaVTZQzp(Z%G|Gs_(37$3ahE)&p~F&-;FL_3kFc&R|@9+=a|0U zTGxN-PfjJgQk}$3)z_b-c&ZNLn()usFP*fc6~2=-kr0{eSSOx> zkD8d7gEFKkjkiMZd+}hA*OghyOJys*r*PndqK;{J(NUbEzl;Jg{KOhqft9cy5vdma ze+}XlP3qUAxIXw?XNf_BGSjq{`#2@kG*R$ADmcOPRju{rr(bKz=i>94{g1)-Of6}> zE_%2%3zbo2rX%1s`}b-Sfq`F1YLA+Tt1TeTHwA_y;`V`NAp$Z7a@29Zrp5of z+Td5vIEhx$PWs~S`pc_mtkQpglP=dwd~wtMp}ye-^V0k4MiRcJ-T3=94{Zc$=PKty z(7@a1cRN*8;Mni}y%b&mMF6+Wg|&|B*lL^z^qaJQiH@)o7CGL~w?e$xx!?8MWZ7FuqO@|%dszc}0sW~(m75V3*k9rHY` zqXxajc+=JT{||L<0TuPzwF_e)3IZx1(gqfOHR~AfmK`v@kTx5F?!f zBGMf*G)Q+dbewzqKhHVqtaIM=o%ej}JL`Nb*8(ShzdQEc*R`*`?@~b@5hh!5B>~5? zvjZhg6O`l$DSh84v4IA$A+*$Sgu1D@ncA2IylboSO*VVd_fcQ%=;O}5^;Hkz<@#O! zBshBMxGmNQb+=G(>V!k#%x!aAnKMz;I%@^I=Y0z$pV7$gdUqaF(X`OfRZpt^dWR+{ zR`B}R-Nwd#DaSq44ae5M@8n&07Rxr&-mNImuL=+@vt_NQ z^(wVnr03KtdMZt$Ar+vtiZc`RI-RZ-d|)9F!}>HDt@bp(*huGNka4ga>Gcru{l3o) zJqWos3{_S0T4S+FgZWNp{_4-2%V=cRlt0J3s$_ z^xZ4j;pb>!^pUEsNeiQ?b{qzL(>3AvdK%L{H zC&?j+q5imCp?z^Vp-T%lWIvchqT9@i-EIr%^=puL*iRu$n|$oFL)G|+ddd_6A5Rkl%6E2U+YGq=Q=7+eyVM1bbT3zk)RKT~;xiN*5N{ zn1ZQXpiWu_tzVp7Tr`3R=h1mq9&Rhc#_sO!>eNF?Oh&P4c-~J$3-xM@B~&h?-@LKH z{)%4|*w5mDW{P-hEDhehB=u(wo)@-=E&t$aY}y%VG|{NXQ~2Cf4Z5IRP1|U2A*q z=NEO53)Dqc?jwPO8%90E^r;Nl=jMLrGejA<>n0=;$veLS8~8%j06u0`LsddKDV;5b zJt5A*BAHCso}*48m*;3*)tSsW`h3uNLFLr8{2NdrrRqrQG~M$q`>X{ z2$RzB@u>w_-?aMu^*F{DRtK)(22c$JI5A(Ry^S%?4c@WZ8MBHRLefn*;NGGwI%M+neHB zUePog#pr*b4nY_hctIeDcM1IngNpK$m0oF(+>U0XU{!yKg1E;;M@NGOQ;5`5vi`Hw z5~oILFNo)3W@hGr)lBV3aA7u>{6ZOG*dV~6{0`?*OpJ_j(4D!qjNIJE*riFWECqrk zWc|K%Q#*RWEm%}g&f(%9+_i-S+_C6QW$x0VrqH;=D>^0FO8j;!=0eZLy$xi-X|oR| zFH|-B;o0VmsJbLW5;3_0?;X*f*KjP9g4R@UWrC(wL-&yS8mZuiYtrvD($p+YSd1szI zk=FuY>}!#Km&5S;vYYxqxe~jtz?<45ujlXUn|-&67?%MFcYK%u`2G{?-BpJ=tOQu? zmLX@jK>6MW2HEl=X@%HC1_=q9N+CxkYGLyqN89aM7oEMH-jq)yCOsrdnQZ#f6Uyx- za=l#qwWc_(gCCV46P2r z?fht|sk7tb<2eeVM~&{FP|+sQ^D{HhwW{D?@8ZS6DxnH5r?hu{;bLXcK>2yBEb=pUo~>4 z`W3;|_$z}cV*Uu5nD#c~sWR`#qav6I51>pe{(a2@M0WWvf^#|}>kntxC+d7fMplDK z8Pvk{v4i_?Wym^KkVzg$Up3EIl5!PaGocY05=|U{qGsxf+?0_{U=VpW_X@Ky(-f*r z1IV?D@qE*E(gE_XbER!y^Z4>PL65vzPRxMS!%cTRF`v;>49Z*QY^Ot!PJ}+wtR-;p zhm#91uaZDdpf1;H&8b_d>#;H3H{YSt=`q1hc`rA9=^oA~f(O---022E=c@T0m`aWc ztS=xawCk+GW@P-d^7)6$?a?feLc`c4v@9|8pw5>WzqSo%e3p~zDgx%8k~S+TS?#%< zu3xbpzv5s|!Ld~Epoh49=U;d)!DgqRMEUG~?6(0Nm>r>BO)aP!rT;iF*4UabfFS-N!S+o5hd>j)Y! zPM*4*u40!%C=UigEJFFMHhegZ%B3DW$Z1=OfdD(pX84C>u^SM)7TOsI z+AJVlO5N9mlj|KN1?^w94-CABVbj)ZAyI+5EJlFZ$RpOEN3u6Hs+>P0K3%t>6LVMm z`qjTkMWJzGDpjA z`tOw0qIPW$Q?2Z@XEQkF6ywFuO`&yk63P(~R1C3HWs#>R+0Fi9(wis&Olk-N-3yue zl#Nx5y7S>5XBNNxy4Q-fp2gQVR{2d;$z}wTs#;$_S&e&^?)9F{g25WT#%H7rW!K@t zZuH6fuZ`q@=(WxG#O{R4sLEYQtfsU=&lhvonOPBhY~k>5rL407{f0f{1WS3dU{!5< zq*Ac!LQJBxo^d(D!DCiVK*VH5>3Ru6kFYz0AYByP~A^7k@J1t<+W-7Z1p;dJ-|F}#ek5_oY zrlUN0w9=yH7t%!M67tjro&R-Zr~nSe@_4Reli&O&Ut+yy7KpE`$Nf!?tda}HDCnJD z;O{JIlr&?}xspaMF#oCAtfr2krJvJgAz!|zfmvEX7Xk!?RSw>S~v$|R1`e?_2f?Hcti5jEe0?V!__@j{{VAa4YZCIZMWjY{+g10v>i_M99u^=!PEbM|0N?C}do-#hhkULpTka zLXT{o!{~*noMqUD?EAx8WUT)`c9%DB^3asUn{tr6PjG^xx2v0 zsb41(9C>XS^f1|JUxYWSU~t3IWe3IVPYhC7NAML*3`_{y?3UA2yB;B`CfcI-^vi8f z-5--d+^ya=(=?c7M}+^4?Q1@%!YGsdV%52d?Er?3P|Vv{n&{;1pAs>*KU->c!>2U> z{b-_Wq_N8*dR5NbEtm10@3&#QMK){ARv$Xwv9e;RdM0AKjKC5;)-o(v;70d;KxzGC zuV=KLA63$?pZCCR61uT+RpScLL~+}+5K4ALz$CsaSme0fwXQFqRcLr{jz}IYerfyk zU0;Ym(qNexjhpq941Vp-@{m`kR%?qvAs5%N?;`yKiY7~3tR~kw^u4Z(?8462imXj=Cc>f3ZZ%=^;_g2XJU^t%(CB{2@`Ux zJ8ZC5a55L)_(OH zZ}8|BjcnVghDXH}B|7jsO|IKJ6m+6KiuU$iT40o*Q^eyU>nHE|0^b!5ySU0^ zjR$GY9v%Z&ny=Ns%mD1I)|&9d%WHlBZF^hTdm~_Hp({h3>6CXo4p44Hd`8#ao|+rk zO_k}))+eM_mmv}^0%$2IbHFY}ctmz1)Qi3|F1JC-+>Ukx3Uo`en$e506)6fbZYS*aoAk-^M)xny+-AzaD^O2Nqh7^6W|rS+hpF)J6zSLc zgzG=GeJoEckO{kU=g!>9%0qdZ{;eCn*onvmjX-sg@GfYb8DIkZcAsLsvy<4SrU)kS zYh5`-rNFXPa{IoV%sZ6jYfHhYE(hJyT(wMm>Kg$P?!`|99VWFE74xYF3oKILG<-g( zYwP{>nLI~+3Ku9Mj#-Co@39;!$|Lex9odtoUHs=s413KA8FS0aT=F(!#b4@}1+jc}H(&^FwfrL2(^D21;Q| z!N7pj?xKd73$``ow3u(UkuLf3_eD%1*9e!aM5)kl$9C*SmYBXR>MuK`R@I*vJ+-!!_O;pb1 zlgBEaa@RWx7^+%Xyg4z?KE&bY5N$lRxU}?`=?GeQQj&G!#*L833cn>@XMYPf zR3`?4)vuIp`600K>Ytf`QpKKnzh1Y6-MLWGt#Qi3*ejlU5fO_x_!(x{Fs%<`a~3#_ z(!6s*K5s{{rmem0yGdtH)V>eqJjjG~H2+&!pE}8c%?L>KQDeAPBkICHcCe%D` zda@>Gif>{tTbhiHh!E2jrHYFzKxbL?8f_&`eTj?%uDneg*R58kpcJv3uKM-fg(>%?FTw)A>mG2}4RniR zzh>R#V6X()j>w1hRIqU1%v+n9^jLVy9RYXp&lv$Px)}}pco{XDLMdXBlaqz=Cu-d~ zPLE^qrkD3U_BZNgWn*I#)|2>R@;UmNxWX~l(z+XRA$1Omj~|>_HKjhLZTV8RWofO7h;3;- zONMyGMs+HMy0<1+yKutX2}XtT2qJ`79ZsGbn7jE~SfKK2E5HyW6tI^Ga~#oTHbI?m zJF_f?!*A2I^SwF~|4vmM^^u`TnO)yYijEkyu9X-jd5=vQ>!TIoYR{vPY7hIIgGpLj zafa3*H2C-h|QvWMKc9?F{c23Eq2IDnJ>xHZ(|r8R;LF zW}ll`%TJdkTz;#%g_`<9<+CXpjY92oG)^eFP;%)kk`w@=sa0THA=GuQFX)he6sptS z*C5HHKt2E;NK54L{(5bH-MTJUf>pM~d$rT}hvxQ;?Hz7Csi9ww_+2(k@ng4#N>J60 z{ryygp3U_~82N)Xvn$nLzjo*#RWOmkEvQw6{SA>^!uj^r#)+=r>cg_Kkp!#AE5QTf4sbhmKB=CRp*S-CUOq8lxX){A0Ayvy+&8qp{u00IU(~gP zDw#udAsDPWwKm2JSI}jRFR*6t{0(G&eq77}20F`8;+CZy%mfQ8)#c@S6q!)!`ffPQr_DstaASI7t^Zgu4(h@>6zhWRihWbRUOv&NxNAlOJ)cGruUfN}pNm1DX_ z%WT+KWM#XIe<*(SzbKHxCt3j!Rgyz#6o3iDbiD?Ai=3Dfm`@h)aD!<^L`p~2+K96< zyOEdO-OBpK&dCo8r=oQHRIqCpV|1RT;`XC1dE3_LF|9m|9j0vSdewYa9`J$i7h`v! znZTjhc5Z!06!Iw2Mow`^;1FJIkzWF;cU%@k`YTg4HL=La)REn|m0i*)Xi2ojCtnu( zslLAHbMZ>}d-W!PA1b82$LKlDRV6!v1U2T=%wz0Eb{UP|z#4wX+}s>);&5RMA6i9b z(?|wsg>F*N`6d`{P)PG2?}VLw)dGtun|s!wXaq;UXdQiChznCVETGvME+&Y2v%`IJGH=^NvG@E6frXV- z4mCP&8LiWTcs2j34Z}V+n}KBZDZHpXD(_APl@x%--EQi$8K~AOb}uX}BqR}jXIyT3 zK<|5g6esMs6}7g$u7xzFLt&d&cMiB?(lL?s@r?4+Li?QZ{ojxhPwUJ7XLu1FwNXbX z?xyc@mqX(>mWEC5m&%#9N3_nl&jP4p8H0x#RIrNz`##r`V;R1hrxsYvdVE8OEE~yu zmP;vfvtOmYdjRYoiaoAW_ku)(HkOSPJqe}mr}4J5?N}RTAO|6(yoS|dkYX_VL_7%E z%kH(sO)Y1s1!7mnnL;X^UYs+9=7GHsy}r8F{KI2PQVCY}oJ<_(2j{CPh3isIqoo?V zmv>1gp}?;&E;oX{5f6TZ;VeXcc4wgpTq^Zj!}j(;mjN!qB%u`twdF8v)s(fW81THOG{B%Zpxp&_sz`Px-qZi)6&vv7An4n9ISDGWS)9{k}*m? zSLegp;H`|kn078bUcLLE)l(nJBfbWmgs z*Mvg}ZwM9CpO5COpf8U4i`^$6;r9e&KpQ4VwGJr=l!$3~gr)ss%N1-Ieli z0PpnaGF+DNnWGDxyRIhcD?FW`o6gjpV*fzkk0yUc+DMPYVyZ%au9HqP&um zup0wRxfT+-LoKQ>YM>s-WY+V}E`iQFy|VHd5PEzv1zlY%51$K(2+2c1REn`1&6Yfa zv?=%RjSzvw6V|K>_eljVh{9(j>~hB;`_re&EFd@rF?w&wA`WT^I!tK49rh9%Kxu?j z^Vax*o?)L_T1X{&wBNnUPhl7}sdA~YX_$#Qwr&u!(bG6Ha8U}3UTISEs+x1QOiU+n5t+>2e$++>mmr7}TYcXMUJS0K|(anV>S zU_-ze2l);x%Bo$|0-B|7Z_D>Lya+C}=y0$u-thXN1`$wO0YCKLy{OW|A zIppZ+?b)UmlhVsO3mKf5IVKX<*Vg!L?F4rWf19k0|dfOt<`OqmZl;$}Zt zTM!?wE0Al@A!;B1*4oHemfwOW1k2pLCl6v&C3Sk1Rlz(6I)oIf=N(^k8E?y>`C>W$ z@xzBw^>!yl`}_MgBk2jQ5F*h8q#?16re^7@lQ_9@(Vz7n0mqp#qhO&v zIcdDm0tnKOFX38-hP8#pL_-s~kHcZ{KJLBdysTiKY#&%j(Q7i_KVtp*!QyhM{XjXt ztsL?!CU1y0zX4igP+XA7F=Eek^37z8MLD4`Y9Q@+DS1faDwo9%B&XK}LYoUoY~ZJJ zpuFyS_%@17>!xN=dQchmz{q9@0Vkomp^grj*LWwWrj1d_vy_!3m~Xd0Hns$~vN39c zkk?gsFCT1ZfDZ@q8xleGKhJL>@%T@PgJzMB9{ypR>OA56oY8%M#QH#Mt&S?EM;~IBPLy$sM?eFeim`#RHtsK@EaAV`Gnd8!+}3&DVsThbVP5~) z3IB@UmV%Xxi4>L1@0dUwBXqDJl53*!?`|MdAj>D7|b{jw~xTy=P@UvkCE z>DxnYU^tHVR`Sz>h^&wEgR0$5A|hxd(jJ__BPl!g89-pvGi9620;kH2azmm3SH0vz99l$YH$YLPv;7ZIKBhq(?4`dX+w zxJ%QS4pcaO5JoiN_rwQJO=gyzLZioj zIQ95dGGGkwo%t)Agoa!0F7btz~}xOaq{v#d!}{fn4HTUE-0jX9;UZeW|Z0b~(Ri?Z*yAB@`Lx z8)&yoqINZ?g))&K46vOpM#IbH!?Vn`0H^R}rf&3fOj&xe7R204-vk}#k0{vFV{8T6 zzr9u;>1TDQgD$-pQdt3bLzoProbhR2qa&MG3q%a*>FHg_9QW^*j3ul8A@2N^9vQZx z#D<#v4LxAdo4PCF^-BjwWu%E&H|oP~l43S6!dmyxxC`7z?snYIlLEa*%< zb}-_~48DhThToF~Ob>4n``K3-Q=cH*H%2*uR!FGv|dx-UWzoT!5;fh_Me{-;2fNg z%VOKeh&*@QmQS%bhy$^s{*!|d$^MTY;Nk?%C`Mw2lzn&rH;P{dh(0vPS#D-Y^Jh(V}AtF7dS#*t3)QT=4}wTeyviu2Xw@Q7y$PKOt(sw zBSbhOB1mwc$dX$Zarn{mD2^k|cKS9BF#*@R3WzOrBZmr-YhrVCJkkgM(?IsEz zT!G|NCGP?6{=%}^-r7!&u4cpJM8Ng6gHk-dQd7uXd8eV8L37KSTI^cA{V}VWWzJr^ z%hiA(8US>dRtdynx42Yv?fA>i;=#AT7hE`MX9ZnY$ga~^=7W{+kC$72)+J{-bOW&L zCd#LhJ$p-;J0G$@Vvx>mtjYj@&&=!1RKQetv7PugY#abxh;w6f|!XU?;vnxUD#cYd8 z?UK8ej82df>`(UA#hLDi3&3=GI z$mxj#1)HvF57vKlhUi3N06aC{wvNzReY&de`Eh(_L2E)E4H6xp{6otFB_)Hi52U?PK@KQa z{pk5_@hghUoA_|o{gN__$~P7d`*138RlY?o%nCMXe$hY^BoZ*(C6uq0X>*p_)`USu z4q>usuU|7Qh@%CRl_L7yh@KaoD4@_aT<8nwX(cIAcNiofW9SI3k zRG&94)cg-vgHL8C&*hMvZ08zp+$LXB{62PxU4H$bf}RC__Vla3n3a_s0JT5p>wNX( z`xz+x#u?9U&%eZsG6WJ3_ljJ2cd+^56jaXAS5!h3z+o(d=Q z#k=VxE(rCcRXW`l!RgIF zfA8*|BQcpEjUO zaeh9=WWX;zpOB&*JOq@7vLu52t=E8Ny1*Eff(DJrt{b*GZA_x_0Q|~Rs4z~ffBm(f z16+dV+>-%|AKWZH1#MF*XaKA1j0j&pBPAszrrH0V!XPw`$pW(~$_rSFHU+zO?{uSVDW9kzsOiIr@Z8Uf*cEe zzbk>y1iIIyV*(n;C_%}osS(69f_h~Uoi?5wjy z*#A5L2U)4=Pjd^BhHTGk^%A${7ZWBYtA1!4`;IY-VKoib4}C)eBIpKtB+lpka zyz>>VW-n5 zzXWk5adCW&Fde9m524MkIGF7etcKiqC*J+EPTI_b`jPiZsf7LFFJPe!8PfeubR*%(aRmts`E`g{9D;`y#7#m=_82h2iS zRW(ZM1R#{diu<7S!PE02`b6=j4(TyaisEEggydWOKQEm{m+c;KXF=Rna{(sN8_o9k za2ev%xvO7ingz&n4PZ3|HqJbljv>rzR}$i3rywT$Y8o--{F zPohCgQ0m#ni_SC93BB8`b>#d(Z$$(8{rh+R{U#p$BIg)T&zg~~M7?@;FezV#gi9!D zR}>~w`0QlX!FZK)kjCgx?l8>KqHK1RuY5a(3vwBP>3mjF=zME3->rt4WlWOZ&|w2eL2bp)Yy@em_e=Dy z*ICO1KG+LFwW$z z51)1YjB%xrzoKIa>KmP=fG`o*=WmQbQ!rngDFMZVowL!5pou2YKF$U4{^Fc1_}$p} z0-S1CVgsu`E9V@6zgg@tQLR4@bUXcEYsRLXpPEpAnt2(&_Ag%^on>dqzg=ZIZxc>) zP^e#Fp9S=!2u~*oPJ?o(3j2xno&8Udv;bjA70-jCBlT9e3+&9T7+{gGRFLbzopylG zElU4HLX|&c?5k(ub5vG$xRVz=`KfHof>Nbt@C6%A72l#57vt$QUjc!YEOzqwJAt@G zt%6=9=ei-(^>FJpP*IAEEQf>VN+4oTP}s~_U{WDDf4Rfva4QXJE}qQE`Ngai1ewM2 zppW=BKwR6O`)Yte2Z-9X)Vs$RG>-zP_iSu42fg^=%E7TBM9HA0+>TKm^rG%jhb2re zEM(_+V^y18QDD1%Z}Phi%L&*zIh^=Ha(t`J^*QKz8pA|t$RDfz#4!Ce@<1@BF8tF( zQj#TqbP;GP6D9o9AbU&MpufP1p>WR4YXq=C&|OXo=rg-c-O3|qg>2CJQ2ifoi$*IP za=Md+AB&0_8kC>M+Mh({NNHv{Gj%2NX?X9S!d1jk9#%~~&Hivpn-(ZffN z&}nBHY}%bVfLq~G@bx=y(!l`}@$jR9VC57NCYO1tga2*lGDk)T{x|f zB2ZE43^a$k?hLYusUcIoHI2wBwCp~a?dAg7-MghAWN7umA!}*@L;r!fCE$BJO2BlqR$V zy57B+VI95+Sk|mpypt6;u9E;5*~Wi)PQcGVaWSKOi8gK{pikU^R%eK;P8FDWCV8A( zw|uIi1EiR-u-u%PrZYx)kYyTRN7lWOBmUV4it;h#Q%~VQ3ja64yFUiX?sDBHt^p^I z{^soD_^#HXGTmUNlNnfa+V=ML!cGr$Yuq<^PQOY0d2@Jt7tJ8jFF{NJl5sf?L4lzl zS^a<&%s=fT!NzX_(eA&LL7tg_^Y14HahLHNrS?GC;y+pdyw_x)(1hK%Sn<=)vrCa= ze&j$pAi7cc^-~OL8#Ywzdga=E7C?VsKtFl=Ra`08yO0E~D}%o2Z>lRi25m&A zErZ>b-DJQ2p5Y~^OT6z&m1)(pK@GY(8X6^R|C(h2!e_|&(d`vXS?Iq4=x4YZnzbXf zN8h4e158ji^fwwOdHqa9g*2R&M-e#fA~#lWrI9!7GrtmB_9WzZOwr{ST;-m7?X@%4 zm&4$n8bLQUhAY2&FH4xlo^+J}rU|RN;QX$bmW?AoaF00@=c! zkAiKhi{%0S#s!h6qh?!YN5?<<+^4HJ3<4yb5bS(hsl~4FWdQS@GQL*8GgPeZ?{q}m2=&|p%&St;vyW~G;tgb&iepN zw^(*Z9C8UX?+*zNFLSegPfJG!GC|@%Sf2~WA_FrYt z|7&&5|2Jrn|Mx1i|F6ID=h=tHM|rLzA=cuu&i~WdpeF;nSnYtm2UlHyAB#-C6!>Xr z5FTZ2hszxUGnD(Ts-2L-L>hInHv~u~UQ~hC?%iDJj&j1sM#gAc4BCJ45Q)o?Pe{-e zSr)LAg4iDyg=AfBhg;;i>!U2~ip9a1EBSyF)IzV6Y4uB}VpjzF7iU=>i;Iiv)m$MU zT^^~sqE%U((Nipf?6Ry{}mG7fw?j(i~GG>3X zOdJ|3m?|iAE6eBaV&W_-t+h0+sqoHQy=%i2m3YE+KllC|G~}c?;t3I7XXhrVnd|F# zs;EnYJtx=|Y{;VMqE}syOZT7;`0M-Dhr@G;3#krFoujjJKwchu`orK~ub;f0IEJO6 zZHg?>k=Kb?8<1@;&bBpc@{p_rl9L&(Qi>kDw)3N4<>s?^}59 zkx0^VyAz7#WvZpI3c z{&gpJ>FGBfv-X*;mao6vT(q@W+~vOeA`fjk(vR#tjjT&qpCUDDjsWLQb0aC`DUtu2 zP%3r_RFdJ_lu=Xmz&y!ZL}?_5c5NJle=JBbQi`Z4>8 z5|5E3=l%np8&*AM5qUa=55e%@{W(U5z8x8*47h)P_ZO91mO9?^H`7K}U2jN%BbJAQ0&`5h8nWFOOhk@Wt+FpiBmy+3jzxxswN7+B1Zu9n9UZl=H2g9b| z1>7GT^#kEqqsPS&J!p&4(EDKe-qERJ?KWnt_btCAmcI7f>|>FX|E5YpSZ-_DFv^Mn z9NDsk^!E+!sn-o_i=J%o-aMbkFYxy(ArELh{Yr7?OJ#eJ$mM^v;Mlu*eGNk)lW`kt zPk|WD6HEMu>7T$6ZH?K&cw4IxM%ls!6?O!8SMjfnP7JLGNJ!qg`fjq4WV7~6&=vG= zGW}KNvS>drHC8d@{aGd_;$VZO#=GLWEvEUQ*sNgf?!Lj{P(??P_W?>5Bnn*o4L?la z;cd`wcyh5_?va*GZ5en_3Bj^4&Kx_1!~I_V(-njSyHVpWYue9q>f7)A48q^Acc0i{ z^IG=rd6Wms1D@r3*~&>D1_$|bfU=b}#VofWqt05;R-^T@69J8jM78M= z#)Is8jt+L8Y${2q_w&^5kJ5bpLUk!f>O-Gyq{3mK z67BW$VyNR`tJ>TmWvYC1^XD+ykb|kDch!qG@gf)`K5*CTheX5Sy*6%JSZqU{|2dgV zBqU9H0Sy|l{N13Mc^qP%vrf(PL4W@nS(PK~`r%a;V)e;;i4k;_`eUgr2QNj29D4KKhF36ea;`rzuxk>^~1l<{}s9gGnR|I zsg-ukTbuDA-@I_4)%Z2M(zS7N@dundTj8pekH4=7zr=k`I^p4-6ok=yt?qqH^o*)! z&hU)8G?`#+F(Y*{!4Vqr?(g+tz*&Bf%?cFdHo!0L=;X?M3ua^7Gnz;+Cx{_UeCpG~ z?pVV4H)K*j9(pq`kJZ0}`?{50d$}seNZlP44 zuI}jI!lu^VO_wG^J?mF_^2r)P0r$E4pxX>q|Cb89()Nw~o7b5VHzAK|^*vMFDlD^i zeu*^6g(;PcY<&GqepqqPF#U0kI&$O=kdW4+#Os<@G5lHT;dUYi82KsOXGOA$%LT5K zb>`vf4#NP8(1pu*{E2t+_3H7hsd65CmAi$hAxMAJ_~3ego{{%)?~1E# z#WrQ;cTs%!%K&4s03J~`TGMS54_tscU$277n#$_W9HZ>qpG$XJAV=+P9QwzcrNVT~ z%18Ga9}#32#3|#w|2;=GTl=Ev{D$jXB!DDh3uBAC&&osrWD$XRc|^=%zL!*vj&y|{ z;rj5seRx6 zgnA9|__mM9J#!y7l>oNrcPBjhezbhiyFSB@q@LICQU_vYR?3p%#q4@DRd_qtaewXEQpZN;aPmil0G~Lt^`tM!}2sp4>%1<(_ z=@@hTn2qa`vQ9|kA{Vcn;IHfOm(KOv8GY}nGAb&L`ehC1vvD`{)q3RqT0E)27}K31 zYp-0qOAq_brl2naTGu?mMBPT?GaG3lV^pez_YXdR%T{tZ_#@S?h4(YBL-ziYUsHvd ztBz8+CFoq~X+%D|n!f6$9HjV$Z>W z2D6aCyofu1K9|c8H>PjM0;boTE;@W(za&_4yGDB`j!zj~IBnW5kZC7DFhyVRXR;T+ zo8I}O()IFTZOI0s@AaNHF44hw*-6(%Zv>M;)y`wwz^DbteJq|Cul0F1T)dvv!WjMP zHtirqkwgm!zS44azf{`Q^ok5RkC%@U-dG744&PR_F#dNK`fnV1zAi>A?u+8-M9{cf>K|sg^XF=UQ$Wx+iCkw=Q{FWUDrr23p zW*xc~B{ein*$f2D2qxe0Qc4T4DeCTv)*5*0zgv}4Clo$Bkz|fejH$34Ak50jdgdWM zkUu`MJQ=;^H+n1BLp(mnV(R>JYT>2a8)mW+q%15#lNW~?o#$%`uA3ODz~h4gV}lHt z=eMpZCZTRIbbpVmt@XLNG}MyM4c81|9awyGKI8DD_mu=8smDv%PiEZ#Ov6<y|>unQ;aCzpaX$@|}YHtxuG z+>g+IZJbrri1li|q2d^t_<&byszlT*tF3V3|H7Abql`k~i>X zqS++Md51jn&J76mdh=GUKl~z zePLeOfctpw(d$~tJp^V)=F@jL4ETo@wnd=v0lvX^p3I(AD4ksFxzK`W3fOoDo0k65 zAX3llS1#suwIf1a?l3E0Gn~Loizo8-Y2H0?5#?uMIvnWW)?LF{dRhQ|{y%l@!?FKQ zzSW~X&s0zn+&SfLw%PHwim#4qm3k)sgX7oF>X;fWxBil#!2(Q+DIln>Gi-rVJagEa z(6)j+-lOIm=WAvl`ue@%mV_7=KiBnRiFvg>f0}T8b$|@-2TN4t4+n+Vv+F^^(L7Ip%>*H7+6InR(o4sMp)o+E^1G0nD{UUzAS z@rN8HWt8pd@qWJLpYhZemV#~AyKsSFY;}sqZ8vt-0@b_Z=u0a#OqEW;M2jRwQo9l1 zeLo7~(7x>eJ!NL5NWoGb;Jx?reNn*0Lo302?NP>~``6#A!vg@)H>fD-TnW4Pl-xPt zCNRb?t_4l+P;|({?q9!m3qxR9bWd{P@@szTK0d}<0Q2S=;1#<#udnFj4NU)Ta}A52 zx>lulEhtzdoxZX^Yar$!&-~Tq2>MH4)s7n)JrU)lZELaPuHkU_{Ua@^!y>9J^WNS& z6T>PhJlj%*mK~mGNt^A+9Mdv($%%ONZD{CGIv(W~VMX!$f-J$HPlUq+ZuR(OcyAw-`e_SB2u#u zfLm*U9Yk=gd%*$ z*=Y>iMkzz3vn>L%dG6hOd-#0(UlEDXm|D|O{>r_My&J^Mh+(CBcX_VMv$FK%$vQG| zCgiQqj!-*jb(i$!)Xc`M*YLQi`ZK~rgHj$yTDqtJLs=Gy^PTh2g%M}I_dR0X42+9a zM!8bpZLRFwz8ZxXd2bn31-I>sF9iYVkdh7oK|nydlx`3akZzDh zx}_ULq)R|L7Tw*Q(hbtx4R@~hJ^R1+J!k*Vz0dt}KU_cY;9|vGbB;NFF~+cblvNsL z)3jnTY9oTi(!`u6lHcJdSkUn&2pYeSR%>&@F*?ei9j=OFezvo|jvPr&{x9i<>`h%w zjSwZ4{xaxvhm>et&(CO~n~;XV zuW*amOCV*@kg4@A-`iN4&A^=_s%@SY4ljNh0~LGrY_0>;YhVr^y(~L!E=soMq99z; z{$%``fILuyj$v@1ugjltmYAiV{){0?YJ|TSMb9%_9OPZCb)r)h7eA-Zzx^xPMZ0nc7RsBJ$}^;^tZL8bkk7^6@*AYJdpO68u=!LUwU zG>WRB>wT}=TDq}3 zKXZ(~N+tPnbLjvvUdB{;p-7hDM@-Dh+?7n(7vpSK`SzR7!o&+#I(RYeH&ouW2+bqA zTaLS%8x+w}EQZ&A!83&O1G7f=-$LxHO~dwyZ}}Q?Pib=(3Kw!GC>sH z*t9W7r;j*)(=O~1Q(826^CFIK59d`J8!j@&MJ;*&Xb>CJ^(%ywFi!~Wyg)+4sMlU& zs2UAoGF|i1O-M~|i73tbJ=eH>poqO(uA*+&zE8D1ZN8WmJea8~f&tC~)`-54)$65( zi1pSwFZ_kuKCU;XmI{*;;5}jeW0p|Yiq9JmE?^NO5c~z~UnJZ=Mh^W8^Ff`v0}0&i z_j=L4tB{S9w9%NZK${REsm&*xwFI!vnW*LFeDIguJ&t zWQ)^^X?*5FNXiC7?YF-rjn)`wJKn`ZE2sBcs3b3&9J5w{Z`Ek+({xQ7*V^jyz2^MHYNRkb>BZIUi-$6TqRsE!3eA|3bJN}wA;=J=#hu`evuy`Y# zYGbWsigbL)#bWsu6P&33gWQR`=1M|JAV}W0Ap)=*3#OX?!EvaWM*!x-)b_sjcdT2b&EmVPl;~`~#I`kA@e*sEXtZ^oi+X$&0)1r z>!X*6O;&$Tv+mybjAbP9n?yU_&ibEq-4D0uNq2XTrKHLa&p!La>ZOkqeAYKG+|Yw1 z-==?T0qa2fLkibzrlRwbh2_w4$#6pM(|p?UU9tOy2bk}^TsW!qPEm>;orE7jMFn4m z;O244@kz-vGbHCfvl~WtpY3@HW-n0`l8E!L}ob(Uwg=)K4&-A;c$R(McW_{t$K=Tc|1~k zV;1~$RZAoa5Y1P;XUHc60!#5ytAm3*`L7WvBasjzsFyQd;>g-`fbb+M`Skwu7{%xa zK>ssL4bq0#FP z-7<~-&E4o67tX`Wz6QQ$TTelFymgzQWL&k&w6EHmLj-rO>TBcY0;v~RO7!d=s%2mX zGXOd>XNhracbc!R?GX6p=1b@uqB<&-Oxb}vurg%yQ+rY2)uk!7T7`M|3l!t!_yvB< zx+DC$8%^B0r_W`dHpX$1jAhq{`RaEKTnEo%Mx>|fy^7<<1ufq?GZ`l7HA}~9G6ap} zlHmcp2go$Nc3WZkjc-@v!#_ z;A^Ect&idM_Uj$k>ZxR|N@q!B#;*25b$PqSW{vryF@^f(`Osrq)##IuoUAq6InkMT znZORpH^=89;)@fT3pMUxw__t!?9ZKDgMZ3JI2CeMDT}|@EPfTpv#g}ETC@Mf8Y@C)>}#>{=*C40uK^JYg_x4!)|M8 zvZ{vNQLMi?DdTJVdY+?bE8+YxinTv4LrI;j(7`UkB*6`D3+hp>iq7pVDK_{|39H&s zaDghdzXUZoa}&g+;gJubKZTK#NT$V1aNR922s~+K8|W}D4Pwo5f((!3)C<-0t6cj+ zSnIgst>5+G5oBY~xV1+TT`;wBJbW6Y@>d)FZ<(6#cMfw}BxD41m9uFEMP0*V~vs6+H4K0Z?wfsR@8<$1Vu|@27f=6(7u)I)m zJs|5CoWH3CzLs)%!_m>9pT)&UWc|1ON?DUc-?SBwnB_(NuDd>rmAFrO&_&Y&pyMmF z{K%(8XNDJP)APoM1JRC- z;Vr47qdCzmR;ti%QrqjROn4#vFoX;WOyICKx{Svf=zZhjjJC@9*z`ZfHTD zDYozMT>Bw(ukKtI0OG^XlL%A+Xrd=Zvac%581|2CA&@kA$1dhsNBzy8_Ywlm$o#_I z^qOBLY2Oe4gr}?8PEMVfBmzP^?zYkkqeuyOdB1?I12MFQ_X;NWJC?FZA?L(H$L8*q zd+(!d2N$^VT^FY7Qu$9bqX`N~^j)v%1p_|b$zYEA)_d2{y;5wgl08w|8LN`D)u{i1 z<4rCECx4-~6T8g`yI%iKsK3S>>_WW7yJEa3+D4<=uI0{wSqW*V8@HZp@i;UwkwL^8 zOeN)eW4eiUdqf_}3iv>9RsIM0myhcsLg}w%1x^VdQ|ag{Z#~NMCJJ*ed)L7(ZT{hA zWVq2RomO01Sb0@-0b@lr(GYe8CYYC4+OO=7_K*n{Eqvt#ZLJ~`!T|%B zU%vmrLx7HPe03$0K|)qAES~KCE=`Yvpx?6q#2t(CCnOct1&lVoHzt&c&z9@+gRVTj zRp@KXH|8D3le?$_qEN-sfP(Jlx%P|I*(`3kdk4}KQcKLBR}TbY;12y~YX5-2|2iG+ zlm`yoE!8_ja?+Y*>-lJ9s*hEKvbELbV`B{NRvM+-Cu9(0M1N&n+bH3&0l*d>(H^{t z`cFWSpJYXAv-~9)+I2;kar~6c$1_=4`?MBEMvWZ=(|M$%_LF_oEB8U9BQN6_=bpge zWe&fdn+eVkNOEL9ns$LLZgL|%Z5GXML-=p27UG z`&^IZXrL7ULR9Z|botVuwc&vRnnWBC9kn{JU65D;2L^dVAoW*GBZronM}5=~Vo9lY zh@OJo28w0J4i;)@<>k*nluB^NvUjMxFo33Vv{P^jk}YUyIdK%=4{F!{`5L)kEZ+p! z(+E(wrq_GwY;AATvKgm)IrQLB+XNs5SmUnpX%ujrmku_3N;1T!NPJYOTc_Sr6&u~* znNQWDwNWB0|H)m1K>kUi1|l6qw7|8|7plhxgh9>GCyExmVPFHhgaF7#dI}GX9982n zcmoOPjzc=HF28WwWoDX;6ui7=y?-(05OSg_IXBH6{UFbKx<&5RXz)af7|W0?Yk}YA zs1NE&uQ6W1xsC`5vC}>ToX4F_#{x=vbDoL-7QrvP@{4jhONx5ymGELS1ga`maxgYD zW!)-!l^jCzXH^V0R6ggD!VnIF7^T_oZR~1i^?Nx5B5<>G4>IP!mi)iRGzxpn6y$l* zAnTx!zkvtRlwYgQ1v(~HG`Bqm4vD+^tL0%%^`vS#i+@1hn83ROthHo(F@;_<3 z|3FLsLL7sHpPyC9@A=f1%$4>qe4 z7G=i;yBab{$2MppmV@v2l)HRNe#cgCOA})#<|$28+G;27LdUlc2bvyKR_z&Ik{P@6 z;faWZpO3iWuz)7HzIF%55Cx}d{g$L$kiyb~R0Z<&+rB33|J+U&+IhlbNJU|=U;6ST zt|OzyGIHo?z&k5n6%>r}{fT}hEvIaPppwrVv;5!V9zUE5fRLxL$}+b4E>}r^cCf*| zv6Z_+hfVGlsz2A(HWFtg{;^>$e??I={O&iVb(%zXhc)HC=fZrq?XQ0?Z{Z|ui#kgwN~Sg{CeL;-=#?y zmIZG%Vf9X}^Romsw(r@#*JighNdN8vaBL{qNe<-PNFc>#ixlR;54h5J{lLi65tdk0 zV%;Nnv}Vi(-fY_VR$lDK?rn0#dP8R1|Tf527l! z-o-Zb`ZLa`e5zl52#TJ+_)@_54ot}fcylGnPr4ZVxD>&_Zs<81oKec%;I_tt$9RXQ zmW+;*?H0Nm>4PP(L|7N`&hSP(aTPI|EUMy;v_O5_c2qHGzSgePxo9R~60r-W*u&!I zIWd=a+$Iu0IiGDw&BGjFfc8y2S>?eThOsdiP&mUNAtl+7meIAez3u%}U%MGx!pcK0 z!FiZzX8_rSrc{kqT7k5aYhWfNb)leN{~t4?&|MwdR74Uv2{C{&!Dee4%4Qs8l~Yl3 zoE>xr;5g`sZPxOMGugXL#nk}z9ogBBrtC$UO+nmaiyi6m#?5W>Bp^%rWG?-03GLl& z>3;`NqO~*2aI0SAPg?j(6?Sge3bq#HMp@q)@SKx!Aw!UMN1x)eGH3h}L4jQE^&eO} zd}*CN!G8qV${tFy75Dsb{Jf5WR8+J>^|dR#k!)h9v`SGtqptdY!DfY>mGllczn`Nu z#_^Jn$$8+oo|BcRHHB7i6%2fyEJzj+U;ZmpD>vh-gc$Azl?`Yg4y()@8$W<@ z%E1DQ7AlHrX|L$=;C?$wTd&&T4U*LQu9FaD=&Cd4-~1TaIg^m&_Y>e3hCuGF{na$} zxBze$6BB=n2?2buUn^XdrE&cDU-CFBAyCNuQIXr$7@}$2sr=FWG?;wA?)_w=y1l1Oc<%M0F-zRU`oCOr4d~JT*cE2-<+ed=!6if2u2| zgk0!fAZlGp8+HwUsu|53-?FA;U)6H2K}|u%KqVzm{(Q#@uEXsl3{-A%UfQbO z)fd1!L=8*(3O{aSaWx#IZ&?M&gnsq%_*U0jOnoB!!CA)uaaSuvXC|BV^OiA~b?1v= zUEr5%24(RpnVEA`@=)PZNHfg+(@CQpd_ zY@S&mbB%_7)x)*1`CCq16FgL(A7YM4UtD!KBW)cvSwlvh!c|f{UV+A1{PIO>-YA&dH0w z)!DU<;w}om!ppFw^?Y-9>?`uB1yGZKj?=F#nHm@X-a-Nt!FU8(TIWpnwLj}=BV<8J za+V&MB{j9xAgw#VYx%JJ2!h-Ab>|ELSUtd5OJC8eTgmB7Qm$&uv;na)VQ%RCZoG>6 zjXIIMI}tNbzh#$>h4Lm_Y2e$YSMTxbngh{?cTl+w-I1ASG}}6UnMurgpf~cXwKSxm zB=P@2O2jlTDfITPrIKe1>Tn4Nv3w)P=g;a2=65ayN zp5+R@)~?=>Omjo-eyUcV8PMr*6}Z^I^FXwkHevD;TqzF1#2lR#oE8WF8FLhmPJt6& zi(uF6KQId76>^oqh__<^m9pROE zw->*ldIWJg@yq~Nfnu*FV^`Yh@-YCK!mgy^% z|CdZ(X?3-HTqVRvcBIbuHJ)1yaqXxg$RwV55nKEs$8Eq1`>!XyEiy|)jr-xmG4T!Sx^=uXFrto^4o%%Doey<5o4=+wyKt$@l zR;zKK%92S%1ZBlQN%ViXJ;;{QzX3Y2j^S>@H51cdU^r^mTK*&iq8EvzFCNwmbn0T= z6Asi60^g`?k21o5Lhg@F)l@*R1|7lPi8y(Jz-4s7l4I`ax?Ww|l~vo@MR@u4vF2w! zj&SI}okeJNR;RjJUe_M)^v8vWKvE2_mw7aEr@w5?{2Gf^zP2-PIY#O{7CgWi7Y3Q5 z&e|`oXKGHy_z=2;>gDJcBfy>kozTyid0**<2?6w+pQ!YM-(NYiD*Au+bnurlX*7C? zEu<(^*G))1_=!pxY~VFREkby|M03 z5gnc%e~n!^y0Q6|7a-3}4TLQ4AUJspCztBwm1v@hiH!~h&XMM^@$anP{CeUV%LWK*@s9)zuhFaH&!#4a$g7mcg%jSB%ECIj9&KXn-^+x z)yY0IXbns2+j_uB_7#L_Rcdb;dN0*}Gg5g<8qM4EJCV^Jn+oaUe}fk#=} znCWF35PjbHWvG-`P#6A}m)%Y-206&=7pl_FiB_o2lxZ!?0~2w$;l{hmD{=1XQ!tXhVj zvWi;U2zV&g#|ZFw%AyL2+J34v|4!Iu|LBDv*jSb+V`Q?8B;U zQNq~JqH}%GuHSWZe=2XiGe}a#!_Dm+Ct&Om)?pP_$@;LvBD>ZLqW?@o&%Re@|3cEfgmG|+^}Zh%RRUD8qO?0f|>0W#3E6~0h8gu_Bj z*XcJVfPzS11uk7WJXv0uzINDOK#Z0OnDWm1iH$Y(s|2Z#`JFwdT$W+8&hHG6 ziK2QkwU*yGnLc;e6@Wx5`hjtqORz^*RjGuvgYaH#)5ig{C_VtIu-FaACoDqSvdgj_ zL4X%_rD{(^?fSFC3mDPU_U+vr1zw2kjaB$;_}GR=fCf|BSC1jpBq%7w)9di`@Kw%k zJLNuMG0^d}+g`G=b*sGgRG4TJ3OXKl928y`4I&M#&+gJwk^#TS!9-|Cc3(YCpWmy z^2*1A3#%?_DQ~3ln0MG-?;ZfZEi*DQ%1F75ey9t@^RW5`hOh(Oa27}ai7_Rm_%g3h zD)GuR7}!)48MFRdf}sLxBqoo3d{UsPu*k^5fZ|d_(?I~E_cwM7j+9Ad{J-#5v_e=IH0ct<@MQ~Uw=P?#LXV39mcL&+Jo%T z?6<_!fTl(sbhvANpE2XX)zg~A<;fyObP`$b*j5~9sPm({)U7bkZkCdrAFjo-{G`~X zV3q(8l#&E_-l5bYIJ1>lXMrW_aNW#P$Rt9Cn8yY6$rC@2+nCL0tEYD? z-e1!Tc|R@z&EL zwdEVND)UDW)utnS6R9_svw*QCrFb`0>yCjcMg{BupY7GBZ~4a;5LdhEk$hSLQ#s6q zhO&KFjD90++GTP%QDXt5svg=gF*j?wySq2L;9P1)Y(5alz9xvDWjiCq2kKU|p_j~^ z5$;$+g7}Xr)WW1=q027?Q>9j2}syKq!pIPs7XUlJSpYgd z8{*9dm46`M=EH`$ifgNNx|=;Dc+Y0uPile|ks=c#LjWvU-#MlsAzFl93(yVE~YfE}EGD;hGG0 z3w#Y$uIAB6aFwvLp<&%+ON zBiO*TYX86KM&@>3cbscb4|PsuW{Czj+p}j2e%Y-VLU$hsvr8_Pu)uzKbEwoj-!^Z4 zSMmRuk-HW0CO?{FtL6eMBI1LfWpqRTY#+=cFPk20YX=(?xQvF2-@%QYmm0bomTcK& zUasV?{iU4*zPPyHd_E8(4ijs^PJc9_^qg6khoHrA-fY32)=OH z#5a}scX`D6u3ZgF}9R3IX~QQ;`0W4)>6Cg{O*K zsZ0>UKuF}4rsdTY7>%j#SkXxV?9#v4Aw;WHY2a%IS3)Oa(^4!+o%#Mvu?_eh?2fG> z3Y+%DB!lokllm#g!<Wc(y9Fh%wXoa6{>rHC_!dA4)!g<$end>{x$$id@%$~@9QqTbd#>ML zQGz!nl6h5&od}OlP{^_2-&Q-mC@8($-2!XE&fPdVs@QHhr2zvQc~Y-RZ^@ZmZV#pY z>B)BE)g^)Gto?B+NFugUHl7b9Q3bFAvNZ4z=I^)@ERPQV^$$+&;fV!eeE+Tg_ynW+ zTWz)Akoef;-0CLt!Rel-o-WSMDsM~SuKb=HDmtY*njnG7PPM`kJ~EP^%R=6xE0sRo z*PA1`K7xAb8NeA)UaKwJezel9J5_ARu+DUe4VqLE@D&RdEml7mbYqRY51g%pJHdBH z%NT(yf}!PlPCq{1bZ;V=Pq|rng4Saq;%F_vIPmIxZF%3n1@30G58Bl6)uRDxxWuQ! z1*3GliC;`aTu1uWq5tldK|(~&_k1(l*d<_QZe0RwrH_Uwy<`C%L#IVY&c%50Wi+yw zqYXsBWu?6-b!Ia0i>0%ktJT!4@}`W`Q#K3=9B&1?bMyz|B1#|iSfHMKFX8pCQZItG z(?aL*i@zumBQw^Qp+KI=&K>rCH?brAqw<*u!3RrJYPRo+R7EUf#4e(LV797cr7rr? zp!3F_1P?fYP)>?8Ab( z@-O?C>Dt$;ExPN!Sba*gs;dM+8yV0~_9V|???n6+cFVx{c|^zQrOv3RJhg1l;AyD= z3@)*QfP@A=dB_i@~>&yO) z_V7>B`oFPkpWk|OVv{%L~$yVmW0C2IV)PyGMxlTm|tVKA_Q#qAID(iESk z)z(||!NJi$D~5xB_zdPp9saN)LPbUK6H&bR3|M^bUw008la_Pdb%_kX*h5~gZ6%Qz zp&d*Kh#`GV#J@{H*>`k=kkLtHy;^jN)#RzMb#+wfT=+>;8Em3WDyA^2aPXNm{UoS` zR{hbwMMoh5yAe$o(Mp943uZ`11-7&WDBOeXn$x(eqwIm|FMCGO=gz%Vj9SkLw~FH+ zZwn`M)@r%t27BLuA&o5CSDA@JBZi6uKb8!n$f&qIXk%-7` zY7NNYO-G+<)0#>^J3K_RL&~km2*=WR?WaXPUfk<-XW&$R1c8-zIkkg+3ezX?=pkuE ze2OSE4{n)o)4n$xV;nX=|$|tauru~gnEUm%G`(E z*`Yb*b&?iEMkPi(bXbDg!zZ3il}_mwhIqQP*jKSol zz@|_#G{MD6lg)Wxwm{ScVvqISbzv=f1USusIdXebt^{jjlfw(yXhw|>cy2T01qw~2 z7QiHf7%t#;i~!-ZGF}$U_Y?y`2Yt`|aOE%!RITEY?%P!55DKbfn4{KkCA&+G2y=OURjCL6PMM=SI` z$dR_uf4n3yQbhr>=wJcdbD_DK86$xtuINk6%hVtv6HQcRJTzB@O6k|BD}~A)H35ei zYPlNY%uQvRG_y#CWQITPw!qW_tPUbMDukm@ZDnXxY*}dC(0slG|B0WU$ynZt&W1OS z2NF3-%rqd@6ep}49S6;Tn<9^t0G4AxSe@LyWs!qL6-Rg}_p~P+mSafp@In==Kq3O# zcr|F=lUYa*1Qx8Dg%zp+RXBJ1^A^%RDLsI$LuR`}+0na$_5q8i!-XY3T>- z1{>jfER?30p!}=kizabBAOB%?YziW5c@m0zD@-N`bQ?&a0Va^IPUpMRWjj1buAuq# z>h*v+xCv3{E1rYt8bA~h#)L0(Y1&_in7@h8=|>p>CdY665972TTB+ zU?roeTJo#Fv<9=C7`t2)n`r=7E36I{c)bWfl>%_`So5)yG$mh=071dRvWh(%fJmPP z#BiOtO)LUDEc77NP+(pcDx8R0Z&wb5ZTCN1uIMz%bbUPo;$ZPgJo=z?bgxQX6O~nh zja{Co@W!0Ps}wt|D*uSt9${}Lqe@4h0QEY81@rKkQelH6vu)Y3(gqvrs{s{>3I$4O z&SRYfoTdZ@te+}wI>_*`9rgu-XFpAwOc&&Sewm?G*wWbcu(*(nAnHzPP5e+=tnrvW zK#l!9JVhXWO3qK>;GCS7ER`cN$yv!pqeh*TWAP3=WB7aJ$#RO?Qwi;o&)LLq_=a-` zm}L}#5KZ5ZzQ@AA#QJmmSofguEhnb(TLapbTLGv;>P8dagR!ym(T$+Wqu3B>!r>;U z?e(t?y%!IMHiKGp>7GpjPOe0$IqoW;W(dDIUr@W>OIW-|Q1$Kp#uYrmDLMN~uhXqD zK)0zDayaZycUb{g+=?g&_g2E%s^17D_0KLP<5{A;cD(Hv;h|26mY56u0aPoXZMoUB zA~G>{=({Kixcw2n77t_QnVC*kI5zd&xZJ5o7tiipUR^!@#%IskxA@7gZP^4Dnat&i zHvV*P>P6)Zj9p4|@U(4*jFPVGQRHU1r#B^vGCO7s4srZiyhoAuo zJY7#LVkfIU8ds?Cx|6+_v?{hdK_^B>)EDnyrL}l&xEAeJ&JrLN71V>XB9Z)DUeu5s z2+WyjBkgQ(*CkFZb4*Y9>I80DYv9tGQpr|V{o#rqhHb)AxX`|4XM6odWSb68=3CW3 zF)mTPI!fA-cf(kmC=`lq(IJ0Hk@Cye$<%5-YiUYSVE%-=%4$(}q;(^=ATKMeB+`&! z!QzNJpv|j8uVcb|-$Ye4@Wg)T=i7cf6y^M|yzS>QG;CPQjN(S1zn8PY=JDwp>vK1X zSm+N0%@2L!-xZC&y8f06XlZce)+P#*6)Ym)N{W#9Pcb>1k_&TdS zVwKG5K6be+Jt&l*zk7Mra`bQEDH zC51GM1}D+>iwzgC3;~<>>2Hx>>Avona=4I=6+WN*g8J`Zwwf+$JmKvwM5{Mx%#hcY zlkB8;+B|};ij(2O+Sy%YTRAPiW@(`zE;>fW#N>7Ug!xh?{s!-k$3>zxHUZ}FHk-eZ zb`D~Z_)k(+53?$~fcZ1RQI5ng&KPLBX$h7fML4K<&ysmQq<&DeF9MyJ&}xc#rPf?P z*ptNkYGpJUyV9dJAU=02j*TsI{<`w|=rFgZ&HD0NY)Diq@9{j0hLxBE9GFu@-TyNGY#5iUWS z4$Y8KQ54odRL{zRAx$QxwTv)s#$HlVwcF}oD0?zi4A*Ckv7E_sjRIvN+p(x1BCHc~ z-#u{5SzqyZ_lFYB73Ar*#c29sJa4W){UKK|t1JJbxeYaNA2zK~gLJ^`qHDndKPA#tm9xRhj94%f=0f>#^$5{x*}V z6sQQLJQilLlh`So5S&g4={Vjz`$SU~ziUya9xX2J@3>704hUp(lJ-YPY;cWdlNVN7 zdLR*&@N%Y}z~DmoxT&Fm`5Web*^Knk1dK_mwZVDUz5BiWg4s~JCr=O#12UndhBubV z^;HS}{s=DQ8jHGoZT2Ddtbyt-I2hHq zXXVN6g6r3UT?=qG1ce2Gsc;R$Y1il1k=&kmAdVPV%=I?Zy7-Hs8tED#Ff3}%F1y0h zL35~=TJX;JR8b~wQw#EH{f~naLBxp-Scl~pYlLe!(Ij5UKP^*+zsoSz4@wZy$| z>z0sSxeh~~uYLQx_fG5ItJ@MJtXoWTC-D(WWeT zVAg@fMWo;{tX{SIqW#ZP8;zGt_Rb1l^fQ8vJM%aM1z+)`k9nc!xXoEJJ=3H(2zl%; zDqj32`()a4ldGa?|Fxd#GnV(l)oNeno&6_mh1)*8KG;InF!?3TvweSuz_GEr@;l!4 z_xLyt!Lzq>-OC1pvRz#pJ?O=-BJ0Sa3ZpiTqFN*^i=d$Atsy64snvT)^EX`1*TnZ8 zjr}PsVIT({ZCi{;P-Hzqc0+r R)?kgnBt_*!iiC8${|EeIWV!$V literal 53166 zcmeFZWmH^U&?edm1QJ|=TaZBTAi)Dcf(G~C76|STGzks?LI^ZYaCdLq2~BW!3GVJN zyWjWw=9@cfX5DrF&ARvYT1g*v?>?ta?b=oKJXNPdloX^e(MZuC5D2D>w1f%-f}{t5 zJRE$C0!FN8NO!^811A+JF-UPg`6dMN3?d^Ts^*@wGv}uDbbT7-z%wuOArmecVM2N^ zW~OYJ(he&GvwbxJ5GANe~)O4hu{8lL`U;~ z>JYy8?uGUT%KrVvZx!`yEAwO5?q2NZ5T&As=az!ae&cfq>1JB^YSo;)YQg{Blo@^0 zZ`1OlS)&ggSZDo$U+_heMUC{MrpxKqx*iknd?{6&Ztbm>t?QKjXMQI8YJ#)gr0*lE zwwhbh^*1`})<->L2nx(qEyzx5&r=Ew4LvxI z*}gcJL>nI7Upb6sdGk=MqFT&Ghm3EES7M|K>m}##f}X?_zoNszB%^M9d}vZqj=-35 zR_G&gvN5TgH&kjx#%VQ^7(-OB7tl;OdL-9B!hv%YkuiBGlm;ki$L0^dOP>&u;)0j@ zv-M~;6RA<$hMVB&W#-ftjLO=#|%uTl0{YJ2VR!6DA8ViS(TuW&g! zJZH3%FN!nezP2e97MLl*a8{?+5JTlUJo<1ljWrL9DJmGwt=Km@b-RV^QI2x3kmXw&JL>>`=z(#?k9ggk_+Q9$m&XE zC|boBLO#EvZ~v0P5iIDG)^|Oj*_KrT!WrZvY?gsR!7nQ{> z^^;K6!P!M90fql3BU?R61Sx!0woW748waR1%AQ{_l~M0*Kl~|qScug3)STRFk;DtP z_?rF2{j5?JE@rZ3n<=CaiLX(9S0DA($F_g-QAYnNE&OOA?t4VBOgoANN=wh$_Du?7E{J%GH@6Jl&45^9@dLHp^aL^cofU+DlJy zL-h7h$z8d_{+4%)*?`ooAH&C~(qeV>^+|fgE491phRZM|C8b}b?^ycf6IP}w%-?MU zgO{w*`R9P2I&N**&3g(xx@b%P;K6gCB+%;Sn z#OgL)c3^pbi18h$FQQTErRByoif^2RHsf~Wav@8>@`~u~Go(`ETY6Ko^`A_%(Z5T% z@^7xiM>Dr)DVKa%wFF(69Vwaaw*xuX&-Eo+aOO%9Z|RJaZqDC^LDPQydSj&hmL^8l z;M&h0$R`~gc)HD`#}*~MxI0unyTTae6ap=?x>uIYQc2#fwcn%)=x815lu5Ct5Q+JG zQ6U3?4Di?veTJ`MF(2(syyAQyFb7!)>o9oXYfom`SkGswQ+Dz;gT=!N0JBX zwlDMbF@@}zl+2$5zP7e>&Vyy^#m(lQ2D0w=OSHOmu^2?_<>x_4={`Rq7d(_JVFSCk zt|;5$Uq z^4k@Y{BUQA>vBJz&7sn2@o{8zlU9>4fo?)o$LuHc)oq1Tg_i4E)O48

  • ;7ct|K% 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-modern-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-modern-layout-linux.png index 8d1a239a1d7f66b1c2ab91e6065d0c2c5cb45585..e1cd5ab19c361a2acfe7dea90c754f8002506040 100644 GIT binary patch literal 52816 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̩dQ1lVY3jO8+jOZ-9{1=NtSuq+ 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 delta 5108 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 MSVjo`N$2bT0?ur8Z~y=R delta 18107 zcmcJ$1yoeg`z}0)f(n9ybO|CzmvoFuNh>H_0@B@mLwnK$vu5VRK6}4=?{~k?^Spa75qm2h`P_)|9`jrAG-?x>-Imc z+5fRu{=eP`{D0Wzzpxf+#$@(PtbJ@N9fE-ISTHvAczj?hu$%cIVzqp8;uF2#$&*LJ z#U%<4ue&P>$H=}$x2TrnFv_60mT4L+uB97Zlqt4h@R#7*r$Ym5b?g`emb%3VLUT%0HE zZ3RS6Wj}MJ_};%F3~$tx^}VNXH$MiZ-)W~d>Q%vXU6ThE-gotAOTCWMSvzjDoV)ML zONx~pDC5ic>x@y`Ekv*A0+9)3>q${M{@jxUhqhz-M zzOvYg$ad)Pi8weDr8BOWbiYW6psEiC5{F$4F3)MxSs+ z7`=UZ!LQ7APB@2WgtU~DGS`-%^>UsZkRd6r0XCQ0_57yqsmuGeQ>7#UfH*C_C-VK; zlD!ZFy^Z9ucrceJx?4*Y&bhNSvBe(8uGQV_6gbG5E8dEr>Z+RaF|a7eRm=PnN;ei*k#xuUB=e+Pu8HY{z_FCxZAiu2>v8 zRmS}_t(v7Kxv)Le3v)Q&PFNB->ZVyP`8PSK1cOa^224y$kw+oLP8;KR z3H)vn($a0^mK2E0uS;J-Zx^45Si5E;5<7z5ZP^RaIB!iyeO=-Ln3}#v<`{UVIN_cw zbr`_7ZHG_sx94#4d)tR8=6+f3;PfyNUwESC7o%GD4-Rt6DjP5ahb?S&?<*#%k5hwc z(4Q9Ysk~iNeB!>v9i9#sYc*Nm`TCM_l1o&#W86zo*%HPhu2<*h?BC+z4o=Ip3g(VP znPR^BnH`%B-)ijydPG#MXp$G* z?rNW_A|k)vTpfZ~14q)qB%VrSRDxda&Vd149qzG@!At|!NJEF7hzn%CD%L8V-wi7u zK$?;150Ay7P@J5z6?_uNU5c=oQ)d#YOe$WWHvjB~3_N z(Ial|kNL&qDoL5@6~0{HG)fL1Eu3o}cObrf@7}_oLc8%Z$^R%H9LTr8p+J2U5!zJGINNh5YBql{YdNSVZTJqY1FK@ zM4cZEah;==5a(M9vL2X1K?vIS@`i2WF&+B!l;@yS!J$TX+8wzQ=6GfKqko0ofraP% z5?K^ntaEJrqO4Mh+}npPR05|ZDTs)aSkYGdMHXOXS?WF^k8`poY5s~^u8>HpX~WIa zdFQRolm`-E;$;XmqxFI$&9nphUNAyvT06Ge%#G&`a(8eEvJb~4-Td$*Qg~xja(b5O z1TPBZ4GetwleQlVi(U5XX|j__oI2v9DJJ}GBg4=6SxsIx(W9UO{S;B+9qrtGB>a$+ z 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

    ^_xWN=^c7S&P=%t` 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 H`02j^Ui;Zo diff --git a/playwright/snapshots/timeline/timeline.spec.ts/hidden-event-line-zero-padding-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/hidden-event-line-zero-padding-irc-layout-linux.png index b9aa65ab5837eda2776476eae35ed08d0a64112d..5fba124a92979f83b90395b32f99be34f372dea2 100644 GIT binary patch literal 50908 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

    8rFCAbxrgIhxk5nr2R@q9vg#c+jsr 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 literal 50694 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 z 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 E1xpKSl>h($ diff --git a/res/css/_common.pcss b/res/css/_common.pcss index b750de0213c..5ecf6c4e946 100644 --- a/res/css/_common.pcss +++ b/res/css/_common.pcss @@ -646,7 +646,7 @@ legend { .mx_Dialog button.warning:not(.mx_Dialog_nonDialogButton):not([class|="maplibregl"]), .mx_Dialog input[type="submit"].warning { - border: solid 1px var(--cpd-color-border-critical-primary); + border: solid 1px var(--cpd-color-border-critical-subtle); color: var(--cpd-color-text-critical-primary); } diff --git a/res/css/views/elements/_Pill.pcss b/res/css/views/elements/_Pill.pcss index c697b63de50..61cd53b14ee 100644 --- a/res/css/views/elements/_Pill.pcss +++ b/res/css/views/elements/_Pill.pcss @@ -26,7 +26,7 @@ limitations under the License. overflow: hidden; cursor: pointer; - color: $accent-fg-color !important; /* To override .markdown-body */ + color: var(--cpd-color-text-on-solid-primary) !important; /* To override .markdown-body */ background-color: $pill-bg-color !important; /* To override .markdown-body */ > * { @@ -35,7 +35,7 @@ limitations under the License. &.mx_UserPill_me, &.mx_AtRoomPill { - background-color: $alert !important; /* To override .markdown-body */ + background-color: var(--cpd-color-bg-critical-primary) !important; /* To override .markdown-body */ } &:hover { @@ -43,12 +43,14 @@ limitations under the License. } &.mx_UserPill_me:hover { - background-color: #ff6b75 !important; /* To override .markdown-body | same on both themes */ + background-color: var( + --cpd-color-bg-critical-hovered + ) !important; /* To override .markdown-body | same on both themes */ } /* We don't want to indicate clickability */ &.mx_AtRoomPill:hover { - background-color: $alert !important; /* To override .markdown-body */ + background-color: var(--cpd-color-bg-critical-primary) !important; /* To override .markdown-body */ cursor: unset; } diff --git a/res/css/views/elements/_Tooltip.pcss b/res/css/views/elements/_Tooltip.pcss index d35e55db095..54a16a0cbf0 100644 --- a/res/css/views/elements/_Tooltip.pcss +++ b/res/css/views/elements/_Tooltip.pcss @@ -71,8 +71,8 @@ limitations under the License. max-width: 300px; word-break: break-word; - background-color: #21262c; /* Same on both themes */ - color: $accent-fg-color; + background-color: var(--cpd-color-alpha-gray-1400); + color: var(--cpd-color-text-on-solid-primary); border: 0; text-align: center; diff --git a/res/css/views/messages/_DateSeparator.pcss b/res/css/views/messages/_DateSeparator.pcss index de0cd668329..39cffc0f332 100644 --- a/res/css/views/messages/_DateSeparator.pcss +++ b/res/css/views/messages/_DateSeparator.pcss @@ -39,5 +39,5 @@ limitations under the License. mask-size: contain; mask-repeat: no-repeat; mask-image: url("$(res)/img/feather-customised/chevron-down.svg"); - background-color: $tertiary-content; + background-color: var(--cpd-color-icon-secondary); } diff --git a/res/css/views/messages/_TimelineSeparator.pcss b/res/css/views/messages/_TimelineSeparator.pcss index 40ca0967a66..d8550179a6e 100644 --- a/res/css/views/messages/_TimelineSeparator.pcss +++ b/res/css/views/messages/_TimelineSeparator.pcss @@ -20,12 +20,12 @@ limitations under the License. display: flex; align-items: center; font: var(--cpd-font-body-md-regular); - color: $roomtopic-color; + color: var(--cpd-color-text-secondary); } .mx_TimelineSeparator > hr { flex: 1 1 0; height: 0; border: none; - border-bottom: 1px solid $menu-selected-color; + border-bottom: 1px solid var(--cpd-color-gray-400); } diff --git a/res/css/views/rooms/_BasicMessageComposer.pcss b/res/css/views/rooms/_BasicMessageComposer.pcss index e09eaa5a04f..3add788b129 100644 --- a/res/css/views/rooms/_BasicMessageComposer.pcss +++ b/res/css/views/rooms/_BasicMessageComposer.pcss @@ -20,7 +20,7 @@ limitations under the License. .mx_BasicMessageComposer_inputEmpty > :first-child::before { content: var(--placeholder); - opacity: 0.333; + color: var(--cpd-color-text-secondary); width: 0; height: 0; overflow: visible; diff --git a/res/css/views/rooms/_E2EIcon.pcss b/res/css/views/rooms/_E2EIcon.pcss index 18ff3f28f92..d6c184f103c 100644 --- a/res/css/views/rooms/_E2EIcon.pcss +++ b/res/css/views/rooms/_E2EIcon.pcss @@ -37,15 +37,6 @@ limitations under the License. } } -/* white infill for the transparency */ -.mx_E2EIcon::before { - background-color: #ffffff; - mask-image: url("$(res)/img/e2e/normal.svg"); - mask-repeat: no-repeat; - mask-position: center; - mask-size: 80%; -} - /* transparent-looking border surrounding the shield for when overlain over avatars */ .mx_E2EIcon_bordered { mask-image: url("$(res)/img/e2e/normal.svg"); @@ -59,6 +50,7 @@ limitations under the License. /* shrink the infill of the badge */ &::before { mask-size: 60%; + background: var(--cpd-color-bg-canvas-default); } } @@ -69,7 +61,7 @@ limitations under the License. .mx_E2EIcon_normal::after { mask-image: url("$(res)/img/e2e/normal.svg"); - background-color: $header-panel-text-primary-color; + background-color: var(--cpd-color-icon-tertiary); } .mx_E2EIcon_verified::after { diff --git a/res/css/views/rooms/_EventTile.pcss b/res/css/views/rooms/_EventTile.pcss index 4e11f64e773..ad88a7c7863 100644 --- a/res/css/views/rooms/_EventTile.pcss +++ b/res/css/views/rooms/_EventTile.pcss @@ -53,7 +53,7 @@ $left-gutter: 64px; height: 16px; &::before { - background-color: $tertiary-content; + background-color: var(--cpd-color-icon-tertiary); mask-repeat: no-repeat; mask-position: center; mask-size: 16px; @@ -858,12 +858,12 @@ $left-gutter: 64px; &.mx_EventTile_e2eIcon_normal::after { mask-image: url("$(res)/img/e2e/normal.svg"); /* regular shield */ - background-color: $header-panel-text-primary-color; /* grey */ + background-color: var(--cpd-color-icon-tertiary); /* grey */ } &.mx_EventTile_e2eIcon_decryption_failure::after { mask-image: url("$(res)/img/e2e/decryption-failure.svg"); /* key in a circle */ - background-color: $secondary-content; + background-color: var(--cpd-color-icon-tertiary); } } diff --git a/res/css/views/rooms/_JumpToBottomButton.pcss b/res/css/views/rooms/_JumpToBottomButton.pcss index 0a760e2cd69..5bf2c0c0baf 100644 --- a/res/css/views/rooms/_JumpToBottomButton.pcss +++ b/res/css/views/rooms/_JumpToBottomButton.pcss @@ -39,13 +39,12 @@ limitations under the License. /* with text-align in parent */ display: inline-block; padding: 0 4px; - color: $accent-fg-color; - background-color: $muted-fg-color; + color: var(--cpd-color-text-on-solid-primary); + background-color: var(--cpd-color-icon-secondary); } .mx_JumpToBottomButton_highlight .mx_JumpToBottomButton_badge { - color: $secondary-accent-color; - background-color: $alert; + background-color: var(--cpd-color-icon-critical-primary); } .mx_JumpToBottomButton_scrollDown { @@ -55,7 +54,7 @@ limitations under the License. border-radius: 19px; box-sizing: border-box; background: $background; - border: 1.3px solid $muted-fg-color; + border: 1.3px solid var(--cpd-color-icon-tertiary); cursor: pointer; } @@ -68,5 +67,5 @@ limitations under the License. mask-size: 20px; mask-position: center 6px; transform: rotate(180deg); - background: $muted-fg-color; + background: var(--cpd-color-icon-tertiary); } diff --git a/res/css/views/rooms/_LegacyRoomHeader.pcss b/res/css/views/rooms/_LegacyRoomHeader.pcss index 8a92f6e5865..ce088f7deba 100644 --- a/res/css/views/rooms/_LegacyRoomHeader.pcss +++ b/res/css/views/rooms/_LegacyRoomHeader.pcss @@ -185,10 +185,10 @@ limitations under the License. } &:hover { - background: $accent-300; + background: var(--cpd-color-bg-subtle-primary); &::before { - background-color: $accent; + background-color: var(--cpd-color-icon-primary); } } } @@ -213,8 +213,8 @@ limitations under the License. margin: 4px; &.mx_Indicator_highlight { - background: $alert; - box-shadow: $alert; + background: var(--cpd-color-icon-critical-primary); + box-shadow: var(--cpd-color-icon-critical-primary); } &.mx_Indicator_notification { @@ -223,8 +223,8 @@ limitations under the License. } &.mx_Indicator_activity { - background: $primary-content; - box-shadow: $primary-content; + background: var(--cpd-color-icon-primary); + box-shadow: var(--cpd-color-icon-primary); } } @@ -234,10 +234,9 @@ limitations under the License. } } -.mx_LegacyRoomHeader_button--highlight, -.mx_LegacyRoomHeader_button:hover { +.mx_LegacyRoomHeader_button--highlight { &::before { - background-color: $accent !important; + background-color: var(--cpd-color-icon-primary) !important; } } diff --git a/res/css/views/rooms/_MessageComposer.pcss b/res/css/views/rooms/_MessageComposer.pcss index 0fd72575b01..2c8fe592c42 100644 --- a/res/css/views/rooms/_MessageComposer.pcss +++ b/res/css/views/rooms/_MessageComposer.pcss @@ -191,7 +191,7 @@ limitations under the License. } .mx_MessageComposer_button { - @mixin composerButton 50%, var(--cpd-color-icon-secondary), var(--cpd-color-bg-subtle-secondary); + @mixin composerButton 50%, var(--cpd-color-icon-primary), var(--cpd-color-bg-subtle-primary); &:last-child { margin-right: auto; diff --git a/res/css/views/rooms/_NotificationBadge.pcss b/res/css/views/rooms/_NotificationBadge.pcss index 41b1e0f530c..6ffe7d9da71 100644 --- a/res/css/views/rooms/_NotificationBadge.pcss +++ b/res/css/views/rooms/_NotificationBadge.pcss @@ -39,7 +39,7 @@ limitations under the License. width: 8px; height: 8px; border-radius: 8px; - background-color: var(--cpd-color-text-primary); + background-color: var(--cpd-color-icon-primary); .mx_NotificationBadge_count { display: none; @@ -86,7 +86,8 @@ limitations under the License. .mx_NotificationBadge_count { font-size: $font-10px; line-height: $font-14px; - color: #fff; /* TODO: Variable */ + font-weight: var(--cpd-font-weight-semibold); + color: var(--cpd-color-text-on-solid-primary); } } } diff --git a/res/css/views/rooms/_RoomSublist.pcss b/res/css/views/rooms/_RoomSublist.pcss index 24898b89251..0e9ad1a9bb4 100644 --- a/res/css/views/rooms/_RoomSublist.pcss +++ b/res/css/views/rooms/_RoomSublist.pcss @@ -118,7 +118,7 @@ limitations under the License. mask-position: center; mask-size: contain; mask-repeat: no-repeat; - background: $muted-fg-color; + background: var(--cpd-color-icon-secondary); } } @@ -167,7 +167,7 @@ limitations under the License. mask-position: center; mask-size: contain; mask-repeat: no-repeat; - background-color: $tertiary-content; + background-color: var(--cpd-color-icon-secondary); mask-image: url("$(res)/img/feather-customised/chevron-down.svg"); } diff --git a/res/css/views/rooms/_RoomTile.pcss b/res/css/views/rooms/_RoomTile.pcss index bf68e4035e4..decd1067b19 100644 --- a/res/css/views/rooms/_RoomTile.pcss +++ b/res/css/views/rooms/_RoomTile.pcss @@ -131,7 +131,7 @@ limitations under the License. mask-position: center; mask-size: contain; mask-repeat: no-repeat; - background: $primary-content; + background: var(--cpd-color-icon-primary); } } diff --git a/res/css/views/rooms/_TopUnreadMessagesBar.pcss b/res/css/views/rooms/_TopUnreadMessagesBar.pcss index d26c2b5bfe8..6c25ff8e749 100644 --- a/res/css/views/rooms/_TopUnreadMessagesBar.pcss +++ b/res/css/views/rooms/_TopUnreadMessagesBar.pcss @@ -40,7 +40,7 @@ limitations under the License. border-radius: 19px; box-sizing: border-box; background: $background; - border: 1.3px solid $muted-fg-color; + border: 1.3px solid var(--cpd-color-icon-tertiary); cursor: pointer; } @@ -53,7 +53,7 @@ limitations under the License. mask-repeat: no-repeat; mask-size: 20px; mask-position: center; - background: $muted-fg-color; + background: var(--cpd-color-icon-tertiary); } .mx_TopUnreadMessagesBar_markAsRead { @@ -61,7 +61,7 @@ limitations under the License. width: 18px; height: 18px; background: $background; - border: 1.3px solid $muted-fg-color; + border: 1.3px solid var(--cpd-color-icon-tertiary); border-radius: 10px; margin: 5px auto; } @@ -75,5 +75,5 @@ limitations under the License. mask-repeat: no-repeat; mask-size: 10px; mask-position: 4px 4px; - background: $muted-fg-color; + background: var(--cpd-color-icon-tertiary); } diff --git a/res/css/views/rooms/wysiwyg_composer/components/_Editor.pcss b/res/css/views/rooms/wysiwyg_composer/components/_Editor.pcss index d4194052fec..595a67b1250 100644 --- a/res/css/views/rooms/wysiwyg_composer/components/_Editor.pcss +++ b/res/css/views/rooms/wysiwyg_composer/components/_Editor.pcss @@ -115,7 +115,7 @@ limitations under the License. max-width: 100%; overflow: hidden; - color: $accent-fg-color; + color: var(--cpd-color-text-on-solid-primary); background-color: $pill-bg-color; /* ...with the overrides from _BasicMessageComposer.pcss */ diff --git a/res/themes/dark/css/_dark.pcss b/res/themes/dark/css/_dark.pcss index 953b7c47303..c3760c2981e 100644 --- a/res/themes/dark/css/_dark.pcss +++ b/res/themes/dark/css/_dark.pcss @@ -22,7 +22,7 @@ $separator: var(--cpd-color-alpha-gray-400); /* ******************** */ $roomlist-bg-color: rgba(38, 40, 45, 0.9); $roomsublist-skeleton-ui-bg: linear-gradient(180deg, $background 0%, #ffffff00 100%); -$roomtile-default-badge-bg-color: $muted-fg-color; +$roomtile-default-badge-bg-color: var(--cpd-color-icon-secondary); /* ******************** */ /** @@ -125,8 +125,8 @@ $roomheader-addroom-fg-color: $primary-content; /* Rich-text-editor */ /* ******************** */ -$pill-bg-color: $room-highlight-color; -$pill-hover-bg-color: #545a66; +$pill-bg-color: var(--cpd-color-gray-1000); +$pill-hover-bg-color: var(--cpd-color-gray-1100); /* ******************** */ /* Inputs */ @@ -150,7 +150,7 @@ $dialog-close-external-color: $primary-content; /* ******************** */ $system: var(--cpd-color-bg-subtle-secondary); $roomsublist-skeleton-ui-bg: linear-gradient(180deg, #3e444c 0%, #3e444c00 100%); -$roomtile-default-badge-bg-color: $input-darker-fg-color; +$roomtile-default-badge-bg-color: var(--cpd-color-icon-secondary); /* ******************** */ /* Tabbed views */ @@ -199,10 +199,9 @@ $voice-record-icon-color: $quaternary-content; /* Bubble tiles */ /* ******************** */ -$eventbubble-self-bg: #133a34; -$eventbubble-others-bg: #21262c; -$eventbubble-bg-hover: #1c2026; -$eventbubble-reply-color: #c1c6cd; +$eventbubble-self-bg: var(--cpd-color-green-300); +$eventbubble-others-bg: var(--cpd-color-gray-300); +$eventbubble-bg-hover: var(--cpd-color-bg-subtle-secondary); /* ******************** */ /* Lightbox */ diff --git a/res/themes/legacy-dark/css/_legacy-dark.pcss b/res/themes/legacy-dark/css/_legacy-dark.pcss index f01716a91f2..a1c021fa38a 100644 --- a/res/themes/legacy-dark/css/_legacy-dark.pcss +++ b/res/themes/legacy-dark/css/_legacy-dark.pcss @@ -28,8 +28,8 @@ $light-fg-color: $header-panel-text-secondary-color; /* used for focusing form controls */ $focus-bg-color: $room-highlight-color; -$pill-bg-color: $room-highlight-color; -$pill-hover-bg-color: #545a66; +$pill-bg-color: var(--cpd-color-gray-1000); +$pill-hover-bg-color: var(--cpd-color-gray-1100); /* informational plinth */ $info-plinth-bg-color: $header-panel-bg-color; @@ -217,7 +217,6 @@ $inlinecode-background-color: #2a3039; $eventbubble-self-bg: #14322e; $eventbubble-others-bg: $event-selected-color; $eventbubble-bg-hover: #1c2026; -$eventbubble-reply-color: #c1c6cd; /* Location sharing */ /* ******************** */ diff --git a/res/themes/legacy-light/css/_legacy-light.pcss b/res/themes/legacy-light/css/_legacy-light.pcss index 8563b3c4696..bfdaae6b67b 100644 --- a/res/themes/legacy-light/css/_legacy-light.pcss +++ b/res/themes/legacy-light/css/_legacy-light.pcss @@ -123,8 +123,8 @@ $rte-code-bg-color: rgba(0, 0, 0, 0.04); $header-panel-text-primary-color: #91a1c0; -$pill-bg-color: #aaa; -$pill-hover-bg-color: #ccc; +$pill-bg-color: var(--cpd-color-gray-1000); +$pill-hover-bg-color: var(--cpd-color-gray-1100); $topleftmenu-color: #212121; $roomheader-bg-color: $primary-bg-color; @@ -311,7 +311,6 @@ $inlinecode-background-color: $header-panel-bg-color; $eventbubble-self-bg: #f0fbf8; $eventbubble-others-bg: $system; $eventbubble-bg-hover: #fafbfd; -$eventbubble-reply-color: #c1c6cd; /* pinned events indicator */ $pinned-color: $tertiary-content; diff --git a/res/themes/light-custom/css/_custom.pcss b/res/themes/light-custom/css/_custom.pcss index 140fec60c71..9a4523d605f 100644 --- a/res/themes/light-custom/css/_custom.pcss +++ b/res/themes/light-custom/css/_custom.pcss @@ -116,7 +116,6 @@ $settings-grey-fg-color: $primary-content; $eventbubble-self-bg: var(--eventbubble-self-bg, $eventbubble-self-bg); $eventbubble-others-bg: var(--eventbubble-others-bg, $eventbubble-others-bg); $eventbubble-bg-hover: var(--eventbubble-bg-hover, $eventbubble-bg-hover); -$eventbubble-reply-color: var(--eventbubble-reply-color, $eventbubble-reply-color); $reaction-row-button-selected-bg-color: var( --reaction-row-button-selected-bg-color, diff --git a/res/themes/light-high-contrast/css/_light-high-contrast.pcss b/res/themes/light-high-contrast/css/_light-high-contrast.pcss index 6bfd5b8fd4f..2ba97c5a722 100644 --- a/res/themes/light-high-contrast/css/_light-high-contrast.pcss +++ b/res/themes/light-high-contrast/css/_light-high-contrast.pcss @@ -31,7 +31,6 @@ $button-secondary-bg-color: $accent-fg-color; $message-action-bar-fg-color: $primary-content; $voice-record-stop-border-color: $quinary-content; $voice-record-icon-color: $tertiary-content; -$eventbubble-reply-color: $quaternary-content; $roomtopic-color: $secondary-content; /** diff --git a/res/themes/light/css/_light.pcss b/res/themes/light/css/_light.pcss index adbb7e97ed0..cc34276994d 100644 --- a/res/themes/light/css/_light.pcss +++ b/res/themes/light/css/_light.pcss @@ -159,8 +159,8 @@ $roomheader-addroom-fg-color: #5c6470; /* Rich-text-editor */ /* ******************** */ -$pill-bg-color: #aaa; -$pill-hover-bg-color: #ccc; +$pill-bg-color: var(--cpd-color-gray-1000); +$pill-hover-bg-color: var(--cpd-color-gray-1100); $rte-bg-color: #e9e9e9; $rte-code-bg-color: rgba(0, 0, 0, 0.04); /* ******************** */ @@ -205,13 +205,13 @@ $imagebody-giflabel-color: $accent-fg-color; /* ******************** */ $roomlist-bg-color: rgba(245, 245, 245, 0.9); $roomsublist-skeleton-ui-bg: linear-gradient(180deg, $background 0%, #ffffff00 100%); -$roomtile-default-badge-bg-color: $muted-fg-color; +$roomtile-default-badge-bg-color: var(--cpd-color-icon-secondary); /* ******************** */ /* e2e */ /* ******************** */ -$e2e-verified-color: var(--cpd-color-green-900); -$e2e-warning-color: var(--cpd-color-red-900); +$e2e-verified-color: var(--cpd-color-icon-success-primary); +$e2e-warning-color: var(--cpd-color-icon-critical-primary); $e2e-verified-color-light: var(--cpd-color-green-300); $e2e-warning-color-light: var(--cpd-color-red-300); /* ******************** */ @@ -274,10 +274,9 @@ $voice-record-icon-color: $tertiary-content; /* Bubble tiles */ /* ******************** */ -$eventbubble-self-bg: #e7f8f3; -$eventbubble-others-bg: #e8edf4; -$eventbubble-bg-hover: #f6f7f8; -$eventbubble-reply-color: $quaternary-content; +$eventbubble-self-bg: var(--cpd-color-green-300); +$eventbubble-others-bg: var(--cpd-color-gray-300); +$eventbubble-bg-hover: var(--cpd-color-bg-subtle-secondary); /* ******************** */ /* Lightbox */ diff --git a/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx b/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx index da41011607f..3d8447079ae 100644 --- a/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx +++ b/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx @@ -430,7 +430,7 @@ export default class AccessSecretStorageDialog extends React.PureComponent Date: Mon, 18 Mar 2024 16:32:36 +0000 Subject: [PATCH 033/235] Remove use of KnownMembership from playwright tests --- playwright/e2e/crypto/crypto.spec.ts | 4 +--- playwright/e2e/crypto/verification.spec.ts | 3 +-- playwright/e2e/knock/knock-into-room.spec.ts | 11 +++++------ playwright/e2e/knock/manage-knocks.spec.ts | 6 ++---- playwright/pages/bot.ts | 3 +-- 5 files changed, 10 insertions(+), 17 deletions(-) diff --git a/playwright/e2e/crypto/crypto.spec.ts b/playwright/e2e/crypto/crypto.spec.ts index 515cddbc1b9..d917a408398 100644 --- a/playwright/e2e/crypto/crypto.spec.ts +++ b/playwright/e2e/crypto/crypto.spec.ts @@ -14,8 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { KnownMembership } from "matrix-js-sdk/src/types"; - import type { Page } from "@playwright/test"; import { test, expect } from "../../element-web-test"; import { @@ -89,7 +87,7 @@ const bobJoin = async (page: Page, bob: Bot) => { async function autoJoin(client: Client) { await client.evaluate((cli) => { cli.on(window.matrixcs.RoomMemberEvent.Membership, (event, member) => { - if (member.membership === KnownMembership.Invite && member.userId === cli.getUserId()) { + if (member.membership === "invite" && member.userId === cli.getUserId()) { cli.joinRoom(member.roomId); } }); diff --git a/playwright/e2e/crypto/verification.spec.ts b/playwright/e2e/crypto/verification.spec.ts index 0c8047f4a19..6819606b642 100644 --- a/playwright/e2e/crypto/verification.spec.ts +++ b/playwright/e2e/crypto/verification.spec.ts @@ -16,7 +16,6 @@ limitations under the License. import jsQR from "jsqr"; import { type Preset, type Visibility } from "matrix-js-sdk/src/matrix"; -import { KnownMembership } from "matrix-js-sdk/src/types"; import type { JSHandle, Locator, Page } from "@playwright/test"; import type { VerificationRequest, Verifier } from "matrix-js-sdk/src/crypto-api"; @@ -263,7 +262,7 @@ test.describe("User verification", () => { const bobVerificationRequest = await bob.evaluateHandle( async (client, { dmRoomId, aliceCredentials }) => { const room = client.getRoom(dmRoomId); - while (room.getMember(aliceCredentials.userId)?.membership !== KnownMembership.Join) { + while (room.getMember(aliceCredentials.userId)?.membership !== "join") { await new Promise((resolve) => { room.once(window.matrixcs.RoomStateEvent.Members, resolve); }); diff --git a/playwright/e2e/knock/knock-into-room.spec.ts b/playwright/e2e/knock/knock-into-room.spec.ts index ac552ede2f5..5ee366fcf25 100644 --- a/playwright/e2e/knock/knock-into-room.spec.ts +++ b/playwright/e2e/knock/knock-into-room.spec.ts @@ -17,7 +17,6 @@ limitations under the License. */ import { type Visibility } from "matrix-js-sdk/src/matrix"; -import { KnownMembership } from "matrix-js-sdk/src/types"; import { test, expect } from "../../element-web-test"; import { waitForRoom } from "../utils"; @@ -75,7 +74,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === KnownMembership.Knock && + e.getContent()?.membership === "knock" && e.getContent()?.displayname === "Alice", ); }); @@ -110,7 +109,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === KnownMembership.Knock && + e.getContent()?.membership === "knock" && e.getContent()?.displayname === "Alice", ); }); @@ -152,7 +151,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === KnownMembership.Knock && + e.getContent()?.membership === "knock" && e.getContent()?.displayname === "Alice", ); }); @@ -194,7 +193,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === KnownMembership.Knock && + e.getContent()?.membership === "knock" && e.getContent()?.displayname === "Alice", ); }); @@ -260,7 +259,7 @@ test.describe("Knock Into Room", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === KnownMembership.Knock && + e.getContent()?.membership === "knock" && e.getContent()?.displayname === "Alice", ); }); diff --git a/playwright/e2e/knock/manage-knocks.spec.ts b/playwright/e2e/knock/manage-knocks.spec.ts index d1bf7ee92bb..3fb5c685517 100644 --- a/playwright/e2e/knock/manage-knocks.spec.ts +++ b/playwright/e2e/knock/manage-knocks.spec.ts @@ -16,8 +16,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { KnownMembership } from "matrix-js-sdk/src/types"; - import { test, expect } from "../../element-web-test"; import { waitForRoom } from "../utils"; @@ -75,7 +73,7 @@ test.describe("Manage Knocks", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === KnownMembership.Leave && + e.getContent()?.membership === "leave" && e.getContent()?.displayname === "Bob", ); }); @@ -112,7 +110,7 @@ test.describe("Manage Knocks", () => { return events.some( (e) => e.getType() === "m.room.member" && - e.getContent()?.membership === KnownMembership.Leave && + e.getContent()?.membership === "leave" && e.getContent()?.displayname === "Bob", ); }); diff --git a/playwright/pages/bot.ts b/playwright/pages/bot.ts index d9fbc717bb6..333d895dfe9 100644 --- a/playwright/pages/bot.ts +++ b/playwright/pages/bot.ts @@ -17,7 +17,6 @@ limitations under the License. import { JSHandle, Page } from "@playwright/test"; import { uniqueId } from "lodash"; import { type MatrixClient } from "matrix-js-sdk/src/matrix"; -import { KnownMembership } from "matrix-js-sdk/src/types"; import type { Logger } from "matrix-js-sdk/src/logger"; import type { SecretStorageKeyDescription } from "matrix-js-sdk/src/secret-storage"; @@ -179,7 +178,7 @@ export class Bot extends Client { if (opts.autoAcceptInvites) { cli.on(window.matrixcs.RoomMemberEvent.Membership, (event, member) => { - if (member.membership === KnownMembership.Invite && member.userId === cli.getUserId()) { + if (member.membership === "invite" && member.userId === cli.getUserId()) { cli.joinRoom(member.roomId); } }); From a8341c0e95e11f6e8cb8de630260bdf5f82da1dc Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 19 Mar 2024 10:19:38 +0000 Subject: [PATCH 034/235] Extract types for re-use in matrix-js-sdk.d.ts (#12350) Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- playwright/tsconfig.json | 1 + src/@types/matrix-js-sdk.d.ts | 30 +++++++++++- src/call-types.ts | 9 ++++ src/models/Call.ts | 10 ++-- src/stores/widgets/WidgetLayoutStore.ts | 51 ++------------------ src/stores/widgets/types.ts | 64 +++++++++++++++++++++++++ 6 files changed, 108 insertions(+), 57 deletions(-) create mode 100644 src/stores/widgets/types.ts diff --git a/playwright/tsconfig.json b/playwright/tsconfig.json index cea25ebab7d..55f979f3ce5 100644 --- a/playwright/tsconfig.json +++ b/playwright/tsconfig.json @@ -10,6 +10,7 @@ }, "include": [ "**/*.ts", + "../src/@types/matrix-js-sdk.d.ts", "../node_modules/matrix-js-sdk/src/@types/*.d.ts", "../node_modules/matrix-js-sdk/node_modules/@matrix-org/olm/index.d.ts" ] diff --git a/src/@types/matrix-js-sdk.d.ts b/src/@types/matrix-js-sdk.d.ts index 1ce1702f1fb..4a32ee0f371 100644 --- a/src/@types/matrix-js-sdk.d.ts +++ b/src/@types/matrix-js-sdk.d.ts @@ -14,14 +14,40 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { BLURHASH_FIELD } from "../utils/image-media"; +import type { IWidget } from "matrix-widget-api"; +import type { BLURHASH_FIELD } from "../utils/image-media"; +import type { JitsiCallMemberEventType, JitsiCallMemberContent } from "../call-types"; +import type { ILayoutStateEvent, WIDGET_LAYOUT_EVENT_TYPE } from "../stores/widgets/types"; +import type { VoiceBroadcastInfoEventContent, VoiceBroadcastInfoEventType } from "../voice-broadcast/types"; // Matrix JS SDK extensions -declare module "matrix-js-sdk" { +declare module "matrix-js-sdk/src/types" { export interface FileInfo { /** * @see https://github.com/matrix-org/matrix-spec-proposals/pull/2448 */ [BLURHASH_FIELD]?: string; } + + export interface StateEvents { + // Jitsi-backed video room state events + [JitsiCallMemberEventType]: JitsiCallMemberContent; + + // Unstable widgets state events + "im.vector.modular.widgets": IWidget | {}; + [WIDGET_LAYOUT_EVENT_TYPE]: ILayoutStateEvent; + + // Unstable voice broadcast state events + [VoiceBroadcastInfoEventType]: VoiceBroadcastInfoEventContent; + + // Element custom state events + "im.vector.web.settings": Record; + "org.matrix.room.preview_urls": { disable: boolean }; + + // XXX unspecced usages of `m.room.*` events + "m.room.plumbing": { + status: string; + }; + "m.room.bot.options": unknown; + } } diff --git a/src/call-types.ts b/src/call-types.ts index d042faaaf39..40cd006dcc9 100644 --- a/src/call-types.ts +++ b/src/call-types.ts @@ -17,3 +17,12 @@ limitations under the License. // Event type for room account data and room creation content used to mark rooms as virtual rooms // (and store the ID of their native room) export const VIRTUAL_ROOM_EVENT_TYPE = "im.vector.is_virtual_room"; + +export const JitsiCallMemberEventType = "io.element.video.member"; + +export interface JitsiCallMemberContent { + // Connected device IDs + devices: string[]; + // Time at which this state event should be considered stale + expires_ts: number; +} diff --git a/src/models/Call.ts b/src/models/Call.ts index 369f712534f..eeae614bd86 100644 --- a/src/models/Call.ts +++ b/src/models/Call.ts @@ -57,6 +57,7 @@ import { UPDATE_EVENT } from "../stores/AsyncStore"; import { getJoinedNonFunctionalMembers } from "../utils/room/getJoinedNonFunctionalMembers"; import { isVideoRoom } from "../utils/video-rooms"; import { FontWatcher } from "../settings/watchers/FontWatcher"; +import { JitsiCallMemberContent, JitsiCallMemberEventType } from "../call-types"; const TIMEOUT_MS = 16000; @@ -321,18 +322,13 @@ export abstract class Call extends TypedEventEmitter this.setDisconnected(); } -export interface JitsiCallMemberContent { - // Connected device IDs - devices: string[]; - // Time at which this state event should be considered stale - expires_ts: number; -} +export type { JitsiCallMemberContent }; /** * A group call using Jitsi as a backend. */ export class JitsiCall extends Call { - public static readonly MEMBER_EVENT_TYPE = "io.element.video.member"; + public static readonly MEMBER_EVENT_TYPE = JitsiCallMemberEventType; public readonly STUCK_DEVICE_TIMEOUT_MS = 1000 * 60 * 60; // 1 hour private resendDevicesTimer: number | null = null; diff --git a/src/stores/widgets/WidgetLayoutStore.ts b/src/stores/widgets/WidgetLayoutStore.ts index c965836c8bb..eef5d84d0de 100644 --- a/src/stores/widgets/WidgetLayoutStore.ts +++ b/src/stores/widgets/WidgetLayoutStore.ts @@ -28,55 +28,10 @@ import { ReadyWatchingStore } from "../ReadyWatchingStore"; import { SettingLevel } from "../../settings/SettingLevel"; import { arrayFastClone } from "../../utils/arrays"; import { UPDATE_EVENT } from "../AsyncStore"; +import { Container, IStoredLayout, ILayoutStateEvent, WIDGET_LAYOUT_EVENT_TYPE, IWidgetLayouts } from "./types"; -export const WIDGET_LAYOUT_EVENT_TYPE = "io.element.widgets.layout"; - -export enum Container { - // "Top" is the app drawer, and currently the only sensible value. - Top = "top", - - // "Right" is the right panel, and the default for widgets. Setting - // this as a container on a widget is essentially like saying "no - // changes needed", though this may change in the future. - Right = "right", - - Center = "center", -} - -export interface IStoredLayout { - // Where to store the widget. Required. - container: Container; - - // The index (order) to position the widgets in. Only applies for - // ordered containers (like the top container). Smaller numbers first, - // and conflicts resolved by comparing widget IDs. - index?: number; - - // Percentage (integer) for relative width of the container to consume. - // Clamped to 0-100 and may have minimums imposed upon it. Only applies - // to containers which support inner resizing (currently only the top - // container). - width?: number; - - // Percentage (integer) for relative height of the container. Note that - // this only applies to the top container currently, and that container - // will take the highest value among widgets in the container. Clamped - // to 0-100 and may have minimums imposed on it. - height?: number | null; - - // TODO: [Deferred] Maximizing (fullscreen) widgets by default. -} - -interface IWidgetLayouts { - [widgetId: string]: IStoredLayout; -} - -interface ILayoutStateEvent { - // TODO: [Deferred] Forced layout (fixed with no changes) - - // The widget layouts. - widgets: IWidgetLayouts; -} +export type { IStoredLayout, ILayoutStateEvent }; +export { Container, WIDGET_LAYOUT_EVENT_TYPE }; interface ILayoutSettings extends ILayoutStateEvent { overrides?: string; // event ID for layout state event, if present diff --git a/src/stores/widgets/types.ts b/src/stores/widgets/types.ts new file mode 100644 index 00000000000..36d5d864729 --- /dev/null +++ b/src/stores/widgets/types.ts @@ -0,0 +1,64 @@ +/* +Copyright 2024 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +export interface IStoredLayout { + // Where to store the widget. Required. + container: Container; + + // The index (order) to position the widgets in. Only applies for + // ordered containers (like the top container). Smaller numbers first, + // and conflicts resolved by comparing widget IDs. + index?: number; + + // Percentage (integer) for relative width of the container to consume. + // Clamped to 0-100 and may have minimums imposed upon it. Only applies + // to containers which support inner resizing (currently only the top + // container). + width?: number; + + // Percentage (integer) for relative height of the container. Note that + // this only applies to the top container currently, and that container + // will take the highest value among widgets in the container. Clamped + // to 0-100 and may have minimums imposed on it. + height?: number | null; + + // TODO: [Deferred] Maximizing (fullscreen) widgets by default. +} + +export interface IWidgetLayouts { + [widgetId: string]: IStoredLayout; +} + +export interface ILayoutStateEvent { + // TODO: [Deferred] Forced layout (fixed with no changes) + + // The widget layouts. + widgets: IWidgetLayouts; +} + +export const WIDGET_LAYOUT_EVENT_TYPE = "io.element.widgets.layout"; + +export enum Container { + // "Top" is the app drawer, and currently the only sensible value. + Top = "top", + + // "Right" is the right panel, and the default for widgets. Setting + // this as a container on a widget is essentially like saying "no + // changes needed", though this may change in the future. + Right = "right", + + Center = "center", +} From a5ed97b903544a86d8b2fef40d6a0d9014d04021 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 19 Mar 2024 13:28:20 +0000 Subject: [PATCH 035/235] Mark as Unread (#12254) * Support the mark as unread flag * Add mark as unread menu option and make clering notifications also clear the unread flag * Mark as read on viewing room * Tests * Remove random import * Don't show mark as unread for historical rooms * Fix tests & add test for menu option * Test RoomNotificationState updates on unread flag change * Test it doesn't update on other room account data * New icon for mark as unread * Add analytics events for mark as (un)read * Bump to new analytics-events package * Read from both stable & unstable prefixes * Cast to boolean before checking to avoid setting state unnecessarily * Typo Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Doc external interface (and the rest at the same time) * Doc & rename unread market set function * Doc const exports * Remove listener on destroy * Add playwright test * Clearer language, hopefully * Move comment * Add reference to the MSC Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Expand on function doc * Remove empty beforeEach * Rejig badge logic a little and add tests * Fix basdges to not display dots in room sublists again and hopefully rename the forceDot option to something that better indicates what it does, and add tests. * Remove duplicate license header (?) * Missing word (several times...) * Incorporate PR suggestion on badge type switch * Better description in doc comment Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Update other doc comments in the same way * Remove duplicate quote * Use quotes consistently * Better test name * c+p fail --------- Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> --- package.json | 2 +- .../e2e/room_options/marked_unread.spec.ts | 61 +++++++++ .../_RoomGeneralContextMenu.pcss | 4 + .../element-icons/roomlist/mark-as-unread.svg | 4 + src/RoomNotifs.ts | 4 +- .../context_menus/RoomGeneralContextMenu.tsx | 90 +++++++++++-- .../views/rooms/NotificationBadge.tsx | 2 +- .../StatelessNotificationBadge.tsx | 18 ++- src/components/views/rooms/RoomTile.tsx | 6 + src/i18n/strings/en_EN.json | 1 + src/stores/RoomViewStore.tsx | 3 + .../notifications/RoomNotificationState.ts | 9 ++ src/utils/notifications.ts | 49 +++++++ .../RoomGeneralContextMenu-test.tsx | 18 +++ .../NotificationBadge-test.tsx | 33 +++++ .../StatelessNotificationBadge-test.tsx | 7 + test/stores/RoomViewStore-test.ts | 12 ++ .../RoomNotificationState-test.ts | 33 ++++- test/utils/notifications-test.ts | 127 ++++++++++++++++-- yarn.lock | 8 +- 20 files changed, 458 insertions(+), 33 deletions(-) create mode 100644 playwright/e2e/room_options/marked_unread.spec.ts create mode 100644 res/img/element-icons/roomlist/mark-as-unread.svg diff --git a/package.json b/package.json index 265cfa9a3f6..afb50aec349 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ }, "dependencies": { "@babel/runtime": "^7.12.5", - "@matrix-org/analytics-events": "^0.10.0", + "@matrix-org/analytics-events": "^0.12.0", "@matrix-org/emojibase-bindings": "^1.1.2", "@matrix-org/matrix-wysiwyg": "2.17.0", "@matrix-org/olm": "3.2.15", diff --git a/playwright/e2e/room_options/marked_unread.spec.ts b/playwright/e2e/room_options/marked_unread.spec.ts new file mode 100644 index 00000000000..799acf22500 --- /dev/null +++ b/playwright/e2e/room_options/marked_unread.spec.ts @@ -0,0 +1,61 @@ +/* +Copyright 2024 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { test, expect } from "../../element-web-test"; + +const TEST_ROOM_NAME = "The mark unread test room"; + +test.describe("Mark as Unread", () => { + test.use({ + displayName: "Tom", + botCreateOpts: { + displayName: "BotBob", + autoAcceptInvites: true, + }, + }); + + test("should mark a room as unread", async ({ page, app, bot }) => { + const roomId = await app.client.createRoom({ + name: TEST_ROOM_NAME, + }); + const dummyRoomId = await app.client.createRoom({ + name: "Room of no consequence", + }); + await app.client.inviteUser(roomId, bot.credentials.userId); + await bot.joinRoom(roomId); + await bot.sendMessage(roomId, "I am a robot. Beep."); + + // Regular notification on new message + await expect(page.getByLabel(TEST_ROOM_NAME + " 1 unread message.")).toBeVisible(); + await expect(page).toHaveTitle("Element [1]"); + + await page.goto("/#/room/" + roomId); + + // should now be read, since we viewed the room (we have to assert the page title: + // the room badge isn't visible since we're viewing the room) + await expect(page).toHaveTitle("Element | " + TEST_ROOM_NAME); + + // navigate away from the room again + await page.goto("/#/room/" + dummyRoomId); + + const roomTile = page.getByLabel(TEST_ROOM_NAME); + await roomTile.focus(); + await roomTile.getByRole("button", { name: "Room options" }).click(); + await page.getByRole("menuitem", { name: "Mark as unread" }).click(); + + expect(page.getByLabel(TEST_ROOM_NAME + " Unread messages.")).toBeVisible(); + }); +}); diff --git a/res/css/views/context_menus/_RoomGeneralContextMenu.pcss b/res/css/views/context_menus/_RoomGeneralContextMenu.pcss index b5162bb1bbb..4017a53f202 100644 --- a/res/css/views/context_menus/_RoomGeneralContextMenu.pcss +++ b/res/css/views/context_menus/_RoomGeneralContextMenu.pcss @@ -10,6 +10,10 @@ mask-image: url("$(res)/img/element-icons/roomlist/mark-as-read.svg"); } +.mx_RoomGeneralContextMenu_iconMarkAsUnread::before { + mask-image: url("$(res)/img/element-icons/roomlist/mark-as-unread.svg"); +} + .mx_RoomGeneralContextMenu_iconNotificationsDefault::before { mask-image: url("$(res)/img/element-icons/notifications.svg"); } diff --git a/res/img/element-icons/roomlist/mark-as-unread.svg b/res/img/element-icons/roomlist/mark-as-unread.svg new file mode 100644 index 00000000000..a3ea89e3e93 --- /dev/null +++ b/res/img/element-icons/roomlist/mark-as-unread.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/RoomNotifs.ts b/src/RoomNotifs.ts index 66be248f4f9..1fb5e5ba4d7 100644 --- a/src/RoomNotifs.ts +++ b/src/RoomNotifs.ts @@ -29,6 +29,7 @@ import { getUnsentMessages } from "./components/structures/RoomStatusBar"; import { doesRoomHaveUnreadMessages, doesRoomOrThreadHaveUnreadMessages } from "./Unread"; import { EffectiveMembership, getEffectiveMembership, isKnockDenied } from "./utils/membership"; import SettingsStore from "./settings/SettingsStore"; +import { getMarkedUnreadState } from "./utils/notifications"; export enum RoomNotifState { AllMessagesLoud = "all_messages_loud", @@ -279,7 +280,8 @@ export function determineUnreadState( return { symbol: null, count: trueCount, level: NotificationLevel.Highlight }; } - if (greyNotifs > 0) { + const markedUnreadState = getMarkedUnreadState(room); + if (greyNotifs > 0 || markedUnreadState) { return { symbol: null, count: trueCount, level: NotificationLevel.Notification }; } diff --git a/src/components/views/context_menus/RoomGeneralContextMenu.tsx b/src/components/views/context_menus/RoomGeneralContextMenu.tsx index 4cfd2ed6040..4465c219024 100644 --- a/src/components/views/context_menus/RoomGeneralContextMenu.tsx +++ b/src/components/views/context_menus/RoomGeneralContextMenu.tsx @@ -30,7 +30,7 @@ import { NotificationLevel } from "../../../stores/notifications/NotificationLev import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import RoomListStore, { LISTS_UPDATE_EVENT } from "../../../stores/room-list/RoomListStore"; import DMRoomMap from "../../../utils/DMRoomMap"; -import { clearRoomNotification } from "../../../utils/notifications"; +import { clearRoomNotification, setMarkedUnreadState } from "../../../utils/notifications"; import { IProps as IContextMenuProps } from "../../structures/ContextMenu"; import IconizedContextMenu, { IconizedContextMenuCheckbox, @@ -45,13 +45,60 @@ import { useSettingValue } from "../../../hooks/useSettings"; export interface RoomGeneralContextMenuProps extends IContextMenuProps { room: Room; + /** + * Called when the 'favourite' option is selected, after the menu has processed + * the mouse or keyboard event. + * @param event The event that caused the option to be selected. + */ onPostFavoriteClick?: (event: ButtonEvent) => void; + /** + * Called when the 'low priority' option is selected, after the menu has processed + * the mouse or keyboard event. + * @param event The event that caused the option to be selected. + */ onPostLowPriorityClick?: (event: ButtonEvent) => void; + /** + * Called when the 'invite' option is selected, after the menu has processed + * the mouse or keyboard event. + * @param event The event that caused the option to be selected. + */ onPostInviteClick?: (event: ButtonEvent) => void; + /** + * Called when the 'copy link' option is selected, after the menu has processed + * the mouse or keyboard event. + * @param event The event that caused the option to be selected. + */ onPostCopyLinkClick?: (event: ButtonEvent) => void; + /** + * Called when the 'settings' option is selected, after the menu has processed + * the mouse or keyboard event. + * @param event The event that caused the option to be selected. + */ onPostSettingsClick?: (event: ButtonEvent) => void; + /** + * Called when the 'forget room' option is selected, after the menu has processed + * the mouse or keyboard event. + * @param event The event that caused the option to be selected. + */ onPostForgetClick?: (event: ButtonEvent) => void; + /** + * Called when the 'leave' option is selected, after the menu has processed + * the mouse or keyboard event. + * @param event The event that caused the option to be selected. + */ onPostLeaveClick?: (event: ButtonEvent) => void; + /** + * Called when the 'mark as read' option is selected, after the menu has processed + * the mouse or keyboard event. + * @param event The event that caused the option to be selected. + */ + onPostMarkAsReadClick?: (event: ButtonEvent) => void; + /** + * Called when the 'mark as unread' option is selected, after the menu has processed + * the mouse or keyboard event. + * @param event The event that caused the option to be selected. + */ + onPostMarkAsUnreadClick?: (event: ButtonEvent) => void; } /** @@ -67,6 +114,8 @@ export const RoomGeneralContextMenu: React.FC = ({ onPostSettingsClick, onPostLeaveClick, onPostForgetClick, + onPostMarkAsReadClick, + onPostMarkAsUnreadClick, ...props }) => { const cli = useContext(MatrixClientContext); @@ -213,18 +262,33 @@ export const RoomGeneralContextMenu: React.FC = ({ } const { level } = useUnreadNotifications(room); - const markAsReadOption: JSX.Element | null = - level > NotificationLevel.None ? ( - { - clearRoomNotification(room, cli); - onFinished?.(); - }} - active={false} - label={_t("room|context_menu|mark_read")} - iconClassName="mx_RoomGeneralContextMenu_iconMarkAsRead" - /> - ) : null; + const markAsReadOption: JSX.Element | null = (() => { + if (level > NotificationLevel.None) { + return ( + { + clearRoomNotification(room, cli); + onFinished?.(); + }, onPostMarkAsReadClick)} + label={_t("room|context_menu|mark_read")} + iconClassName="mx_RoomGeneralContextMenu_iconMarkAsRead" + /> + ); + } else if (!roomTags.includes(DefaultTagID.Archived)) { + return ( + { + setMarkedUnreadState(room, cli, true); + onFinished?.(); + }, onPostMarkAsUnreadClick)} + label={_t("room|context_menu|mark_unread")} + iconClassName="mx_RoomGeneralContextMenu_iconMarkAsUnread" + /> + ); + } else { + return null; + } + })(); const developerModeEnabled = useSettingValue("developerMode"); const developerToolsOption = developerModeEnabled ? ( diff --git a/src/components/views/rooms/NotificationBadge.tsx b/src/components/views/rooms/NotificationBadge.tsx index d4f7ee50407..20ee53d95d6 100644 --- a/src/components/views/rooms/NotificationBadge.tsx +++ b/src/components/views/rooms/NotificationBadge.tsx @@ -102,7 +102,7 @@ export default class NotificationBadge extends React.PureComponent = { diff --git a/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx b/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx index 1d26083b6a0..f9051f3aa14 100644 --- a/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx +++ b/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx @@ -70,6 +70,16 @@ export const StatelessNotificationBadge = forwardRef= NotificationLevel.Highlight, mx_NotificationBadge_knocked: knocked, - // At most one of mx_NotificationBadge_dot, mx_NotificationBadge_2char, mx_NotificationBadge_3char - mx_NotificationBadge_dot: (isEmptyBadge && !knocked) || forceDot, - mx_NotificationBadge_2char: !forceDot && symbol && symbol.length > 0 && symbol.length < 3, - mx_NotificationBadge_3char: !forceDot && symbol && symbol.length > 2, + // Exactly one of mx_NotificationBadge_dot, mx_NotificationBadge_2char, mx_NotificationBadge_3char + mx_NotificationBadge_dot: badgeType === "dot", + mx_NotificationBadge_2char: badgeType === "badge_2char", + mx_NotificationBadge_3char: badgeType === "badge_3char", }); if (props.onClick) { diff --git a/src/components/views/rooms/RoomTile.tsx b/src/components/views/rooms/RoomTile.tsx index e0baf41f191..b2eb7d0e1e6 100644 --- a/src/components/views/rooms/RoomTile.tsx +++ b/src/components/views/rooms/RoomTile.tsx @@ -362,6 +362,12 @@ export class RoomTile extends React.PureComponent { onPostLeaveClick={(ev: ButtonEvent) => PosthogTrackers.trackInteraction("WebRoomListRoomTileContextMenuLeaveItem", ev) } + onPostMarkAsReadClick={(ev: ButtonEvent) => + PosthogTrackers.trackInteraction("WebRoomListRoomTileContextMenuMarkRead", ev) + } + onPostMarkAsUnreadClick={(ev: ButtonEvent) => + PosthogTrackers.trackInteraction("WebRoomListRoomTileContextMenuMarkUnread", ev) + } /> )} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 348b7a9ed5d..0768dfb9de0 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1892,6 +1892,7 @@ "forget": "Forget Room", "low_priority": "Low Priority", "mark_read": "Mark as read", + "mark_unread": "Mark as unread", "mentions_only": "Mentions only", "notifications_default": "Match default setting", "notifications_mute": "Mute room", diff --git a/src/stores/RoomViewStore.tsx b/src/stores/RoomViewStore.tsx index 4b7b165b441..007ae7b5b0f 100644 --- a/src/stores/RoomViewStore.tsx +++ b/src/stores/RoomViewStore.tsx @@ -62,6 +62,7 @@ import { ActionPayload } from "../dispatcher/payloads"; import { CancelAskToJoinPayload } from "../dispatcher/payloads/CancelAskToJoinPayload"; import { SubmitAskToJoinPayload } from "../dispatcher/payloads/SubmitAskToJoinPayload"; import { ModuleRunner } from "../modules/ModuleRunner"; +import { setMarkedUnreadState } from "../utils/notifications"; const NUM_JOIN_RETRY = 5; @@ -497,6 +498,8 @@ export class RoomViewStore extends EventEmitter { if (room) { pauseNonLiveBroadcastFromOtherRoom(room, this.stores.voiceBroadcastPlaybacksStore); this.doMaybeSetCurrentVoiceBroadcastPlayback(room); + + await setMarkedUnreadState(room, MatrixClientPeg.safeGet(), false); } } else if (payload.room_alias) { // Try the room alias to room ID navigation cache first to avoid diff --git a/src/stores/notifications/RoomNotificationState.ts b/src/stores/notifications/RoomNotificationState.ts index 0503485584d..449a6968fd9 100644 --- a/src/stores/notifications/RoomNotificationState.ts +++ b/src/stores/notifications/RoomNotificationState.ts @@ -23,6 +23,7 @@ import { readReceiptChangeIsFor } from "../../utils/read-receipts"; import * as RoomNotifs from "../../RoomNotifs"; import { NotificationState } from "./NotificationState"; import SettingsStore from "../../settings/SettingsStore"; +import { MARKED_UNREAD_TYPE_STABLE, MARKED_UNREAD_TYPE_UNSTABLE } from "../../utils/notifications"; export class RoomNotificationState extends NotificationState implements IDestroyable { public constructor( @@ -36,6 +37,7 @@ export class RoomNotificationState extends NotificationState implements IDestroy this.room.on(RoomEvent.LocalEchoUpdated, this.handleLocalEchoUpdated); this.room.on(RoomEvent.Timeline, this.handleRoomEventUpdate); this.room.on(RoomEvent.Redaction, this.handleRoomEventUpdate); + this.room.on(RoomEvent.AccountData, this.handleRoomAccountDataUpdate); this.room.on(RoomEvent.UnreadNotifications, this.handleNotificationCountUpdate); // for server-sent counts cli.on(MatrixEventEvent.Decrypted, this.onEventDecrypted); @@ -51,6 +53,7 @@ export class RoomNotificationState extends NotificationState implements IDestroy this.room.removeListener(RoomEvent.LocalEchoUpdated, this.handleLocalEchoUpdated); this.room.removeListener(RoomEvent.Timeline, this.handleRoomEventUpdate); this.room.removeListener(RoomEvent.Redaction, this.handleRoomEventUpdate); + this.room.removeListener(RoomEvent.AccountData, this.handleRoomAccountDataUpdate); cli.removeListener(MatrixEventEvent.Decrypted, this.onEventDecrypted); cli.removeListener(ClientEvent.AccountData, this.handleAccountDataUpdate); } @@ -90,6 +93,12 @@ export class RoomNotificationState extends NotificationState implements IDestroy } }; + private handleRoomAccountDataUpdate = (ev: MatrixEvent): void => { + if ([MARKED_UNREAD_TYPE_STABLE, MARKED_UNREAD_TYPE_UNSTABLE].includes(ev.getType())) { + this.updateNotificationState(); + } + }; + private updateNotificationState(): void { const snapshot = this.snapshot(); diff --git a/src/utils/notifications.ts b/src/utils/notifications.ts index 1dd2dd7788b..46e61fc9841 100644 --- a/src/utils/notifications.ts +++ b/src/utils/notifications.ts @@ -21,6 +21,7 @@ import { Room, LocalNotificationSettings, ReceiptType, + IMarkedUnreadEvent, } from "matrix-js-sdk/src/matrix"; import { IndicatorIcon } from "@vector-im/compound-web"; @@ -28,6 +29,19 @@ import SettingsStore from "../settings/SettingsStore"; import { NotificationLevel } from "../stores/notifications/NotificationLevel"; import { doesRoomHaveUnreadMessages } from "../Unread"; +// MSC2867 is not yet spec at time of writing. We read from both stable +// and unstable prefixes and accept the risk that the format may change, +// since the stable prefix is not actually defined yet. + +/** + * Unstable identifier for the marked_unread event, per MSC2867 + */ +export const MARKED_UNREAD_TYPE_UNSTABLE = "com.famedly.marked_unread"; +/** + * Stable identifier for the marked_unread event + */ +export const MARKED_UNREAD_TYPE_STABLE = "m.marked_unread"; + export const deviceNotificationSettingsKeys = [ "notificationsEnabled", "notificationBodyEnabled", @@ -74,6 +88,8 @@ export function localNotificationsAreSilenced(cli: MatrixClient): boolean { export async function clearRoomNotification(room: Room, client: MatrixClient): Promise<{} | undefined> { const lastEvent = room.getLastLiveEvent(); + await setMarkedUnreadState(room, client, false); + try { if (lastEvent) { const receiptType = SettingsStore.getValue("sendReadReceipts", room.roomId) @@ -117,6 +133,39 @@ export function clearAllNotifications(client: MatrixClient): Promise()?.unread; + const currentStateUnstable = room + .getAccountData(MARKED_UNREAD_TYPE_UNSTABLE) + ?.getContent()?.unread; + return currentStateStable ?? currentStateUnstable; +} + +/** + * Sets the marked_unread state of the given room. This sets some room account data that indicates to + * clients that the user considers this room to be 'unread', but without any actual notifications. + * + * @param room The room to set + * @param client MatrixClient object to use + * @param unread The new marked_unread state of the room + */ +export async function setMarkedUnreadState(room: Room, client: MatrixClient, unread: boolean): Promise { + // if there's no event, treat this as false as we don't need to send the flag to clear it if the event isn't there + const currentState = getMarkedUnreadState(room); + + if (Boolean(currentState) !== unread) { + // Assuming MSC2867 passes FCP with no changes, we should update to start writing + // the flag to the stable prefix (or both) and then ultimately use only the + // stable prefix. + await client.setRoomAccountData(room.roomId, MARKED_UNREAD_TYPE_UNSTABLE, { unread }); + } +} + /** * A helper to transform a notification color to the what the Compound Icon Button * expects diff --git a/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx b/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx index bb832612bfe..498882d83d5 100644 --- a/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx +++ b/test/components/views/context_menus/RoomGeneralContextMenu-test.tsx @@ -140,10 +140,28 @@ describe("RoomGeneralContextMenu", () => { const markAsReadBtn = getByLabelText(container, "Mark as read"); fireEvent.click(markAsReadBtn); + await new Promise(setImmediate); + expect(mockClient.sendReadReceipt).toHaveBeenCalledWith(event, ReceiptType.Read, true); expect(onFinished).toHaveBeenCalled(); }); + it("marks the room as unread", async () => { + room.updateMyMembership("join"); + + const { container } = getComponent({}); + + const markAsUnreadBtn = getByLabelText(container, "Mark as unread"); + fireEvent.click(markAsUnreadBtn); + + await new Promise(setImmediate); + + expect(mockClient.setRoomAccountData).toHaveBeenCalledWith(ROOM_ID, "com.famedly.marked_unread", { + unread: true, + }); + expect(onFinished).toHaveBeenCalled(); + }); + it("when developer mode is disabled, it should not render the developer tools option", () => { getComponent(); expect(screen.queryByText("Developer tools")).not.toBeInTheDocument(); diff --git a/test/components/views/rooms/NotificationBadge/NotificationBadge-test.tsx b/test/components/views/rooms/NotificationBadge/NotificationBadge-test.tsx index 79cd3fcae03..3650512adfa 100644 --- a/test/components/views/rooms/NotificationBadge/NotificationBadge-test.tsx +++ b/test/components/views/rooms/NotificationBadge/NotificationBadge-test.tsx @@ -20,8 +20,41 @@ import React from "react"; import { StatelessNotificationBadge } from "../../../../../src/components/views/rooms/NotificationBadge/StatelessNotificationBadge"; import SettingsStore from "../../../../../src/settings/SettingsStore"; import { NotificationLevel } from "../../../../../src/stores/notifications/NotificationLevel"; +import NotificationBadge from "../../../../../src/components/views/rooms/NotificationBadge"; +import { NotificationState } from "../../../../../src/stores/notifications/NotificationState"; + +class DummyNotificationState extends NotificationState { + constructor(level: NotificationLevel) { + super(); + this._level = level; + } +} describe("NotificationBadge", () => { + it("shows a dot if the level is activity", () => { + const notif = new DummyNotificationState(NotificationLevel.Activity); + + const { container } = render(); + expect(container.querySelector(".mx_NotificationBadge_dot")).toBeInTheDocument(); + expect(container.querySelector(".mx_NotificationBadge")).toBeInTheDocument(); + }); + + it("does not show a dot if the level is activity and hideIfDot is true", () => { + const notif = new DummyNotificationState(NotificationLevel.Activity); + + const { container } = render(); + expect(container.querySelector(".mx_NotificationBadge_dot")).not.toBeInTheDocument(); + expect(container.querySelector(".mx_NotificationBadge")).not.toBeInTheDocument(); + }); + + it("still shows an empty badge if hideIfDot us true", () => { + const notif = new DummyNotificationState(NotificationLevel.Notification); + + const { container } = render(); + expect(container.querySelector(".mx_NotificationBadge_dot")).not.toBeInTheDocument(); + expect(container.querySelector(".mx_NotificationBadge")).toBeInTheDocument(); + }); + describe("StatelessNotificationBadge", () => { it("lets you click it", () => { const cb = jest.fn(); diff --git a/test/components/views/rooms/NotificationBadge/StatelessNotificationBadge-test.tsx b/test/components/views/rooms/NotificationBadge/StatelessNotificationBadge-test.tsx index 6ee93d82db4..612eec286b5 100644 --- a/test/components/views/rooms/NotificationBadge/StatelessNotificationBadge-test.tsx +++ b/test/components/views/rooms/NotificationBadge/StatelessNotificationBadge-test.tsx @@ -36,6 +36,13 @@ describe("StatelessNotificationBadge", () => { expect(container.querySelector(".mx_NotificationBadge_knocked")).toBeInTheDocument(); }); + it("has dot style for activity", () => { + const { container } = render( + , + ); + expect(container.querySelector(".mx_NotificationBadge_dot")).toBeInTheDocument(); + }); + it("has badge style for notification", () => { const { container } = render( , diff --git a/test/stores/RoomViewStore-test.ts b/test/stores/RoomViewStore-test.ts index f26217d4251..433b921686c 100644 --- a/test/stores/RoomViewStore-test.ts +++ b/test/stores/RoomViewStore-test.ts @@ -108,6 +108,7 @@ describe("RoomViewStore", function () { relations: jest.fn(), knockRoom: jest.fn(), leave: jest.fn(), + setRoomAccountData: jest.fn(), }); const room = new Room(roomId, mockClient, userId); const room2 = new Room(roomId2, mockClient, userId); @@ -339,6 +340,17 @@ describe("RoomViewStore", function () { expect(mocked(Modal).createDialog.mock.calls[0][1]).toMatchSnapshot(); }); + it("clears the unread flag when viewing a room", async () => { + room.getAccountData = jest.fn().mockReturnValue({ + getContent: jest.fn().mockReturnValue({ unread: true }), + }); + dis.dispatch({ action: Action.ViewRoom, room_id: roomId }); + await untilDispatch(Action.ActiveRoomChanged, dis); + expect(mockClient.setRoomAccountData).toHaveBeenCalledWith(roomId, "com.famedly.marked_unread", { + unread: false, + }); + }); + describe("when listening to a voice broadcast", () => { let voiceBroadcastPlayback: VoiceBroadcastPlayback; diff --git a/test/stores/notifications/RoomNotificationState-test.ts b/test/stores/notifications/RoomNotificationState-test.ts index 1e124d15272..f41f13ff13c 100644 --- a/test/stores/notifications/RoomNotificationState-test.ts +++ b/test/stores/notifications/RoomNotificationState-test.ts @@ -22,6 +22,7 @@ import { NotificationCountType, EventType, MatrixEvent, + RoomEvent, } from "matrix-js-sdk/src/matrix"; import type { MatrixClient } from "matrix-js-sdk/src/matrix"; @@ -80,7 +81,7 @@ describe("RoomNotificationState", () => { room.setUnreadNotificationCount(NotificationCountType.Total, greys); } - it("Updates on event decryption", () => { + it("updates on event decryption", () => { const roomNotifState = new RoomNotificationState(room, true); const listener = jest.fn(); roomNotifState.addListener(NotificationStateEvents.Update, listener); @@ -92,6 +93,36 @@ describe("RoomNotificationState", () => { expect(listener).toHaveBeenCalled(); }); + it("emits an Update event on marked unread room account data", () => { + const roomNotifState = new RoomNotificationState(room, true); + const listener = jest.fn(); + roomNotifState.addListener(NotificationStateEvents.Update, listener); + const accountDataEvent = { + getType: () => "com.famedly.marked_unread", + getContent: () => { + return { unread: true }; + }, + } as unknown as MatrixEvent; + room.getAccountData = jest.fn().mockReturnValue(accountDataEvent); + room.emit(RoomEvent.AccountData, accountDataEvent, room); + expect(listener).toHaveBeenCalled(); + }); + + it("does not update on other account data", () => { + const roomNotifState = new RoomNotificationState(room, true); + const listener = jest.fn(); + roomNotifState.addListener(NotificationStateEvents.Update, listener); + const accountDataEvent = { + getType: () => "else.something", + getContent: () => { + return {}; + }, + } as unknown as MatrixEvent; + room.getAccountData = jest.fn().mockReturnValue(accountDataEvent); + room.emit(RoomEvent.AccountData, accountDataEvent, room); + expect(listener).not.toHaveBeenCalled(); + }); + it("removes listeners", () => { const roomNotifState = new RoomNotificationState(room, false); expect(() => roomNotifState.destroy()).not.toThrow(); diff --git a/test/utils/notifications-test.ts b/test/utils/notifications-test.ts index 30316dd5e68..6e67ca9b029 100644 --- a/test/utils/notifications-test.ts +++ b/test/utils/notifications-test.ts @@ -26,6 +26,8 @@ import { clearRoomNotification, notificationLevelToIndicator, getThreadNotificationLevel, + getMarkedUnreadState, + setMarkedUnreadState, } from "../../src/utils/notifications"; import SettingsStore from "../../src/settings/SettingsStore"; import { getMockClientWithEventEmitter } from "../test-utils/client"; @@ -135,8 +137,8 @@ describe("notifications", () => { }); }); - it("sends a request even if everything has been read", () => { - clearRoomNotification(room, client); + it("sends a request even if everything has been read", async () => { + await clearRoomNotification(room, client); expect(sendReadReceiptSpy).toHaveBeenCalledWith(message, ReceiptType.Read, true); }); @@ -155,8 +157,8 @@ describe("notifications", () => { sendReceiptsSetting = false; }); - it("should send a private read receipt", () => { - clearRoomNotification(room, client); + it("should send a private read receipt", async () => { + await clearRoomNotification(room, client); expect(sendReadReceiptSpy).toHaveBeenCalledWith(message, ReceiptType.ReadPrivate, true); }); }); @@ -186,7 +188,7 @@ describe("notifications", () => { expect(sendReadReceiptSpy).not.toHaveBeenCalled(); }); - it("sends unthreaded receipt requests", () => { + it("sends unthreaded receipt requests", async () => { const message = mkMessage({ event: true, room: ROOM_ID, @@ -196,12 +198,12 @@ describe("notifications", () => { room.addLiveEvents([message]); room.setUnreadNotificationCount(NotificationCountType.Total, 1); - clearAllNotifications(client); + await clearAllNotifications(client); expect(sendReadReceiptSpy).toHaveBeenCalledWith(message, ReceiptType.Read, true); }); - it("sends private read receipts", () => { + it("sends private read receipts", async () => { const message = mkMessage({ event: true, room: ROOM_ID, @@ -213,12 +215,121 @@ describe("notifications", () => { jest.spyOn(SettingsStore, "getValue").mockReset().mockReturnValue(false); - clearAllNotifications(client); + await clearAllNotifications(client); expect(sendReadReceiptSpy).toHaveBeenCalledWith(message, ReceiptType.ReadPrivate, true); }); }); + describe("getMarkedUnreadState", () => { + let client: MatrixClient; + let room: Room; + + const ROOM_ID = "123"; + const USER_ID = "@bob:example.org"; + + beforeEach(() => { + stubClient(); + client = mocked(MatrixClientPeg.safeGet()); + room = new Room(ROOM_ID, client, USER_ID); + }); + + it("reads from stable prefix", async () => { + room.getAccountData = jest.fn().mockImplementation((eventType: string) => { + if (eventType === "m.marked_unread") { + return { getContent: jest.fn().mockReturnValue({ unread: true }) }; + } + return null; + }); + expect(getMarkedUnreadState(room)).toBe(true); + }); + + it("reads from unstable prefix", async () => { + room.getAccountData = jest.fn().mockImplementation((eventType: string) => { + if (eventType === "com.famedly.marked_unread") { + return { getContent: jest.fn().mockReturnValue({ unread: true }) }; + } + return null; + }); + expect(getMarkedUnreadState(room)).toBe(true); + }); + + it("returns undefined if neither prefix is present", async () => { + room.getAccountData = jest.fn().mockImplementation((eventType: string) => { + return null; + }); + expect(getMarkedUnreadState(room)).toBe(undefined); + }); + }); + + describe("setUnreadMarker", () => { + let client: MatrixClient; + let room: Room; + + const ROOM_ID = "123"; + const USER_ID = "@bob:example.org"; + + beforeEach(() => { + stubClient(); + client = mocked(MatrixClientPeg.safeGet()); + room = new Room(ROOM_ID, client, USER_ID); + }); + + // set true, no existing event + it("sets unread flag if event doesn't exist", async () => { + await setMarkedUnreadState(room, client, true); + expect(client.setRoomAccountData).toHaveBeenCalledWith(ROOM_ID, "com.famedly.marked_unread", { + unread: true, + }); + }); + + // set false, no existing event + it("does nothing when clearing if flag is false", async () => { + await setMarkedUnreadState(room, client, false); + expect(client.setRoomAccountData).not.toHaveBeenCalled(); + }); + + // set true, existing event = false + it("sets unread flag to if existing event is false", async () => { + room.getAccountData = jest + .fn() + .mockReturnValue({ getContent: jest.fn().mockReturnValue({ unread: false }) }); + await setMarkedUnreadState(room, client, true); + expect(client.setRoomAccountData).toHaveBeenCalledWith(ROOM_ID, "com.famedly.marked_unread", { + unread: true, + }); + }); + + // set false, existing event = false + it("does nothing if set false and existing event is false", async () => { + room.getAccountData = jest + .fn() + .mockReturnValue({ getContent: jest.fn().mockReturnValue({ unread: false }) }); + await setMarkedUnreadState(room, client, false); + expect(client.setRoomAccountData).not.toHaveBeenCalled(); + }); + + // set true, existing event = true + it("does nothing if setting true and existing event is true", async () => { + room.getAccountData = jest + .fn() + .mockReturnValue({ getContent: jest.fn().mockReturnValue({ unread: true }) }); + await setMarkedUnreadState(room, client, true); + expect(client.setRoomAccountData).not.toHaveBeenCalled(); + }); + + // set false, existing event = true + it("sets flag if setting false and existing event is true", async () => { + room.getAccountData = jest + .fn() + .mockReturnValue({ getContent: jest.fn().mockReturnValue({ unread: true }) }); + await setMarkedUnreadState(room, client, false); + expect(client.setRoomAccountData).toHaveBeenCalledWith(ROOM_ID, "com.famedly.marked_unread", { + unread: false, + }); + }); + }); + describe("notificationLevelToIndicator", () => { it("returns undefined if notification level is None", () => { expect(notificationLevelToIndicator(NotificationLevel.None)).toBeUndefined(); diff --git a/yarn.lock b/yarn.lock index fc2aac78c0e..a32bc5fb8ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1813,10 +1813,10 @@ resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== -"@matrix-org/analytics-events@^0.10.0": - version "0.10.0" - resolved "https://registry.yarnpkg.com/@matrix-org/analytics-events/-/analytics-events-0.10.0.tgz#d4d8b7859a516e888050d616ebbb0da539a15b1e" - integrity sha512-qzi7szEWxcl3nW2LDfq+SvFH/of/B/lwhfFUelhihGfr5TBPwgqM95Euc9GeYMZkU8Xm/2f5hYfA0ZleD6RKaA== +"@matrix-org/analytics-events@^0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@matrix-org/analytics-events/-/analytics-events-0.12.0.tgz#2e48c75eb39c38cbb52f0cd479eed4c835064e9f" + integrity sha512-J/rP11P2Q9PbH7iUzHIthnAQlJL1HEorUjtdd/yCrXDSk0Gw4dNe1FM2P75E6m2lUl2yJQhzGuahMmqe9xOWaw== "@matrix-org/emojibase-bindings@^1.1.2": version "1.1.3" From ddd0ec48acfd72f185fce339a8e2ff28e0e6cf2a Mon Sep 17 00:00:00 2001 From: Florian Duros Date: Tue, 19 Mar 2024 14:45:23 +0100 Subject: [PATCH 036/235] Change user permission by using a new apply button (#12346) * Add PowerLevelSelector.tsx. It's extracting the current behavior of the privileged users and muted of `RolesRoomSettingsTab.tsx` into a dedicated component. It's also adding a new apply button. * Use `PowerLevelSelector` to render privileged and muted users in `RolesRoomSettingsTab` * Update existing tests * Add playwright test * Fix typo * Fix typo --- ...oles-permissions-room-settings-tab.spec.ts | 58 +++++ res/css/_components.pcss | 1 + .../views/settings/_PowerLevelSelector.pcss | 21 ++ .../views/settings/PowerLevelSelector.tsx | 142 +++++++++++ .../tabs/room/RolesRoomSettingsTab.tsx | 85 ++----- .../settings/PowerLevelSelector-test.tsx | 120 +++++++++ .../PowerLevelSelector-test.tsx.snap | 235 ++++++++++++++++++ .../tabs/room/RolesRoomSettingsTab-test.tsx | 8 +- 8 files changed, 607 insertions(+), 63 deletions(-) create mode 100644 playwright/e2e/settings/roles-permissions-room-settings-tab.spec.ts create mode 100644 res/css/views/settings/_PowerLevelSelector.pcss create mode 100644 src/components/views/settings/PowerLevelSelector.tsx create mode 100644 test/components/views/settings/PowerLevelSelector-test.tsx create mode 100644 test/components/views/settings/__snapshots__/PowerLevelSelector-test.tsx.snap diff --git a/playwright/e2e/settings/roles-permissions-room-settings-tab.spec.ts b/playwright/e2e/settings/roles-permissions-room-settings-tab.spec.ts new file mode 100644 index 00000000000..8d8c2ebffa7 --- /dev/null +++ b/playwright/e2e/settings/roles-permissions-room-settings-tab.spec.ts @@ -0,0 +1,58 @@ +/* + * + * Copyright 2024 The Matrix.org Foundation C.I.C. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * / + */ + +import { Locator } from "@playwright/test"; + +import { test, expect } from "../../element-web-test"; + +test.describe("Roles & Permissions room settings tab", () => { + const roomName = "Test room"; + + test.use({ + displayName: "Alice", + }); + + let settings: Locator; + + test.beforeEach(async ({ user, app }) => { + await app.client.createRoom({ name: roomName }); + await app.viewRoomByName(roomName); + settings = await app.settings.openRoomSettings("Roles & Permissions"); + }); + + test("should be able to change the role of a user", async ({ page, app, user }) => { + const privilegedUserSection = settings.locator(".mx_SettingsFieldset").first(); + const applyButton = privilegedUserSection.getByRole("button", { name: "Apply" }); + + // Alice is admin (100) and the Apply button should be disabled + await expect(applyButton).toBeDisabled(); + let combobox = privilegedUserSection.getByRole("combobox", { name: user.userId }); + await expect(combobox).toHaveValue("100"); + + // Change the role of Alice to Moderator (50) + await combobox.selectOption("Moderator"); + await expect(combobox).toHaveValue("50"); + await applyButton.click(); + + // Reload and check Alice is still Moderator (50) + await page.reload(); + settings = await app.settings.openRoomSettings("Roles & Permissions"); + combobox = privilegedUserSection.getByRole("combobox", { name: user.userId }); + await expect(combobox).toHaveValue("50"); + }); +}); diff --git a/res/css/_components.pcss b/res/css/_components.pcss index 1ae7648ca30..3ef26f8199d 100644 --- a/res/css/_components.pcss +++ b/res/css/_components.pcss @@ -335,6 +335,7 @@ @import "./views/settings/_NotificationSettings2.pcss"; @import "./views/settings/_Notifications.pcss"; @import "./views/settings/_PhoneNumbers.pcss"; +@import "./views/settings/_PowerLevelSelector.pcss"; @import "./views/settings/_ProfileSettings.pcss"; @import "./views/settings/_SecureBackupPanel.pcss"; @import "./views/settings/_SetIdServer.pcss"; diff --git a/res/css/views/settings/_PowerLevelSelector.pcss b/res/css/views/settings/_PowerLevelSelector.pcss new file mode 100644 index 00000000000..50745d1cd89 --- /dev/null +++ b/res/css/views/settings/_PowerLevelSelector.pcss @@ -0,0 +1,21 @@ +/* + * + * Copyright 2024 The Matrix.org Foundation C.I.C. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * / + */ + +.mx_PowerLevelSelector_Button { + align-self: flex-start; +} diff --git a/src/components/views/settings/PowerLevelSelector.tsx b/src/components/views/settings/PowerLevelSelector.tsx new file mode 100644 index 00000000000..5d823c885d2 --- /dev/null +++ b/src/components/views/settings/PowerLevelSelector.tsx @@ -0,0 +1,142 @@ +/* + * + * Copyright 2024 The Matrix.org Foundation C.I.C. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * / + */ + +import React, { useState, JSX, PropsWithChildren } from "react"; +import { Button } from "@vector-im/compound-web"; +import { compare } from "matrix-js-sdk/src/utils"; + +import { useMatrixClientContext } from "../../../contexts/MatrixClientContext"; +import PowerSelector from "../elements/PowerSelector"; +import { _t } from "../../../languageHandler"; +import SettingsFieldset from "./SettingsFieldset"; + +/** + * Display in a fieldset, the power level of the users and allow to change them. + * The apply button is disabled until the power level of an user is changed. + * If there is no user to display, the children is displayed instead. + */ +interface PowerLevelSelectorProps { + /** + * The power levels of the users + * The key is the user id and the value is the power level + */ + userLevels: Record; + /** + * Whether the user can change the power levels of other users + */ + canChangeLevels: boolean; + /** + * The current user power level + */ + currentUserLevel: number; + /** + * The callback when the apply button is clicked + * @param value - new power level for the user + * @param userId - the user id + */ + onClick: (value: number, userId: string) => void; + /** + * Filter the users to display + * @param user + */ + filter: (user: string) => boolean; + /** + * The title of the fieldset + */ + title: string; +} + +export function PowerLevelSelector({ + userLevels, + canChangeLevels, + currentUserLevel, + onClick, + filter, + title, + children, +}: PropsWithChildren): JSX.Element | null { + const matrixClient = useMatrixClientContext(); + const [currentPowerLevel, setCurrentPowerLevel] = useState<{ value: number; userId: string } | null>(null); + + // If the power level has changed, we need to enable the apply button + const powerLevelChanged = Boolean( + currentPowerLevel && currentPowerLevel.value !== userLevels[currentPowerLevel?.userId], + ); + + // We sort the users by power level, then we filter them + const users = Object.keys(userLevels) + .sort((userA, userB) => sortUser(userA, userB, userLevels)) + .filter(filter); + + // No user to display, we return the children into fragment to convert it to JSX.Element type + if (!users.length) return <>{children}; + + return ( + + {users.map((userId) => { + // We only want to display users with a valid power level aka an integer + if (!Number.isInteger(userLevels[userId])) return; + + const isMe = userId === matrixClient.getUserId(); + // If I can change levels, I can change the level of anyone with a lower level than mine + const canChange = canChangeLevels && (userLevels[userId] < currentUserLevel || isMe); + + // When the new power level is selected, the fields are rerendered and we need to keep the current value + const userLevel = currentPowerLevel?.userId === userId ? currentPowerLevel?.value : userLevels[userId]; + + return ( + setCurrentPowerLevel({ value, userId })} + /> + ); + })} + + + + ); +} + +/** + * Sort the users by power level, then by name + * @param userA + * @param userB + * @param userLevels + */ +function sortUser(userA: string, userB: string, userLevels: PowerLevelSelectorProps["userLevels"]): number { + const powerLevelDiff = userLevels[userA] - userLevels[userB]; + return powerLevelDiff !== 0 ? powerLevelDiff : compare(userA.toLocaleLowerCase(), userB.toLocaleLowerCase()); +} diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx index 5f03e7f9505..d1b6c4eaf1c 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx @@ -18,7 +18,6 @@ import React from "react"; import { EventType, RoomMember, RoomState, RoomStateEvent, Room, IContent } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { throttle, get } from "lodash"; -import { compare } from "matrix-js-sdk/src/utils"; import { _t, _td, TranslationKey } from "../../../../../languageHandler"; import AccessibleButton from "../../../elements/AccessibleButton"; @@ -34,6 +33,7 @@ import { AddPrivilegedUsers } from "../../AddPrivilegedUsers"; import SettingsTab from "../SettingsTab"; import { SettingsSection } from "../../shared/SettingsSection"; import MatrixClientContext from "../../../../../contexts/MatrixClientContext"; +import { PowerLevelSelector } from "../../PowerLevelSelector"; interface IEventShowOpts { isState?: boolean; @@ -240,9 +240,6 @@ export default class RolesRoomSettingsTab extends React.Component { title: _t("room_settings|permissions|error_changing_pl_title"), description: _t("room_settings|permissions|error_changing_pl_description"), }); - - // Rethrow so that the PowerSelector can roll back - throw e; } }; @@ -352,65 +349,29 @@ export default class RolesRoomSettingsTab extends React.Component { let privilegedUsersSection =

    {_t("room_settings|permissions|no_privileged_users")}
    ; let mutedUsersSection; if (Object.keys(userLevels).length) { - const privilegedUsers: JSX.Element[] = []; - const mutedUsers: JSX.Element[] = []; - - Object.keys(userLevels).forEach((user) => { - if (!Number.isInteger(userLevels[user])) return; - const isMe = user === client.getUserId(); - const canChange = canChangeLevels && (userLevels[user] < currentUserLevel || isMe); - if (userLevels[user] > defaultUserLevel) { - // privileged - privilegedUsers.push( - , - ); - } else if (userLevels[user] < defaultUserLevel) { - // muted - mutedUsers.push( - , - ); - } - }); + privilegedUsersSection = ( + userLevels[user] > defaultUserLevel} + > +
    {_t("room_settings|permissions|no_privileged_users")}
    +
    + ); - // comparator for sorting PL users lexicographically on PL descending, MXID ascending. (case-insensitive) - const comparator = (a: JSX.Element, b: JSX.Element): number => { - const aKey = a.key as string; - const bKey = b.key as string; - const plDiff = userLevels[bKey] - userLevels[aKey]; - return plDiff !== 0 ? plDiff : compare(aKey.toLocaleLowerCase(), bKey.toLocaleLowerCase()); - }; - - privilegedUsers.sort(comparator); - mutedUsers.sort(comparator); - - if (privilegedUsers.length) { - privilegedUsersSection = ( - - {privilegedUsers} - - ); - } - if (mutedUsers.length) { - mutedUsersSection = ( - - {mutedUsers} - - ); - } + mutedUsersSection = ( + userLevels[user] < defaultUserLevel} + /> + ); } const banned = room.getMembersWithMembership("ban"); diff --git a/test/components/views/settings/PowerLevelSelector-test.tsx b/test/components/views/settings/PowerLevelSelector-test.tsx new file mode 100644 index 00000000000..7218b5709d8 --- /dev/null +++ b/test/components/views/settings/PowerLevelSelector-test.tsx @@ -0,0 +1,120 @@ +/* + * + * Copyright 2024 The Matrix.org Foundation C.I.C. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * / + */ + +import { render, screen } from "@testing-library/react"; +import React, { ComponentProps } from "react"; +import userEvent from "@testing-library/user-event"; + +import { PowerLevelSelector } from "../../../../src/components/views/settings/PowerLevelSelector"; +import { stubClient } from "../../../test-utils"; +import MatrixClientContext from "../../../../src/contexts/MatrixClientContext"; + +describe("PowerLevelSelector", () => { + const matrixClient = stubClient(); + + const currentUser = matrixClient.getUserId()!; + const userLevels = { + [currentUser]: 100, + "@alice:server.org": 50, + "@bob:server.org": 0, + }; + + const renderPLS = (props: Partial>) => + render( + + true} + onClick={jest.fn()} + {...props} + > + empty label + + , + ); + + it("should render", () => { + renderPLS({}); + expect(screen.getByRole("group")).toMatchSnapshot(); + }); + + it("should display only the current user", async () => { + // Display only the current user + renderPLS({ filter: (user) => user === currentUser }); + + // Only alice should be displayed + const userSelects = screen.getAllByRole("combobox"); + expect(userSelects).toHaveLength(1); + expect(userSelects[0]).toHaveAccessibleName(currentUser); + + expect(screen.getByRole("group")).toMatchSnapshot(); + }); + + it("should be able to change the power level of the current user", async () => { + const onClick = jest.fn(); + renderPLS({ onClick }); + + // Until the power level is changed, the apply button should be disabled + // compound button is using aria-disabled instead of the disabled attribute, we can't toBeDisabled on it + expect(screen.getByRole("button", { name: "Apply" })).toHaveAttribute("aria-disabled", "true"); + + const select = screen.getByRole("combobox", { name: currentUser }); + // Sanity check + expect(select).toHaveValue("100"); + + // Change current user power level to 50 + await userEvent.selectOptions(select, "50"); + expect(select).toHaveValue("50"); + // After the user level changes, the apply button should be enabled + expect(screen.getByRole("button", { name: "Apply" })).toHaveAttribute("aria-disabled", "false"); + + // Click on Apply should call onClick with the new power level + await userEvent.click(screen.getByRole("button", { name: "Apply" })); + expect(onClick).toHaveBeenCalledWith(50, currentUser); + }); + + it("should not be able to change the power level if `canChangeLevels` is false", async () => { + renderPLS({ canChangeLevels: false }); + + // The selects should be disabled + const userSelects = screen.getAllByRole("combobox"); + userSelects.forEach((select) => expect(select).toBeDisabled()); + }); + + it("should be able to change only the level of someone with a lower level", async () => { + const userLevels = { + [currentUser]: 50, + "@alice:server.org": 100, + }; + renderPLS({ userLevels }); + + expect(screen.getByRole("combobox", { name: currentUser })).toBeEnabled(); + expect(screen.getByRole("combobox", { name: "@alice:server.org" })).toBeDisabled(); + }); + + it("should display the children if there is no user to display", async () => { + // No user to display + renderPLS({ filter: () => false }); + + expect(screen.getByText("empty label")).toBeInTheDocument(); + }); +}); diff --git a/test/components/views/settings/__snapshots__/PowerLevelSelector-test.tsx.snap b/test/components/views/settings/__snapshots__/PowerLevelSelector-test.tsx.snap new file mode 100644 index 00000000000..f9cd625b0fa --- /dev/null +++ b/test/components/views/settings/__snapshots__/PowerLevelSelector-test.tsx.snap @@ -0,0 +1,235 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`PowerLevelSelector should display only the current user 1`] = ` +
    + + title + +
    +
    +
    + + +
    +
    + +
    +
    +`; + +exports[`PowerLevelSelector should render 1`] = ` +
    + + title + +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +
    +`; diff --git a/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx b/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx index f121f6f045b..1c63ac75f75 100644 --- a/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx +++ b/test/components/views/settings/tabs/room/RolesRoomSettingsTab-test.tsx @@ -15,10 +15,11 @@ limitations under the License. */ import React from "react"; -import { fireEvent, render, RenderResult, screen, waitFor } from "@testing-library/react"; +import { fireEvent, getByRole, render, RenderResult, screen, waitFor } from "@testing-library/react"; import { MatrixClient, EventType, MatrixEvent, Room, RoomMember, ISendEventResponse } from "matrix-js-sdk/src/matrix"; import { mocked } from "jest-mock"; import { defer } from "matrix-js-sdk/src/utils"; +import userEvent from "@testing-library/user-event"; import RolesRoomSettingsTab from "../../../../../../src/components/views/settings/tabs/room/RolesRoomSettingsTab"; import { mkStubRoom, withClientContextRenderOptions, stubClient } from "../../../../../test-utils"; @@ -262,6 +263,11 @@ describe("RolesRoomSettingsTab", () => { fireEvent.change(selector, { target: { value: "50" } }); expect(selector).toHaveValue("50"); + // Get the apply button of the privileged user section and click on it + const privilegedUsersSection = screen.getByRole("group", { name: "Privileged Users" }); + const applyButton = getByRole(privilegedUsersSection, "button", { name: "Apply" }); + await userEvent.click(applyButton); + deferred.reject("Error"); await waitFor(() => expect(selector).toHaveValue("100")); }); From f8131e236313b4f9881d7db9f0d935ead0a7a9d5 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 19 Mar 2024 15:07:34 +0000 Subject: [PATCH 037/235] Upgrade dependency to matrix-js-sdk@31.6.0-rc.0 --- package.json | 2 +- yarn.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index afb50aec349..96dfe850e61 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "maplibre-gl": "^2.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": "31.6.0-rc.0", "matrix-widget-api": "^1.5.0", "memoize-one": "^6.0.0", "minimist": "^1.2.5", diff --git a/yarn.lock b/yarn.lock index a32bc5fb8ec..c58a9199a11 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6858,9 +6858,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 "31.5.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/8e0ef5ff2cd927efa1bd22cabb075a14b10e39d5" +matrix-js-sdk@31.6.0-rc.0: + version "31.6.0-rc.0" + resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-31.6.0-rc.0.tgz#a6c31ca2f350a6b01b5708b14b3b29eb4d454c5c" + integrity sha512-3tWnHQY782KBnZ8/eIK6kbgnw4+IV1wWmAMD36iLVQ1KrfYb/PcJn9Nrm3NJZPLsjLZxbigSzeMCLIEJnL+w1Q== dependencies: "@babel/runtime" "^7.12.5" "@matrix-org/matrix-sdk-crypto-wasm" "^4.6.0" From ce8a2f333d986c84ab1089b572830244120bad15 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 19 Mar 2024 15:17:02 +0000 Subject: [PATCH 038/235] v3.96.0-rc.0 --- package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 96dfe850e61..b573ce1f654 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matrix-react-sdk", - "version": "3.95.0", + "version": "3.96.0-rc.0", "description": "SDK for matrix.org using React", "author": "matrix.org", "repository": { @@ -23,7 +23,7 @@ "package.json", ".stylelintrc.js" ], - "main": "./src/index.ts", + "main": "./lib/index.ts", "matrix_src_main": "./src/index.ts", "matrix_lib_main": "./lib/index.ts", "matrix_lib_typings": "./lib/index.d.ts", @@ -233,5 +233,6 @@ "outputDirectory": "coverage", "outputName": "jest-sonar-report.xml", "relativePaths": true - } + }, + "typings": "./lib/index.d.ts" } From 99e32df342e0c3978619b934acb816a4cd7952e0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 16:39:47 +0000 Subject: [PATCH 039/235] Update babel monorepo to v7.24.1 (#12352) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 1032 +++++++++++++++++++++++++++-------------------------- 1 file changed, 534 insertions(+), 498 deletions(-) diff --git a/yarn.lock b/yarn.lock index a32bc5fb8ec..7356a4a8da1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,11 +40,11 @@ axe-core "~4.8.4" "@babel/cli@^7.12.10": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.23.9.tgz#06b3e76376ee53f14ac8ac422c884950c69e1b9e" - integrity sha512-vB1UXmGDNEhcf1jNAHKT9IlYk1R+hehVTLFlCLHBi8gfuHQGP6uRjgXVYU0EVlI/qwAWpstqkBdf2aez3/z/5Q== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.24.1.tgz#2e11e071e32fe82850b4fe514f56b9c9e1c44911" + integrity sha512-HbmrtxyFUr34LwAlV9jS+sSIjUp4FpdtIMGwgufY3AsxrIfsh/HxlMTywsONAZsU0RMYbZtbZFpUCrSGs7o0EA== dependencies: - "@jridgewell/trace-mapping" "^0.3.17" + "@jridgewell/trace-mapping" "^0.3.25" commander "^4.0.1" convert-source-map "^2.0.0" fs-readdir-recursive "^1.1.0" @@ -55,7 +55,7 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.4.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -71,30 +71,38 @@ "@babel/highlight" "^7.22.13" chalk "^2.4.2" +"@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.1.tgz#8f4027f85a6e84a695276080e864215318f95c19" + integrity sha512-bC49z4spJQR3j8vFtJBLqzyzFV0ciuL5HYX7qfSl3KEqeMVV+eTquRvmXxpvB0AMubRrvv7y5DILiLLPi57Ewg== + dependencies: + "@babel/highlight" "^7.24.1" + picocolors "^1.0.0" + "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.5": version "7.21.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.1.tgz#31c1f66435f2a9c329bb5716a6d6186c516c3742" + integrity sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA== "@babel/core@^7.0.0", "@babel/core@^7.12.10": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" - integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.1.tgz#b802f931b6498dcb8fed5a4710881a45abbc2784" + integrity sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.0" - "@babel/parser" "^7.24.0" + "@babel/helpers" "^7.24.1" + "@babel/parser" "^7.24.1" "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" + "@babel/traverse" "^7.24.1" "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" @@ -124,9 +132,9 @@ semver "^6.3.1" "@babel/eslint-parser@^7.12.10": - version "7.23.10" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz#2d4164842d6db798873b40e0c4238827084667a2" - integrity sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz#e27eee93ed1d271637165ef3a86e2b9332395c32" + integrity sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" @@ -159,14 +167,14 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== +"@babel/generator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.1.tgz#e67e06f68568a4ebf194d1c6014235344f0476d0" + integrity sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A== dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": @@ -220,17 +228,17 @@ "@babel/helper-split-export-declaration" "^7.18.6" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.22.15": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz#fc7554141bdbfa2d17f7b4b80153b9b090e5d158" - integrity sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g== +"@babel/helper-create-class-features-plugin@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz#db58bf57137b623b916e24874ab7188d93d7f68f" + integrity sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-replace-supers" "^7.24.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" @@ -244,10 +252,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" - integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== +"@babel/helper-define-polyfill-provider@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" + integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -282,19 +290,19 @@ dependencies: "@babel/types" "^7.21.5" -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": +"@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== +"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.1.tgz#961ea2c12aad6cfc75b8c396c81608a08283027b" + integrity sha512-HfEWzysMyOa7xI5uQHc/OcZf67/jc+xe/RZlznWQHhbb8Pg1SkRdbK4yEi61aY8wxQA7PkSfoojtLQP/Kpe3og== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.24.0" "@babel/helper-module-transforms@^7.22.20": version "7.22.20" @@ -363,13 +371,13 @@ "@babel/traverse" "^7.21.5" "@babel/types" "^7.21.5" -"@babel/helper-replace-supers@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== +"@babel/helper-replace-supers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" + integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-simple-access@^7.22.5": @@ -400,11 +408,16 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5", "@babel/helper-string-parser@^7.23.4": +"@babel/helper-string-parser@^7.22.5": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== +"@babel/helper-string-parser@^7.23.4": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== + "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" @@ -415,7 +428,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== -"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": +"@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== @@ -438,16 +451,16 @@ "@babel/traverse" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/helpers@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" - integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== +"@babel/helpers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.1.tgz#183e44714b9eba36c3038e442516587b1e0a1a94" + integrity sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg== dependencies: "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" + "@babel/traverse" "^7.24.1" "@babel/types" "^7.24.0" -"@babel/highlight@^7.22.13", "@babel/highlight@^7.23.4": +"@babel/highlight@^7.22.13": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== @@ -456,34 +469,44 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.14.7", "@babel/parser@^7.18.5", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16", "@babel/parser@^7.23.3", "@babel/parser@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" - integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== +"@babel/highlight@^7.23.4", "@babel/highlight@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.1.tgz#21f3f5391c793b3f0d6dbb40f898c48cc6ad4215" + integrity sha512-EPmDPxidWe/Ex+HTFINpvXdPHRmgSF3T8hGvzondYjmgzTQ/0EbLpSxyt+w3zzlYSk9cNBQNF9k0dT5Z2NiBjw== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.14.7", "@babel/parser@^7.18.5", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16", "@babel/parser@^7.23.3", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.1.tgz#1e416d3627393fab1cb5b0f2f1796a100ae9133a" + integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" + integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" + integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/plugin-transform-optional-chaining" "^7.24.1" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" - integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz#1181d9685984c91d657b8ddf14f0487a6bab2988" + integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-proposal-class-properties@^7.12.1": version "7.18.6" @@ -494,12 +517,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-export-default-from@^7.12.1": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.23.3.tgz#6f511a676c540ccc8d17a8553dbba9230b0ddac0" - integrity sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.1.tgz#d242019488277c9a5a8035e5b70de54402644b89" + integrity sha512-+0hrgGGV3xyYIjOrD/bUZk/iUwOIGuoANfRfVg1cPhYBxF+TIXSEcc42DqzBICmWsnAQ+SfKedY0bj8QD+LuMg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-default-from" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-export-default-from" "^7.24.1" "@babel/plugin-proposal-numeric-separator@^7.12.7": version "7.18.6" @@ -560,12 +583,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.23.3.tgz#7e6d4bf595d5724230200fb2b7401d4734b15335" - integrity sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw== +"@babel/plugin-syntax-export-default-from@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.1.tgz#a92852e694910ae4295e6e51e87b83507ed5e6e8" + integrity sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" @@ -574,19 +597,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== +"@babel/plugin-syntax-import-assertions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz#db3aad724153a00eaac115a3fb898de544e34971" + integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== +"@babel/plugin-syntax-import-attributes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" + integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -602,12 +625,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== +"@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" + integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-jsx@^7.7.2": version "7.22.5" @@ -672,12 +695,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== +"@babel/plugin-syntax-typescript@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-typescript@^7.7.2": version "7.22.5" @@ -694,212 +717,212 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== +"@babel/plugin-transform-arrow-functions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" + integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-async-generator-functions@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" - integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== +"@babel/plugin-transform-async-generator-functions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.1.tgz#b38009d650b3c419e6708ec5ab4fa5eeffe7b489" + integrity sha512-OTkLJM0OtmzcpOgF7MREERUCdCnCBtBsq3vVFbuq/RKMK0/jdYqdMexWi3zNs7Nzd95ase65MbTGrpFJflOb6A== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== +"@babel/plugin-transform-async-to-generator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" + integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-imports" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== +"@babel/plugin-transform-block-scoped-functions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" + integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-block-scoping@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== +"@babel/plugin-transform-block-scoping@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz#27af183d7f6dad890531256c7a45019df768ac1f" + integrity sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== +"@babel/plugin-transform-class-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" + integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-class-static-block@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== +"@babel/plugin-transform-class-static-block@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz#4e37efcca1d9f2fcb908d1bae8b56b4b6e9e1cb6" + integrity sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.23.8": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" - integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== +"@babel/plugin-transform-classes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" + integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== +"@babel/plugin-transform-computed-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" + integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/template" "^7.24.0" -"@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== +"@babel/plugin-transform-destructuring@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" + integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== +"@babel/plugin-transform-dotall-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" + integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== +"@babel/plugin-transform-duplicate-keys@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" + integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-dynamic-import@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== +"@babel/plugin-transform-dynamic-import@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" + integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== +"@babel/plugin-transform-exponentiation-operator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" + integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-export-namespace-from@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== +"@babel/plugin-transform-export-namespace-from@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" + integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" - integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== +"@babel/plugin-transform-for-of@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" + integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== +"@babel/plugin-transform-function-name@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" + integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== dependencies: - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-json-strings@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== +"@babel/plugin-transform-json-strings@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" + integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== +"@babel/plugin-transform-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" + integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-logical-assignment-operators@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== +"@babel/plugin-transform-logical-assignment-operators@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" + integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== +"@babel/plugin-transform-member-expression-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" + integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== +"@babel/plugin-transform-modules-amd@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" + integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== +"@babel/plugin-transform-modules-commonjs@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" + integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" - integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== +"@babel/plugin-transform-modules-systemjs@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" + integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== dependencies: "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== +"@babel/plugin-transform-modules-umd@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" + integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": version "7.22.5" @@ -909,62 +932,61 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== +"@babel/plugin-transform-new-target@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" + integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" + integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== +"@babel/plugin-transform-numeric-separator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" + integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz#7b836ad0088fdded2420ce96d4e1d3ed78b71df1" - integrity sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w== +"@babel/plugin-transform-object-rest-spread@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" + integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== dependencies: - "@babel/compat-data" "^7.23.5" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-parameters" "^7.24.1" -"@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== +"@babel/plugin-transform-object-super@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" + integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" -"@babel/plugin-transform-optional-catch-binding@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== +"@babel/plugin-transform-optional-catch-binding@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" + integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== +"@babel/plugin-transform-optional-chaining@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" + integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" @@ -975,44 +997,44 @@ dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== +"@babel/plugin-transform-parameters@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" + integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== +"@babel/plugin-transform-private-methods@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" + integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-private-property-in-object@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== +"@babel/plugin-transform-private-property-in-object@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" + integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== +"@babel/plugin-transform-property-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" + integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-react-display-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" - integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== +"@babel/plugin-transform-react-display-name@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz#554e3e1a25d181f040cf698b93fd289a03bfdcdb" + integrity sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-react-jsx-development@^7.22.5": version "7.22.5" @@ -1021,149 +1043,149 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz#7e6266d88705d7c49f11c98db8b9464531289cd6" - integrity sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA== +"@babel/plugin-transform-react-jsx@^7.22.5", "@babel/plugin-transform-react-jsx@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" + integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/types" "^7.22.15" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/types" "^7.23.4" -"@babel/plugin-transform-react-pure-annotations@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" - integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== +"@babel/plugin-transform-react-pure-annotations@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz#c86bce22a53956331210d268e49a0ff06e392470" + integrity sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== +"@babel/plugin-transform-regenerator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" + integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== +"@babel/plugin-transform-reserved-words@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" + integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-runtime@^7.12.10": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz#e308fe27d08b74027d42547081eefaf4f2ffbcc9" - integrity sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.1.tgz#3678311f7193ef7cf62c6f34c6f757d0301bf314" + integrity sha512-yHLX14/T+tO0gjgJroDb8JYjOcQuzVC+Brt4CjHAxq/Ghw4xBVG+N02d1rMEcyUnKUQBL4Yy2gA9R72GK961jQ== dependencies: - "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-module-imports" "^7.24.1" "@babel/helper-plugin-utils" "^7.24.0" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.1" + babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== +"@babel/plugin-transform-shorthand-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" + integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== +"@babel/plugin-transform-spread@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" + integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== +"@babel/plugin-transform-sticky-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" + integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== +"@babel/plugin-transform-template-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" + integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== +"@babel/plugin-transform-typeof-symbol@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" + integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-typescript@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.3.tgz#ce806e6cb485d468c48c4f717696719678ab0138" - integrity sha512-ogV0yWnq38CFwH20l2Afz0dfKuZBx9o/Y2Rmh5vuSS0YD1hswgEgTfyTzuSrT2q9btmHRSqYoSfwFUVaC1M1Jw== +"@babel/plugin-transform-typescript@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.1.tgz#5c05e28bb76c7dfe7d6c5bed9951324fd2d3ab07" + integrity sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-typescript" "^7.24.1" -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== +"@babel/plugin-transform-unicode-escapes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" + integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== +"@babel/plugin-transform-unicode-property-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" + integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== +"@babel/plugin-transform-unicode-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" + integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== +"@babel/plugin-transform-unicode-sets-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" + integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/preset-env@^7.12.11": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.0.tgz#11536a7f4b977294f0bdfad780f01a8ac8e183fc" - integrity sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.1.tgz#e63a3f95d9922c07f4a53649b5c2f53f611f2e6c" + integrity sha512-CwCMz1Z28UHLI2iE+cbnWT2epPMV9bzzoBGM6A3mOS22VQd/1TPoWItV7S7iL9TkPmPEf5L/QzurmztyyDN9FA== dependencies: - "@babel/compat-data" "^7.23.5" + "@babel/compat-data" "^7.24.1" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" + "@babel/plugin-syntax-import-assertions" "^7.24.1" + "@babel/plugin-syntax-import-attributes" "^7.24.1" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1175,58 +1197,58 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.9" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.4" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.8" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.4" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.6" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.4" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.9" - "@babel/plugin-transform-modules-umd" "^7.23.3" + "@babel/plugin-transform-arrow-functions" "^7.24.1" + "@babel/plugin-transform-async-generator-functions" "^7.24.1" + "@babel/plugin-transform-async-to-generator" "^7.24.1" + "@babel/plugin-transform-block-scoped-functions" "^7.24.1" + "@babel/plugin-transform-block-scoping" "^7.24.1" + "@babel/plugin-transform-class-properties" "^7.24.1" + "@babel/plugin-transform-class-static-block" "^7.24.1" + "@babel/plugin-transform-classes" "^7.24.1" + "@babel/plugin-transform-computed-properties" "^7.24.1" + "@babel/plugin-transform-destructuring" "^7.24.1" + "@babel/plugin-transform-dotall-regex" "^7.24.1" + "@babel/plugin-transform-duplicate-keys" "^7.24.1" + "@babel/plugin-transform-dynamic-import" "^7.24.1" + "@babel/plugin-transform-exponentiation-operator" "^7.24.1" + "@babel/plugin-transform-export-namespace-from" "^7.24.1" + "@babel/plugin-transform-for-of" "^7.24.1" + "@babel/plugin-transform-function-name" "^7.24.1" + "@babel/plugin-transform-json-strings" "^7.24.1" + "@babel/plugin-transform-literals" "^7.24.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" + "@babel/plugin-transform-member-expression-literals" "^7.24.1" + "@babel/plugin-transform-modules-amd" "^7.24.1" + "@babel/plugin-transform-modules-commonjs" "^7.24.1" + "@babel/plugin-transform-modules-systemjs" "^7.24.1" + "@babel/plugin-transform-modules-umd" "^7.24.1" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" - "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.24.0" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.4" - "@babel/plugin-transform-optional-chaining" "^7.23.4" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.4" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/plugin-transform-new-target" "^7.24.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" + "@babel/plugin-transform-numeric-separator" "^7.24.1" + "@babel/plugin-transform-object-rest-spread" "^7.24.1" + "@babel/plugin-transform-object-super" "^7.24.1" + "@babel/plugin-transform-optional-catch-binding" "^7.24.1" + "@babel/plugin-transform-optional-chaining" "^7.24.1" + "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/plugin-transform-private-methods" "^7.24.1" + "@babel/plugin-transform-private-property-in-object" "^7.24.1" + "@babel/plugin-transform-property-literals" "^7.24.1" + "@babel/plugin-transform-regenerator" "^7.24.1" + "@babel/plugin-transform-reserved-words" "^7.24.1" + "@babel/plugin-transform-shorthand-properties" "^7.24.1" + "@babel/plugin-transform-spread" "^7.24.1" + "@babel/plugin-transform-sticky-regex" "^7.24.1" + "@babel/plugin-transform-template-literals" "^7.24.1" + "@babel/plugin-transform-typeof-symbol" "^7.24.1" + "@babel/plugin-transform-unicode-escapes" "^7.24.1" + "@babel/plugin-transform-unicode-property-regex" "^7.24.1" + "@babel/plugin-transform-unicode-regex" "^7.24.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.1" + babel-plugin-polyfill-regenerator "^0.6.1" core-js-compat "^3.31.0" semver "^6.3.1" @@ -1240,27 +1262,27 @@ esutils "^2.0.2" "@babel/preset-react@^7.12.10": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.23.3.tgz#f73ca07e7590f977db07eb54dbe46538cc015709" - integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.1.tgz#2450c2ac5cc498ef6101a6ca5474de251e33aa95" + integrity sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.23.3" - "@babel/plugin-transform-react-jsx" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-transform-react-display-name" "^7.24.1" + "@babel/plugin-transform-react-jsx" "^7.23.4" "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.23.3" + "@babel/plugin-transform-react-pure-annotations" "^7.24.1" "@babel/preset-typescript@^7.12.7": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" - integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" + integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-typescript" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-syntax-jsx" "^7.24.1" + "@babel/plugin-transform-modules-commonjs" "^7.24.1" + "@babel/plugin-transform-typescript" "^7.24.1" "@babel/register@^7.12.10": version "7.23.7" @@ -1279,9 +1301,9 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.0.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.9", "@babel/runtime@^7.23.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" - integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.1.tgz#431f9a794d173b53720e69a6464abc6f0e2a5c57" + integrity sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ== dependencies: regenerator-runtime "^0.14.0" @@ -1328,18 +1350,18 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" - integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== +"@babel/traverse@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" + integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.0" + "@babel/parser" "^7.24.1" "@babel/types" "^7.24.0" debug "^4.3.1" globals "^11.1.0" @@ -1353,7 +1375,7 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" -"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.4.4": +"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.4.4": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== @@ -1760,7 +1782,7 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.24": +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -3427,29 +3449,29 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.8: - version "0.4.8" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" - integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.10" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" + integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.5.0" + "@babel/helper-define-polyfill-provider" "^0.6.1" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" - integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== +babel-plugin-polyfill-corejs3@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.1.tgz#cd8750e0b7da30ec2f66007b6151792f02e1138e" + integrity sha512-XiFei6VGwM4ii6nKC1VCenGD8Z4bjiNYcrdkM8oqM3pbuemmyb8biMgrDX1ZHSbIuMLXatM6JJ/StPYIuTl6MQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - core-js-compat "^3.34.0" + "@babel/helper-define-polyfill-provider" "^0.6.1" + core-js-compat "^3.36.0" -babel-plugin-polyfill-regenerator@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" - integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" + integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" + "@babel/helper-define-polyfill-provider" "^0.6.1" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -3503,9 +3525,9 @@ big.js@^5.2.2: integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== blob-polyfill@^7.0.0: version "7.0.20220408" @@ -3572,7 +3594,7 @@ browserslist@^4.21.3: node-releases "^2.0.8" update-browserslist-db "^1.0.10" -browserslist@^4.22.2, browserslist@^4.22.3: +browserslist@^4.22.2, browserslist@^4.22.3, browserslist@^4.23.0: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== @@ -3643,9 +3665,9 @@ caniuse-lite@^1.0.30001449: integrity sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg== caniuse-lite@^1.0.30001587: - version "1.0.30001594" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001594.tgz#bea552414cd52c2d0c985ed9206314a696e685f5" - integrity sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g== + version "1.0.30001599" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001599.tgz#571cf4f3f1506df9bf41fcbb6d10d5d017817bce" + integrity sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA== chalk@5.2.0: version "5.2.0" @@ -3688,9 +3710,9 @@ charenc@0.0.2: integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== chokidar@^3.4.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -3878,7 +3900,14 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -core-js-compat@^3.31.0, core-js-compat@^3.34.0: +core-js-compat@^3.31.0, core-js-compat@^3.36.0: + version "3.36.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.1.tgz#1818695d72c99c25d621dca94e6883e190cea3c8" + integrity sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA== + dependencies: + browserslist "^4.23.0" + +core-js-compat@^3.34.0: version "3.36.0" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190" integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== @@ -4330,9 +4359,9 @@ electron-to-chromium@^1.4.284: integrity sha512-L9zlje9bIw0h+CwPQumiuVlfMcV4boxRjFIWDcLfFqTZNbkwOExBzfmswytHawObQX4OUhtNv8gIiB21kOurIg== electron-to-chromium@^1.4.668: - version "1.4.692" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.692.tgz#82139d20585a4b2318a02066af7593a3e6bec993" - integrity sha512-d5rZRka9n2Y3MkWRN74IoAsxR0HK3yaAt7T50e3iT9VZmCCQDT3geXUO5ZRMhDToa1pkCeQXuNo+0g+NfDOVPA== + version "1.4.710" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.710.tgz#d0ec4ea8a97df4c5eaeb8c69d45bf81f248b3855" + integrity sha512-w+9yAVHoHhysCa+gln7AzbO9CdjFcL/wN/5dd+XW/Msl2d/4+WisEaCF1nty0xbAKaxdaJfgLB2296U7zZB7BA== emittery@^0.13.1: version "0.13.1" @@ -5512,7 +5541,14 @@ has@^1.0.3: resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== -hasown@^2.0.0, hasown@^2.0.1: +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hasown@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== From e21b000526957e14024f1abf90b0c709f1f4f41c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 16:40:14 +0000 Subject: [PATCH 040/235] Update definitelyTyped (#12353) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7356a4a8da1..741ce734910 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2673,9 +2673,9 @@ integrity sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ== "@types/lodash@^4.14.168": - version "4.14.202" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" - integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== + version "4.17.0" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3" + integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA== "@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.2": version "0.1.4" @@ -2722,9 +2722,9 @@ undici-types "~5.26.4" "@types/node@18": - version "18.19.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.21.tgz#f4ca1ac8ffb05ee4b89163c2d6fac9a1a59ee149" - integrity sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw== + version "18.19.26" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.26.tgz#18991279d0a0e53675285e8cf4a0823766349729" + integrity sha512-+wiMJsIwLOYCvUqSdKTrfkS8mpTp+MPINe6+Np4TAGFWWRWiBQ5kSq9nZGCSPkzx9mvT+uEukzpX4MOSCydcvw== dependencies: undici-types "~5.26.4" From c9caf1bc36278ba3afd84f4ca5e0dfbb3d98acad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 16:40:39 +0000 Subject: [PATCH 041/235] Update typescript-eslint monorepo to v7.2.0 (#12355) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 104 +++++++++++++++++++++++++++--------------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/yarn.lock b/yarn.lock index 741ce734910..84cea2ab341 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2897,15 +2897,15 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^7.0.0": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz#dd71fc5c7ecec745ca26ece506d84d203a205c0e" - integrity sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw== + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.3.1.tgz#0d8f38a6c8a1802139e62184ee7a68ed024f30a1" + integrity sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "7.1.1" - "@typescript-eslint/type-utils" "7.1.1" - "@typescript-eslint/utils" "7.1.1" - "@typescript-eslint/visitor-keys" "7.1.1" + "@typescript-eslint/scope-manager" "7.3.1" + "@typescript-eslint/type-utils" "7.3.1" + "@typescript-eslint/utils" "7.3.1" + "@typescript-eslint/visitor-keys" "7.3.1" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -2914,14 +2914,14 @@ ts-api-utils "^1.0.1" "@typescript-eslint/parser@^7.0.0": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.1.1.tgz#6a9d0a5c9ccdf5dbd3cb8c949728c64e24e07d1f" - integrity sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ== - dependencies: - "@typescript-eslint/scope-manager" "7.1.1" - "@typescript-eslint/types" "7.1.1" - "@typescript-eslint/typescript-estree" "7.1.1" - "@typescript-eslint/visitor-keys" "7.1.1" + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.3.1.tgz#c4ba7dc2744318a5e4506596cbc3a0086255c526" + integrity sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw== + dependencies: + "@typescript-eslint/scope-manager" "7.3.1" + "@typescript-eslint/types" "7.3.1" + "@typescript-eslint/typescript-estree" "7.3.1" + "@typescript-eslint/visitor-keys" "7.3.1" debug "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": @@ -2932,21 +2932,21 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/scope-manager@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz#9e301803ff8e21a74f50c6f89a4baccad9a48f93" - integrity sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA== +"@typescript-eslint/scope-manager@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.3.1.tgz#73fd0cb4211a7be23e49e5b6efec8820caa6ec36" + integrity sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag== dependencies: - "@typescript-eslint/types" "7.1.1" - "@typescript-eslint/visitor-keys" "7.1.1" + "@typescript-eslint/types" "7.3.1" + "@typescript-eslint/visitor-keys" "7.3.1" -"@typescript-eslint/type-utils@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz#aee820d5bedd39b83c18585a526cc520ddb7a226" - integrity sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g== +"@typescript-eslint/type-utils@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.3.1.tgz#cbf90d3d7e788466aa8a5c0ab3f46103f098aa0d" + integrity sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw== dependencies: - "@typescript-eslint/typescript-estree" "7.1.1" - "@typescript-eslint/utils" "7.1.1" + "@typescript-eslint/typescript-estree" "7.3.1" + "@typescript-eslint/utils" "7.3.1" debug "^4.3.4" ts-api-utils "^1.0.1" @@ -2955,10 +2955,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.1.1.tgz#ca33ba7cf58224fb46a84fea62593c2c53cd795f" - integrity sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q== +"@typescript-eslint/types@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.3.1.tgz#ae104de8efa4227a462c0874d856602c5994413c" + integrity sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -2973,13 +2973,13 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz#09c54af0151a1b05d0875c0fc7fe2ec7a2476ece" - integrity sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw== +"@typescript-eslint/typescript-estree@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.3.1.tgz#598848195fad34c7aa73f548bd00a4d4e5f5e2bb" + integrity sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ== dependencies: - "@typescript-eslint/types" "7.1.1" - "@typescript-eslint/visitor-keys" "7.1.1" + "@typescript-eslint/types" "7.3.1" + "@typescript-eslint/visitor-keys" "7.3.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -2987,17 +2987,17 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.1.1.tgz#bdeeb789eee4af5d3fb5400a69566d4dbf97ff3b" - integrity sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg== +"@typescript-eslint/utils@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.3.1.tgz#fc28fd508ccf89495012561b7c02a6fdad162460" + integrity sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "7.1.1" - "@typescript-eslint/types" "7.1.1" - "@typescript-eslint/typescript-estree" "7.1.1" + "@typescript-eslint/scope-manager" "7.3.1" + "@typescript-eslint/types" "7.3.1" + "@typescript-eslint/typescript-estree" "7.3.1" semver "^7.5.4" "@typescript-eslint/utils@^5.10.0": @@ -3022,12 +3022,12 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz#e6538a58c9b157f03bcbb29e3b6a92fe39a6ab0d" - integrity sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ== +"@typescript-eslint/visitor-keys@7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.3.1.tgz#6ddef14a3ce2a79690f01176f5305c34d7b93d8c" + integrity sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw== dependencies: - "@typescript-eslint/types" "7.1.1" + "@typescript-eslint/types" "7.3.1" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": @@ -8894,9 +8894,9 @@ truncate-utf8-bytes@^1.0.0: utf8-byte-length "^1.0.1" ts-api-utils@^1.0.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" - integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== ts-node@^10.9.1: version "10.9.2" From 7cbf7cce423fb8387041dfb79135e8070cbf5d2a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 16:40:43 +0000 Subject: [PATCH 042/235] Update dependency @sentry/browser to v7.107.0 (#12354) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 136 +++++++++++++++++++++++++++--------------------------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/yarn.lock b/yarn.lock index 84cea2ab341..f7eb12166c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2279,76 +2279,76 @@ dependencies: "@babel/runtime" "^7.13.10" -"@sentry-internal/feedback@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.105.0.tgz#f2a25b55e5368509cfd540c21e74503568492057" - integrity sha512-17doUQFKYgLfG7EmZXjZQ7HR/aBzuLDd+GVaCNthUPyiz/tltV7EFECDWwHpXqzQgYRgroSbY8PruMVujFGUUw== - dependencies: - "@sentry/core" "7.105.0" - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry-internal/replay-canvas@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.105.0.tgz#fed7d67d976837ef7c1b72a6db461179703fa6f5" - integrity sha512-XMBdkjIDhap5Gwrub5wlUJhuUVJM4aL4lZV8KcxJZZSXgXsnyGYbEh9SPZOHO05jtbxTxVeL3Pik5qtYjdGnPA== - dependencies: - "@sentry/core" "7.105.0" - "@sentry/replay" "7.105.0" - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry-internal/tracing@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.105.0.tgz#9cb06f8281454343215cfe4b119c8198f032ec72" - integrity sha512-b+AFYB7Bc9vmyxl2jbmuT4esX5G0oPfpz35A0sxFzmJIhvMg1YMDNio2c81BtKN+VSPORCnKMLhfk3kyKKvWMQ== - dependencies: - "@sentry/core" "7.105.0" - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" +"@sentry-internal/feedback@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.107.0.tgz#144cf01b1c1739d61db3990519f59b49a356fef1" + integrity sha512-okF0B9AJHrpkwNMxNs/Lffw3N5ZNbGwz4uvCfyOfnMxc7E2VfDM18QzUvTBRvNr3bA9wl+InJ+EMG3aZhyPunA== + dependencies: + "@sentry/core" "7.107.0" + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry-internal/replay-canvas@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.107.0.tgz#ce2a8f6bf63ab962e696f26b509cfb87aa931302" + integrity sha512-dmDL9g3QDfo7axBOsVnpiKdJ/DXrdeuRv1AqsLgwzJKvItsv0ZizX0u+rj5b1UoxcwbXRMxJ0hit5a1yt3t/ow== + dependencies: + "@sentry/core" "7.107.0" + "@sentry/replay" "7.107.0" + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry-internal/tracing@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.107.0.tgz#a10b4abcbc9e0d8da948e3a95029574387ca7b16" + integrity sha512-le9wM8+OHBbq7m/8P7JUJ1UhSPIty+Z/HmRXc5Z64ODZcOwFV6TmDpYx729IXDdz36XUKmeI+BeM7yQdTTZPfQ== + dependencies: + "@sentry/core" "7.107.0" + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" "@sentry/browser@^7.0.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.105.0.tgz#3eb56785cfc1cf58528b29ea954b73093e6f9481" - integrity sha512-OlYJzsZG109T1VpZ7O7KXf9IXCUUpp41lkkQM7ICBOBsfiHRUKmV5piTGCG5UgAvyb/gI/I1uQQtO4jthcHKEA== - dependencies: - "@sentry-internal/feedback" "7.105.0" - "@sentry-internal/replay-canvas" "7.105.0" - "@sentry-internal/tracing" "7.105.0" - "@sentry/core" "7.105.0" - "@sentry/replay" "7.105.0" - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry/core@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.105.0.tgz#89db519dd9aa7326de63a7eaccf861de3769ab1c" - integrity sha512-5xsaTG6jZincTeJUmZomlv20mVRZUEF1U/g89lmrSOybyk2+opEnB1JeBn4ODwnvmSik8r2QLr6/RiYlaxRJCg== - dependencies: - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry/replay@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.105.0.tgz#61784e3e88afa66a0d9b1b9d222153ab54ea4bd0" - integrity sha512-hZD2m6fNL9gorUOaaEpqxeH7zNP4y2Ej0TdieM1HMQ2q9Zrm9yOzk9/7ALfbRLIZFRMFTqo9vvVztLs3E+Hx+g== - dependencies: - "@sentry-internal/tracing" "7.105.0" - "@sentry/core" "7.105.0" - "@sentry/types" "7.105.0" - "@sentry/utils" "7.105.0" - -"@sentry/types@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.105.0.tgz#51dadb7ad650e883459acf18df2ecbb5b4b6e5c2" - integrity sha512-80o0KMVM+X2Ym9hoQxvJetkJJwkpCg7o6tHHFXI+Rp7fawc2iCMTa0IRQMUiSkFvntQLYIdDoNNuKdzz2PbQGA== - -"@sentry/utils@7.105.0": - version "7.105.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.105.0.tgz#727187d252b97cb9e6c78bcdd0e9a1d14e60f313" - integrity sha512-YVAV0c2KLM8+VZCicQ/E/P2+J9Vs0hGhrXwV7w6ZEAtvxrg4oF270toL1WRhvcaf8JO4J1v4V+LuU6Txs4uEeQ== - dependencies: - "@sentry/types" "7.105.0" + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.107.0.tgz#a1caf4a3c39857862ba3314b9d4ed03f9259f338" + integrity sha512-KnqaQDhxv6w9dJ+mYLsNwPeGZfgbpM3vaismBNyJCKLgWn2V75kxkSq+bDX8LQT/13AyK7iFp317L6P8EuNa3g== + dependencies: + "@sentry-internal/feedback" "7.107.0" + "@sentry-internal/replay-canvas" "7.107.0" + "@sentry-internal/tracing" "7.107.0" + "@sentry/core" "7.107.0" + "@sentry/replay" "7.107.0" + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry/core@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.107.0.tgz#926838ba2c2861d6bd2bced0232e1f9d1ead6c75" + integrity sha512-C7ogye6+KPyBi8NVL0P8Rxx3Ur7Td8ufnjxosVy678lqY+dcYPk/HONROrzUFYW5fMKWL4/KYnwP+x9uHnkDmw== + dependencies: + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry/replay@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.107.0.tgz#d714f864ef8602e6d009b2fa8ff8e4ef63c3e9e4" + integrity sha512-BNJDEVaEwr/YnV22qnyVA1almx/3p615m3+KaF8lPo7YleYgJGSJv1auH64j1G8INkrJ0J0wFBujb1EFjMYkxA== + dependencies: + "@sentry-internal/tracing" "7.107.0" + "@sentry/core" "7.107.0" + "@sentry/types" "7.107.0" + "@sentry/utils" "7.107.0" + +"@sentry/types@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.107.0.tgz#5ba4b472be6ccad9aecd58dbc0141a09dafb68c1" + integrity sha512-H7qcPjPSUWHE/Zf5bR1EE24G0pGVuJgrSx8Tvvl5nKEepswMYlbXHRVSDN0gTk/E5Z7cqf+hUBOpkQgZyps77w== + +"@sentry/utils@7.107.0": + version "7.107.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.107.0.tgz#b8524539d052a40f9c5f34a8347501f0f81a0751" + integrity sha512-C6PbN5gHh73MRHohnReeQ60N8rrLYa9LciHue3Ru2290eSThg4CzsPnx4SzkGpkSeVlhhptKtKZ+hp/ha3iVuw== + dependencies: + "@sentry/types" "7.107.0" "@sinclair/typebox@^0.27.8": version "0.27.8" From 9c78b357bde1d1d52909f5645ed34462a1fd7519 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 17:47:51 +0000 Subject: [PATCH 043/235] Update all non-major dependencies (#12351) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 311 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 225 insertions(+), 88 deletions(-) diff --git a/package.json b/package.json index afb50aec349..928479c9d60 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ "opus-recorder": "^8.0.3", "pako": "^2.0.3", "png-chunks-extract": "^1.0.0", - "posthog-js": "1.110.0", + "posthog-js": "1.116.0", "proposal-temporal": "^0.9.0", "qrcode": "1.5.3", "re-resizable": "^6.9.0", diff --git a/yarn.lock b/yarn.lock index f7eb12166c7..68fc700e523 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3279,14 +3279,15 @@ array-union@^2.1.0: integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.findlast@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz#eeb9e45fc894055c82e5675c463e8077b827ad36" - integrity sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw== + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" + es-abstract "^1.23.2" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" array.prototype.findlastindex@^1.2.3: @@ -4089,6 +4090,33 @@ data-urls@^3.0.2: whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + date-names@^0.1.11: version "0.1.13" resolved "https://registry.yarnpkg.com/date-names/-/date-names-0.1.13.tgz#c4358f6f77c8056e2f5ea68fdbb05f0bf1e53bd0" @@ -4164,7 +4192,7 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: +define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -4527,7 +4555,7 @@ es-abstract@^1.18.3: unbox-primitive "^1.0.2" which-typed-array "^1.1.9" -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: +es-abstract@^1.22.1, es-abstract@^1.22.3: version "1.22.5" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== @@ -4574,6 +4602,58 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: unbox-primitive "^1.0.2" which-typed-array "^1.1.14" +es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: + version "1.23.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.2.tgz#693312f3940f967b8dd3eebacb590b01712622e0" + integrity sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + es-define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" @@ -4581,7 +4661,7 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== @@ -4622,25 +4702,31 @@ es-iterator-helpers@^1.0.15: safe-array-concat "^1.0.1" es-iterator-helpers@^1.0.17: - version "1.0.17" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" - integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== + version "1.0.18" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" + integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== dependencies: - asynciterator.prototype "^1.0.0" call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.4" + es-abstract "^1.23.0" es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" + es-set-tostringtag "^2.0.3" function-bind "^1.1.2" get-intrinsic "^1.2.4" globalthis "^1.0.3" has-property-descriptors "^1.0.2" - has-proto "^1.0.1" + has-proto "^1.0.3" has-symbols "^1.0.3" internal-slot "^1.0.7" iterator.prototype "^1.1.2" - safe-array-concat "^1.1.0" + safe-array-concat "^1.1.2" + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" es-set-tostringtag@^2.0.1, es-set-tostringtag@^2.0.2, es-set-tostringtag@^2.0.3: version "2.0.3" @@ -4797,9 +4883,9 @@ eslint-plugin-react-hooks@^4.3.0: integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.28.0: - version "7.34.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz#ab71484d54fc409c37025c5eca00eb4177a5e88c" - integrity sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ== + version "7.34.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" + integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== dependencies: array-includes "^3.1.7" array.prototype.findlast "^1.2.4" @@ -5341,7 +5427,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -5512,7 +5598,7 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== @@ -5541,20 +5627,13 @@ has@^1.0.3: resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== -hasown@^2.0.0: +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" -hasown@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" - integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== - dependencies: - function-bind "^1.1.2" - highlight.js@^11.3.1: version "11.9.0" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.9.0.tgz#04ab9ee43b52a41a047432c8103e2158a1b8b5b0" @@ -5831,6 +5910,13 @@ is-core-module@^2.13.0, is-core-module@^2.13.1: dependencies: hasown "^2.0.0" +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -5881,11 +5967,16 @@ is-ip@^3.1.0: dependencies: ip-regex "^4.0.0" -is-map@^2.0.1, is-map@^2.0.2: +is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + is-negative-zero@^2.0.2, is-negative-zero@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" @@ -5933,11 +6024,16 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.1, is-set@^2.0.2: +is-set@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" @@ -5981,10 +6077,10 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2: version "1.0.2" @@ -5993,13 +6089,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" isarray@^2.0.5: version "2.0.5" @@ -7220,22 +7316,23 @@ object.assign@^4.1.4, object.assign@^4.1.5: object-keys "^1.1.1" object.entries@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.groupby@^1.0.1: version "1.0.1" @@ -7256,13 +7353,13 @@ object.hasown@^1.1.3: es-abstract "^1.22.1" object.values@^1.1.6, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" oidc-client-ts@3.0.1, oidc-client-ts@^3.0.1: version "3.0.1" @@ -7588,10 +7685,10 @@ postcss@^8.4.33: picocolors "^1.0.0" source-map-js "^1.0.2" -posthog-js@1.110.0: - version "1.110.0" - resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.110.0.tgz#8f2bfda0d8ec50154864e984638fc95f831a6353" - integrity sha512-A5d0vYKLjmVtwF2uPxoFidDkVC6bTQUebm4s1LgKDIE+hHVfSmhbZ4pHqvwWmeJXdQHoQdvzG5Ve4STiiizBGQ== +posthog-js@1.116.0: + version "1.116.0" + resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.116.0.tgz#ac2a77eba6389a195f2bd6c605e228386edcd630" + integrity sha512-mSXEnB8W/hgiT8HE8Y0bWlLIM9JSI1e4TlosJL9H4/H/ekDJqL+Yi8JQNWhIefTgUBCU/ZuXmHzs2mO0rbVxhQ== dependencies: fflate "^0.4.8" preact "^10.19.3" @@ -7965,15 +8062,15 @@ redux@^4.0.0, redux@^4.0.4: "@babel/runtime" "^7.9.2" reflect.getprototypeof@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" - integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - get-intrinsic "^1.2.3" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -8172,7 +8269,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.0.1, safe-array-concat@^1.1.0: +safe-array-concat@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== @@ -8182,6 +8279,16 @@ safe-array-concat@^1.0.1, safe-array-concat@^1.1.0: has-symbols "^1.0.3" isarray "^2.0.5" +safe-array-concat@^1.1.0, safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -8313,16 +8420,16 @@ set-blocking@^2.0.0: integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== set-function-length@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.2" + define-data-property "^1.1.4" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.3" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.1" + has-property-descriptors "^1.0.2" set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.2" @@ -8551,7 +8658,7 @@ string.prototype.repeat@^1.0.0: define-properties "^1.1.3" es-abstract "^1.17.5" -string.prototype.trim@^1.2.7, string.prototype.trim@^1.2.8: +string.prototype.trim@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== @@ -8560,7 +8667,17 @@ string.prototype.trim@^1.2.7, string.prototype.trim@^1.2.8: define-properties "^1.2.0" es-abstract "^1.22.1" -string.prototype.trimend@^1.0.6, string.prototype.trimend@^1.0.7: +string.prototype.trim@^1.2.8, string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== @@ -8569,6 +8686,15 @@ string.prototype.trimend@^1.0.6, string.prototype.trimend@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" +string.prototype.trimend@^1.0.7, string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + string.prototype.trimstart@^1.0.6, string.prototype.trimstart@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" @@ -9334,21 +9460,21 @@ which-builtin-type@^1.1.3: which-typed-array "^1.1.9" which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.9: +which-typed-array@^1.1.13: version "1.1.14" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== @@ -9359,6 +9485,17 @@ which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.1" +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" From 665605b2b64de278b1d86d1973ca5077ad699752 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 17:55:06 +0000 Subject: [PATCH 044/235] Update dependency typescript to v5.4.2 (#12324) * Update dependency typescript to v5.4.2 * Fix type conflicts Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Make tsc happier 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> --- package.json | 2 +- playwright/global.d.ts | 7 +++++++ src/@types/global.d.ts | 6 ------ src/components/views/dialogs/devtools/BaseTool.tsx | 2 +- src/components/views/settings/account/PhoneNumbers.tsx | 4 ++-- yarn.lock | 8 ++++---- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 928479c9d60..271208c8798 100644 --- a/package.json +++ b/package.json @@ -223,7 +223,7 @@ "stylelint-config-standard": "^36.0.0", "stylelint-scss": "^6.0.0", "ts-node": "^10.9.1", - "typescript": "5.3.3" + "typescript": "5.4.2" }, "peerDependencies": { "postcss": "^8.4.19", diff --git a/playwright/global.d.ts b/playwright/global.d.ts index 166bfbe9931..9663b9310fe 100644 --- a/playwright/global.d.ts +++ b/playwright/global.d.ts @@ -31,3 +31,10 @@ declare global { matrixcs: typeof Matrix; } } + +// Workaround for lack of strict mode not resolving complex types correctly +declare module "matrix-js-sdk/src/http-api/index.ts" { + interface UploadResponse { + json(): Promise; + } +} diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index b1c8a4ec144..c62733c0f07 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -151,16 +151,10 @@ declare global { interface HTMLAudioElement { type?: string; - // sinkId & setSinkId are experimental and typescript doesn't know about them - sinkId: string; - setSinkId(outputId: string): void; } interface HTMLVideoElement { type?: string; - // sinkId & setSinkId are experimental and typescript doesn't know about them - sinkId: string; - setSinkId(outputId: string): void; } // Add Chrome-specific `instant` ScrollBehaviour diff --git a/src/components/views/dialogs/devtools/BaseTool.tsx b/src/components/views/dialogs/devtools/BaseTool.tsx index 49bcd76009d..e5f93ead3f9 100644 --- a/src/components/views/dialogs/devtools/BaseTool.tsx +++ b/src/components/views/dialogs/devtools/BaseTool.tsx @@ -60,7 +60,7 @@ const BaseTool: React.FC> = ({ let actionButton: ReactNode = null; if (message) { children = message; - } else if (onAction) { + } else if (onAction && actionLabel) { const onActionClick = (): void => { onAction().then((msg) => { if (typeof msg === "string") { diff --git a/src/components/views/settings/account/PhoneNumbers.tsx b/src/components/views/settings/account/PhoneNumbers.tsx index 27c2bdf104c..b037643bc03 100644 --- a/src/components/views/settings/account/PhoneNumbers.tsx +++ b/src/components/views/settings/account/PhoneNumbers.tsx @@ -16,7 +16,7 @@ limitations under the License. */ import React from "react"; -import { ThreepidMedium } from "matrix-js-sdk/src/matrix"; +import { IAuthData, ThreepidMedium } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { _t, UserFriendlyError } from "../../../../languageHandler"; @@ -216,7 +216,7 @@ export default class PhoneNumbers extends React.Component { const address = this.state.verifyMsisdn; this.state.addTask ?.haveMsisdnToken(token) - .then(([finished] = []) => { + .then(([finished]: [success?: boolean, result?: IAuthData | Error | null] = []) => { let newPhoneNumber = this.state.newPhoneNumber; if (finished !== false) { const msisdns = [...this.props.msisdns, { address, medium: ThreepidMedium.Phone }]; diff --git a/yarn.lock b/yarn.lock index 68fc700e523..ea4f6367def 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9154,10 +9154,10 @@ typed-array-length@^1.0.4, typed-array-length@^1.0.5: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typescript@5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" + integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== ua-parser-js@^1.0.2: version "1.0.37" From 79c50db00993a97a0b6b8c3df02b8eec4e6cb21a Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 20 Mar 2024 01:34:11 +0200 Subject: [PATCH 045/235] Use data-mx-color for rainbows (#12325) * Use data-mx-color for rainbows The font tag may be deprecated soon (https://github.com/matrix-org/matrix-spec/pull/1739) Signed-off-by: Tulir Asokan * Update tests Signed-off-by: Tulir Asokan --------- Signed-off-by: Tulir Asokan --- src/utils/colour.ts | 4 ++-- test/__snapshots__/SlashCommands-test.tsx.snap | 4 ++-- test/utils/colour-test.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/utils/colour.ts b/src/utils/colour.ts index 518b11f835a..8262718a399 100644 --- a/src/utils/colour.ts +++ b/src/utils/colour.ts @@ -27,13 +27,13 @@ export function textToHtmlRainbow(str: string): string { const [a, b] = generateAB(i * frequency, 1); const [red, green, blue] = labToRGB(75, a, b); return ( - '' + c + - "" + "" ); }) .join(""); diff --git a/test/__snapshots__/SlashCommands-test.tsx.snap b/test/__snapshots__/SlashCommands-test.tsx.snap index 08d3bdcc47e..fdffb74ac31 100644 --- a/test/__snapshots__/SlashCommands-test.tsx.snap +++ b/test/__snapshots__/SlashCommands-test.tsx.snap @@ -18,7 +18,7 @@ exports[`SlashCommands /rainbow should make things rainbowy 1`] = ` { "body": "this is a test message", "format": "org.matrix.custom.html", - "formatted_body": "this is a test message", + "formatted_body": "this is a test message", "msgtype": "m.text", } `; @@ -27,7 +27,7 @@ exports[`SlashCommands /rainbowme should make things rainbowy 1`] = ` { "body": "this is a test message", "format": "org.matrix.custom.html", - "formatted_body": "this is a test message", + "formatted_body": "this is a test message", "msgtype": "m.emote", } `; diff --git a/test/utils/colour-test.ts b/test/utils/colour-test.ts index 02a559447a2..2e533d0aa92 100644 --- a/test/utils/colour-test.ts +++ b/test/utils/colour-test.ts @@ -18,7 +18,7 @@ import { textToHtmlRainbow } from "../../src/utils/colour"; describe("textToHtmlRainbow", () => { it("correctly transform text to html without splitting the emoji in two", () => { - expect(textToHtmlRainbow("🐻")).toBe('🐻'); - expect(textToHtmlRainbow("🐕‍🦺")).toBe('🐕‍🦺'); + expect(textToHtmlRainbow("🐻")).toBe('🐻'); + expect(textToHtmlRainbow("🐕‍🦺")).toBe('🐕‍🦺'); }); }); From 4a05de485ebb969789c02ccea5035ab383e4ea11 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 20 Mar 2024 13:39:20 +0000 Subject: [PATCH 046/235] Improve code-splitting of highlight.js and maplibre-gs libs (#12349) * Dynamic import anything that touches maplibre-gs Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Dynamic import anything that touches highlight.js Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix types Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix tests Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/beacon/BeaconMarker.tsx | 2 +- .../views/beacon/BeaconViewDialog.tsx | 2 +- src/components/views/beacon/index.tsx | 31 ++++++++ .../views/elements/SyntaxHighlight.tsx | 27 +++---- .../views/location/LocationButton.tsx | 2 +- src/components/views/location/Map.tsx | 2 +- src/components/views/location/SmartMarker.tsx | 5 +- src/components/views/location/index.tsx | 71 +++++++++++++++++++ src/components/views/messages/MBeaconBody.tsx | 5 +- .../views/messages/MLocationBody.tsx | 4 +- src/components/views/messages/TextualBody.tsx | 5 +- .../views/rooms/MessageComposerButtons.tsx | 2 +- src/utils/location/index.ts | 2 +- src/utils/location/links.ts | 47 ++++++++++++ src/utils/location/map.ts | 31 +------- src/utils/location/useMap.ts | 2 +- .../views/elements/SyntaxHighlight-test.tsx | 10 +-- 17 files changed, 186 insertions(+), 64 deletions(-) create mode 100644 src/components/views/beacon/index.tsx create mode 100644 src/components/views/location/index.tsx create mode 100644 src/utils/location/links.ts diff --git a/src/components/views/beacon/BeaconMarker.tsx b/src/components/views/beacon/BeaconMarker.tsx index 217be7351e7..6ac29c8a24e 100644 --- a/src/components/views/beacon/BeaconMarker.tsx +++ b/src/components/views/beacon/BeaconMarker.tsx @@ -20,7 +20,7 @@ import { Beacon, BeaconEvent, LocationAssetType } from "matrix-js-sdk/src/matrix import MatrixClientContext from "../../../contexts/MatrixClientContext"; import { useEventEmitterState } from "../../../hooks/useEventEmitter"; -import SmartMarker from "../location/SmartMarker"; +import { SmartMarker } from "../location"; interface Props { map: maplibregl.Map; diff --git a/src/components/views/beacon/BeaconViewDialog.tsx b/src/components/views/beacon/BeaconViewDialog.tsx index a5d79a472f0..227ba221b7e 100644 --- a/src/components/views/beacon/BeaconViewDialog.tsx +++ b/src/components/views/beacon/BeaconViewDialog.tsx @@ -36,7 +36,7 @@ import MapFallback from "../location/MapFallback"; import { MapError } from "../location/MapError"; import { LocationShareError } from "../../../utils/location"; -interface IProps { +export interface IProps { roomId: Room["roomId"]; matrixClient: MatrixClient; // open the map centered on this beacon's location diff --git a/src/components/views/beacon/index.tsx b/src/components/views/beacon/index.tsx new file mode 100644 index 00000000000..77119edbdd4 --- /dev/null +++ b/src/components/views/beacon/index.tsx @@ -0,0 +1,31 @@ +/* +Copyright 2024 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Exports beacon components which touch maplibre-gs wrapped in React Suspense to enable code splitting + +import React, { ComponentProps, lazy, Suspense } from "react"; + +import Spinner from "../elements/Spinner"; + +const BeaconViewDialogComponent = lazy(() => import("./BeaconViewDialog")); + +export function BeaconViewDialog(props: ComponentProps): JSX.Element { + return ( + }> + + + ); +} diff --git a/src/components/views/elements/SyntaxHighlight.tsx b/src/components/views/elements/SyntaxHighlight.tsx index 3262ce5d6c0..caa7ceb51c8 100644 --- a/src/components/views/elements/SyntaxHighlight.tsx +++ b/src/components/views/elements/SyntaxHighlight.tsx @@ -16,22 +16,23 @@ limitations under the License. */ import React from "react"; -import hljs from "highlight.js"; -interface IProps { +import { useAsyncMemo } from "../../../hooks/useAsyncMemo"; + +interface Props { language?: string; children: string; } -export default class SyntaxHighlight extends React.PureComponent { - public render(): React.ReactNode { - const { children: content, language } = this.props; - const highlighted = language ? hljs.highlight(content, { language }) : hljs.highlightAuto(content); - - return ( -
    -                
    -            
    - ); - } +export default function SyntaxHighlight({ children, language }: Props): JSX.Element { + const highlighted = useAsyncMemo(async () => { + const { default: highlight } = await import("highlight.js"); + return language ? highlight.highlight(children, { language }) : highlight.highlightAuto(children); + }, [language, children]); + + return ( +
    +            {highlighted ?  : children}
    +        
    + ); } diff --git a/src/components/views/location/LocationButton.tsx b/src/components/views/location/LocationButton.tsx index fe9cf056b4e..aab595e1f97 100644 --- a/src/components/views/location/LocationButton.tsx +++ b/src/components/views/location/LocationButton.tsx @@ -24,7 +24,7 @@ import { aboveLeftOf, useContextMenu, MenuProps } from "../../structures/Context import { OverflowMenuContext } from "../rooms/MessageComposerButtons"; import LocationShareMenu from "./LocationShareMenu"; -interface IProps { +export interface IProps { roomId: string; sender: RoomMember; menuPosition?: MenuProps; diff --git a/src/components/views/location/Map.tsx b/src/components/views/location/Map.tsx index 8eda492b302..7d726da494b 100644 --- a/src/components/views/location/Map.tsx +++ b/src/components/views/location/Map.tsx @@ -139,7 +139,7 @@ const onGeolocateError = (e: GeolocationPositionError): void => { }); }; -interface MapProps { +export interface MapProps { id: string; interactive?: boolean; /** diff --git a/src/components/views/location/SmartMarker.tsx b/src/components/views/location/SmartMarker.tsx index f082bce8d80..27f6eb5d032 100644 --- a/src/components/views/location/SmartMarker.tsx +++ b/src/components/views/location/SmartMarker.tsx @@ -18,7 +18,8 @@ import React, { ReactNode, useCallback, useEffect, useState } from "react"; import * as maplibregl from "maplibre-gl"; import { RoomMember } from "matrix-js-sdk/src/matrix"; -import { createMarker, parseGeoUri } from "../../../utils/location"; +import { parseGeoUri } from "../../../utils/location"; +import { createMarker } from "../../../utils/location/map"; import Marker from "./Marker"; const useMapMarker = ( @@ -66,7 +67,7 @@ const useMapMarker = ( }; }; -interface SmartMarkerProps { +export interface SmartMarkerProps { map: maplibregl.Map; geoUri: string; id?: string; diff --git a/src/components/views/location/index.tsx b/src/components/views/location/index.tsx new file mode 100644 index 00000000000..3df2289d64b --- /dev/null +++ b/src/components/views/location/index.tsx @@ -0,0 +1,71 @@ +/* +Copyright 2024 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Exports location components which touch maplibre-gs wrapped in React Suspense to enable code splitting + +import React, { ComponentProps, lazy, Suspense } from "react"; + +import Spinner from "../elements/Spinner"; + +const MapComponent = lazy(() => import("./Map")); + +export function Map(props: ComponentProps): JSX.Element { + return ( + }> + + + ); +} + +const LocationPickerComponent = lazy(() => import("./LocationPicker")); + +export function LocationPicker(props: ComponentProps): JSX.Element { + return ( + }> + + + ); +} + +const SmartMarkerComponent = lazy(() => import("./SmartMarker")); + +export function SmartMarker(props: ComponentProps): JSX.Element { + return ( + }> + + + ); +} + +const LocationButtonComponent = lazy(() => import("./LocationButton")); + +export function LocationButton(props: ComponentProps): JSX.Element { + return ( + }> + + + ); +} + +const LocationViewDialogComponent = lazy(() => import("./LocationViewDialog")); + +export function LocationViewDialog(props: ComponentProps): JSX.Element { + return ( + }> + + + ); +} diff --git a/src/components/views/messages/MBeaconBody.tsx b/src/components/views/messages/MBeaconBody.tsx index d5a8609376f..16f85559d3f 100644 --- a/src/components/views/messages/MBeaconBody.tsx +++ b/src/components/views/messages/MBeaconBody.tsx @@ -38,12 +38,11 @@ import { isSelfLocation, LocationShareError } from "../../../utils/location"; import { BeaconDisplayStatus, getBeaconDisplayStatus } from "../beacon/displayStatus"; import BeaconStatus from "../beacon/BeaconStatus"; import OwnBeaconStatus from "../beacon/OwnBeaconStatus"; -import Map from "../location/Map"; +import { Map, SmartMarker } from "../location"; import { MapError } from "../location/MapError"; import MapFallback from "../location/MapFallback"; -import SmartMarker from "../location/SmartMarker"; import { GetRelationsForEvent } from "../rooms/EventTile"; -import BeaconViewDialog from "../beacon/BeaconViewDialog"; +import { BeaconViewDialog } from "../beacon"; import { IBodyProps } from "./IBodyProps"; const useBeaconState = ( diff --git a/src/components/views/messages/MLocationBody.tsx b/src/components/views/messages/MLocationBody.tsx index 8b2dc2e95d2..29c1c97e1a5 100644 --- a/src/components/views/messages/MLocationBody.tsx +++ b/src/components/views/messages/MLocationBody.tsx @@ -29,9 +29,7 @@ import { import MatrixClientContext from "../../../contexts/MatrixClientContext"; import TooltipTarget from "../elements/TooltipTarget"; import { Alignment } from "../elements/Tooltip"; -import LocationViewDialog from "../location/LocationViewDialog"; -import Map from "../location/Map"; -import SmartMarker from "../location/SmartMarker"; +import { SmartMarker, Map, LocationViewDialog } from "../location"; import { IBodyProps } from "./IBodyProps"; import { createReconnectedListener } from "../../../utils/connection"; diff --git a/src/components/views/messages/TextualBody.tsx b/src/components/views/messages/TextualBody.tsx index cbb23f791d2..a3bac0b9cd7 100644 --- a/src/components/views/messages/TextualBody.tsx +++ b/src/components/views/messages/TextualBody.tsx @@ -16,7 +16,6 @@ limitations under the License. import React, { createRef, SyntheticEvent, MouseEvent } from "react"; import ReactDOM from "react-dom"; -import highlight from "highlight.js"; import { MsgType } from "matrix-js-sdk/src/matrix"; import { TooltipProvider } from "@vector-im/compound-web"; @@ -238,7 +237,9 @@ export default class TextualBody extends React.Component { pre.append(document.createElement("span")); } - private highlightCode(code: HTMLElement): void { + private async highlightCode(code: HTMLElement): Promise { + const { default: highlight } = await import("highlight.js"); + if (code.textContent && code.textContent.length > MAX_HIGHLIGHT_LENGTH) { console.log( "Code block is bigger than highlight limit (" + diff --git a/src/components/views/rooms/MessageComposerButtons.tsx b/src/components/views/rooms/MessageComposerButtons.tsx index d9d364a2110..7f23efbce2b 100644 --- a/src/components/views/rooms/MessageComposerButtons.tsx +++ b/src/components/views/rooms/MessageComposerButtons.tsx @@ -24,7 +24,7 @@ import { CollapsibleButton } from "./CollapsibleButton"; import { MenuProps } from "../../structures/ContextMenu"; import dis from "../../../dispatcher/dispatcher"; import ErrorDialog from "../dialogs/ErrorDialog"; -import LocationButton from "../location/LocationButton"; +import { LocationButton } from "../location"; import Modal from "../../../Modal"; import PollCreateDialog from "../elements/PollCreateDialog"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; diff --git a/src/utils/location/index.ts b/src/utils/location/index.ts index 035fe526942..8a107451c6f 100644 --- a/src/utils/location/index.ts +++ b/src/utils/location/index.ts @@ -18,6 +18,6 @@ export * from "./findMapStyleUrl"; export * from "./isSelfLocation"; export * from "./locationEventGeoUri"; export * from "./LocationShareErrors"; -export * from "./map"; +export * from "./links"; export * from "./parseGeoUri"; export * from "./positionFailureMessage"; diff --git a/src/utils/location/links.ts b/src/utils/location/links.ts new file mode 100644 index 00000000000..cafae1ae1a9 --- /dev/null +++ b/src/utils/location/links.ts @@ -0,0 +1,47 @@ +/* +Copyright 2022 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { MatrixEvent, M_LOCATION } from "matrix-js-sdk/src/matrix"; + +import { parseGeoUri } from "./parseGeoUri"; + +export const makeMapSiteLink = (coords: GeolocationCoordinates): string => { + return ( + "https://www.openstreetmap.org/" + + `?mlat=${coords.latitude}` + + `&mlon=${coords.longitude}` + + `#map=16/${coords.latitude}/${coords.longitude}` + ); +}; + +export const createMapSiteLinkFromEvent = (event: MatrixEvent): string | null => { + const content = event.getContent(); + const mLocation = content[M_LOCATION.name]; + if (mLocation !== undefined) { + const uri = mLocation["uri"]; + if (uri !== undefined) { + const geoCoords = parseGeoUri(uri); + return geoCoords ? makeMapSiteLink(geoCoords) : null; + } + } else { + const geoUri = content["geo_uri"]; + if (geoUri) { + const geoCoords = parseGeoUri(geoUri); + return geoCoords ? makeMapSiteLink(geoCoords) : null; + } + } + return null; +}; diff --git a/src/utils/location/map.ts b/src/utils/location/map.ts index 78f17c9868a..707d703bea5 100644 --- a/src/utils/location/map.ts +++ b/src/utils/location/map.ts @@ -15,11 +15,10 @@ limitations under the License. */ import * as maplibregl from "maplibre-gl"; -import { MatrixClient, MatrixEvent, M_LOCATION } from "matrix-js-sdk/src/matrix"; +import { MatrixClient } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { _t } from "../../languageHandler"; -import { parseGeoUri } from "./parseGeoUri"; import { findMapStyleUrl } from "./findMapStyleUrl"; import { LocationShareError } from "./LocationShareErrors"; @@ -75,31 +74,3 @@ export const createMarker = (coords: GeolocationCoordinates, element: HTMLElemen }).setLngLat({ lon: coords.longitude, lat: coords.latitude }); return marker; }; - -export const makeMapSiteLink = (coords: GeolocationCoordinates): string => { - return ( - "https://www.openstreetmap.org/" + - `?mlat=${coords.latitude}` + - `&mlon=${coords.longitude}` + - `#map=16/${coords.latitude}/${coords.longitude}` - ); -}; - -export const createMapSiteLinkFromEvent = (event: MatrixEvent): string | null => { - const content = event.getContent(); - const mLocation = content[M_LOCATION.name]; - if (mLocation !== undefined) { - const uri = mLocation["uri"]; - if (uri !== undefined) { - const geoCoords = parseGeoUri(uri); - return geoCoords ? makeMapSiteLink(geoCoords) : null; - } - } else { - const geoUri = content["geo_uri"]; - if (geoUri) { - const geoCoords = parseGeoUri(geoUri); - return geoCoords ? makeMapSiteLink(geoCoords) : null; - } - } - return null; -}; diff --git a/src/utils/location/useMap.ts b/src/utils/location/useMap.ts index f6fc0aa62d0..98ec53ffde1 100644 --- a/src/utils/location/useMap.ts +++ b/src/utils/location/useMap.ts @@ -15,8 +15,8 @@ limitations under the License. */ import { useEffect, useState } from "react"; -import { Map as MapLibreMap } from "maplibre-gl"; +import type { Map as MapLibreMap } from "maplibre-gl"; import { createMap } from "./map"; import { useMatrixClientContext } from "../../contexts/MatrixClientContext"; diff --git a/test/components/views/elements/SyntaxHighlight-test.tsx b/test/components/views/elements/SyntaxHighlight-test.tsx index bdd3e50cf02..2f8c751fd7c 100644 --- a/test/components/views/elements/SyntaxHighlight-test.tsx +++ b/test/components/views/elements/SyntaxHighlight-test.tsx @@ -15,22 +15,24 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { render } from "@testing-library/react"; +import { render, waitFor } from "@testing-library/react"; import hljs, { type HighlightOptions } from "highlight.js"; import React from "react"; import SyntaxHighlight from "../../../../src/components/views/elements/SyntaxHighlight"; describe("", () => { - it("renders", () => { + it("renders", async () => { const { container } = render(console.log("Hello, World!");); + await waitFor(() => expect(container.querySelector(".language-arcade")).toBeTruthy()); expect(container).toMatchSnapshot(); }); - it.each(["json", "javascript", "css"])("uses the provided language", (lang) => { + it.each(["json", "javascript", "css"])("uses the provided language", async (lang) => { const mock = jest.spyOn(hljs, "highlight"); - render(// Hello, World); + const { container } = render(// Hello, World); + await waitFor(() => expect(container.querySelector(`.language-${lang}`)).toBeTruthy()); const [_lang, opts] = mock.mock.lastCall!; expect((opts as HighlightOptions)["language"]).toBe(lang); From 2cbf92860b476aa8710625cdf33f6113e6c3ce22 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 20 Mar 2024 14:27:29 +0000 Subject: [PATCH 047/235] Improve types for `sendStateEvent` (#12331) --- playwright/e2e/room/room-header.spec.ts | 3 ++- playwright/pages/client.ts | 3 ++- src/@types/common.ts | 7 +------ src/ScalarMessaging.ts | 4 ++-- src/SlashCommands.tsx | 17 +++++++++-------- src/components/structures/SpaceHierarchy.tsx | 3 ++- .../views/dialogs/devtools/RoomState.tsx | 2 +- .../views/room_settings/AliasSettings.tsx | 7 ++++--- .../views/rooms/ThirdPartyMemberInfo.tsx | 4 ++-- .../tabs/room/RolesRoomSettingsTab.tsx | 7 ++++--- src/mjolnir/BanList.ts | 14 +++++++++----- src/mjolnir/ListRule.ts | 18 ++++++++++++++---- src/settings/handlers/RoomSettingsHandler.ts | 12 ++++++++++-- src/stores/widgets/StopGapWidgetDriver.ts | 15 ++++++++++++++- src/utils/RoomUpgrade.ts | 2 +- .../views/rooms/LegacyRoomHeader-test.tsx | 3 ++- test/models/Call-test.ts | 12 ++++++++++-- 17 files changed, 89 insertions(+), 44 deletions(-) diff --git a/playwright/e2e/room/room-header.spec.ts b/playwright/e2e/room/room-header.spec.ts index 2d0af8a6df9..a3c5e8c8bc3 100644 --- a/playwright/e2e/room/room-header.spec.ts +++ b/playwright/e2e/room/room-header.spec.ts @@ -18,6 +18,7 @@ import { Page } from "@playwright/test"; import { test, expect } from "../../element-web-test"; import { ElementAppPage } from "../../pages/ElementAppPage"; +import type { Container } from "../../../src/stores/widgets/types"; test.describe("Room Header", () => { test.use({ @@ -227,7 +228,7 @@ test.describe("Room Header", () => { { widgets: { [id]: { - container: "top", + container: "top" as Container, index: 1, width: 100, height: 0, diff --git a/playwright/pages/client.ts b/playwright/pages/client.ts index 054b946845c..c10c050d9f8 100644 --- a/playwright/pages/client.ts +++ b/playwright/pages/client.ts @@ -31,6 +31,7 @@ import type { Visibility, UploadOpts, Upload, + StateEvents, } from "matrix-js-sdk/src/matrix"; import { Credentials } from "../plugins/homeserver"; @@ -407,7 +408,7 @@ export class Client { const client = await this.prepareClient(); return client.evaluate( async (client, { roomId, eventType, content, stateKey }) => { - return client.sendStateEvent(roomId, eventType, content, stateKey); + return client.sendStateEvent(roomId, eventType as keyof StateEvents, content, stateKey); }, { roomId, eventType, content, stateKey }, ); diff --git a/src/@types/common.ts b/src/@types/common.ts index 4141418ac4e..50e02e6a8f4 100644 --- a/src/@types/common.ts +++ b/src/@types/common.ts @@ -16,12 +16,7 @@ limitations under the License. import { JSXElementConstructor } from "react"; -export type { NonEmptyArray } from "matrix-js-sdk/src/matrix"; - -// Based on https://stackoverflow.com/a/53229857/3532235 -export type Without = { [P in Exclude]?: never }; -export type XOR = T | U extends object ? (Without & U) | (Without & T) : T | U; -export type Writeable = { -readonly [P in keyof T]: T[P] }; +export type { NonEmptyArray, XOR, Writeable } from "matrix-js-sdk/src/matrix"; export type ComponentClass = keyof JSX.IntrinsicElements | JSXElementConstructor; diff --git a/src/ScalarMessaging.ts b/src/ScalarMessaging.ts index fb2801c9b64..28a257073ba 100644 --- a/src/ScalarMessaging.ts +++ b/src/ScalarMessaging.ts @@ -291,7 +291,7 @@ Response: */ -import { IContent, MatrixEvent, IEvent } from "matrix-js-sdk/src/matrix"; +import { IContent, MatrixEvent, IEvent, StateEvents } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { MatrixClientPeg } from "./MatrixClientPeg"; @@ -721,7 +721,7 @@ async function getOpenIdToken(event: MessageEvent): Promise { async function sendEvent( event: MessageEvent<{ - type: string; + type: keyof StateEvents; state_key?: string; content?: IContent; }>, diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index f309ca4bc54..18ab9a8c643 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -18,8 +18,9 @@ limitations under the License. */ import * as React from "react"; -import { User, IContent, Direction, ContentHelpers, MRoomTopicEventContent } from "matrix-js-sdk/src/matrix"; +import { ContentHelpers, Direction, EventType, IContent, MRoomTopicEventContent, User } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; +import { RoomMemberEventContent } from "matrix-js-sdk/src/types"; import dis from "./dispatcher/dispatcher"; import { _t, _td, UserFriendlyError } from "./languageHandler"; @@ -239,12 +240,12 @@ export const Commands = [ isEnabled: (cli) => !isCurrentLocalRoom(cli), runFn: function (cli, roomId, threadId, args) { if (args) { - const ev = cli.getRoom(roomId)?.currentState.getStateEvents("m.room.member", cli.getSafeUserId()); - const content = { + const ev = cli.getRoom(roomId)?.currentState.getStateEvents(EventType.RoomMember, cli.getSafeUserId()); + const content: RoomMemberEventContent = { ...(ev ? ev.getContent() : { membership: "join" }), displayname: args, }; - return success(cli.sendStateEvent(roomId, "m.room.member", content, cli.getSafeUserId())); + return success(cli.sendStateEvent(roomId, EventType.RoomMember, content, cli.getSafeUserId())); } return reject(this.getUsage()); }, @@ -265,7 +266,7 @@ export const Commands = [ return success( promise.then((url) => { if (!url) return; - return cli.sendStateEvent(roomId, "m.room.avatar", { url }, ""); + return cli.sendStateEvent(roomId, EventType.RoomAvatar, { url }, ""); }), ); }, @@ -289,12 +290,12 @@ export const Commands = [ return success( promise.then((url) => { if (!url) return; - const ev = room?.currentState.getStateEvents("m.room.member", userId); - const content = { + const ev = room?.currentState.getStateEvents(EventType.RoomMember, userId); + const content: RoomMemberEventContent = { ...(ev ? ev.getContent() : { membership: "join" }), avatar_url: url, }; - return cli.sendStateEvent(roomId, "m.room.member", content, userId); + return cli.sendStateEvent(roomId, EventType.RoomMember, content, userId); }), ); }, diff --git a/src/components/structures/SpaceHierarchy.tsx b/src/components/structures/SpaceHierarchy.tsx index feeacb45818..58e77123f04 100644 --- a/src/components/structures/SpaceHierarchy.tsx +++ b/src/components/structures/SpaceHierarchy.tsx @@ -46,6 +46,7 @@ import { RoomHierarchy } from "matrix-js-sdk/src/room-hierarchy"; import classNames from "classnames"; import { sortBy, uniqBy } from "lodash"; import { logger } from "matrix-js-sdk/src/logger"; +import { SpaceChildEventContent } from "matrix-js-sdk/src/types"; import defaultDispatcher from "../../dispatcher/dispatcher"; import { _t } from "../../languageHandler"; @@ -726,7 +727,7 @@ const ManageButtons: React.FC = ({ hierarchy, selected, set const existingContent = hierarchy.getRelation(parentId, childId)?.content; if (!existingContent || existingContent.suggested === suggested) continue; - const content = { + const content: SpaceChildEventContent = { ...existingContent, suggested: !selectionAllSuggested, }; diff --git a/src/components/views/dialogs/devtools/RoomState.tsx b/src/components/views/dialogs/devtools/RoomState.tsx index ba8e3c75d9d..51fdd1e8300 100644 --- a/src/components/views/dialogs/devtools/RoomState.tsx +++ b/src/components/views/dialogs/devtools/RoomState.tsx @@ -38,7 +38,7 @@ export const StateEventEditor: React.FC = ({ mxEvent, onBack }) => ); const onSend = async ([eventType, stateKey]: string[], content: IContent): Promise => { - await cli.sendStateEvent(context.room.roomId, eventType, content, stateKey); + await cli.sendStateEvent(context.room.roomId, eventType as any, content, stateKey); }; const defaultContent = mxEvent ? stringify(mxEvent.getContent()) : undefined; diff --git a/src/components/views/room_settings/AliasSettings.tsx b/src/components/views/room_settings/AliasSettings.tsx index 7b1bc1be287..3b2f294e5c1 100644 --- a/src/components/views/room_settings/AliasSettings.tsx +++ b/src/components/views/room_settings/AliasSettings.tsx @@ -15,8 +15,9 @@ limitations under the License. */ import React, { ChangeEvent, ContextType, createRef, SyntheticEvent } from "react"; -import { IContent, MatrixEvent, EventType } from "matrix-js-sdk/src/matrix"; +import { MatrixEvent, EventType } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; +import { RoomCanonicalAliasEventContent } from "matrix-js-sdk/src/types"; import EditableItemList from "../elements/EditableItemList"; import { _t } from "../../../languageHandler"; @@ -169,7 +170,7 @@ export default class AliasSettings extends React.Component { updatingCanonicalAlias: true, }); - const eventContent: IContent = { + const eventContent: RoomCanonicalAliasEventContent = { alt_aliases: this.state.altAliases, }; @@ -197,7 +198,7 @@ export default class AliasSettings extends React.Component { updatingCanonicalAlias: true, }); - const eventContent: IContent = {}; + const eventContent: RoomCanonicalAliasEventContent = {}; if (this.state.canonicalAlias) { eventContent["alias"] = this.state.canonicalAlias; diff --git a/src/components/views/rooms/ThirdPartyMemberInfo.tsx b/src/components/views/rooms/ThirdPartyMemberInfo.tsx index dcfc8f567a1..5e02b3b9c81 100644 --- a/src/components/views/rooms/ThirdPartyMemberInfo.tsx +++ b/src/components/views/rooms/ThirdPartyMemberInfo.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React from "react"; -import { MatrixEvent, Room, RoomStateEvent, EventType } from "matrix-js-sdk/src/matrix"; +import { EventType, MatrixEvent, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { Button, Text } from "@vector-im/compound-web"; @@ -101,7 +101,7 @@ export default class ThirdPartyMemberInfo extends React.Component { MatrixClientPeg.safeGet() - .sendStateEvent(this.state.roomId, "m.room.third_party_invite", {}, this.state.stateKey) + .sendStateEvent(this.state.roomId, EventType.RoomThirdPartyInvite, {}, this.state.stateKey) .catch((err) => { logger.error(err); diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx index d1b6c4eaf1c..708fbc73e26 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx @@ -18,6 +18,7 @@ import React from "react"; import { EventType, RoomMember, RoomState, RoomStateEvent, Room, IContent } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { throttle, get } from "lodash"; +import { RoomPowerLevelsEventContent } from "matrix-js-sdk/src/types"; import { _t, _td, TranslationKey } from "../../../../../languageHandler"; import AccessibleButton from "../../../elements/AccessibleButton"; @@ -178,7 +179,7 @@ export default class RolesRoomSettingsTab extends React.Component { const client = this.context; const room = this.props.room; const plEvent = room.currentState.getStateEvents(EventType.RoomPowerLevels, ""); - let plContent = plEvent?.getContent() ?? {}; + let plContent = plEvent?.getContent() ?? {}; // Clone the power levels just in case plContent = Object.assign({}, plContent); @@ -192,7 +193,7 @@ export default class RolesRoomSettingsTab extends React.Component { } else { const keyPath = powerLevelKey.split("."); let parentObj: IContent = {}; - let currentObj = plContent; + let currentObj: IContent = plContent; for (const key of keyPath) { if (!currentObj[key]) { currentObj[key] = {}; @@ -222,7 +223,7 @@ export default class RolesRoomSettingsTab extends React.Component { const client = this.context; const room = this.props.room; const plEvent = room.currentState.getStateEvents(EventType.RoomPowerLevels, ""); - let plContent = plEvent?.getContent() ?? {}; + let plContent = plEvent?.getContent() ?? {}; // Clone the power levels just in case plContent = Object.assign({}, plContent); diff --git a/src/mjolnir/BanList.ts b/src/mjolnir/BanList.ts index 68c15282c19..b0b63c0817c 100644 --- a/src/mjolnir/BanList.ts +++ b/src/mjolnir/BanList.ts @@ -16,12 +16,14 @@ limitations under the License. // Inspiration largely taken from Mjolnir itself +import { EventType } from "matrix-js-sdk/src/matrix"; + import { ListRule, RECOMMENDATION_BAN, recommendationToStable } from "./ListRule"; import { MatrixClientPeg } from "../MatrixClientPeg"; -export const RULE_USER = "m.policy.rule.user"; -export const RULE_ROOM = "m.policy.rule.room"; -export const RULE_SERVER = "m.policy.rule.server"; +export const RULE_USER = EventType.PolicyRuleUser; +export const RULE_ROOM = EventType.PolicyRuleRoom; +export const RULE_SERVER = EventType.PolicyRuleServer; // m.room.* events are legacy from when MSC2313 changed to m.policy.* last minute. export const USER_RULE_TYPES = [RULE_USER, "m.room.rule.user", "org.matrix.mjolnir.rule.user"]; @@ -29,7 +31,9 @@ export const ROOM_RULE_TYPES = [RULE_ROOM, "m.room.rule.room", "org.matrix.mjoln export const SERVER_RULE_TYPES = [RULE_SERVER, "m.room.rule.server", "org.matrix.mjolnir.rule.server"]; export const ALL_RULE_TYPES = [...USER_RULE_TYPES, ...ROOM_RULE_TYPES, ...SERVER_RULE_TYPES]; -export function ruleTypeToStable(rule: string): string | null { +export function ruleTypeToStable( + rule: string, +): EventType.PolicyRuleUser | EventType.PolicyRuleRoom | EventType.PolicyRuleServer | null { if (USER_RULE_TYPES.includes(rule)) { return RULE_USER; } @@ -72,7 +76,7 @@ export class BanList { { entity: entity, reason: reason, - recommendation: recommendationToStable(RECOMMENDATION_BAN, true), + recommendation: recommendationToStable(RECOMMENDATION_BAN, true)!, }, "rule:" + entity, ); diff --git a/src/mjolnir/ListRule.ts b/src/mjolnir/ListRule.ts index 3fc1b007685..c6595b33b3d 100644 --- a/src/mjolnir/ListRule.ts +++ b/src/mjolnir/ListRule.ts @@ -14,14 +14,24 @@ See the License for the specific language governing permissions and limitations under the License. */ +// We are using experimental APIs here, so we need to disable the linter +// eslint-disable-next-line no-restricted-imports +import { PolicyRecommendation } from "matrix-js-sdk/src/models/invites-ignorer"; + import { MatrixGlob } from "../utils/MatrixGlob"; // Inspiration largely taken from Mjolnir itself -export const RECOMMENDATION_BAN = "m.ban"; -export const RECOMMENDATION_BAN_TYPES = [RECOMMENDATION_BAN, "org.matrix.mjolnir.ban"]; +export const RECOMMENDATION_BAN = PolicyRecommendation.Ban; +export const RECOMMENDATION_BAN_TYPES: PolicyRecommendation[] = [ + RECOMMENDATION_BAN, + "org.matrix.mjolnir.ban" as PolicyRecommendation, +]; -export function recommendationToStable(recommendation: string, unstable = true): string | null { +export function recommendationToStable( + recommendation: PolicyRecommendation, + unstable = true, +): PolicyRecommendation | null { if (RECOMMENDATION_BAN_TYPES.includes(recommendation)) { return unstable ? RECOMMENDATION_BAN_TYPES[RECOMMENDATION_BAN_TYPES.length - 1] : RECOMMENDATION_BAN; } @@ -35,7 +45,7 @@ export class ListRule { private readonly _reason: string; private readonly _kind: string; - public constructor(entity: string, action: string, reason: string, kind: string) { + public constructor(entity: string, action: PolicyRecommendation, reason: string, kind: string) { this._glob = new MatrixGlob(entity); this._entity = entity; this._action = recommendationToStable(action, false); diff --git a/src/settings/handlers/RoomSettingsHandler.ts b/src/settings/handlers/RoomSettingsHandler.ts index 12c31243658..652c323a9eb 100644 --- a/src/settings/handlers/RoomSettingsHandler.ts +++ b/src/settings/handlers/RoomSettingsHandler.ts @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixClient, MatrixEvent, RoomState, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, MatrixEvent, RoomState, RoomStateEvent, StateEvents } from "matrix-js-sdk/src/matrix"; import { defer } from "matrix-js-sdk/src/utils"; import MatrixClientBackedSettingsHandler from "./MatrixClientBackedSettingsHandler"; @@ -24,6 +24,9 @@ import { SettingLevel } from "../SettingLevel"; import { WatchManager } from "../WatchManager"; const DEFAULT_SETTINGS_EVENT_TYPE = "im.vector.web.settings"; +const PREVIEW_URLS_EVENT_TYPE = "org.matrix.room.preview_urls"; + +type RoomSettingsEventType = typeof DEFAULT_SETTINGS_EVENT_TYPE | typeof PREVIEW_URLS_EVENT_TYPE; /** * Gets and sets settings at the "room" level. @@ -88,7 +91,12 @@ export default class RoomSettingsHandler extends MatrixClientBackedSettingsHandl } // helper function to send state event then await it being echoed back - private async sendStateEvent(roomId: string, eventType: string, field: string, value: any): Promise { + private async sendStateEvent( + roomId: string, + eventType: K, + field: F, + value: StateEvents[K][F], + ): Promise { const content = this.getSettings(roomId, eventType) || {}; content[field] = value; diff --git a/src/stores/widgets/StopGapWidgetDriver.ts b/src/stores/widgets/StopGapWidgetDriver.ts index c2453ebccf4..f80cd3f8410 100644 --- a/src/stores/widgets/StopGapWidgetDriver.ts +++ b/src/stores/widgets/StopGapWidgetDriver.ts @@ -43,6 +43,7 @@ import { Room, Direction, THREAD_RELATION_TYPE, + StateEvents, } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { @@ -241,7 +242,19 @@ export class StopGapWidgetDriver extends WidgetDriver { return allAllowed; } + public async sendEvent( + eventType: K, + content: StateEvents[K], + stateKey?: string, + targetRoomId?: string, + ): Promise; public async sendEvent( + eventType: Exclude, + content: IContent, + stateKey: null, + targetRoomId?: string, + ): Promise; + public async sendEvent( eventType: string, content: IContent, stateKey?: string | null, @@ -255,7 +268,7 @@ export class StopGapWidgetDriver extends WidgetDriver { let r: { event_id: string } | null; if (stateKey !== null) { // state event - r = await client.sendStateEvent(roomId, eventType, content, stateKey); + r = await client.sendStateEvent(roomId, eventType as K, content as StateEvents[K], stateKey); } else if (eventType === EventType.RoomRedaction) { // special case: extract the `redacts` property and call redact r = await client.redactEvent(roomId, content["redacts"]); diff --git a/src/utils/RoomUpgrade.ts b/src/utils/RoomUpgrade.ts index 88fc9045419..c67bd54bba7 100644 --- a/src/utils/RoomUpgrade.ts +++ b/src/utils/RoomUpgrade.ts @@ -131,7 +131,7 @@ export async function upgradeRoom( EventType.SpaceChild, { ...(currentEv?.getContent() || {}), // copy existing attributes like suggested - via: [cli.getDomain()], + via: [cli.getDomain()!], }, newRoomId, ); diff --git a/test/components/views/rooms/LegacyRoomHeader-test.tsx b/test/components/views/rooms/LegacyRoomHeader-test.tsx index 067059801a3..f9528a94d24 100644 --- a/test/components/views/rooms/LegacyRoomHeader-test.tsx +++ b/test/components/views/rooms/LegacyRoomHeader-test.tsx @@ -24,6 +24,7 @@ import { RoomStateEvent, PendingEventOrdering, ISearchResults, + IContent, } from "matrix-js-sdk/src/matrix"; import { CallType } from "matrix-js-sdk/src/webrtc/call"; import { ClientWidgetApi, Widget } from "matrix-widget-api"; @@ -111,7 +112,7 @@ describe("LegacyRoomHeader", () => { room: roomId, user: alice.userId, skey: stateKey, - content, + content: content as IContent, }); room.addLiveEvents([event]); return { event_id: event.getId()! }; diff --git a/test/models/Call-test.ts b/test/models/Call-test.ts index 1ebdfff5a56..4dc01265ef9 100644 --- a/test/models/Call-test.ts +++ b/test/models/Call-test.ts @@ -17,7 +17,15 @@ limitations under the License. import EventEmitter from "events"; import { mocked } from "jest-mock"; import { waitFor } from "@testing-library/react"; -import { RoomType, Room, RoomEvent, MatrixEvent, RoomStateEvent, PendingEventOrdering } from "matrix-js-sdk/src/matrix"; +import { + RoomType, + Room, + RoomEvent, + MatrixEvent, + RoomStateEvent, + PendingEventOrdering, + IContent, +} from "matrix-js-sdk/src/matrix"; import { Widget } from "matrix-widget-api"; // eslint-disable-next-line no-restricted-imports import { MatrixRTCSessionManagerEvents } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSessionManager"; @@ -116,7 +124,7 @@ const setUpClientRoomAndStores = (): { room: roomId, user: alice.userId, skey: stateKey, - content, + content: content as IContent, }); room.addLiveEvents([event]); return { event_id: event.getId()! }; From aa19cc9188d1169a5731151a3c4baf6a6f552fa1 Mon Sep 17 00:00:00 2001 From: Andy Balaam Date: Thu, 21 Mar 2024 11:29:47 +0000 Subject: [PATCH 048/235] Fix repeated imports --- src/components/structures/SpaceHierarchy.tsx | 3 +-- .../views/settings/tabs/room/RolesRoomSettingsTab.tsx | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/structures/SpaceHierarchy.tsx b/src/components/structures/SpaceHierarchy.tsx index 6fc06419bce..dfd8ff5fce4 100644 --- a/src/components/structures/SpaceHierarchy.tsx +++ b/src/components/structures/SpaceHierarchy.tsx @@ -42,12 +42,11 @@ import { HierarchyRelation, HierarchyRoom, } from "matrix-js-sdk/src/matrix"; -import { KnownMembership } from "matrix-js-sdk/src/types"; import { RoomHierarchy } from "matrix-js-sdk/src/room-hierarchy"; import classNames from "classnames"; import { sortBy, uniqBy } from "lodash"; import { logger } from "matrix-js-sdk/src/logger"; -import { SpaceChildEventContent } from "matrix-js-sdk/src/types"; +import { KnownMembership, SpaceChildEventContent } from "matrix-js-sdk/src/types"; import defaultDispatcher from "../../dispatcher/dispatcher"; import { _t } from "../../languageHandler"; diff --git a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx index 6969a585d53..2197cad3dff 100644 --- a/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.tsx @@ -16,10 +16,9 @@ limitations under the License. import React from "react"; import { EventType, RoomMember, RoomState, RoomStateEvent, Room, IContent } from "matrix-js-sdk/src/matrix"; -import { KnownMembership } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { throttle, get } from "lodash"; -import { RoomPowerLevelsEventContent } from "matrix-js-sdk/src/types"; +import { KnownMembership, RoomPowerLevelsEventContent } from "matrix-js-sdk/src/types"; import { _t, _td, TranslationKey } from "../../../../../languageHandler"; import AccessibleButton from "../../../elements/AccessibleButton"; From 23bd96cddec5c088ebf5aa4a5e39759146de8c12 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 21 Mar 2024 11:54:02 +0000 Subject: [PATCH 049/235] Copy from PR feedback + use strong tags --- src/components/structures/MatrixChat.tsx | 11 ++++++++--- src/i18n/strings/en_EN.json | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index eedf6ccbe96..4ce1b3e7d63 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -1214,11 +1214,15 @@ export default class MatrixChat extends React.PureComponent { maxUserLevel === currentUserLevel && userLevelValues.lastIndexOf(maxUserLevel) == userLevelValues.indexOf(maxUserLevel) ) { + const warning = + maxUserLevel >= 100 + ? _t("leave_room_dialog|room_leave_admin_warning") + : _t("leave_room_dialog|room_leave_mod_warning"); warnings.push( - + {" " /* Whitespace, otherwise the sentences get smashed together */} - {_t("leave_room_dialog|room_leave_admin_warning")} - , + {warning} + , ); } } @@ -1248,6 +1252,7 @@ export default class MatrixChat extends React.PureComponent { ), button: _t("action|leave"), + danger: warnings.length > 0, onFinished: async (shouldLeave) => { if (shouldLeave) { await leaveRoomBehaviour(cli, roomId); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index be9c4279a92..7ee1e351bcd 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1524,7 +1524,8 @@ "leave_room_question": "Are you sure you want to leave the room '%(roomName)s'?", "leave_space_question": "Are you sure you want to leave the space '%(spaceName)s'?", "room_rejoin_warning": "This room is not public. You will not be able to rejoin without an invite.", - "room_leave_admin_warning": "You are the sole person with the highest role in this room. If you leave, the room could become unmoderable. Consider giving another user your role.", + "room_leave_admin_warning": "You're the only administrator in this room. If you leave, nobody will be able to change room settings or take other important actions.", + "room_leave_mod_warning": "You're the only moderator in this room. If you leave, nobody will be able to change room settings or take other important actions.", "space_rejoin_warning": "This space is not public. You will not be able to rejoin without an invite." }, "left_panel": { From 1a1699d1f98c20763bfa0e66a5d930f9ab35f5ee Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 21 Mar 2024 11:56:38 +0000 Subject: [PATCH 050/235] yarn i18n --- src/i18n/strings/en_EN.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 7ee1e351bcd..fd34a613b82 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1523,9 +1523,9 @@ "last_person_warning": "You are the only person here. If you leave, no one will be able to join in the future, including you.", "leave_room_question": "Are you sure you want to leave the room '%(roomName)s'?", "leave_space_question": "Are you sure you want to leave the space '%(spaceName)s'?", - "room_rejoin_warning": "This room is not public. You will not be able to rejoin without an invite.", "room_leave_admin_warning": "You're the only administrator in this room. If you leave, nobody will be able to change room settings or take other important actions.", "room_leave_mod_warning": "You're the only moderator in this room. If you leave, nobody will be able to change room settings or take other important actions.", + "room_rejoin_warning": "This room is not public. You will not be able to rejoin without an invite.", "space_rejoin_warning": "This space is not public. You will not be able to rejoin without an invite." }, "left_panel": { From ea3fff2d2f84b29c96185830e24b8382504a7599 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 21 Mar 2024 15:49:12 +0000 Subject: [PATCH 051/235] Fix some playwright flaky tests (#12357) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix flaky test `should memorize the timeline position when switch Room A -> Room B -> Room A` Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix flaky test `should be correctly rendered - high contrast theme` Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Fix flaky test `Cryptography › setting up secure key backup should work isDeviceVerified=false` Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update screenshots Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update screenshots Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../e2e/audio-player/audio-player.spec.ts | 4 ++++ playwright/e2e/crypto/crypto.spec.ts | 6 ++++++ playwright/e2e/room/room.spec.ts | 4 ++++ ...player--dark-theme--group-layout-linux.png | Bin 10503 -> 8312 bytes ...yer--high-contrast--group-layout-linux.png | Bin 10678 -> 8471 bytes ...layer--light-theme--group-layout-linux.png | Bin 10524 -> 8408 bytes ...me--monospace-font--group-layout-linux.png | Bin 10610 -> 8500 bytes 7 files changed, 14 insertions(+) diff --git a/playwright/e2e/audio-player/audio-player.spec.ts b/playwright/e2e/audio-player/audio-player.spec.ts index 11b7b53d505..4581801db5b 100644 --- a/playwright/e2e/audio-player/audio-player.spec.ts +++ b/playwright/e2e/audio-player/audio-player.spec.ts @@ -95,6 +95,10 @@ test.describe("Audio player", () => { .mx_MessageTimestamp { display: none !important; } + /* The MAB showing up on hover is not needed for the test */ + .mx_MessageActionBar { + display: none !important; + } `, mask: [page.locator(".mx_AudioPlayer_seek")], }; diff --git a/playwright/e2e/crypto/crypto.spec.ts b/playwright/e2e/crypto/crypto.spec.ts index d917a408398..eca97c38748 100644 --- a/playwright/e2e/crypto/crypto.spec.ts +++ b/playwright/e2e/crypto/crypto.spec.ts @@ -152,6 +152,12 @@ test.describe("Cryptography", function () { await app.client.bootstrapCrossSigning(aliceCredentials); } + await page.route("**/_matrix/client/v3/keys/signatures/upload", async (route) => { + // We delay this API otherwise the `Setting up keys` may happen too quickly and cause flakiness + await new Promise((resolve) => setTimeout(resolve, 500)); + await route.continue(); + }); + await app.settings.openUserSettings("Security & Privacy"); await page.getByRole("button", { name: "Set up Secure Backup" }).click(); diff --git a/playwright/e2e/room/room.spec.ts b/playwright/e2e/room/room.spec.ts index 43edeaab386..5b60e6f3bbe 100644 --- a/playwright/e2e/room/room.spec.ts +++ b/playwright/e2e/room/room.spec.ts @@ -92,6 +92,10 @@ test.describe("Room Directory", () => { // Display Room B await app.viewRoomById(roomBId); + + // Let the app settle to avoid flakiness + await page.waitForTimeout(500); + // Display Room A await app.viewRoomById(roomAId); diff --git a/playwright/snapshots/audio-player/audio-player.spec.ts/Selected-EventTile-of-audio-player--dark-theme--group-layout-linux.png b/playwright/snapshots/audio-player/audio-player.spec.ts/Selected-EventTile-of-audio-player--dark-theme--group-layout-linux.png index 9a0a24ae56224021fa163d352f155e59da4bc95f..7ece029188425429d9aec0bc6900f0822e5c515b 100644 GIT binary patch literal 8312 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 literal 10503 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 z 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 literal 10678 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 BnRWmG literal 10524 zcmb_?1zQzixAxGT64E6|gEUA8Y#OCg8l)Q}Hr?IQ2+|EAAl<2SgLF!F=QsGi=Q=;& zd~*StYtJ(?&#b)Hy;hjw2Pq6xVpISCFl3}5$^Zbz4gMdDj0pbS(9SCXKVY1crNn@W zVbUD{paf(fqN;8g2aB$5cxv;A#~wfJplt8Nj&S3#;ddm&q(l`v{3m_s!*8iH6~ket zHE{A6DMN!QzMWH#zYWw&z{Z8mGpqjGDgtXIhWn#w&ZK(vQ8!sHHI?(P;M*pYyFmt; z&>VXI(C4FHMuwCOzwsGpC*-n`&{XETTsi2r@#Xen>`pY_FW{;!KTq>$c0 zAQ06|h!R9yo!}fQgpLR&PnVD@o+JB?I_@1^f+%Zp*U%7#KP8_)o>Vwxc#h^D*&iz0 zeAVk5!-tLj>3>yXGc$q)-_8L5mWYNMe0{cT0Km1Yh=%cJ#=o@g4|&xK@O`u-a>poz zgvbsL4`Y9sJpah%M`K1X!sL!22Xp`d9lnEu@@`P5SoxOg(y4Mu9v!b-$OWg1!QajR zb|RKiNoxF23lp^S+qO%^1|}Puv}bWK^7HeLTGk$4Ub;BbpCe1Ze;*{9Z)BwM!CKZ5 zf;0Ox;82#?h>^-L$HTpkvl8x2@mVwi#?au16x>iEZIood!h#MRmuf}I>=%mk__U$r zgPz@A9}jTbeT&Do1xxaEcc0}AjinEl{_sIkQ86}GJX=apSs51=4vxRCAW|!FG9{8a zDOxw=q3vsp74}yn?Qc&T=F)kd)nVZFS~)m5sgPk878Xd!P=)+|R991lQ;Ya~8Z4px z>dMS#a21FM{2Y1fONNFy+oJdUs1`k}2A#ug_H7*6gkRq#c1X!2^UWNTom~Fnmu1v6 z48m&hTW}iH>9bbff)CgpGhu&8nQ+2Du36&*34W6V$$O7IZ8=Y(;+I>k-@ur|{3 zLc-wJ?C0x^QO*9T`z~=%*O!JIsf?RHhUWPB0YHP0P%1>(G9>0}_t<)2TwJQflsoz1 zVJNx}x)P4zCxVX_GWp8FXvL(OUxcjF>z23FhRfpOGJ+Q6Fq7{(VNPG0c1h5R-$tj1 z^$ETm7XMHIbL(ZyC@=qPQ#YF%=GZt2)_g#sdH$m5uWA5lmnCEElRn1$TUmtZ)VAoYgzecZ3?$-+^{;S(7^yM zZ2bON%X0=7CwDwvb%dbQ9aGJo74<4V-)yCB%4hAks`D)6b=wtze*i21XqQjJjLj_< zbN*e~TaSvNYqq#RHO!%3Ta=k_;J9Q?NR!eDlNp+#LFunoyKLdQ`t-_dbvF)vGQ33H z)&>`}6@0UUtn}w=f0mQ8o&Cg3h(Eb-MT<-P8gQs9K*{)n0ruWA?%BR+UUZ1UT)W-Q zNH?ci3!81sq7>nhhQ_>(uKq|`IFivfj$e8_y+?zMw_;ZZjfnsH6;7XmEj>w)03HVB zv9*7Am?2@d-~CIxV@H)7g{HKW6K$*drj7D4 zY9AvWOSOyknlXiymN}2O_@s!-IJGx+MpE!MjhZ?N-pdc(xa+OANG!xiMrW=HT@r~` z(+B(xFA@kz+gGdWC;{`iSI87)_8{3UBT^`YA1x_IeMs^8=GZWQ zgA~+T1*r^umNe-?0X=Lo?s&vP*7A?GVdLu>8)Ovcu06Ok>PL0Dt;#S7BUzql&!q_+ z)|(2%2?DZC-{H?EGp$y$*GJru4@SJ+=}SW;P{5$40PW?~l!&?N1kzsH?xzptmznaN z3C7d!7?Rf#^)L*%!mdwZIJem?xgT|BDc+eURSKlEmHU4c6{y})k1*<}wYBd)t!hU0VFxE3D}Tw*3Y(5|DeODS4o zI!Q>2%TN=JIUziCg zHl@Ap6(k8J_98HrYBd=ehw>ambd46zgR7&Xme2iSLVkPhuOlECaD}Hlcq28>wg>~? zL^13l?{+EVb)Au!%$(U4CBRgW;~1Bg6#b%b_?wp7i^*a&xIJFmjw~O$uD8apCk_~FMDT2RmL-WIa?eZLm7RMU>k_tLipa1zo|qn2vV#*`zFyrN+P>UB&JZDq$kJMXGk`?wC2owul1_y5x&iXf;O3 zZ4&{X_qP0!+n-i4%haojBUPklt3)zRko_zKs;KBbL&ygO7%dXjU0GTn2I^D4SbwmL zk5>TzUfi?CD7%?P1ZCT0zcCYkRiml1$q483Zi~>I(DO+2``TK2v4pIM2;$t})=N*P~^ABDXb_L87{QhAT+v z-`rOO61irE;-L^6WEA_po@*{oc2|+c8f0!PAtp?XC>m;NM`5B=cV6eC*W7F(Pv`=5 zc2NSgmMH@@b`!8_rSMdF+U!8P0lU$74cnV10wPdD_=Qc!k9s)Kf+ltRSRlLCheeqVhDPy z4lYczNh%E5GonInKfHN3Sz=N`F5T0h&#uxCk`2O>@_~{+2u$}jSQWp#>#2b4J7Pop zZhNJ6)~Yto1_zMak(#VCy#m8<&B0qYJjr#RTrPN+exDJ=(y3LGeg3AO3=OUtr;nrr zgoNC?(-m3<66|3Rf9PjRvGU)0Wc3MYsJXvXDW}IlaNu?}m0hG#inztBsl8$KMfz0{ zjy6VR3={!348G|}$UOOHm~3fxCUFeFyTD=u>!o#yTvjjh{-7k2@AD02CiJgD;LKUq z?V?7u`tPz2*389Hj5yzvWuF5hsjvr{98ZRL;TF})Np3s0Whol%m8^BER6R)I>GKb@Ab1f%eO&ZGzQZEx*?UuomqwqJJGSCeP1rFqQ`n!0{_*B| z1H&dz?+VjiAw&!2XJaX>j&~UMpcH3Vq)dw~tfz+=78kB= zr0~Aqc+;m(r07GBZtY%QOeUoCJLNuqTxjAv>*{(O%gRwX>jboUA@SP6ktXuoH3%ix)X z{m~qsT0j6_R)If5RUuuol-GUrx%3Srp>pUnZ<)7X)_CWw5vnzB`Cf?bSti4GyLW#D zXs69=gs`T^7@3h9JoH#p?evV!oU2YiO~rlwB8$))MHGFs#nzi#z120*1sCrO!`YS= z5NoN%Zhd^_lA4m0m7dO&L)~eAJu5>h0EHc*NvAgLN7JlwBpV;+^!3oMK*DfCG(LI>K&Wv$2jG<&LieWD{0w^bk? z7p7w~ZbI6vjiuOT1;n;BvFUgG@ArPUHdaY;A3;vb*BpA&BAT5Zu zBUA&CpgzJ*0q*v)`z9i}>b|a4ksdG9{Ljl(!zg>s8-hGs5M+3PXmU8CDfC9<5nZ3c z?%b!b5P>^cPe+V8Ix8}WK0H)Ty1RJR$(&#b9%FB&YQ=hh2pw@>$R57XXhbw2{iD%M z(Tq^_YU1U4+sf$^GE&8oGs`R_y|JT^#&L#r0#M8U#Bxd-FM7d>@n01$wL(SC*IBPO=? zezHP~OxfbsXAdZplDg~-s3lo4DJ{k!vsh+hCFO+l;vS?SGpfB0A5sz5xAy!kLi)ru z3+N|Yz#OtYwrZ_UKQYeveeLQqp9{y&{&kjgskOOQq1CM|?F|RBGw@-to_jpb0z$8F zQG%QK0K*uyicCVYJ9L3u+>k67-`~1nR8F^RO@EVfH}Lv-`~mdz`4|)oP!vMr&4NPg z&}+H=;a{RUp48ymQzc3((()lwsRb}?!e5+6%1>5)M5ECog2%cFZ$f2N(;>K+T)4X8 z_4w}c=aK`(qv2s2n2F`;v%N1INVEg z?N}V?As+&jfTJZ3f^1%1!lk99Xv`pTs^a2e#bQ-3zeHo^k5_+Gey(m*rWxvT23pORPJJX2_EiU~AhjhLU&QRu{%=-%Uh*ZwD?)3E~XJ>i*-iPd%9C}!4 zN--cr99NCt%DWQbop00BnDmy&v0~)GF&nxQqq1DbuNGsIaWG97Fk((GaUEt zC_TPo(H9;3Aw6(i&+IH`DA5CPg>F;y?5s+3^skfa&EW009(^BbYDP9N>s44HWEmSH z;R2eqP%?1Y;kG6tJPaUDClw+J!8GF7+$*33mxAwuBG57h)`6(;0Z3TJ9i0-<(Ya#v zyuTy$%|poz{bR5Ce0>l>F$kJ}hNifQw@kijduRQ67gYp0on6|v-zC50U`Des!^x&Kx$#%yB~}O?S;dsW^^|~#ylJ>*K4kZr*<%0!Zsy4G0=(6 zsfl@Q{dLNxSwAQBhP`;rD9?PJb$>Ka{*hsOsx(G-FYApLT^g^QUzb!gUQt#S61amO zuj#m5D8s3La0!^#K%Lkk%P+vsjg4JdwUM6(^J7nQW~-}*woYW{+bGD#eY;ak2kQDD z$Kb8~6TQ0i0de(x`kxkW@J2azeD`HvKqUBs8=3-1Slpc?iDXZM)R%0;N|%kit+QS7 zPvtaipO}Dq+MhG7t1miLp~rJ6W#Z>20;HfO{x{(X7A9TXaBy1jVEP^MKqy~~%(tmR*^*hs_igD7+73jL?;qNT9QS~m)p z#W)@kCh5CMJuhth3%+0s3O^DQ-oZ~0rS8t4h~tffvCvTS;8hw)gXJYJ0t~Akd5`mT zcIyFH!jN>H103)YBO}Sx+lxJf;e(0477z$m7aCi0;NDE7@j+Vc_EP!lGzrPo{A9%S z@q9UT{rNRKLacD2;fs~lyO~lsXN|xRDWlPEggAtR`qnogEh4lQ3-u_77*HHwl$oPs z_T|B6n}3Oq z-yF@f4f=CBjTZOL2doydrg|`O1kt5;ER=@7f*x$Mywr3of!2vvWOR7dU<9Z~Z zX+mopu2Z9G1i(;xcQq>5Z@?j1%K5IC{^8^2zlXZ!T*T*lGlWy68c4w4*E^wCS4m%{ zcbqlr?Qyn-vLXr$4FTVhsS>f=Up>6bo&i+i!S70km^ckPo36~Op7|Ry-0N$CK)7vi8`$QEyWwcpupIth{P}w-( zt~61Lnwtf~F%{j`)|RKPaEjzxtejlSf>XJ6?P#UGzTnluyBeE$M4ULB?a>M$F)?uf zn5op4GBu?O#vs#M5gaoSt58P+N!0rKW{&cYb*zd7UQI55Z&6VnTCKAxf1Q@*m6>1#0T031_qiH4swFW%mbGU-g)Zi zgw3eaB?xgXt*wpiTm%ifD|+gXg7oJYSF?rR!%#Xe+n32#-F?Z|kI4Q8V;(jra>A}x ze>cF?fP){jjAtEN%Bd+hvl-Ge003lfYa}2O?CH2KKnwvIRXH+t`Nhg z)(1Y9eZJOoZW8ejOi}qkX{Xd6w7*^R^G%}-%Efrpr+TgqXQArlw=LZ-4`)tR^05`W zYZ45ROkkD82C~m7m;hjfrc?#=Sq?3eaqmKs@vo$&YGC5wx>?p>(CaRD;1Mt zHj=sZ&=*Z6o+}x}42{aBqEci?S^zsHZ6-wCD#29l(-nZNmYG>g!JARfFw#{+->f?z~Q z1iS626_?lc)tdZ1QJHoFaqZruA0;xl$Co_T^ujkLh|}fzG1v8O`^$9{xl&ObKRylk zdAQz&V3LK82;aey@Y+JeJYgTN*A<$%4{c2TZfN33>5+-EJ8hZGHaHR5zFKJioml$a z^Tsif7~fcl%(9kvMEHr+bTA{#X8z}M&d_XuVoZb1RAS|X|n8+^=MM7se&Bj=6WhTo%_Lcnn#4#VT#uXFZ`K36a>NC4JJ-l)(XqPTNfT%xy_MQk{GoSnk8LzBK&v+?H-aSWJA z2=zVvid71;pE%*Lr)wDWd~DE{pm$_WWS~*{%jS2UgHMfjBmq79`aD75_;es3BC@vT zD2AK4fhW0AFUYl(Uk=Mwzs;Mh?&!Ww&|OSSkX63{HlU-Q${IxTi5ZIAdFp|}|YyDc`>j#YoGkw8O{rp2vqpl7kYQ~EZuhsJE!;`EmlOuz)u zL)9h5EYKv@}E!eSPP{1tPm<{^_yoXNal9Z=|f^x3OhO25#l#{Jc9) zhQeq(4~vWp_4zbEb^{X&{nf5~&AISQtv+Xb^3OqGp{$l+4WV20A$dFL;Gl&z!_0V9-LGJgiGqmi+mRn9J@zn7%*<%=Eb-B|=Sf;yg@cB@j@A{>(1#+z(WRD`7Ki4Muqe8c4w}A=ZRB{j z2y8z&vlUI1z<$18zEeT%Za8W;++V21s_a4cYf2}1JbGYIq(5DH0Rvm2j?&BNW%wZd2afZgmV%7jg?eO8_3NDLplj?rYK zY*~BC%YBj1EFb-V87T}Vdp)pU3aUxi`{^t7UW@Y$+N;Dk8T znXY}G_Kehv_W7UO3LNQ>VeuRXoJ134Q4+O-$QN_pT=)3#yylv&X?Pla199C!R={#~ zgErFK{<@rX-45;PYtyfv%=zJUcmA&MvYaKF>2e=ovRrqf`QY#{m=NhwYKl=5ESF-W zBv(w89kb7rRXA5RH=U@FqTML zXNy?MKO(6MI!&Ga}}iZJF-+iHxGN&0fiBm8s7T@S8k= zm_!;L>>`O;i5jgRY^v>EenFiRPlkFcx*cFSFKHl5?tl8%9 z0`dI7Ci-NhgC>;d5jPJP#ap+wwf*Ftfc23Gu?5GwbxER^&tlgM@YN|N(9_F&DdhS6 zCM6`DgoCr%8hY?-;i@iRr79^Kgg)-*W*ezW?Kl1#0YOK1a&%)Wt&Y1P4fYpArmwts zfEY0s$FU)2^l^Lm;El~VJVb)4$F6jSP~dQVJ*xkhy-0UbvG~jOgb?v-A_jSK;=pNc{N_R{$qh{znwfVVCPdNsGNzhLzl{|;GybMxRj`rTW% zOs}rPQ$Aa<-GJT`^Isez0Og6|4-nSk;xa)M%V=@n>r3#z|3vZe@#*eaX1CLiX@l|c z5s8TTsFKXBDvST)?Betl9UT=nHwHkNJTRJVW2F-#NAIlH8I>+AFMn$nLJ6$-jG&%g zU9i|kZ8#EzH<^!pozGQ^pm(cpGF~q@=;TOwv?Qjh*2x6w$J}8t&NxR zma?MM$o5K1WyHj$45HX8CF*}vT_cL@t^YK_?GU9(kMwtMmA@VR;hxvir%`b;vG!y7 z`07klTe8vp?tJd-`lgP%fAF{em`UdnTnO5rQv-#Rr6sZVqZbCq7=y9PXd>yreEhmC z@lQ@#kn!fO$hTiZL6Qj(iKS2PCg`Hbi3h45pz9kunqVZz?q3HzzwbkL=losUYCy4t z#c`cO_A^sJ&GTb@=%F62I-9GUg zU6)>R!s=zZmzK7OxHmS)+Z#}3QjE?tdu>{hTB>4I?L4hX4z>gi_F4Q(WM6seAbC1J9d-8?ME`_M zBIxgUwI>U+1^5OC2Y5TP9o$M6df2W&%M0|N$916xs z-M6)@Ro0f;h`=`uXQb}Trob}mc`2p;nTu-T^StNM79xic#U|H29IcwrZ18>oyvvTI z;V8q2&Jr+lYSN)^mn98Rcn$)pHF6qjqdz}Yha}B4T2X-KBjN(GxQ|LT3K4m1mIHWL zXlyK#g}9&BLQDu#wdU-VN(bkQEq1oDq9ke5AF2?LVlunGJ+`1S|J`3d2>UYcYGeDq z7vP40Gfc=q)Rjjjzu5MkXI&1oB@DZ^zJ|)xhdp{V=Ey3(^E-n_W>4)lvScCppLa#G zQ@{e7wVlf&NWf^D0vAE0X2h%$Aq?>K&reA1Z7tf@`&6Bui?w#T#8ivQqcdOXrPjI=$axpwzvGO7jrNACQos;C-- z`MF)+nZWrUZjztWtEL><+*nff-$eXj9}KyOeN4=ub>0ZELe_vd8+U5p9@ z24BL*hiJ0}aRG2v4x|(o>1kdgQRsSq>p|9>tX{0#sA diff --git a/playwright/snapshots/audio-player/audio-player.spec.ts/Selected-EventTile-of-audio-player--light-theme--monospace-font--group-layout-linux.png b/playwright/snapshots/audio-player/audio-player.spec.ts/Selected-EventTile-of-audio-player--light-theme--monospace-font--group-layout-linux.png index 9fa8fcd0084f89ad88e6eb85d847b450eca88309..ca0fab0f789b2b3b8442f4818789717bf9d54815 100644 GIT binary patch literal 8500 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 literal 10610 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 From a0795c75183ba24907e777b14ff375941c09e3c1 Mon Sep 17 00:00:00 2001 From: Robin Date: Thu, 21 Mar 2024 20:27:13 -0400 Subject: [PATCH 052/235] Improve readability of badges and pills (#12360) * Improve readability of badges and pills Badges will now always use light theme colors so that they become white-on-gray in both themes, and the contrast of pills has been increased so that they use primary action colors as the background. * Fix tests --- .../permalink-rendering-linux.png | Bin 64742 -> 64472 bytes ...-tile-reply-chains-bubble-layout-linux.png | Bin 7806 -> 7856 bytes ...ply-chains-compact-modern-layout-linux.png | Bin 8309 -> 8310 bytes ...ent-tile-reply-chains-irc-layout-linux.png | Bin 9480 -> 9454 bytes ...ent-tile-reply-chains-irc-modern-linux.png | Bin 8462 -> 8484 bytes res/css/views/elements/_Pill.pcss | 4 ++++ res/themes/dark/css/_dark.pcss | 5 +++-- res/themes/legacy-dark/css/_legacy-dark.pcss | 5 +++-- .../legacy-light/css/_legacy-light.pcss | 5 +++-- res/themes/light-custom/css/_custom.pcss | 1 + res/themes/light/css/_light.pcss | 5 +++-- .../StatelessNotificationBadge.tsx | 18 ++++++++++-------- .../__snapshots__/RoomStatusBar-test.tsx.snap | 4 ++-- .../__snapshots__/RoomView-test.tsx.snap | 2 +- .../Notifications2-test.tsx.snap | 4 ++-- .../SpaceTreeLevel-test.tsx.snap | 2 +- 16 files changed, 33 insertions(+), 22 deletions(-) diff --git a/playwright/snapshots/permalinks/permalinks.spec.ts/permalink-rendering-linux.png b/playwright/snapshots/permalinks/permalinks.spec.ts/permalink-rendering-linux.png index b4c72b673356daa7266134710becac7c6e7582ff..db91140763a6f483c8442de43807b39ed2e1e2fc 100644 GIT binary patch delta 47929 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 IQG*x%1DkkobpQYW delta 48184 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 BKd=A* literal 7806 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 GX diff --git a/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-compact-modern-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-compact-modern-layout-linux.png index 43bf819612db78e3671e4b0aacd4cbda217c0fae..87e65a86ae554cf1330a04c2006b8559319c2f63 100644 GIT binary patch literal 8310 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 literal 8309 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-irc-layout-linux.png index fb030376951cbef9472b64f8b10bb58b337025b1..45c43f06fecf682bca9c333e49a6c95050adc17d 100644 GIT binary patch literal 9454 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 literal 9480 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-irc-modern-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-irc-modern-linux.png index 77535701603316287c035c3bf63edac14ac4826a..445d616ea40ad8dd0d24d5fdb253ef4b77ab7b64 100644 GIT binary patch literal 8484 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 G`ab}K*rKKY diff --git a/res/css/views/elements/_Pill.pcss b/res/css/views/elements/_Pill.pcss index 61cd53b14ee..8363fc6641f 100644 --- a/res/css/views/elements/_Pill.pcss +++ b/res/css/views/elements/_Pill.pcss @@ -42,6 +42,10 @@ limitations under the License. background-color: $pill-hover-bg-color !important; /* To override .markdown-body */ } + &:active { + background-color: $pill-press-bg-color !important; /* To override .markdown-body */ + } + &.mx_UserPill_me:hover { background-color: var( --cpd-color-bg-critical-hovered diff --git a/res/themes/dark/css/_dark.pcss b/res/themes/dark/css/_dark.pcss index c3760c2981e..326debc0628 100644 --- a/res/themes/dark/css/_dark.pcss +++ b/res/themes/dark/css/_dark.pcss @@ -125,8 +125,9 @@ $roomheader-addroom-fg-color: $primary-content; /* Rich-text-editor */ /* ******************** */ -$pill-bg-color: var(--cpd-color-gray-1000); -$pill-hover-bg-color: var(--cpd-color-gray-1100); +$pill-bg-color: var(--cpd-color-bg-action-primary-rest); +$pill-hover-bg-color: var(--cpd-color-bg-action-primary-hovered); +$pill-press-bg-color: var(--cpd-color-bg-action-primary-pressed); /* ******************** */ /* Inputs */ diff --git a/res/themes/legacy-dark/css/_legacy-dark.pcss b/res/themes/legacy-dark/css/_legacy-dark.pcss index a1c021fa38a..7e14e85f10a 100644 --- a/res/themes/legacy-dark/css/_legacy-dark.pcss +++ b/res/themes/legacy-dark/css/_legacy-dark.pcss @@ -28,8 +28,9 @@ $light-fg-color: $header-panel-text-secondary-color; /* used for focusing form controls */ $focus-bg-color: $room-highlight-color; -$pill-bg-color: var(--cpd-color-gray-1000); -$pill-hover-bg-color: var(--cpd-color-gray-1100); +$pill-bg-color: var(--cpd-color-bg-action-primary-rest); +$pill-hover-bg-color: var(--cpd-color-bg-action-primary-hovered); +$pill-press-bg-color: var(--cpd-color-bg-action-primary-pressed); /* informational plinth */ $info-plinth-bg-color: $header-panel-bg-color; diff --git a/res/themes/legacy-light/css/_legacy-light.pcss b/res/themes/legacy-light/css/_legacy-light.pcss index bfdaae6b67b..5f9b8fd4520 100644 --- a/res/themes/legacy-light/css/_legacy-light.pcss +++ b/res/themes/legacy-light/css/_legacy-light.pcss @@ -123,8 +123,9 @@ $rte-code-bg-color: rgba(0, 0, 0, 0.04); $header-panel-text-primary-color: #91a1c0; -$pill-bg-color: var(--cpd-color-gray-1000); -$pill-hover-bg-color: var(--cpd-color-gray-1100); +$pill-bg-color: var(--cpd-color-bg-action-primary-rest); +$pill-hover-bg-color: var(--cpd-color-bg-action-primary-hovered); +$pill-press-bg-color: var(--cpd-color-bg-action-primary-pressed); $topleftmenu-color: #212121; $roomheader-bg-color: $primary-bg-color; diff --git a/res/themes/light-custom/css/_custom.pcss b/res/themes/light-custom/css/_custom.pcss index 9a4523d605f..7fadb2cd0ac 100644 --- a/res/themes/light-custom/css/_custom.pcss +++ b/res/themes/light-custom/css/_custom.pcss @@ -125,6 +125,7 @@ $reaction-row-button-selected-bg-color: var( $menu-selected-color: var(--menu-selected-color, $menu-selected-color); $pill-bg-color: var(--other-user-pill-bg-color, $pill-bg-color); $pill-hover-bg-color: var(--other-user-pill-bg-color, $pill-hover-bg-color); +$pill-press-bg-color: var(--other-user-pill-bg-color, $pill-press-bg-color); $icon-button-color: var(--icon-button-color, $icon-button-color); $strong-input-border-color: var(--strong-input-border-color, $strong-input-border-color); diff --git a/res/themes/light/css/_light.pcss b/res/themes/light/css/_light.pcss index cc34276994d..730c1155143 100644 --- a/res/themes/light/css/_light.pcss +++ b/res/themes/light/css/_light.pcss @@ -159,8 +159,9 @@ $roomheader-addroom-fg-color: #5c6470; /* Rich-text-editor */ /* ******************** */ -$pill-bg-color: var(--cpd-color-gray-1000); -$pill-hover-bg-color: var(--cpd-color-gray-1100); +$pill-bg-color: var(--cpd-color-bg-action-primary-rest); +$pill-hover-bg-color: var(--cpd-color-bg-action-primary-hovered); +$pill-press-bg-color: var(--cpd-color-bg-action-primary-pressed); $rte-bg-color: #e9e9e9; $rte-code-bg-color: rgba(0, 0, 0, 0.04); /* ******************** */ diff --git a/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx b/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx index f9051f3aa14..825192b82c3 100644 --- a/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx +++ b/src/components/views/rooms/NotificationBadge/StatelessNotificationBadge.tsx @@ -81,16 +81,18 @@ export const StatelessNotificationBadge = forwardRef= NotificationLevel.Highlight, - mx_NotificationBadge_knocked: knocked, + "mx_NotificationBadge": true, + "mx_NotificationBadge_visible": isEmptyBadge || knocked ? true : hasUnreadCount, + "mx_NotificationBadge_level_notification": level == NotificationLevel.Notification, + "mx_NotificationBadge_level_highlight": level >= NotificationLevel.Highlight, + "mx_NotificationBadge_knocked": knocked, // Exactly one of mx_NotificationBadge_dot, mx_NotificationBadge_2char, mx_NotificationBadge_3char - mx_NotificationBadge_dot: badgeType === "dot", - mx_NotificationBadge_2char: badgeType === "badge_2char", - mx_NotificationBadge_3char: badgeType === "badge_3char", + "mx_NotificationBadge_dot": badgeType === "dot", + "mx_NotificationBadge_2char": badgeType === "badge_2char", + "mx_NotificationBadge_3char": badgeType === "badge_3char", + // Badges with text should always use light colors + "cpd-theme-light": badgeType !== "dot", }); if (props.onClick) { diff --git a/test/components/structures/__snapshots__/RoomStatusBar-test.tsx.snap b/test/components/structures/__snapshots__/RoomStatusBar-test.tsx.snap index 19b0cd3b499..54d8db35260 100644 --- a/test/components/structures/__snapshots__/RoomStatusBar-test.tsx.snap +++ b/test/components/structures/__snapshots__/RoomStatusBar-test.tsx.snap @@ -12,7 +12,7 @@ exports[`RoomStatusBar unsent messages should render warning w class="mx_RoomStatusBar_unsentBadge" >

    unsent messages should render warning w class="mx_RoomStatusBar_unsentBadge" >
    correctly handles the loading/disabled state 1`] = ` Show a badge
    matches the snapshot 1`] = ` Show a badge
    From 79f9a130fa1d67ef6abd8254cf8194cfe5b9ceee Mon Sep 17 00:00:00 2001 From: ElementRobot Date: Fri, 22 Mar 2024 10:06:38 +0000 Subject: [PATCH 053/235] [create-pull-request] automated change (#12361) Co-authored-by: github-merge-queue --- src/i18n/strings/cs.json | 5 +++++ src/i18n/strings/de_DE.json | 11 +++++++---- src/i18n/strings/fa.json | 4 +++- src/i18n/strings/fr.json | 3 +++ src/i18n/strings/hu.json | 30 +++++++++++++++--------------- src/i18n/strings/id.json | 8 +++++++- src/i18n/strings/is.json | 1 + src/i18n/strings/it.json | 1 + src/i18n/strings/lo.json | 1 + src/i18n/strings/zh_Hans.json | 4 ++-- src/i18n/strings/zh_Hant.json | 3 +++ 11 files changed, 48 insertions(+), 23 deletions(-) diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index bf905bdd0a0..235bc8e28d5 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -1893,6 +1893,7 @@ "forget": "Zapomenout místnost", "low_priority": "Nízká priorita", "mark_read": "Označit jako přečtené", + "mark_unread": "Označit jako nepřečtené", "mentions_only": "Pouze zmínky", "notifications_default": "Odpovídá výchozímu nastavení", "notifications_mute": "Ztlumit místnost", @@ -2899,6 +2900,9 @@ "link_title": "Odkaz na místnost", "permalink_message": "Odkaz na vybranou zprávu", "permalink_most_recent": "Odkaz na nejnovější zprávu", + "share_call": "Odkaz na pozvánku na konferenci", + "share_call_subtitle": "Odkaz pro externí uživatele, aby se připojili k hovoru bez Matrix účtu:", + "title_link": "Sdílet odkaz", "title_message": "Sdílet zprávu z místnosti", "title_room": "Sdílet místnost", "title_user": "Sdílet uživatele" @@ -3831,6 +3835,7 @@ "expand": "Návrat do hovoru", "failed_call_live_broadcast_description": "Nemůžete zahájit hovor, protože právě nahráváte živé vysílání. Ukončete prosím živé vysílání, abyste mohli zahájit hovor.", "failed_call_live_broadcast_title": "Nelze zahájit hovor", + "get_call_link": "Sdílet odkaz na hovor", "hangup": "Zavěsit", "hide_sidebar_button": "Skrýt postranní panel", "input_devices": "Vstupní zařízení", diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 7f4621290c9..66cd83d57c2 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -1,5 +1,6 @@ { "a11y": { + "emoji_picker": "Emoji-Auswahl", "jump_first_invite": "Zur ersten Einladung springen.", "n_unread_messages": { "other": "%(count)s ungelesene Nachrichten.", @@ -1007,7 +1008,7 @@ "verify_emoji_prompt": "Durch den Vergleich einzigartiger Emojis verifizieren.", "verify_emoji_prompt_qr": "Wenn du obigen Code nicht erfassen kannst, verifiziere stattdessen durch den Vergleich von Emojis.", "verify_later": "Später verifizieren", - "verify_reset_warning_1": "Das Zurücksetzen deiner Sicherheitsschlüssel kann nicht rückgängig gemacht werden. Nach dem Zurücksetzen wirst du alte Nachrichten nicht mehr lesen können un Freunde, die dich vorher verifiziert haben werden Sicherheitswarnungen bekommen, bis du dich erneut mit ihnen verifizierst.", + "verify_reset_warning_1": "Das Zurücksetzen deiner Sicherheitsschlüssel kann nicht rückgängig gemacht werden. Nach dem Zurücksetzen wirst du alte Nachrichten nicht mehr lesen können und Freunde, die dich vorher verifiziert haben werden Sicherheitswarnungen bekommen, bis du dich erneut mit ihnen verifizierst.", "verify_reset_warning_2": "Bitte fahre nur fort, wenn du sicher bist, dass du alle anderen Geräte und deinen Sicherheitsschlüssel verloren hast.", "verify_using_device": "Mit anderem Gerät verifizieren", "verify_using_key": "Mit Sicherheitsschlüssel verifizieren", @@ -1055,7 +1056,7 @@ "error_app_open_in_another_tab": "Wechsle zu einem anderen Tab um mit %(brand)s zu verbinden. Dieser Tab kann jetzt geschlossen werden.", "error_app_open_in_another_tab_title": "%(brand)s läuft bereits in einem anderen Tab.", "error_app_opened_in_another_window": "%(brand)s läuft bereit in einem anderen Fenster. Klicke \"%(label)s um %(brand)s hier zu nutzen und beende das andere Fenster.", - "error_database_closed_title": "Datenbank unerwartet geschlossen", + "error_database_closed_title": "%(brand)s funktioniert nicht mehr", "error_dialog": { "copy_room_link_failed": { "description": "Der Link zum Raum konnte nicht kopiert werden.", @@ -1359,7 +1360,7 @@ "send_sticker": "Sticker senden", "shift": "Umschalt", "space": "Leertaste", - "switch_to_space": "Mit Nummer zu Space springen", + "switch_to_space": "Mit Nummer zu Leerzeichen springen", "toggle_hidden_events": "Sichtbarkeit versteckter Ereignisse umschalten", "toggle_microphone_mute": "Mikrofon an-/ausschalten", "toggle_right_panel": "Rechtes Panel ein-/ausblenden", @@ -1405,6 +1406,7 @@ "group_rooms": "Räume", "group_spaces": "Räume", "group_themes": "Themen", + "group_threads": "Themen", "group_voip": "Anrufe", "group_widgets": "Widgets", "hidebold": "Benachrichtigungspunkt ausblenden (nur Zähler zeigen)", @@ -2304,7 +2306,7 @@ "join_rule_upgrade_upgrading_room": "Raum wird aktualisiert", "public_without_alias_warning": "Um den Raum zu verlinken, füge bitte eine Adresse hinzu.", "publish_room": "Diesen Raum im Raumverzeichnis veröffentlichen.", - "publish_space": "Diesen Space im Raumerzeichnis veröffentlichen.", + "publish_space": "Diesen Space im Raumverzeichnis veröffentlichen.", "strict_encryption": "Niemals verschlüsselte Nachrichten von dieser Sitzung zu unverifizierten Sitzungen in diesem Raum senden", "title": "Sicherheit" }, @@ -3996,6 +3998,7 @@ "extendedRepeat": "Wiederholungen wie \"abcabcabc\" sind fast so schnell zu erraten wie \"abc\"", "keyPattern": "Kurze Tastaturmuster sind einfach zu erraten", "namesByThemselves": "Namen und Familiennamen alleine sind einfach zu erraten", + "pwned": "Dein Passwort wurde durch eine Datenleck im Internet offengelegt.", "recentYears": "Kürzlich vergangene Jahre sind einfach zu raten", "sequences": "Sequenzen wie \"abc\" oder \"6543\" sind leicht zu raten", "similarToCommon": "Dies ist ähnlich zu einem oft genutzten Passwort", diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json index 218d7a7e67d..cfdbb422010 100644 --- a/src/i18n/strings/fa.json +++ b/src/i18n/strings/fa.json @@ -422,12 +422,14 @@ "unmute": "صدادار", "unnamed_room": "اتاق بدون نام", "unnamed_space": "فضای کاری بدون نام", + "user": "کاربر", "user_avatar": "تصویر پروفایل", "username": "نام کاربری", "verification_cancelled": "تأیید هویت لغو شد", "video": "ویدئو", "view_message": "مشاهده پیام", - "warning": "هشدار" + "warning": "هشدار", + "welcome": "خوش آمدید" }, "composer": { "autocomplete": { diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 8fde6ba2627..d7c7f7c2da0 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -763,6 +763,7 @@ "room_notifications_type": "Type : ", "room_status": "Statut du salon", "room_unread_status_count": { + "one": "Statut non-lus du salon : %(status)s, total : %(count)s", "other": "Statut non-lus du salon : %(status)s, total : %(count)s" }, "save_setting_values": "Enregistrer les valeurs des paramètres", @@ -2627,6 +2628,7 @@ "voip": "Appels audio et vidéo" }, "preferences": { + "Electron.enableHardwareAcceleration": "Activer l’accélération matérielle (redémarrez %(appName)s pour l'activer)", "always_show_menu_bar": "Toujours afficher la barre de menu de la fenêtre", "autocomplete_delay": "Délai pour l’autocomplétion (ms)", "code_blocks_heading": "Blocs de code", @@ -3488,6 +3490,7 @@ "other": "%(severalUsers)s ont changé de nom %(count)s fois", "one": "%(severalUsers)s ont changé de nom" }, + "format": "%(nameList)s %(transitionList)s", "hidden_event": { "one": "%(oneUser)s a envoyé un message caché", "other": "%(oneUser)s ont envoyé %(count)s messages cachés" diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index c3712453b5a..eedb0eb1d61 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -371,25 +371,25 @@ "verify_email_heading": "E-mail ellenőrzés a továbblépéshez" }, "bug_reporting": { - "additional_context": "Ha a hiba felderítésében további adat is segítséget adhat, mint az, hogy mit csináltál éppen, mi a szoba-, felhasználó azonosítója, stb... itt add meg.", - "before_submitting": "Mielőtt a naplót elküldöd, egy Github jegyet kell nyitni amiben leírod a problémádat.", + "additional_context": "Ha a hiba felderítésében további adatok is segíthetnek, mint az, hogy mit csinált épp, mik a szobák vagy felhasználók azonosítói, stb. Ezeket itt adja meg.", + "before_submitting": "Mielőtt elküldi a naplókat, hozzon létre egy jegyet a GitHubon, amelyben leírja a problémáját.", "collecting_information": "Alkalmazás verzióinformációinak összegyűjtése", "collecting_logs": "Naplók összegyűjtése", "create_new_issue": "Ahhoz hogy megvizsgálhassuk a hibát, hozzon létre egy új hibajegyet a GitHubon.", - "description": "A hibakeresési napló alkalmazáshasználati adatokat tartalmaz, amely tartalmazza a felhasználónevét, a felkeresett szobák azonosítóit vagy álneveit, az utolsó felhasználói felület elemét, amelyet használt, valamint a többi felhasználó neveit. A csevegési üzenetek szövegét nem tartalmazza.", - "download_logs": "Napló letöltése", + "description": "A hibakeresési naplók alkalmazáshasználati adatokat tartalmaznak, amelyek tartalmazzák a felkeresett szobák azonosítóit vagy álneveit, a legutóbb használt felületi elemeket, valamint a többi felhasználó neveit. A csevegőüzenetek szövegét nem tartalmazza.", + "download_logs": "Naplók letöltése", "downloading_logs": "Naplók letöltése folyamatban", "error_empty": "Kérlek mond el nekünk mi az ami nem működött, vagy még jobb, ha egy GitHub jegyben leírod a problémát.", "failed_send_logs": "Hiba a napló küldésénél: ", - "github_issue": "GitHub hibajegy", - "introduction": "Ha a GitHubon keresztül küldött be hibajegyet, akkor a hibakeresési napló segít nekünk felderíteni a problémát. ", + "github_issue": "GitHub-jegy", + "introduction": "Ha a GitHubon keresztül küldött be hibajegyet, akkor a hibakeresési naplók segítenek nekünk felderíteni a problémát. ", "log_request": "Segítsen abban, hogy ez később ne fordulhasson elő, küldje el nekünk a naplókat.", "logs_sent": "Napló elküldve", "matrix_security_issue": "A Matrixszal kapcsolatos biztonsági hibák jelentésével kapcsolatban olvassa el a Matrix.org biztonsági hibák közzétételi házirendjét.", "preparing_download": "Napló előkészítése feltöltéshez", "preparing_logs": "Előkészülés napló küldéshez", - "send_logs": "Naplófájlok elküldése", - "submit_debug_logs": "Hibakeresési napló elküldése", + "send_logs": "Naplók elküldése", + "submit_debug_logs": "Hibakeresési naplók elküldése", "textarea_label": "Megjegyzések", "thank_you": "Köszönjük!", "title": "Hibajelentés", @@ -575,9 +575,9 @@ "close_sticker_picker": "Matricák elrejtése", "edit_composer_label": "Üzenet szerkesztése", "format_bold": "Félkövér", - "format_code_block": "Kód blokk", - "format_decrease_indent": "Behúzás csökkentés", - "format_increase_indent": "Behúzás növelés", + "format_code_block": "Kódblokk", + "format_decrease_indent": "Behúzás csökkentése", + "format_increase_indent": "Behúzás növelése", "format_inline_code": "Kód", "format_insert_link": "Link beillesztése", "format_italic": "Dőlt", @@ -620,7 +620,7 @@ "console_wait": "Várjon!", "create_room": { "action_create_room": "Szoba létrehozása", - "action_create_video_room": "Videó szoba készítése", + "action_create_video_room": "Videószoba létrehozása", "encrypted_video_room_warning": "Ezt később nem lehet kikapcsolni. A szoba titkosítva lesz de a hívások nem.", "encrypted_warning": "Ezt később nem lehet kikapcsolni. A hidak és a legtöbb bot nem fog működni egyenlőre.", "encryption_forced": "A szervered megköveteli, hogy a titkosítás be legyen kapcsolva a privát szobákban.", @@ -639,7 +639,7 @@ "room_visibility_label": "Szoba láthatóság", "title_private_room": "Privát szoba létrehozása", "title_public_room": "Nyilvános szoba létrehozása", - "title_video_room": "Videó szoba készítése", + "title_video_room": "Videószoba létrehozása", "topic_label": "Téma (nem kötelező)", "unfederated": "A szobába ne léphessenek be azok, akik nem ezen a szerveren vannak: %(serverName)s.", "unfederated_label_default_off": "Beállíthatod, ha a szobát csak egy belső csoport használja majd a matrix szervereden. Ezt később nem lehet megváltoztatni.", @@ -716,7 +716,7 @@ "event_type": "Esemény típusa", "explore_account_data": "Fiókadatok felderítése", "explore_room_account_data": "Szoba fiók adatok felderítése", - "explore_room_state": "Szoba állapot felderítése", + "explore_room_state": "Szobaállapot felderítése", "failed_to_find_widget": "Hiba történt a kisalkalmazás keresése során.", "failed_to_load": "Betöltés sikertelen.", "failed_to_save": "A beállítások elmentése nem sikerült.", @@ -761,7 +761,7 @@ "send_custom_account_data_event": "Egyedi fiókadat esemény küldése", "send_custom_room_account_data_event": "Egyedi szoba fiókadat esemény küldése", "send_custom_state_event": "Egyedi állapotesemény küldése", - "send_custom_timeline_event": "Egyedi idővonal esemény küldése", + "send_custom_timeline_event": "Egyéni idővonal-esemény küldése", "server_info": "Kiszolgálóinformációk", "server_versions": "Kiszolgálóverziók", "settable_global": "Általánosan beállítható", diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index 3a760aeb479..e381c83a314 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -1412,9 +1412,13 @@ "msc3531_hide_messages_pending_moderation": "Memperbolehkan moderator untuk menyembunyikan pesan yang akan dimoderasikan.", "new_room_decoration_ui": "Dalam pengembangan aktif, tajuk ruangan & antarmuka detail baru", "notification_settings": "Pengaturan Notifikasi Baru", + "notification_settings_beta_caption": "Perkenalkan cara yang lebih sederhana untuk mengubah pengaturan notifikasi Anda. Sesuaikan %(brand)s Anda, sesuai keinginan Anda.", "notification_settings_beta_title": "Pengaturan Notifikasi", - "oidc_native_flow": "Aktifkan alur OIDC native baru (Dalam pengembangan aktif)", + "notifications": "Aktifkan panel notifikasi di tajuk ruangan", + "oidc_native_flow": "Autentikasi asli OIDC", "pinning": "Pin Pesan", + "render_reaction_images": "Render gambar khusus dalam reaksi", + "render_reaction_images_description": "Terkadang disebut sebagai \"emoji khusus\".", "report_to_moderators": "Laporkan ke moderator", "report_to_moderators_description": "Dalam ruangan yang mendukung moderasi, tombol “Laporkan” memungkinkan Anda untuk melaporkan penyalahgunaan ke moderator ruangan.", "rust_crypto": "Implementasi kriptografi Rust", @@ -1430,6 +1434,7 @@ "sliding_sync_server_specify_proxy": "Server Anda belum mendukungnya, Anda harus menetapkan sebuah proksi", "sliding_sync_server_support": "Server Anda mendukungnya", "under_active_development": "Dalam pengembangan aktif.", + "unrealiable_e2e": "Tidak dapat diandalkan di ruangan terenkripsi", "video_rooms": "Ruangan video", "video_rooms_a_new_way_to_chat": "Sebuah cara baru untuk mengobrol melalui suara dan video di %(brand)s.", "video_rooms_always_on_voip_channels": "Ruangan video adalah saluran VoIP yang selalu ada tersemat di dalam sebuah ruangan di %(brand)s.", @@ -2277,6 +2282,7 @@ }, "join_rule_upgrade_upgrading_room": "Meningkatkan ruangan", "public_without_alias_warning": "Untuk menautkan ruangan ini, mohon tambahkan sebuah alamat.", + "publish_space": "Buat ruang ini terlihat di direktori ruangan publik.", "strict_encryption": "Jangan kirim pesan terenkripsi ke sesi yang belum diverifikasi di ruangan ini dari sesi ini", "title": "Keamanan & Privasi" }, diff --git a/src/i18n/strings/is.json b/src/i18n/strings/is.json index 2663a0eaefc..e49d7b82ab5 100644 --- a/src/i18n/strings/is.json +++ b/src/i18n/strings/is.json @@ -1154,6 +1154,7 @@ "group_rooms": "Spjallrásir", "group_spaces": "Svæði", "group_themes": "Þemu", + "group_threads": "Spjallþræðir", "group_voip": "Tal og myndmerki", "group_widgets": "Viðmótshlutar", "html_topic": "Birta HTML-framsetningu umfjöllunarefnis spjallrása", diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 94c30e89f24..9abc63b1452 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2422,6 +2422,7 @@ "custom_theme_success": "Tema aggiunto!", "custom_theme_url": "URL tema personalizzato", "font_size": "Dimensione carattere", + "font_size_default": "%(fontSize)s (predefinito)", "heading": "Personalizza l'aspetto", "image_size_default": "Predefinito", "image_size_large": "Grande", diff --git a/src/i18n/strings/lo.json b/src/i18n/strings/lo.json index 524026be879..82c3b53fb9d 100644 --- a/src/i18n/strings/lo.json +++ b/src/i18n/strings/lo.json @@ -1184,6 +1184,7 @@ "group_rooms": "ຫ້ອງ", "group_spaces": "ພື້ນທີ່", "group_themes": "ຫົວຂໍ້", + "group_threads": "ກະທູ້", "group_voip": "ສຽງ & ວິດີໂອ", "group_widgets": "ວິດເຈັດ", "join_beta": "ເຂົ້າຮ່ວມເບຕ້າ", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 9d159b6c2dd..be0da533b73 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -206,7 +206,7 @@ "forgot_password_email_required": "必须输入和你账户关联的邮箱地址。", "forgot_password_prompt": "忘记你的密码了吗?", "forgot_password_send_email": "发送重置连接", - "identifier_label": "第三方登录", + "identifier_label": "登录方式", "incorrect_credentials": "用户名或密码错误。", "incorrect_credentials_detail": "请注意,你正在登录 %(hs)s,而非 matrix.org。", "incorrect_password": "密码错误", @@ -277,7 +277,7 @@ "server_picker_description": "你可以使用自定义服务器选项来指定不同的家服务器URL以登录其他Matrix服务器。这让你能把%(brand)s和不同家服务器上的已有Matrix账户搭配使用。", "server_picker_description_matrix.org": "免费加入最大的公共服务器,成为数百万用户中的一员", "server_picker_dialog_title": "决定账户托管位置", - "server_picker_explainer": "使用你偏好的Matrix家服务器,如果你有的话,或自己架设一个。", + "server_picker_explainer": "使用你的Matrix服务器,或自己架设一个。", "server_picker_failed_validate_homeserver": "无法验证家服务器", "server_picker_intro": "我们将您可以托管账户的地方称为“服务器组”。", "server_picker_invalid_url": "URL 无效", diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index b9cda836ee9..c9001e81579 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -424,6 +424,7 @@ "other": "與另 %(count)s 個人…", "one": "與另 1 個人…" }, + "android": "安卓", "appearance": "外觀", "application": "應用程式", "are_you_sure": "您確定嗎?", @@ -462,6 +463,7 @@ "identity_server": "身分伺服器", "image": "圖片", "integration_manager": "整合管理員", + "ios": "iOS", "joined": "已加入", "labs": "實驗室", "legal": "法律", @@ -469,6 +471,7 @@ "loading": "載入中…", "location": "位置", "low_priority": "低優先度", + "matrix": "Matrix", "message": "訊息", "message_layout": "訊息佈局", "microphone": "麥克風", From d36c1b39fdbce354f9386328d260d9d612a15a15 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Date: Fri, 22 Mar 2024 12:28:13 +0000 Subject: [PATCH 054/235] Clean up some references to internal js-sdk classes (#12363) * Fix references to `crypto-api/verification` This is supposed to be an internal module; use the front door instead. * `IRecoveryKey` -> `GeneratedSecretStorageKey` `IRecoveryKey` is just a backwards-compatibility alias for `GeneratedSecretStorageKey` * `ISecretStorageKeyInfo` -> `SecretStorage.SecretStorageKeyDescription` Again, same thing * `IPassphraseInfo` -> `SecretStorage.PassphraseInfo` * Remove unused import restriction exceptions --- .eslintrc.js | 5 +--- playwright/e2e/crypto/utils.ts | 7 +---- src/SecurityManager.ts | 29 +++++++++++++------ .../security/CreateSecretStorageDialog.tsx | 5 ++-- .../structures/auth/SetupEncryptionBody.tsx | 4 +-- .../views/dialogs/IncomingSasDialog.tsx | 2 +- .../security/AccessSecretStorageDialog.tsx | 4 +-- .../security/RestoreKeyBackupDialog.tsx | 5 ++-- .../views/right_panel/VerificationPanel.tsx | 4 ++- .../verification/VerificationShowSas.tsx | 2 +- src/stores/SetupEncryptionStore.ts | 5 ++-- .../views/VerificationShowSas-test.tsx | 2 +- .../AccessSecretStorageDialog-test.tsx | 5 ++-- .../views/dialogs/IncomingSasDialog-test.tsx | 2 +- .../right_panel/VerificationPanel-test.tsx | 2 +- 15 files changed, 42 insertions(+), 41 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 3beb4d2332f..fe5c1b5794b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -76,6 +76,7 @@ module.exports = { group: [ "matrix-js-sdk/src/**", "!matrix-js-sdk/src/matrix", + "!matrix-js-sdk/src/crypto-api", "!matrix-js-sdk/src/types", "matrix-js-sdk/lib", "matrix-js-sdk/lib/", @@ -105,13 +106,9 @@ module.exports = { "!matrix-js-sdk/src/extensible_events_v1/PollResponseEvent", "!matrix-js-sdk/src/extensible_events_v1/PollEndEvent", "!matrix-js-sdk/src/extensible_events_v1/InvalidEventError", - "!matrix-js-sdk/src/crypto-api", - "!matrix-js-sdk/src/crypto-api/verification", "!matrix-js-sdk/src/crypto", "!matrix-js-sdk/src/crypto/algorithms", - "!matrix-js-sdk/src/crypto/api", "!matrix-js-sdk/src/crypto/aes", - "!matrix-js-sdk/src/crypto/backup", "!matrix-js-sdk/src/crypto/olmlib", "!matrix-js-sdk/src/crypto/crypto", "!matrix-js-sdk/src/crypto/keybackup", diff --git a/playwright/e2e/crypto/utils.ts b/playwright/e2e/crypto/utils.ts index 0362148d390..51e07093435 100644 --- a/playwright/e2e/crypto/utils.ts +++ b/playwright/e2e/crypto/utils.ts @@ -17,12 +17,7 @@ limitations under the License. import { type Page, expect, JSHandle } from "@playwright/test"; import type { CryptoEvent, ICreateRoomOpts, MatrixClient } from "matrix-js-sdk/src/matrix"; -import type { - VerificationRequest, - Verifier, - EmojiMapping, - VerifierEvent, -} from "matrix-js-sdk/src/crypto-api/verification"; +import type { VerificationRequest, Verifier, EmojiMapping, VerifierEvent } from "matrix-js-sdk/src/crypto-api"; import type { ISasEvent } from "matrix-js-sdk/src/crypto/verification/SAS"; import { Credentials, HomeserverInstance } from "../../plugins/homeserver"; import { Client } from "../../pages/client"; diff --git a/src/SecurityManager.ts b/src/SecurityManager.ts index ff8946614fd..bef9589ce41 100644 --- a/src/SecurityManager.ts +++ b/src/SecurityManager.ts @@ -14,8 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { DeviceVerificationStatus, ICryptoCallbacks, MatrixClient, encodeBase64 } from "matrix-js-sdk/src/matrix"; -import { ISecretStorageKeyInfo } from "matrix-js-sdk/src/crypto/api"; +import { + DeviceVerificationStatus, + ICryptoCallbacks, + MatrixClient, + encodeBase64, + SecretStorage, +} from "matrix-js-sdk/src/matrix"; import { deriveKey } from "matrix-js-sdk/src/crypto/key_passphrase"; import { decodeRecoveryKey } from "matrix-js-sdk/src/crypto/recoverykey"; import { logger } from "matrix-js-sdk/src/logger"; @@ -38,14 +43,14 @@ import InteractiveAuthDialog from "./components/views/dialogs/InteractiveAuthDia // single secret storage operation, as it will clear the cached keys once the // operation ends. let secretStorageKeys: Record = {}; -let secretStorageKeyInfo: Record = {}; +let secretStorageKeyInfo: Record = {}; let secretStorageBeingAccessed = false; let nonInteractive = false; let dehydrationCache: { key?: Uint8Array; - keyInfo?: ISecretStorageKeyInfo; + keyInfo?: SecretStorage.SecretStorageKeyDescription; } = {}; function isCachingAllowed(): boolean { @@ -80,7 +85,9 @@ async function confirmToDismiss(): Promise { return !sure; } -function makeInputToKey(keyInfo: ISecretStorageKeyInfo): (keyParams: KeyParams) => Promise { +function makeInputToKey( + keyInfo: SecretStorage.SecretStorageKeyDescription, +): (keyParams: KeyParams) => Promise { return async ({ passphrase, recoveryKey }): Promise => { if (passphrase) { return deriveKey(passphrase, keyInfo.passphrase.salt, keyInfo.passphrase.iterations); @@ -94,11 +101,11 @@ function makeInputToKey(keyInfo: ISecretStorageKeyInfo): (keyParams: KeyParams) async function getSecretStorageKey({ keys: keyInfos, }: { - keys: Record; + keys: Record; }): Promise<[string, Uint8Array]> { const cli = MatrixClientPeg.safeGet(); let keyId = await cli.getDefaultSecretStorageKeyId(); - let keyInfo!: ISecretStorageKeyInfo; + let keyInfo!: SecretStorage.SecretStorageKeyDescription; if (keyId) { // use the default SSSS key if set keyInfo = keyInfos[keyId]; @@ -177,7 +184,7 @@ async function getSecretStorageKey({ } export async function getDehydrationKey( - keyInfo: ISecretStorageKeyInfo, + keyInfo: SecretStorage.SecretStorageKeyDescription, checkFunc: (data: Uint8Array) => void, ): Promise { const keyFromCustomisations = SecurityCustomisations.getSecretStorageKey?.(); @@ -226,7 +233,11 @@ export async function getDehydrationKey( return key; } -function cacheSecretStorageKey(keyId: string, keyInfo: ISecretStorageKeyInfo, key: Uint8Array): void { +function cacheSecretStorageKey( + keyId: string, + keyInfo: SecretStorage.SecretStorageKeyDescription, + key: Uint8Array, +): void { if (isCachingAllowed()) { secretStorageKeys[keyId] = key; secretStorageKeyInfo[keyId] = keyInfo; diff --git a/src/async-components/views/dialogs/security/CreateSecretStorageDialog.tsx b/src/async-components/views/dialogs/security/CreateSecretStorageDialog.tsx index 036fb5038b3..3fe64499caa 100644 --- a/src/async-components/views/dialogs/security/CreateSecretStorageDialog.tsx +++ b/src/async-components/views/dialogs/security/CreateSecretStorageDialog.tsx @@ -19,10 +19,9 @@ import React, { createRef } from "react"; import FileSaver from "file-saver"; import { logger } from "matrix-js-sdk/src/logger"; import { AuthDict, CrossSigningKeys, MatrixError, UIAFlow, UIAResponse } from "matrix-js-sdk/src/matrix"; -import { IRecoveryKey } from "matrix-js-sdk/src/crypto/api"; import { CryptoEvent } from "matrix-js-sdk/src/crypto"; import classNames from "classnames"; -import { BackupTrustInfo, KeyBackupInfo } from "matrix-js-sdk/src/crypto-api"; +import { BackupTrustInfo, GeneratedSecretStorageKey, KeyBackupInfo } from "matrix-js-sdk/src/crypto-api"; import { MatrixClientPeg } from "../../../../MatrixClientPeg"; import { _t, _td } from "../../../../languageHandler"; @@ -122,7 +121,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent(); private passphraseField = createRef(); diff --git a/src/components/structures/auth/SetupEncryptionBody.tsx b/src/components/structures/auth/SetupEncryptionBody.tsx index 3ad4638306d..684a7b5af4e 100644 --- a/src/components/structures/auth/SetupEncryptionBody.tsx +++ b/src/components/structures/auth/SetupEncryptionBody.tsx @@ -15,10 +15,10 @@ limitations under the License. */ import React from "react"; -import { ISecretStorageKeyInfo } from "matrix-js-sdk/src/crypto/api"; import { IKeyBackupInfo } from "matrix-js-sdk/src/crypto/keybackup"; import { VerificationRequest } from "matrix-js-sdk/src/crypto-api"; import { logger } from "matrix-js-sdk/src/logger"; +import { SecretStorageKeyDescription } from "matrix-js-sdk/src/secret-storage"; import { _t } from "../../../languageHandler"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; @@ -29,7 +29,7 @@ import EncryptionPanel from "../../views/right_panel/EncryptionPanel"; import AccessibleButton, { ButtonEvent } from "../../views/elements/AccessibleButton"; import Spinner from "../../views/elements/Spinner"; -function keyHasPassphrase(keyInfo: ISecretStorageKeyInfo): boolean { +function keyHasPassphrase(keyInfo: SecretStorageKeyDescription): boolean { return Boolean(keyInfo.passphrase && keyInfo.passphrase.salt && keyInfo.passphrase.iterations); } diff --git a/src/components/views/dialogs/IncomingSasDialog.tsx b/src/components/views/dialogs/IncomingSasDialog.tsx index a562760b6a1..f1f09897f95 100644 --- a/src/components/views/dialogs/IncomingSasDialog.tsx +++ b/src/components/views/dialogs/IncomingSasDialog.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React, { ReactNode } from "react"; -import { GeneratedSas, ShowSasCallbacks, Verifier, VerifierEvent } from "matrix-js-sdk/src/crypto-api/verification"; +import { GeneratedSas, ShowSasCallbacks, Verifier, VerifierEvent } from "matrix-js-sdk/src/crypto-api"; import { logger } from "matrix-js-sdk/src/logger"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; diff --git a/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx b/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx index 3d8447079ae..4b24182f6f6 100644 --- a/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx +++ b/src/components/views/dialogs/security/AccessSecretStorageDialog.tsx @@ -17,8 +17,8 @@ limitations under the License. import { debounce } from "lodash"; import classNames from "classnames"; import React, { ChangeEvent, FormEvent } from "react"; -import { ISecretStorageKeyInfo } from "matrix-js-sdk/src/crypto/api"; import { logger } from "matrix-js-sdk/src/logger"; +import { SecretStorage } from "matrix-js-sdk/src/matrix"; import { MatrixClientPeg } from "../../../../MatrixClientPeg"; import Field from "../../elements/Field"; @@ -42,7 +42,7 @@ const VALIDATION_THROTTLE_MS = 200; export type KeyParams = { passphrase?: string; recoveryKey?: string }; interface IProps { - keyInfo: ISecretStorageKeyInfo; + keyInfo: SecretStorage.SecretStorageKeyDescription; checkPrivateKey: (k: KeyParams) => Promise; onFinished(result?: false | KeyParams): void; } diff --git a/src/components/views/dialogs/security/RestoreKeyBackupDialog.tsx b/src/components/views/dialogs/security/RestoreKeyBackupDialog.tsx index edc2befe118..c535245e61d 100644 --- a/src/components/views/dialogs/security/RestoreKeyBackupDialog.tsx +++ b/src/components/views/dialogs/security/RestoreKeyBackupDialog.tsx @@ -16,9 +16,8 @@ limitations under the License. */ import React, { ChangeEvent } from "react"; -import { MatrixClient, MatrixError } from "matrix-js-sdk/src/matrix"; +import { MatrixClient, MatrixError, SecretStorage } from "matrix-js-sdk/src/matrix"; import { IKeyBackupInfo, IKeyBackupRestoreResult } from "matrix-js-sdk/src/crypto/keybackup"; -import { ISecretStorageKeyInfo } from "matrix-js-sdk/src/crypto/api"; import { logger } from "matrix-js-sdk/src/logger"; import { MatrixClientPeg } from "../../../../MatrixClientPeg"; @@ -53,7 +52,7 @@ interface IProps { interface IState { backupInfo: IKeyBackupInfo | null; - backupKeyStored: Record | null; + backupKeyStored: Record | null; loading: boolean; loadError: boolean | null; restoreError: unknown | null; diff --git a/src/components/views/right_panel/VerificationPanel.tsx b/src/components/views/right_panel/VerificationPanel.tsx index c0872192ec9..2cc93fcb1a4 100644 --- a/src/components/views/right_panel/VerificationPanel.tsx +++ b/src/components/views/right_panel/VerificationPanel.tsx @@ -21,10 +21,12 @@ import { VerificationPhase as Phase, VerificationRequest, VerificationRequestEvent, + ShowQrCodeCallbacks, + ShowSasCallbacks, + VerifierEvent, } from "matrix-js-sdk/src/crypto-api"; import { RoomMember, Device, User } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; -import { ShowQrCodeCallbacks, ShowSasCallbacks, VerifierEvent } from "matrix-js-sdk/src/crypto-api/verification"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; import VerificationQRCode from "../elements/crypto/VerificationQRCode"; diff --git a/src/components/views/verification/VerificationShowSas.tsx b/src/components/views/verification/VerificationShowSas.tsx index 42cb7721597..de091091abc 100644 --- a/src/components/views/verification/VerificationShowSas.tsx +++ b/src/components/views/verification/VerificationShowSas.tsx @@ -16,7 +16,7 @@ limitations under the License. import React from "react"; import { Device } from "matrix-js-sdk/src/matrix"; -import { GeneratedSas, EmojiMapping } from "matrix-js-sdk/src/crypto-api/verification"; +import { GeneratedSas, EmojiMapping } from "matrix-js-sdk/src/crypto-api"; import SasEmoji from "@matrix-org/spec/sas-emoji.json"; import { _t, getNormalizedLanguageKeys, getUserLanguage } from "../../../languageHandler"; diff --git a/src/stores/SetupEncryptionStore.ts b/src/stores/SetupEncryptionStore.ts index 72e463a9c76..79621322be2 100644 --- a/src/stores/SetupEncryptionStore.ts +++ b/src/stores/SetupEncryptionStore.ts @@ -17,10 +17,9 @@ limitations under the License. import EventEmitter from "events"; import { VerificationPhase, VerificationRequest, VerificationRequestEvent } from "matrix-js-sdk/src/crypto-api"; import { IKeyBackupInfo } from "matrix-js-sdk/src/crypto/keybackup"; -import { ISecretStorageKeyInfo } from "matrix-js-sdk/src/crypto/api"; import { logger } from "matrix-js-sdk/src/logger"; import { CryptoEvent } from "matrix-js-sdk/src/crypto"; -import { Device } from "matrix-js-sdk/src/matrix"; +import { Device, SecretStorage } from "matrix-js-sdk/src/matrix"; import { MatrixClientPeg } from "../MatrixClientPeg"; import { AccessCancelledError, accessSecretStorage } from "../SecurityManager"; @@ -48,7 +47,7 @@ export class SetupEncryptionStore extends EventEmitter { // ID of the key that the secrets we want are encrypted with public keyId: string | null = null; // Descriptor of the key that the secrets we want are encrypted with - public keyInfo: ISecretStorageKeyInfo | null = null; + public keyInfo: SecretStorage.SecretStorageKeyDescription | null = null; public hasDevicesToVerifyAgainst?: boolean; public static sharedInstance(): SetupEncryptionStore { diff --git a/test/components/views/VerificationShowSas-test.tsx b/test/components/views/VerificationShowSas-test.tsx index f140de78a2b..fe1c3e5d7dc 100644 --- a/test/components/views/VerificationShowSas-test.tsx +++ b/test/components/views/VerificationShowSas-test.tsx @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { EmojiMapping } from "matrix-js-sdk/src/crypto-api/verification"; +import { EmojiMapping } from "matrix-js-sdk/src/crypto-api"; import { tEmoji } from "../../../src/components/views/verification/VerificationShowSas"; diff --git a/test/components/views/dialogs/AccessSecretStorageDialog-test.tsx b/test/components/views/dialogs/AccessSecretStorageDialog-test.tsx index 22bcde2557f..00b7242d960 100644 --- a/test/components/views/dialogs/AccessSecretStorageDialog-test.tsx +++ b/test/components/views/dialogs/AccessSecretStorageDialog-test.tsx @@ -15,10 +15,9 @@ limitations under the License. */ import React, { ComponentProps } from "react"; -import { IPassphraseInfo } from "matrix-js-sdk/src/crypto/api"; +import { SecretStorage, MatrixClient } from "matrix-js-sdk/src/matrix"; import { act, fireEvent, render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; -import { MatrixClient } from "matrix-js-sdk/src/matrix"; import { Mocked } from "jest-mock"; import { getMockClientWithEventEmitter, mockPlatformPeg } from "../../../test-utils"; @@ -117,7 +116,7 @@ describe("AccessSecretStorageDialog", () => { passphrase: { // this type is weird in js-sdk // cast 'm.pbkdf2' to itself - algorithm: "m.pbkdf2" as IPassphraseInfo["algorithm"], + algorithm: "m.pbkdf2" as SecretStorage.PassphraseInfo["algorithm"], iterations: 2, salt: "nonempty", }, diff --git a/test/components/views/dialogs/IncomingSasDialog-test.tsx b/test/components/views/dialogs/IncomingSasDialog-test.tsx index ee12dfa02d9..e33ad752bb8 100644 --- a/test/components/views/dialogs/IncomingSasDialog-test.tsx +++ b/test/components/views/dialogs/IncomingSasDialog-test.tsx @@ -23,7 +23,7 @@ import { Verifier, VerifierEvent, VerifierEventHandlerMap, -} from "matrix-js-sdk/src/crypto-api/verification"; +} from "matrix-js-sdk/src/crypto-api"; import { TypedEventEmitter } from "matrix-js-sdk/src/matrix"; import IncomingSasDialog from "../../../../src/components/views/dialogs/IncomingSasDialog"; diff --git a/test/components/views/right_panel/VerificationPanel-test.tsx b/test/components/views/right_panel/VerificationPanel-test.tsx index 54b46c417bd..3fd0f1f1146 100644 --- a/test/components/views/right_panel/VerificationPanel-test.tsx +++ b/test/components/views/right_panel/VerificationPanel-test.tsx @@ -27,7 +27,7 @@ import { Verifier, VerifierEvent, VerifierEventHandlerMap, -} from "matrix-js-sdk/src/crypto-api/verification"; +} from "matrix-js-sdk/src/crypto-api"; import VerificationPanel from "../../../../src/components/views/right_panel/VerificationPanel"; import { flushPromises, stubClient } from "../../../test-utils"; From 4a182e89b0bdda2aa71918b611ca742e93a92d84 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Date: Fri, 22 Mar 2024 12:28:23 +0000 Subject: [PATCH 055/235] VerificationExplorer: remove reference to internal class (#12362) * VerificationExplorer: remove reference to internal class The legacy `VerificationRequest` is an internal class. * handle null timeout --- .../dialogs/devtools/VerificationExplorer.tsx | 15 ++++++++------- src/i18n/strings/en_EN.json | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/components/views/dialogs/devtools/VerificationExplorer.tsx b/src/components/views/dialogs/devtools/VerificationExplorer.tsx index dd9a4b0ee21..aad806d27f6 100644 --- a/src/components/views/dialogs/devtools/VerificationExplorer.tsx +++ b/src/components/views/dialogs/devtools/VerificationExplorer.tsx @@ -16,8 +16,11 @@ limitations under the License. */ import React, { useContext, useEffect, useState } from "react"; -import { VerificationRequest } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; -import { VerificationPhase as Phase, VerificationRequestEvent } from "matrix-js-sdk/src/crypto-api"; +import { + VerificationPhase as Phase, + VerificationRequest, + VerificationRequestEvent, +} from "matrix-js-sdk/src/crypto-api"; import { CryptoEvent } from "matrix-js-sdk/src/crypto"; import { useTypedEventEmitter, useTypedEventEmitterState } from "../../../../hooks/useEventEmitter"; @@ -67,13 +70,11 @@ const VerificationRequestExplorer: React.FC<{
    {_t("devtools|phase")}
    {PHASE_MAP[request.phase] ? _t(PHASE_MAP[request.phase]) : request.phase}
    {_t("devtools|timeout")}
    -
    {Math.floor(timeout / 1000)}
    +
    {timeout === null ? _t("devtools|timeout_none") : Math.floor(timeout / 1000)}
    {_t("devtools|methods")}
    {request.methods && request.methods.join(", ")}
    -
    {_t("devtools|requester")}
    -
    {request.requestingUserId}
    -
    {_t("devtools|observe_only")}
    -
    {JSON.stringify(request.observeOnly)}
    +
    {_t("devtools|other_user")}
    +
    {request.otherUserId}
    ); diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 0768dfb9de0..3cebc61cae2 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -742,15 +742,14 @@ "notification_state": "Notification state is %(notificationState)s", "notifications_debug": "Notifications debug", "number_of_users": "Number of users", - "observe_only": "Observe only", "original_event_source": "Original event source", + "other_user": "Other user", "phase": "Phase", "phase_cancelled": "Cancelled", "phase_ready": "Ready", "phase_requested": "Requested", "phase_started": "Started", "phase_transaction": "Transaction", - "requester": "Requester", "room_encrypted": "Room is encrypted ✅", "room_id": "Room ID: %(roomId)s", "room_not_encrypted": "Room is not encrypted 🚨", @@ -789,6 +788,7 @@ "thread_root_id": "Thread Root ID: %(threadRootId)s", "threads_timeline": "Threads timeline", "timeout": "Timeout", + "timeout_none": "None", "title": "Developer tools", "toggle_event": "toggle event", "toolbox": "Toolbox", From ac62ce3e6cbef80d99d0108b597cf691bcab8233 Mon Sep 17 00:00:00 2001 From: David Langley Date: Fri, 22 Mar 2024 14:26:08 +0000 Subject: [PATCH 056/235] Remove the Lazy Loading `InvalidStoreError` Dialogs (#12358) * remove the LL dialogs and the use of InvalidStoreError * remove strings --- src/Lifecycle.ts | 36 ------------ src/components/structures/MatrixChat.tsx | 13 +---- .../dialogs/LazyLoadingDisabledDialog.tsx | 55 ------------------- .../views/dialogs/LazyLoadingResyncDialog.tsx | 43 --------------- src/i18n/strings/en_EN.json | 8 --- 5 files changed, 2 insertions(+), 153 deletions(-) delete mode 100644 src/components/views/dialogs/LazyLoadingDisabledDialog.tsx delete mode 100644 src/components/views/dialogs/LazyLoadingResyncDialog.tsx diff --git a/src/Lifecycle.ts b/src/Lifecycle.ts index b6fce3b6365..3e87541ddd6 100644 --- a/src/Lifecycle.ts +++ b/src/Lifecycle.ts @@ -19,7 +19,6 @@ limitations under the License. import { ReactNode } from "react"; import { createClient, MatrixClient, SSOAction, OidcTokenRefresher } from "matrix-js-sdk/src/matrix"; -import { InvalidStoreError } from "matrix-js-sdk/src/errors"; import { IEncryptedPayload } from "matrix-js-sdk/src/crypto/aes"; import { QueryDict } from "matrix-js-sdk/src/utils"; import { logger } from "matrix-js-sdk/src/logger"; @@ -52,8 +51,6 @@ import LegacyCallHandler from "./LegacyCallHandler"; import LifecycleCustomisations from "./customisations/Lifecycle"; import ErrorDialog from "./components/views/dialogs/ErrorDialog"; import { _t } from "./languageHandler"; -import LazyLoadingResyncDialog from "./components/views/dialogs/LazyLoadingResyncDialog"; -import LazyLoadingDisabledDialog from "./components/views/dialogs/LazyLoadingDisabledDialog"; import SessionRestoreErrorDialog from "./components/views/dialogs/SessionRestoreErrorDialog"; import StorageEvictedDialog from "./components/views/dialogs/StorageEvictedDialog"; import { setSentryUser } from "./sentry"; @@ -439,39 +436,6 @@ async function onFailedDelegatedAuthLogin(description: string | ReactNode, tryAg }); } -export function handleInvalidStoreError(e: InvalidStoreError): Promise | void { - if (e.reason === InvalidStoreError.TOGGLED_LAZY_LOADING) { - return Promise.resolve() - .then(() => { - const lazyLoadEnabled = e.value; - if (lazyLoadEnabled) { - return new Promise((resolve) => { - Modal.createDialog(LazyLoadingResyncDialog, { - onFinished: resolve, - }); - }); - } else { - // show warning about simultaneous use - // between LL/non-LL version on same host. - // as disabling LL when previously enabled - // is a strong indicator of this (/develop & /app) - return new Promise((resolve) => { - Modal.createDialog(LazyLoadingDisabledDialog, { - onFinished: resolve, - host: window.location.host, - }); - }); - } - }) - .then(() => { - return MatrixClientPeg.safeGet().store.deleteAllData(); - }) - .then(() => { - PlatformPeg.get()?.reload(); - }); - } -} - function registerAsGuest(hsUrl: string, isUrl?: string, defaultDeviceDisplayName?: string): Promise { logger.log(`Doing guest login on ${hsUrl}`); diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index b9ac2c71d72..d775059c319 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -27,7 +27,6 @@ import { SyncStateData, SyncState, } from "matrix-js-sdk/src/matrix"; -import { InvalidStoreError } from "matrix-js-sdk/src/errors"; import { defer, IDeferred, QueryDict } from "matrix-js-sdk/src/utils"; import { logger } from "matrix-js-sdk/src/logger"; import { throttle } from "lodash"; @@ -1484,9 +1483,6 @@ export default class MatrixChat extends React.PureComponent { cli.on(ClientEvent.Sync, (state: SyncState, prevState: SyncState | null, data?: SyncStateData) => { if (state === SyncState.Error || state === SyncState.Reconnecting) { - if (data?.error instanceof InvalidStoreError) { - Lifecycle.handleInvalidStoreError(data.error); - } this.setState({ syncError: data?.error ?? null }); } else if (this.state.syncError) { this.setState({ syncError: null }); @@ -2018,14 +2014,10 @@ export default class MatrixChat extends React.PureComponent { /> ); } else if (this.state.view === Views.LOGGED_IN) { - // store errors stop the client syncing and require user intervention, so we'll - // be showing a dialog. Don't show anything else. - const isStoreError = this.state.syncError && this.state.syncError instanceof InvalidStoreError; - // `ready` and `view==LOGGED_IN` may be set before `page_type` (because the // latter is set via the dispatcher). If we don't yet have a `page_type`, // keep showing the spinner for now. - if (this.state.ready && this.state.page_type && !isStoreError) { + if (this.state.ready && this.state.page_type) { /* for now, we stuff the entirety of our props and state into the LoggedInView. * we should go through and figure out what we actually need to pass down, as well * as using something like redux to avoid having a billion bits of state kicking around. @@ -2042,12 +2034,11 @@ export default class MatrixChat extends React.PureComponent { ); } else { // we think we are logged in, but are still waiting for the /sync to complete - // Suppress `InvalidStoreError`s here, since they have their own error dialog. view = ( ); } diff --git a/src/components/views/dialogs/LazyLoadingDisabledDialog.tsx b/src/components/views/dialogs/LazyLoadingDisabledDialog.tsx deleted file mode 100644 index 1e90b91b455..00000000000 --- a/src/components/views/dialogs/LazyLoadingDisabledDialog.tsx +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2018 New Vector Ltd -Copyright 2020 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import React from "react"; - -import QuestionDialog from "./QuestionDialog"; -import { _t } from "../../../languageHandler"; -import SdkConfig from "../../../SdkConfig"; - -interface IProps { - host: string; - onFinished(): void; -} - -const LazyLoadingDisabledDialog: React.FC = (props) => { - const brand = SdkConfig.get().brand; - const description1 = _t("lazy_loading|disabled_description1", { - brand, - host: props.host, - }); - const description2 = _t("lazy_loading|disabled_description2", { - brand, - }); - - return ( - -

    {description1}

    -

    {description2}

    -
    - } - button={_t("lazy_loading|disabled_action")} - onFinished={props.onFinished} - /> - ); -}; - -export default LazyLoadingDisabledDialog; diff --git a/src/components/views/dialogs/LazyLoadingResyncDialog.tsx b/src/components/views/dialogs/LazyLoadingResyncDialog.tsx deleted file mode 100644 index 54779bda4c6..00000000000 --- a/src/components/views/dialogs/LazyLoadingResyncDialog.tsx +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright 2018 New Vector Ltd -Copyright 2020 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import React from "react"; - -import QuestionDialog from "./QuestionDialog"; -import { _t } from "../../../languageHandler"; -import SdkConfig from "../../../SdkConfig"; - -interface IProps { - onFinished(): void; -} - -const LazyLoadingResyncDialog: React.FC = (props) => { - const brand = SdkConfig.get().brand; - const description = _t("lazy_loading|resync_description", { brand }); - - return ( - {description}
    } - button={_t("action|ok")} - onFinished={props.onFinished} - /> - ); -}; - -export default LazyLoadingResyncDialog; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 3cebc61cae2..65e5accef82 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1511,14 +1511,6 @@ "view_rules": "View rules" }, "language_dropdown_label": "Language Dropdown", - "lazy_loading": { - "disabled_action": "Clear cache and resync", - "disabled_description1": "You've previously used %(brand)s on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, %(brand)s needs to resync your account.", - "disabled_description2": "If the other version of %(brand)s is still open in another tab, please close it as using %(brand)s on the same host with both lazy loading enabled and disabled simultaneously will cause issues.", - "disabled_title": "Incompatible local cache", - "resync_description": "%(brand)s now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!", - "resync_title": "Updating %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "You are the only person here. If you leave, no one will be able to join in the future, including you.", "leave_room_question": "Are you sure you want to leave the room '%(roomName)s'?", From 64806d04900146831ad04cdb0c3f29f293c2c653 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:48:29 +0000 Subject: [PATCH 057/235] Use test helpers from js-sdk for encrypted events (#12364) * Use test helpers from js-sdk for encrypted events Rather than gut-wrenching into the matrix-js-sdk, let's use the newly-exported test helpers to generate encrypted events. * Fix up --- .eslintrc.js | 1 + test/DecryptionFailureTracker-test.js | 74 +++++++++---------- .../components/views/rooms/EventTile-test.tsx | 47 +++++------- test/test-utils/test-utils.ts | 45 ----------- 4 files changed, 57 insertions(+), 110 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index fe5c1b5794b..74318ab70e3 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -78,6 +78,7 @@ module.exports = { "!matrix-js-sdk/src/matrix", "!matrix-js-sdk/src/crypto-api", "!matrix-js-sdk/src/types", + "!matrix-js-sdk/src/testing", "matrix-js-sdk/lib", "matrix-js-sdk/lib/", "matrix-js-sdk/lib/**", diff --git a/test/DecryptionFailureTracker-test.js b/test/DecryptionFailureTracker-test.js index 63b0489ee4c..7fcb53d5d4c 100644 --- a/test/DecryptionFailureTracker-test.js +++ b/test/DecryptionFailureTracker-test.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { mkDecryptionFailureMatrixEvent } from "matrix-js-sdk/src/testing"; import { DecryptionFailureTracker } from "../src/DecryptionFailureTracker"; @@ -26,20 +26,18 @@ class MockDecryptionError extends Error { } } -function createFailedDecryptionEvent() { - const event = new MatrixEvent({ - event_id: "event-id-" + Math.random().toString(16).slice(2), - content: { - algorithm: "m.megolm.v1.aes-sha2", - }, +async function createFailedDecryptionEvent() { + return await mkDecryptionFailureMatrixEvent({ + roomId: "!room:id", + sender: "@alice:example.com", + code: "UNKNOWN_ERROR", + msg: ":(", }); - event.setClearData(event.badEncryptedMessage(":(")); - return event; } describe("DecryptionFailureTracker", function () { - it("tracks a failed decryption for a visible event", function () { - const failedDecryptionEvent = createFailedDecryptionEvent(); + it("tracks a failed decryption for a visible event", async function () { + const failedDecryptionEvent = await createFailedDecryptionEvent(); let count = 0; const tracker = new DecryptionFailureTracker( @@ -61,8 +59,8 @@ describe("DecryptionFailureTracker", function () { expect(count).not.toBe(0, "should track a failure for an event that failed decryption"); }); - it("tracks a failed decryption with expected raw error for a visible event", function () { - const failedDecryptionEvent = createFailedDecryptionEvent(); + it("tracks a failed decryption with expected raw error for a visible event", async function () { + const failedDecryptionEvent = await createFailedDecryptionEvent(); let count = 0; let reportedRawCode = ""; @@ -89,8 +87,8 @@ describe("DecryptionFailureTracker", function () { expect(reportedRawCode).toBe("INBOUND_SESSION_MISMATCH_ROOM_ID", "Should add the rawCode to the event context"); }); - it("tracks a failed decryption for an event that becomes visible later", function () { - const failedDecryptionEvent = createFailedDecryptionEvent(); + it("tracks a failed decryption for an event that becomes visible later", async function () { + const failedDecryptionEvent = await createFailedDecryptionEvent(); let count = 0; const tracker = new DecryptionFailureTracker( @@ -112,8 +110,8 @@ describe("DecryptionFailureTracker", function () { expect(count).not.toBe(0, "should track a failure for an event that failed decryption"); }); - it("does not track a failed decryption for an event that never becomes visible", function () { - const failedDecryptionEvent = createFailedDecryptionEvent(); + it("does not track a failed decryption for an event that never becomes visible", async function () { + const failedDecryptionEvent = await createFailedDecryptionEvent(); let count = 0; const tracker = new DecryptionFailureTracker( @@ -133,8 +131,8 @@ describe("DecryptionFailureTracker", function () { expect(count).toBe(0, "should not track a failure for an event that never became visible"); }); - it("does not track a failed decryption where the event is subsequently successfully decrypted", () => { - const decryptedEvent = createFailedDecryptionEvent(); + it("does not track a failed decryption where the event is subsequently successfully decrypted", async () => { + const decryptedEvent = await createFailedDecryptionEvent(); const tracker = new DecryptionFailureTracker( (total) => { expect(true).toBe(false, "should not track an event that has since been decrypted correctly"); @@ -161,8 +159,8 @@ describe("DecryptionFailureTracker", function () { it( "does not track a failed decryption where the event is subsequently successfully decrypted " + "and later becomes visible", - () => { - const decryptedEvent = createFailedDecryptionEvent(); + async () => { + const decryptedEvent = await createFailedDecryptionEvent(); const tracker = new DecryptionFailureTracker( (total) => { expect(true).toBe(false, "should not track an event that has since been decrypted correctly"); @@ -187,9 +185,9 @@ describe("DecryptionFailureTracker", function () { }, ); - it("only tracks a single failure per event, despite multiple failed decryptions for multiple events", () => { - const decryptedEvent = createFailedDecryptionEvent(); - const decryptedEvent2 = createFailedDecryptionEvent(); + it("only tracks a single failure per event, despite multiple failed decryptions for multiple events", async () => { + const decryptedEvent = await createFailedDecryptionEvent(); + const decryptedEvent2 = await createFailedDecryptionEvent(); let count = 0; const tracker = new DecryptionFailureTracker( @@ -223,8 +221,8 @@ describe("DecryptionFailureTracker", function () { expect(count).toBe(2, count + " failures tracked, should only track a single failure per event"); }); - it("should not track a failure for an event that was tracked previously", () => { - const decryptedEvent = createFailedDecryptionEvent(); + it("should not track a failure for an event that was tracked previously", async () => { + const decryptedEvent = await createFailedDecryptionEvent(); let count = 0; const tracker = new DecryptionFailureTracker( @@ -251,11 +249,11 @@ describe("DecryptionFailureTracker", function () { expect(count).toBe(1, "should only track a single failure per event"); }); - it.skip("should not track a failure for an event that was tracked in a previous session", () => { + it.skip("should not track a failure for an event that was tracked in a previous session", async () => { // This test uses localStorage, clear it beforehand localStorage.clear(); - const decryptedEvent = createFailedDecryptionEvent(); + const decryptedEvent = await createFailedDecryptionEvent(); let count = 0; const tracker = new DecryptionFailureTracker( @@ -292,16 +290,16 @@ describe("DecryptionFailureTracker", function () { expect(count).toBe(1, count + " failures tracked, should only track a single failure per event"); }); - it("should count different error codes separately for multiple failures with different error codes", () => { + it("should count different error codes separately for multiple failures with different error codes", async () => { const counts = {}; const tracker = new DecryptionFailureTracker( (total, errorCode) => (counts[errorCode] = (counts[errorCode] || 0) + total), (error) => (error === "UnknownError" ? "UnknownError" : "OlmKeysNotSentError"), ); - const decryptedEvent1 = createFailedDecryptionEvent(); - const decryptedEvent2 = createFailedDecryptionEvent(); - const decryptedEvent3 = createFailedDecryptionEvent(); + const decryptedEvent1 = await createFailedDecryptionEvent(); + const decryptedEvent2 = await createFailedDecryptionEvent(); + const decryptedEvent3 = await createFailedDecryptionEvent(); const error1 = new MockDecryptionError("UnknownError"); const error2 = new MockDecryptionError("OlmKeysNotSentError"); @@ -325,16 +323,16 @@ describe("DecryptionFailureTracker", function () { expect(counts["OlmKeysNotSentError"]).toBe(2, "should track two OlmKeysNotSentError"); }); - it("should aggregate error codes correctly", () => { + it("should aggregate error codes correctly", async () => { const counts = {}; const tracker = new DecryptionFailureTracker( (total, errorCode) => (counts[errorCode] = (counts[errorCode] || 0) + total), (errorCode) => "OlmUnspecifiedError", ); - const decryptedEvent1 = createFailedDecryptionEvent(); - const decryptedEvent2 = createFailedDecryptionEvent(); - const decryptedEvent3 = createFailedDecryptionEvent(); + const decryptedEvent1 = await createFailedDecryptionEvent(); + const decryptedEvent2 = await createFailedDecryptionEvent(); + const decryptedEvent3 = await createFailedDecryptionEvent(); const error1 = new MockDecryptionError("ERROR_CODE_1"); const error2 = new MockDecryptionError("ERROR_CODE_2"); @@ -359,14 +357,14 @@ describe("DecryptionFailureTracker", function () { ); }); - it("should remap error codes correctly", () => { + it("should remap error codes correctly", async () => { const counts = {}; const tracker = new DecryptionFailureTracker( (total, errorCode) => (counts[errorCode] = (counts[errorCode] || 0) + total), (errorCode) => Array.from(errorCode).reverse().join(""), ); - const decryptedEvent = createFailedDecryptionEvent(); + const decryptedEvent = await createFailedDecryptionEvent(); const error = new MockDecryptionError("ERROR_CODE_1"); diff --git a/test/components/views/rooms/EventTile-test.tsx b/test/components/views/rooms/EventTile-test.tsx index ce89a9fe8fe..31203d4f85b 100644 --- a/test/components/views/rooms/EventTile-test.tsx +++ b/test/components/views/rooms/EventTile-test.tsx @@ -30,20 +30,13 @@ import { } from "matrix-js-sdk/src/matrix"; import { EventEncryptionInfo, EventShieldColour, EventShieldReason } from "matrix-js-sdk/src/crypto-api"; import { TooltipProvider } from "@vector-im/compound-web"; +import { mkEncryptedMatrixEvent } from "matrix-js-sdk/src/testing"; import EventTile, { EventTileProps } from "../../../../src/components/views/rooms/EventTile"; import MatrixClientContext from "../../../../src/contexts/MatrixClientContext"; import RoomContext, { TimelineRenderingType } from "../../../../src/contexts/RoomContext"; import { MatrixClientPeg } from "../../../../src/MatrixClientPeg"; -import { - filterConsole, - flushPromises, - getRoomContext, - mkEncryptedEvent, - mkEvent, - mkMessage, - stubClient, -} from "../../../test-utils"; +import { filterConsole, flushPromises, getRoomContext, mkEvent, mkMessage, stubClient } from "../../../test-utils"; import { mkThread } from "../../../test-utils/threads"; import DMRoomMap from "../../../../src/utils/DMRoomMap"; import dis from "../../../../src/dispatcher/dispatcher"; @@ -225,11 +218,11 @@ describe("EventTile", () => { }); it("shows a warning for an event from an unverified device", async () => { - mxEvent = await mkEncryptedEvent({ + mxEvent = await mkEncryptedMatrixEvent({ plainContent: { msgtype: "m.text", body: "msg1" }, plainType: "m.room.message", - user: "@alice:example.org", - room: room.roomId, + sender: "@alice:example.org", + roomId: room.roomId, }); eventToEncryptionInfoMap.set(mxEvent.getId()!, { shieldColour: EventShieldColour.RED, @@ -250,11 +243,11 @@ describe("EventTile", () => { }); it("shows no shield for a verified event", async () => { - mxEvent = await mkEncryptedEvent({ + mxEvent = await mkEncryptedMatrixEvent({ plainContent: { msgtype: "m.text", body: "msg1" }, plainType: "m.room.message", - user: "@alice:example.org", - room: room.roomId, + sender: "@alice:example.org", + roomId: room.roomId, }); eventToEncryptionInfoMap.set(mxEvent.getId()!, { shieldColour: EventShieldColour.NONE, @@ -279,11 +272,11 @@ describe("EventTile", () => { [EventShieldReason.AUTHENTICITY_NOT_GUARANTEED, "can't be guaranteed"], [EventShieldReason.MISMATCHED_SENDER_KEY, "Encrypted by an unverified session"], ])("shows the correct reason code for %i (%s)", async (reasonCode: EventShieldReason, expectedText: string) => { - mxEvent = await mkEncryptedEvent({ + mxEvent = await mkEncryptedMatrixEvent({ plainContent: { msgtype: "m.text", body: "msg1" }, plainType: "m.room.message", - user: "@alice:example.org", - room: room.roomId, + sender: "@alice:example.org", + roomId: room.roomId, }); eventToEncryptionInfoMap.set(mxEvent.getId()!, { shieldColour: EventShieldColour.GREY, @@ -337,11 +330,11 @@ describe("EventTile", () => { it("should update the warning when the event is edited", async () => { // we start out with an event from the trusted device - mxEvent = await mkEncryptedEvent({ + mxEvent = await mkEncryptedMatrixEvent({ plainContent: { msgtype: "m.text", body: "msg1" }, plainType: "m.room.message", - user: "@alice:example.org", - room: room.roomId, + sender: "@alice:example.org", + roomId: room.roomId, }); eventToEncryptionInfoMap.set(mxEvent.getId()!, { shieldColour: EventShieldColour.NONE, @@ -360,11 +353,11 @@ describe("EventTile", () => { expect(container.getElementsByClassName("mx_EventTile_e2eIcon")).toHaveLength(0); // then we replace the event with one from the unverified device - const replacementEvent = await mkEncryptedEvent({ + const replacementEvent = await mkEncryptedMatrixEvent({ plainContent: { msgtype: "m.text", body: "msg1" }, plainType: "m.room.message", - user: "@alice:example.org", - room: room.roomId, + sender: "@alice:example.org", + roomId: room.roomId, }); eventToEncryptionInfoMap.set(replacementEvent.getId()!, { shieldColour: EventShieldColour.RED, @@ -388,11 +381,11 @@ describe("EventTile", () => { jest.spyOn(client, "isRoomEncrypted").mockReturnValue(true); // we start out with an event from the trusted device - mxEvent = await mkEncryptedEvent({ + mxEvent = await mkEncryptedMatrixEvent({ plainContent: { msgtype: "m.text", body: "msg1" }, plainType: "m.room.message", - user: "@alice:example.org", - room: room.roomId, + sender: "@alice:example.org", + roomId: room.roomId, }); eventToEncryptionInfoMap.set(mxEvent.getId()!, { diff --git a/test/test-utils/test-utils.ts b/test/test-utils/test-utils.ts index 933d324dd5f..7bf83c2d101 100644 --- a/test/test-utils/test-utils.ts +++ b/test/test-utils/test-utils.ts @@ -36,7 +36,6 @@ import { IPushRules, RelationType, JoinRule, - IEventDecryptionResult, OidcClientConfig, } from "matrix-js-sdk/src/matrix"; import { KnownMembership } from "matrix-js-sdk/src/types"; @@ -404,50 +403,6 @@ export function mkEvent(opts: MakeEventProps): MatrixEvent { return mxEvent; } -/** - * Create an m.room.encrypted event - * - * @param opts - Values for the event - * @param opts.room - The ID of the room for the event - * @param opts.user - The sender of the event - * @param opts.plainType - The type the event will have, once it has been decrypted - * @param opts.plainContent - The content the event will have, once it has been decrypted - */ -export async function mkEncryptedEvent(opts: { - room: Room["roomId"]; - user: User["userId"]; - plainType: string; - plainContent: IContent; -}): Promise { - // we construct an event which has been decrypted by stubbing out CryptoBackend.decryptEvent and then - // calling MatrixEvent.attemptDecryption. - - const mxEvent = mkEvent({ - type: "m.room.encrypted", - room: opts.room, - user: opts.user, - event: true, - content: {}, - }); - - const decryptionResult: IEventDecryptionResult = { - claimedEd25519Key: "", - clearEvent: { - type: opts.plainType, - content: opts.plainContent, - }, - forwardingCurve25519KeyChain: [], - senderCurve25519Key: "", - untrusted: false, - }; - - const mockCrypto = { - decryptEvent: async (_ev): Promise => decryptionResult, - } as Parameters[0]; - await mxEvent.attemptDecryption(mockCrypto); - return mxEvent; -} - /** * Create an m.room.member event. * @param {Object} opts Values for the membership. From 56d79118971315436f1198e9f931723efff86d5c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 22 Mar 2024 15:50:06 +0000 Subject: [PATCH 058/235] Iterate styles around Link new device via QR (#12356) * Rearrange user settings tab order to move Sessions up to 2nd Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Iterate copy & iconography on Settings > Sessions > Link new device Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Iterate design of Scan QR code screen Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Tweak styles Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update tests and snapshots Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update tests and snapshots Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Update screenshots Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../appearance-tab-linux.png | Bin 53131 -> 53079 bytes .../window-12px-linux.png | Bin 67911 -> 73556 bytes .../general-linux.png | Bin 58697 -> 58660 bytes ...ab-should-be-rendered-properly-1-linux.png | Bin 65349 -> 65154 bytes res/css/views/auth/_LoginWithQR.pcss | 29 +- src/components/views/auth/LoginWithQRFlow.tsx | 53 ++- .../views/dialogs/UserSettingsDialog.tsx | 20 +- .../settings/devices/LoginWithQRSection.tsx | 2 + src/i18n/strings/en_EN.json | 14 +- .../UserSettingsDialog-test.tsx.snap | 36 +- .../LoginWithQRFlow-test.tsx.snap | 310 ++++++++---------- .../LoginWithQRSection-test.tsx.snap | 16 +- .../tabs/user/SessionManagerTab-test.tsx | 3 +- 13 files changed, 237 insertions(+), 246 deletions(-) diff --git a/playwright/snapshots/settings/appearance-user-settings-tab.spec.ts/appearance-tab-linux.png b/playwright/snapshots/settings/appearance-user-settings-tab.spec.ts/appearance-tab-linux.png index a1f501ebf884a29150a9f4a5cd94fe6bd111befd..e5680339f4b81c96bd4549bc3c1fb4cd816e8158 100644 GIT binary patch literal 53079 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 z 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 diff --git a/playwright/snapshots/settings/appearance-user-settings-tab.spec.ts/window-12px-linux.png b/playwright/snapshots/settings/appearance-user-settings-tab.spec.ts/window-12px-linux.png index 947da4516005ef4b843de06e0cd945b80810c3df..23b77fd75182ab6a63dcfba0340256f92e032414 100644 GIT binary patch literal 73556 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%0D;DbE$76&i9DahEPQcZkY>dh0)ytg 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�!b>@q0N%K}R>Y#tTWj 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 diff --git a/playwright/snapshots/settings/preferences-user-settings-tab.spec.ts/Preferences-user-settings-tab-should-be-rendered-properly-1-linux.png b/playwright/snapshots/settings/preferences-user-settings-tab.spec.ts/Preferences-user-settings-tab-should-be-rendered-properly-1-linux.png index 73b2e6e038f2605c6c058a5722fe4edfd3b26bc2..02ce908efa5b798c390092cf410724ae2483f543 100644 GIT binary patch literal 65154 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 literal 65349 zcmeFZcTkhv+b)XwS`m0Hh=717MS2g?Q4t7LdMDDQOP7ufq(hKirAP`y6$@!{6a;J>>ABA5)u+JsJx6i z3CTZ9BqZkpu3Q5DBGZ%K1Ad%yQI~s4Qqq5Kg@oij2~_5Z=9`qYDGyyu9YV*}0I%ka zwvtbI8SjkN8k5JogN@9f0$=UB3GTx6E91&SeC@h$T{B@D({PC~Qpj!6Ow%Xf%tI!% z%~Gw=H~y8m+u8sdFiWZ1pLA*Ru$(uM6xlZ%_7J#34QHfgp@u85JcFB05-{A);A|)M zmX|Mk#Ow;+R*@xNR|!qduU~gA z3|~H*Ig%Yr_ORop>+%@1t*xzx_j;E(f|fOV{%VcOwP#<&Rz5I_OgHkkM7fba7rmF- zTcGh!x~fp;5C8SE;rA=Xi}aBkg*LGvqCUHy$?3(uWVdE(a)pUmw_=-%sXXK(zJ9*{ zlb4_TVaV;hU$^X&yDPp0HTGXU8$EwZMJ3`|(L!m+LSv=-ocmNrM455BNd-%5>i8{| zt|$4UVe)e0{LIJ-MX{e(&W5~(rG1nb$Z4ZDBRJgkab%#<~@7zjgO$i3ymCw z+l^M`@1gvO^BE%;xx4C5goP!>tJ!LH|2cb#q76)kHGshDlhIhR8mj2p#(|0MsFV~s zWSOr(T^(XxE&uGn-%hiutC@Snv|Vh7i}~E1 z#A7-omc)BX&Vpi{gM(@jmO)BK-6hu~EnIh7twj)z#qzboZR#NZo(=CbxEc%%303_Z zeN%dpW1N>MlrfZ9Z|f@9S|w*UCwN7SS;VONS52qHK62;X;@@1khIh{flFS#kGKJ30 z-uj%9;`eX#jTYY9wDB1SA7ttfk9)fKmf}2LzkVI1lRxYHXmusgEcHBbRDj$wQ}}bf zvMq{xve|Jdc8^#f#!zV7z2ai?EmP-5nw=7IVi(V*_r$2&jn>FCn~P0&|3&7Bhp@

    {cancellationMessage}

    ; buttons = ( @@ -134,8 +129,6 @@ export default class LoginWithQRFlow extends React.Component { ); break; case Phase.Connected: - title = _t("auth|qr_code_login|devices_connected"); - titleIcon = ; backButton = false; main = ( <> @@ -170,7 +163,6 @@ export default class LoginWithQRFlow extends React.Component { ); break; case Phase.ShowingQR: - title = _t("settings|sessions|sign_in_with_qr"); if (this.props.code) { const code = (

    ISM*Qt-J5rE6^+qVtRN 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 { }; public render(): React.ReactNode { - let title = ""; - let titleIcon: JSX.Element | undefined; let main: JSX.Element | undefined; let buttons: JSX.Element | undefined; let backButton = true; @@ -115,9 +112,7 @@ export default class LoginWithQRFlow extends React.Component { cancellationMessage = _t("auth|qr_code_login|error_request_cancelled"); break; } - title = _t("timeline|m.call.invite|failed_connection"); centreTitle = true; - titleIcon = ; backButton = false; main =

    @@ -182,17 +174,22 @@ export default class LoginWithQRFlow extends React.Component { ); main = ( <> -

    {_t("auth|qr_code_login|scan_code_instruction")}

    +

    {_t("auth|qr_code_login|scan_code_instruction")}

    + {code}
      -
    1. {_t("auth|qr_code_login|start_at_sign_in_screen")}
    2. +
    3. + {_t("auth|qr_code_login|open_element_other_device", { + brand: SdkConfig.get().brand, + })} +
    4. {_t("auth|qr_code_login|select_qr_code", { - scanQRCode: _t("auth|qr_code_login|scan_qr_code"), + scanQRCode: {_t("auth|qr_code_login|scan_qr_code")}, })}
    5. -
    6. {_t("auth|qr_code_login|review_and_approve")}
    7. +
    8. {_t("auth|qr_code_login|point_the_camera")}
    9. +
    10. {_t("auth|qr_code_login|follow_remaining_instructions")}
    - {code} ); } else { @@ -212,7 +209,6 @@ export default class LoginWithQRFlow extends React.Component { buttons = this.cancelButton(); break; case Phase.Verifying: - title = _t("common|success"); centreTitle = true; main = this.simpleSpinner(_t("auth|qr_code_login|completing_setup")); break; @@ -222,19 +218,20 @@ export default class LoginWithQRFlow extends React.Component {
    {backButton ? ( - - - +
    + + + +
    + {_t("settings|sessions|title")} / {_t("settings|sessions|sign_in_with_qr")} +
    +
    ) : null} -

    - {titleIcon} - {title} -

    {main}
    {buttons}
    diff --git a/src/components/views/dialogs/UserSettingsDialog.tsx b/src/components/views/dialogs/UserSettingsDialog.tsx index f0c9d1cd73a..820617ae962 100644 --- a/src/components/views/dialogs/UserSettingsDialog.tsx +++ b/src/components/views/dialogs/UserSettingsDialog.tsx @@ -84,6 +84,16 @@ export default class UserSettingsDialog extends React.Component "UserSettingsGeneral", ), ); + tabs.push( + new Tab( + UserTab.SessionManager, + _td("settings|sessions|title"), + "mx_UserSettingsDialog_sessionsIcon", + , + // don't track with posthog while under construction + undefined, + ), + ); tabs.push( new Tab( UserTab.Appearance, @@ -151,16 +161,6 @@ export default class UserSettingsDialog extends React.Component "UserSettingsSecurityPrivacy", ), ); - tabs.push( - new Tab( - UserTab.SessionManager, - _td("settings|sessions|title"), - "mx_UserSettingsDialog_sessionsIcon", - , - // don't track with posthog while under construction - undefined, - ), - ); // Show the Labs tab if enabled or if there are any active betas if (showLabsFlags() || SettingsStore.getFeatureSettingNames().some((k) => SettingsStore.getBetaInfo(k))) { tabs.push( diff --git a/src/components/views/settings/devices/LoginWithQRSection.tsx b/src/components/views/settings/devices/LoginWithQRSection.tsx index 036597cfe9c..c85b80c3a7a 100644 --- a/src/components/views/settings/devices/LoginWithQRSection.tsx +++ b/src/components/views/settings/devices/LoginWithQRSection.tsx @@ -22,6 +22,7 @@ import { Capabilities, IClientWellKnown, } from "matrix-js-sdk/src/matrix"; +import { Icon as QrCodeIcon } from "@vector-im/compound-design-tokens/icons/qr-code.svg"; import { _t } from "../../../../languageHandler"; import AccessibleButton from "../../elements/AccessibleButton"; @@ -62,6 +63,7 @@ export default class LoginWithQRSection extends React.Component { {_t("settings|sessions|sign_in_with_qr_description")}

    + {_t("settings|sessions|sign_in_with_qr_button")}
    diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 65e5accef82..d1e9acb3ba8 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -249,7 +249,6 @@ "completing_setup": "Completing set up of your new device", "confirm_code_match": "Check that the code below matches with your other device:", "connecting": "Connecting…", - "devices_connected": "Devices connected", "error_device_already_signed_in": "The other device is already signed in.", "error_device_not_signed_in": "The other device isn't signed in.", "error_device_unsupported": "Linking with this device is not supported.", @@ -260,12 +259,13 @@ "error_request_cancelled": "The request was cancelled.", "error_request_declined": "The request was declined on the other device.", "error_unexpected": "An unexpected error occurred.", - "review_and_approve": "Review and approve the sign in", - "scan_code_instruction": "Scan the QR code below with your device that's signed out.", + "follow_remaining_instructions": "Follow the remaining instructions to verify your other device", + "open_element_other_device": "Open %(brand)s on your other device", + "point_the_camera": "Point the camera at the QR code shown here", + "scan_code_instruction": "Scan the QR code with another device", "scan_qr_code": "Scan QR code", - "select_qr_code": "Select '%(scanQRCode)s'", + "select_qr_code": "Select \"%(scanQRCode)s\"", "sign_in_new_device": "Sign in new device", - "start_at_sign_in_screen": "Start at the sign in screen", "waiting_for_device": "Waiting for device to sign in" }, "register_action": "Create Account", @@ -2800,9 +2800,9 @@ "security_recommendations_description": "Improve your account security by following these recommendations.", "session_id": "Session ID", "show_details": "Show details", - "sign_in_with_qr": "Sign in with QR code", + "sign_in_with_qr": "Link new device", "sign_in_with_qr_button": "Show QR code", - "sign_in_with_qr_description": "You can use this device to sign in a new device with a QR code. You will need to scan the QR code shown on this device with your device that's signed out.", + "sign_in_with_qr_description": "Use a QR code to sign in to another device and set up secure messaging.", "sign_out": "Sign out of this session", "sign_out_all_other_sessions": "Sign out of all other sessions (%(otherSessionsCount)s)", "sign_out_confirm_description": { diff --git a/test/components/views/dialogs/__snapshots__/UserSettingsDialog-test.tsx.snap b/test/components/views/dialogs/__snapshots__/UserSettingsDialog-test.tsx.snap index 3ec2cec8e1b..b616978a4bd 100644 --- a/test/components/views/dialogs/__snapshots__/UserSettingsDialog-test.tsx.snap +++ b/test/components/views/dialogs/__snapshots__/UserSettingsDialog-test.tsx.snap @@ -20,6 +20,24 @@ NodeList [ General , + ,
  • , - ,
  • errors renders data_mismatch 1`] = ` >
    -

    -
    - Connection failed -

    -
    + />
    @@ -57,14 +50,7 @@ exports[` errors renders expired 1`] = ` >
    -

    -
    - Connection failed -

    -
    + />
    @@ -106,14 +92,7 @@ exports[` errors renders homeserver_lacks_support 1`] = ` >
    -

    -
    - Connection failed -

    -
    + />
    @@ -155,14 +134,7 @@ exports[` errors renders invalid_code 1`] = ` >
    -

    -
    - Connection failed -

    -
    + />
    @@ -204,14 +176,7 @@ exports[` errors renders other_device_already_signed_in 1`] = >
    -

    -
    - Connection failed -

    -
    + />
    @@ -253,14 +218,7 @@ exports[` errors renders other_device_not_signed_in 1`] = ` >
    -

    -
    - Connection failed -

    -
    + />
    @@ -302,14 +260,7 @@ exports[` errors renders rate_limited 1`] = ` >
    -

    -
    - Connection failed -

    -
    + />
    @@ -351,14 +302,7 @@ exports[` errors renders unknown 1`] = ` >
    -

    -
    - Connection failed -

    -
    + />
    @@ -400,14 +344,7 @@ exports[` errors renders unsupported_algorithm 1`] = ` >
    -

    -
    - Connection failed -

    -
    + />
    @@ -449,14 +386,7 @@ exports[` errors renders unsupported_transport 1`] = ` >
    -

    -
    - Connection failed -

    -
    + />
    @@ -498,14 +428,7 @@ exports[` errors renders user_cancelled 1`] = ` >
    -

    -
    - Connection failed -

    -
    + />
    @@ -547,14 +470,7 @@ exports[` errors renders user_declined 1`] = ` >
    -

    -
    - Connection failed -

    -
    + />
    @@ -598,35 +514,32 @@ exports[` renders QR code 1`] = ` class="" >
    -
    +
    +
    +
    +
    + Sessions + / + Link new device +
    -

    - Sign in with QR code -

    -

    - Scan the QR code below with your device that's signed out. -

    -
      -
    1. - Start at the sign in screen -
    2. -
    3. - Select 'Scan QR code' -
    4. -
    5. - Review and approve the sign in -
    6. -
    +

    + Scan the QR code with another device +

    @@ -640,6 +553,26 @@ exports[` renders QR code 1`] = ` />
    +
      +
    1. + Open Element on your other device +
    2. +
    3. + + Select " + + Scan QR code + + " + +
    4. +
    5. + Point the camera at the QR code shown here +
    6. +
    7. + Follow the remaining instructions to verify your other device +
    8. +
    renders code when connected 1`] = ` >
    -

    -
    - Devices connected -

    -
    + />
    @@ -720,17 +646,25 @@ exports[` renders spinner while connecting 1`] = ` class="" >
    -
    +
    +
    +
    +
    + Sessions + / + Link new device +
    -

    - -

    renders spinner while loading 1`] = ` class="" >
    -
    +
    +
    +
    +
    + Sessions + / + Link new device +
    -

    - -

    renders spinner while signing in 1`] = ` class="" >
    -
    +
    +
    +
    +
    + Sessions + / + Link new device +
    -

    - -

    renders spinner while verifying 1`] = ` class="mx_LoginWithQR_centreTitle" >
    -
    +
    +
    +
    +
    + Sessions + / + Link new device +
    -

    - Success -

    renders spinner whilst QR generating 1`] = ` class="" >
    -
    +
    +
    +
    +
    + Sessions + / + Link new device +
    -

    - Sign in with QR code -

    should render panel get_login_token + .well-know

    - Sign in with QR code + Link new device

    should render panel get_login_token + .well-know

    - You can use this device to sign in a new device with a QR code. You will need to scan the QR code shown on this device with your device that's signed out. + Use a QR code to sign in to another device and set up secure messaging.

    +
    Show QR code
    @@ -55,7 +59,7 @@ exports[` should render panel get_login_token + MSC3886 1`

    - Sign in with QR code + Link new device

    should render panel get_login_token + MSC3886 1`

    - You can use this device to sign in a new device with a QR code. You will need to scan the QR code shown on this device with your device that's signed out. + Use a QR code to sign in to another device and set up secure messaging.

    +
    Show QR code
    diff --git a/test/components/views/settings/tabs/user/SessionManagerTab-test.tsx b/test/components/views/settings/tabs/user/SessionManagerTab-test.tsx index 9beceb95efb..60b6bade4da 100644 --- a/test/components/views/settings/tabs/user/SessionManagerTab-test.tsx +++ b/test/components/views/settings/tabs/user/SessionManagerTab-test.tsx @@ -1534,7 +1534,8 @@ describe("", () => { // wait for versions call to settle await flushPromises(); - expect(getByText("Sign in with QR code")).toBeTruthy(); + expect(getByText("Link new device")).toBeTruthy(); + expect(getByText("Show QR code")).toBeTruthy(); }); it("enters qr code login section when show QR code button clicked", async () => { From 11912a0da003531499fcbba9ef6b6c4aa2715bf5 Mon Sep 17 00:00:00 2001 From: ElementRobot Date: Mon, 25 Mar 2024 06:22:46 +0000 Subject: [PATCH 059/235] [create-pull-request] automated change (#12366) Co-authored-by: github-merge-queue --- src/i18n/strings/cs.json | 13 ------------- src/i18n/strings/de_DE.json | 13 ------------- src/i18n/strings/el.json | 10 ---------- src/i18n/strings/eo.json | 8 -------- src/i18n/strings/es.json | 13 ------------- src/i18n/strings/et.json | 13 ------------- src/i18n/strings/fa.json | 8 -------- src/i18n/strings/fi.json | 12 ------------ src/i18n/strings/fr.json | 13 ------------- src/i18n/strings/gl.json | 10 ---------- src/i18n/strings/he.json | 8 -------- src/i18n/strings/hu.json | 13 ------------- src/i18n/strings/id.json | 13 ------------- src/i18n/strings/is.json | 8 -------- src/i18n/strings/it.json | 13 ------------- src/i18n/strings/ja.json | 13 ------------- src/i18n/strings/lo.json | 10 ---------- src/i18n/strings/lt.json | 8 -------- src/i18n/strings/nl.json | 13 ------------- src/i18n/strings/pl.json | 13 ------------- src/i18n/strings/pt_BR.json | 8 -------- src/i18n/strings/ru.json | 13 ------------- src/i18n/strings/sk.json | 13 ------------- src/i18n/strings/sq.json | 13 ------------- src/i18n/strings/sv.json | 13 ------------- src/i18n/strings/uk.json | 13 ------------- src/i18n/strings/vi.json | 8 -------- src/i18n/strings/zh_Hans.json | 11 ----------- src/i18n/strings/zh_Hant.json | 13 ------------- 29 files changed, 330 deletions(-) diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index 235bc8e28d5..eacf7b6762b 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -249,7 +249,6 @@ "completing_setup": "Dokončování nastavení nového zařízení", "confirm_code_match": "Zkontrolujte, zda se níže uvedený kód shoduje s vaším dalším zařízením:", "connecting": "Připojování…", - "devices_connected": "Zařízení byla propojena", "error_device_already_signed_in": "Druhé zařízení je již přihlášeno.", "error_device_not_signed_in": "Druhé zařízení není přihlášeno.", "error_device_unsupported": "Propojení s tímto zařízením není podporováno.", @@ -260,12 +259,10 @@ "error_request_cancelled": "Požadavek byl zrušen.", "error_request_declined": "Požadavek byl na druhém zařízení odmítnut.", "error_unexpected": "Došlo k neočekávané chybě.", - "review_and_approve": "Zkontrolovat a schválit přihlášení", "scan_code_instruction": "Níže uvedený QR kód naskenujte pomocí přihlašovaného zařízení.", "scan_qr_code": "Skenovat QR kód", "select_qr_code": "Vybrat '%(scanQRCode)s'", "sign_in_new_device": "Přihlásit nové zařízení", - "start_at_sign_in_screen": "Začněte na přihlašovací obrazovce", "waiting_for_device": "Čekání na přihlášení zařízení" }, "register_action": "Vytvořit účet", @@ -742,7 +739,6 @@ "notification_state": "Stav oznámení je %(notificationState)s", "notifications_debug": "Ladění oznámení", "number_of_users": "Počet uživatelů", - "observe_only": "Pouze sledovat", "original_event_source": "Původní zdroj události", "phase": "Fáze", "phase_cancelled": "Zrušeno", @@ -750,7 +746,6 @@ "phase_requested": "Požadované", "phase_started": "Zahájeno", "phase_transaction": "Transakce", - "requester": "Žadatel", "room_encrypted": "Místnost je šifrovaná ✅", "room_id": "ID místnosti: %(roomId)s", "room_not_encrypted": "Místnost není šifrovaná 🚨", @@ -1512,14 +1507,6 @@ "view_rules": "Zobrazit pravidla" }, "language_dropdown_label": "Menu jazyků", - "lazy_loading": { - "disabled_action": "Smazat paměť a sesynchronizovat", - "disabled_description1": "Na adrese %(host)s už jste použili %(brand)s se zapnutou volbou načítání členů místností až při prvním zobrazení. V této verzi je načítání členů až při prvním zobrazení vypnuté. Protože je s tímto nastavením lokální vyrovnávací paměť nekompatibilní, %(brand)s potřebuje znovu synchronizovat údaje z vašeho účtu.", - "disabled_description2": "Je-li jiná verze programu %(brand)s stále otevřená na jiné kartě, tak ji prosím zavřete, neboť užívání programu %(brand)s stejným hostitelem se zpožděným nahráváním současně povoleným i zakázaným bude působit problémy.", - "disabled_title": "Nekompatibilní lokální vyrovnávací paměť", - "resync_description": "%(brand)s teď používá 3-5× méně paměti, protože si informace o ostatních uživatelích načítá až když je potřebuje. Prosím počkejte na dokončení synchronizace se serverem!", - "resync_title": "Aktualizujeme %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Jste zde jediná osoba. Pokud odejdete, nikdo se v budoucnu nebude moci připojit, včetně vás.", "leave_room_question": "Opravdu chcete opustit místnost '%(roomName)s'?", diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 66cd83d57c2..3fc5e490351 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -245,7 +245,6 @@ "completing_setup": "Schließe Anmeldung deines neuen Gerätes ab", "confirm_code_match": "Überprüfe, dass der unten angezeigte Code mit deinem anderen Gerät übereinstimmt:", "connecting": "Verbinde …", - "devices_connected": "Geräte verbunden", "error_device_already_signed_in": "Das andere Gerät ist bereits angemeldet.", "error_device_not_signed_in": "Das andere Gerät ist nicht angemeldet.", "error_device_unsupported": "Die Verbindung mit diesem Gerät wird nicht unterstützt.", @@ -256,12 +255,10 @@ "error_request_cancelled": "Die Anfrage wurde abgebrochen.", "error_request_declined": "Die Anfrage wurde auf dem anderen Gerät abgelehnt.", "error_unexpected": "Ein unerwarteter Fehler ist aufgetreten.", - "review_and_approve": "Überprüfe und genehmige die Anmeldung", "scan_code_instruction": "Lese den folgenden QR-Code mit deinem nicht angemeldeten Gerät ein.", "scan_qr_code": "QR-Code einlesen", "select_qr_code": "Wähle „%(scanQRCode)s“", "sign_in_new_device": "Neues Gerät anmelden", - "start_at_sign_in_screen": "Beginne auf dem Anmeldebildschirm", "waiting_for_device": "Warte auf Anmeldung des Gerätes" }, "register_action": "Konto erstellen", @@ -737,7 +734,6 @@ "notification_state": "Benachrichtigungsstand ist %(notificationState)s", "notifications_debug": "Debug-Modus für Benachrichtigungen", "number_of_users": "Benutzeranzahl", - "observe_only": "Nur beobachten", "original_event_source": "Ursprüngliche Rohdaten", "phase": "Phase", "phase_cancelled": "Abgebrochen", @@ -745,7 +741,6 @@ "phase_requested": "Angefragt", "phase_started": "Gestartet", "phase_transaction": "Transaktion", - "requester": "Anforderer", "room_encrypted": "Raum ist verschlüsselt ✅", "room_id": "Raum-ID: %(roomId)s", "room_not_encrypted": "Raum ist nicht verschlüsselt 🚨", @@ -1495,14 +1490,6 @@ "view_rules": "Regeln öffnen" }, "language_dropdown_label": "Sprachauswahl", - "lazy_loading": { - "disabled_action": "Zwischenspeicher löschen und erneut synchronisieren", - "disabled_description1": "Du hast zuvor %(brand)s auf %(host)s ohne das verzögerte Laden von Mitgliedern genutzt. In dieser Version war das verzögerte Laden deaktiviert. Da die lokal zwischengespeicherten Daten zwischen diesen Einstellungen nicht kompatibel sind, muss %(brand)s dein Konto neu synchronisieren.", - "disabled_description2": "Wenn %(brand)s mit der alten Version in einem anderen Tab geöffnet ist, schließe dies bitte, da das parallele Nutzen von %(brand)s auf demselben Host mit aktivierten und deaktivierten verzögertem Laden, Probleme verursachen wird.", - "disabled_title": "Inkompatibler lokaler Zwischenspeicher", - "resync_description": "%(brand)s benutzt nun 3 bis 5 Mal weniger Arbeitsspeicher, indem Informationen über andere Nutzer erst bei Bedarf geladen werden. Bitte warte, während die Daten erneut mit dem Server abgeglichen werden!", - "resync_title": "Aktualisiere %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Du bist die einzige Person im Raum. Sobald du ihn verlässt, wird niemand mehr hineingelangen, auch du nicht.", "leave_room_question": "Bist du sicher, dass du den Raum „%(roomName)s“ verlassen möchtest?", diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index baf8bd53d9a..bd9f43db301 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -606,7 +606,6 @@ "methods": "Μέθοδοι", "no_verification_requests_found": "Δεν βρέθηκαν αιτήματα επαλήθευσης", "number_of_users": "Αριθμός χρηστών", - "observe_only": "Παρατηρήστε μόνο", "original_event_source": "Αρχική πηγή συμβάντος", "phase": "Φάση", "phase_cancelled": "Ακυρώθηκαν", @@ -614,7 +613,6 @@ "phase_requested": "Απαιτείται", "phase_started": "Ξεκίνησαν", "phase_transaction": "Συναλλαγή", - "requester": "Aιτών", "room_id": "ID δωματίου: %(roomId)s", "save_setting_values": "Αποθήκευση τιμών ρύθμισης", "send_custom_account_data_event": "Αποστολή προσαρμοσμένου συμβάντος δεδομένων λογαριασμού", @@ -1215,14 +1213,6 @@ "view_rules": "Προβολή κανόνων" }, "language_dropdown_label": "Επιλογή Γλώσσας", - "lazy_loading": { - "disabled_action": "Εκκαθάριση προσωρινής μνήμης και επανασυγχρονισμός", - "disabled_description1": "Έχετε χρησιμοποιήσει στο παρελθόν %(brand)s στον %(host)s με ενεργοποιημένη την αργή φόρτωση μελών. Σε αυτήν την έκδοση η αργή φόρτωση είναι απενεργοποιημένη. Η τοπική κρυφή μνήμη δεν είναι συμβατή μεταξύ αυτών των δύο ρυθμίσεων και έτσι το %(brand)s πρέπει να συγχρονίσει ξανά τον λογαριασμό σας.", - "disabled_description2": "Εάν η άλλη έκδοση του %(brand)s εξακολουθεί να είναι ανοιχτή σε άλλη καρτέλα, κλείστε την, καθώς η χρήση του %(brand)s στον ίδιο κεντρικό υπολογιστή με ενεργοποιημένη και απενεργοποιημένη την αργή φόρτωση ταυτόχρονα , θα προκαλέσει προβλήματα.", - "disabled_title": "Μη συμβατή τοπική κρυφή μνήμη", - "resync_description": "Το %(brand)s χρησιμοποιεί πλέον 3-5 φορές λιγότερη μνήμη, φορτώνοντας πληροφορίες για άλλους χρήστες μόνο όταν χρειάζεται. Περιμένετε όσο γίνεται εκ νέου συγχρονισμός με τον διακομιστή!", - "resync_title": "Ενημέρωση %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Είστε το μόνο άτομο εδώ μέσα. Εάν φύγετε, κανείς δε θα μπορεί αργότερα να συμμετάσχει, συμπεριλαμβανομένου και εσάς.", "leave_room_question": "Είστε σίγουροι ότι θέλετε να αποχωρήσετε από το δωμάτιο '%(roomName)s';", diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 0d518db05ea..7845e4bfb64 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -1109,14 +1109,6 @@ "view_rules": "Montri regulojn" }, "language_dropdown_label": "Lingva falmenuo", - "lazy_loading": { - "disabled_action": "Vakigi kaŝmemoron kaj respeguli", - "disabled_description1": "Vi antaŭe uzis %(brand)s-on je %(host)s kun ŝaltita malfrua enlegado de anoj. En ĉi tiu versio, malfrua enlegado estas malŝaltita. Ĉar la loka kaŝmemoro de ambaŭ versioj ne akordas, %(brand)s bezonas respeguli vian konton.", - "disabled_description2": "Se la alia versio de %(brand)s ankoraŭ estas malfermita en alia langeto, bonvolu tiun fermi, ĉar uzado de %(brand)s je la sama gastiganto, kun malfrua enlegado samtempe ŝaltita kaj malŝaltita, kaŭzos problemojn.", - "disabled_title": "Neakorda loka kaŝmemoro", - "resync_description": "%(brand)s nun uzas 3–5-oble malpli da memoro, ĉar ĝi enlegas informojn pri aliaj uzantoj nur tiam, kiam ĝi bezonas. Bonvolu atendi ĝis ni respegulos la servilon!", - "resync_title": "Ĝisdatigante %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Vi estas la nura persono tie ĉi. Se vi foriros, neniu alia plu povos aliĝi, inkluzive vin mem.", "leave_room_question": "Ĉu vi certe volas forlasi la ĉambron '%(roomName)s'?", diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 78ca3a655b5..936ecebb6f5 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -233,7 +233,6 @@ "completing_setup": "Terminando de configurar tu nuevo dispositivo", "confirm_code_match": "Comprueba que el siguiente código también aparece en el otro dispositivo:", "connecting": "Conectando…", - "devices_connected": "Dispositivos conectados", "error_device_already_signed_in": "El otro dispositivo ya tiene una sesión iniciada.", "error_device_not_signed_in": "El otro dispositivo no tiene una sesión iniciada.", "error_homeserver_lacks_support": "Tu servidor base no es compatible con el inicio de sesión en otro dispositivo.", @@ -243,12 +242,10 @@ "error_request_cancelled": "La solicitud ha sido cancelada.", "error_request_declined": "El otro dispositivo ha rechazado la solicitud.", "error_unexpected": "Ha ocurrido un error inesperado.", - "review_and_approve": "Revisar y aprobar inicio de sesión", "scan_code_instruction": "Escanea el siguiente código QR con tu dispositivo.", "scan_qr_code": "Escanear código QR", "select_qr_code": "Selecciona «%(scanQRCode)s»", "sign_in_new_device": "Conectar nuevo dispositivo", - "start_at_sign_in_screen": "Ve a la pantalla de inicio de sesión", "waiting_for_device": "Esperando a que el dispositivo inicie sesión" }, "register_action": "Crear cuenta", @@ -692,7 +689,6 @@ "methods": "Métodos", "no_verification_requests_found": "Ninguna solicitud de verificación encontrada", "number_of_users": "Número de usuarios", - "observe_only": "Solo observar", "original_event_source": "Fuente original del evento", "phase": "Fase", "phase_cancelled": "Cancelado", @@ -700,7 +696,6 @@ "phase_requested": "Solicitado", "phase_started": "Empezado", "phase_transaction": "Transacción", - "requester": "Solicitante", "room_encrypted": "La sala está cifrada ✅", "room_id": "ID de la sala: %(roomId)s", "room_not_encrypted": "La sala no está cifrada 🚨", @@ -1383,14 +1378,6 @@ "view_rules": "Ver reglas" }, "language_dropdown_label": "Lista selección de idiomas", - "lazy_loading": { - "disabled_action": "Limpiar la caché y resincronizar", - "disabled_description1": "Has usado %(brand)s anteriormente en %(host)s con carga diferida de usuarios activada. En esta versión la carga diferida está desactivada. Como el caché local no es compatible entre estas dos configuraciones, %(brand)s tiene que resincronizar tu cuenta.", - "disabled_description2": "Si la otra versión de %(brand)s esta todavía abierta en otra pestaña, por favor, ciérrala, ya que usar %(brand)s en el mismo host con la opción de carga diferida activada y desactivada simultáneamente causará problemas.", - "disabled_title": "Caché local incompatible", - "resync_description": "%(brand)s ahora utiliza de 3 a 5 veces menos memoria, porque solo carga información sobre otros usuarios cuando es necesario. Por favor, ¡aguarda mientras volvemos a sincronizar con el servidor!", - "resync_title": "Actualizando %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Eres la única persona aquí. Si te vas, no podrá unirse nadie en el futuro, incluyéndote a ti.", "leave_room_question": "¿Salir de la sala «%(roomName)s»?", diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index 1e7cdab6e4e..cdfe16cc661 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -249,7 +249,6 @@ "completing_setup": "Lõpetame uue seadme seadistamise", "confirm_code_match": "Kontrolli, et järgnev kood klapib teises seadmes kuvatava koodiga:", "connecting": "Kõne on ühendamisel…", - "devices_connected": "Seadmed on ühendatud", "error_device_already_signed_in": "Teine seade on juba võrku loginud.", "error_device_not_signed_in": "Teine seade ei ole võrku loginud.", "error_device_unsupported": "Sidumine selle seadmega ei ole toetatud.", @@ -260,12 +259,10 @@ "error_request_cancelled": "Päring katkestati.", "error_request_declined": "Teine seade lükkas päringu tagasi.", "error_unexpected": "Tekkis teadmata viga.", - "review_and_approve": "Vaata üle ja kinnita sisselogimine Matrixi'i võrku", "scan_code_instruction": "Loe QR-koodi seadmega, kus sa oled Matrix'i võrgust välja loginud.", "scan_qr_code": "Loe QR-koodi", "select_qr_code": "Vali „%(scanQRCode)s“", "sign_in_new_device": "Logi sisse uus seade", - "start_at_sign_in_screen": "Alusta sisselogimisvaatest", "waiting_for_device": "Ootame, et teine seade logiks võrku" }, "register_action": "Loo konto", @@ -741,7 +738,6 @@ "notification_state": "Teavituste olek: %(notificationState)s", "notifications_debug": "Teavituste silumine", "number_of_users": "Kasutajate arv", - "observe_only": "Ainult vaatle", "original_event_source": "Sündmuse töötlemata lähtekood", "phase": "Faas", "phase_cancelled": "Katkestatud", @@ -749,7 +745,6 @@ "phase_requested": "Päring tehtud", "phase_started": "Alustatud", "phase_transaction": "Transaktsioon", - "requester": "Päringu tegija", "room_encrypted": "Jututuba on krüptitud ✅", "room_id": "Jututoa tunnus: %(roomId)s", "room_not_encrypted": "Jututuba on krüptimata 🚨", @@ -1501,14 +1496,6 @@ "view_rules": "Näita reegleid" }, "language_dropdown_label": "Keelevalik", - "lazy_loading": { - "disabled_action": "Tühjenda puhver ja sünkroniseeri andmed uuesti", - "disabled_description1": "Oled varem kasutanud %(brand)s serveriga %(host)s ja lubanud andmete laisa laadimise. Selles versioonis on laisk laadimine keelatud. Kuna kohalik vahemälu nende kahe seadistuse vahel ei ühildu, peab %(brand)s sinu konto uuesti sünkroonima.", - "disabled_description2": "Kui %(brand)s teine versioon on mõnel teisel vahekaardil endiselt avatud, palun sulge see. %(brand)s kasutamine samal serveril põhjustab vigu olukorras, kus laisk laadimine on samal ajal lubatud ja keelatud.", - "disabled_title": "Kohalikud andmepuhvrid ei ühildu", - "resync_description": "%(brand)s kasutab varasemaga võrreldes 3-5 korda vähem mälu, sest laadib teavet kasutajate kohta vaid siis, kui vaja. Palun oota hetke, kuni sünkroniseerime andmeid serveriga!", - "resync_title": "Uuendan rakendust %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Sa oled siin viimane osaleja. Kui sa nüüd lahkud, siis mitte keegi, kaasa arvatud sa ise, ei saa hiljem enam liituda.", "leave_room_question": "Kas oled kindel, et soovid lahkuda jututoast „%(roomName)s“?", diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json index cfdbb422010..aad57928ed4 100644 --- a/src/i18n/strings/fa.json +++ b/src/i18n/strings/fa.json @@ -1025,14 +1025,6 @@ "view_rules": "مشاهده قوانین" }, "language_dropdown_label": "منو زبان", - "lazy_loading": { - "disabled_action": "پاک کردن حافظه‌ی کش و همگام سازی مجدد", - "disabled_description1": "شما از %(brand)s بر روی %(host)s با قابلیت بارگیری اعضا به شکل تکه‌تکه استفاده می‌کنید. در این نسخه قابلیت بارگیری تکه‌تکه غیرفعال است. از آن‌جایی که حافظه‌ی کش مورد استفاده برای این دو پیکربندی با هم سازگار نیست، %(brand)s نیاز به همگام‌سازی مجدد حساب کاربری شما دارد.", - "disabled_description2": "اگر نسخه دیگری از %(brand)s هنوز در تب‌های دیگر باز است، لطفاً آن را ببندید زیرا استفاده از %(brand)s با قابلیت بارگیری تکه‌تکه‌ی فعال روی یکی و غیرفعال روی دیگری، باعث ایجاد مشکل می شود.", - "disabled_title": "حافظه‌ی محلی ناسازگار", - "resync_description": "هم‌اکنون %(brand)s از طریق بارگیری و نمایش اطلاعات کاربران تنها در زمان‌هایی که نیاز است، حدود ۳ تا ۵ مرتبه حافظه‌ی کمتری استفاده می‌کند. لطفا تا همگام‌سازی با سرور منتظر بمانید!", - "resync_title": "به‌روزرسانی %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "شما در این‌جا تنها هستید. اگر اینجا را ترک کنید، دیگر هیچ‌کس حتی خودتان امکان پیوستن مجدد را نخواهید داشت.", "leave_room_question": "آیا مطمئن هستید که می خواهید از اتاق '2%(roomName)s' خارج شوید؟", diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 0f8b9b5029d..21535ba92b4 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -230,7 +230,6 @@ "phone_optional_label": "Puhelin (valinnainen)", "qr_code_login": { "connecting": "Yhdistetään…", - "devices_connected": "Yhdistetyt laitteet", "error_device_already_signed_in": "Toinen laite on jo sisäänkirjautunut.", "error_device_not_signed_in": "Toinen laite ei ole sisäänkirjautunut.", "error_device_unsupported": "Tämän laitteen kanssa linkittäminen ei ole tuettu.", @@ -240,7 +239,6 @@ "error_request_cancelled": "Pyyntö peruttiin.", "error_request_declined": "Pyyntö hylättiin toiselta laitteelta.", "error_unexpected": "Tapahtui odottamaton virhe.", - "review_and_approve": "Katselmoi ja hyväksy sisäänkirjautuminen", "sign_in_new_device": "Kirjaa sisään uusi laite", "waiting_for_device": "Odotetaan laitteen sisäänkirjautumista" }, @@ -679,7 +677,6 @@ "no_receipt_found": "Kuittausta ei löytynyt", "no_verification_requests_found": "Vahvistuspyyntöjä ei löytynyt", "number_of_users": "Käyttäjämäärä", - "observe_only": "Tarkkaile ainoastaan", "original_event_source": "Alkuperäinen tapahtumalähde", "phase": "Vaihe", "phase_cancelled": "Peruttu", @@ -687,7 +684,6 @@ "phase_requested": "Pyydetty", "phase_started": "Käynnistetty", "phase_transaction": "Transaktio", - "requester": "Pyytäjä", "room_id": "Huoneen ID-tunniste: %(roomId)s", "room_notifications_sender": "Lähettäjä: ", "save_setting_values": "Tallenna asetusarvot", @@ -1309,14 +1305,6 @@ "view_rules": "Näytä säännöt" }, "language_dropdown_label": "Kielipudotusvalikko", - "lazy_loading": { - "disabled_action": "Tyhjennä välimuisti ja hae tiedot uudelleen", - "disabled_description1": "Olet aikaisemmin käytttänyt %(brand)sia laitteella %(host)s, jossa oli jäsenten laiska lataus käytössä. Tässä versiossa laiska lataus on pois käytöstä. Koska paikallinen välimuisti ei ole yhteensopiva näiden kahden asetuksen välillä, %(brand)sin täytyy synkronoida tilisi tiedot uudelleen.", - "disabled_description2": "Jos sinulla on toinen %(brand)sin versio edelleen auki toisessa välilehdessä, suljethan sen, koska %(brand)sin käyttäminen samalla laitteella niin, että laiska lataus on toisessa välilehdessä käytössä ja toisessa ei, aiheuttaa ongelmia.", - "disabled_title": "Yhteensopimaton paikallinen välimuisti", - "resync_description": "%(brand)s käyttää nyt 3-5 kertaa vähemmän muistia, koska se lataa tietoa muista käyttäjistä vain tarvittaessa. Odotathan, kun haemme tarvittavat tiedot palvelimelta!", - "resync_title": "Päivitetään %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Olet ainoa henkilö täällä. Jos lähdet, kukaan ei voi liittyä tulevaisuudessa, et myöskään sinä.", "leave_room_question": "Oletko varma että haluat poistua huoneesta '%(roomName)s'?", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index d7c7f7c2da0..6f3a1214022 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -249,7 +249,6 @@ "completing_setup": "Fin de la configuration de votre nouvel appareil", "confirm_code_match": "Vérifiez que le code ci-dessous correspond à celui sur votre autre appareil :", "connecting": "Connexion…", - "devices_connected": "Appareils connectés", "error_device_already_signed_in": "L’autre appareil est déjà connecté.", "error_device_not_signed_in": "L’autre appareil n’est pas connecté.", "error_device_unsupported": "L’appairage avec cet appareil n’est pas pris en charge.", @@ -260,12 +259,10 @@ "error_request_cancelled": "La demande a été annulée.", "error_request_declined": "La requête a été refusée sur l’autre appareil.", "error_unexpected": "Une erreur inattendue s’est produite.", - "review_and_approve": "Vérifier et autoriser la connexion", "scan_code_instruction": "Scannez le QR code ci-dessous avec l’appareil qui n’est pas connecté.", "scan_qr_code": "Scanner le QR code", "select_qr_code": "Sélectionnez « %(scanQRCode)s »", "sign_in_new_device": "Connecter le nouvel appareil", - "start_at_sign_in_screen": "Démarrez à l’écran de connexion", "waiting_for_device": "En attente de connexion de l’appareil" }, "register_action": "Créer un compte", @@ -742,7 +739,6 @@ "notification_state": "L’état des notifications est %(notificationState)s", "notifications_debug": "Débogage des notifications", "number_of_users": "Nombre d’utilisateurs", - "observe_only": "Observer uniquement", "original_event_source": "Évènement source original", "phase": "Phase", "phase_cancelled": "Annulé", @@ -750,7 +746,6 @@ "phase_requested": "Envoyé", "phase_started": "Démarré", "phase_transaction": "Transaction", - "requester": "Demandeur", "room_encrypted": "Le salon est chiffré ✅", "room_id": "Identifiant du salon : %(roomId)s", "room_not_encrypted": "Le salon n’est pas chiffré 🚨", @@ -1511,14 +1506,6 @@ "view_rules": "Voir les règles" }, "language_dropdown_label": "Sélection de la langue", - "lazy_loading": { - "disabled_action": "Vider le cache et resynchroniser", - "disabled_description1": "Vous avez utilisé auparavant %(brand)s sur %(host)s avec le chargement différé activé. Dans cette version le chargement différé est désactivé. Comme le cache local n’est pas compatible entre ces deux réglages, %(brand)s doit resynchroniser votre compte.", - "disabled_description2": "Si l’autre version de %(brand)s est encore ouverte dans un autre onglet, merci de le fermer car l’utilisation de %(brand)s sur le même hôte avec le chargement différé activé et désactivé à la fois causera des problèmes.", - "disabled_title": "Cache local incompatible", - "resync_description": "%(brand)s utilise maintenant 3 à 5 fois moins de mémoire, en ne chargeant les informations des autres utilisateurs que quand elles sont nécessaires. Veuillez patienter pendant que l’on se resynchronise avec le serveur !", - "resync_title": "Mise à jour de %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Vous êtes la seule personne ici. Si vous partez, plus personne ne pourra rejoindre cette conversation, y compris vous.", "leave_room_question": "Voulez-vous vraiment quitter le salon « %(roomName)s » ?", diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index a1674da80b8..e58b0ea5adb 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -619,7 +619,6 @@ "methods": "Métodos", "no_verification_requests_found": "Non se atopan solicitudes de verificación", "number_of_users": "Número de usuarias", - "observe_only": "Só observar", "original_event_source": "Fonte orixinal do evento", "phase": "Fase", "phase_cancelled": "Cancelado", @@ -627,7 +626,6 @@ "phase_requested": "Solicitado", "phase_started": "Iniciado", "phase_transaction": "Transacción", - "requester": "Solicitante", "room_id": "ID da sala: %(roomId)s", "save_setting_values": "Gardar valores configurados", "send_custom_account_data_event": "Enviar evento de datos da conta personalizado", @@ -1263,14 +1261,6 @@ "view_rules": "Ver regras" }, "language_dropdown_label": "Selector de idioma", - "lazy_loading": { - "disabled_action": "Baleirar caché e sincronizar", - "disabled_description1": "Anteriormente utilizaches %(brand)s en %(host)s con carga preguiceira de membros. Nesta versión a carga preguiceira está desactivada. Como a caché local non é compatible entre as dúas configuracións, %(brand)s precisa volver a sincronizar a conta.", - "disabled_description2": "Se a outra versión de %(brand)s aínda está aberta noutra lapela, péchaa xa que usar %(brand)s no mesmo servidor con carga preguiceira activada e desactivada ao mesmo tempo causará problemas.", - "disabled_title": "Caché local incompatible", - "resync_description": "%(brand)s utiliza agora entre 3 e 5 veces menos memoria, cargando só información sobre as usuarias cando é preciso. Agarda mentras se sincroniza co servidor!", - "resync_title": "Actualizando %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Es a única persoa aquí. Se saes, ninguén poderá unirse no futuro, incluíndote a ti.", "leave_room_question": "Seguro que desexa saír da sala '%(roomName)s'?", diff --git a/src/i18n/strings/he.json b/src/i18n/strings/he.json index e67efcb256b..3a3c2ad7360 100644 --- a/src/i18n/strings/he.json +++ b/src/i18n/strings/he.json @@ -1057,14 +1057,6 @@ "view_rules": "צפה בכללים" }, "language_dropdown_label": "תפריט שפות", - "lazy_loading": { - "disabled_action": "נקה מטמון וסנכרן מחדש", - "disabled_description1": "השתמשת בעבר ב- %(brand)s ב- %(host)s עם טעינה עצלה של חברים מופעלת. בגרסה זו טעינה עצלה מושבתת. מכיוון שהמטמון המקומי אינו תואם בין שתי ההגדרות הללו, %(brand)s צריך לסנכרן מחדש את חשבונך.", - "disabled_description2": "אם הגרסה האחרת של %(brand)s עדיין פתוחה בכרטיסייה אחרת, אנא סגור אותה כשימוש ב-%(brand)s באותו מארח כאשר טעינה עצלה מופעלת וגם מושבתת בו זמנית תגרום לבעיות.", - "disabled_title": "מטמון מקומי לא תואם", - "resync_description": "%(brand)s משתמש כעת בזכרון פחות פי 3-5, על ידי טעינת מידע רק על משתמשים אחרים בעת הצורך. אנא המתן בזמן שאנחנו מסתנכרנים מחדש עם השרת!", - "resync_title": "מעדכן %(brand)s" - }, "leave_room_dialog": { "leave_room_question": "האם אתה בטוח שברצונך לעזוב את החדר '%(roomName)s'?", "room_rejoin_warning": "חדר זה אינו ציבורי. לא תוכל להצטרף שוב ללא הזמנה." diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index eedb0eb1d61..69988db429f 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -243,7 +243,6 @@ "completing_setup": "Új eszköz beállításának elvégzése", "confirm_code_match": "Ellenőrizze, hogy az alábbi kód megegyezik a másik eszközödön lévővel:", "connecting": "Kapcsolás…", - "devices_connected": "Összekötött eszközök", "error_device_already_signed_in": "A másik eszköz már bejelentkezett.", "error_device_not_signed_in": "A másik eszköz még nincs bejelentkezve.", "error_device_unsupported": "Összekötés ezzel az eszközzel nem támogatott.", @@ -253,12 +252,10 @@ "error_request_cancelled": "A kérés megszakítva.", "error_request_declined": "A kérést elutasították a másik eszközön.", "error_unexpected": "Nemvárt hiba történt.", - "review_and_approve": "Belépés áttekintése és engedélyezés", "scan_code_instruction": "A kijelentkezett eszközzel olvasd be a QR kódot alább.", "scan_qr_code": "QR kód beolvasása", "select_qr_code": "Kiválasztás „%(scanQRCode)s”", "sign_in_new_device": "Új eszköz bejelentkeztetése", - "start_at_sign_in_screen": "Kezdje a bejelentkező képernyőn", "waiting_for_device": "Várakozás a másik eszköz bejelentkezésére" }, "register_action": "Fiók létrehozása", @@ -733,7 +730,6 @@ "notification_state": "Értesítés állapot: %(notificationState)s", "notifications_debug": "Értesítések hibakeresése", "number_of_users": "Felhasználószám", - "observe_only": "Csak megfigyel", "original_event_source": "Eredeti esemény forráskód", "phase": "Fázis", "phase_cancelled": "Megszakítva", @@ -741,7 +737,6 @@ "phase_requested": "Kérve", "phase_started": "Elindult", "phase_transaction": "Tranzakció", - "requester": "Kérelmező", "room_encrypted": "A szoba titkosított ✅", "room_id": "Szoba azon.: %(roomId)s", "room_not_encrypted": "A szoba nincs titkosítva 🚨", @@ -1474,14 +1469,6 @@ "view_rules": "Szabályok megtekintése" }, "language_dropdown_label": "Nyelvválasztó lenyíló menü", - "lazy_loading": { - "disabled_action": "Gyorsítótár törlése és újraszinkronizálás", - "disabled_description1": "Előzőleg a szoba tagság késleltetett betöltésének engedélyével itt használtad a %(brand)sot: %(host)s. Ebben a verzióban viszont a késleltetett betöltés nem engedélyezett. Mivel a két gyorsítótár nem kompatibilis egymással így %(brand)snak újra kell szinkronizálnia a fiókot.", - "disabled_description2": "Ha a másik %(brand)s verzió még fut egy másik fülön, akkor zárja be, mert ha egy gépen használja a %(brand)sot úgy, hogy az egyiken be van kapcsolva a késleltetett betöltés, a másikon pedig ki, akkor problémák adódhatnak.", - "disabled_title": "A helyi gyorsítótár nem kompatibilis ezzel a verzióval", - "resync_description": "Az %(brand)s harmad-ötöd annyi memóriát használ azáltal, hogy csak akkor tölti be a felhasználók információit, amikor az szükséges. Kis türelmet, amíg megtörténik az újbóli szinkronizálás a kiszolgálóval.", - "resync_title": "%(brand)s frissítése" - }, "leave_room_dialog": { "last_person_warning": "Csak ön van itt. Ha kilép, akkor a jövőben senki nem tud majd ide belépni, beleértve önt is.", "leave_room_question": "Biztos, hogy elhagyja a(z) „%(roomName)s” szobát?", diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index e381c83a314..4f942d89da7 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -243,7 +243,6 @@ "completing_setup": "Menyelesaikan penyiapan perangkat baru Anda", "confirm_code_match": "Periksa bahwa kode di bawah cocok dengan perangkat Anda yang lain:", "connecting": "Menghubungkan…", - "devices_connected": "Perangkat terhubung", "error_device_already_signed_in": "Perangkat yang lain sudah masuk.", "error_device_not_signed_in": "Perangkat yang lain belum masuk.", "error_device_unsupported": "Penautan dengan perangkat ini tidak didukung.", @@ -253,12 +252,10 @@ "error_request_cancelled": "Permintaan dibatalkan.", "error_request_declined": "Permintaan ditolak di perangkat yang lain.", "error_unexpected": "Sebuah kesalahan terjadi secara tidak terduga.", - "review_and_approve": "Lihat dan perbolehkan pemasukan", "scan_code_instruction": "Pindai kode QR di bawah dengan perangkat Anda yang sudah keluar dari akun.", "scan_qr_code": "Pindai kode QR", "select_qr_code": "Pilih '%(scanQRCode)s'", "sign_in_new_device": "Masuk perangkat baru", - "start_at_sign_in_screen": "Mulai dari layar masuk", "waiting_for_device": "Menunggu perangkat untuk masuk" }, "register_action": "Buat Akun", @@ -732,7 +729,6 @@ "notification_state": "Keadaan notifikasi adalah %(notificationState)s", "notifications_debug": "Pengawakutuan notifikasi", "number_of_users": "Jumlah pengguna", - "observe_only": "Lihat saja", "original_event_source": "Sumber peristiwa asli", "phase": "Masa", "phase_cancelled": "Dibatalkan", @@ -740,7 +736,6 @@ "phase_requested": "Diminta", "phase_started": "Dimulai", "phase_transaction": "Transaksi", - "requester": "Peminta", "room_encrypted": "Ruangan terenkripsi ✅", "room_id": "ID ruangan: %(roomId)s", "room_not_encrypted": "Ruangan tidak terenkripsi 🚨", @@ -1482,14 +1477,6 @@ "view_rules": "Tampilkan aturan" }, "language_dropdown_label": "Dropdown Bahasa", - "lazy_loading": { - "disabled_action": "Hapus cache dan sinkron ulang", - "disabled_description1": "Anda sebelumnya menggunakan %(brand)s di %(host)s dengan pemuatan malas pengguna diaktifkan. Di versi ini pemuatan malas dinonaktifkan. Karena cache lokal tidak kompatibel antara dua pengaturan ini, %(brand)s harus mengsinkronisasi ulang akun Anda.", - "disabled_description2": "Jika versi %(brand)s yang lain masih terbuka di tab yang lain, mohon menutupnya karena menggunakan %(brand)s di host yang sama dengan pemuatan malas diaktifkan dan dinonaktifkan secara bersamaan akan mengakibatkan masalah.", - "disabled_title": "Cache lokal tidak kompatibel", - "resync_description": "%(brand)s sekarang menggunakan memori 3-5x kecil dari sebelumnya dengan hanya memuat informasi tentang pengguna lain jika dibutuhkan. Mohon tunggu selagi kita mengsinkronisasi ulang dengan servernya!", - "resync_title": "Memperbarui %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Anda adalah satu-satunya di sini. Jika Anda keluar, tidak ada siapa saja dapat bergabung di masa mendatang, termasuk Anda.", "leave_room_question": "Anda yakin ingin meninggalkan ruangan '%(roomName)s'?", diff --git a/src/i18n/strings/is.json b/src/i18n/strings/is.json index e49d7b82ab5..8c8122b30ba 100644 --- a/src/i18n/strings/is.json +++ b/src/i18n/strings/is.json @@ -219,7 +219,6 @@ "phone_optional_label": "Sími (valfrjálst)", "qr_code_login": { "error_invalid_scanned_code": "Skannaði kóðinn er ógildur.", - "review_and_approve": "Yfirfarðu og samþykktu innskráninguna", "sign_in_new_device": "Skrá inn nýtt tæki", "waiting_for_device": "Bíð eftir að tækið skráist inn" }, @@ -630,14 +629,12 @@ "methods": "Aðferðir", "no_verification_requests_found": "Engar staðfestingarbeiðnir fundust", "number_of_users": "Fjöldi notenda", - "observe_only": "Aðeins fylgjast með", "phase": "Fasi", "phase_cancelled": "Hætt við", "phase_ready": "Tilbúið", "phase_requested": "Umbeðið", "phase_started": "Hafið", "phase_transaction": "Færsluaðgerð", - "requester": "Beiðandi", "room_id": "Auðkenni spjallrásar: %(roomId)s", "save_setting_values": "Vista gildi valkosta", "send_custom_state_event": "Senda sérsniðinn stöðuatburð", @@ -1213,11 +1210,6 @@ "view_rules": "Skoða reglur" }, "language_dropdown_label": "Fellilisti tungumála", - "lazy_loading": { - "disabled_action": "Hreinsa skyndiminni og endursamstilla", - "disabled_title": "Ósamhæft staðvært skyndiminni", - "resync_title": "Uppfæri %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Þú ert eini eintaklingurinn hérna. Ef þú ferð út, mun enginn framar geta tekið þátt, að þér meðtöldum.", "leave_room_question": "Ertu viss um að þú viljir yfirgefa spjallrásina '%(roomName)s'?", diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 9abc63b1452..46085e10504 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -249,7 +249,6 @@ "completing_setup": "Completamento configurazione nuovo dispositivo", "confirm_code_match": "Controlla che il codice sottostante corrisponda nell'altro dispositivo:", "connecting": "In connessione…", - "devices_connected": "Dispositivo connesso", "error_device_already_signed_in": "L'altro dispositivo ha già fatto l'accesso.", "error_device_not_signed_in": "L'altro dispositivo non ha fatto l'accesso.", "error_device_unsupported": "Il collegamento con questo dispositivo non è supportato.", @@ -260,12 +259,10 @@ "error_request_cancelled": "La richiesta è stata annullata.", "error_request_declined": "La richiesta è stata negata sull'altro dispositivo.", "error_unexpected": "Si è verificato un errore imprevisto.", - "review_and_approve": "Verifica e approva l'accesso", "scan_code_instruction": "Scansiona il codice QR sottostante con il dispositivo che è disconnesso.", "scan_qr_code": "Scansiona codice QR", "select_qr_code": "Seleziona '%(scanQRCode)s'", "sign_in_new_device": "Accedi nel nuovo dispositivo", - "start_at_sign_in_screen": "Inizia nella schermata di accesso", "waiting_for_device": "In attesa che il dispositivo acceda" }, "register_action": "Crea account", @@ -742,7 +739,6 @@ "notification_state": "Lo stato di notifica è %(notificationState)s", "notifications_debug": "Debug notifiche", "number_of_users": "Numero di utenti", - "observe_only": "Osserva solo", "original_event_source": "Sorgente dell'evento originale", "phase": "Fase", "phase_cancelled": "Annullato", @@ -750,7 +746,6 @@ "phase_requested": "Richiesto", "phase_started": "Iniziato", "phase_transaction": "Transazione", - "requester": "Richiedente", "room_encrypted": "La stanza è crittografata ✅", "room_id": "ID stanza: %(roomId)s", "room_not_encrypted": "La stanza non è crittografata 🚨", @@ -1511,14 +1506,6 @@ "view_rules": "Vedi regole" }, "language_dropdown_label": "Lingua a tendina", - "lazy_loading": { - "disabled_action": "Svuota cache e risincronizza", - "disabled_description1": "Hai usato %(brand)s precedentemente su %(host)s con il caricamento lento dei membri attivato. In questa versione il caricamento lento è disattivato. Dato che la cache locale non è compatibile tra queste due impostazioni, %(brand)s deve risincronizzare il tuo account.", - "disabled_description2": "Se l'altra versione di %(brand)s è ancora aperta in un'altra scheda, chiudila perché usare %(brand)s nello stesso host con il caricamento lento sia attivato che disattivato può causare errori.", - "disabled_title": "Cache locale non compatibile", - "resync_description": "%(brand)s ora usa da 3 a 5 volte meno memoria, caricando le informazioni degli altri utenti solo quando serve. Si prega di attendere mentre ci risincronizziamo con il server!", - "resync_title": "Aggiornamento di %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Sei l'unica persona qui. Se esci, nessuno potrà entrare in futuro, incluso te.", "leave_room_question": "Sei sicuro di volere uscire dalla stanza '%(roomName)s'?", diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index 40db2f6efb6..22a17aabdef 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -233,7 +233,6 @@ "completing_setup": "新しい端末の設定を完了しています", "confirm_code_match": "以下のコードが他の端末と一致していることを確認してください:", "connecting": "接続しています…", - "devices_connected": "接続中の端末", "error_device_already_signed_in": "もう一方のデバイスは既にサインインしています。", "error_device_not_signed_in": "もう一方の端末はサインインしていません。", "error_device_unsupported": "この端末とのリンクはサポートしていません。", @@ -244,12 +243,10 @@ "error_request_cancelled": "リクエストはキャンセルされました。", "error_request_declined": "リクエストはもう一方の端末で拒否されました。", "error_unexpected": "予期しないエラーが発生しました。", - "review_and_approve": "サインインを確認して承認", "scan_code_instruction": "サインアウトした端末で以下のQRコードをスキャンしてください。", "scan_qr_code": "QRコードをスキャン", "select_qr_code": "「%(scanQRCode)s」を選択", "sign_in_new_device": "新しい端末でサインイン", - "start_at_sign_in_screen": "サインインの画面で開始", "waiting_for_device": "端末のサインインを待機しています" }, "register_action": "アカウントを作成", @@ -706,7 +703,6 @@ "no_verification_requests_found": "認証リクエストがありません", "notifications_debug": "通知のデバッグ", "number_of_users": "ユーザー数", - "observe_only": "観察のみ", "original_event_source": "元のイベントのソースコード", "phase": "フェーズ", "phase_cancelled": "キャンセル済", @@ -714,7 +710,6 @@ "phase_requested": "要求済", "phase_started": "開始済", "phase_transaction": "トランザクション", - "requester": "リクエストしたユーザー", "room_id": "ルームID:%(roomId)s", "room_notifications_dot": "ドット: ", "room_notifications_highlight": "ハイライト: ", @@ -1399,14 +1394,6 @@ "view_rules": "ルールを表示" }, "language_dropdown_label": "言語一覧", - "lazy_loading": { - "disabled_action": "キャッシュをクリアして再同期", - "disabled_description1": "以前%(host)sにて、メンバーの遅延ロードを有効にした%(brand)sが使用されていました。このバージョンでは、遅延ロードは無効です。ローカルのキャッシュにはこれらの2つの設定の間での互換性がないため、%(brand)sはアカウントを再同期する必要があります。", - "disabled_description2": "他のバージョンの%(brand)sが別のタブで開いている場合は、それを閉じてください。同じホスト上で遅延ロードを有効と無効の両方に設定して%(brand)sを使用すると、問題が発生します。", - "disabled_title": "互換性のないローカルキャッシュ", - "resync_description": "%(brand)sは、必要なときだけに他のユーザーに関する情報を読み込むようにすることで、メモリの使用量を3〜5倍減らしました。サーバーと再同期するのを待ってください!", - "resync_title": "%(brand)sを更新しています" - }, "leave_room_dialog": { "last_person_warning": "このルームの参加者はあなただけです。退出すると、今後あなたを含めて誰もこのルームに参加できなくなります。", "leave_room_question": "このルーム「%(roomName)s」から退出してよろしいですか?", diff --git a/src/i18n/strings/lo.json b/src/i18n/strings/lo.json index 82c3b53fb9d..72f90e0f0a8 100644 --- a/src/i18n/strings/lo.json +++ b/src/i18n/strings/lo.json @@ -616,7 +616,6 @@ "methods": "ວິທີການ", "no_verification_requests_found": "ບໍ່ພົບການຮ້ອງຂໍການຢັ້ງຢືນ", "number_of_users": "ຈໍານວນຜູ້ໃຊ້", - "observe_only": "ສັງເກດເທົ່ານັ້ນ", "original_event_source": "ແຫຼ່ງຕົ້ນສະບັບ", "phase": "ໄລຍະ", "phase_cancelled": "ຍົກເລີກ", @@ -624,7 +623,6 @@ "phase_requested": "ຮ້ອງຂໍ", "phase_started": "ໄດ້ເລີ່ມແລ້ວ", "phase_transaction": "ທຸລະກໍາ", - "requester": "ຜູ້ຮ້ອງຂໍ", "room_id": "ID ຫ້ອງ: %(roomId)s", "save_setting_values": "ບັນທຶກຄ່າການຕັ້ງຄ່າ", "send_custom_account_data_event": "ສົ່ງຂໍ້ມູນບັນຊີແບບກຳນົດເອງທຸກເຫດການ", @@ -1227,14 +1225,6 @@ "view_rules": "ເບິ່ງກົດລະບຽບ" }, "language_dropdown_label": "ເລື່ອນພາສາລົງ", - "lazy_loading": { - "disabled_action": "ລຶບ cache ແລະ resync", - "disabled_description1": "ກ່ອນໜ້ານີ້ທ່ານເຄີຍໃຊ້ %(brand)sກັບ %(host)s ດ້ວຍການເປີດໂຫຼດສະມາຊິກ. ໃນເວີຊັ້ນນີ້ ໄດ້ປິດການໃຊ້ງານ. ເນື່ອງຈາກ cache ໃນເຄື່ອງບໍ່ເຂົ້າກັນລະຫວ່າງສອງການຕັ້ງຄ່ານີ້, %(brand)s ຕ້ອງການ sync ບັນຊີຂອງທ່ານຄືນໃໝ່.", - "disabled_description2": "ຖ້າເວີຊັ້ນອື່ນຂອງ %(brand)s ເປີດຢູ່ໃນແຖບອື່ນ, ກະລຸນາປິດການໃຊ້ %(brand)s ຢູ່ໃນໂຮດດຽວກັນທັງການໂຫຼດແບບ lazy ເປີດໃຊ້ງານ ແລະປິດໃຊ້ງານພ້ອມກັນຈະເຮັດໃຫ້ເກີດບັນຫາ.", - "disabled_title": "ແຄດໃນເຄື່ອງບໍ່ເຂົ້າກັນໄດ້", - "resync_description": "ຕອນນີ້ %(brand)s ໃຊ້ຄວາມຈຳໜ້ອຍກວ່າ 3-5x, ໂດຍການໂຫຼດຂໍ້ມູນກ່ຽວກັບຜູ້ໃຊ້ອື່ນເມື່ອຕ້ອງການເທົ່ານັ້ນ. ກະລຸນາລໍຖ້າໃນຂະນະທີ່ພວກເຮົາ synchronise ກັບເຊີບເວີ!", - "resync_title": "ກຳລັງອັບເດດ %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "ເຈົ້າເປັນພຽງຄົນດຽວຢູ່ທີ່ນີ້. ຖ້າທ່ານອອກໄປ, ບໍ່ມີໃຜຈະສາມາດເຂົ້າຮ່ວມໃນອະນາຄົດໄດ້, ລວມທັງທ່ານ.", "leave_room_question": "ທ່ານແນ່ໃຈບໍ່ວ່າຕ້ອງການອອກຈາກຫ້ອງ '%(roomName)s'?", diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json index bae89365f6c..66deb29fe1e 100644 --- a/src/i18n/strings/lt.json +++ b/src/i18n/strings/lt.json @@ -928,14 +928,6 @@ "title": "Ignoruojami vartotojai", "view_rules": "Peržiūrėti taisykles" }, - "lazy_loading": { - "disabled_action": "Išvalyti talpyklą ir sinchronizuoti iš naujo", - "disabled_description1": "Jūs anksčiau naudojote %(brand)s ant %(host)s įjungę tingų narių įkėlimą. Šioje versijoje tingus įkėlimas yra išjungtas. Kadangi vietinė talpykla nesuderinama tarp šių dviejų nustatymų, %(brand)s reikia iš naujo sinchronizuoti jūsų paskyrą.", - "disabled_description2": "Jei kita %(brand)s versija vis dar yra atidaryta kitame skirtuke, uždarykite jį, nes %(brand)s naudojimas tame pačiame serveryje, tuo pačiu metu įjungus ir išjungus tingų įkėlimą, sukelks problemų.", - "disabled_title": "Nesuderinamas vietinis podėlis", - "resync_description": "%(brand)s dabar naudoja 3-5 kartus mažiau atminties, įkeliant vartotojų informaciją tik prireikus. Palaukite, kol mes iš naujo sinchronizuosime su serveriu!", - "resync_title": "Atnaujinama %(brand)s" - }, "leave_room_dialog": { "leave_room_question": "Ar tikrai norite išeiti iš kambario %(roomName)s?", "room_rejoin_warning": "Šis kambarys nėra viešas. Jūs negalėsite prisijungti iš naujo be pakvietimo." diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 943369d05af..9352a3cf2fe 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -221,7 +221,6 @@ "approve_access_warning": "Door de toegang voor dit apparaat goed te keuren, heeft het volledige toegang tot jouw account.", "completing_setup": "De configuratie van je nieuwe apparaat voltooien", "confirm_code_match": "Controleer of de onderstaande code overeenkomt met je andere apparaat:", - "devices_connected": "Verbonden apparaten", "error_device_already_signed_in": "Het andere apparaat is al aangemeld.", "error_device_not_signed_in": "Het andere apparaat is niet ingelogd.", "error_device_unsupported": "Koppelen met dit apparaat wordt niet ondersteund.", @@ -231,10 +230,8 @@ "error_request_cancelled": "Het verzoek is geannuleerd.", "error_request_declined": "Het verzoek is afgewezen op het andere apparaat.", "error_unexpected": "Er is een onverwachte fout opgetreden.", - "review_and_approve": "Controleer en keur de aanmelding goed", "scan_code_instruction": "Scan de onderstaande QR-code met je apparaat dat is uitgelogd.", "sign_in_new_device": "Aanmelden nieuw apparaat", - "start_at_sign_in_screen": "Begin bij het inlogscherm", "waiting_for_device": "Wachten op apparaat om in te loggen" }, "register_action": "Registreren", @@ -630,7 +627,6 @@ "methods": "Methoden", "no_verification_requests_found": "Geen verificatieverzoeken gevonden", "number_of_users": "Aantal personen", - "observe_only": "Alleen observeren", "original_event_source": "Originele gebeurtenisbron", "phase": "Fase", "phase_cancelled": "Geannuleerd", @@ -638,7 +634,6 @@ "phase_requested": "Aangevraagd", "phase_started": "Begonnen", "phase_transaction": "Transactie", - "requester": "Aanvrager", "room_id": "Kamer ID: %(roomId)s", "save_setting_values": "Instelling waardes opslaan", "send_custom_account_data_event": "Aangepaste accountgegevens gebeurtenis versturen", @@ -1257,14 +1252,6 @@ "view_rules": "Bekijk regels" }, "language_dropdown_label": "Taalselectie", - "lazy_loading": { - "disabled_action": "Cache wissen en hersynchroniseren", - "disabled_description1": "Je hebt voorheen %(brand)s op %(host)s gebruikt met lui laden van leden ingeschakeld. In deze versie is lui laden uitgeschakeld. De lokale cache is niet compatibel tussen deze twee instellingen, zodat %(brand)s je account moet hersynchroniseren.", - "disabled_description2": "Indien de andere versie van %(brand)s nog open staat in een ander tabblad kan je dat beter sluiten, want het geeft problemen als %(brand)s op dezelfde host gelijktijdig met lui laden ingeschakeld en uitgeschakeld draait.", - "disabled_title": "Incompatibele lokale cache", - "resync_description": "%(brand)s verbruikt nu 3-5x minder geheugen, door informatie over andere personen enkel te laden wanneer nodig. Even geduld, we synchroniseren met de server!", - "resync_title": "%(brand)s wordt bijgewerkt" - }, "leave_room_dialog": { "last_person_warning": "Je bent de enige persoon hier. Als je weggaat, zal niemand in de toekomst kunnen toetreden, jij ook niet.", "leave_room_question": "Weet je zeker dat je de kamer ‘%(roomName)s’ wil verlaten?", diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index a2ada200429..d562f7803af 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -249,7 +249,6 @@ "completing_setup": "Kończenie konfiguracji nowego urządzenia", "confirm_code_match": "Potwierdź, że kod poniżej pasuje z Twoim drugim urządzeniem:", "connecting": "Łączenie…", - "devices_connected": "Urządzenia połączone", "error_device_already_signed_in": "Drugie urządzenie jest już zalogowane.", "error_device_not_signed_in": "Drugie urządzenie nie jest zalogowane.", "error_device_unsupported": "Wiązanie z tym urządzeniem nie jest wspierane.", @@ -260,12 +259,10 @@ "error_request_cancelled": "Żądanie zostało anulowane.", "error_request_declined": "Żądanie zostało odrzucone przez drugie urządzenie.", "error_unexpected": "Wystąpił niespodziewany błąd.", - "review_and_approve": "Sprawdź i potwierdź logowanie", "scan_code_instruction": "Zeskanuj kod QR poniżej za pomocą urządzenia, które jest wylogowane.", "scan_qr_code": "Skanuj kod QR", "select_qr_code": "Wybierz '%(scanQRCode)s'", "sign_in_new_device": "Zaloguj nowe urządzenie", - "start_at_sign_in_screen": "Rozpocznij na ekranie logowania", "waiting_for_device": "Oczekiwanie na logowanie urządzenia" }, "register_action": "Utwórz konto", @@ -743,7 +740,6 @@ "notification_state": "Status powiadomień %(notificationState)s", "notifications_debug": "Debug powiadomień", "number_of_users": "Liczba użytkowników", - "observe_only": "Tylko obserwuj", "original_event_source": "Oryginalne źródło wydarzenia", "phase": "Etap", "phase_cancelled": "Anulowano", @@ -751,7 +747,6 @@ "phase_requested": "Żądane", "phase_started": "Rozpoczęto", "phase_transaction": "Transakcja", - "requester": "Żądający", "room_encrypted": "Pokój jest szyfrowany ✅", "room_id": "ID pokoju: %(roomId)s", "room_not_encrypted": "Pokój nie jest szyfrowany 🚨", @@ -1513,14 +1508,6 @@ "view_rules": "Zobacz zasady" }, "language_dropdown_label": "Rozwiń języki", - "lazy_loading": { - "disabled_action": "Wyczyść pamięć podręczną i zsynchronizuj ponownie", - "disabled_description1": "Ostatnia sesja %(brand)s na %(host)s miała włączone leniwe ładowanie członków. W tej wersji leniwe ładowanie jest wyłączone. Ponieważ lokalna pamięć podręczna nie jest kompatybilna pomiędzy tymi wersjami, %(brand)s musi zsynchronizować ponownie Twoje konto.", - "disabled_description2": "Jeśli inna wersja %(brand)s jest nadal otwarta w innej zakładce, proszę zamknij ją, ponieważ używanie %(brand)s na tym samym komputerze z włączonym i wyłączonym jednocześnie leniwym ładowaniem będzie powodować problemy.", - "disabled_title": "Niekompatybilna lokalna pamięć podręczna", - "resync_description": "%(brand)s używa teraz 3-5x mniej pamięci, ładując informacje o innych użytkownikach tylko wtedy, gdy jest to konieczne. Poczekaj, aż ponownie zsynchronizujemy się z serwerem!", - "resync_title": "Aktualizowanie %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Jesteś jedyną osoba tutaj. Jeśli wyjdziesz, nikt nie będzie w stanie dołączyć w przyszłości, włączając Ciebie.", "leave_room_question": "Czy na pewno chcesz opuścić pokój '%(roomName)s'?", diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 3e1fbc8b50e..6d322e1f666 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -1036,14 +1036,6 @@ "view_rules": "Ver regras" }, "language_dropdown_label": "Menu suspenso de idiomas", - "lazy_loading": { - "disabled_action": "Limpar cache e ressincronizar", - "disabled_description1": "Você já usou o %(brand)s em %(host)s com o carregamento Lazy de participantes ativado. Nesta versão, o carregamento Lazy está desativado. Como o cache local não é compatível entre essas duas configurações, o %(brand)s precisa ressincronizar sua conta.", - "disabled_description2": "Se a outra versão do %(brand)s ainda estiver aberta em outra aba, por favor, feche-a pois usar o %(brand)s no mesmo host com o carregamento Lazy ativado e desativado simultaneamente causará problemas.", - "disabled_title": "Cache local incompatível", - "resync_description": "%(brand)s agora usa de 3 a 5 vezes menos memória, pois carrega as informações dos outros usuários apenas quando for necessário. Por favor, aguarde enquanto ressincronizamos com o servidor!", - "resync_title": "Atualizando o %(brand)s" - }, "leave_room_dialog": { "leave_room_question": "Tem certeza de que deseja sair da sala '%(roomName)s'?", "leave_space_question": "Tem certeza de que deseja sair desse espaço '%(spaceName)s'?", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 7433ca2eb08..f9a84fd00d4 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -244,7 +244,6 @@ "completing_setup": "Завершение настройки нового устройства", "confirm_code_match": "Проверьте, чтобы код ниже совпадал с тем, что показан на другом устройстве:", "connecting": "Подключение…", - "devices_connected": "Подключенные устройства", "error_device_already_signed_in": "Уже выполнен вход на другом устройстве.", "error_device_not_signed_in": "На другом устройстве вход не выполнен.", "error_device_unsupported": "Соединение с этим устройством не поддерживается.", @@ -254,12 +253,10 @@ "error_request_cancelled": "Запрос был отменён.", "error_request_declined": "Запрос был отклонен на другом устройстве.", "error_unexpected": "Произошла неожиданная ошибка.", - "review_and_approve": "Проверьте и подтвердите вход", "scan_code_instruction": "Отсканируйте приведенный ниже QR-код на устройстве, которое вышло из системы.", "scan_qr_code": "Сканировать QR-код", "select_qr_code": "Выберите '%(scanQRCode)s'", "sign_in_new_device": "Войдите в систему c нового устройства", - "start_at_sign_in_screen": "Начните с экрана входа в систему", "waiting_for_device": "Ожидание входа устройства в систему" }, "register_action": "Создать учётную запись", @@ -735,7 +732,6 @@ "notification_state": "Состояние уведомления %(notificationState)s", "notifications_debug": "Отладка уведомлений", "number_of_users": "Количество пользователей", - "observe_only": "Только наблюдать", "original_event_source": "Оригинальный исходный код", "phase": "Фаза", "phase_cancelled": "Отменено", @@ -743,7 +739,6 @@ "phase_requested": "Запрошено", "phase_started": "Начато", "phase_transaction": "Транзакция", - "requester": "Адресат", "room_encrypted": "Комната зашифрована ✅", "room_id": "ID комнаты: %(roomId)s", "room_not_encrypted": "Комната не имеет шифрования 🚨", @@ -1494,14 +1489,6 @@ "view_rules": "Посмотреть правила" }, "language_dropdown_label": "Список языков", - "lazy_loading": { - "disabled_action": "Очистить кэш и выполнить повторную синхронизацию", - "disabled_description1": "Ранее вы использовали %(brand)s на %(host)s с отложенной загрузкой участников. В этой версии отложенная загрузка отключена. Поскольку локальный кеш не совместим между этими двумя настройками, %(brand)s необходимо повторно синхронизировать вашу учётную запись.", - "disabled_description2": "Если другая версия %(brand)s все еще открыта на другой вкладке, закройте ее, так как использование %(brand)s на том же хосте с включенной и отключенной ленивой загрузкой одновременно вызовет проблемы.", - "disabled_title": "Несовместимый локальный кэш", - "resync_description": "%(brand)s теперь использует в 3-5 раз меньше памяти, загружая информацию о других пользователях только когда это необходимо. Пожалуйста, подождите, пока мы ресинхронизируемся с сервером!", - "resync_title": "Обновление %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Вы здесь единственный человек. Если вы уйдете, никто не сможет присоединиться в будущем, включая вас.", "leave_room_question": "Уверены, что хотите покинуть '%(roomName)s'?", diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json index 1170467eb0d..ca7b24e4760 100644 --- a/src/i18n/strings/sk.json +++ b/src/i18n/strings/sk.json @@ -244,7 +244,6 @@ "completing_setup": "Dokončenie nastavenia nového zariadenia", "confirm_code_match": "Skontrolujte, či sa nižšie uvedený kód zhoduje s vaším druhým zariadením:", "connecting": "Pripájanie…", - "devices_connected": "Zariadenia pripojené", "error_device_already_signed_in": "Druhé zariadenie je už prihlásené.", "error_device_not_signed_in": "Druhé zariadenie nie je prihlásené.", "error_device_unsupported": "Prepojenie s týmto zariadením nie je podporované.", @@ -254,12 +253,10 @@ "error_request_cancelled": "Žiadosť bola zrušená.", "error_request_declined": "Žiadosť bola na druhom zariadení zamietnutá.", "error_unexpected": "Vyskytla sa neočakávaná chyba.", - "review_and_approve": "Skontrolujte a schváľte prihlásenie", "scan_code_instruction": "Naskenujte nižšie uvedený QR kód pomocou zariadenia, ktoré je odhlásené.", "scan_qr_code": "Skenovať QR kód", "select_qr_code": "Vyberte '%(scanQRCode)s'", "sign_in_new_device": "Prihlásiť nové zariadenie", - "start_at_sign_in_screen": "Začnite na prihlasovacej obrazovke", "waiting_for_device": "Čaká sa na prihlásenie zariadenia" }, "register_action": "Vytvoriť účet", @@ -735,7 +732,6 @@ "notification_state": "Stav oznámenia je %(notificationState)s", "notifications_debug": "Ladenie oznámení", "number_of_users": "Počet používateľov", - "observe_only": "Iba pozorovať", "original_event_source": "Pôvodný zdroj udalosti", "phase": "Fáza", "phase_cancelled": "Zrušené", @@ -743,7 +739,6 @@ "phase_requested": "Vyžiadané", "phase_started": "Spustené", "phase_transaction": "Transakcia", - "requester": "Žiadateľ", "room_encrypted": "Miestnosť je šifrovaná ✅", "room_id": "ID miestnosti: %(roomId)s", "room_not_encrypted": "Miestnosť nie je šifrovaná 🚨", @@ -1499,14 +1494,6 @@ "view_rules": "Zobraziť pravidlá" }, "language_dropdown_label": "Rozbaľovací zoznam jazykov", - "lazy_loading": { - "disabled_action": "Vymazať vyrovnávaciu pamäť a synchronizovať znovu", - "disabled_description1": "Použili ste aj %(brand)s na adrese %(host)s so zapnutou voľbou Načítanie zoznamu členov pri prvom zobrazení. V tejto verzii je Načítanie zoznamu členov pri prvom zobrazení vypnuté. Keď že lokálna vyrovnávacia pamäť nie je vzájomne kompatibilná s takýmito nastaveniami, %(brand)s potrebuje znovu synchronizovať údaje z vašeho účtu.", - "disabled_description2": "Ak máte %(brand)s s iným nastavením otvorený na ďalšej karte, prosím zatvorte ju, pretože použitie %(brand)s s rôznym nastavením na jednom zariadení vám spôsobí len problémy.", - "disabled_title": "Nekompatibilná lokálna vyrovnávacia pamäť", - "resync_description": "%(brand)s teraz vyžaduje 3-5× menej pamäte, pretože informácie o ostatných používateľoch načítava len podľa potreby. Prosím počkajte na dokončenie synchronizácie so serverom!", - "resync_title": "Prebieha aktualizácia %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Ste tu jediný človek. Ak odídete, nikto sa už v budúcnosti nebude môcť pripojiť do tejto miestnosti, vrátane vás.", "leave_room_question": "Ste si istí, že chcete opustiť miestnosť '%(roomName)s'?", diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 27c8311553e..c75782696c6 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -235,7 +235,6 @@ "completing_setup": "Po plotësohet ujdisja e pajisjes tuaj të re", "confirm_code_match": "Kontrolloni se kodi më poshtë përkon me atë në pajisjen tuaj tjetër:", "connecting": "Po lidhet…", - "devices_connected": "Pajisje të lidhura", "error_device_already_signed_in": "Nga pajisja tjetër është bërë tashmë hyrja.", "error_device_not_signed_in": "Te pajisja tjetër s’është bërë hyrja.", "error_device_unsupported": "Lidhja me këtë pajisje nuk mbulohet.", @@ -246,12 +245,10 @@ "error_request_cancelled": "Kërkesa u anulua.", "error_request_declined": "Kërkesa u hodh poshtë në pajisjen tjetër.", "error_unexpected": "Ndodhi një gabim të papritur.", - "review_and_approve": "Shqyrtoni dhe miratojeni hyrjen", "scan_code_instruction": "Skanoni kodin QR më poshtë me pajisjen ku është bërë dalja.", "scan_qr_code": "Skanoni kodin QR", "select_qr_code": "Përzgjidhni “%(scanQRCode)s”", "sign_in_new_device": "Hyni në pajisje të re", - "start_at_sign_in_screen": "Filloja në skenën e hyrjes", "waiting_for_device": "Po pritet që të bëhet hyrja te pajisja" }, "register_action": "Krijoni Llogari", @@ -706,7 +703,6 @@ "notification_state": "Gjendje njoftimi është %(notificationState)s", "notifications_debug": "Diagnostikim njoftimesh", "number_of_users": "Numër përdoruesish", - "observe_only": "Vetëm vëzhgo", "original_event_source": "Burim i veprimtarisë origjinale", "phase": "Fazë", "phase_cancelled": "Anuluar", @@ -714,7 +710,6 @@ "phase_requested": "E kërkuar", "phase_started": "Nisur më", "phase_transaction": "Transaksion", - "requester": "Kërkues", "room_encrypted": "Dhoma është e fshehtëzuar ✅", "room_id": "ID Dhome: %(roomId)s", "room_not_encrypted": "Dhoma është e pafshehtëzuar 🚨", @@ -1410,14 +1405,6 @@ "view_rules": "Shihni rregulla" }, "language_dropdown_label": "Menu Hapmbyll Gjuhësh", - "lazy_loading": { - "disabled_action": "Spastro fshehtinën dhe rinjëkohëso", - "disabled_description1": "Më parë përdornit %(brand)s në %(host)s me lazy loading anëtarësh të aktivizuar. Në këtë version lazy loading është çaktivizuar. Ngaqë fshehtina vendore s’është e përputhshme mes këtyre dy rregullimeve, %(brand)s-i lyp të rinjëkohësohet llogaria juaj.", - "disabled_description2": "Nëse versioni tjetër i %(brand)s-it është ende i hapur në një skedë tjetër, ju lutemi, mbylleni, ngaqë përdorimi njëkohësisht i %(brand)s-it në të njëjtën strehë, në njërën anë me lazy loading të aktivizuar dhe në anën tjetër të çaktivizuar do të shkaktojë probleme.", - "disabled_title": "Fshehtinë vendore e papërputhshme", - "resync_description": "%(brand)s-i tani përdor 3 deri 5 herë më pak kujtesë, duke ngarkuar të dhëna mbi përdorues të tjerë vetëm kur duhen. Ju lutemi, prisni, teksa njëkohësojmë të dhënat me shërbyesin!", - "resync_title": "%(brand)s-i po përditësohet" - }, "leave_room_dialog": { "last_person_warning": "Jeni i vetmi person këtu. Nëse e braktisni, askush s’do të jetë në gjendje të hyjë në të ardhmen, përfshi ju.", "leave_room_question": "Jeni i sigurt se doni të dilni nga dhoma '%(roomName)s'?", diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index b41d66a1c46..722ef247afb 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -249,7 +249,6 @@ "completing_setup": "Slutför inställning av din nya enhet", "confirm_code_match": "Kolla att koden nedan matchar din andra enhet:", "connecting": "Kopplar upp …", - "devices_connected": "Enheter anslutna", "error_device_already_signed_in": "Den andra enheten är redan inloggad.", "error_device_not_signed_in": "Den andra enheten är inte inloggad.", "error_device_unsupported": "Länkning med den här enheten stöds inte.", @@ -260,12 +259,10 @@ "error_request_cancelled": "Förfrågan avbröts.", "error_request_declined": "Förfrågan nekades på den andra enheten.", "error_unexpected": "Ett oväntade fel inträffade.", - "review_and_approve": "Granska och godkänn inloggningen", "scan_code_instruction": "Skanna QR-koden nedan med din andra enhet som är utloggad.", "scan_qr_code": "Skanna QR-kod", "select_qr_code": "Välj '%(scanQRCode)s'", "sign_in_new_device": "Logga in ny enhet", - "start_at_sign_in_screen": "Börja på inloggningsskärmen", "waiting_for_device": "Väntar på att enheter loggar in" }, "register_action": "Skapa konto", @@ -742,7 +739,6 @@ "notification_state": "Aviseringsstatus är %(notificationState)s", "notifications_debug": "Aviseringsfelsökning", "number_of_users": "Antal användare", - "observe_only": "Bara kolla", "original_event_source": "Ursprunglig händelsekällkod", "phase": "Fas", "phase_cancelled": "Avbruten", @@ -750,7 +746,6 @@ "phase_requested": "Efterfrågad", "phase_started": "Påbörjad", "phase_transaction": "Transaktion", - "requester": "Den som skickat förfrågan", "room_encrypted": "Rummet är krypterat ✅", "room_id": "Rums-ID: %(roomId)s", "room_not_encrypted": "Rummet är inte krypterat 🚨", @@ -1511,14 +1506,6 @@ "view_rules": "Visa regler" }, "language_dropdown_label": "Språkmeny", - "lazy_loading": { - "disabled_action": "Töm cache och synkronisera om", - "disabled_description1": "Du har tidigare använt %(brand)s på %(host)s med fördröjd inladdning av medlemmar aktiverat. I den här versionen är fördröjd inladdning inaktiverat. Eftersom den lokala cachen inte är kompatibel mellan dessa två inställningar behöver %(brand)s synkronisera om ditt konto.", - "disabled_description2": "Om den andra versionen av %(brand)s fortfarande är öppen i en annan flik, stäng den eftersom användning av %(brand)s på samma värd med fördröjd inladdning både aktiverad och inaktiverad samtidigt kommer att orsaka problem.", - "disabled_title": "Inkompatibel lokal cache", - "resync_description": "%(brand)s använder nu 3-5 gånger mindre minne, genom att bara ladda information om andra användare när det behövs. Vänta medan vi återsynkroniserar med servern!", - "resync_title": "Uppdaterar %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Du är den enda personen här. Om du lämnar så kommer ingen kunna gå med igen, inklusive du.", "leave_room_question": "Vill du lämna rummet '%(roomName)s'?", diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index 84c639c8f13..b9b307889e6 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -241,7 +241,6 @@ "completing_setup": "Завершення налаштування нового пристрою", "confirm_code_match": "Перевірте, чи збігається наведений внизу код з кодом на вашому іншому пристрої:", "connecting": "З'єднання…", - "devices_connected": "Пристрої під'єднано", "error_device_already_signed_in": "На іншому пристрої вхід було виконано.", "error_device_not_signed_in": "На іншому пристрої вхід не виконано.", "error_device_unsupported": "Зв'язок з цим пристроєм не підтримується.", @@ -252,12 +251,10 @@ "error_request_cancelled": "Запит було скасовано.", "error_request_declined": "На іншому пристрої запит відхилено.", "error_unexpected": "Виникла непередбачувана помилка.", - "review_and_approve": "Розглянути та схвалити вхід", "scan_code_instruction": "Скануйте QR-код знизу своїм пристроєм, на якому ви вийшли.", "scan_qr_code": "Скануйте QR-код", "select_qr_code": "Виберіть «%(scanQRCode)s»", "sign_in_new_device": "Увійти на новому пристрої", - "start_at_sign_in_screen": "Почніть з екрана входу", "waiting_for_device": "Очікування входу з пристрою" }, "register_action": "Створити обліковий запис", @@ -728,7 +725,6 @@ "notification_state": "Стан сповіщень %(notificationState)s", "notifications_debug": "Сповіщення зневадження", "number_of_users": "Кількість користувачів", - "observe_only": "Лише спостерігати", "original_event_source": "Оригінальний початковий код", "phase": "Фаза", "phase_cancelled": "Скасовано", @@ -736,7 +732,6 @@ "phase_requested": "Подано запит", "phase_started": "Почато", "phase_transaction": "Транзакція", - "requester": "Адресант", "room_encrypted": "Кімната зашифрована ✅", "room_id": "ID кімнати: %(roomId)s", "room_not_encrypted": "Кімната не зашифрована 🚨", @@ -1458,14 +1453,6 @@ "view_rules": "Переглянути правила" }, "language_dropdown_label": "Спадне меню мов", - "lazy_loading": { - "disabled_action": "Очистити кеш і повторно синхронізувати", - "disabled_description1": "Ви використовували %(brand)s на %(host)s, ввімкнувши відкладене звантаження учасників. У цій версії відкладене звантаження вимкнене. Оскільки локальне кешування не підтримує переходу між цими опціями, %(brand)s мусить заново синхронізувати ваш обліковий запис.", - "disabled_description2": "Якщо інший примірник %(brand)s досі відкритий в іншій вкладці, просимо закрити її, бо використання %(brand)s із водночас увімкненим і вимкненим відкладеним звантаженням створюватиме проблеми.", - "disabled_title": "Несумісний локальний кеш", - "resync_description": "%(brand)s тепер використовує в 3-5 разів менше пам'яті, звантажуючи дані про інших користувачів лише за потреби. Зачекайте, поки ми синхронізуємося з сервером!", - "resync_title": "Оновлення %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Тут лише ви. Якщо ви вийдете, ніхто більше не зможе приєднатися, навіть ви самі.", "leave_room_question": "Ви впевнені, що хочете вийти з «%(roomName)s»?", diff --git a/src/i18n/strings/vi.json b/src/i18n/strings/vi.json index cb3441462c6..7fc2c66760d 100644 --- a/src/i18n/strings/vi.json +++ b/src/i18n/strings/vi.json @@ -1341,14 +1341,6 @@ "view_rules": "Xem các quy tắc" }, "language_dropdown_label": "Danh sách ngôn ngữ", - "lazy_loading": { - "disabled_action": "Xóa bộ nhớ cache và đồng bộ hóa lại", - "disabled_description1": "Trước đây, bạn đã sử dụng %(brand)s trên %(host)s khi đã bật tính năng tải chậm các thành viên. Trong phiên bản này, tính năng tải lười biếng bị vô hiệu hóa. Vì bộ nhớ cache cục bộ không tương thích giữa hai cài đặt này, %(brand)s cần phải đồng bộ hóa lại tài khoản của bạn.", - "disabled_description2": "Nếu phiên bản khác của %(brand)s vẫn đang mở trong một tab khác, vui lòng đóng nó lại vì việc sử dụng %(brand)s trên cùng một máy chủ với cả hai chế độ tải chậm được bật và tắt đồng thời sẽ gây ra sự cố.", - "disabled_title": "Bộ nhớ cache cục bộ không tương thích", - "resync_description": "%(brand)s hiện sử dụng bộ nhớ ít hơn 3-5 lần, bằng cách chỉ tải thông tin về những người dùng khác khi cần thiết. Vui lòng đợi trong khi chúng tôi đồng bộ hóa lại với máy chủ!", - "resync_title": "Đang cập nhật %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "Bạn là người duy nhất ở đây. Nếu bạn rời, không ai có thể tham gia trong tương lai, kể cả bạn.", "leave_room_question": "Bạn có chắc chắn muốn rời khỏi phòng '%(roomName)s' không?", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index be0da533b73..e03a592144d 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -244,7 +244,6 @@ "completing_setup": "完成新设备的设置", "confirm_code_match": "检查以下代码是否与你的其他设备匹配:", "connecting": "正在连接……", - "devices_connected": "已连接的设备", "error_homeserver_lacks_support": "此服务器不支持多设备登录" }, "register_action": "创建账户", @@ -686,14 +685,12 @@ "methods": "方法", "no_verification_requests_found": "未找到验证请求", "number_of_users": "用户数", - "observe_only": "仅观察", "original_event_source": "原始事件源码", "phase": "阶段", "phase_cancelled": "已取消", "phase_requested": "已请求", "phase_started": "已开始", "phase_transaction": "交易", - "requester": "请求者", "room_id": "房间ID: %(roomId)s", "save_setting_values": "保存设置值", "send_custom_account_data_event": "发送自定义账户数据事件", @@ -1363,14 +1360,6 @@ "view_rules": "查看规则" }, "language_dropdown_label": "语言下拉菜单", - "lazy_loading": { - "disabled_action": "清除缓存并重新同步", - "disabled_description1": "你之前在 %(host)s 上开启了 %(brand)s 的成员列表延迟加载设置。目前版本中延迟加载功能已被停用。因为本地缓存在这两个设置项上不相容,%(brand)s 需要重新同步你的账户。", - "disabled_description2": "如果别的 %(brand)s 版本在别的标签页中仍然开启,请关闭它,因为在同一宿主上同时使用开启了延迟加载和关闭了延迟加载的 %(brand)s 会导致问题。", - "disabled_title": "本地缓存不兼容", - "resync_description": "通过仅在需要时加载其他用户的信息,%(brand)s 现在使用的内存减少到了原来的三分之一至五分之一。 请等待与服务器重新同步!", - "resync_title": "正在更新 %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "你是这里唯一的人。如果你离开了,以后包括你在内任何人都将无法加入。", "leave_room_question": "你确定要离开房间 “%(roomName)s” 吗?", diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index c9001e81579..0f02cb8ed05 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -241,7 +241,6 @@ "completing_setup": "完成您新裝置的設定", "confirm_code_match": "請確認下列代碼與您另一台裝置上的代碼相符:", "connecting": "連線中…", - "devices_connected": "裝置已連線", "error_device_already_signed_in": "其他裝置已登入。", "error_device_not_signed_in": "其他裝置未登入。", "error_device_unsupported": "不支援與此裝置連結。", @@ -252,12 +251,10 @@ "error_request_cancelled": "請求已取消。", "error_request_declined": "請求在另一台裝置上被拒絕。", "error_unexpected": "發生預料之外的錯誤。", - "review_and_approve": "審閱並批准登入", "scan_code_instruction": "請用您已登出的裝置掃描下列 QR Code。", "scan_qr_code": "掃描 QR Code", "select_qr_code": "選取「%(scanQRCode)s」", "sign_in_new_device": "登入新裝置", - "start_at_sign_in_screen": "從登入畫面開始", "waiting_for_device": "正在等待裝置登入" }, "register_action": "建立帳號", @@ -729,7 +726,6 @@ "notification_state": "通知狀態為 %(notificationState)s", "notifications_debug": "通知除錯", "number_of_users": "使用者數量", - "observe_only": "僅觀察", "original_event_source": "原始活動來源", "phase": "階段", "phase_cancelled": "已取消", @@ -737,7 +733,6 @@ "phase_requested": "已請求", "phase_started": "已開始", "phase_transaction": "交易", - "requester": "請求者", "room_encrypted": "聊天室已加密 ✅", "room_id": "聊天室 ID:%(roomId)s", "room_not_encrypted": "聊天室未加密 🚨", @@ -1461,14 +1456,6 @@ "view_rules": "檢視規則" }, "language_dropdown_label": "語言下拉式選單", - "lazy_loading": { - "disabled_action": "清除快取並重新同步", - "disabled_description1": "您之前曾在 %(host)s 上使用 %(brand)s 並啟用成員列表的延遲載入。在此版本中延遲載入已停用。由於本機快取在這兩個設定間不相容,%(brand)s 必須重新同步您的帳號。", - "disabled_description2": "如果其他版本的 %(brand)s 仍在其他分頁中開啟,請關閉它,因為在同一主機上使用同時啟用與停用惰性載入的 %(brand)s 可能會造成問題。", - "disabled_title": "不相容的本機快取", - "resync_description": "%(brand)s 現在僅使用低於原本3-5倍的記憶體,僅在需要時才會載入其他使用者的資訊。請等待我們與伺服器重新同步!", - "resync_title": "正在更新 %(brand)s" - }, "leave_room_dialog": { "last_person_warning": "您是這裡唯一的人。如果您離開,包含您在內的任何人都無法加入。", "leave_room_question": "您確定要離開聊天室「%(roomName)s」嗎?", From 4941327c784f9f5ad357dedfcde478adc612d11f Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 25 Mar 2024 12:21:02 +0000 Subject: [PATCH 060/235] Avoid using deprecated exports & methods from matrix-js-sdk (#12359) --- src/ContentMessages.ts | 3 +-- src/ScalarMessaging.ts | 10 +--------- src/components/structures/InteractiveAuth.tsx | 8 ++++---- src/components/structures/auth/Registration.tsx | 4 ++-- .../auth/InteractiveAuthEntryComponents.tsx | 4 ++-- src/components/views/right_panel/UserInfo.tsx | 13 ++++--------- .../views/settings/AddPrivilegedUsers.tsx | 2 +- .../views/settings/devices/deleteDevices.tsx | 4 ++-- src/createRoom.ts | 6 ++---- src/utils/exportUtils/JSONExport.ts | 4 +--- test/ContentMessages-test.ts | 5 +++-- test/Reply-test.ts | 7 ++++--- test/TextForEvent-test.ts | 7 +++++-- test/Unread-test.ts | 4 ++-- test/components/structures/ViewSource-test.tsx | 4 ++-- .../views/messages/MBeaconBody-test.tsx | 16 +++++++++------- .../views/messages/MPollEndBody-test.tsx | 2 +- .../views/messages/MessageActionBar-test.tsx | 17 +++++++++-------- .../views/right_panel/UserInfo-test.tsx | 7 +------ test/createRoom-test.ts | 4 ++-- .../previews/VoiceBroadcastPreview-test.ts | 9 +++++++-- test/utils/EventUtils-test.ts | 5 ++++- test/utils/beacon/timeline-test.ts | 6 +++--- .../models/VoiceBroadcastPlayback-test.tsx | 2 +- 24 files changed, 73 insertions(+), 80 deletions(-) diff --git a/src/ContentMessages.ts b/src/ContentMessages.ts index 0a5198ea567..b0f29ba044d 100644 --- a/src/ContentMessages.ts +++ b/src/ContentMessages.ts @@ -19,7 +19,6 @@ limitations under the License. import { MatrixClient, MsgType, - IImageInfo, HTTPError, IEventRelation, ISendEventResponse, @@ -390,7 +389,7 @@ export default class ContentMessages { url: string, roomId: string, threadId: string | null, - info: IImageInfo, + info: ImageInfo, text: string, matrixClient: MatrixClient, ): Promise { diff --git a/src/ScalarMessaging.ts b/src/ScalarMessaging.ts index 3b17bf7836c..0ee6921a24d 100644 --- a/src/ScalarMessaging.ts +++ b/src/ScalarMessaging.ts @@ -612,15 +612,7 @@ async function setBotPower( }); } } - await client.setPowerLevel( - roomId, - userId, - level, - new MatrixEvent({ - type: "m.room.power_levels", - content: powerLevels, - }), - ); + await client.setPowerLevel(roomId, userId, level); return sendResponse(event, { success: true, }); diff --git a/src/components/structures/InteractiveAuth.tsx b/src/components/structures/InteractiveAuth.tsx index 2547af77a1d..1ca2b6e5ce3 100644 --- a/src/components/structures/InteractiveAuth.tsx +++ b/src/components/structures/InteractiveAuth.tsx @@ -18,7 +18,7 @@ import React, { createRef } from "react"; import { AuthType, IAuthData, - IAuthDict, + AuthDict, IInputs, InteractiveAuth, IStageStatus, @@ -64,7 +64,7 @@ export interface InteractiveAuthProps { continueText?: string; continueKind?: ContinueKind; // callback - makeRequest(auth: IAuthDict | null): Promise; + makeRequest(auth: AuthDict | null): Promise; // callback called when the auth process has finished, // successfully or unsuccessfully. // @param {boolean} status True if the operation requiring @@ -213,7 +213,7 @@ export default class InteractiveAuthComponent extends React.Component => { + private requestCallback = (auth: AuthDict | null, background: boolean): Promise => { // This wrapper just exists because the js-sdk passes a second // 'busy' param for backwards compat. This throws the tests off // so discard it here. @@ -246,7 +246,7 @@ export default class InteractiveAuthComponent extends React.Component { + private submitAuthDict = (authData: AuthDict): void => { this.authLogic.submitAuthDict(authData); }; diff --git a/src/components/structures/auth/Registration.tsx b/src/components/structures/auth/Registration.tsx index 4da7282660e..5ac49537c58 100644 --- a/src/components/structures/auth/Registration.tsx +++ b/src/components/structures/auth/Registration.tsx @@ -18,7 +18,7 @@ import { AuthType, createClient, IAuthData, - IAuthDict, + AuthDict, IInputs, MatrixError, IRegisterRequestParams, @@ -478,7 +478,7 @@ export default class Registration extends React.Component { }); }; - private makeRegisterRequest = (auth: IAuthDict | null): Promise => { + private makeRegisterRequest = (auth: AuthDict | null): Promise => { if (!this.state.matrixClient) throw new Error("Matrix client has not yet been loaded"); const registerParams: IRegisterRequestParams = { diff --git a/src/components/views/auth/InteractiveAuthEntryComponents.tsx b/src/components/views/auth/InteractiveAuthEntryComponents.tsx index 0a7ed19b2ab..e8969f12adf 100644 --- a/src/components/views/auth/InteractiveAuthEntryComponents.tsx +++ b/src/components/views/auth/InteractiveAuthEntryComponents.tsx @@ -16,7 +16,7 @@ limitations under the License. import classNames from "classnames"; import { MatrixClient } from "matrix-js-sdk/src/matrix"; -import { AuthType, IAuthDict, IInputs, IStageStatus } from "matrix-js-sdk/src/interactive-auth"; +import { AuthType, AuthDict, IInputs, IStageStatus } from "matrix-js-sdk/src/interactive-auth"; import { logger } from "matrix-js-sdk/src/logger"; import React, { ChangeEvent, createRef, FormEvent, Fragment } from "react"; @@ -89,7 +89,7 @@ interface IAuthEntryProps { // Is the auth logic currently waiting for something to happen? busy?: boolean; onPhaseChange: (phase: number) => void; - submitAuthDict: (auth: IAuthDict) => void; + submitAuthDict: (auth: AuthDict) => void; requestEmailToken?: () => Promise; fail: (error: Error) => void; clientSecret: string; diff --git a/src/components/views/right_panel/UserInfo.tsx b/src/components/views/right_panel/UserInfo.tsx index aa7b54ddf97..63996612430 100644 --- a/src/components/views/right_panel/UserInfo.tsx +++ b/src/components/views/right_panel/UserInfo.tsx @@ -932,7 +932,7 @@ const MuteToggleButton: React.FC = ({ return; } - cli.setPowerLevel(roomId, target, level, powerLevelEvent) + cli.setPowerLevel(roomId, target, level) .then( () => { // NO-OP; rely on the m.room.member event coming down else we could @@ -1159,13 +1159,8 @@ export const PowerLevelEditor: React.FC<{ async (powerLevel: number) => { setSelectedPowerLevel(powerLevel); - const applyPowerChange = ( - roomId: string, - target: string, - powerLevel: number, - powerLevelEvent: MatrixEvent, - ): Promise => { - return cli.setPowerLevel(roomId, target, powerLevel, powerLevelEvent).then( + const applyPowerChange = (roomId: string, target: string, powerLevel: number): Promise => { + return cli.setPowerLevel(roomId, target, powerLevel).then( function () { // NO-OP; rely on the m.room.member event coming down else we could // get out of sync if we force setState here! @@ -1213,7 +1208,7 @@ export const PowerLevelEditor: React.FC<{ } } - await applyPowerChange(roomId, target, powerLevel, powerLevelEvent); + await applyPowerChange(roomId, target, powerLevel); }, [user.roomId, user.userId, cli, room], ); diff --git a/src/components/views/settings/AddPrivilegedUsers.tsx b/src/components/views/settings/AddPrivilegedUsers.tsx index d8d26593714..5bcaecd4691 100644 --- a/src/components/views/settings/AddPrivilegedUsers.tsx +++ b/src/components/views/settings/AddPrivilegedUsers.tsx @@ -62,7 +62,7 @@ export const AddPrivilegedUsers: React.FC = ({ room, de } try { - await client.setPowerLevel(room.roomId, userIds, powerLevel, powerLevelEvent); + await client.setPowerLevel(room.roomId, userIds, powerLevel); setSelectedUsers([]); setPowerLevel(defaultUserLevel); } catch (error) { diff --git a/src/components/views/settings/devices/deleteDevices.tsx b/src/components/views/settings/devices/deleteDevices.tsx index c07757f7a9b..e42dbe10b9b 100644 --- a/src/components/views/settings/devices/deleteDevices.tsx +++ b/src/components/views/settings/devices/deleteDevices.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import { MatrixClient, MatrixError } from "matrix-js-sdk/src/matrix"; -import { IAuthDict, IAuthData } from "matrix-js-sdk/src/interactive-auth"; +import { AuthDict, IAuthData } from "matrix-js-sdk/src/interactive-auth"; import { _t } from "../../../../languageHandler"; import Modal from "../../../../Modal"; @@ -25,7 +25,7 @@ import InteractiveAuthDialog from "../../dialogs/InteractiveAuthDialog"; const makeDeleteRequest = (matrixClient: MatrixClient, deviceIds: string[]) => - async (auth: IAuthDict | null): Promise => { + async (auth: AuthDict | null): Promise => { return matrixClient.deleteMultipleDevices(deviceIds, auth ?? undefined); }; diff --git a/src/createRoom.ts b/src/createRoom.ts index 579eeab7f30..93ef63383f4 100644 --- a/src/createRoom.ts +++ b/src/createRoom.ts @@ -347,15 +347,13 @@ export default async function createRoom(client: MatrixClient, opts: IOpts): Pro await JitsiCall.create(await room); // Reset our power level back to admin so that the widget becomes immutable - const plEvent = (await room).currentState.getStateEvents(EventType.RoomPowerLevels, ""); - await client.setPowerLevel(roomId, client.getUserId()!, 100, plEvent); + await client.setPowerLevel(roomId, client.getUserId()!, 100); } else if (opts.roomType === RoomType.UnstableCall) { // Set up this video room with an Element call await ElementCall.create(await room); // Reset our power level back to admin so that the call becomes immutable - const plEvent = (await room).currentState.getStateEvents(EventType.RoomPowerLevels, ""); - await client.setPowerLevel(roomId, client.getUserId()!, 100, plEvent); + await client.setPowerLevel(roomId, client.getUserId()!, 100); } }) .then( diff --git a/src/utils/exportUtils/JSONExport.ts b/src/utils/exportUtils/JSONExport.ts index d0470576d23..8805f95d65f 100644 --- a/src/utils/exportUtils/JSONExport.ts +++ b/src/utils/exportUtils/JSONExport.ts @@ -74,9 +74,7 @@ export default class JSONExporter extends Exporter { logger.log("Error fetching file: " + err); } } - const jsonEvent: any = mxEv.toJSON(); - const clearEvent = mxEv.isEncrypted() ? jsonEvent.decrypted : jsonEvent; - return clearEvent; + return mxEv.getEffectiveEvent(); } protected async createOutput(events: MatrixEvent[]): Promise { diff --git a/test/ContentMessages-test.ts b/test/ContentMessages-test.ts index a54ad29ab78..231ddc1b20e 100644 --- a/test/ContentMessages-test.ts +++ b/test/ContentMessages-test.ts @@ -15,7 +15,8 @@ limitations under the License. */ import { mocked } from "jest-mock"; -import { IImageInfo, ISendEventResponse, MatrixClient, RelationType, UploadResponse } from "matrix-js-sdk/src/matrix"; +import { ISendEventResponse, MatrixClient, RelationType, UploadResponse } from "matrix-js-sdk/src/matrix"; +import { ImageInfo } from "matrix-js-sdk/src/types"; import { defer } from "matrix-js-sdk/src/utils"; import encrypt, { IEncryptedFile } from "matrix-encrypt-attachment"; @@ -43,7 +44,7 @@ const createElement = document.createElement.bind(document); describe("ContentMessages", () => { const stickerUrl = "https://example.com/sticker"; const roomId = "!room:example.com"; - const imageInfo = {} as unknown as IImageInfo; + const imageInfo = {} as unknown as ImageInfo; const text = "test sticker"; let client: MatrixClient; let contentMessages: ContentMessages; diff --git a/test/Reply-test.ts b/test/Reply-test.ts index ac64610ec7a..b7ae3c9eefd 100644 --- a/test/Reply-test.ts +++ b/test/Reply-test.ts @@ -22,6 +22,7 @@ import { LocationAssetType, M_ASSET, M_POLL_END, + Room, } from "matrix-js-sdk/src/matrix"; import { @@ -31,7 +32,7 @@ import { stripHTMLReply, stripPlainReply, } from "../src/utils/Reply"; -import { makePollStartEvent, mkEvent } from "./test-utils"; +import { makePollStartEvent, mkEvent, stubClient } from "./test-utils"; import { RoomPermalinkCreator } from "../src/utils/permalinks/Permalinks"; function makeTestEvent(type: string, content: IContent): MatrixEvent { @@ -66,7 +67,7 @@ describe("Reply", () => { room: "!room1:server", content: {}, }); - event.makeRedacted(event); + event.makeRedacted(event, new Room(event.getRoomId()!, stubClient(), event.getSender()!)); expect(getParentEventId(event)).toBeUndefined(); }); @@ -182,7 +183,7 @@ But this is not room: "!room1:server", content: {}, }); - event.makeRedacted(event); + event.makeRedacted(event, new Room(event.getRoomId()!, stubClient(), event.getSender()!)); expect(shouldDisplayReply(event)).toBe(false); }); diff --git a/test/TextForEvent-test.ts b/test/TextForEvent-test.ts index a389333dc47..ff1e0a06bc9 100644 --- a/test/TextForEvent-test.ts +++ b/test/TextForEvent-test.ts @@ -419,7 +419,7 @@ describe("TextForEvent", () => { }); it("returns correct message for redacted poll start", () => { - pollEvent.makeRedacted(pollEvent); + pollEvent.makeRedacted(pollEvent, new Room(pollEvent.getRoomId()!, mockClient, mockClient.getSafeUserId())); expect(textForEvent(pollEvent, mockClient)).toEqual("@a: Message deleted"); }); @@ -445,7 +445,10 @@ describe("TextForEvent", () => { }); it("returns correct message for redacted message", () => { - messageEvent.makeRedacted(messageEvent); + messageEvent.makeRedacted( + messageEvent, + new Room(messageEvent.getRoomId()!, mockClient, mockClient.getSafeUserId()), + ); expect(textForEvent(messageEvent, mockClient)).toEqual("@a: Message deleted"); }); diff --git a/test/Unread-test.ts b/test/Unread-test.ts index 5caeeb7f346..8d4f319a398 100644 --- a/test/Unread-test.ts +++ b/test/Unread-test.ts @@ -63,7 +63,7 @@ describe("Unread", () => { type: EventType.RoomMessage, sender: aliceId, }); - redactedEvent.makeRedacted(redactedEvent); + redactedEvent.makeRedacted(redactedEvent, new Room(redactedEvent.getRoomId()!, client, aliceId)); beforeEach(() => { jest.clearAllMocks(); @@ -408,7 +408,7 @@ describe("Unread", () => { content: {}, }); console.log("Event Id", redactedEvent.getId()); - redactedEvent.makeRedacted(redactedEvent); + redactedEvent.makeRedacted(redactedEvent, room); console.log("Event Id", redactedEvent.getId()); // Only for timeline events. room.addLiveEvents([redactedEvent]); diff --git a/test/components/structures/ViewSource-test.tsx b/test/components/structures/ViewSource-test.tsx index 44c122e901d..8f2559dff90 100644 --- a/test/components/structures/ViewSource-test.tsx +++ b/test/components/structures/ViewSource-test.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import { render } from "@testing-library/react"; -import { EventType, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { EventType, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; import React from "react"; import ViewSource from "../../../src/components/structures/ViewSource"; @@ -43,7 +43,7 @@ describe("ViewSource", () => { content: {}, state_key: undefined, }); - redactedMessageEvent.makeRedacted(redactionEvent); + redactedMessageEvent.makeRedacted(redactionEvent, new Room(ROOM_ID, stubClient(), SENDER)); }); beforeEach(stubClient); diff --git a/test/components/views/messages/MBeaconBody-test.tsx b/test/components/views/messages/MBeaconBody-test.tsx index 694df7f24a4..aa1da83e508 100644 --- a/test/components/views/messages/MBeaconBody-test.tsx +++ b/test/components/views/messages/MBeaconBody-test.tsx @@ -25,6 +25,7 @@ import { EventType, Relations, M_BEACON, + Room, } from "matrix-js-sdk/src/matrix"; import MBeaconBody from "../../../../src/components/views/messages/MBeaconBody"; @@ -304,10 +305,11 @@ describe("", () => { const redactionEvent = new MatrixEvent({ type: EventType.RoomRedaction, content: { reason: "test reason" } }); - const setupRoomWithBeacon = (beaconInfoEvent: MatrixEvent, locationEvents: MatrixEvent[] = []) => { + const setupRoomWithBeacon = (beaconInfoEvent: MatrixEvent, locationEvents: MatrixEvent[] = []): Room => { const room = makeRoomWithStateEvents([beaconInfoEvent], { roomId, mockClient }); const beaconInstance = room.currentState.beacons.get(getBeaconInfoIdentifier(beaconInfoEvent))!; beaconInstance.addLocations(locationEvents); + return room; }; const mockGetRelationsForEvent = (locationEvents: MatrixEvent[] = []) => { const relations = new Relations(RelationType.Reference, M_BEACON.name, mockClient); @@ -320,12 +322,12 @@ describe("", () => { it("does nothing when getRelationsForEvent is falsy", () => { const { beaconInfoEvent, location1, location2 } = makeEvents(); - setupRoomWithBeacon(beaconInfoEvent, [location1, location2]); + const room = setupRoomWithBeacon(beaconInfoEvent, [location1, location2]); getComponent({ mxEvent: beaconInfoEvent }); act(() => { - beaconInfoEvent.makeRedacted(redactionEvent); + beaconInfoEvent.makeRedacted(redactionEvent, room); }); // no error, no redactions @@ -349,13 +351,13 @@ describe("", () => { it("does nothing when beacon has no related locations", async () => { const { beaconInfoEvent } = makeEvents(); // no locations - setupRoomWithBeacon(beaconInfoEvent, []); + const room = setupRoomWithBeacon(beaconInfoEvent, []); const getRelationsForEvent = await mockGetRelationsForEvent(); getComponent({ mxEvent: beaconInfoEvent, getRelationsForEvent }); act(() => { - beaconInfoEvent.makeRedacted(redactionEvent); + beaconInfoEvent.makeRedacted(redactionEvent, room); }); expect(getRelationsForEvent).toHaveBeenCalledWith( @@ -368,14 +370,14 @@ describe("", () => { it("redacts related locations on beacon redaction", async () => { const { beaconInfoEvent, location1, location2 } = makeEvents(); - setupRoomWithBeacon(beaconInfoEvent, [location1, location2]); + const room = setupRoomWithBeacon(beaconInfoEvent, [location1, location2]); const getRelationsForEvent = await mockGetRelationsForEvent([location1, location2]); getComponent({ mxEvent: beaconInfoEvent, getRelationsForEvent }); act(() => { - beaconInfoEvent.makeRedacted(redactionEvent); + beaconInfoEvent.makeRedacted(redactionEvent, room); }); expect(getRelationsForEvent).toHaveBeenCalledWith( diff --git a/test/components/views/messages/MPollEndBody-test.tsx b/test/components/views/messages/MPollEndBody-test.tsx index 4585f4d813d..f972e40bfd5 100644 --- a/test/components/views/messages/MPollEndBody-test.tsx +++ b/test/components/views/messages/MPollEndBody-test.tsx @@ -96,7 +96,7 @@ describe("", () => { mockClient.relations.mockResolvedValue({ events: [], }); - mockClient.fetchRoomEvent.mockResolvedValue(pollStartEvent.toJSON()); + mockClient.fetchRoomEvent.mockResolvedValue(pollStartEvent.getEffectiveEvent()); }); afterEach(() => { diff --git a/test/components/views/messages/MessageActionBar-test.tsx b/test/components/views/messages/MessageActionBar-test.tsx index 8f2fbe02a03..33d1f0d8eed 100644 --- a/test/components/views/messages/MessageActionBar-test.tsx +++ b/test/components/views/messages/MessageActionBar-test.tsx @@ -46,6 +46,14 @@ jest.mock("../../../../src/dispatcher/dispatcher"); describe("", () => { const userId = "@alice:server.org"; const roomId = "!room:server.org"; + + const client = getMockClientWithEventEmitter({ + ...mockClientMethodsUser(userId), + ...mockClientMethodsEvents(), + getRoom: jest.fn(), + }); + const room = new Room(roomId, client, userId); + const alicesMessageEvent = new MatrixEvent({ type: EventType.RoomMessage, sender: userId, @@ -72,13 +80,7 @@ describe("", () => { type: EventType.RoomMessage, sender: userId, }); - redactedEvent.makeRedacted(redactedEvent); - - const client = getMockClientWithEventEmitter({ - ...mockClientMethodsUser(userId), - ...mockClientMethodsEvents(), - getRoom: jest.fn(), - }); + redactedEvent.makeRedacted(redactedEvent, room); const localStorageMock = (() => { let store: Record = {}; @@ -98,7 +100,6 @@ describe("", () => { writable: true, }); - const room = new Room(roomId, client, userId); jest.spyOn(room, "getPendingEvents").mockReturnValue([]); client.getRoom.mockReturnValue(room); diff --git a/test/components/views/right_panel/UserInfo-test.tsx b/test/components/views/right_panel/UserInfo-test.tsx index 789ae075bf9..5130a2bcdde 100644 --- a/test/components/views/right_panel/UserInfo-test.tsx +++ b/test/components/views/right_panel/UserInfo-test.tsx @@ -933,12 +933,7 @@ describe("", () => { // firing the event will raise a dialog warning about self demotion, wait for this to appear then click on it await userEvent.click(await screen.findByText("Demote", { exact: true })); expect(mockClient.setPowerLevel).toHaveBeenCalledTimes(1); - expect(mockClient.setPowerLevel).toHaveBeenCalledWith( - mockRoom.roomId, - defaultMember.userId, - changedPowerLevel, - powerLevelEvent, - ); + expect(mockClient.setPowerLevel).toHaveBeenCalledWith(mockRoom.roomId, defaultMember.userId, changedPowerLevel); }); }); diff --git a/test/createRoom-test.ts b/test/createRoom-test.ts index 91b274c6df7..eeca9532698 100644 --- a/test/createRoom-test.ts +++ b/test/createRoom-test.ts @@ -70,7 +70,7 @@ describe("createRoom", () => { // widget should be immutable for admins expect(widgetPower).toBeGreaterThan(100); // and we should have been reset back to admin - expect(client.setPowerLevel).toHaveBeenCalledWith(roomId, userId, 100, null); + expect(client.setPowerLevel).toHaveBeenCalledWith(roomId, userId, 100); }); it("sets up Element video rooms correctly", async () => { @@ -99,7 +99,7 @@ describe("createRoom", () => { // call should be immutable for admins expect(callPower).toBeGreaterThan(100); // and we should have been reset back to admin - expect(client.setPowerLevel).toHaveBeenCalledWith(roomId, userId, 100, null); + expect(client.setPowerLevel).toHaveBeenCalledWith(roomId, userId, 100); }); it("doesn't create calls in non-video-rooms", async () => { diff --git a/test/stores/room-list/previews/VoiceBroadcastPreview-test.ts b/test/stores/room-list/previews/VoiceBroadcastPreview-test.ts index ccffdeaa76d..86ab73aa8c4 100644 --- a/test/stores/room-list/previews/VoiceBroadcastPreview-test.ts +++ b/test/stores/room-list/previews/VoiceBroadcastPreview-test.ts @@ -14,9 +14,11 @@ See the License for the specific language governing permissions and limitations under the License. */ +import { Room } from "matrix-js-sdk/src/matrix"; + import { VoiceBroadcastPreview } from "../../../../src/stores/room-list/previews/VoiceBroadcastPreview"; import { VoiceBroadcastInfoState } from "../../../../src/voice-broadcast"; -import { mkEvent } from "../../../test-utils"; +import { mkEvent, stubClient } from "../../../test-utils"; import { mkVoiceBroadcastInfoStateEvent } from "../../../voice-broadcast/utils/test-utils"; describe("VoiceBroadcastPreview.getTextFor", () => { @@ -51,7 +53,10 @@ describe("VoiceBroadcastPreview.getTextFor", () => { it("when passing a redacted broadcast stopped event, it should return null", () => { const event = mkVoiceBroadcastInfoStateEvent(roomId, VoiceBroadcastInfoState.Stopped, userId, deviceId); - event.makeRedacted(mkEvent({ event: true, content: {}, user: userId, type: "m.room.redaction" })); + event.makeRedacted( + mkEvent({ event: true, content: {}, user: userId, type: "m.room.redaction" }), + new Room(roomId, stubClient(), userId), + ); expect(preview.getTextFor(event)).toBeNull(); }); }); diff --git a/test/utils/EventUtils-test.ts b/test/utils/EventUtils-test.ts index fb88b7a21cf..dbfb7e9933b 100644 --- a/test/utils/EventUtils-test.ts +++ b/test/utils/EventUtils-test.ts @@ -73,7 +73,10 @@ describe("EventUtils", () => { type: EventType.RoomMessage, sender: userId, }); - redactedEvent.makeRedacted(redactedEvent); + redactedEvent.makeRedacted( + redactedEvent, + new Room(redactedEvent.getRoomId()!, mockClient, mockClient.getUserId()!), + ); const stateEvent = new MatrixEvent({ type: EventType.RoomTopic, diff --git a/test/utils/beacon/timeline-test.ts b/test/utils/beacon/timeline-test.ts index 716c5bf6b78..a5a4604e180 100644 --- a/test/utils/beacon/timeline-test.ts +++ b/test/utils/beacon/timeline-test.ts @@ -14,10 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { EventType, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { EventType, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; import { shouldDisplayAsBeaconTile } from "../../../src/utils/beacon/timeline"; -import { makeBeaconInfoEvent } from "../../test-utils"; +import { makeBeaconInfoEvent, stubClient } from "../../test-utils"; describe("shouldDisplayAsBeaconTile", () => { const userId = "@user:server"; @@ -26,7 +26,7 @@ describe("shouldDisplayAsBeaconTile", () => { const notLiveBeacon = makeBeaconInfoEvent(userId, roomId, { isLive: false }); const memberEvent = new MatrixEvent({ type: EventType.RoomMember }); const redactedBeacon = makeBeaconInfoEvent(userId, roomId, { isLive: false }); - redactedBeacon.makeRedacted(redactedBeacon); + redactedBeacon.makeRedacted(redactedBeacon, new Room(roomId, stubClient(), userId)); it("returns true for a beacon with live property set to true", () => { expect(shouldDisplayAsBeaconTile(liveBeacon)).toBe(true); diff --git a/test/voice-broadcast/models/VoiceBroadcastPlayback-test.tsx b/test/voice-broadcast/models/VoiceBroadcastPlayback-test.tsx index 1c7e6b66c12..85f14fbfa2f 100644 --- a/test/voice-broadcast/models/VoiceBroadcastPlayback-test.tsx +++ b/test/voice-broadcast/models/VoiceBroadcastPlayback-test.tsx @@ -454,7 +454,7 @@ describe("VoiceBroadcastPlayback", () => { describe("and the info event is deleted", () => { beforeEach(() => { - infoEvent.makeRedacted(new MatrixEvent({})); + infoEvent.makeRedacted(new MatrixEvent({}), room); }); it("should stop and destroy the playback", () => { From ef2bd7ae0439493a3b0616b8ea1474a133996cb7 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 25 Mar 2024 12:48:48 +0000 Subject: [PATCH 061/235] Improve types for `sendEvent` (#12335) --- playwright/pages/client.ts | 11 ++++- src/@types/matrix-js-sdk.d.ts | 34 +++++++++++++- src/ContentMessages.ts | 2 +- src/components/structures/MatrixChat.tsx | 3 +- .../views/dialogs/EndPollDialog.tsx | 8 +++- .../views/dialogs/ForwardDialog.tsx | 9 ++-- .../views/dialogs/ReportEventDialog.tsx | 25 ++++++++-- .../views/dialogs/devtools/Event.tsx | 8 ++-- .../views/elements/PollCreateDialog.tsx | 5 +- .../views/emojipicker/ReactionPicker.tsx | 2 +- .../views/location/shareLocation.ts | 4 +- src/components/views/messages/MPollBody.tsx | 21 ++++++--- .../views/messages/ReactionsRowButton.tsx | 9 ++-- .../views/rooms/EditMessageComposer.tsx | 31 ++++++++----- .../views/rooms/SendMessageComposer.tsx | 9 ++-- .../utils/createMessageContent.ts | 7 +-- .../utils/isContentModified.ts | 14 ++++-- .../rooms/wysiwyg_composer/utils/message.ts | 8 ++-- src/editor/commands.tsx | 7 +-- src/slash-commands/interface.ts | 4 +- src/stores/widgets/StopGapWidgetDriver.ts | 22 ++++++--- src/utils/createVoiceMessageContent.ts | 5 +- .../models/VoiceBroadcastRecording.ts | 4 +- .../views/elements/PollCreateDialog-test.tsx | 5 +- .../views/rooms/EditMessageComposer-test.tsx | 46 +++++++++++-------- .../wysiwyg_composer/utils/message-test.ts | 7 ++- 26 files changed, 210 insertions(+), 100 deletions(-) diff --git a/playwright/pages/client.ts b/playwright/pages/client.ts index c10c050d9f8..94ee5d88130 100644 --- a/playwright/pages/client.ts +++ b/playwright/pages/client.ts @@ -32,7 +32,9 @@ import type { UploadOpts, Upload, StateEvents, + TimelineEvents, } from "matrix-js-sdk/src/matrix"; +import type { RoomMessageEventContent } from "matrix-js-sdk/src/types"; import { Credentials } from "../plugins/homeserver"; export class Client { @@ -98,7 +100,12 @@ export class Client { const client = await this.prepareClient(); return client.evaluate( async (client, { roomId, threadId, eventType, content }) => { - return client.sendEvent(roomId, threadId, eventType, content); + return client.sendEvent( + roomId, + threadId, + eventType as keyof TimelineEvents, + content as TimelineEvents[keyof TimelineEvents], + ); }, { roomId, threadId, eventType, content }, ); @@ -125,7 +132,7 @@ export class Client { const client = await this.prepareClient(); return client.evaluate( (client, { roomId, content, threadId }) => { - return client.sendMessage(roomId, threadId, content); + return client.sendMessage(roomId, threadId, content as RoomMessageEventContent); }, { roomId, diff --git a/src/@types/matrix-js-sdk.d.ts b/src/@types/matrix-js-sdk.d.ts index 4a32ee0f371..a58eea55bc9 100644 --- a/src/@types/matrix-js-sdk.d.ts +++ b/src/@types/matrix-js-sdk.d.ts @@ -19,8 +19,9 @@ import type { BLURHASH_FIELD } from "../utils/image-media"; import type { JitsiCallMemberEventType, JitsiCallMemberContent } from "../call-types"; import type { ILayoutStateEvent, WIDGET_LAYOUT_EVENT_TYPE } from "../stores/widgets/types"; import type { VoiceBroadcastInfoEventContent, VoiceBroadcastInfoEventType } from "../voice-broadcast/types"; +import type { EncryptedFile } from "matrix-js-sdk/src/types"; -// Matrix JS SDK extensions +// Extend Matrix JS SDK types via Typescript declaration merging to support unspecced event fields and types declare module "matrix-js-sdk/src/types" { export interface FileInfo { /** @@ -50,4 +51,35 @@ declare module "matrix-js-sdk/src/types" { }; "m.room.bot.options": unknown; } + + export interface TimelineEvents { + "io.element.performance_metric": { + "io.element.performance_metrics": { + forEventId: string; + responseTs: number; + kind: "send_time"; + }; + }; + } + + export interface AudioContent { + // MSC1767 + Ideals of MSC2516 as MSC3245 + // https://github.com/matrix-org/matrix-doc/pull/3245 + "org.matrix.msc1767.text"?: string; + "org.matrix.msc1767.file"?: { + url?: string; + file?: EncryptedFile; + name: string; + mimetype: string; + size: number; + }; + "org.matrix.msc1767.audio"?: { + duration: number; + // https://github.com/matrix-org/matrix-doc/pull/3246 + waveform?: number[]; + }; + "org.matrix.msc3245.voice"?: {}; + + "io.element.voice_broadcast_chunk"?: { sequence: number }; + } } diff --git a/src/ContentMessages.ts b/src/ContentMessages.ts index b0f29ba044d..79990956812 100644 --- a/src/ContentMessages.ts +++ b/src/ContentMessages.ts @@ -622,7 +622,7 @@ export default class ContentMessages { if (upload.cancelled) throw new UploadCanceledError(); const threadId = relation?.rel_type === THREAD_RELATION_TYPE.name ? relation.event_id : null; - const response = await matrixClient.sendMessage(roomId, threadId ?? null, content); + const response = await matrixClient.sendMessage(roomId, threadId ?? null, content as MediaEventContent); if (SettingsStore.getValue("Performance.addSendMessageTimingMetadata")) { sendRoundTripMetric(matrixClient, roomId, response.event_id); diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 5184553d1c6..2cf41215a7d 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -26,6 +26,7 @@ import { RoomType, SyncStateData, SyncState, + TimelineEvents, } from "matrix-js-sdk/src/matrix"; import { defer, IDeferred, QueryDict } from "matrix-js-sdk/src/utils"; import { logger } from "matrix-js-sdk/src/logger"; @@ -1930,7 +1931,7 @@ export default class MatrixChat extends React.PureComponent { const cli = MatrixClientPeg.get(); if (!cli) return; - cli.sendEvent(roomId, event.getType(), event.getContent()).then(() => { + cli.sendEvent(roomId, event.getType() as keyof TimelineEvents, event.getContent()).then(() => { dis.dispatch({ action: "message_sent" }); }); } diff --git a/src/components/views/dialogs/EndPollDialog.tsx b/src/components/views/dialogs/EndPollDialog.tsx index cc68e80191d..6d1abc4a335 100644 --- a/src/components/views/dialogs/EndPollDialog.tsx +++ b/src/components/views/dialogs/EndPollDialog.tsx @@ -15,7 +15,7 @@ limitations under the License. */ import React from "react"; -import { MatrixEvent, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { MatrixEvent, MatrixClient, TimelineEvents } from "matrix-js-sdk/src/matrix"; import { PollEndEvent } from "matrix-js-sdk/src/extensible_events_v1/PollEndEvent"; import { _t } from "../../../languageHandler"; @@ -51,7 +51,11 @@ export default class EndPollDialog extends React.Component { const endEvent = PollEndEvent.from(this.props.event.getId()!, message).serialize(); - await this.props.matrixClient.sendEvent(this.props.event.getRoomId()!, endEvent.type, endEvent.content); + await this.props.matrixClient.sendEvent( + this.props.event.getRoomId()!, + endEvent.type as keyof TimelineEvents, + endEvent.content as TimelineEvents[keyof TimelineEvents], + ); } catch (e) { console.error("Failed to submit poll response event:", e); Modal.createDialog(ErrorDialog, { diff --git a/src/components/views/dialogs/ForwardDialog.tsx b/src/components/views/dialogs/ForwardDialog.tsx index a72b2b6296c..d59e23fe4cb 100644 --- a/src/components/views/dialogs/ForwardDialog.tsx +++ b/src/components/views/dialogs/ForwardDialog.tsx @@ -28,6 +28,7 @@ import { LocationAssetType, M_TIMESTAMP, M_BEACON, + TimelineEvents, } from "matrix-js-sdk/src/matrix"; import { KnownMembership } from "matrix-js-sdk/src/types"; @@ -80,10 +81,10 @@ interface IProps { onFinished(): void; } -interface IEntryProps { +interface IEntryProps { room: Room; - type: EventType | string; - content: IContent; + type: K; + content: TimelineEvents[K]; matrixClient: MatrixClient; onFinished(success: boolean): void; } @@ -95,7 +96,7 @@ enum SendState { Failed, } -const Entry: React.FC = ({ room, type, content, matrixClient: cli, onFinished }) => { +const Entry: React.FC> = ({ room, type, content, matrixClient: cli, onFinished }) => { const [sendState, setSendState] = useState(SendState.CanSend); const [onFocus, isActive, ref] = useRovingTabIndex(); diff --git a/src/components/views/dialogs/ReportEventDialog.tsx b/src/components/views/dialogs/ReportEventDialog.tsx index 52859c55f6a..0e0b231b3fe 100644 --- a/src/components/views/dialogs/ReportEventDialog.tsx +++ b/src/components/views/dialogs/ReportEventDialog.tsx @@ -32,6 +32,12 @@ import Field from "../elements/Field"; import Spinner from "../elements/Spinner"; import LabelledCheckbox from "../elements/LabelledCheckbox"; +declare module "matrix-js-sdk/src/types" { + interface TimelineEvents { + [ABUSE_EVENT_TYPE]: AbuseEventContent; + } +} + interface IProps { mxEvent: MatrixEvent; onFinished(report?: boolean): void; @@ -56,7 +62,16 @@ const MODERATED_BY_STATE_EVENT_TYPE = [ */ ]; -const ABUSE_EVENT_TYPE = "org.matrix.msc3215.abuse.report"; +export const ABUSE_EVENT_TYPE = "org.matrix.msc3215.abuse.report"; + +interface AbuseEventContent { + event_id: string; + room_id: string; + moderated_by_id: string; + nature?: ExtendedNature; + reporter: string; + comment: string; +} // Standard abuse natures. enum Nature { @@ -250,13 +265,13 @@ export default class ReportEventDialog extends React.Component { } await client.sendEvent(dmRoomId, ABUSE_EVENT_TYPE, { - event_id: ev.getId(), - room_id: ev.getRoomId(), + event_id: ev.getId()!, + room_id: ev.getRoomId()!, moderated_by_id: this.moderation.moderationRoomId, nature, - reporter: client.getUserId(), + reporter: client.getUserId()!, comment: this.state.reason.trim(), - }); + } satisfies AbuseEventContent); } else { // Report to homeserver admin through the dedicated Matrix API. await client.reportEvent(ev.getRoomId()!, ev.getId()!, -100, this.state.reason.trim()); diff --git a/src/components/views/dialogs/devtools/Event.tsx b/src/components/views/dialogs/devtools/Event.tsx index 4b85dbe3f6f..e1e0e469a36 100644 --- a/src/components/views/dialogs/devtools/Event.tsx +++ b/src/components/views/dialogs/devtools/Event.tsx @@ -16,7 +16,7 @@ limitations under the License. */ import React, { ChangeEvent, ReactNode, useContext, useMemo, useRef, useState } from "react"; -import { IContent, MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { IContent, MatrixEvent, TimelineEvents } from "matrix-js-sdk/src/matrix"; import { _t, _td, TranslationKey } from "../../../../languageHandler"; import Field from "../../elements/Field"; @@ -32,7 +32,7 @@ export const stringify = (object: object): string => { interface IEventEditorProps extends Pick { fieldDefs: IFieldDef[]; // immutable defaultContent?: string; - onSend(fields: string[], content?: IContent): Promise; + onSend(fields: string[], content: IContent): Promise; } interface IFieldDef { @@ -180,8 +180,8 @@ export const TimelineEventEditor: React.FC = ({ mxEvent, onBack }) const fields = useMemo(() => [eventTypeField(mxEvent?.getType())], [mxEvent]); - const onSend = ([eventType]: string[], content?: IContent): Promise => { - return cli.sendEvent(context.room.roomId, eventType, content || {}); + const onSend = ([eventType]: string[], content: TimelineEvents[keyof TimelineEvents]): Promise => { + return cli.sendEvent(context.room.roomId, eventType as keyof TimelineEvents, content); }; let defaultContent: string | undefined; diff --git a/src/components/views/elements/PollCreateDialog.tsx b/src/components/views/elements/PollCreateDialog.tsx index 5049a3b0162..0fd1b7c21e9 100644 --- a/src/components/views/elements/PollCreateDialog.tsx +++ b/src/components/views/elements/PollCreateDialog.tsx @@ -23,6 +23,7 @@ import { M_POLL_KIND_UNDISCLOSED, M_POLL_START, IPartialEvent, + TimelineEvents, } from "matrix-js-sdk/src/matrix"; import { PollStartEvent } from "matrix-js-sdk/src/extensible_events_v1/PollStartEvent"; @@ -166,8 +167,8 @@ export default class PollCreateDialog extends ScrollableBaseModal { MatrixClientPeg.safeGet().sendEvent(this.props.mxEvent.getRoomId()!, EventType.Reaction, { "m.relates_to": { rel_type: RelationType.Annotation, - event_id: this.props.mxEvent.getId(), + event_id: this.props.mxEvent.getId()!, key: reaction, }, }); diff --git a/src/components/views/location/shareLocation.ts b/src/components/views/location/shareLocation.ts index cf44a77c739..42a8e25c5b9 100644 --- a/src/components/views/location/shareLocation.ts +++ b/src/components/views/location/shareLocation.ts @@ -16,13 +16,13 @@ limitations under the License. import { MatrixClient, - IContent, IEventRelation, MatrixError, THREAD_RELATION_TYPE, ContentHelpers, LocationAssetType, } from "matrix-js-sdk/src/matrix"; +import { RoomMessageEventContent } from "matrix-js-sdk/src/types"; import { logger } from "matrix-js-sdk/src/logger"; import { _t } from "../../../languageHandler"; @@ -146,7 +146,7 @@ export const shareLocation = timestamp, undefined, assetType, - ) as IContent; + ) as RoomMessageEventContent; await doMaybeLocalRoomAction( roomId, (actualRoomId: string) => client.sendMessage(actualRoomId, threadId, content), diff --git a/src/components/views/messages/MPollBody.tsx b/src/components/views/messages/MPollBody.tsx index fcf92c7f627..d777ed9d779 100644 --- a/src/components/views/messages/MPollBody.tsx +++ b/src/components/views/messages/MPollBody.tsx @@ -25,6 +25,7 @@ import { M_POLL_KIND_DISCLOSED, M_POLL_RESPONSE, M_POLL_START, + TimelineEvents, } from "matrix-js-sdk/src/matrix"; import { RelatedRelations } from "matrix-js-sdk/src/models/related-relations"; import { PollStartEvent, PollAnswerSubevent } from "matrix-js-sdk/src/extensible_events_v1/PollStartEvent"; @@ -225,14 +226,20 @@ export default class MPollBody extends React.Component { const response = PollResponseEvent.from([answerId], this.props.mxEvent.getId()!).serialize(); - this.context.sendEvent(this.props.mxEvent.getRoomId()!, response.type, response.content).catch((e: any) => { - console.error("Failed to submit poll response event:", e); - - Modal.createDialog(ErrorDialog, { - title: _t("poll|error_voting_title"), - description: _t("poll|error_voting_description"), + this.context + .sendEvent( + this.props.mxEvent.getRoomId()!, + response.type as keyof TimelineEvents, + response.content as TimelineEvents[keyof TimelineEvents], + ) + .catch((e: any) => { + console.error("Failed to submit poll response event:", e); + + Modal.createDialog(ErrorDialog, { + title: _t("poll|error_voting_title"), + description: _t("poll|error_voting_description"), + }); }); - }); this.setState({ selected: answerId }); } diff --git a/src/components/views/messages/ReactionsRowButton.tsx b/src/components/views/messages/ReactionsRowButton.tsx index 99a1a6088b6..2737212d33b 100644 --- a/src/components/views/messages/ReactionsRowButton.tsx +++ b/src/components/views/messages/ReactionsRowButton.tsx @@ -16,7 +16,7 @@ limitations under the License. import React from "react"; import classNames from "classnames"; -import { MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { EventType, MatrixEvent, RelationType } from "matrix-js-sdk/src/matrix"; import { mediaFromMxc } from "../../../customisations/Media"; import { _t } from "../../../languageHandler"; @@ -26,6 +26,7 @@ import ReactionsRowButtonTooltip from "./ReactionsRowButtonTooltip"; import AccessibleButton from "../elements/AccessibleButton"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; import { REACTION_SHORTCODE_KEY } from "./ReactionsRow"; + export interface IProps { // The event we're displaying reactions for mxEvent: MatrixEvent; @@ -62,10 +63,10 @@ export default class ReactionsRowButton extends React.PureComponent, "m.relates_to"> = { "msgtype": newContent.msgtype, "body": `${plainPrefix} * ${body}`, "m.new_content": newContent, @@ -111,7 +116,7 @@ export function createEditContent(model: EditorModel, editedEvent: MatrixEvent, attachMentions(editedEvent.sender!.userId, contentBody, model, replyToEvent, editedEvent.getContent()); attachRelation(contentBody, { rel_type: "m.replace", event_id: editedEvent.getId() }); - return contentBody; + return contentBody as RoomMessageEventContent; } interface IEditMessageComposerProps extends MatrixClientProps { @@ -142,7 +147,7 @@ class EditMessageComposer extends React.Component(); if ( oldContent["msgtype"] === newContent["msgtype"] && oldContent["body"] === newContent["body"] && - oldContent["format"] === newContent["format"] && - oldContent["formatted_body"] === newContent["formatted_body"] + (oldContent as RoomMessageTextEventContent)["format"] === + (newContent as RoomMessageTextEventContent)["format"] && + (oldContent as RoomMessageTextEventContent)["formatted_body"] === + (newContent as RoomMessageTextEventContent)["formatted_body"] ) { return false; } @@ -318,7 +325,7 @@ class EditMessageComposer extends React.Component { +): Promise { const isEditing = isMatrixEvent(editedEvent); const isReply = isEditing ? Boolean(editedEvent.replyEventId) : isMatrixEvent(replyToEvent); const isReplyAndEditing = isEditing && isReply; @@ -100,10 +101,10 @@ export async function createMessageContent( const bodyPrefix = (isReplyAndEditing && getTextReplyFallback(editedEvent)) || ""; const formattedBodyPrefix = (isReplyAndEditing && getHtmlReplyFallback(editedEvent)) || ""; - const content: IContent = { + const content = { msgtype: isEmote ? MsgType.Emote : MsgType.Text, body: isEditing ? `${bodyPrefix} * ${body}` : body, - }; + } as RoomMessageTextEventContent & ReplacementEvent; // TODO markdown support diff --git a/src/components/views/rooms/wysiwyg_composer/utils/isContentModified.ts b/src/components/views/rooms/wysiwyg_composer/utils/isContentModified.ts index 0def3862781..62af83b8268 100644 --- a/src/components/views/rooms/wysiwyg_composer/utils/isContentModified.ts +++ b/src/components/views/rooms/wysiwyg_composer/utils/isContentModified.ts @@ -14,18 +14,22 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { IContent } from "matrix-js-sdk/src/matrix"; +import { RoomMessageEventContent, RoomMessageTextEventContent } from "matrix-js-sdk/src/types"; import EditorStateTransfer from "../../../../../utils/EditorStateTransfer"; -export function isContentModified(newContent: IContent, editorStateTransfer: EditorStateTransfer): boolean { +export function isContentModified( + newContent: RoomMessageEventContent, + editorStateTransfer: EditorStateTransfer, +): boolean { // if nothing has changed then bail - const oldContent = editorStateTransfer.getEvent().getContent(); + const oldContent = editorStateTransfer.getEvent().getContent(); if ( oldContent["msgtype"] === newContent["msgtype"] && oldContent["body"] === newContent["body"] && - oldContent["format"] === newContent["format"] && - oldContent["formatted_body"] === newContent["formatted_body"] + (oldContent)["format"] === (newContent)["format"] && + (oldContent)["formatted_body"] === + (newContent)["formatted_body"] ) { return false; } diff --git a/src/components/views/rooms/wysiwyg_composer/utils/message.ts b/src/components/views/rooms/wysiwyg_composer/utils/message.ts index a3c625048bc..3122a9d2ef0 100644 --- a/src/components/views/rooms/wysiwyg_composer/utils/message.ts +++ b/src/components/views/rooms/wysiwyg_composer/utils/message.ts @@ -16,13 +16,13 @@ limitations under the License. import { Composer as ComposerEvent } from "@matrix-org/analytics-events/types/typescript/Composer"; import { - IContent, IEventRelation, MatrixEvent, ISendEventResponse, MatrixClient, THREAD_RELATION_TYPE, } from "matrix-js-sdk/src/matrix"; +import { RoomMessageEventContent } from "matrix-js-sdk/src/types"; import { PosthogAnalytics } from "../../../../../PosthogAnalytics"; import SettingsStore from "../../../../../settings/SettingsStore"; @@ -82,7 +82,7 @@ export async function sendMessage( }*/ PosthogAnalytics.instance.trackEvent(posthogEvent); - let content: IContent | null = null; + let content: RoomMessageEventContent | null = null; // Slash command handling here approximates what can be found in SendMessageComposer.sendMessage() // but note that the /me and // special cases are handled by the call to createMessageContent @@ -145,7 +145,7 @@ export async function sendMessage( const prom = doMaybeLocalRoomAction( roomId, - (actualRoomId: string) => mxClient.sendMessage(actualRoomId, threadId, content as IContent), + (actualRoomId: string) => mxClient.sendMessage(actualRoomId, threadId, content!), mxClient, ); @@ -218,7 +218,7 @@ export async function editMessage( this.editorRef.current?.replaceEmoticon(position, REGEX_EMOTICON); }*/ const editContent = await createMessageContent(html, true, { editedEvent }); - const newContent = editContent["m.new_content"]; + const newContent = editContent["m.new_content"]!; const shouldSend = true; diff --git a/src/editor/commands.tsx b/src/editor/commands.tsx index 52ab881693b..27f64f32be4 100644 --- a/src/editor/commands.tsx +++ b/src/editor/commands.tsx @@ -16,7 +16,8 @@ limitations under the License. import React from "react"; import { logger } from "matrix-js-sdk/src/logger"; -import { IContent, MatrixClient } from "matrix-js-sdk/src/matrix"; +import { MatrixClient } from "matrix-js-sdk/src/matrix"; +import { RoomMessageEventContent } from "matrix-js-sdk/src/types"; import EditorModel from "./model"; import { Type } from "./parts"; @@ -63,9 +64,9 @@ export async function runSlashCommand( args: string | undefined, roomId: string, threadId: string | null, -): Promise<[content: IContent | null, success: boolean]> { +): Promise<[content: RoomMessageEventContent | null, success: boolean]> { const result = cmd.run(matrixClient, roomId, threadId, args); - let messageContent: IContent | null = null; + let messageContent: RoomMessageEventContent | null = null; let error: any = result.error; if (result.promise) { try { diff --git a/src/slash-commands/interface.ts b/src/slash-commands/interface.ts index 94e95126c04..8efc2b3ce9b 100644 --- a/src/slash-commands/interface.ts +++ b/src/slash-commands/interface.ts @@ -17,7 +17,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { IContent } from "matrix-js-sdk/src/matrix"; +import { RoomMessageEventContent } from "matrix-js-sdk/src/types"; import { _td } from "../languageHandler"; import { XOR } from "../@types/common"; @@ -31,4 +31,4 @@ export const CommandCategories = { other: _td("slash_command|category_other"), }; -export type RunResult = XOR<{ error: Error }, { promise: Promise }>; +export type RunResult = XOR<{ error: Error }, { promise: Promise }>; diff --git a/src/stores/widgets/StopGapWidgetDriver.ts b/src/stores/widgets/StopGapWidgetDriver.ts index f80cd3f8410..905b2c151c7 100644 --- a/src/stores/widgets/StopGapWidgetDriver.ts +++ b/src/stores/widgets/StopGapWidgetDriver.ts @@ -44,6 +44,7 @@ import { Direction, THREAD_RELATION_TYPE, StateEvents, + TimelineEvents, } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; import { @@ -248,13 +249,13 @@ export class StopGapWidgetDriver extends WidgetDriver { stateKey?: string, targetRoomId?: string, ): Promise; - public async sendEvent( - eventType: Exclude, - content: IContent, + public async sendEvent( + eventType: K, + content: TimelineEvents[K], stateKey: null, targetRoomId?: string, ): Promise; - public async sendEvent( + public async sendEvent( eventType: string, content: IContent, stateKey?: string | null, @@ -268,13 +269,22 @@ export class StopGapWidgetDriver extends WidgetDriver { let r: { event_id: string } | null; if (stateKey !== null) { // state event - r = await client.sendStateEvent(roomId, eventType as K, content as StateEvents[K], stateKey); + r = await client.sendStateEvent( + roomId, + eventType as keyof StateEvents, + content as StateEvents[keyof StateEvents], + stateKey, + ); } else if (eventType === EventType.RoomRedaction) { // special case: extract the `redacts` property and call redact r = await client.redactEvent(roomId, content["redacts"]); } else { // message event - r = await client.sendEvent(roomId, eventType, content); + r = await client.sendEvent( + roomId, + eventType as keyof TimelineEvents, + content as TimelineEvents[keyof TimelineEvents], + ); if (eventType === EventType.RoomMessage) { CHAT_EFFECTS.forEach((effect) => { diff --git a/src/utils/createVoiceMessageContent.ts b/src/utils/createVoiceMessageContent.ts index 28ba5befacc..06bd335389b 100644 --- a/src/utils/createVoiceMessageContent.ts +++ b/src/utils/createVoiceMessageContent.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { IContent, IEncryptedFile, MsgType } from "matrix-js-sdk/src/matrix"; +import { IEncryptedFile, MsgType } from "matrix-js-sdk/src/matrix"; +import { RoomMessageEventContent } from "matrix-js-sdk/src/types"; /** * @param {string} mxc MXC URL of the file @@ -31,7 +32,7 @@ export const createVoiceMessageContent = ( size: number, file?: IEncryptedFile, waveform?: number[], -): IContent => { +): RoomMessageEventContent => { return { "body": "Voice message", //"msgtype": "org.matrix.msc2516.voice", diff --git a/src/voice-broadcast/models/VoiceBroadcastRecording.ts b/src/voice-broadcast/models/VoiceBroadcastRecording.ts index bafb910b8ae..c36e3f75b3a 100644 --- a/src/voice-broadcast/models/VoiceBroadcastRecording.ts +++ b/src/voice-broadcast/models/VoiceBroadcastRecording.ts @@ -26,7 +26,7 @@ import { RelationType, TypedEventEmitter, } from "matrix-js-sdk/src/matrix"; -import { EncryptedFile } from "matrix-js-sdk/src/types"; +import { AudioContent, EncryptedFile } from "matrix-js-sdk/src/types"; import { ChunkRecordedPayload, @@ -387,7 +387,7 @@ export class VoiceBroadcastRecording rel_type: RelationType.Reference, event_id: this.infoEventId, }; - content["io.element.voice_broadcast_chunk"] = { + (content)["io.element.voice_broadcast_chunk"] = { sequence, }; diff --git a/test/components/views/elements/PollCreateDialog-test.tsx b/test/components/views/elements/PollCreateDialog-test.tsx index 930af8fc327..fe2e4fd6d50 100644 --- a/test/components/views/elements/PollCreateDialog-test.tsx +++ b/test/components/views/elements/PollCreateDialog-test.tsx @@ -25,6 +25,7 @@ import { M_TEXT, } from "matrix-js-sdk/src/matrix"; import { PollStartEvent } from "matrix-js-sdk/src/extensible_events_v1/PollStartEvent"; +import { ReplacementEvent } from "matrix-js-sdk/src/types"; import { getMockClientWithEventEmitter } from "../../../test-utils"; import { MatrixClientPeg } from "../../../../src/MatrixClientPeg"; @@ -273,7 +274,9 @@ describe("PollCreateDialog", () => { const [, , eventType, sentEventContent] = mockClient.sendEvent.mock.calls[0]; expect(M_POLL_START.matches(eventType)).toBeTruthy(); // didnt change - expect(sentEventContent["m.new_content"][M_POLL_START.name].kind).toEqual(M_POLL_KIND_DISCLOSED.name); + expect((sentEventContent as ReplacementEvent)["m.new_content"][M_POLL_START.name].kind).toEqual( + M_POLL_KIND_DISCLOSED.name, + ); }); }); diff --git a/test/components/views/rooms/EditMessageComposer-test.tsx b/test/components/views/rooms/EditMessageComposer-test.tsx index fce34299f69..d739fc6ad6a 100644 --- a/test/components/views/rooms/EditMessageComposer-test.tsx +++ b/test/components/views/rooms/EditMessageComposer-test.tsx @@ -18,6 +18,7 @@ import React from "react"; import { fireEvent, render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { Room } from "matrix-js-sdk/src/matrix"; +import { ReplacementEvent, RoomMessageEventContent } from "matrix-js-sdk/src/types"; import EditMessageComposerWithMatrixClient, { createEditContent, @@ -296,11 +297,12 @@ describe("", () => { fireEvent.click(screen.getByText("Save")); - const messageContent = mockClient.sendMessage.mock.calls[0][2]; + const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent & + ReplacementEvent; // both content.mentions and new_content.mentions are empty expect(messageContent["m.mentions"]).toEqual({}); - expect(messageContent["m.new_content"]["m.mentions"]).toEqual({}); + expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({}); }); it("should retain mentions in the original message that are not removed by the edit", async () => { @@ -312,12 +314,13 @@ describe("", () => { fireEvent.click(screen.getByText("Save")); - const messageContent = mockClient.sendMessage.mock.calls[0][2]; + const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent & + ReplacementEvent; // no new mentions were added, so nothing in top level mentions expect(messageContent["m.mentions"]).toEqual({}); // bob is still mentioned, charlie removed - expect(messageContent["m.new_content"]["m.mentions"]).toEqual({ + expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({ user_ids: ["@bob:server.org"], }); }); @@ -331,12 +334,13 @@ describe("", () => { fireEvent.click(screen.getByText("Save")); - const messageContent = mockClient.sendMessage.mock.calls[0][2]; + const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent & + ReplacementEvent; // no new mentions were added, so nothing in top level mentions expect(messageContent["m.mentions"]).toEqual({}); // bob is not longer mentioned in the edited message, so empty mentions in new_content - expect(messageContent["m.new_content"]["m.mentions"]).toEqual({}); + expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({}); }); it("should add mentions that were added in the edit", async () => { @@ -352,13 +356,14 @@ describe("", () => { fireEvent.click(screen.getByText("Save")); - const messageContent = mockClient.sendMessage.mock.calls[0][2]; + const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent & + ReplacementEvent; // new mention in the edit expect(messageContent["m.mentions"]).toEqual({ user_ids: ["@dan:server.org"], }); - expect(messageContent["m.new_content"]["m.mentions"]).toEqual({ + expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({ user_ids: ["@dan:server.org"], }); }); @@ -377,14 +382,15 @@ describe("", () => { fireEvent.click(screen.getByText("Save")); - const messageContent = mockClient.sendMessage.mock.calls[0][2]; + const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent & + ReplacementEvent; // new mention in the edit expect(messageContent["m.mentions"]).toEqual({ user_ids: ["@dan:server.org"], }); // all mentions in the edited version of the event - expect(messageContent["m.new_content"]["m.mentions"]).toEqual({ + expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({ user_ids: ["@bob:server.org", "@dan:server.org"], }); }); @@ -454,12 +460,13 @@ describe("", () => { fireEvent.click(screen.getByText("Save")); - const messageContent = mockClient.sendMessage.mock.calls[0][2]; + const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent & + ReplacementEvent; // no new mentions from edit expect(messageContent["m.mentions"]).toEqual({}); // edited reply still mentions the parent event sender - expect(messageContent["m.new_content"]["m.mentions"]).toEqual({ + expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({ user_ids: [originalEvent.getSender()], }); }); @@ -475,7 +482,8 @@ describe("", () => { fireEvent.click(screen.getByText("Save")); - const messageContent = mockClient.sendMessage.mock.calls[0][2]; + const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent & + ReplacementEvent; // new mention in edit expect(messageContent["m.mentions"]).toEqual({ @@ -483,7 +491,7 @@ describe("", () => { }); // edited reply still mentions the parent event sender // plus new mention @dan - expect(messageContent["m.new_content"]["m.mentions"]).toEqual({ + expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({ user_ids: [originalEvent.getSender(), "@dan:server.org"], }); }); @@ -496,13 +504,14 @@ describe("", () => { fireEvent.click(screen.getByText("Save")); - const messageContent = mockClient.sendMessage.mock.calls[0][2]; + const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent & + ReplacementEvent; // no mentions in edit expect(messageContent["m.mentions"]).toEqual({}); // edited reply still mentions the parent event sender // existing @bob mention removed - expect(messageContent["m.new_content"]["m.mentions"]).toEqual({ + expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({ user_ids: [originalEvent.getSender()], }); }); @@ -536,12 +545,13 @@ describe("", () => { fireEvent.click(screen.getByText("Save")); - const messageContent = mockClient.sendMessage.mock.calls[0][2]; + const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent & + ReplacementEvent; // no mentions in edit expect(messageContent["m.mentions"]).toEqual({}); // edited reply still mentions the parent event sender - expect(messageContent["m.new_content"]["m.mentions"]).toEqual({ + expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({ user_ids: [originalEvent.getSender()], }); }); diff --git a/test/components/views/rooms/wysiwyg_composer/utils/message-test.ts b/test/components/views/rooms/wysiwyg_composer/utils/message-test.ts index 58fc6b7184c..010c982f845 100644 --- a/test/components/views/rooms/wysiwyg_composer/utils/message-test.ts +++ b/test/components/views/rooms/wysiwyg_composer/utils/message-test.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { EventStatus, IEventRelation } from "matrix-js-sdk/src/matrix"; +import { EventStatus, IEventRelation, MsgType } from "matrix-js-sdk/src/matrix"; import { IRoomState } from "../../../../../../src/components/structures/RoomView"; import { editMessage, sendMessage } from "../../../../../../src/components/views/rooms/wysiwyg_composer/utils/message"; @@ -272,7 +272,10 @@ describe("message", () => { it("returns undefined when the command is not successful", async () => { // When const validCommand = "/spoiler"; - jest.spyOn(Commands, "runSlashCommand").mockResolvedValueOnce([{ content: "mock content" }, false]); + jest.spyOn(Commands, "runSlashCommand").mockResolvedValueOnce([ + { body: "mock content", msgtype: MsgType.Text }, + false, + ]); const result = await sendMessage(validCommand, true, { roomContext: defaultRoomContext, From 157ca48dff24bb89a1bb13f7f59feec83966fa1a Mon Sep 17 00:00:00 2001 From: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Date: Mon, 25 Mar 2024 17:44:45 +0000 Subject: [PATCH 062/235] Remove references to `matrix-js-sdk/src/crypto/verification` (#12365) All this stuff is deprecated and has better alternatives now. --- .eslintrc.js | 5 ----- playwright/e2e/crypto/utils.ts | 11 ++++++++--- src/MatrixClientPeg.ts | 9 ++++----- .../views/right_panel/VerificationPanel.tsx | 19 +++++++++---------- src/verification.ts | 4 ++-- .../views/right_panel/UserInfo-test.tsx | 10 +++++----- .../toasts/VerificationRequestToast-test.tsx | 5 +---- 7 files changed, 29 insertions(+), 34 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 74318ab70e3..14afc41c070 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -119,11 +119,6 @@ module.exports = { "!matrix-js-sdk/src/crypto/CrossSigning", "!matrix-js-sdk/src/crypto/recoverykey", "!matrix-js-sdk/src/crypto/dehydration", - "!matrix-js-sdk/src/crypto/verification", - "!matrix-js-sdk/src/crypto/verification/SAS", - "!matrix-js-sdk/src/crypto/verification/QRCode", - "!matrix-js-sdk/src/crypto/verification/request", - "!matrix-js-sdk/src/crypto/verification/request/VerificationRequest", "!matrix-js-sdk/src/oidc", "!matrix-js-sdk/src/oidc/discovery", "!matrix-js-sdk/src/oidc/authorize", diff --git a/playwright/e2e/crypto/utils.ts b/playwright/e2e/crypto/utils.ts index 51e07093435..d43e4c7f941 100644 --- a/playwright/e2e/crypto/utils.ts +++ b/playwright/e2e/crypto/utils.ts @@ -17,8 +17,13 @@ limitations under the License. import { type Page, expect, JSHandle } from "@playwright/test"; import type { CryptoEvent, ICreateRoomOpts, MatrixClient } from "matrix-js-sdk/src/matrix"; -import type { VerificationRequest, Verifier, EmojiMapping, VerifierEvent } from "matrix-js-sdk/src/crypto-api"; -import type { ISasEvent } from "matrix-js-sdk/src/crypto/verification/SAS"; +import type { + VerificationRequest, + Verifier, + EmojiMapping, + VerifierEvent, + ShowSasCallbacks, +} from "matrix-js-sdk/src/crypto-api"; import { Credentials, HomeserverInstance } from "../../plugins/homeserver"; import { Client } from "../../pages/client"; import { ElementAppPage } from "../../pages/ElementAppPage"; @@ -58,7 +63,7 @@ export function handleSasVerification(verifier: JSHandle): Promise((resolve) => { - const onShowSas = (event: ISasEvent) => { + const onShowSas = (event: ShowSasCallbacks) => { verifier.off("show_sas" as VerifierEvent, onShowSas); event.confirm(); resolve(event.sas.emoji); diff --git a/src/MatrixClientPeg.ts b/src/MatrixClientPeg.ts index 47585173904..a42903f46f3 100644 --- a/src/MatrixClientPeg.ts +++ b/src/MatrixClientPeg.ts @@ -29,9 +29,8 @@ import { RoomNameType, TokenRefreshFunction, } from "matrix-js-sdk/src/matrix"; +import { VerificationMethod } from "matrix-js-sdk/src/types"; import * as utils from "matrix-js-sdk/src/utils"; -import { verificationMethods } from "matrix-js-sdk/src/crypto"; -import { SHOW_QR_CODE_METHOD } from "matrix-js-sdk/src/crypto/verification/QRCode"; import { logger } from "matrix-js-sdk/src/logger"; import createMatrixClient from "./utils/createMatrixClient"; @@ -433,9 +432,9 @@ class MatrixClientPegClass implements IMatrixClientPeg { // the call arrives. iceCandidatePoolSize: 20, verificationMethods: [ - verificationMethods.SAS, - SHOW_QR_CODE_METHOD, - verificationMethods.RECIPROCATE_QR_CODE, + VerificationMethod.Sas, + VerificationMethod.ShowQrCode, + VerificationMethod.Reciprocate, ], identityServer: new IdentityAuthClient(), // These are always installed regardless of the labs flag so that cross-signing features diff --git a/src/components/views/right_panel/VerificationPanel.tsx b/src/components/views/right_panel/VerificationPanel.tsx index 2cc93fcb1a4..5e9a17a8c5f 100644 --- a/src/components/views/right_panel/VerificationPanel.tsx +++ b/src/components/views/right_panel/VerificationPanel.tsx @@ -15,18 +15,17 @@ limitations under the License. */ import React from "react"; -import { verificationMethods } from "matrix-js-sdk/src/crypto"; -import { SCAN_QR_CODE_METHOD } from "matrix-js-sdk/src/crypto/verification/QRCode"; import { + ShowQrCodeCallbacks, + ShowSasCallbacks, VerificationPhase as Phase, VerificationRequest, VerificationRequestEvent, - ShowQrCodeCallbacks, - ShowSasCallbacks, VerifierEvent, } from "matrix-js-sdk/src/crypto-api"; -import { RoomMember, Device, User } from "matrix-js-sdk/src/matrix"; +import { Device, RoomMember, User } from "matrix-js-sdk/src/matrix"; import { logger } from "matrix-js-sdk/src/logger"; +import { VerificationMethod } from "matrix-js-sdk/src/types"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; import VerificationQRCode from "../elements/crypto/VerificationQRCode"; @@ -87,8 +86,8 @@ export default class VerificationPanel extends React.PureComponent => { this.setState({ emojiButtonClicked: true }); - await this.props.request.startVerification(verificationMethods.SAS); + await this.props.request.startVerification(VerificationMethod.Sas); }; private onSasMatchesClick = (): void => { diff --git a/src/verification.ts b/src/verification.ts index 3b1938c5cac..64a9cf26186 100644 --- a/src/verification.ts +++ b/src/verification.ts @@ -15,7 +15,7 @@ limitations under the License. */ import { User, MatrixClient, RoomMember } from "matrix-js-sdk/src/matrix"; -import { verificationMethods as VerificationMethods } from "matrix-js-sdk/src/crypto"; +import { VerificationMethod } from "matrix-js-sdk/src/types"; import { CrossSigningKey, VerificationRequest } from "matrix-js-sdk/src/crypto-api"; import dis from "./dispatcher/dispatcher"; @@ -61,7 +61,7 @@ export async function verifyDevice(matrixClient: MatrixClient, user: User, devic const verificationRequestPromise = matrixClient.legacyDeviceVerification( user.userId, device.deviceId, - VerificationMethods.SAS, + VerificationMethod.Sas, ); setRightPanel({ member: user, verificationRequestPromise }); } else if (action === "legacy") { diff --git a/test/components/views/right_panel/UserInfo-test.tsx b/test/components/views/right_panel/UserInfo-test.tsx index 5130a2bcdde..b40146e609c 100644 --- a/test/components/views/right_panel/UserInfo-test.tsx +++ b/test/components/views/right_panel/UserInfo-test.tsx @@ -30,14 +30,14 @@ import { Device, } from "matrix-js-sdk/src/matrix"; import { KnownMembership } from "matrix-js-sdk/src/types"; +import { defer } from "matrix-js-sdk/src/utils"; +import { EventEmitter } from "events"; import { - Phase, + UserVerificationStatus, VerificationRequest, + VerificationPhase as Phase, VerificationRequestEvent, -} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; -import { defer } from "matrix-js-sdk/src/utils"; -import { EventEmitter } from "events"; -import { UserVerificationStatus } from "matrix-js-sdk/src/crypto-api"; +} from "matrix-js-sdk/src/crypto-api"; import { TooltipProvider } from "@vector-im/compound-web"; import UserInfo, { diff --git a/test/components/views/toasts/VerificationRequestToast-test.tsx b/test/components/views/toasts/VerificationRequestToast-test.tsx index fe3f7886bd9..deb3e564a33 100644 --- a/test/components/views/toasts/VerificationRequestToast-test.tsx +++ b/test/components/views/toasts/VerificationRequestToast-test.tsx @@ -17,11 +17,8 @@ limitations under the License. import React, { ComponentProps } from "react"; import { mocked, Mocked } from "jest-mock"; import { act, render, RenderResult } from "@testing-library/react"; -import { - VerificationRequest, - VerificationRequestEvent, -} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; import { TypedEventEmitter, IMyDevice, MatrixClient, Device } from "matrix-js-sdk/src/matrix"; +import { VerificationRequest, VerificationRequestEvent } from "matrix-js-sdk/src/crypto-api"; import VerificationRequestToast from "../../../../src/components/views/toasts/VerificationRequestToast"; import { From 10526c92bb676e862a18629764a66b5800f111e2 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 25 Mar 2024 13:36:00 -0400 Subject: [PATCH 063/235] Remove the glass border from modal spinners (#12367) It was not intentional, as these spinners are not a real dialog. --- res/css/_common.pcss | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/res/css/_common.pcss b/res/css/_common.pcss index 5ecf6c4e946..20ed9dfa392 100644 --- a/res/css/_common.pcss +++ b/res/css/_common.pcss @@ -660,15 +660,23 @@ legend { } /* Spinner Dialog overide */ -.mx_Dialog_wrapper.mx_Dialog_spinner .mx_Dialog { - width: auto; - border-radius: 8px; - padding: 8px; - box-shadow: none; +.mx_Dialog_wrapper.mx_Dialog_spinner { + /* This is not a real dialog, so we shouldn't show a glass border */ + .mx_Dialog_border { + display: contents; + } + + .mx_Dialog { + inline-size: auto; + block-size: auto; + border-radius: 8px; + padding: 8px; + box-shadow: none; - /* Don't show scroll-bars on spinner dialogs */ - overflow-x: hidden; - overflow-y: hidden; + /* Don't show scroll-bars on spinner dialogs */ + overflow-x: hidden; + overflow-y: hidden; + } } /* TODO: Review mx_GeneralButton usage to see if it can use a different class */ From cd314477ceaf5df2843a9da050faa0c26b63033f Mon Sep 17 00:00:00 2001 From: ElementRobot Date: Mon, 25 Mar 2024 18:15:45 +0000 Subject: [PATCH 064/235] [Backport staging] Remove the glass border from modal spinners (#12369) Co-authored-by: Robin --- res/css/_common.pcss | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/res/css/_common.pcss b/res/css/_common.pcss index 5ecf6c4e946..20ed9dfa392 100644 --- a/res/css/_common.pcss +++ b/res/css/_common.pcss @@ -660,15 +660,23 @@ legend { } /* Spinner Dialog overide */ -.mx_Dialog_wrapper.mx_Dialog_spinner .mx_Dialog { - width: auto; - border-radius: 8px; - padding: 8px; - box-shadow: none; +.mx_Dialog_wrapper.mx_Dialog_spinner { + /* This is not a real dialog, so we shouldn't show a glass border */ + .mx_Dialog_border { + display: contents; + } + + .mx_Dialog { + inline-size: auto; + block-size: auto; + border-radius: 8px; + padding: 8px; + box-shadow: none; - /* Don't show scroll-bars on spinner dialogs */ - overflow-x: hidden; - overflow-y: hidden; + /* Don't show scroll-bars on spinner dialogs */ + overflow-x: hidden; + overflow-y: hidden; + } } /* TODO: Review mx_GeneralButton usage to see if it can use a different class */ From a24aa7e0f7a297c0ea449655d9b249461f34f398 Mon Sep 17 00:00:00 2001 From: Timo <16718859+toger5@users.noreply.github.com> Date: Mon, 25 Mar 2024 19:35:31 +0100 Subject: [PATCH 065/235] Video call meta space (#12297) * add video room meta space button Signed-off-by: Timo K * Add videoRoomsSpace to meta space configuration Signed-off-by: Timo K * temp Signed-off-by: Timo K * dont show ppl section in video room space Signed-off-by: Timo K * add i18n strings Signed-off-by: Timo K * revert waitForIframe=false (this is part of another PR) Signed-off-by: Timo K * fix missing mock room method Signed-off-by: Timo K * test snapshot: add video room meta space Signed-off-by: Timo K * rename Conferences -> Conference Signed-off-by: Timo K * space panel snap test Signed-off-by: Timo K * update snapshot Signed-off-by: Timo K * fix test Signed-off-by: Timo K * add video room space tests Signed-off-by: Timo K * better logic Signed-off-by: Timo K * Add Video MetaSpace Test Signed-off-by: Timo K * make room join rule update reactive for the video room meta space Signed-off-by: Timo K * temp Signed-off-by: Timo K * fix description for meta space video room settings Signed-off-by: Timo K * tests Signed-off-by: Timo K * update snapshot Signed-off-by: Timo K * review Signed-off-by: Timo K * i18n Signed-off-by: Timo K * fix tests Signed-off-by: Timo K * put video meta space behind "feature_video_rooms" labs flag Signed-off-by: Timo K * review Signed-off-by: Timo K * update space store on RoomCreate state event Signed-off-by: Timo K * test for updating video room space on room type update Signed-off-by: Timo K * remove comment Signed-off-by: Timo K * also make knock join rule rooms part of the conference section Signed-off-by: Timo K --------- Signed-off-by: Timo K --- res/css/structures/_SpacePanel.pcss | 7 +- src/components/views/rooms/RoomList.tsx | 7 + .../tabs/user/SidebarUserSettingsTab.tsx | 36 ++- src/components/views/spaces/SpacePanel.tsx | 25 +- src/i18n/strings/en_EN.json | 6 + src/stores/room-list/RoomListStore.ts | 7 +- src/stores/room-list/algorithms/Algorithm.ts | 5 +- src/stores/room-list/models.ts | 2 + src/stores/spaces/SpaceStore.ts | 16 +- src/stores/spaces/index.ts | 6 +- test/components/views/rooms/RoomList-test.tsx | 97 +++++- .../tabs/user/SidebarUserSettingsTab-test.tsx | 19 +- .../SidebarUserSettingsTab-test.tsx.snap | 280 +++++++++++++++++- .../views/spaces/SpacePanel-test.tsx | 25 +- .../__snapshots__/SpacePanel-test.tsx.snap | 238 +++++++++++++++ test/stores/SpaceStore-test.ts | 34 +++ test/stores/room-list/RoomListStore-test.ts | 52 +++- test/test-utils/test-utils.ts | 1 + 18 files changed, 834 insertions(+), 29 deletions(-) create mode 100644 test/components/views/spaces/__snapshots__/SpacePanel-test.tsx.snap diff --git a/res/css/structures/_SpacePanel.pcss b/res/css/structures/_SpacePanel.pcss index 63f85596606..0252da01b78 100644 --- a/res/css/structures/_SpacePanel.pcss +++ b/res/css/structures/_SpacePanel.pcss @@ -203,7 +203,8 @@ limitations under the License. &.mx_SpaceButton_home, &.mx_SpaceButton_favourites, &.mx_SpaceButton_people, - &.mx_SpaceButton_orphans { + &.mx_SpaceButton_orphans, + &.mx_SpaceButton_videoRooms { .mx_SpaceButton_icon { background-color: $panel-actions; @@ -229,6 +230,10 @@ limitations under the License. mask-image: url("$(res)/img/element-icons/roomlist/hash-circle.svg"); } + &.mx_SpaceButton_videoRooms .mx_SpaceButton_icon::before { + mask-image: url("@vector-im/compound-design-tokens/icons/video-call-solid.svg"); + } + &.mx_SpaceButton_new .mx_SpaceButton_icon { &::before { background-color: $primary-content; diff --git a/src/components/views/rooms/RoomList.tsx b/src/components/views/rooms/RoomList.tsx index 28154c40d65..4293e4a215d 100644 --- a/src/components/views/rooms/RoomList.tsx +++ b/src/components/views/rooms/RoomList.tsx @@ -83,6 +83,7 @@ export const TAG_ORDER: TagID[] = [ DefaultTagID.Invite, DefaultTagID.Favourite, DefaultTagID.DM, + DefaultTagID.Conference, DefaultTagID.Untagged, DefaultTagID.LowPriority, DefaultTagID.ServerNotice, @@ -387,6 +388,11 @@ const TAG_AESTHETICS: TagAestheticsMap = { defaultHidden: false, AuxButtonComponent: DmAuxButton, }, + [DefaultTagID.Conference]: { + sectionLabel: _td("voip|metaspace_video_rooms|conference_room_section"), + isInvite: false, + defaultHidden: false, + }, [DefaultTagID.Untagged]: { sectionLabel: _td("common|rooms"), isInvite: false, @@ -594,6 +600,7 @@ export default class RoomList extends React.PureComponent { (this.props.activeSpace === MetaSpace.Favourites && orderedTagId !== DefaultTagID.Favourite) || (this.props.activeSpace === MetaSpace.People && orderedTagId !== DefaultTagID.DM) || (this.props.activeSpace === MetaSpace.Orphans && orderedTagId === DefaultTagID.DM) || + (this.props.activeSpace === MetaSpace.VideoRooms && orderedTagId === DefaultTagID.DM) || (!isMetaSpace(this.props.activeSpace) && orderedTagId === DefaultTagID.DM && !SettingsStore.getValue("Spaces.showPeopleInSpace", this.props.activeSpace)) diff --git a/src/components/views/settings/tabs/user/SidebarUserSettingsTab.tsx b/src/components/views/settings/tabs/user/SidebarUserSettingsTab.tsx index 4d6cf9a40f5..7211fa863fe 100644 --- a/src/components/views/settings/tabs/user/SidebarUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/SidebarUserSettingsTab.tsx @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React, { ChangeEvent } from "react"; +import React, { ChangeEvent, useMemo } from "react"; +import { Icon as CameraCircle } from "@vector-im/compound-design-tokens/icons/video-call-solid.svg"; import { Icon as HomeIcon } from "../../../../../../res/img/element-icons/home.svg"; import { Icon as FavoriteIcon } from "../../../../../../res/img/element-icons/roomlist/favorite.svg"; @@ -30,6 +31,7 @@ import PosthogTrackers from "../../../../../PosthogTrackers"; import SettingsTab from "../SettingsTab"; import { SettingsSection } from "../../shared/SettingsSection"; import SettingsSubsection, { SettingsSubsectionText } from "../../shared/SettingsSubsection"; +import SdkConfig from "../../../../../SdkConfig"; type InteractionName = "WebSettingsSidebarTabSpacesCheckbox" | "WebQuickSettingsPinToSidebarCheckbox"; @@ -44,7 +46,14 @@ export const onMetaSpaceChangeFactory = PosthogTrackers.trackInteraction( interactionName, e, - [MetaSpace.Home, null, MetaSpace.Favourites, MetaSpace.People, MetaSpace.Orphans].indexOf(metaSpace), + [ + MetaSpace.Home, + null, + MetaSpace.Favourites, + MetaSpace.People, + MetaSpace.Orphans, + MetaSpace.VideoRooms, + ].indexOf(metaSpace), ); }; @@ -54,8 +63,15 @@ const SidebarUserSettingsTab: React.FC = () => { [MetaSpace.Favourites]: favouritesEnabled, [MetaSpace.People]: peopleEnabled, [MetaSpace.Orphans]: orphansEnabled, + [MetaSpace.VideoRooms]: videoRoomsEnabled, } = useSettingValue>("Spaces.enabledMetaSpaces"); const allRoomsInHome = useSettingValue("Spaces.allRoomsInHome"); + const guestSpaUrl = useMemo(() => { + return SdkConfig.get("element_call").guest_spa_url; + }, []); + const conferenceSubsectionText = + _t("settings|sidebar|metaspaces_video_rooms_description") + + (guestSpaUrl ? " " + _t("settings|sidebar|metaspaces_video_rooms_description_invite_extension") : ""); const onAllRoomsInHomeToggle = async (event: ChangeEvent): Promise => { await SettingsStore.setValue("Spaces.allRoomsInHome", null, SettingLevel.ACCOUNT, event.target.checked); @@ -140,6 +156,22 @@ const SidebarUserSettingsTab: React.FC = () => { {_t("settings|sidebar|metaspaces_orphans_description")} + {SettingsStore.getValue("feature_video_rooms") && ( + + + + {_t("settings|sidebar|metaspaces_video_rooms")} + + {conferenceSubsectionText} + + )} diff --git a/src/components/views/spaces/SpacePanel.tsx b/src/components/views/spaces/SpacePanel.tsx index 5b1756244b8..429a18e1344 100644 --- a/src/components/views/spaces/SpacePanel.tsx +++ b/src/components/views/spaces/SpacePanel.tsx @@ -209,6 +209,20 @@ const OrphansButton: React.FC = ({ selected, isPanelCollap ); }; +const VideoRoomsButton: React.FC = ({ selected, isPanelCollapsed }) => { + return ( + + ); +}; + const CreateSpaceButton: React.FC> = ({ isPanelCollapsed, setPanelCollapsed, @@ -263,6 +277,7 @@ const metaSpaceComponentMap: Record = { [MetaSpace.Favourites]: FavouritesButton, [MetaSpace.People]: PeopleButton, [MetaSpace.Orphans]: OrphansButton, + [MetaSpace.VideoRooms]: VideoRoomsButton, }; interface IInnerSpacePanelProps extends DroppableProvidedProps { @@ -279,10 +294,12 @@ const InnerSpacePanel = React.memo( const [invites, metaSpaces, actualSpaces, activeSpace] = useSpaces(); const activeSpaces = activeSpace ? [activeSpace] : []; - const metaSpacesSection = metaSpaces.map((key) => { - const Component = metaSpaceComponentMap[key]; - return ; - }); + const metaSpacesSection = metaSpaces + .filter((key) => !(key === MetaSpace.VideoRooms && !SettingsStore.getValue("feature_video_rooms"))) + .map((key) => { + const Component = metaSpaceComponentMap[key]; + return ; + }); return ( %(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.", diff --git a/src/stores/room-list/RoomListStore.ts b/src/stores/room-list/RoomListStore.ts index dc35cd7b5b6..16c4d3be5bc 100644 --- a/src/stores/room-list/RoomListStore.ts +++ b/src/stores/room-list/RoomListStore.ts @@ -234,7 +234,12 @@ export class RoomListStoreClass extends AsyncStoreWithClient implements return; } } - await this.handleRoomUpdate(updatedRoom, RoomUpdateCause.Timeline); + // If the join rule changes we need to update the tags for the room. + // A conference tag is determined by the room public join rule. + if (eventPayload.event.getType() === EventType.RoomJoinRules) + await this.handleRoomUpdate(updatedRoom, RoomUpdateCause.PossibleTagChange); + else await this.handleRoomUpdate(updatedRoom, RoomUpdateCause.Timeline); + this.updateFn.trigger(); }; if (!room) { diff --git a/src/stores/room-list/algorithms/Algorithm.ts b/src/stores/room-list/algorithms/Algorithm.ts index acb9be710f8..267b9bd7420 100644 --- a/src/stores/room-list/algorithms/Algorithm.ts +++ b/src/stores/room-list/algorithms/Algorithm.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { Room } from "matrix-js-sdk/src/matrix"; +import { JoinRule, Room } from "matrix-js-sdk/src/matrix"; import { KnownMembership } from "matrix-js-sdk/src/types"; import { isNullOrUndefined } from "matrix-js-sdk/src/utils"; import { EventEmitter } from "events"; @@ -577,6 +577,9 @@ export class Algorithm extends EventEmitter { tags = [DefaultTagID.DM]; } } + if (room.isCallRoom() && (room.getJoinRule() === JoinRule.Public || room.getJoinRule() === JoinRule.Knock)) { + tags.push(DefaultTagID.Conference); + } return tags; } diff --git a/src/stores/room-list/models.ts b/src/stores/room-list/models.ts index 1c19f824946..d8b04888423 100644 --- a/src/stores/room-list/models.ts +++ b/src/stores/room-list/models.ts @@ -21,6 +21,7 @@ export enum DefaultTagID { LowPriority = "m.lowpriority", Favourite = "m.favourite", DM = "im.vector.fake.direct", + Conference = "im.vector.fake.conferences", ServerNotice = "m.server_notice", Suggested = "im.vector.fake.suggested", } @@ -29,6 +30,7 @@ export const OrderedDefaultTagIDs = [ DefaultTagID.Invite, DefaultTagID.Favourite, DefaultTagID.DM, + DefaultTagID.Conference, DefaultTagID.Untagged, DefaultTagID.LowPriority, DefaultTagID.ServerNotice, diff --git a/src/stores/spaces/SpaceStore.ts b/src/stores/spaces/SpaceStore.ts index e0fd0090c87..966b564d687 100644 --- a/src/stores/spaces/SpaceStore.ts +++ b/src/stores/spaces/SpaceStore.ts @@ -75,7 +75,13 @@ interface IState {} const ACTIVE_SPACE_LS_KEY = "mx_active_space"; -const metaSpaceOrder: MetaSpace[] = [MetaSpace.Home, MetaSpace.Favourites, MetaSpace.People, MetaSpace.Orphans]; +const metaSpaceOrder: MetaSpace[] = [ + MetaSpace.Home, + MetaSpace.Favourites, + MetaSpace.People, + MetaSpace.Orphans, + MetaSpace.VideoRooms, +]; const MAX_SUGGESTED_ROOMS = 20; @@ -432,7 +438,9 @@ export class SpaceStoreClass extends AsyncStoreWithClient { if (space === MetaSpace.Home && this.allRoomsInHome) { return true; } - + if (space === MetaSpace.VideoRooms) { + return !!this.matrixClient?.getRoom(roomId)?.isCallRoom(); + } if (this.getSpaceFilteredRoomIds(space, includeDescendantSpaces)?.has(roomId)) { return true; } @@ -1033,6 +1041,10 @@ export class SpaceStoreClass extends AsyncStoreWithClient { this.onRoomsUpdate(); } break; + case EventType.RoomCreate: + // The room might become a video room. We need to tag it for that videoRooms space. + this.onRoomsUpdate(); + break; } }; diff --git a/src/stores/spaces/index.ts b/src/stores/spaces/index.ts index 30f6798bb6a..10963fbf02d 100644 --- a/src/stores/spaces/index.ts +++ b/src/stores/spaces/index.ts @@ -32,6 +32,7 @@ export enum MetaSpace { Favourites = "favourites-space", People = "people-space", Orphans = "orphans-space", + VideoRooms = "video-rooms-space", } export const getMetaSpaceName = (spaceKey: MetaSpace, allRoomsInHome = false): string => { @@ -44,6 +45,8 @@ export const getMetaSpaceName = (spaceKey: MetaSpace, allRoomsInHome = false): s return _t("common|people"); case MetaSpace.Orphans: return _t("common|orphan_rooms"); + case MetaSpace.VideoRooms: + return _t("voip|metaspace_video_rooms|conference_room_section"); } }; @@ -58,6 +61,7 @@ export function isMetaSpace(spaceKey?: SpaceKey): boolean { spaceKey === MetaSpace.Home || spaceKey === MetaSpace.Favourites || spaceKey === MetaSpace.People || - spaceKey === MetaSpace.Orphans + spaceKey === MetaSpace.Orphans || + spaceKey === MetaSpace.VideoRooms ); } diff --git a/test/components/views/rooms/RoomList-test.tsx b/test/components/views/rooms/RoomList-test.tsx index 5e9fd48df99..d5daa43d5cd 100644 --- a/test/components/views/rooms/RoomList-test.tsx +++ b/test/components/views/rooms/RoomList-test.tsx @@ -16,10 +16,11 @@ limitations under the License. */ import React, { ComponentProps } from "react"; -import { render, screen, within } from "@testing-library/react"; +import { cleanup, queryByRole, render, screen, within } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { mocked } from "jest-mock"; import { Room } from "matrix-js-sdk/src/matrix"; +import { TooltipProvider } from "@vector-im/compound-web"; import RoomList from "../../../../src/components/views/rooms/RoomList"; import ResizeNotifier from "../../../../src/utils/ResizeNotifier"; @@ -33,6 +34,9 @@ import { mkSpace, stubClient } from "../../../test-utils"; import { MatrixClientPeg } from "../../../../src/MatrixClientPeg"; import SpaceStore from "../../../../src/stores/spaces/SpaceStore"; import DMRoomMap from "../../../../src/utils/DMRoomMap"; +import RoomListStore from "../../../../src/stores/room-list/RoomListStore"; +import { ITagMap } from "../../../../src/stores/room-list/algorithms/models"; +import { DefaultTagID } from "../../../../src/stores/room-list/models"; jest.mock("../../../../src/customisations/helpers/UIComponents", () => ({ shouldShowComponent: jest.fn(), @@ -52,16 +56,18 @@ describe("RoomList", () => { function getComponent(props: Partial> = {}): JSX.Element { return ( - + + + ); } @@ -206,5 +212,74 @@ describe("RoomList", () => { }); }); }); + + describe("when video meta space is active", () => { + const videoRoomPrivate = "!videoRoomPrivate_server"; + const videoRoomPublic = "!videoRoomPublic_server"; + const videoRoomKnock = "!videoRoomKnock_server"; + + beforeEach(async () => { + cleanup(); + const rooms: Room[] = []; + RoomListStore.instance; + testUtils.mkRoom(client, videoRoomPrivate, rooms); + testUtils.mkRoom(client, videoRoomPublic, rooms); + testUtils.mkRoom(client, videoRoomKnock, rooms); + + mocked(client).getRoom.mockImplementation( + (roomId) => rooms.find((room) => room.roomId === roomId) || null, + ); + mocked(client).getRooms.mockImplementation(() => rooms); + + const videoRoomKnockRoom = client.getRoom(videoRoomKnock)!; + const videoRoomPrivateRoom = client.getRoom(videoRoomPrivate)!; + const videoRoomPublicRoom = client.getRoom(videoRoomPublic)!; + + [videoRoomPrivateRoom, videoRoomPublicRoom, videoRoomKnockRoom].forEach((room) => { + (room.isCallRoom as jest.Mock).mockReturnValue(true); + }); + + const roomLists: ITagMap = {}; + roomLists[DefaultTagID.Conference] = [videoRoomKnockRoom, videoRoomPublicRoom]; + roomLists[DefaultTagID.Untagged] = [videoRoomPrivateRoom]; + jest.spyOn(RoomListStore.instance, "orderedLists", "get").mockReturnValue(roomLists); + await testUtils.setupAsyncStoreWithClient(store, client); + + store.setActiveSpace(MetaSpace.VideoRooms); + }); + + it("renders Conferences and Room but no People section", () => { + const renderResult = render(getComponent({ activeSpace: MetaSpace.VideoRooms })); + const roomsEl = renderResult.getByRole("treeitem", { name: "Rooms" }); + const conferenceEl = renderResult.getByRole("treeitem", { name: "Conferences" }); + + const noInvites = screen.queryByRole("treeitem", { name: "Invites" }); + const noFavourites = screen.queryByRole("treeitem", { name: "Favourites" }); + const noPeople = screen.queryByRole("treeitem", { name: "People" }); + const noLowPriority = screen.queryByRole("treeitem", { name: "Low priority" }); + const noHistorical = screen.queryByRole("treeitem", { name: "Historical" }); + + expect(roomsEl).toBeVisible(); + expect(conferenceEl).toBeVisible(); + + expect(noInvites).toBeFalsy(); + expect(noFavourites).toBeFalsy(); + expect(noPeople).toBeFalsy(); + expect(noLowPriority).toBeFalsy(); + expect(noHistorical).toBeFalsy(); + }); + it("renders Public and Knock rooms in Conferences section", () => { + const renderResult = render(getComponent({ activeSpace: MetaSpace.VideoRooms })); + const conferenceList = renderResult.getByRole("group", { name: "Conferences" }); + expect(queryByRole(conferenceList, "treeitem", { name: videoRoomPublic })).toBeVisible(); + expect(queryByRole(conferenceList, "treeitem", { name: videoRoomKnock })).toBeVisible(); + expect(queryByRole(conferenceList, "treeitem", { name: videoRoomPrivate })).toBeFalsy(); + + const roomsList = renderResult.getByRole("group", { name: "Rooms" }); + expect(queryByRole(roomsList, "treeitem", { name: videoRoomPrivate })).toBeVisible(); + expect(queryByRole(roomsList, "treeitem", { name: videoRoomPublic })).toBeFalsy(); + expect(queryByRole(roomsList, "treeitem", { name: videoRoomKnock })).toBeFalsy(); + }); + }); }); }); diff --git a/test/components/views/settings/tabs/user/SidebarUserSettingsTab-test.tsx b/test/components/views/settings/tabs/user/SidebarUserSettingsTab-test.tsx index 02e59ecdf52..cd787e20195 100644 --- a/test/components/views/settings/tabs/user/SidebarUserSettingsTab-test.tsx +++ b/test/components/views/settings/tabs/user/SidebarUserSettingsTab-test.tsx @@ -23,6 +23,7 @@ import SettingsStore from "../../../../../../src/settings/SettingsStore"; import { MetaSpace } from "../../../../../../src/stores/spaces"; import { SettingLevel } from "../../../../../../src/settings/SettingLevel"; import { flushPromises } from "../../../../../test-utils"; +import SdkConfig from "../../../../../../src/SdkConfig"; describe("", () => { beforeEach(() => { @@ -31,9 +32,25 @@ describe("", () => { jest.spyOn(SettingsStore, "setValue").mockResolvedValue(undefined); }); - it("renders sidebar settings", () => { + it("renders sidebar settings with guest spa url", () => { + const spy = jest.spyOn(SdkConfig, "get").mockReturnValue({ guest_spa_url: "https://somewhere.org" }); + const originalGetValue = SettingsStore.getValue; + const spySettingsStore = jest.spyOn(SettingsStore, "getValue").mockImplementation((setting) => { + return setting === "feature_video_rooms" ? true : originalGetValue(setting); + }); + const { container } = render(); + expect(container).toMatchSnapshot(); + spySettingsStore.mockRestore(); + spy.mockRestore(); + }); + it("renders sidebar settings without guest spa url", () => { + const originalGetValue = SettingsStore.getValue; + const spySettingsStore = jest.spyOn(SettingsStore, "getValue").mockImplementation((setting) => { + return setting === "feature_video_rooms" ? true : originalGetValue(setting); + }); const { container } = render(); expect(container).toMatchSnapshot(); + spySettingsStore.mockRestore(); }); it("toggles all rooms in home setting", async () => { diff --git a/test/components/views/settings/tabs/user/__snapshots__/SidebarUserSettingsTab-test.tsx.snap b/test/components/views/settings/tabs/user/__snapshots__/SidebarUserSettingsTab-test.tsx.snap index ff18d3d9cbf..c5315e99bc6 100644 --- a/test/components/views/settings/tabs/user/__snapshots__/SidebarUserSettingsTab-test.tsx.snap +++ b/test/components/views/settings/tabs/user/__snapshots__/SidebarUserSettingsTab-test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[` renders sidebar settings 1`] = ` +exports[` renders sidebar settings with guest spa url 1`] = `
    renders sidebar settings 1`] = `
    + + +
    +
    +
    +
    +
    +`; + +exports[` renders sidebar settings without guest spa url 1`] = ` +
    +
    +
    +
    +

    + Sidebar +

    +
    +
    +
    +

    + Spaces to show +

    +
    +
    +
    + Spaces are ways to group rooms and people. Alongside the spaces you're in, you can use some pre-built ones too. +
    +
    +
    + + +
  • +
  • +
    +
    +
    + + K + +
    +
    + Knock room +
    +
    + 3 members +
    +
    +
    +
    + View +
    + + +
    +
  • renders 1`] = ` class="mx_Checkbox mx_Checkbox_hasKind mx_Checkbox_kind_solid" >
  • - +
    {formattedDate} diff --git a/src/components/views/polls/pollHistory/PollListItemEnded.tsx b/src/components/views/polls/pollHistory/PollListItemEnded.tsx index 657d940865f..5da77723236 100644 --- a/src/components/views/polls/pollHistory/PollListItemEnded.tsx +++ b/src/components/views/polls/pollHistory/PollListItemEnded.tsx @@ -99,7 +99,7 @@ export const PollListItemEnded: React.FC = ({ event, poll, onClick }) => return (
  • - +
    diff --git a/src/components/views/right_panel/RoomSummaryCard.tsx b/src/components/views/right_panel/RoomSummaryCard.tsx index 308d21dcf05..d288541f5cd 100644 --- a/src/components/views/right_panel/RoomSummaryCard.tsx +++ b/src/components/views/right_panel/RoomSummaryCard.tsx @@ -405,7 +405,7 @@ const RoomSummaryCard: React.FC = ({ room, permalinkCreator, onClose, on align="center" justify="space-between" > - +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    matches the snapshot 1`] = ` class="mx_Checkbox mx_Checkbox_hasKind mx_Checkbox_kind_solid" >
    ambiguous display name 1`] = `
    ambiguous display name 1`] = ` exports[` with display name 1`] = `
    with display name 1`] = ` exports[` without display name 1`] = `
    with crypto enabled renders 1`] = ` class="mx_BaseCard_header" >
    { let prevMember: RoomMember | undefined; for (const tile of memberTiles) { const memberA = prevMember; - const memberB = memberListRoom.currentState.members[tile.getAttribute("title")!.split(" ")[0]]; + const memberB = memberListRoom.currentState.members[tile.getAttribute("aria-label")!.split(" ")[0]]; prevMember = memberB; // just in case an expect fails, set this early if (!memberA) { continue; diff --git a/test/components/views/rooms/__snapshots__/MemberTile-test.tsx.snap b/test/components/views/rooms/__snapshots__/MemberTile-test.tsx.snap index f40db566bb5..77c87d93da1 100644 --- a/test/components/views/rooms/__snapshots__/MemberTile-test.tsx.snap +++ b/test/components/views/rooms/__snapshots__/MemberTile-test.tsx.snap @@ -4,10 +4,11 @@ exports[`MemberTile should display an verified E2EIcon when the e2E status = Ver
    handles when device is falsy 1`] = ` > Current session -
    renders device and correct security card when
  • +
    + + + + +
  • ;7ct|K% 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-bubble-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-bubble-layout-linux.png index 889906100aaf90a19145833da4fc4428eb564cff..7155942a7ce1b90181be3e4b99cac7e5221f69fa 100644 GIT binary patch literal 7806 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 GX literal 7713 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 s3=ux4$V8JdG?59q(R@$R`_#WP?R*a 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 literal 8239 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-irc-layout-linux.png index 80359800e72403fe4f6c54b1b5a62d5a196476d0..fb030376951cbef9472b64f8b10bb58b337025b1 100644 GIT binary patch literal 9480 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 literal 9340 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 R1FsW-R1`Gj;c~A({1;L`gsK1l diff --git a/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-irc-modern-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/event-tile-reply-chains-irc-modern-linux.png index cdab9fe054003f8b39fbf34a42ffe832fbbc259d..77535701603316287c035c3bf63edac14ac4826a 100644 GIT binary patch literal 8462 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 G`ab}K*rKKY literal 8404 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 F{{e(Fiw6Jz diff --git a/playwright/snapshots/timeline/timeline.spec.ts/event-tiles-bubble-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/event-tiles-bubble-layout-linux.png index 629435b63922763cacf48db82b210b18c5c50efa..194ecd07fbccb127bd33f2426094aa8643ed3e91 100644 GIT binary patch delta 24404 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/event-tiles-compact-modern-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/event-tiles-compact-modern-layout-linux.png index 497fd62e781f747783e9346811065bed5aad60e2..2b990bb3b86536e0eeb3cb6e1ae2a24607573f12 100644 GIT binary patch delta 16426 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 Fe*k8M_P+oC delta 5859 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 C(SX1J diff --git a/playwright/snapshots/timeline/timeline.spec.ts/event-tiles-modern-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/event-tiles-modern-layout-linux.png index c9feb4ef4a89b7b87098130ae1e7382d3234d21c..f0064c81e195c01666bd8f70e4711e5101812592 100644 GIT binary patch delta 9048 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-and-messages-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-and-messages-irc-layout-linux.png index 8d5fd4adcbca3d3b49e7d602cd11107566977d0a..001ac64f2a61e730ddf47f2873a4f638911255d3 100644 GIT binary patch delta 23981 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-bubble-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-bubble-layout-linux.png index 83d022391e8cccbb40db96ce5a3c544700e40cea..f7a276d2f7219d3542e9fa815f2fe92e33fc6141 100644 GIT binary patch delta 18085 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 B|IYvb delta 17934 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 YX=9ls_dSq8e#v9$r&4J7kMz9%A9@9p2LJ#7 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-emote-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-emote-irc-layout-linux.png index 431953837a9c3239169b82c27d170bf82685ea12..de056e0fa56924a46485e610bf9e0232539b4fe2 100644 GIT binary patch delta 8416 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 delta 8250 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 diff --git a/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-irc-layout-linux.png b/playwright/snapshots/timeline/timeline.spec.ts/expanded-gels-irc-layout-linux.png index 02fec4dee6d37ec8e18f7828c7fd137160da1ee9..077ecbf7176fa730370b8586dfab1339fd237346 100644 GIT binary patch literal 53422 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 R)?kgnBt_*!iiC8${|EeIWV!$V literal 53166 zcmeFZWmH^U&?edm1QJ|=TaZBTAi)Dcf(G~C76|STGzks?LI^ZYaCdLq2~BW!3GVJN zyWjWw=9@cfX5DrF&ARvYT1g*v?>?ta?b=oKJXNPdloX^e(MZuC5D2D>w1f%-f}{t5 zJRE$C0!FN8NO!^811A+JF-UPg`6dMN3?d^Ts^*@wGv}uDbbT7-z%wuOArmecVM2N^ zW~OYJ(he&GvwbxJ5GANe~)O4hu{8lL`U;~ z>JYy8?uGUT%KrVvZx!`yEAwO5?q2NZ5T&As=az!ae&cfq>1JB^YSo;)YQg{Blo@^0 zZ`1OlS)&ggSZDo$U+_heMUC{MrpxKqx*iknd?{6&Ztbm>t?QKjXMQI8YJ#)gr0*lE zwwhbh^*1`})<->L2nx(qEyzx5&r=Ew4LvxI z*}gcJL>nI7Upb6sdGk=MqFT&Ghm3EES7M|K>m}##f}X?_zoNszB%^M9d}vZqj=-35 zR_G&gvN5TgH&kjx#%VQ^7(-OB7tl;OdL-9B!hv%YkuiBGlm;ki$L0^dOP>&u;)0j@ zv-M~;6RA<$hMVB&W#-ftjLO=#|%uTl0{YJ2VR!6DA8ViS(TuW&g! zJZH3%FN!nezP2e97MLl*a8{?+5JTlUJo<1ljWrL9DJmGwt=Km@b-RV^QI2x3kmXw&JL>>`=z(#?k9ggk_+Q9$m&XE zC|boBLO#EvZ~v0P5iIDG)^|Oj*_KrT!WrZvY?gsR!7nQ{> z^^;K6!P!M90fql3BU?R61Sx!0woW748waR1%AQ{_l~M0*Kl~|qScug3)STRFk;DtP z_?rF2{j5?JE@rZ3n<=CaiLX(9S0DA($F_g-QAYnNE&OOA?t4VBOgoANN=wh$_Du?7E{J%GH@6Jl&45^9@dLHp^aL^cofU+DlJy zL-h7h$z8d_{+4%)*?`ooAH&C~(qeV>^+|fgE491phRZM|C8b}b?^ycf6IP}w%-?MU zgO{w*`R9P2I&N**&3g(xx@b%P;K6gCB+%;Sn z#OgL)c3^pbi18h$FQQTErRByoif^2RHsf~Wav@8>@`~u~Go(`ETY6Ko^`A_%(Z5T% z@^7xiM>Dr)DVKa%wFF(69Vwaaw*xuX&-Eo+aOO%9Z|RJaZqDC^LDPQydSj&hmL^8l z;M&h0$R`~gc)HD`#}*~MxI0unyTTae6ap=?x>uIYQc2#fwcn%)=x815lu5Ct5Q+JG zQ6U3?4Di?veTJ`MF(2(syyAQyFb7!)>o9oXYfom`SkGswQ+Dz;gT=!N0JBX zwlDMbF@@}zl+2$5zP7e>&Vyy^#m(lQ2D0w=OSHOmu^2?_<>x_4={`Rq7d(_JVFSCk zt|;5$Uq z^4k@Y{BUQA>vBJz&7sn2@o{8zlU9>4fo?)o$LuHc)oq1Tg_i4E)O48