From a4df87c7ed203a2a767bc7c95a30aeae21f1111a Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 5 May 2026 13:02:57 +0000 Subject: [PATCH 1/9] Upgrade dependency to matrix-js-sdk@41.5.0-rc.0 --- apps/web/package.json | 2 +- pnpm-lock.yaml | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index c04ddac5e8..9a8dc3ee7d 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -81,7 +81,7 @@ "lodash": "npm:lodash-es@4.18.1", "maplibre-gl": "^5.0.0", "matrix-encrypt-attachment": "^1.0.3", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", + "matrix-js-sdk": "41.5.0-rc.0", "matrix-widget-api": "^1.16.1", "memoize-one": "^6.0.0", "mime": "^4.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 841534b316..ac6af903b1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -472,8 +472,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 matrix-js-sdk: - specifier: github:matrix-org/matrix-js-sdk#develop - version: https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/69985ee350a33ba75f1ad11f96468344f0c92a8d + specifier: 41.5.0-rc.0 + version: 41.5.0-rc.0 matrix-widget-api: specifier: ^1.17.0 version: 1.17.0 @@ -9977,9 +9977,8 @@ packages: matrix-events-sdk@0.0.1: resolution: {integrity: sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA==} - matrix-js-sdk@https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/69985ee350a33ba75f1ad11f96468344f0c92a8d: - resolution: {tarball: https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/69985ee350a33ba75f1ad11f96468344f0c92a8d} - version: 41.4.0 + matrix-js-sdk@41.5.0-rc.0: + resolution: {integrity: sha512-+3k+eUYJzjX8wCTI/JrP22/QnhB8tb7vdZTtXh4g4ukVxf+B20HguAPOEmVYXmKUTko9hxCHu2e7DQqZazqZBA==} engines: {node: '>=22.0.0'} matrix-web-i18n@3.6.0: @@ -12935,6 +12934,7 @@ packages: uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@11.1.0: @@ -12947,6 +12947,7 @@ packages: uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true v8-to-istanbul@9.3.0: @@ -23578,7 +23579,7 @@ snapshots: matrix-events-sdk@0.0.1: {} - matrix-js-sdk@https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/69985ee350a33ba75f1ad11f96468344f0c92a8d: + matrix-js-sdk@41.5.0-rc.0: dependencies: '@babel/runtime': 7.29.2 '@matrix-org/matrix-sdk-crypto-wasm': 18.2.0 From d5b583652b4878832026e9da16f3ab1037e7f4e0 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 5 May 2026 13:06:08 +0000 Subject: [PATCH 2/9] v1.12.18-rc.0 --- apps/desktop/package.json | 2 +- apps/web/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 84db56e160..a080962f65 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -3,7 +3,7 @@ "productName": "Element", "main": "lib/electron-main.js", "exports": "./lib/electron-main.js", - "version": "1.12.17", + "version": "1.12.18-rc.0", "description": "Element: the future of secure communication", "author": { "name": "Element", diff --git a/apps/web/package.json b/apps/web/package.json index 9a8dc3ee7d..7df89851cd 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "element-web", - "version": "1.12.17", + "version": "1.12.18-rc.0", "description": "Element: the future of secure communication", "author": "New Vector Ltd.", "repository": { From e157b1d4e86d10e90f7476837f18abdb39d141f6 Mon Sep 17 00:00:00 2001 From: ElementRobot Date: Thu, 7 May 2026 13:12:50 +0200 Subject: [PATCH 3/9] Restore the Manage account button text color and add playwright test (#33411) (#33415) * Restore the Manage account button text color and add playwright test * Fix prettier issue * Fix Sonar issue (cherry picked from commit e491fb8c81a32fb94edec1d4cadca4241fda71b1) Co-authored-by: rbondesson --- .../account-user-settings-tab.spec.ts | 43 ++++++++++++++++++ .../account-manage-account-button-linux.png | Bin 0 -> 6499 bytes .../views/settings/UserProfileSettings.tsx | 2 + 3 files changed, 45 insertions(+) create mode 100644 apps/web/playwright/snapshots/settings/account-user-settings-tab.spec.ts/account-manage-account-button-linux.png diff --git a/apps/web/playwright/e2e/settings/account-user-settings-tab.spec.ts b/apps/web/playwright/e2e/settings/account-user-settings-tab.spec.ts index b3ec952b01..b4a7b71926 100644 --- a/apps/web/playwright/e2e/settings/account-user-settings-tab.spec.ts +++ b/apps/web/playwright/e2e/settings/account-user-settings-tab.spec.ts @@ -6,11 +6,14 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com Please see LICENSE files in the repository root for full details. */ +import { type Route } from "@playwright/test"; + import { test, expect } from "../../element-web-test"; import { getSampleFilePath } from "../../sample-files"; const USER_NAME = "Bob"; const USER_NAME_NEW = "Alice"; +const EXTERNAL_ACCOUNT_MANAGEMENT_URL = "https://just.for.test.io/"; test.describe("Account user settings tab", () => { test.use({ @@ -79,6 +82,46 @@ test.describe("Account user settings tab", () => { await expect(uut).toMatchScreenshot("account-smallscreen.png"); }); + test.describe("with external account management", () => { + test.use({ + page: async ({ page }, runFixture) => { + const authMetadataHandler = async (route: Route): Promise => { + await route.fulfill({ + json: { + issuer: EXTERNAL_ACCOUNT_MANAGEMENT_URL, + authorization_endpoint: `${EXTERNAL_ACCOUNT_MANAGEMENT_URL}authorize`, + token_endpoint: `${EXTERNAL_ACCOUNT_MANAGEMENT_URL}token`, + revocation_endpoint: `${EXTERNAL_ACCOUNT_MANAGEMENT_URL}revoke`, + response_types_supported: ["code"], + grant_types_supported: ["authorization_code"], + code_challenge_methods_supported: ["S256"], + account_management_uri: EXTERNAL_ACCOUNT_MANAGEMENT_URL, + }, + }); + }; + + await page.route("**/_matrix/client/v1/auth_metadata", authMetadataHandler); + await page.route("**/_matrix/client/unstable/org.matrix.msc2965/auth_metadata", authMetadataHandler); + await runFixture(page); + }, + }); + + test("should render the manage account button properly", { tag: "@screenshot" }, async ({ uut, axe }) => { + const manageAccountButton = uut.getByTestId("external-account-management-link"); + + await expect(manageAccountButton).toBeVisible(); + await expect(manageAccountButton).toHaveAttribute("href", EXTERNAL_ACCOUNT_MANAGEMENT_URL); + await expect(manageAccountButton).toHaveAttribute("target", "_blank"); + await expect(manageAccountButton).toHaveText(/Manage account/); + + const profileButtons = uut.locator(".mx_UserProfileSettings_profile_buttons"); + await profileButtons.scrollIntoViewIfNeeded(); + await expect(profileButtons).toMatchScreenshot("account-manage-account-button.png"); + + await expect(axe).toHaveNoViolations(); + }); + }); + test("should show tooltips on narrow screen", async ({ page, uut }) => { await page.setViewportSize({ width: 700, height: 600 }); await page.getByRole("tab", { name: "Account" }).hover(); diff --git a/apps/web/playwright/snapshots/settings/account-user-settings-tab.spec.ts/account-manage-account-button-linux.png b/apps/web/playwright/snapshots/settings/account-user-settings-tab.spec.ts/account-manage-account-button-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..40f79c05b32272408fb7541e478e75ea63430366 GIT binary patch literal 6499 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 = ({ externalAccou onClick={null} element="a" kind="primary" + data-kind="primary" target="_blank" rel="noreferrer noopener" href={externalAccountManagementUrl} data-testid="external-account-management-link" + style={{ textDecoration: "none" }} > {_t("settings|general|oidc_manage_button")} From 39607799defdea6016289a614e754d34c754bcc2 Mon Sep 17 00:00:00 2001 From: Zack Date: Tue, 12 May 2026 13:17:47 +0200 Subject: [PATCH 4/9] Refactor view source event to MVVM (#33428) * Refactor view source event to MVVM * remove unused variable since movement * Update view source event screenshots * Update packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.tsx Co-authored-by: Florian Duros * Use view model disposables for source event decryption * Consolidate source event view model updates * Fix prettier * Fix view source expanded class name * Remove void from source event decryption --------- Co-authored-by: Florian Duros --- .../playwright/e2e/timeline/timeline.spec.ts | 2 +- ...-a-hidden-event-on-bubble-layout-linux.png | Bin 33931 -> 34281 bytes ...d-a-hidden-event-on-group-layout-linux.png | Bin 33888 -> 34246 bytes ...event-line-padding-modern-layout-linux.png | Bin 60290 -> 59846 bytes ...ent-line-zero-padding-irc-layout-linux.png | Bin 60867 -> 60431 bytes ...red-hidden-event-line-irc-layout-linux.png | Bin 2347 -> 2161 bytes apps/web/res/css/_components.pcss | 1 - .../css/views/messages/_ViewSourceEvent.pcss | 50 ------ .../views/messages/ViewSourceEvent.tsx | 83 ---------- apps/web/src/events/EventTileFactory.tsx | 23 ++- apps/web/src/i18n/strings/en_EN.json | 1 - .../body/ViewSourceEventViewModel.ts | 113 ++++++++++++++ .../ViewSourceEventViewModel-test.ts | 143 ++++++++++++++++++ .../default-auto.png | Bin 0 -> 18680 bytes .../expanded-auto.png | Bin 0 -> 24846 bytes .../src/i18n/strings/en_EN.json | 3 + packages/shared-components/src/index.ts | 1 + .../ViewSourceEventView.module.css | 64 ++++++++ .../ViewSourceEventView.stories.tsx | 77 ++++++++++ .../ViewSourceEventView.test.tsx | 107 +++++++++++++ .../ViewSourceEventView.tsx | 98 ++++++++++++ .../ViewSourceEventView.test.tsx.snap | 70 +++++++++ .../body/ViewSourceEventView/index.tsx | 10 ++ 23 files changed, 708 insertions(+), 138 deletions(-) delete mode 100644 apps/web/res/css/views/messages/_ViewSourceEvent.pcss delete mode 100644 apps/web/src/components/views/messages/ViewSourceEvent.tsx create mode 100644 apps/web/src/viewmodels/room/timeline/event-tile/body/ViewSourceEventViewModel.ts create mode 100644 apps/web/test/viewmodels/message-body/ViewSourceEventViewModel-test.ts create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.stories.tsx/default-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.stories.tsx/expanded-auto.png create mode 100644 packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.module.css create mode 100644 packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.stories.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.test.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.tsx create mode 100644 packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/__snapshots__/ViewSourceEventView.test.tsx.snap create mode 100644 packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/index.tsx diff --git a/apps/web/playwright/e2e/timeline/timeline.spec.ts b/apps/web/playwright/e2e/timeline/timeline.spec.ts index 994cd4a101..8c4888bff5 100644 --- a/apps/web/playwright/e2e/timeline/timeline.spec.ts +++ b/apps/web/playwright/e2e/timeline/timeline.spec.ts @@ -718,7 +718,7 @@ test.describe("Timeline", () => { await viewSourceEventExpanded.hover(); const toggleEventButton = viewSourceEventExpanded.getByRole("button", { name: "toggle event" }); // Check size and position of toggle on expanded view source event - // See: _ViewSourceEvent.pcss + // See: ViewSourceEventView.module.css await expect(toggleEventButton).toHaveCSS("height", "16px"); // --ViewSourceEvent_toggle-size await expect(toggleEventButton).toHaveCSS("align-self", "flex-end"); // Click again to collapse the source diff --git a/apps/web/playwright/snapshots/threads/threads.spec.ts/ThreadView-with-reaction-and-a-hidden-event-on-bubble-layout-linux.png b/apps/web/playwright/snapshots/threads/threads.spec.ts/ThreadView-with-reaction-and-a-hidden-event-on-bubble-layout-linux.png index 85ef504581bee82e06baa6f3c98d60173756106b..4ae55b69f0bac09cdbdb56cdb3e6e489bc6e904c 100644 GIT binary patch literal 34281 zcmb50b9f|izvaW3*tU&{ZQD*d6Wg|JJDJ$Y#7RdJ+qONiy?Nhv@9w?3_ddJ#-|Ao2 z)78~o=X1{aRz)bvOTfe6z<_{&z)MMrDuaN43V?usO+$fwZL#3rW(NU50+A9GQgzS% zy8*3>YPR|PDvT6b5w#Kmv0!nUMhQ(7r!i3sQ#8O*NXMXDP>7nKii&{>GLGaFb~JLR zpn9P2mrGCeV4+~8VpD##s7*eBkdAO=#CIVp!vHCeElTJXJZLb}yHCAEM6#p|sZ9M` zv)qg$!Z}KXTp|zu#}NgTKjyF#bT3OW=B0xP zdcfUdB-aEQ7#sj?iWW-mGSJNdhVkilpKs6%>H@5vx!UPF5_U}VM3K%K;g^!f39$wBvf<*Y*~ zy=H7fiRQ?)o!Wr_=4ROs!k5Ef1D|UVYIWClWMCM`vB^24kbB$lgUtw!-P8{z3nmgZ z9UZUT%G#A$c-*5OhbL-u2xT6_!;SR4gpoS!3I3Cr{-@O#MAh z;XyAP&kGVucB*%7>1<&ft@%0C!FPe13qnX_$|sMQ4E*j-X7>L2M*eCQnc!g`UVEn0 z{G&eHoxtz;T%B_|DwT7{4}AiJKAEYpg=YdwrJcu?3%ls9DrPN*J%nZmxi33uv+Wi9 zf1z`Gd}D*CD|AX9-?m1E_DWV%b*WI6mc3gY`O_ReOB>8?7}lve_2o_k=52fDwdVeQ z)7eHZGhTv;&24jTs_KX|WOJOCtht>ZAwACQR7r-J%%*GACMj=rw`t5WVsxGg5IQ4* zYTzy1VoZy$eFJj5M?nf*?tv`L&lmZ8h?Tcm_v8LuY2aP+R>chb^;o8sgRp1hIIy>2 zk+$W$1yAjBuL0!maD(B(!Gp6-wIiNu~1`}FgoN+}uFjM){B-lK>=b7JFK>S7A<#bGN0m)Azq#Gxm@(MUjJ z+hse>|8BnuR->}2bo@HqS}WIUR~ZtFu?Zp2e=kxbD#-Izg9+h>5S0LrBB7p5`oBJ@ z+uGWRfv1Vd!Nn8;ulEyWtnGJ+ju_yz3>-G9sn7AzG$!#yneR=^n~upr%CNLk+==8= z8)ygUQ=y!i!^!kPSTuA%&*kb4dBUFLSjBmJt$r(U%R%hb(-JTuoatBX3+c44;sRlW z*{BRUo9->o5yN@~6Crj7r~QqfcV6K}n%9TV1p?T&lOz2apOGnccBWjGu|9*p=J<9q z8bd)J}!iDMtr)S#kTQi8_0N*+`yQZPop zfe`n@%-aFNEo)+Y!rmY8{m~D%g3=JIrluy{$B(Clu4p65`j9kV@tli* zI^E}ewdvn5|7e4^FRZtrn zcpmr89D}-zJWIQQu~qG2Vlk~V(g$)?yzGsy$Q%}q?{@=+JFk!)vlrs(u((Zjr!N&Y zIe)Y4EzZv**UR)~9YA5xTtIw(E4-wCIVFN}5BAU>G~hK};FP^LxO#QpmgWgx*!-jR z^&fOwvofrj6M1>OY_S)L4{00NA@%kysVqc)xT*4y7P#oR8fdUq>&|_qJGWQwAv{Di zWq=+mjh(PrH=81m>2|poj#WT7;{Sb}&fU1v5X0vdqY#%p9h>eX6{v9Mvcx`)4!Ta82jdorD%5w^-s=WHWQh8~N`EtGU z@s+TJl8ejrw=5wn3o2DR=x|98(Kh(tZ2i{OZN^GP%z(|!XKW4*Q{XvgO^j(btkCi3 z+vbp;n%k0;wvmz13#};>2#V*0(6Mx(M4`*tawRr=r~{}L-y@MTc_*3*Dt??V&q{M0 zQ}QtA{{4E;^nguPmdXr^S22$|*dM1m@2@R)yK#81PB@<5o^}QYe`rDupFe-w$*7oJ zn4kZER6F@2bLj!Oqea`hXnFc_tOj+9Ztl_pd(;L2T2Ti+Z6m23)7kdW4bm&h$NfFc z*gs9A7BZh_4i@BCZkph~Eyn+aVl%(*A$a2wfD}PAv4IfL9&>^JcUAts*zteH3$^(b zU8$$(OEawadAlQpcy1T)5igM?I+U^Tpuy5pZBS82*^$x)el(0 zeSR#V9k!t${&zSGt03)C;H=#nKp+1>qQ4Y!o>o-wpwl3pll#t}rB!j56PdiH_sFQF z-^Gi3-*t@iUp@{P7egkqS$FT3D5s*=A8&mE%ewbw?AqE%4nKUdfvc!=saL-Rw z+yM*SzID5OZ2G8sy`P;vRzt2ha&Pv#z3-uHd3@KXIG-2M#M8q`Aa~g#M>7ig#=5xm+YRS+s92}nrLuU!9k16t zw>wFuqutND%trF3-5hUv8%McZMvZE1Q{Uv6t3N*cN*RWxUmh0v9a;BoBH|ka)@yRP zJx_TGRaCm(c2e6P6}9irZz*eLHnoqK(GaReer??KKH|De{O(CDGebUD@?|iK_B?YD ze}^|!ceU$`efW5)^fr7xa2z}qa|Oq_z-G36JDab?CD8hqOZ)EkbnfeMazHrs>5SXS zPp~EKWiRQczvv-ay6882mQCZng!@=JwdxFdI31aNS$N}r$Xs`_JpI?wV#$J5!atIK-`F2{LuTVLuQ zYVuK!hWHFrk@G8F<7T&Cm*HluoY||| zU-EmB1Ne!!JTDOXiqtB2_C+!|hpRm|IcZ#StUJ9P<@u@*KBBbv4GuN1u=~`X?WF`< z%6eGwq7HQsAFJCAMgP0ySpg-4cX1c5RwSPE(5OZ}sM(J=~Jcac%7L53EwtlWHiEPH} zb2?ll)%vM0m#|jZ-?giR1snf;iE;N?iJpOjkOZ5R5jGX+;P4UdXM8=*yInXxLQ0GK zXyDRi30zpRRkGwZI;&yi|G1iSG-ly2o#7D;d}($2lN`rR|3>BO_v@@QoQZ~rVn1gK z#n)WdU~6XcvZIURV^v2+H}sGDLPL*4%fasVf?LBkr%Mg30s4Cv+fz!NUZC#p7^$QEJ8EiT|Tq`1|A^)dujupovp`#Dp2~_xZ#me~u;+(P z=JUso*Pdf+K~H_hgDqcHmaBO0yDGMbtj#=-mGeZ#g6wT2B62C;s zQ<^V#GG)9`H2=CAN$FAs8y!9K3t9aPB1$Pu&=d3+*o6A&)O`o)$qv5tJNlCt?*wu3 z5o}s4Ov7{wQ^3l(&Z}GPjf3L*3F0iQpoXN_!ILJYi_FwLG`HXO?naiUzB0@Sznvq7kob4 zPuD@CpVd6?fDWEn?8Z)z>qoZsIXZp^{*nSCvF1VnqvMhM2Gh^)c- z`(CWmN$?%oM#w&f5O+@XpxzZ#sB39eR(UAvR9-IBZF^uDF3xAAykAqEGI>_x&8}6R zPNTL}oH|t3Y=wZpL3{+C=Tf)j%$l*-udjJkoT<81dLDeFh^xTlD*WSCrBu7$00Y{2dm*_gxNnP+!FTku~Q!ZddJiWmA`v*?M{2MKmR6MuRdExHU z6L_2d`3jzr#;xEz7AUjI0$a{@Q`QR*dII7eM5Q8v-mdjx?CZVRVA^^&eMe9@er79h ztn4QV+v&5ibYYzpLpM-&WW2-C-z$-bxX}4q!cJvbt8*gikli+y2_N3?ijrh^H%)lE3C5kLym0jnEjfvtd3^s={MiqGXaPJcMnyg z+D|kSn85`lC#rc72@c18N3MI+Ki99s3E+i21MeQ_O!SWKg+Qt2dCT7`SIn-<9QyFL z2XPB1?nt9kSrYR z+E4y<>fs*A&sqv*X68)b9}78+!YHE7DgEb_;BFqqr^cdzV+^H4{w0rx)k}1I{=3N; zsM>Cc99jv<51CUQKfBIE1Zsx2H9Io5+5NJ)7M%@|bxx#R=EO4;`&QY;ugT#98%+sbMuVx>l&j5P*R*$j*ncl=TrpQcPah7gG_@br%FAD5l@I1QR5 zhLd4T^rDop3peq)?oID>diG>3C7l;*c|S}T3}@>_5By@YOd>Z<04XW9r}F4ItB$abCV zrmIkIUT!|%R7GhJ;Wsk+=g)7IENL~VD*CvOi+_LnO}f^VGktN=G^n5O$?8ka{~=vmp#baLqh1RC9ef zPI*~K(SJVW8A#`13FAO)f18XmBWR~2c&2g7c}2=8h!U`kJ?C`^V-tHVS90KYP}@H; zsmj=))=~HQ@y(~j#RHDN%v4^A+n3Hk*e}&fIUwG7X2DZe$0yBwz5;W@>eo3N#AxLw zLi)|+VhaL6@rTCs?MyA1QEI78x!qj}*F!>xFammc4%hr)o2(JV|^emGSvzd5VRUQW^Pqfwz31)11W! zrf)vma=kJj@D2xzceBCpIeSO$gk&__gWa+oa3VM%n$ZrBhJqSah$-fh zQ=whnyEnCH>WMbwE*=jEnr7WB6uWB^mdL!TKqM-!YDw+?Fd{2F@uk^gTaR_=TUsKf znJ_(F+v8W@c@W7^8^}1jlZrs4b2-It$zN$me_PxdRK%p?cDkDtC;$Y1QOm zd&J?)ES|8J5e^9Dlus{v$6g^sR;B373D=6X$B_;9ZJlvPD0v$+L1tPnf45|4+_9T* zD0=rk#UiLRl=tw$Lv?`-J+P;x$ycPp?xS3uzR+#G{33ZFFvIkd#)q+1{MF!z5CT|T*dK4uSYDOHRX z^Gf6qz1Nz9%C_q&p`*t#^0tmYAI6dK)pbdIc`|-*keyUE*Y3INdLG<_$fPlP`&}Fd zB$FdkAD!5Bo^z&~o};ig`0ad>ljXhb^cE9#amS-MJ=Li!3k>dTa>huPl0IK{%M`hd z@^mpnHiCLiev30b@A3^}=3*fC{$O~cblP8Y&`F)L=-#Q%?C@TaXgB<@lPmKyboVRu zt6I6AYT?f9GCX*C*aGnA**-rs?%=nCNsEbToxp3akuHyJ#gU5>SUp93tTx{3sCQKp zoE5~q9vzA%|F-oh@{B7ZH60=wkXwrWxieLQ7)T**cY81I7Rlvwr3Z0mP_*Qh3hJ{_ za}gV)B1kZC*8Ir&zs+5&7w9p&c;~$jwf2|#(V>#Mhv<_~h{tbYLJgEjjJksN8Lzf~ zwh?#ojg1Ef{*mchFVbM73)!5 zRGcn>AA zVjG?8t{D1v;AvJJC}r6S>09;!+l6{J;4iXv>EWD?>%!EjFY0%%_i{k#^1`?H6%aS-Xo?O6GOgxWNY;q)s6|hSaI6LV~;$#3p&mAwerg?aOb3W ztERTU1U?}b!2OKP=9?L4LuAIiJN$09kBQc#;nUh&BCq~19l7CU@&w{;aGbn}B9y^^ zshTh07kMiac~ME|a1Ud6yAhg69MxrtZw+4i@Z!N#gz3*PU4Eqd#j1C=ql!mM^b=Q% zY`cH!VG8FKzh_q1Mmlojy>cG`hPG@x zTSP-aKwjpkJJJ1kg}Ir|d7@WZb`VFyiAg&{^wU41mx$EUuVwiR$Nt#vl0{Ukyd#}2Zw5VThw-rn|O0G{RbZt>VWUJ zHiES(G*P>Z#2+_sHE60wM%nv zC69K}V)f6w+q!D&^=uMeycx$PlWt40Jg2ew5>q~uHhO|K-Ori^x6X(6W4UyqTYi20Refv$1`>DF%?ClEe zPar{MB|D-2>uy(p6!0hbt+AKV25?IE`5rZL)-CAC!pxqD_oJq6os9oDM2YrleP@UE zO`U82sj-Fy;>b3ArZkW1RK50&<55qb@LB;K`uqDI*a$j1F}}k`1|F2m&u%KVco%SdA%%;Dbwu3L8Jq<`%Epq$pz0L-4lPhqr?7w|0D0v8xVZ^w) z%m@6W>rtXC}x0^)P5C;74$NY3e{#~@f;17$U)>*eckEAMWC4m!aA z@^UH-=rM4Hu`58_H~FmaR!m= zpbG8G1`B^jrSWs!MeK(~0brAksHw&ea?EP4`qPKhbJV+rdZK^1Xu}n2ORVXatlpmu zPosmgSdpx)uWsm3!-UOq6KV$Fmxdh?@&g_we!KxNdy=>R94CtS|034cxh;^$?-`Xp zi(vfCrr|M-_X@RWUHz7RM?6Ukg{h)S3$GMMkw8ZfIk|D`6VWM6+njH_r3Sy+XW+{U zCZk`^J(wP%hZ{Syr=1Pf+;7L!7SW+u7UUBl+ z%+K#aaNpJkG_twZO&c&scxN-J0&Tbw{)*90tYxJpFjCQ|Fx#}*g68M*%gJ!lyCsu~` zU!^sDu9DpBVxJ~}PQ(~AO=h=l;=Cl`yGl|yitWEjukVuG-nls``n$AxY&O$jld9XV~PWdX@4)b$AKZ5|=b20ISb zDYqyrkomfV>R}T^Dd(NGbK1Et{mrG|MgaRmvAW){;$!_Dga ztibBWRrFk0%RM<5rNL9Qh!>7FQBAtk$U;8Hf-Jt^$z&=eofC570z>Sey?$FsxR{Zh zdZkc`Nc>I}3uh}Y_RbwQicL(enUlqGXYPg%CVaXR|GOe2%*d1~!LUI9N6^HUZ;!v4(g?QX@Nr2!jLuaeYVKsjE73D%Eo8!}BPu=f2X(t`Vh`l2IsybV2w7gn!gg&Qf zs0ilzn#MF`5=JZaCtU7m!y^&JonjOy$;$K#d*U|qll#jo2fe~|*`?>dcLz18#I5aI z)0B%|7kNawxKI8q3(!=yb8be>isWf#CTxB{m1Dq&+)qWov%*1X(N63uKu2wD=ve@a zNe@Q`qfkW6&=T5gdmNuDRhkJId4z^JibjkX&fSWkL{RZi(^y}>L`R)31etO|1ani@ z@2Z!Y!NS1aK2y`8!fFZS*HpJpw9ZwkCPx-CM?@dTR=fQsQyPuC&%?~4w{;SUoHaDa z|NVPMf-GUrr7hHx1r~Kz`6*C1pUCU-r8NkqlsrIzP;hRUKfx&@@LnlGE2NlN3R!^P z`eU{~NDOHM6SFOHWtP)7D{1Dmwcq5DVrO2<(FY}wR4)UnDTf63YaCXi>t)Ut|K$6)w@vasbM@h%KdB?$X zwVlR<02el#lci|=mKkyiu3b_6n2FDndy4q0bTJ@JR^GIKkUZF!tSqcN+b3y>-Yu~C zalmBW$^Ff<_EIHXNBX5!3# zXb(3=%=lxE}cqG!ekg>s}8ff@MEjBlo ze`_)94asM6*;yE>Csa)g9a+a@ayZQ{Uo)@-7An_^-I($;o1ZO)b1@hVy_PnfnvIFQ zxld%C4=UthH}mVTwB;gMSY1Ti8k)(*wQCYj#H2GXlGBvln;z_TG#>xFzs0fQIO)`U z8%2_16nl^2vJlraj4e}*$GFes*^GRddK<)qx6^B%dUE|NOYTtSN`yr<``{xf6=u0y zWr}7DokHw0Xf0HSIccG`Ff1MRDeZbAOQx5PijA1+KmqFTculE(sih)SD z^4gx9{tca=D(>~BW<31UQkn#=Gk-!Xs&x&`#T<5}py2&AWk5TspqsZqx0!02)%9Vz zmzBCmz%%*o$iLEHqUW7KWTK=BoacAG{djM8qcgy~)b3QHvRXC-?H*=-n{43ONQ zsYpf4>gC^ZjCp$EzciqYl$nQ0c?~!JfesX<(o|QaBhNP9%_b#Te9Pe>X}aZHZ(WSs zChHR1Jp>P6Qw+@lRFDrv%uNHQtMId{&{uku+e(wxz!*P9%eWdi@z}%q_B`5vb=-Ox zU&n&BOG0hf=72*WVzkQRbWC!thmX-dofr{}fp?fSG7A^;L`2=2w^ETVDIzKuazMG?w(4NUI_l|U?~`La-&xr@L#r?Z+{8;Jmt@6(V0oM|$5@Xe7+dlU9Znw3e5f zhb>p*OlA98*pZX_(Du_g=K(dt=+W)-P*MS6iTx4bGV;jGL4Gh5i=~nw^4P?g90TK@ zg)veyD`Di>jKgPb$D<*-9k$DO7R^>nkPt8UB@w^$cnoyugr*WEviXMN z3_OkQbcNVlp88RMQnG&49~&re>a4@1F_U5xu{2c4mSzK#;@*PLCgl2EumoYRG~jXw zL`y*oDPN``CZ0=Olz3~o335T;;D!drAW1QN+T039E3#t*@bd3IYTL=56(=6v^a8Ma z)zVTS$w;Tj_%-192vdSDfS1yX0wIT>u5f0>+KNo0o>P~Saw0CM3HTcU73K_!0sMlC zG~|cNy}B64ls5I`N{X`JfsI3R{)m{xSl}G=6ndp_n{323k$zQ?Q-N8R8XCVP zp^&+6Uq@1sJi`fy+IXVf+fyNVw^yM+F0vcT_ayUj;65Riyjl8Q%diX4AN=YVzB?|P zA3dtH1XN+I&JZu%+ice)Ng(oOokpX_2^uLk>>G9h`c1YJwL8y`Nk5$Pp#W1G<)*nIXitnBtc-P5KQ+)n;dw zJgr{cPBB@#l6Sq&#IQ?ODY>|AHM=e^8|6~6T*FEu3VDv)MxXL3SOM=meFX{bGx)n zpPTiyir@ARJTOeJ0#f2RzSN4aKiAZ)T6F;p<$~5H5ys>O}AN+2LDG2`T zf>YQa(?S2|93p<%QR}Jl%{NO$f51Nn72)VQgNuInxGZOv?+sN}0?0~^(%4gc%o|ig zfJLER%bS14?+u(-)i`?-Z*W$-*w0kUI7m=UDHv|t+*G#+@NyW;E$OnFnJvWatzo() z#ls(76f*LN)zM1FbAEjA*??E6z(+2Mof>=8-P1b_9k78+CkPd50Fr^$J2fPsONskA zYeu{lA?*cw%#q>p(rQSvfzfy&R^z#-`o6$y(uqigaiy&}Kn~2gEReS!e&e^%o+F{v zbxmE>N?U_1;k z^bHAbPh16TEMPep^w=3={FvrPv=$v{dA(wT1Xn#@KsPfk%7kWYJ>Wr{O$ARso{8Td!T=^zN5)V!?UvcyOu zU9@QDe}R1K^N;nyreg>rMvtJu`Q~tiq%QB8pMGpu9{F{;h)UqIq^OW8^8Thw+tmfxBzd>GnpN0}MYC?RgR0VzhwlN$pUY$NE6!1_mf80O*)+?Ov zpNEEC$6cr?Z!V*zc>8s6sE6zo2KBT0dx}>fVLnt$Gw(vPse}j>MV45Q?d*~RLy;7l zzCIw6ZER8Z#aLn}8Jh9U%M%~TyBK1{R}0`jS-F#9c@|FtF_?u_g23?O zqGUz~X{pdlh9>l}>gaX!jx<$*gez)k8iq-_MkgbNt+!Jjh9|P+TgHC#SfG zb=P=D0#-YTZD@rWuK`N^s zVCUlXZ%T8%=5f>z4>+|P&*<^m%VylGAo zH(ObA;*{GOT4DbJXh3*hfxwt2x1JQom*29+$Fp8J9f4D90&fiX+kl3JAf)5!3Pg+9 zYdAs8Gt*T#qCGK{1sK;8=#zc}aEC5Dpr8nOdJp5J)w#MF4NXN$T2*)wW13LX-{*0U zOwO3di-ro$+7J8&HitGVk%(gVFf{D4H0%bM$>InsnwUyj8!bd1nlN0k&yu`tQ0~de zI{Gov=uug<5!{p1llYPV1|8m>Mx1)pOD$kMSal+TyN7*DMNJ7;3`+1rSD zs7L(<$#}fIL~;D=(qHGxn!D;MW5Dp~Eu`&5_apKuR%d!>sZdLXCbPs1Id#V%wlo+HFCpeo7GOg z&j%M>3vKJb=J6OhMgxm=2S~~vrbD6V{LvlrKE096i@&JGq(>B6Yo2%KBjmcqcau$& zGH3B7Mj+O9RiaLEt-9V0`(qVdEmlvfs|&=!pX;LbAf;`OLvwgIp6dE79A?^KbcPg& z8HUjmeHID0?++e`QmNQ%vmX34+bdCG?Z#s#+%+IAyh3K#DJUEDeicrLSOPE9c=kgq zDperDTXwfclJctT6|eS^SY5>TL&~F4OUj~Bt=H>_vn4P~=psj_(Qv3IBK0!kC6>c% z*E^WjwK6*C3n5CB<3ow>v#}9qzh>7Wu~xOtAXEmY)@YNF0J0YULRu#ASDW-2-O#@q zoJv_|zwfo$*(KjYez6N#v5)q{J`Y8C<7a1HQ0_Bh_w2twdQ_BRzSwa7Ng}5BsHWz) zDX5Z7aM_-mplxhoX??(}5$v&kH_24x9%7u=P{He4;80EPR8^!(xIISC)YHq*6}aq4 z8jHS)>w22EZPx$Qht3C1?(66r>-MV@d=oeU+~AE!jP*-Gzq(Da#eF3AvN-+T%H=fu z7P2xV)@7~jtIpKN)7F(8UWyy`1*C8+)Wf~gv0mr}*`$HW5wg0`e~^ z|CR-;kE2T=!*(~|z?lCy&*8djo|S3XzgmVzwZXQ|N9ZScDIOi)p4;tNsSp`GH1Q7p@yFST`59x)!P)N7#%&&%iWXJ8YaW+vVrjC#jV;XHR%aLOuf|9o`?n`(Rg9 zjUSpC9hV+nZ69+Q%Z~wUXcUD`yJWb+IET-${N$utc3RaT8=pEfyH1L|lyd@j{cNYq zC;0Igt9#IA%MOSQYb=)pxfdKB{}K>%F)pw+pYch0ru+Z^Z!UP0HX#JC2|kGmon5_+ z$anyfL`Z0@OAP(BJ{eo2`j}=E;S}Pd(Ah*v;AvG zl8s6K=1sNrVHj!JTj9h@Mdf7{9kMA$*4Q4 zKcM8c0&FMhli6q~g||Qav2J8>zP=Wkqya@VGt>PjV-zKTxZ&tEicQ5oAeUiu1uv}^ z6AcF9&F1=qMAXI#ot11tMmsMx2y;wEA$*L=0Ql^vBfFax#hlv7W9G}NPn8f3`~3ac zkbDC;AVl9sOf)Z*fZoE*r=zGzHN1(_$!h7AE8Fte=&6yz)}Be4D0#K*q&wPT6I1J= z_^a@IsYGlc_MvQO?XU~CgIkX%RVtVZTOtzu)RP1*)y$nrBDs~0oln1AL&+d&$xJty z_}kFXkdP}cKRdY&5!LvZwCs2yks!{uc_&j&dQDtvsr9Ct4LFycNOGZo^;x(HK33ek z39qtt6_#fDi84X!qbqV)#obMIb)hC#`1|5(RE!d;=L^KHM(gW?3)YlUS(c$ z%!zMJ?Ku2|Hhi0df#YAlpT> z7qomxPybaMM&bfir-b&`w|?uo?0A{Tr}7A|C@ftL`4-<_!zLuqyW0si5CBU?d%mNi zK-0Z8*BnC)?Oh%_3;8KcC-6i!XLUgZed+S#pSPTgiWBeT-_=e)%)#%n|AQI_$=A{` z_HLLUcjGb;xf8h1aD$N33A(vUt!^H=(7>hZrgJtJ5HN$}cxX*x3FW|C?K1stPD45> z7W+Px&FlNNpJ5>7VQ8X4D=G=ov_L$_1AJwSoI-2V+b_={LAiIKF{VGWE*rTq#FY_8 zE?$v(s!RGif6owT)X?aJ%Bsd=+FxR3Ug0X6+rTQONHe+#l+*(ky)~Pge=jM(Q#lG2 zD?MP-YhAa1h81pH@*91Ft1I9%xd^_#v~X1fWTv6u@{XBw0O5vbMST-oMOI7W(^D{B zbI05zFh7sSg&mOne3r*YTwR|AB8KNNmaH`C_*`>ei|Y3DOzC5$EHedWCeO-!>Xj^{ z3|R2bDMGMD>%N&s{e#!jQIJz8>L0W+vO8v%#FJCC74xmjY?8hxo?+t_O9Sd z2+I{T{H{{bP9)`Oz1k4d zlD?D+yEY_X-RVK=YCeqRY{;jQaJ+G3Ea9ZLOlXEEW+10C&xQ<}I)^o$J133P{W$T< z$IGO%yX`F_HMGh@ANf}U0D;#X%1Rx1>lnY3T3E^tZGui2+JTui1heX}oAqAVDk@}Y zSySXt7j45e?6rs47PjSi?Sk(dZ zt%`Fxb@2ZapcMWV*;Ofc7|NqS~Z3@JlI zL#sTxoILPCUv7N9BSNb2nJK*6md}k^;k((=C1J&h!(enIN8lcbS^5UA<|8)phUK7`|_8&c@zfwyh z`S}|1atOt|?7PW}OHqG~fH;a=1S1BcpK5xDmeT%ngIoXpF=>@fQv!7lL9A=JFLdSN zY-Emq<<9^=f<1gwKFhDWQSyP};C~pFDu$5GV!`}28LC8%?x?}t<%a!dF_bo)2Clku z%mhJTQQF`&{J}wOoO@|}U)_$q2d{<(pzqsPOQ6Ejq~`;hB3`_>B~mtf9AgaNAoSO;9)Y5&&9ypB%cbZ@5HFk1L5x!Su4dT7|!fr zVk#)DY_)z22<)olF(b2#9nuchVh$?#i0g$V4OR3Rz|P!1f3OwTWQ?xg+}lZ&3s7fJ z6xh|&vr{On-J@7?f`rfel+P}e!<|%A2C}czst+%w=f%hz($h!%43I7A5vDC)!sA-8G`2NSBT=>^WF5?7$85x<*6kEJg_R+rV2);TbE4Q zbeB*`e7v+SjFUfc>QGN?wKv71H_oMq8BP0m<2|kI8qt#mwaN--Cgn32%nU|av<^jz zFs4c#!%?hJI@*5Bezg6T^gZE=_>duf|~$HPO+>NOiNTTtvLdshQgP_+fi39+det2>Im^2Itrf zdMc3x=-OW=I#aK9U_ZnzJXy4qjDD=4`SC6bx1V;U!efj%JJl{yiK3*&Ti>Tl%7n+O zHs-oH|3nw1R!j*YxGIMhE85d?K9!%UAgvw;i5l7x1(V5F5v-m zcdKqh$>60vcaZR znBR0<=iwf=lSw>uXeG0mM*M06WMe3$7g+9hVR^V))>zMxJCfn3JDsh*BMb%fovykJ zuwsPu)wvx%&9HKhZ4%f8ue?(VLPHDm5AbPs({(}(uo`lx$ zVkoHNHFEWIZAR-OHXoCR_!IRfes$ASjnO`D`hVIi7p|x}1}BVSHuT>_(zg$Tp%%3A z<5AM%H1mrCNNksuqhc#kGVi7G${Nez!$^`i4C$%RhGwknXs6tGb;M4(gRyz6q?{k_ zb8lcuV*pxPVxAQyEx_OC69-J%qBdleL7?ct@Tv!3)n{7$770^8PqwgAqoiv;JO_9@ z#CGq+CWJ7L7Z>O78$cOr%h@oO&$MfncQ^{IMZTHGk zNpaIqtW$Tk!o$1?H`7A13sa0MMl!VWSL`8kF2ZrS)$KKe;(A@Ppc8VRhbV0!WSKcU z=w{-0gF|Sgq^&9%c_%Km_umWGMDjo8y3>XivQ=t4_ zpYYH4n_xH8cDc@>Ew0IZX;zF{0pD&9Jm_ETM+lFh_ccr*2E{&g8&hf5#*T%>NylN< zSlYwW@14Z)P2*OzlQQR6{j%C5cwd3mmr$67G#D6iM*=GVviFr>WSfz|+Rb)mAPO1jIR#1mdBK5U5h z4Wxk@rUwxlft;D8KM7m=b#BqFer_;y_46Ojo%?1AB;aavqI`&TB%0<41#=#ShqL(| z#Y)=jAaT?*k#I&Z#;M#uc0pgaD04m`xaAz5awA?E38YUUJsTPnuEn&17JVZ z&&-qyX_buBw9O7RF_-l+L+DiVgw7}{5~GF-rJw4_WE9q0uOpzK<kTxd zHsqP#l5g7QWUE}+**2~o#z-AKFBXQ5L7i4b3Ln{VEb|afkWB)JmU8ey-k%YrV$|l{ zAHJAo6*?|#-E90tm7<{Ol|k?RTcL0fc59T{n65nWbEk$G z?bO|N*tO|f&Ut@{v_0;uCVGKtd=8~G)41@zDvZJ1(%`CA!6Ne}5}YIxximJ~5MoSB z3^u$+WeZhNDr5LKB}uY+Gjjk>#o-K>uyVFa@cN>SLTtp{?Jm~}ivs|Mu%-$LI&W(;!SGQ`4qTB;%Gd5Ot(oo}!NEi26byR#S=vYidQ zbDmM5M>BNv*{C`)>#sHye{nR2QF_?)egiBygImbzAT$`-NrQcdT%I!y%nlNRF)_mz z#fgz0%5kj|B@uE~zin}OUEtNmnETn}@wbl0?e*WX09m6S8I6&><8Yun@zqF&#upQ) zwAk<|2j!~8|4H#O6Tf80@iF@Jlq@N*uDx4#Z^NY;XI#rJKKReD^N?~-oVE|so%=`s zThX#=!W>Wp*C(^3>q&Oak)vm{m9vqI^-l!D#AXw>*iU?q?Ia?E6!{^>JV}zisjLy^ zE4xbfy7)_JsZf#qNjax-4=aq&asBjk;sXe>+S?|J73Jk8>&=FNEI^};#qe(NS7|#9 z`JkZR-?J@#v5s$1I~=KxSFfn&Ofhf6S#5xupS9>d3!_|sDN%et3h>8lzm<_p|M!&z z9{7^#?KTRR)ELI#CA}f=+jZ5MfGq0(>#+x|nOt6;_WY!Yn(WcA%PrSz5Ukm|&r5G7 zN*D;Em*<`ta?G=-Ig(B?kduszTf`b4X!I#=!=_8YXnKUhF_3T^aw~#SvqQ_raiP2L zkmg@06X;#vE0l?W{KIFI2X@Y+BmLaUC%0m+3b6Anch~*yl|aRGVoS{ux63H11m}An zv3(uo*R6ybMiv;}VKTLW*nuF8pr&8Xd+U!y8+Juj7S0v=T6R&>h59c89t98%Vtt|TnEtI3WRf2d3Ji@sMBD>*qh-eA`9i_fntWBvt)<3Oja@^L6wEY@w` z&!Qy3rRn{t55BtBRuJt66-x^1%!K}adS6>{%i=fKS9h?oC6jJL$&a-<6XWw>2QDv_ zf$E~da+KrBECdzuA=+wfztu}fX7Iw~d@0trqzF$=4vl6X%A)5bsNZj@rQzERW)Pa3 zAdjol&Bv&~%qBUtKX4)G8cFsaaLmKG%~Txdor;ck z0)>teRZfk7=u-m&fzch)**fz_ZpKsf(OvV0AjIv!v!Hw@E;H{s=H2zjQlnsZr;X=7 zYWXMjb|^-C9K7>odE@K!UAC{?GtR|Pjw1CE`Gu$@XjBpAm9KmZ7iNz?uX4|S#Z&g$ zid|RjNa?Mz@$mk_!|yHkUDP>A`IEgLZe({=?@1v==wjqj!|UXtCI64Nx6zWO)dZi* z+|+4vwo=tDitbm6)#)N-ZEt669;Iq>2yCa@e(U}m=NVDRXV%j5=B%UTIGWwHsECzB zmX!f|1xxFYV`IM$G(~Ev@j?>-Kym9aZS7v;p@>;|zt6KVp728VnR16+9NGFH>ssPq zXY$VEdW6o>q95U)Gbf6^F{6BuOF+L>K*D=tl2^-I6R7pX`6>euUiR;-MgYhFCL^j< zh?QrcDOUzBXuJ&{%qGU=Sdx$y?`}v(HRXs7D994m_%6MzO)6_E^4`F8gW9f&N+JK< z_a@cA`khjekMyywWvb$8N65C8+>K;~ZP#y>QcR06*pJZ3KOl94PN~)gN-yKhqA#$Snqk3>-k#b4k!UAL6KErNeGR z9h-x~m@3M)R2e>#ubXdU$$X*^F;g{?bVRIk(}7m%o*^$(l191;P5cL{wBJOUZX*i( zRo@5NTc*JK?zfC$HI%$pe;h}gZR05EBHgzhFRGzjRKo!v6d>rezZg-rHe6@*(G<@a z`|RUgORbuh?_wRH&MW*skbzT z{R4$UlNS^Go;#^%HE8ii6hAU)c+jWk#~MbhDK)DD@6o6DaSxuKg-3vQ{~##kP&j{P?~8HaI1qa=&w8!8=)r zIbGagM||tTyPC?f(1)YMjNL3zX-r~d_uBb>?K2-&84TAdw4|FH)&ssN1ylCgI@XUh z>;Q2h{l{E3w;^?YFXsM31vqe_HD5d24 zaez({#gmyS8oPF*i|awtG1Px*O7A@pF_Z=vpHXv2A!M*u?`Tkc{lL7G#$)l^akxP- zeEHiAtW~QAA31V?db++E!Up4sUO*@^g_W)hN~yB%?#_a`tA!OWlK+|?J@IKWvfSn-BVr-ZF6Xm=` z)jXX5dD0%RPjt3}*!C#T3yP=yNrS%?i)7D=XtRSpzj(I97pVTI^*Uu4H&`Se7dlxa zD^YTjt4dBib>p(Ahq2#(y8N@mCk3RyNfMraqt2M*CZ}|%6NGU(!B%uRVav@x!Dv91 zVcluDiz*v-5s2+#N4?`}!Jx}2ASD8EbpmHze8zk)Tby{SqR%%vpA7r7i+bPdZ+522 zxiIG7&TAzzN7X;o;(mUH*~;G#!;&OPHCyoUE(^BdFx-hOk&2}$;-ohj=hX=Y+4$or zW%Y1UGniwg#ph)HqsE_2GGVtD8bucfH&%vn*pRf3n75}gFiRP+>20 zVp@0Obv1@j^9cHtD^8)M8kp9^u!f$Jl2^R6)(!0)dVYSvzVh!6a02cBEyz5LoU*(O zPR-^DSYq+zSF6Jq^97Dw64)$7>@*rL=_DiIeZ#G*4{o0sCX*0Bhk;R3*NFuo@~Stz zDQ)9A7z@hL$N2kZwFU@cz56)CmUm0@xXoi^;@(gCW?i@gx<^`; zZXf+rJ)GU*%n*9bLNoRiAuk9V=%WjSgq(w>kAGy?b{G|g=&V|#KFdd^b4|VxGI(@i zoTrPyIG;(7*-UYw_|IarNuq4Zk=9c|YKFh!w5YH>ta@3!*wR?UtxHx0GVcrY$@V|m z8aCutTZ*_2|C&{<4zXz6{?9mOWB?Y&PzaQpf0m7={%j^=`#KIf^yHMw-0GoglTsNe zi+{u~l1xTUVO8;KtA@h!VP4q#le7+As*1rPrLAii+?fUuzvp=zHX4$jk7`s$Tjane zq+&9qwYsyeMm0iyzLd%eZ`fRxpzJR|JOvdO)}0VOlGdZ5${;x-yS`!%FPqG4yBS&d7j})6SE5f=J_Bi@k9-`M|6efFSnp zuC+v${by*HiAxk);aZ&k-;m_~b9sTIkC^A(0p&97rh^T)9?9r*!mI}TpKVO_AIROZ z8eb=OasNpT?+EQgM%iRgI0tbJ1`k*5@cspQ);1yz)4SFxF^#wCyxRo?b69oP-fXj6 zTvSU43R2Bc@VXPDF~e( zNQob{^}ZQKN)x``Q8a3RGDMoU6|^7z^%J$d)`!iFZIjW04@+#?8Ilk)?E&#OIX&65 zmX1|ga}LzlACR=g-oFZxXRyvKiyi#LN-)??Z_$~dwsMS4#Du+>wC_RkYsAe+jY{-q z=^DKJ-{f+lC=LYydFr35ZEU0N66Y_9pt#kDu#2$#bl(Y;VwAitK5_O#-C}XwTxm5% zad0_~Dm1TN=N-|FASl?a=SPp*Ri(^IYGSd8C(~?V@A%YkpMFXMgGT+QzF{0}VtILf z8s`PSujwUB^y;|ns~2p}%P3nDUH+vmt{+gC_TQpJMMuMfbbU%qO)!#Vq@7vO64!M( zZpP>I2)DMUt`>H)M^HRv+!9asI%PfA>MMWv1doFIguPQ}xa7zr)(752FIwB$I7OSNZP`W>zxvLGGDhWKi<9@L=V}PCh`#= z%HaKN!p*pX)hXslzfxP|oBq#QK(7*=QBvPLp-`9P4jOGIxzkQT<5UX=ve-6r#4^AN zYSybW+{Y4mRAcE(Bli~qs#Y)>J^0z;iP!$!)$r(Nkjm*{-$oWfMa#09VdGIwlg zV9#|A7>WP~~}z0sLx_wSyu|2z!Cs75Ptz!Pdn+ z-)&jkf0F10bj|!}0HfR9R{rE3bFhQ9z&%j`c(-a$N>PnoZIQCbKPdGYJG1xjV@JTL zc>-Q5jlCSXGW^Ib{F+J3SEu}VS_=zisHlxJ0v_jitF7}BnBugc;^y2JjbZWYYiqlP z2IhG%Qwob)3kbAm&`A(oDnrGHX-OszFFRz6_ko?KS)h`N4kc0uvU-Io77KPYY!j++T(S!9)Ri3=(k{9Pz2mt zasM9D{5x`s?0p}Yr~I%VskxHzD`TZW(@AAyrpS|xI+FN=m6Dr|N>_ZF!i$+HK-Qj* zgB_0u`l~x_LZ2JWsqsfb3zPldZ9Z-HGDYFiG-eaJ z9WSo-ek|;kII*H*2`H*ZM$25l?JHQ2B58b_d=cfTt*3VyYp_)>vKaHLLY7w<5&{nB zx9#kPG8=h_D|Xz=kF$|9xoNS9tE43bwA2#`T*=UsaILL~*VHg}u9(xTT)}1$M}yOH&t2zXZd@E)Zx%t0;b4FlgRGnnToww>^-3 zJX0vh|7%Z@2a7@CIxNATB0nFKwCzUun`fyy%SYDbiHK~uoVsrvOvXi$`VN?!K<(yT zPy7}}4Vj=%s?`C%&m;T0Un#fTBUb{(yScOQ zJE)9OXvXH5pAe}+cJ(^D)!GnXCrFpXmId0&|i7)I?q_X$q5#>7|BFNN>F1B?xSS50iqVE2D-zWmwrAR`Knu7eLc9UM zDdsdlg-@#uJ6KG(D2{^O&ef|vt5P|pmBY(&>X=`9(48-GByU5oUW=mr)r9&c#u=M) z*lF0CWSP+YFrxV_c5J%5eI)FUJmWqm`eLogL9iX)MIa?D>K7@rf*bUW-ZArrWfs6nM-~rOW0e*%Eidck9^tCPgT8ZKf>rS-h!y2+ivO+ zRx7pnUa9Ph>#gqWH z0_$PazxtT2@w^>nFV|yY5}E`1Y?rqCG@OqtZAO*ty_N^GCwB^QJ{)OoT0lf4n!A}? z{ssv*|FxLOTlD(;kV9;$V)^eJy*ei5uFA4oeg&1Vj+9d#I5fgx7e+abyc5Ep*Qx1c zx7Zkl$XK!V{lBj?ipkm^&^p`7!+ciJ|apUBWFeo9iIbj4{dqr0 z^9GVT5!+$LJFkG$&yc`gawHjVMjbSq3|=0~!*8$BR#F0v@%w1-XF@rwG9GSWT#w~& zt0JXr+Vu}VsV9$Fgn(*VopygQR}N}8miCVK_Tk5H;1w!9d0$O55Ovsko{aCE<`z)iQD-VgT%x_kHaZ`|V#;MedwZoHy(qde&Pl zUGgF{vr-qt%PzoGqs)73_SE3Kn7$Z}QFo^3PT{mS{b(debTyHdBKslCV}gtH7FA@R z{QHHX)KO9jlaFsAk1$s^x(djz!_xJH-e7}dh5bZES^jJQ31V?hYXXfzOKYXIlvPFQ z>|1(cJFOYw+Lb{rVg7qA2#x9azX6wqU_=3O@9fPd#dR4$-i9j_i)(KpEpPXZ4Oj31 zpB9eSC}xi;ucO5%cqNfIRU_!W;XI8S)?i*$Oi3s1-@}UURF$O#i;3Cr%aAQFSbr)< z{IRd*hQsZE+GXOt#b5ae4jDLnw&TjRi&}=N0WoPTunq77q z4V$51nE#01B!`oG18Ma4ePjz7%-oG!+!DTtnUSCUgra=(@|_MkZM2ffznadUP_Dpp zBg@vtEw)WDz?Q-O>aMP(4=2Z+pmE#uPOdT)bh~g2H~|DJYq+tuMP;x4H8Q&bdPPP= zV8EGtwULjyu{z10?LwIM6h`am+4QKmUIwP5{33(v`(`Bj_rWBFig$1YG0QW$tepPa zxOjp@`o^&lb`BDgD@SwA z-AM$N&CfTb%+IH!G&NDX-oCv12K*lK_4GwvKH@A?{v0TEnf8~KCToM&hkvJTU9#h8 z+W&LHfT{nJ5I`E_=dj~9Z9GK#U%O?dwws6MS-ynET;Uo%t1Rb%l!Qnf`x2? zsq3ADj|BS~J9(z08GMNwA6QK*QD3i0%r5K=x9V444Y)rPjED$)-dxC~KPqgfktBly zTC}DB7Y*y5jV7-^4A%CqE)aJBzLHbQh$Xn6#|&fxZ;p2ps7u=<*(52P(|0~ca;Ke> zIg~Zh%A37rt_Bi2`|Y^!9)E#&&X#Pw)Ol!qExskaxMAFtL2cVonT|Ud%phudG@1B9 z=?0}jiS2%0$orY;|>zw4@NLyCv3zcw2yGD}A06q1_l>G8^9+QeC^r5MIXOUt+ zj&o8^wiNF=Y49=0@t4v@NMWrYBd$TbY8J3~UGTrUw8@ z>Pq)Q1MJ{pb(ONn42+5yJ>xNDTm5h;fi}Orks|EoYR>z}97ysq%M;>iTt95Yny?Y? zAiAG=E*08W5VC`1^=wV-!uH4F_H}C3D%8VC2~!ERVZ?R$kkvN~U?$IKj+{E8@6|5a zRg8N}EE-34Bjqo@GwF{1W2g^+=!K?F8~ws}c9hqI9O&`!B4&ZLNXd9=h^ZR|Ged`h zf+Rh1zW@fLCMpuPfZD*Be)q$5Ti3gLMmXuUMuQ!j%Uf)7Hq6ld_n6d)oPSVm(iC>F z($>HR*eKIHS09zsE7YHVz`-#Jyl5ju<7IFZzz_cdbUjfwyx4RoyZ^K{LFkS(Gtq&1 z;{dv0dNLEviuMUe`pxz_<3fGAGLcQ4i&@**AEUo=JjOyXGmuM0QKXB~M zWJ-%<7UZGXwk%DB6||^L-%^WAKIClCqaQ~?h$7%T9AW!OuWog@phf!fhGxdlDnHNT zWSlODKwua5wyU8nlEYLv;w@K@_IU4`z4wK)Kl?@h`j_q9o>S#Do|jU~?0f=3j|U>n zBK=}1y;OD0w=6ODY~mvjlh5?AHjsuXB(b010aJ!Yr3rT$s>jLo#~yj5*Cvh_aLnbv zbmPs$bk0mR!?3H<9^KP=r6m5wQ^b3R*m1I^dz`p=sftH{Fs1C-iR))Gr>2lFR)jrT z168kGv$I)}3)szH4pgu=jf_qH>Ch?k@#;$|^YhbffCu<}a+?YgobS~>J|(i6RlSt- zDMU&|>7MLmkPVoPp?}(OaCFhChPcob=}hd%y_KdO(L{LsWkbV#DbSKB;16usEnO7L zY65b-c3hfJH>TUvYpR|Q=dVa_8322yr>xJOd7u0=A3Zw+-s$L{#(HF|h`Oo!NYFI< zYL|G>%>A<#@cHTP`{f=ok4vDj(DDSqi+nA?KHDPNtJ8^ZCm0CdN>`h)V4}a=;s{xM z)6)X9xI!4|xEqJ5w1&%q{4JtXYIQ&oM{anb zVN109>^?fP_+z2jc(k=p2~o&T`3~w@xDxIz#T!tM3->fNEpT^yA=gkRz690)+$?<$ z_ll(WTWfQm8+~4=PS=}@+Ww|YFr|Jrer@mYKDeIem4?HHn@Y zHNCe*_i?lf{N5X3Au9iBG?*+;BUPiD+(SwK?^jWMq?R9buboF)Q$}VYG`*i%v~Dg% zVSSNL@o6W|)n63oad)enEWBThji#q=74c z#(f<=Gul_=r;~XYEu<1XZoL%)9Q(<8DP9hSY41e>og|moC^bV+_o^6(Zv5TWuCEoZ z#C|Yo%-Y~|l!)OK^=h@wDBZxsL$hqpQ@}{m#=kmp01N+jc~23-XE2q6*9Qyb@RW&% zo=wA|-iXaTl`x_SWSx?7fPlJdmGDWpEMV5ff7WiF@H0E+6uf-#=lYhlCT8@#H)ZYL zk0(ztgf~uRZ0L>SNZv=mBypVnlz1^j!&$r~T?Nb*V_3-K^8n0@^3ckPLs|YieNTTJ zvZf=;=YbaJ_~0XeZK`ZH5$D8@U!fvI*h>UCp$_4-t;&=-hawy+2P@ieT6oh5(HA=p z%ILS`0wS;z2AW2YQ`*w3GNu4C9K=sfhX&3*Ao&}FKkpiSR=Kq@oh5W&v)F-&Q0TF6 zRS2#w&%Wc}WKGFj@AMIi4yT_t9>!mV&LRJ$H~X#pR7&^4+0p~!V8h>G`^U4Se&h!~ zGV7^tbvwA(Oy4hGXN7=y^IqQmr5GA}`R$v&gzX~R zx&h)O&iuq!_-L4HAwHx?-}T98j^w2jEaWNxc$NiSm}{*m1N5I2l!&D60~k*bY%{3ny>AEiQlY@xjpN}kq+uWZLBk3(0z;nl zve_Pa!tbDya(lR-OaEi>c!PVZ(H(9;j{jUcgqSs~j20N2&Yn#b((v==oY|?@o#{r1knC z<5s_LJU(xu_apVCc_TIUI~iR4vfjFB_fV-W=O$s)dEl5WmJsQaEUTI4d?HVU^?lqV z(L&{8=RKt}&LijM-CLS45d8R+=3P$NG{B6moY4zQ>^OU(m}v_q-is**&$+bS*cIsrv4Gd1!+MoK zrh?oYWZPEm(x~`giGF&u0oMih--tTuvsqC!tCiOhakwfjMn#;UGr2443HWZYydFiE zKyHfM>OvPwr<>61&d+?_QuLfd&+K8;t`vM~MtV(aNAv^j5*Y7tIg!3#3e&N^DN!}e zBu`Wq&z;zlettOlxR>tq=Czl92HUP6yYwtqs(DP4nKIj?M)E!w-@Eq~NEH$vEZGl~uqKirRievf$%m;Kei%dbD@(y`*ynIaXS2`* zl%0RyXK4}Q{ibwsU3j^-mAze120I%Ow%VlpSb zX8~n`dmz~@+vNu^$40Kb=mXl}#gqV;FKL8`&s%J37izK(_e))o035P|mIsQqDezR> zK>OY=uWxdG)=NqWkMROoiaxG?P~Zfd?}tBHPvR(9`G)AZaLZi=gH9i=E8JX)8}|K1 z>KQ{$#^{}{iGQ}T%q1=x&nA?}LKo}LBC3_fI z^TV+UD8c9WsEC%4q!?Vx!ck-5a=)ffRrv+-^%n~R4NgQsp`P}&vE3XTq?prJ1(N+` zhz5OVXn2@r8%w-xG$dD3&D1IS;J5w()6~!!=YS zg6Ab(KgUNe6X-cI4$zR%6-p3j`UNrUyN`Bs;ecR9CkXjcSv^UICG&t2HC;JDk^T(w zj%h<@P@L_^6D+`1E1{;H;Nfz=eE}Ac?xT!hIocPB^!?^pd%f0|OF1LKDL+++yCWcs zE{rGr_4pB8fQ7dyRA|by>b$xThmGq*uDG~p|1#S*Sbnqd5<<|mnv6abDC_$2Fhton zd$L$|Z`}L#`<=sbh+mXEV6Q!$dc3sq+xYgr;AyA;Vo8C-9cptz<4I8qsf1H*EfSXq z$p!z>uM|LE*eKCJqx$)8pNI>210~(z$oMvU`83Y2r)0q!wXbFrwzAdHgOVRusW{ui z&7%!#A#q4+-!Gj3@dMuIjLUeocdI?936b`vLuZM$t<78c$%s)t1{}P9YF0+gnU@;O zkL$Tj<}r|BUmTCS`WFob#^LzTp~-4fo+Wew=~V|N#YD+EZEIhwqeeH$v5uJZc~YIL zS5vg?dNRHY+mC!o1(zVAZ$0a2Fuj<9I)VfPK94**fH{D*=kvJMLbN^bAGdS2%e4>t zNFq&=>gJmwUB)c~s7ATYt0CR6J}*1XGYe2iyYuv@%5wjh}(ck4Ts zpCYxbyf|4PFO~#7@)Ff#_va7d_%~at9;Al z^~MS4MU{e-CuxE;^?|AyY%VZI3A)SMWB3c&?3a6J_elKuVjS0W?+$nY7mbLqE{zlP zq>4V6`Uw9<)i%JCrOWVq_m%JT3+IUsm_$Iiuf&RXP61H2j~Y$YM!5wQti3``>%JA! z(pb8VMInTGl5hefdPfqYQ#V-b$d1)kb+Lugxnp%raa)XJPQ?Ms*=m|o0pGU8sPDTz zea^Gf^4Ih@ABvPpVO*l)cG_h%l|2Pd<(a<13@H|(U^seB(Xp+7$3MYlG7LVYO4$Wx zj_=;Yxqq@bC!T}sxoRx&4hqp#rLBd-Z%wZ}nIz-<2TC`MJyLBt8Q%5(2t$<#4W^-`^yM_?c zC!!P#XY1xQGc2U;nJUs}Iaeieki)^BZI0gk6Hafn$$8D?w)>|oLda=JNdusmprB1E z-$UJW;H%3Ov<=*p(}P9&$NE_r`WXP2F3V^`dl68FFya2tcHY<^LKHh`ltZCtolN4* zTyj^@ch5_A9=%PgrS0w#cr4R^sNuO3@Z?XT6_eo2Y`g`Jym3-L{TalJ*-q;HWCzie{Bk14WnD;>V!Gb|b7b0&xgRipma8^_M zx+m@K)%6oyI20puno0J=8t9Bm>XyTVD!wM@ZyDJj``~b7J&{k&i|v;MF!*7oi9g^v zLhrnNLp)a4>TN(gWo~-?$a!1@_R3?eJ6u<$Ic7_l?aRkb>C^-GE{H&?NKcEj$Vzv) zf~P%PH5IytOQ@U@!0SEe5CvPwHB9PwkzAsCStcKYg5S~JF3p#TEu96Lt}lz`GJ~;E z`ag4-R36hB=^YQs;gk4?mW@$1s=r>gFh!T+U?jrG2g()@iK%>PX)fi3iS3#*05#Zmie*UD#91q97N@QN)DUXlwXlG zCmsEt!gxAS0JN)>kU^9!-W}Le+W10HLwDroKWhQB(ZQqu#$&QQE7Y}w3b9F|68 zJotGqdO5gU)C}c<$STrG&ATgS?b=UY+4Y?_q_ zf{IW|E-cYAHtz7dyfZDjScH+5U|Z!}_7_4{L!ECG*JHCjH1-o&OZek29rT1xYe=AS zs{C`a5p$`ErGz9+bs6_hPkkBJe&39t*=oLK{Ypnb-~FF=mHjo_iiC1|4obz3_vKR_GwCvG~kN=^!EA7(lK;m{-0#59b@ zW4#{8q`r`N%6{#IPEMg89gcmK|Q>3_o0@&AL{)BpLp{}C6>|1;zN z@7zZJ|ClFLa9J7bsSymavOZ9DhZWXhms<_g)WT6xX) zN=jCs){zLgP5l|C9B1n!MKVYiyt!bec;rivP3G7*aZBTh$!6_fMtuDZg@oVdas{Rh z8x}GX@OHHejl?3zzQwtMh#H?OA>i$oCo}JB)3I^3+wBGaROr+3-m(9zTiNF9;p7f3 zLdzflKL-A%rwLt|DZjh)slIouH(ZJMFt5Rz+-kYTLeS>ZuY?nT;fmmj`cjRbJMy ziYt|KZ+UenX&KCSuUX?g$|0bY*}L*&ED2_p%BJTTh2~avjQ#Agm1_S+osNTjwbieJ zRax`Nd-nStD3jk!-IvYpcCg}C;?rWGqU77+3j{y+{PnNPjE{r4P%EM&pH$Cd&gV&% z#|0tMl9+P!YB_^X$K2Zf!HvUb=$_{5V_>;V+hJ~Z-5ZW?0iwnBwPwsVCjD#9v$ffttUSI)ccNJrsf6$ zY6Busl$7-ppoK=P#8 zx6Zx`Hxi)Ywvp}hy-MFdfY2#tlIIff3lutr{K_2=Vuc*j<8xTcDyS@P5xN6lN!jV+ z*r;P=0d66fhR6AQ@$MiW`!D-dwMGtGdqAt!NaF=GUPGOH@|m)5I9Xt@jr0wzA8+MB zjL$mJ!}-Z5u=Omf=bS@oWi@$2_iD3_@2k*Du6wZM@$cw)KVd-*GnQ!26Pxo9xd1aB zT|FpSi(g@^5l4@+-RYDe4l#dv6c^abBY#!CJS*?gukOvD*j)ungedb zehL0h)-|$cgU;UOk9W_QFLh4!j9Y6;=FTwB*xw5|D3$oVshopz!NnIP;HJpThc|ER=x>B) zDzmerD|A5$ish&Go&E3}EJZX=Yi3tjp;2Ot zW0WmL>plHxDVEOLi0H+QUiT*3I}h~3NeHJM_2~U~(4}t9><_OfPpx$T=UZ({Z#Xsz zyaFp}q6fmx6%QZeqaYmevzmaXMN%N6AKogiU`fH|Zo67D1Zbp`cC|Jz2R0Zb8Dik} zni;{VP@odHm}@ge4{mH6z0NDKdvYSb5tfv&(E4rBRC>Fa%?3hAVdV=p2Y5c&XpDT= zYy$@*5kyOWklpH=4cS;J0fX71x5!-Ota;)&-n}^KdYzQmkE|Kwyzs0nF528GAFK@6 zt$A$lQwDq&a#YNGT823a4x4^_jvqfuRNV9G*}X68yIrKX7m^+~#^@|mtGIqit=QVkYIF!7^n}!S6vR7O;s61`zM*D)E*0`?< z3yZh@Sdv6_-cxj?aSv}Kl}LeFFD$@y5_42*0e*JjPfx)mlq1BZW%ErtkCUl&c-s)8 z1jL-1X-aw_D$6Nu{(cJ#|%OFNkdPrD{y_(UfJJ;~!os-j;cMGJrR#)!^3BW&=d4 zxYyanLRYy&QVUrE3*pQOiiDi%y_$8;jY?Z+?W0SMGgIp&)Z_7%xgqO{fm`gO>m`VT zdC}^f3HXQ9{KQ;Uo0RGP&P?jJ4l@4hrYZ(qsjYR#eUT|BjN za_KrBbj&S!qmwQrh1oBIi&$z(i%-y0haQr-S`LQK?7?(TXdSfMC{5Z=Ck5L$1-s=f zZ;MGFFE00WknsWUd`QWzTjvAEqL^Wnn+X`C0)2-iIVpDPIMf$fj}sCWc#{@_=HmhL zBeS?Ib$mKoO7Z0){SrJ~DHrd@NqJu!CU>I2%YKruZW~IjnNtxUN+_!+S zoEHbCUu0Rj?J1CQ*ac`kBavRX=;B~PW&`srpG&$aNj1PULsgRvxM(LUzv4Ry__0Vo z%e&x3^ZKV!K30T=zMn{2(#JcTeFXCN)f&k-OqQ!m+3#gE1a4^m!kb0^!jZ8yzLlux zx@8p^eXZa5lJNj(dLwz?aYENy%z2H*iKxnkEK3qu4JeMevmSYsK{=e7n5}i$dnDue zU~TCuEXiVUE@t*&VzV4ma50w?78R1D}ap- zy|(M5D{}HjK2mOD2Fi7gt2zPl53P42L;dh6&y#8ly8(F81o{Me z)SV-}{i5YPyX3v!UF(jI#=q=#Ic0go+_W-L%mlO!f-f!gjD;o_4t9XOh3ru!VKe_p_a))Ss3D)W%C7&#}bDnYoGdA-8>PlbKwSF7Nc!LE3D- zfsjVlqzvVNFkkfhr{j#dB%jmLQ=R?a=3Z`>y_(v%m6ev4 zU7*a!_otWV$GlUZ6w4l;(R#!4mM3D=rXF3RQyC5Q!RBZfr(g&Jo=Z4bXe7PWtz_MB zFTW<)0NA7(a4DQ!qkS1B`kXx};X!X6wf*b>o$Phr+9T_c9xa}6cSa-S_r4mai_JtR zbUPAs+n&7+zN8hS=0;P++5*y?@Xd@DbO*hk=29f;Z~3O_bS1yNmJ3at=Uph)HFGAK z0yp1~4A5cG$vyBK!`l%ntbp#p+onAAzBkYCg>s~OkKp~HlOoHSWsfxP)zfh~P#;~M zP6Kx{cb-MGvK zvoQ)QPsB1{Y=7G4VOy#j$6mrp8YGE;kOpORV_tne_431fIeTE-D?!DzUt@&%q#uCN zRXTTPUo4iqR&jnAioCz_DXWp1>>YZqYvgzPJ9%*w=`6KB?5Rf@iaq%mecY#q?eH~D z?hw2b+98ARzA@w{3F(jqx~qCUR4}+~WgSD#$Bxn(B#|(OK^?7ajLb?^mQ;<$!swB> zt~|09_?rKk&1*(o>iS7e8vXL@Wa!G{RN}b5Q*$?qIn~eV7m>@>HYoC2>xOG z6id>ft1&bM)Y{Z7*y<=HuG-EO(!=jcCul$*ZeNh)4m~;ObW0&*?NwZA96JI`W9P4I zdVb&C{TYyXG5~;L1gxa7t=Q*y6)pBm3gv}mCfDsC<}JO-RMfnN$V4?j9=D3^1yRzh z=U%2&C=GhW#;OrP8k(2^Z&@wX>3{_->uXgNBV!g*{fZkZnrkeTA<>)HZj{Wp1_GB* zwTf#~d7sI(_D-QQec!!N7gRGPkAj0VQzz5*X~boFRM9L=0W7~nuS!|pZBGZ^Q4Ol* zn4b|X&Gkb|W61ni6DW@pZ)SyK_vi_hE>5z2zQ?7q&=eguB% zQHXvBI|<$_KsIbN32)(oNQ?ba)JW&LQ)t%yF?clmneO?iJwT`g9O}Kry6E|Q-HhB| z%E`fTmU?8$=0oH4R!lnp*{{XrNs?C3ss0NWl(~fa?h2A`3VGUTi9|2_`5neZ&r|iJ zzWJTe^6+$6Fr03_g5GL!nuTV4`rG~uZh68ZU86Jf%#AL{zc;P$JT2pih*{9Kg>1Ez zS;?>FCER#k_nvi^{A9GAwbJkl<1g}eeTX+P`R*q|<9dM+N^$GbgoN(S>F>KYpr@;x z&)gn8v>^gWf0xNjiT)?cWcx3#;NV_fIC#ZX;Nali{UK2#{8W5 zvnwJa>&YEi_2gQ6t(_sV(ju@>m{0%!09H&?P#ysI!V3U=or3uKIbzDQ#R32z0K^3O z6kXCz(;c2Jmw;Oa1pWFMztc?=N=ptN^+WC> zi%b8mTl)|7lKQ3Gu3VK;(TXgkoJNtzRN^1zEBrrFWmVg5WRQ*6kU+IJ&y0AoWdkRt z^^1uyYvT@cbuFz303Zv$00ICo`w9XFl>A=|Gs&RxqOy`MMP;SZkHUsiIu-^71{MZp zdY1kqbRvKY_z?>Mx??C~WJz02IF&UwMcN0hKgKwWxcgRqermv!++CuIVq#25$uBKr zdX@pTL3UO?z$MZZzyB1$-3~S{B}vTtEd!Y(Usu;?PZ$#aOX=3x1pUEAUy!YHV}Y1&k0t7xZ2~R5tftT5Q$XcE=4U zHpH~}$ZpoBfcBHl7P;v$Oo<02z4LvtU8nt&Nw}A(2&2H3G!xb+bNI%MhyWjz1T;eb zz&eq3wuXY;M7t-V;WJ)WxLtKI@j=N4L(Z`bv*NBz@i6c4Rylnh!=A@%&&vwqM3y%M zHy=P&s;L-6&ghf#h4`kIc|nL+Zm^<}(SEgc=PnEu$As0`jhJJQ+m!(SAo-m@^J{0O zhn%`P$AYn96s}QQ!rc>^^W8>(D~Ez(Y6XaUj zh|VxD`QEiy0ngti=ZTUE?rep^E0CDNTtLKqK)v-a7}ancE1{$1HHLnH_ZSJgfy5qO zNB(xSdxB;~Ugk=)_OTfl5@vp0~Z3aP%b;_9InPUSuI!Pl+{^Q+yuKk zG86N{R!G3w=T{HtYbFmyByb}z#^;4vM1uzZp3^<6-OqW@Gv+dm$+?=EHWyqn3*G+x zR)?ai_?~qnO(Cx-9oDvHvp8rc#IB!oCn)31;iT?Rs+z4hg2ydXRLK!AGe{zC$g^f; z$ZLstAYc)s?&AiVP-hKCneey?=V^b`q@3JBH4S75@Cg8YY_vsOeRR)|K&-racdUjw z$hG=UJ=uTPEacE?)pprWL1$enluYx13BQJ_&-%eRp32$ayv|?d6!t~b>-gluLrqrS z%9PP*&#*%&Q-kbbpXDfrftlHFfd+++zQPoK0a6l3k`5P1SLo@9ppxpI^w9P79hCY} zuYKR}t$np!SXj8+daBlBG9M4DVGKIu;YaPib&W6?KK+`H4EUT`&%hPIi+&#AJT z!Fqzq0QRPBbH+2IqmBlQN^5PWf8Ka)K?|#SCY142eOsyxjMmx|=mf!cQGG; zh~l^5ZhHALoaq^3`7 zC?C%A=%DC!a@K?D@*(>{Z~?r6(iFeZ_jsHZRA;nu9M$> zfHxJE)`PXWE_A5rY`jk8*OrfZ^S-%`{0(2@9Uq)jM-6U`94}ux7{ie0w7=h)kbz6{ zFx=;{6g{gQw-~DPfyfMDDeyMNLrv>gU7YW=%A$}|^vX9Cg78HqtCnph+AKmYDK7rp z05&Mg03hDWed_`8oDPKBBtltH+3QPkMK8m}y0^{CWNREYj{0(e^CT{*ZtEA>h|f0_ zD_p42s`G@qR170*bngR)on9YoP%mx$#=Twu;w*Xd<@Tax0+iPe3-4Bm3jrV>f=1(a zhvN1)_zT#Va-Ko3c3+wNXos(~4r8yp5>eU}%ZCrBOkbVFWa zoD`jL5OglT+kfVrM%8_w-EOPdUDsF+e`uW}Eh8FU?JpM`}E|!#9I8TxC*EW7Rs* zZ=8%jkUtm7I*{bfc)fO9sqYTs`5<@W5_oe5^>y!Yer$NtILuJ>Kj`Qfk4e2x7O=kT zqSP8kHc;JfTdqL+I`szq+cvY_xhLKC!IZ>oG)jMN+ee!2=vXhb&Rfonn zTw8y((`kIm_P%nqqjbIY5h(C7`Ega%baXv==+zvi-8eWJ%v#XF>h-YV$Ge%%Zg`2e znb|aABb~v7?uc8t5+OJx>7IK=Tzk6%^3I)UU!PYtadX;_lC^%cuY8;p$DJjs9@O(Urg2R!U$2B*Ok}XR zIae*N=Dy(jVE%3ey4_a8L!~=_dOsRlyqhv3NL&wFWj-zrySp=6VUN3Y$J|X`KN>tA zKd5*$nW}jyxLXcSI91Oddv(>3u5VsCAGhzaSbw5Lo_*}K@+yWG*F#2nnXGJO)vbF+ zS5_vmr~Czk0zmor+~3_TpZvqMuC_Z-OGYQVC-B~#&5KBV=Le0&?0y-%oL7Flbr<#z znQ70(HV(5nwl;pu!8cO9)7?XR17#2m=6s8?8b5+Lb%45=)7sXZ9c1?_dqxv}1lsfT zHYW|L*P7=?~5r`FV2sRO=#Vr&4(Z3tK*N( z&t%#H2vb&Y)?+-aDvC;KO4XF#UaU8bwZIF^fX1iK5jaWBe>cx`#@;ZE4(+J zyIjAI45)~Wd)pJVW$(8R8iiPtk`WeGmh9wP!&}vi_YK)qzM^lRU$YJMezZyaPzjx` zUF^4ZwdVTMsO5q4bQV<%EG@l_i;by{vEKsg1cRT`{yeRw2v{V=y~rtwEBMd4hR|WL z^_uybe%3?F(gNx-?~p%Us*Vsr=-)P~g1PZRZ+|?yf5}S6R!x7Bosm1%$92(>%{g~biXt??O7A_p&Q1owoS34LGTHbO(lKQC0szoH ztopKEJD5LSPLF}j;5~k@ZA^WxZcAi5IWdXLwTbh3J6-!>$#!Q|hBbph?*8RBZ%Ijs z_v_b7`OJLrsdw0_Di(h;09r&iOi(u-3pEfAcw(pPLR~zNn>6 z{;o`3Nlr_x_~J-)ONg#X#M4sw{ZOZ9bc)he*1AzXpaf+ty5locB(q-tl#gPkV8Y|o5j^4vQi|)N-&ES z?eZ$a;V~YO|76vQT~o3n_oM(On|xjJ z45yuHTA7MKS_Dm(pR9Tlbkf0H)Ho`~Uo7EigU7e-+%OL?h@(M_q|no+zh&lb5c#d* z>o>-x8UP4YhH2Cr#mU|~ zQNv~~1M(?K%e`DQ#Ts4nEX z&D%lb8do5g*0O2{>uR7AeIuH2P8*&11+$l{nA zi)OG!ZDN`i4FU4i4@Y`gdlr|W9-?hMPU+k$0xTq?_dC=Vr;(bfbu@Jg#5m_p8C6t! zb#}XnfpJ?zFQPrNoy7i(mQ@dAhv;1@lhMxppBAqa3J*6wGH>f_=ubjPtu!3G(H{+-QRdp@rm!<_AH_Ug zy)9WmHWQABsf^B!)V%D)k=7qseH+mh`0aSd3tjMDcs#?GJLjFyiTke1VQe(gkiu`> zB4F(*yRt3u1-XzJ_|x^}_U~w4nd23n^n$~?%-bMcg7;X=Y-8HD@>DrogS|O#nCJUJ zWR*~y%ln6GX-#1R0h}MxG)zl@N8A*bevJdw(b^{6*qv1Go>*x=Z(p}1{MUoxzR%LIuK8!pCb!gSolN)=?>BnC-~SeO$+LSP%T{ir zL5uO*z+0_kX>};QBEkr=(gwyL2jv0-YD%sdl-MJAYu%3YBB%L&w}0pJY!iWAeu2U< zoh!BaJ+l-C6#B3y&h_Gspoak(q+dRB2ojYQv@@TN#uFV{t0ks&NN4`!-QX`=v1Mdp z3!{kppbu>LGkn|&e8;$A_*umvKi@8JlC^HWg@CHuOD#%*c}nM%bI(|VM`$YP28~pU zzRec=GqY1}@rQ!PZcP&Q`BF_PG`+{Q=8v64WD%RTQ1-iWTgf>JI;ud88PR{IK(zU+`|E6M0rrF2@qA|AelRYVB_n72(tET8rFd&;-eq9_me%^#-FzWf8E0{b zH*#Cb6&nok4sNfo@#W6O?A%)xpK9Bl5GnW=`=r!%3skMKoGX$H5C_n#MR+rabfDB) z?yn_6(~MG3I(s*9f<6|&OUVKs>|YOC)<06#o^Mekf*RlHPZg{CHD-evwQ)=0Ng6|~ z5XMESlp3S@g7Avpgz#8AcN^xdiw(4HZ9i5pqjp#o_?T@%6I!XD;(ADXB!pyLG(or zC^@Mg&Dp1C>NZMHV6UM*AK9(!V_!gLb}3^U-?f#WQ||cJp+DidyWjfZqxI{$ByX+u z`ex@8%np@4&P=;2~;zucZvGE#C~b1=>~=9ZL_gdwA`cZ9R+t8FP>I)Yc6 z(X)!8O&T5@177|R24z{N)86P6^R{?#!a$;yZT6zXP0AFP5so`LyNPACDu*U1?kBM| zxbNM|$)^KX_2;D{7|I^!Oz~ndX7fGCt+_?K(=#GGBJCU5BZ*6v3RX>tZ`m&urO%39 zMH%Fd_!liG#`qE&&TuMR3eteF=MmhwsX?S2inK3-8J+sP+W;hTu66#|VA0N?=A zKHuuK=ijw4>EFy<(1*!Q+0}3{Lufja=uWUTA!&aRGJk=_4DTKU}&SN#+_y^S$pLB*V!hHoHkqt%CKO z!IuBS=FsrC^{{7CO^&$NNi|8~i^U^gE1!?-4i(D!m>~;_`$-~JA?ZW5eQ=&Kn8*fa z=G)!rY;JzUOK4;Mo&Y?n@w)*g-i`&3s?LGbtRv2lF!n zch)e+Wf)kT8|{THc47vDHe>p(y4Qloy@lFMBkn(M>je+c`=1`i+q76ai8l`)hu(?_ zd9BPDd@Z7%h#OqzecbCn?}FL-HSdSn<4wpl##bMjfu*IPzNMwHxxTURo&(wRlsjJU zx20WltA~{PM)cz|4sXUqvx%{N0XNHs@fdOh06JU~R(?rIO^;i;+&;6^K`QbqVzx=4!82Nv*)$}+iGFZ zyLLmw4`<&}j-&95p|E!5p7J;1``Uo92)HL}E7TU@*Sd*FfoZzd;zA zYrIYNN;DS!xPw*LMx%LZ*#wo}T^Mu-zkca(-07pfnk;-CDRX+?BMra59-akCjEpFL z{w+MGRz;sTn@6keS1f;*JNefeSMWC0>5;suQ9$<70FETw6@$UKn1fC7K1xGuC>M`C zgJ64%V0Fv|OGXH^!9VvY-ROvSmpezA29z)Jv&Cc+7g6mmbVJ9y>@7-ylF?oFuVUS& zpNG*frnygDp>0daaR;RPjU1DIsl=fjGB8quSYx4cO?ZI8=MFXx_k@!nPWG1)h|V{9 zU&LqMRjOcWP2LWL_vQk)6ngrW^7`%2D|7CcQX7IB-v&U7IDt%>N@{9%548-pIRyRg zuW2R&huuu%KKc$0qJ=uXgS@-z`;E9CPN0JewD&ge+B`u=yCy z<;EJ&&vzgntoY^kk0bvt%T3JY!^ek642a$iYx&`dF(pp0p~U$;w^0h<{Bqf`R+cBA zR;szwK?|d=Ib1r?HDuhJDpZB`E?hF3M(-7AfvFPU5*s1IN`#6Cd+`Iw5B-aym;4Eu z@knt5KT${GnIhw49s?69EOHWZ<96!$30{)F&_MACSFAa`EoMH}>_6|<&fC+BY-Gkp z&bH+1uUE@F9IZ-DP(=I}5IZELCax zERjgI&&UO|+-RnVmq8<;4iPnPE*BM_$psETDYb1$g@jOYC&$JIlU(%(3v*dq$V}j> zo0@lDe-J)^Lhd3#?n#QM89#qn_~q^_(Ax3myj5SRr5M|kil~hEFN;r(4^Ct(?RAsh zjhd7W1=#8#x)WPmD23paKQs#U`1enn3e}5H4|Rw>eC+it`^k9}aJirC1p6VOZrGW} zcTy+gG;*=zb|*JA<+^`EGj}nxvbz?eU}~ZeeUJ+5X`$|& z-(Tn*C02{YVm0v4oZVkY>AVi}#ZEXmXb;J-xRX&Kqfu{SyD3@<8nvXM7xEHrN!sr; zKlx?Z-E&y2c(Xej(9LD-RN9Xpv0JY<>ekU>u-Y3*&rA1~BX~Tn+~DTmJMo|cvMf|1 znKU((XqRAfG^HihQt`&jAFqYZl+bA7A|l$P3@sflKAF)~sW?a`LV@si*euT!zGD7y zwWU$~H8%>1L|d6^Jn>bC#{=%0t%sjyjlU_j4s8btvYKnacSFcHA^m*#7x1=MoFjzw z!i~Zfup$UwtFwBqgdcIrjiMCN8mYue-U^~Z;7G~DGu)Il-82pbiUBDKv=nG)Ll~MO z(&hRPq`*NwQ%s5mr$Qu$MCu^zm-LXE9Q;)-jtFU!h11!QL?=<1_*kxx&@*cll@ntd z7tH~_YE@ygOpMbNW)}%tF};bIVN=+L#^@ojKC?EG97HDHEK^$gzxEYgW`sU&=xc(8 zm~rNVyUen{uSV055pIYb{YO-lm&_aWEAj$#pG*vTM}| zo+oG&5_ScM`U?YuXkiY=4K4B)8)tci#ICw3*f={9iy0e3H8E62 zLr*BQK@6B}8{3(D%(;lQkwkm8JvKX&W_5zQeVq(bfFQB5>XNM*SS-_W>?kResOIvP z>0nLlwMR_+u(88vF02cpgY#So5rRe3lx_u^mym;5r0Ope6H-Bcs`VtNY7*W*f$P4y zB1XbvD|3>1+S-x$rj8!CocK%mru7&qZb~DBA(Au+ap|_V$_>O}VAEbV28<-*xT0!` z_#?>s^Im=O;L@WcOJT`qXmP{{2O<8+?koeRDjYO7-W^}0Y}$Gc=>xEcb{MZi_hvl! zEQWgauU>BWT4-tK7-~tHIy8`{SCSr4E{JvK)h^q1k$Sa~AebvTe9xNSiIhAHE%xLc zCmBX5xNH?J?H{=H_K{BQnJjkOiczhtIIA+IAw{fhB?4*$2@#QNjBiR~u_H7*>fTug zy+5+aIRmvGE2zmioYwUn{SuAO>a9%TgPy>`?IY%kOV6V(kuzI6(73Bj+<4T`2ylX3dK7^yi*v zdA{gc4MV3!p6$J5#93`04TLGwKt+4frVS0AE8*V?5Dg-8H1Ojp2ne!K1PSf1W*PF` zNUV)jbGQD{Y6_=kIL6?@1%``}u%!7t@pQb66f7(TWX;+?IH469?@wc5B<7LOB$f-e3zmTw=(jx~FFWETDjvfYc)@LZ6sH?WOhQN{W`IqGb{;H6ljUB<9SRr;i( z)8m-Y8g6Wx6&r^Az+xM*o?=PKGpr`JA!g=@0;9P*k_M_d&G6de8&{J{#6^Lp2fIE) zW~%-w7T*TiVCt{t6E=g5qi{nX z^KZ_$%?0mdVD7v*Jnk6L}$VQF49Bu?q5NiXDgfjBB)MrOTY z5*Z0IdzZ*9?0r?QX*C-7p<%x$_iKHpFEGTP@*3JOkBDHHgWQ;Qt)5YnGpaXXQ2sk9 zgulFsHA2~6{U%Vpnhj2KeLi$|jlCfSqmU33yvU+ZhVMM0y@`D@HVts{!NJz3F*zw? z0!dt~1EyN5x&8$~QiF^}t4wRYWH|t}S(TWi2^v%rm86LaOr%B{Wd;d3aKufg5u-PB zydx))QG1ZZ^=_|RKhjiGaOJ^Y`{rV}A~kEq(vDC^6G*26Mf`|%W(Pm!D`a&bu&B1r|$Wp=378X40{M=SE!xb?+6cvk1_zeaU-_0Mvf zyKC~yV2nShU!n?A@3NLfGcGlu0tVW@hi*5xE0O4DH#P7`j$Gdu2Io`2h}}`SkuLVL zg5r8j;47+?4i0~k+hX+mE_r^sgK~{gT($zAQB#(z5slYL#iXDeLZPfLoij$0*9=_{ za$_<^)2v?>!f7fpirZOhIW2`Ys2&L&v^;^e%HuDo;N)}*vR-yRIF)uTU{fKUJ!TR$ zz+ni1e5h@Hih2RM4<%dE^9kq9u^Eg#CGr%E5KS8JYu4ykUE_c0h zHUjREC>~qSNdX+#JTMd@@1vmnsvs7nWbW%KS!~n!J16HRiAhs*Nqu(aevqtMfLj&H zHWFW?fFFB~2O=_zmX_Jr90nP@l`e*gm03ws0eLD(D~~oROpMS^YpJQ^*HXLAag&&( zlUyZ(?@9BVQWXaa3&k25nvuL7D3U70J%_9@0@Iht#9(X1>BsDdS~s8QK|5E$Dphpww%N z?(`MtmgUFCxCSg0*lL2dYVdT9LjRJ|{kxsn1}$HQ!Ls*ndPVwWgKn06jIr=o6qyR{ z(*7G#P%Zg(IUk7%M;E^AP``YiW4+%Y2>QnX`WLsH*kMt)%u(Ni3+Nx3$AB!1u7uBe zp9buIv^%(kJN)JzR6-lYy37K!pnUpRJ|*a?%M#)@@{56E>BiQTPVK=m;}j*0o_`if z_$`aKQESK;Jq?C5BcMe@`JF767t3SxaZk!rE*fLpILyXLb> z)VMz(m79zB<$Ban+7_3;{;?4BjqW(=T5f;GZn1pq9_@UkO_Fd3{UH?g&ytLvj37}* zax!K)z`K4~#h&-ZRntnEN58>LDf?Zj@gC}aTZ0}!|C#EBJsD^#$M04vcf*4c+6MD? zjs-Lu(8|IH-N){&s=GAXde`6 zrn#KE2(pC;{5YG7>8LV_N4*MI?F5@2KDvWoY#x;LY?%!BC+!wD1jjOwSz6kfV#-kD z<1q>D-fD3(BOPG1D?cHI5B+TF0Q@%5-YHV58P*n}X4Y46-`LC3_;@^^#aB+%+PUU|7xy;BhV8{|r z&AH@#%gOAH@0iR-=X`%pzJL{%*}rt@7>Q4@PKBV$&xIcU+_I*WjtrNX93Dl61cyY_ zGoOX}nYU2ln~02+8c*?a9};{uchPuy%}=ATMD|6otsD*_EPv*;OtD@DJWfnRa%09Q z@;d%#DE`!=Sd&mv4X4S)GE{csmfTg1f?k3!77PSH=QEkH?N_(_LqNui`}63Jq$EG7 zbe3p5X046wQlw=4Wc7d_f5ClLbcy}=o?S8$-`c=j8ke55n|y2*L?5&R>35}1ir1mx z9Aj>1Lk4mNHIw# zYE+rDa8@>D>!y>&@D`e0)XRnwZJ)RfMTVC)=E~ zJ~~Y}ujD=x-;5!?{$}ig`P3d;5I((fS(N`%5TBSJ%f}#?n9Zr(f7CGUlWgqDJJ89} z3gRMjIJDQE27yeZI=BY4~N; zT3R-*JwMp8z^5ApvF_9y;AcS-6QnYTUqP~ZSf=jF!2jrWahb-WlpU1|xeUHOpKqh=O zmagd@?Ue^}=U*!jVtN>;Foxm4%&p#n7)|6lT$vt0i4T*{J)D%+`R$RNXi?ef1EMUY zrQqgK2L`Z978H;eG za>ncR8mHtW&S&8}U?La;Y%_F?U8ys?nUKo%XdyQh6HFQSlSfYE=BmkJiq+h} z`k9RGLne$B(9Y&fH+OXNVA{i=W$MZu*y&{`b{7Kw)US|Xt0>t z_T}(_%EV4T*}u>Win6NTHt0|k8rDd$wXYqPN^ep!m%WkOsdMllD!TaO!nJ1d0L9`P^~tWpo6`$ z;oX-O7xz6<%drxzpp}qN3w1=p>s+{31geQ~RKq-zKBLp+v+A?b@r-m6c>z$16!do- zq`5EXPGLNp`y{CQhENP(kRlIxY~`B|F+YmolH3C-uMU`kfxFQxu#nyG{v+tJtt!cx zB#KMIXDg^Erx(MAtJS8={8_bSNro{+6Z^jLXnUav<0O2E!2z)=4Dtkss6)q8(sA1O z@-+R9CKX}Ub7Vo2xS9r~W0MqrqS3qeRv1ur+FA^4RLL~(f1WISTVX0~ibg?A;3`B| zhvm2h%S`*ZnEu35iuBqN>{MeLTzgaOY9W~RTPPX)y@9xg1fSQIuELaa$wrmv%rqs{31;Vm7XKi1@~1WIq&GtwfD;xg#*!`3Mi(8G2}h{^Z@NteoxS_s zb#PSee#`nSsEot3CWRzX-1d^4^f>5X$GjZffyvtvv)QT6pJRjNBE74=m_J1G*N8Z$ zYL?AA8$fun9To0S*LlVrB|!D%E4^Y_<_{?SMDidz5{lU_XJ?J zVR7*e6JWs0C;`u>h%m-~@!_X|$E5%a)hH(DjE9yYUF>}`gkpk!piRDCWI&ikiGX8p zVa2g`!A7%J>B!Dtx6JA}yn&2_x?3i7ek$P4%d|0zVT10}v*bPgsipSEGqAh{*ei(525|+}!)GfgL9^LdXQVn493c96j#@SOm4cfc z)H&0NhHs#I0PQt?BY!LKR~y#`W>crL?U0xBPB&~MPPw-e9Z}O@Jib}UiJ{!ePS;x+ z^$*rdPI{G@vEZkxy^(LNZFlt9;I}?V8<>}X+SXhR65G zgw;5+4~1z6&A`N;v=(^|#4o=q)<)Z84qh z&zwiK`kUx4S=8DIDU6Sb09w57%J;Fcr}0Bw|ENcWV^Cs4iA5j@0{N6e$Dk@_n;Q+J zR2qwoy<%|W5X?*{SA$Gg=IhfVj#2U&a>g$goWsIr&WPyg+3BfSwr5Eg=_v)D9}Lc} zu~njJ&7L7E-vn=Jy+B^=6oYlm1ThrLci(`kbyfJEW<>#wWE?qk>_J4Mw@MtJkerje z!{MCR}~CR+HdEex2=y#U?X8~ z6jVB~jBC@svWnmo+$oS%ar2r94cUjjtnWJEq zS|G0WNh8tfAEr9yHILu>FQ|rPT`k#tSnbIKU*f>jCvn8w$|*$jcf@51h)MKA7CyVV zp`m?S|0jzds%@l+WFyyetrTCw+_#o69@Kl9FA-CVP7mN}#NoLTqiec z*z~Rr6geOz%Zy*JOl%;6cC~ze-unx?A&TC}^;|?6pj=rfPdcXTX2s)l-$z=G_frRqjdxs-&Z$v1 zJA1V&xScmmdkDpk%t86_C>gZxH(c>&RaIRH5Pzf3TkmGc&mc_UI}(1;Jr~LD80E8I zW!XN4dCVz;VQ=bYQt4q1E{0k63o2`8e^Ki(j8Q%AT^LKtxk9yE+RF9fEuPPT^#@ZS zw8x0@5;ySWX>Z_d(8Zx)nL5y9gMJfrei7B5^Mq9Y|^u|OBS~`xDwr$ zkNqy6m3FYz6rnhjUyw1cHyjDE0DQ83_A z-)v3ofn!kQtZ1Yi|3t9Biq)(Yr(jP`quLIvFlBHKl1&v&)5Ps0RPUhbn#bI~h>F^z zb$TGdFiKoFrZrgmTuO3eQ&UksG(y!lU8PW~P{^bPZ#H%rK?VVG+oP8?TxJ-Wx#N?t(yO2VP=J`;InKzBA!fdgabc~qzni7KGj;d zgthSKA~H5fu^->v1A`W;N6oC6v%0!rv|zuTIs&F7G1+3%u8n8oIpO>{0;UX1qR5;G zCS@oo0(G(|6MAL;UXT?OP?(gYY{+=o?QsHn3(abAtp;W=K_f@;YPfV$ftA@5o2>Fq zPFvZ3BGDy6k{v;xJ%G##YC*6HokLv}0Xs^!ax8ehwpNu#2YYP`JtJu-I5GrUJZyGv zkj%DMy#CGySD@|)ds2udv@R)2Bd^~k-~U6;$?FF>1qv8@s}QI#AJ{D^kbxt|%7=NR z{K@DgZQ2_>b|O|FyYGWn_NNz=VOo7GTM+&ks)ajdv=ZlU zboo+^Y#`(0IHo1xA!f!D-t{A}mYMzfuZm8d)51R=GQa*?!G6zCvLkrFN)QpppHFY% zt}yF9~Pmd$lGy8fvvj&%JiSqpf}uG=*evF!xGd zr%=YHPkc}mdxBSQKl{sC*y&n(`sQL=F?g0xnHXj2DO&@1k+vq`B8vCd?EZl{je+DM z^`>X1t1tMd=i&0^1c}=bLwb_&`kZ8L0PKEG9tmPG!|GPKj>py2gi)IBx_M)mSqA(s zH7mQ&r4bWH{T&YLM7DpNm76Jod^Id!<%GQIOW9^hli3#)FDB!sl`(at62ly93|_NM z_(G&NcF{E4YGNL&D__>LwYHg5lI3;}u^Ia_%Qd>-f4LgSYZ&`}$l)=dsjp0t~Ily%FrQN1B_ucp{V@yiJc_VGKa%n>;8UEec7r*oso#i0cKH zhD*z4?Cidr={^?u*z}Ar%|*+|ndg?Kf7gOiGb+K1VDgb46;kSyFe*GEC{1+j>lg-3 z>z<=~)@&{;X}W)4>6>p~%km$i4adPKp`(f{<+W%#U>>gzE zaQ>Gc;#0~FuJK`{oubgy-Ln3**mABA@5#)IP$h!{v0Erj)XxNg;{S6u%&~Vy3@E-K zgYg%avO?Sk=yh=mgMh7zYZzeJs6lQemGZG*O^>eX&6(;~dNY%O7IfF{>2R(PO`2h}ebga@!3tycao>}ruG-#- znEbJyC=?b(gcRLcvepoNd)G~M7BQ+7a8DE;shtVeO5y{7Wx&vu=7^#9rJTqmhkXNkpZ_Su)Q+?0*M!wswv)>bYq;yWP~| z&hEJA6V&gdx8MetLAoHZeqMr9UG>*Q#47`)+9v-STD?Wh-_)Q1 zWdWmp_l@)@U3J@}Jfv#Z`at3ZNkJq@w_GTCzC#;T(QJKtbJkjeVoSHAt^O;*Z1rV{ zDlOmk8Q@?)aZERjMT$J3sQ8dx`D@Cgc@^wnKM;sn%N!WuYr86yn40p-tHPgOG9!x8 zTu*&W-M9%JC>zT7u(#!|r2tEuw4iA`oRP;yqpmA46rlEUlTgy|D;SKga96xl@K*vM zN9(rbdQGZ`0VAwat)+=?w;>XV>#-?+B(Dg?i1=n4wH&=!`o1Ys0{ND;0{DNl0M|38 z{jWR{B*QD|@e;e%_BDhMd;jfs02A37I*7s!GLDud4a0{uTE=YkJRI_VIm86v2oQ<} zOQUjHJ(|@z_s*a_)RjA+R78gGjryXo%@`%OE|Nm3ZNKn9Zp|Dycs%vVv-4P!u6AuI zU)k}svu4ws_BdN6|HpNBWWsRf+xd=HIzSST@USr1;5vQdOa-sr!X>nW-Zpgq#D@)| z{a6vzYngyiE#Ze+DrMrU6@*+r2(eK!;Ws1|s)-pB>-PxF#cl~tpm&W5ezPZb(cFn_ zTVo5OxqHw}REwlc6}cWa=>WM^YlcgT$q4Iq4_anKB|U7UEBh38JM;)t8oaMgSxu-m zi0U=AOeHGaQ4z-=yT4%DUe9D@4KYDdx*VdV)>}16dd*chR*d+?grR+>)+Up6{S;FR zo`623)ObC2I7Ch>HiO3{{^!DBhVkcYyZ16`&&03kuuTgUSHganaAcB zlDdlI;(0Ft^VxGi2{t>jG683+dpSD_UG$J2FbprVN3=yU&}BAZ7!l&%{uZxB0J$9d z-Tp$4q)6%J4hMX{F9e^cad$h6EHaxXxh2`(sjpr;!YSU|! zj?muBnG*0;Ayo8BO^XTzdHG${*8&zo?zj`z{gnNuXv;KFH_?-+ihF53&H=S$%EtgTJ`z3L+VMZ$Z+a+VU zVpNNU{{3Y3J+xZvmsW1Nlv>2K7DxL+SXy%tVXs%s0*ny>b^EEp@p#T%D56dD+ru>g zPx!Sge)ytG?JkB@3_Nuwrt;iet^pAFLkk3Wvq3XHIzU$i|8C}2(Wl!RH?G`*o9`); z|MJr<0-<85R4YK!;!px|`YsgmMDv&edGjidOyJY4byJ;6A@aI7@G%Ijpmqms(t+wr z+BU(-us-Uq)0z>5O2LDM0Rdo6#y0Lz20AecI;Cb3t*g!i83#5rLPby0%fghwxn&vZ zPj~`+T251Dw}6JY_i|K%Us+lM`qXySzXgBhwWCXo!!I+^5-TF+!{z_+AOs04z)YElW=j&Tr5&F)X~A$ z0ofYjO)+jrK&f{4WtdR{NO~-Uq7$;{;v}(St&2kIQOa!mqPi{5$s3QQ^pUmrm_Uq1 z8-39pIrQ=F0JhHV-eG|j3f8Wjo4!S`ecboRA}xCzvRuyc8O>`h~eOiZKDw>atWE3j~zv+ zwzYUlf4N=5R5xc2pfBlr_8t4F@jc-7ktmNiOEBPMDM4KTO=z)^aje=iIFxz%bddN{ zk(pX}ndU-Z8)0%Ra~mOZD|iB+Abd9ys(fq%>&%plJU|M7Okz^CZFAvWn;|DO)N)9S zxw2tFzYwWJLuV+C3>!s5x`dV~M^%+r62Dx!Y$edm5@QtDfGzMTTmgy`2Q?-t2@r=F zEU%A2hqN5MNXNG2b{)rQRn|QgUcZWt4x;YmQjisS@-DIagGKY;^(){bijUVM zmf}d#Vbf+zS|^^Ex`FJ(R4%vEk4n_g{5S$ISkOeBNEV{wqY}^?TFTEWezVKE|DKtW zB^WCG<#fO?bPW?~p7(N^T_qOxc%O&FCUQzYubsAawTQ)gXmG<)=~>EYBqj*E~k1e?82tN7;9OVqQv{xsfQetXNWXA!5EMWuLI#{cde%|f`@ii4CT#-v5dNz4%nCR@rN5gR#ZPS`?@k3X2asqrBowBY`Wy$a#$ zP0jP&RXEZP*9s*Dc_H6-~! zit{`EiN!yEG|Ta)qquAwhH~eGyKyX-wOO=x!CEGr?lPUh#zCxD<)jNsmh@r?TJN|U z6HQ4jDVtTFOAtz@z29%KB3bh`z3mNdw(qR1eZR8}G2z1<1M^8KdQE-Cm~s@Rf6gvT zCN*=5sgjPZv>AZU8@Qw6Eqml=^(Mf{5CKsjCyq1o;LeGv&(c>x%el=LD?vA@fTlHJ zf#bL@8CkYpY;EpBCC6iS;8_C;(>U=~Ub?3A9Ihmw9A_l<|8HC4=D}ZNLfTiqcg1k7 z!_!juXZ@}c1aoJx+G;m`PGaTJP>A$}F1eemo0U7fZ#l;s6t?`qV|O*F;UZefAT>Es zTdcknq(&l=n&@rF5hJ%Y%)?ZDvj>R1WH&bQ z6#UBTg?pXS&FIF#L5jQyPA@eVHM6n*qD+_Wb(%PBC%bx+M0%4CeP|n0nWcR)uRSqb z>@LqnCcI-fmZR(2gPt(m)oi4tEwp`BGL~)jyh7(t#erco4)kX(bTMzCEvGa42iTR0 zi8bn6=M|U2%t)YUWSto4N||{2@a^N?`k%zq6%*bxdW>Va$hbHI0BAt48@fE$A|VfU z7!R?ij2(+Dj_N}z5W);~GjZTl;QAoinztmBGbiYmi7G11s_>J=7?>4xY-NyDVk=^w zq_`i-C-8OmT4PgGMJo!PLcDN#HXRf3T!Me{c}iFIsMi@sD$l}>w>b8*d~5#gman2r z;QeQv?bQpGMRp8{b1FarMj1uZC=ry)F2ncRsj>zOMlzA_NyfcpWr*VN)k0(r+PJTr zU=c@PTz;wyAK!ehWw5u4I2n4a#PhY(ax(i?&|DY;VxkC3aVBKLjpj-hgVewD7v|2+ zZm>VQYzy~Qp`9Z56?SyO%n`%BX<%cytX7Djdkj<*WTG_@ z<~O(bj10w=x?Rq?E-Lt!8Ql`&eP6TT+D{hPtUKx~wOCS>{$0HpXv7D@kCzb8$s_$6 ztxTLn7(=;vdWzVOlq!DOcS4t#Lk;$$2*d`9$TBrkVZTVZAQtQ6Z5!C|D7zmh-VRd^})pZ1MEH{Xm4)3A0?3qllqbJo@ z+_HelIxh$Oi&2wBC;<`Y(78g1#kJGb1I13KcFLM9p^!i$OdQcm0^a?kD%TKlZ0aG& z4vGL|VGHmkP)p@FH9#Mp3XarodIaml=uUm zmz!P06wI$r@iqE43gd96k-V&1bS+<>8Il(0GiPG}#A-O$+&Mk!6@X6SR~t%KypoR60vwFG0m*2FO*7FS0iP}=We^iNu|;3&Ict&Ojpo~CLK z!KY<+r7e-;SIcO6JzEF$@J5lLB~qfTiY3s?14YS6tnY$9O`avw7^!#?y~bhVI&Kv3g+9g} zZ(=|?P{7Qd87{eACrygjlkzCzXk#`n`|l&tnR*GwN|kAt|HQlft{OfJ5!a0 z1i#S(1UkEdYIkNVW!Kb5k0~h#)vDnzIhdJb{9JTqMf9Wor>Y!vei>#)QcN1<-5uQs z+O#WfrAu_Sej7GzvaSQlZ50=*ZGx`56~|b@9()b*XGW*~+|$at_lKIoy>*OoOz_WE zM%vZaP&-CwY+wHzclp%0^XGy2&vmFa@C@K(*Z)iJ_;fJ(bL40H>K;i7>+~n-xd)>t zoOOisJN@2ovt+-e?`6V23IE*6SNgD49`Ogy_at@j3M#GlPgJOVuVWUa8lR7#QuFUX z(Y%&9{vVVH11XdxXm&-Zy34LG7EdQV$T|lHp^r=QlNSsOxaE6F(2<*d*T@Chd~#yqGix* zweKdillYf)i8F$6uKjX1gAK3GDCYI>r_6?z>_4>trK6{Yz9cAogyhXOZh;q%$-#f8 z2w9RQ8v>y0Nll~q_#|Sk7Cv-7;P8(=_I_N$vE;|d1ALOyw_dC-3MZ$el>Vgoz4H0s z_&dSJ4>N&a`x0;{IymMZ8@w9^Q)LK2kMg6{k}qB~?^ky{^d)2<3|LA2cSLV@HbUKT z;gCN%0qua5iL=Jsl6-*p)}n2n91F67vjSX8#;H|k+#!7_@ufa5R2T^zDrIIVe)98p^_{1J7y*Er$maWZ|RwA^C~uWAAYMFEV=$=Y9gwo{4SCz%_pX!T-auF)Jqmri(H$1^vh3Zp>bZC+LT$$H?Z$H zXIZFzfiRhmni2i=wY;X)uSUnfEuB=SlEGjO4Hp-dt-bQ5$qABjbXpteetY#WliH+7 z*`u~hvNxX0Jh$d*q$?<&pEyMB1^~e1tzmF8V`;7z=B;F}sv>;`qw?)aJ(?)!Bl?+h z+-(1yFvlbP2mGeIK9P_4SO|9P>~?>`vKv|ZZ5Pz3ne8fqqNN)P?VBUi z5|@F`bLWVbF%q(zNOz_?U8gjTV#w!&akb*~&_mIA;`@;4tY5wOfh*GUy%&cdDJ9iI z{#sCWhoVBYMZ@# z!78(?xLm2c)!ECd%I%<9kD)VqJYQ-Wl4gQP`Wv#5RHsID&~V-{fzgCF89ea~ovC1S z)IvKcPIvCS(Z)%omHa9e`(Y&_?8cfQh5AorqNueBJj$RwGN!#p!~kY zIqqRRlt>mG_297vcJ?WKOlnwT`1mijGPel~d?RuTL}}7|Eh%-O9~|1C|9hd&O}6PaM)KH`at)4|Mb^r)U_Yxh09wfciuPc(~za1J1N}-S~w>~qn=W! zQMA3?PfYb9bdeA28fy<$6bF)=<@yr2@-*MVNrF_P(&HjgG4d&TO7J;qmre1g49tQ) z7x`Kwx+mxYjI=c+fB#6N_-b^vh*bmTxJTBd_lw#dh`J5Mp=@y#?63Se4#mWLvz2ca z#E~5R{u|oajg3Jn=wBv9-BBQD159X|viqqY!x)gwou%u3vjpb8D=C=W5Rv>sIO;dD zh{na%ToiY!jpC?Nz9p8I%()a+Z`B*?g&!U@@>K%oL1>25Vqj$wt=6p`uF+}%XU(7- z*m((emu*~;4%FAP<5{dG5eY>?rv(r2=NK?1nJQvLR;r5EOp$T;wZpm>I(Ivr=%}Rr z@1yt^v|4)3JnzFA)0#WI?j4a+_5EUQtVS2Ti7iLSxc)sY^9R{090Ga)6o}*xV6+lq zA^=?d>|Oj%|FGmi*3*=Bqd!=aqvy3bEsEqa(q_o4tR$vF)ko~^6RjaC$SVvMOX_B# z78$rW-G1q+t1T}QA?5V?Gw3u_$&mPRA?Rg}>-`8b;fPgQ5yua- zTD0CHO#!2k3XuBHi2G@jdY7`!wGTyDakd_w#+5@|Sbz_e1$l?=DT)r1kDTW7=pnjDk7!rG8Hpz>9tC*(F_Xw&~BWh({xQ^YA0=b&Sr0i?(E%+QzTcu0A*Gf|t z3XnJO4)`$3XJk<{Dp5qgMR$cBvsb#lCR?uJz|*ylk^5zN@g`=<(kRepFimV+v420! z7A%qjfJ+`(Q8|elcsgHF!}YB9Z5x#}2{O*Nx~%D-W^J5tIx~ratE=d-|GgL{?JB|= z!sJVLDF^kHg0In|

qOBv+(&q0}*u=9ltTH&ylPxgEtqx<&*DbdaNqna|(AWpugh zb6aQGs%zuvoc{1ua{B@Gpt{t5AfN`rxkcnNgnIY4S&1RRMQDU|ORoCTPj^n6Tz0d0 z+FEiVU_j5275j5=`q8e`NJ^+6n@^1P%Lh2%XB| z7ey5xk43C)YTTu9G*72dj-d}`ZXq}j1*+Ni)hY5Pr^WAf*%=P``_?MzeHtv%68qLj zuctpmY^}kG#6yvX&giLfmH3NK2jwKOhQWx|J_$LY=)VAiDYtEf=z0=TnxM^A@|E>? zl#CISA(WWubT3`gvA&MF#}#O~EFR73Z$K^50^3WxRhwIikE@7eM^L}$c1zQg~)zac2IC*BeT9+h{hDiKAz< zJhd`APW=Zma4HKJv&;S${C&5j<6vGeL3=#YX~_V7Q^*#UziK5kKK_qdiM(gGFz_D= zgzN`>eY2I4)dFqQ7?o$KbqGg#*8INKCC^4?76v|uAJ8L`MYa`A8E!>(LJ%EjGs`!k zeZsOYkb%hYJV;8-nS$Q=zB{?-UIXNXIt$=p{hzZ&a6oj{o;9!Qcf!s6pY|K(^2#6)b5qXGz zPOQEno^`K0sF$!i1dvth5U#qbKB3ixzU{U4-{KlrcP4ijw3-`+LTtos_TFGoD&@`> z%}jdI9x`|3>%32TKHsyQ2Q2k=PqkM7yBjyb-YYAUagT(n|!>yFQCdP$mMhn0+krG8}0CXy`6Bi zn)>xoEb?VOC8f)Ne8VtbL&T-clL}oWF-7ZE{gMqxxUc^Gy}u<*S5eC+ft#}I?NIqv zC82~InQ7~$?5!N-P>6DpwSZ@c9;~Da#!kg zx+mQdwF>(f{sR2%e2SUW?qERq6?o2S4!fd@B-Zza{P|a>l|AZf}2~Oj_ zn({nqB~4&38Esh`Za6Y+7b)6#wIfk5SV~aV)|@MuKPBkhzoZHzHlK*8h2Ex?UN1yS zUoe5hbiIG}hrZtSIsv9jn6vhT^?IKmAzrP`Ej!=-3kQAye<3T~8Z=lwk-1-p&t_U36i zrb?o|ZA*qRR^mk3!qivY+r4;$dm%9h1kX?axClKcPbLNTx7_Ocpw;$fg$lQP65bk`fC^jgvm(gJ(L_hH~6F7=<<*dDsMj3 zd=gj{(;%W4rGX=vPCiLWzyRl-;#~XAYAE}Z1DV}t03C%*zgY|4EO*f(mDqii?x#!f zwqzhCV$T$;LDy@@67N>kDE-m)R>}z}RppdKUgTi8Gu0*oU8ZFnEZ;^E2U0 z;k?1?BY5^N7;FNeiK!>kC`9=(${BIx>sMxe%dS$FJ&S#HLsoCQI`C=j{r0b+(RPQw zn-!6ob>9)Mp5K4GDJ{HQyPY~3Mrg{~S$t=$O2Zb&!Lhk>xTnl5 z7w1~p`1fpajEFWj8sa~DC@S4_l(?vpL08sk2fG5Q?ZhC`o}{Zv+VbH9N|VJe9M4=J&2%z>8>w&Cb8OK6%lMLTNU8CnQ;&G8~zT z4?7@#e%Yiy5?>qVa9Co(%7t&aac~Bm*YYVdY-iMWRAh8B-$1=>%BPa`{03x zgA33XS6-X_a;i|I95(+n;TCqv){(#N9nmngdBOO`Ef-xM2g0|9_XbD(3b{mE6LHZr z68~OrrAc^w61{u*frQ^#U0<)eIW9O%wAO72rk@x)xS+t>!5?I(|EfIajQO|7q?4Ch zt^d>l{w+R z%Emmg4vI~Qu%K8E)VP4Z^9@h=$m#klwPq+;=FJ?e)_b4XB%;#)3IzgMWL%S-Ve_X6 zDj7OXr2?YUJ4_HECQ`!c)`9MtODi}rokZ9376fZo&BoMLJtvEgi+=mfei=M&ckPG; zYvGOpoF5GV5C{lp|}uUHCnXdXPmPKk4~4K`0~#vw#}Tmi^p(@_z{2yV}5Io^gfh zn_5hfbuo}h(ge2U_us)m;CSP@7%J_;nMgL~myGm?(yA+<>aV?2?ccx2ulC9A55el> zgR?TWqN1xNc_GOU4B0*z0w&<1tR$FQ7|$*5m_cQ*M~Vj+!1c#_hgK&rU=i-3EJmEk z5sRMZi0UmF9_BZ_pEY*;u@Bn%VG|;k0(?1Nii`gsO6f>Z6_=zd&DMK0{^`bB!=2`U zWaS?_=R%k&s1OBDToXYSU%EAn$C4K{CCf{53xitv!IZ~90zYbX-`>;n`dQRNWbha4 z0L{CEbCa#bJ4eA81cbL z_^Ca4U|_&xiMZeKG>#6E*EsW&^YBtNI~lwJCe1?H`bhGZcWcnlPjkrD7uBf)e_N9C z;$uu}&%Fe>r-X8?-PWh1iUC#n8KgCTNCyJT63l3_`HB@~leSc8Y4#s&b+)sLf7EMQ z7xjga<|JBnTD$c^ozzMP7Z{b!qeeq};IQ>ROo!njCUo2$%?xa3e{5G$Qmor?Gqm_= zAf70FiF-f(aMuozhlEx3;Q(HbVW^Y;`ZWCp7sn6p@POXyqC|FU&M)9eHt)cEt|US1 zHCSJ)z5VpmyR7E_Em_Fjxb*|t47j%O{~-wT2sbr0ZM`12nOaL`<7_38lFArW8_5PY)c5_R1O$`@4uRcBc z!W8l?!aLv$=^%rs@oN|jmsjRlZU+yMT6g(Og8a*K7`IpY;LQ)omPz9<8WF+Avh2~4O?zYEB%y|Kj>P0ps?T3U|3cjQ@Y0rM_8$pegkpM0XVYDwKc*r zaO)U*d?Ms}nM2q1Z4hW3urEUWUDy4eYDnfZ zJ^$)$7aAgpJq(WCPpEpqX9jRiAtV5aDTnS78ze-3x>f>v1dTJ<-GlJqw0Ffnu;~kU zRKgGR5RNQ)S3PbsPoQypj=jEZ-1$^!u!$gozbb{N#5+Onw-%#0ct-&Eu0d(kNA4-r z{4AWy={f3_Qt)#u$}6IK?%M~Q-MC;i%@Tzt$G=? zHgn8qf*ini%g^YuaiBO}KTLR5cqD~Zqq*su-rFefE%Fah3DrQcosyDJz#hw=iW7YO zTvanIOZOoO;&wuyh$zg%`XA$T>hXP#ep6Vv!MM}f&DxjMAEo{ymPq}4$MyV8E^j1!oAaawRG#y-c?x%w*Dgpt)+#x&jEPG|r?0lrd zC{$yvqtC$e!qYJBy*6Ia^t!)_+m4BdKk|p*krT48yKx1+ua8_`IMSmG`QwMvF4>u8 zw-KjaKa6$p0H(!+S&BB@-Rlyh&uzC3?lmeEtmLs7+@4MsnIEd3k=6WQ!musFo5FNH zm&bFvjnp2f$X_iuCZoEkvA_C7_2SSkxj`LqTVaTutpncr(L|tX;r&eR(-++GPpsqa zxVrVNB##n#>PpT)PljDf%Xz}W4Z^RMTZ{F?`K*ie#nr`9hd)h>jEtC*i@=%VrmvK| zZa1oTnJy!R(S_F?uw8@-Vc2A&*ktwR8z;y{h-TF zzHF`b5YVeYqdQZSIEN?t`u@vz1thz2UdJ;IAmp)tJF*ZT9&)>J`4F?DgM+}|dbP|c zR`{UIl(GqWYtI1Y+@GyJwRHy}>CwAwGk$rWrF%T=%G=uds^rR1uGl^o#1qU$0O0nZ z8D2CcF2CP8hgRt|G&GDr+7?W>ww-;|v;EYzEZj1N&E{0g8qi$*+^*I7cE3I@9O1G$ z7g(aTkYPGmVmz)59KBo*#C}k_8Sei1Xc2iROpELE{-8imj*m7>h=|+e1#T2nFrGf@ zkQO3wWyJQz^Nd#{FXe>yzN~a9;2NB;kKjQ`MMXvT>b5)1HPu#eYgJVVB1RDIUczIq^x!C%!Xc$0HD?iAqAzB*AeJsT%p@lWRfA7!7BKU=?Lt$tmv z^Hcj+2f{Ui2*s0tuY>lJ&S13leb^(Ej&W)D87$Ei|0i|xDD2vXA&L`Eq&vrm`RJiVUcEinbPU5k3=OxtBUlB@bT1|NTK)D>O_Lje`_ zWuqejaz05U+~p%^QXG@XL>Kf98goou5DnStS`U>V7_~{`^jcA!1VDc_lp2AQNZ?(( zEK8z$kh^`TpeR%d3lB^GzERhD+W&2a%Op3CE~TpUneD}u=lqH-C_=+*h;v2^0e|H8 znnDR?!r)K=NZ-;tVSB1bhLDr44h9kLVk1jkuEFz{^$n2)2HlE^qC22Z)1MZ!J&)|%%#KE#*$e6%sG z&{|vnz37*@Io)H(NT;qLv*TEz2LihOz8l@-J?B5J2Vx11F22#8>D~JjeGD%lod(c+@hZPDl>;ZuB^-Tk;Gil4&J}eA2)ltQ9mNam;I6l*jv5NgJ{1cj0 z8+Njo18W9on2PZ8UOETDWrul47jh~VT4AiZmB|pEt1*3R%Ptk83;vceQ! zZ|6}pCs?#5e~>oZh2q}Xw{qjK#@TKYAI~5wq>*oyGkR#x_psFt+mbZKlFGTu@%AdB z*SV5B*8=dg!jEz2;R;@{LP$=IN&`Hf>akqiEOpOkli*Xd0)_{j=2P91?>i7#H4QfJ zh~7%H3ay^jnuE4~JUCS>e-*J(q(bM3KY9Des-ZRBv(zU?Z8?nuTW;&K`cyTxtKBi{ z?{r@tO84$|6hwGTRY>cTBcf7{UOZk{{COW6(7CUyq_nCt4b?!>s-o?lY;6;$)$H|= z7cGkXML7Y|i^^1{_*R)S0`5hdw6nlZ29ND|88f<1Cd$}Si!Bo!!7%mO{Nv%|B4N+? z!u5R&qmt!1AaHKD)VV!fjslb6iR~OY0$gzrtj+>YH)I2U-O-uD9&kAQu%vv};qz(_ zYWroLi@03aAo)!9j7QgRVJU3NrRa9YoWb1r*43-COBM;EsxFCTZEUrsE>w%BV&?cu zy-u)wUfcaacCDt<{&Roo<+{S+{>iC@O@L0bO_$4ZXaal$9#=3+Xvy>gjSV&0{1<71 zw7zE~+>x$urx%2->MHQBVYvjz`3NDx!afkOZ_@;?u8VRbT*fG)*HW%!G*yksww)z{ zcXI)&+;Q8DJ!0HmL{+cMu57(Shz@B|zi#`p=($s!=0%$U>=3A9L-SDjY=rjVEbyeM zX+<}@8gIWd?XrTh%p${fXSuOvmJR!e+lFHhn-xvuXC1Gt2pk`ZqbEOjXQ^-DY;bQw zPx#@~_bUB&17q-U2z$>G<#wv=~I10=*}u$AKao`naZqArm&zCKYaI(h332@y9~_^}8t8+>$h^g@b+?f=UE{kE0ksN|h?ju0V)!FTjN2Mx47_FE#e8K*AQ zb*(eWq-oS{;NN9_82C0R(>ks=``&zm#(TQQadV_+et{!e@ zb8myAuNTM}G(~;L<-DH!uvu&>z)3CE(NTUR@R-x8gAZ<@lYH3aTv=mUt$Z^acMd|C zGO68wKELw}_gNYSIi06m?!{K+n1x(^3~Dn}zi~`qg~leetal$@rIC1kqR)|5PC7dcw|mU1*mfoW2nuNJKS8$wZAB0B#_J2xS~ViP%L`tV=lWPa zJzK{U4`ovU`uV$NmyjVn(i7+cjd@`zC>InHg?DhuBQz^(mDz0ItN!Y9h&vAZzh*|h8H)w~VkNT5I zxVt%fr4PDyH^ELV!5-^B+8arzK3k*vd3?|s;J9Z}o(yA4qoIBJQ!52BYClvc*dTr? zXwi}De>e`l0tCokD`_#&l8Egpl$!gwztrK^W#7{eX)>4y|30x+x<%5-ciJrUsdWb( zqDPl}2PjdcXYl}8+DB9sJ__W|m6sGL>a;8Px*-!7?r$=ru`S>MpP4+L*Sh3t3Y2$@ zb=qv(Tkbb52?!rJ5vFFgh9o}A5c0a8xygyST8}-LwuJ0O7O&A9pERzAh>J&?wntCz zk0n_y&m&NR7VDp>dwUxH^zx=Px^2q^^wPs-bg11)nO!X*EYQ7NoMt7XyHrHpQRWNL z?lKXkimf=BZdeqg&jWsyue%!=arEhHZ`5W1H8|4dkk#KF#Lo_6y1KH141tTv+kG+) zX+}%~lC8sSzoQjs-?-f$wPi%!1N_EG4U->`tQtzY)KGt6*g4X3 zy}com+9GkCURlL|;z9MQ;>m&2NpEicIewe+@UA>w#p?btoKy<#bb3)W@}v>IEt7F- z&^z;39KYVX@74M9Nw5Yo>%a-xex`?`=9G#ql{?*e+sic4Cx`rLavh!5JQa4q92i#xW_M?v*?<{5nDNKzKbFDw}VdSHeCCKE191XrLgF*tHDnr%-vN!EL zR2oy(MtOhR+UfL75OpF+rs2Bm?)GM{aKU?gT-m3xPUUEOU+COEF>E6l(cn&-LsD0F zp>cG!>PR?kR3wb?>v})5a;F}= z@P;|~%}mbw8_~D(8)2(P(^rPZdH&qnL-WkZYE=|Jtq|(ay0mn#IXDSzZoX3Rta$}9 z+1|mH?8m-)8G+o+HknxG*z4>T56ABbT$yKPEhAuCU&gF4rOza&KOw2nC({Ag-)0Ya zVWrbhd+R-%UL}R+_;&u}$4P{f$mfc)T-|OyxSN`)Jw?;x(wWi*R>E!poDGrNUf*cm zzCKn2?Ck*qk@a3}kCEcp=9n0QPpk}|@=!?n^VHVeWcB$fo{3386_XW~{6`w2GN zRjaJYheG1w_CrNi?^yLYTk35ax))2QDcYZCaFgcZ5nkQ1ubwgeou8z%s%E;y?d$r( zk4hH2b_$Lo`-?Kt^D*=bnz;~8{ZQ<;9PZc43Ep1UVoXcZ>*<0CZXLCb_PI1^ZP&gl zKi-Xx0YMAt0-h>mwjwt?OTN8Zmon|U7(9g&g_ucq^(nwrnDu*;o1R7K$ACtmdx=}w z3hX02pyd-94eLz8KI>`1IueFh+%Acv1~-12X(%i$E$8#{Hj#CZ2Yq-RM;m&Omd(f8 ziM>28OoVQuBisUTp^4La5pM+PAgEnYmBHjraCk}co?!o&ZC)AQA?@f`A2ywoN@wXoGKd0Q!YbV0SXmn;%NytTib z>snIbk|*gk=dZrErl_sY?p5BOm`FBp?s&iEBFDKYrjOE;762;K&z>6!zr7cId9dc+4yY;v#!wS~?~sGmV(PeHoD)9hDkJ-#vOtQ@k7TD3s#8PA+p- zUqU#0o%S}dl$ZFb@NuJ^{(N;l5^OedWkz}qn4LigB698Nq zmI7+=+s0y}y@uG5M>C@kYhoq?WsrPGh~0~|gM^cgD~0}XQ<$(jkC(DlA0Ahl^JWKT z3TpL&U*LvOmmrt>3{C@k7f4D{GAiHM**4RURVN6f=_jE}Ifdz=!Xa5xU01V|keaUXU=Zu*%E3suSKFbV>-x%S z1bp7S%5B(HOlBPzkxZdv9+tRjUvRuAEYf%qBhRFms$e6ruYu8C%2UkMgjzAKes#SMB~-=Zf(H`^O7#|? zHH@!5+S3_(?^)ez388v|1myYn>fNgpXttrCFkH*El{ta@g*$X~&8JyOr}Y)LyI(MV zsN#g$(eYA6h<@m+9u{-sK9djCiMP0%6E9{(9K&u7QgZJ*%A20oZJr||QC2ESY$I47 zRXwQ)vOg&6!Z?!*_>6u`LO{d(=%OBZfoxU_Kr!jv%o15-ZGQ1|}d4;t*l?k{y z1UK;9$aX=vN7NM8LSOG8JB2IJQ;!}dK-*Slj^HH`=n8xmj$zOMugI9YNPBJ2&E%%e z+nk|9%?H-A?dLV#RyNyr?8&+=>I5&Imsy|g`jLLA8olHsjpoKkfdn2Ij<@O2AQ=KQ zqtoXtUL68VpotW@r?4d6dk*JXRoUkp?FILBUdKCi~*+KtK&p%*=8 zk&&ryt$AxgHALI^FjUtv+TYKZCi)j5As{|(hzas3&UF?~cKBE0_9Nx%bOdVx)4Vn= zEEUWta2*FNA_COi-aGYOgR57%oXR!cxq=kh*&UVa)gnA@E-{~_(SehX#YdtUa?{4` zmp40YAA1ENp?h%x?LnaZ8y~I;`h2{lW$8I@ z?E1?#>r^Z_xZDT_7k5{OmZm}d*YT{qaieJ-bsHsRJa2V9egG$b-4hCX8ZRkmt&POJ z%;^Hmq%hJuyv}0-2Tqn+^XtFS`CtRXcpgMj1T+rx_X25{cq`9u2FI^2MhymC^>fdQ z4;5g{(=QQHpe5v<+WelKc8MLAEpx&7g)>CWe6o2? zx#oeBl4Eb_dFlK$B{UKD8EqSclS|Zq zveAKIXqEP-_2Bs@dUEMX_nQYmOEGe*fIfY*FH*RDJa5_1YwL`;CIHHTI#MWu;vArK z&y8GMv=~1O$nC{v(yAo)o`2Kxg+ZiKVS-X)|ITtP_2$w%DK)44a(h(7)VRBg{-I5~ zJLqU8(>#8g0@UDs&L`>}87$^mcXKR2p;&zNqn%@*<6r`h#K>Ad%IaSJZRad4TO%Rj zJ)+dp0;W~muc?uQ{d^>yXn@;u>zS$j#mRC(cP`WC6>K5cxT|tW_y{w(pRcOnN7MB= z9_{SJR@`|x4y?xUR<`H8Ol}kUV}@9*YQ3}}Gjf9y8}eM7&Uf0zs|oMwl6b7!EOl-| zeEc|1_&!#qmZQJXwcb}+ag2^2^rseF;&ZL_hc<^}(z@JFT%NZ-JpFPKBZL7Sv~tA5 zV8Bd6f~y;ke9Q+LD$C{&`1@9KRj2y;(oUGNJf7H)thW34U<>e^DF1G=CTkD#&)DMs yiSYaX{^;uc0|dnTyTKWo5(ESU%wKE$BLu1b#VkYqW+M0*2r(gP!E%0G-~S8Mk#Hjb diff --git a/apps/web/playwright/snapshots/threads/threads.spec.ts/ThreadView-with-reaction-and-a-hidden-event-on-group-layout-linux.png b/apps/web/playwright/snapshots/threads/threads.spec.ts/ThreadView-with-reaction-and-a-hidden-event-on-group-layout-linux.png index 669ef94f3cefff078062ecdf8bea51206550d6cf..09448c389d6fcb93c314d2857ffdf782e40acfe0 100644 GIT binary patch literal 34246 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 UIIc2+`~*c-T2ZQ8;`6uv2f408r2qf` literal 33888 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 Ts^>7DU@6L}%2vPo6#9PwjN#Sc diff --git a/apps/web/playwright/snapshots/timeline/timeline.spec.ts/hidden-event-line-padding-modern-layout-linux.png b/apps/web/playwright/snapshots/timeline/timeline.spec.ts/hidden-event-line-padding-modern-layout-linux.png index c439f47c807b21854bc1c787b7aa3f6000657b81..ebe765cc4ec71073405f3791c1203680cc1787c6 100644 GIT binary patch literal 59846 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�s6F%Fcux&EE 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

>-^|Ng8 z;qR&+D4;v0wa)b5;JQcW?~VSw+0-4;iV%A4XvbcoRm7yv>D}_nRUP$pEh=R{O!OWX z7zw5uKlNRCc>Q!r&5h$+-|*X2syC4dn3uPc$A8S^g$OZf$MNwd+aQN{0}Tj+-IhS==hGh_z<0VUJM&B zWwc$M$O`d2`5MF#wRMxj8s|y+(zW`h<6T|_ZGTg!uWW5Y_r-t@fI$!J1qxEHzpxvN z3=A8LvSm=SPmn?B#Q<-D)nErOWA%HtHNDXheMf1=wetf~K}av%VTN`Pq1HCGhw5z51Yci2S0`smL6>Kk+G-yi*3i(0UuDIwu_hK_DN~KfSz>^u z8cZ9@Y$D(+NE9?t!4+5JwUrg&e&XC74X~Ap+oYGnL6}e9HZ^GV3nKdMC#J6+Py45> zFkTF*W8N-&+>;keYK;=-Xrm~eSOxp{oE$vxI=8AWdv7MRl_a%XRl^OdwzkXv{&>6>8F zR{-XD{4>r!{MiN`UtqVsHn{?&6us59zVe96H*pz`P)O=*!kHp*J3M6iNpnCn3;nB7=J;<2QscMYtj9tzz`K(*=W z{=UJ<`B)F;a<;Vck+N)X00ozPUB2syl~=18r8j}?ACrTIpX6*QPE}TRhUuUQH#Ynn zd7$P-!O@Kww+Acs2HoiFFt9D%9 zbSG7bMg{K*%Wu+>GP?e(u{{{Ay+U;-`8kEFC^6XwDB^Tf#NO##wg*!Fl@9#<*5MjY{$kNZaCM$#5n0q>0n!65N$}ubZUN=Fjh$~W5M&@XQK#w~ zKkvZzZOAO8^v{g&=;4X~wp^EojzUM3H8s(fR_yX|C;dlkD&;&w{P$M6dGq!+&phqKB5rypk>^B}h7kWLqFC=)(~L37V) zYrCWeMo00` h8;a>P|D-ops37Je>39_o;h)>kR0BP$dTRad{{X%7Wr+X) literal 60290 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 qA=b6;-Ta;XN9m)QT)B*C;Qs*R=Fy1& diff --git a/apps/web/playwright/snapshots/timeline/timeline.spec.ts/hidden-event-line-zero-padding-irc-layout-linux.png b/apps/web/playwright/snapshots/timeline/timeline.spec.ts/hidden-event-line-zero-padding-irc-layout-linux.png index 8383107083d178e4f26a2e21c34e0783715e7023..bf70a9c99b70a44267f7aff2feb37a829c188e92 100644 GIT binary patch literal 60431 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

&o$KH_q(0_ikNM*R* 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 A8UO$Q literal 60867 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 diff --git a/apps/web/playwright/snapshots/timeline/timeline.spec.ts/hovered-hidden-event-line-irc-layout-linux.png b/apps/web/playwright/snapshots/timeline/timeline.spec.ts/hovered-hidden-event-line-irc-layout-linux.png index 247c8313ff183f87528f31021140d36760aea8f6..e2ba14049d652f3752a67eece6aabd17fb093364 100644 GIT binary patch delta 2148 zcmV-q2%Gn-67dj_B!4DJL_t(|ob26iNE>My0PwfhdBGW)8M09mQxno$HTb9T+Tf+A ztRA&sKxIv7h1GMtvJp1Nt#I6N_hq3U_UM+~`(QsCRA>B*mJc(^> zH6%(ZiEVW?2}zC_k9TgnGj;oit)|tK{jfa0Pvh{+AD_Vc%zyj5Lqa`y@&o|@002Am zGXwwt0PGyp4*&oFy8-nB006*lK>Yv!0I(Y`)erK`^ws_^E{q0v1b&KyziMvA%!pJyfb=-oh!tGdTO_#Rr6G*Byn~oSlUL03ahT%|9@OF^zG$ zXiO^@n&#*%n#rP{?c^7{?pxuvGijk{`TPp$Dp@%FtpJjWEQKOF%e(XmQ?L7w0RZ5Q zP|vq8t;9l#5NT`saGZsu%E2OOlz$o~1V%0oO@)?)(0^agc{SFC_L{t?r?+>xy0g{9 zArcwy9Z1%8p2(T&>z_ml5{)NO&bud?Y7J8LA&G@4*TmgObOYyGn@?348Toz~hGOZb zo?n#2Zx8ifiIq7&tkE%B-4%&X_I-I%Ktd8}42s0VICG@Qaa{juY+~NsePy1jsV`Zb zx-q+!Z+~}oSQPxS&*k=pk`#Ba>QrM{9+rpZ`yRJ@W{uD}6}E=jf~?5+rCz^?k|`!% z&qTxPs>mKnKKeXvmvqK)S_JiLV8R7oWr3rsYhee4P zy?_0q)ACu0EiYY_!mLt*m2}!+PgQx+mb%`%Y;m;2ued|e8a?w$JXc)TS{d&0`U+d? zo6uKtG==z(+vQU=cC;GA`&au1N0rXTyu{Qs_iCBr_hnq{-#r6vuKhg?67l|Ohb`1I zA|7jPnj7*)k`|rn)f?I(jD0xfUM+Tf+<(OIVb?!AcUE=PipO7%hc$L*X8|pxoyfIP z2;K5Vi%x!WT#Nbmy0}k1HEXng+-a9a{iv^}&l51ef0%wWIXb7ZJDmkoM5@!PMw1$o zRo@nw+?L44;yluF2mk;wvROY;(|z4NGeXHJrzYb^Q~XY033K<(vS3n$gG5)CD}N1+ zDQV)OGAQN8VzrSIq{nB(F3mky6>pBFrlry)P*_Ye^HG#Gww1o-s&uxBrUZ&%6%0;E zqhy*`)?h6+;=ISyWRiyUIA$r;$j;MpgP=BNOVJ}5| zKIy^gvW7-W_K!V?Va(E7H+ZP+4oN>Ndo4;;RM{*|EMD4GdZOdc%aP!s&wasn$KKXl ztjM;!|B2yIU@hbzU48vsGtv@KNrO%9 zRPj5=Bw3l6N)-M2^VSlWe}4b~GW25ooMDv=rYN*?wEUP&$n(E(c0n<-G&ONg)R}Xh zjno^-SV{^>JPajRqmD(Kp->Z>3&x~^i z1>jth5wC^h+Yna#ai++ajkEF(DiaHjc=^?`NRViMk-u-d!%1{*;D6k?vm>GHm$4PP zA}zldT;VrYyuXnn<&8C*Z!E8=J7(AjJ(M!@Gzqk})LLn;%1JIh;)%4JBOsMt!(yq& z6%|A&M!w0}2xn{Sbewj!)*OC1f!IkVuT?I|Ly$O zl!#bsyG@=YW(U_2C(0}I4bq$Mu@A}J>bY|6& z`u6>~42cIk*KRC{tU|%4t#+#xlhn%W#Fd#fO0kb&w8v~^*%%XZRsPhq&pw@C)mn{8 zxWDw@3YAh-RES3U&w7yDE8AS~fAdVrFVJO?rH%A2NdN%Ao7nUG`*#!b!`=TeI$GXJ zLrDmY50BBcj(@7nrj4||(trC%TZdVJKqmM{xBV%d*_4e*V#zl+;M25r*bO`Qz}Bbw zdloEC=wATkTjn`Io!G~|U+&5BXjt{i(ko%Tl1&-Zv_1%&> zTkJbZRaMQq``D%~cL4wZ>;}{i0002H0rdj_0Kjg12LJ&7{|L4K8vp*vLdpN3azu5|l2>aa89%-qoM zsx9D*&u!SR-MVD{)dm+iHZ%0Eq`Qki^!Qa-P23)<(Y+80Xt1NP2v z-cVN0^`P6N#KwP|#R7dHC#7YgUW_~weK)%;$;r{MV8m0~F;QRZY47nn%ULNo8+|n~ zx3-lh>pX$W{@QXQVL0F9GgY&O26WtA7RmY5snN+)O>h4pc@<%G?CGM2i`fEI<6!bU zuhay4e}B_ZRcRGdj7^SBFG-HxcH{a&gwK$^fnFa+$hoao;g|E91>Edt?+SQr+AZvB z)TLfeK8>ijkS#KHCzaZGhr4=uy6p7+>&WrBp_w#}<soBNtoP--~j+Wr%)_)rPL5&;Fh9{P@DyFY?HT!$~wML@c zOW}!`XrWjtsd~=c-0WkmCZb|LA4m}k3Qp4yx&Z){?9MG^p_G#p>gd6OFxR^qI9fZh z z+l#S6ZFlIBA+h@IfEl=&$r@3D)~XkM1Hk?^w>%-c73>#{vF zH$58{%Q5-os^T8F{na;r9K7naFxux*u@NI^TcGdO*MGYE`z!WhWPVv&Xvo=>*%ujS z-|ahpz8h*bs8o%;#&BRi9|*@WDVq_Fzj6TpdVGUs zGM<+)xsc$MY8SUNB`2#L4fPytv^kqO6kxQ+Gn>((wJqQ_n>eSxjT1K$#Y2WHg7w|_ z@|!P%M-+8&l3^K&G8&8~R*w>3I#p2)epMBdv1*UcX)?JyZYxR1LVP`AY-w{?s+ihF zj~$DxC&fyQvQ`jcO$jB{IOJQ#0bj7(gZr5uea-^bWufbC!Z?doQ>0? z=u%zFDEYj2?0znCNjy3tlReKaIZttdzTN)QBH>t@hzazPMP z(x5AM1x{A!)P$sB(*DN({!XQwklUDk{O$CI-x;r>V1%i;`zEt8J2!rB2D8-ruXegj zM8!sJRkRg}u5V`*TuJ6tR)2d99nF$rG@dD0St-4h#~Fqqj^EFv)SLOdz5i}U<-8vN z;PbXSE)cZ7io{QIw~fK+|*Vu70RIA6%0;(q` z^B7}hjUSJSAMNoXQQcT7skZbBsk!7tx_qv=(dSy37#U8W z!V%rl5pbf#pM30oR#23zMr#`k008#cv$sZ)iV9wJIBDAgE zRE)k^%^B;=|EVV{Ie&hWFUqJUvYfSAS?>4QRQ*Z{#IKMfoeN zl;z{3yKnI7z`)f|tF;`wkJ-;!Vh&~43Ic541prjCw=6A5XxJoAIN3B>Jzi?`(La~a zkF8$}gtQ4SYP45nCS$hlo~qqv;#hk2@%@Bsa$W2Q*tK{?a7{h!rRk|3rcx!++|U)Q zwj5g9P((>Od4J+a$FS9OT;Ukh_-Ee^(*rmnO#F)`h*2}Vh5pXEvq>xh0RFG+$zK`H2ioY>k)anQfdmAI$xU;3w*XzJ3DkYbnjm@rQ%eg1U?!Sym=nSm+005`x9Q^%30000d z08>%`001We@dE$=z)AcY00960B0_w;00006Nf|^zR09CNmqK)&2m^Hh0000y}*r diff --git a/apps/web/res/css/_components.pcss b/apps/web/res/css/_components.pcss index fc2f1be5ea..a215241bbf 100644 --- a/apps/web/res/css/_components.pcss +++ b/apps/web/res/css/_components.pcss @@ -234,7 +234,6 @@ @import "./views/messages/_ReactionsRow.pcss"; @import "./views/messages/_TextualEvent.pcss"; @import "./views/messages/_ThreadActionBar.pcss"; -@import "./views/messages/_ViewSourceEvent.pcss"; @import "./views/messages/_common_CryptoEvent.pcss"; @import "./views/polls/pollHistory/_PollHistory.pcss"; @import "./views/polls/pollHistory/_PollHistoryList.pcss"; diff --git a/apps/web/res/css/views/messages/_ViewSourceEvent.pcss b/apps/web/res/css/views/messages/_ViewSourceEvent.pcss deleted file mode 100644 index 02dce05bbb..0000000000 --- a/apps/web/res/css/views/messages/_ViewSourceEvent.pcss +++ /dev/null @@ -1,50 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2019 The Matrix.org Foundation C.I.C. - -SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial -Please see LICENSE files in the repository root for full details. -*/ - -.mx_EventTile_content.mx_ViewSourceEvent { - display: flex; - opacity: 0.6; - font-size: $font-12px; - width: 100%; - overflow-x: auto; /* Cancel overflow setting of .mx_EventTile_content */ - line-height: normal; /* Align with avatar and E2E icon */ - - pre, - code { - flex: 1; - } - - pre { - line-height: 1.2; - margin: 3.5px 0; - } - - .mx_ViewSourceEvent_toggle { - --ViewSourceEvent_toggle-size: 16px; - - visibility: hidden; - /* icon */ - width: var(--ViewSourceEvent_toggle-size); - min-width: var(--ViewSourceEvent_toggle-size); - - svg { - color: $accent; - width: var(--ViewSourceEvent_toggle-size); - height: var(--ViewSourceEvent_toggle-size); - } - - .mx_EventTile:hover & { - visibility: visible; - } - } - - &.mx_ViewSourceEvent_expanded .mx_ViewSourceEvent_toggle { - align-self: flex-end; - height: var(--ViewSourceEvent_toggle-size); - } -} diff --git a/apps/web/src/components/views/messages/ViewSourceEvent.tsx b/apps/web/src/components/views/messages/ViewSourceEvent.tsx deleted file mode 100644 index e7ed1f8332..0000000000 --- a/apps/web/src/components/views/messages/ViewSourceEvent.tsx +++ /dev/null @@ -1,83 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2019 The Matrix.org Foundation C.I.C. - -SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial -Please see LICENSE files in the repository root for full details. -*/ - -import React from "react"; -import { type MatrixEvent, MatrixEventEvent } from "matrix-js-sdk/src/matrix"; -import classNames from "classnames"; -import { CollapseIcon, ExpandIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; - -import { MatrixClientPeg } from "../../../MatrixClientPeg"; -import { _t } from "../../../languageHandler"; -import AccessibleButton, { type ButtonEvent } from "../elements/AccessibleButton"; - -interface IProps { - mxEvent: MatrixEvent; -} - -interface IState { - expanded: boolean; -} - -export default class ViewSourceEvent extends React.PureComponent { - public constructor(props: IProps) { - super(props); - - this.state = { - expanded: false, - }; - } - - public componentDidMount(): void { - const { mxEvent } = this.props; - - const client = MatrixClientPeg.safeGet(); - client.decryptEventIfNeeded(mxEvent); - - if (mxEvent.isBeingDecrypted()) { - mxEvent.once(MatrixEventEvent.Decrypted, () => this.forceUpdate()); - } - } - - private onToggle = (ev: ButtonEvent): void => { - ev.preventDefault(); - const { expanded } = this.state; - this.setState({ - expanded: !expanded, - }); - }; - - public render(): React.ReactNode { - const { mxEvent } = this.props; - const { expanded } = this.state; - - let content; - if (expanded) { - content =

{JSON.stringify(mxEvent, null, 4)}
; - } else { - content = {`{ "type": ${mxEvent.getType()} }`}; - } - - const classes = classNames("mx_ViewSourceEvent mx_EventTile_content", { - mx_ViewSourceEvent_expanded: expanded, - }); - - return ( - - {content} - - {expanded ? : } - - - ); - } -} diff --git a/apps/web/src/events/EventTileFactory.tsx b/apps/web/src/events/EventTileFactory.tsx index e707ee9d61..830f427614 100644 --- a/apps/web/src/events/EventTileFactory.tsx +++ b/apps/web/src/events/EventTileFactory.tsx @@ -25,6 +25,7 @@ import { MKeyVerificationRequestView, RoomAvatarEventView, TextualEventView, + ViewSourceEventView, useCreateAutoDisposedViewModel, } from "@element-hq/web-shared-components"; @@ -44,7 +45,6 @@ import { useMatrixClientContext } from "../contexts/MatrixClientContext"; import { WidgetType } from "../widgets/WidgetType"; import { hasText } from "../TextForEvent"; import { getMessageModerationState, MessageModerationState } from "../utils/EventUtils"; -import ViewSourceEvent from "../components/views/messages/ViewSourceEvent"; import { shouldDisplayAsBeaconTile } from "../utils/beacon/timeline"; import { type IBodyProps } from "../components/views/messages/IBodyProps"; import { ModuleApi } from "../modules/Api"; @@ -54,6 +54,7 @@ import { MKeyVerificationRequestViewModel } from "../viewmodels/room/timeline/ev import { RoomAvatarEventViewModel } from "../viewmodels/room/timeline/event-tile/RoomAvatarEventViewModel"; import { TextualEventViewModel } from "../viewmodels/room/timeline/event-tile/TextualEventViewModel"; import { HiddenBodyViewModel } from "../viewmodels/room/timeline/event-tile/body/HiddenBodyViewModel"; +import { ViewSourceEventViewModel } from "../viewmodels/room/timeline/event-tile/body/ViewSourceEventViewModel"; import { ElementCallEventType } from "../call-types"; import { CallStartedTileViewModel } from "../viewmodels/room/timeline/event-tile/call/CallStartedTileViewModel"; @@ -127,6 +128,24 @@ function HiddenBodyWrappedView({ mxEvent, ref }: IBodyProps): JSX.Element { } const HiddenEventFactory: Factory = (ref, props) => ; +function ViewSourceEventWrappedView({ mxEvent, ref }: IBodyProps): JSX.Element { + const cli = useMatrixClientContext(); + const vm = useCreateAutoDisposedViewModel(() => new ViewSourceEventViewModel({ mxEvent, cli })); + + useEffect(() => { + vm.setProps({ cli, mxEvent }); + }, [cli, mxEvent, vm]); + + return ( + + ); +} + function MJitsiWidgetEventWrappedView({ mxEvent, ref }: IBodyProps): JSX.Element { const cli = useMatrixClientContext(); const vm = useCreateAutoDisposedViewModel(() => new MJitsiWidgetEventViewModel({ mxEvent, cli })); @@ -178,8 +197,8 @@ export const CallStartedEventFactory: Factory = (ref, props) => { }; // These factories are exported for reference comparison against pickFactory() +export const JSONEventFactory: Factory = (ref, props) => ; export const JitsiEventFactory: Factory = (ref, props) => ; -export const JSONEventFactory: Factory = (ref, props) => ; export const RoomCreateEventFactory: Factory = (_ref, props) => ; const EVENT_TILE_TYPES = new Map([ diff --git a/apps/web/src/i18n/strings/en_EN.json b/apps/web/src/i18n/strings/en_EN.json index f402a1760f..bc52ce33b9 100644 --- a/apps/web/src/i18n/strings/en_EN.json +++ b/apps/web/src/i18n/strings/en_EN.json @@ -892,7 +892,6 @@ "thread_root_id": "Thread Root ID: %(threadRootId)s", "threads_timeline": "Threads timeline", "title": "Developer tools", - "toggle_event": "toggle event", "toolbox": "Toolbox", "use_at_own_risk": "This UI does NOT check the types of the values. Use at your own risk.", "user_avatar": "Avatar: %(avatar)s", diff --git a/apps/web/src/viewmodels/room/timeline/event-tile/body/ViewSourceEventViewModel.ts b/apps/web/src/viewmodels/room/timeline/event-tile/body/ViewSourceEventViewModel.ts new file mode 100644 index 0000000000..d574ee1572 --- /dev/null +++ b/apps/web/src/viewmodels/room/timeline/event-tile/body/ViewSourceEventViewModel.ts @@ -0,0 +1,113 @@ +/* +Copyright 2026 Element Creations Ltd. +Copyright 2024 New Vector Ltd. +Copyright 2019 The Matrix.org Foundation C.I.C. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import { type MouseEvent } from "react"; +import { type MatrixClient, type MatrixEvent, MatrixEventEvent } from "matrix-js-sdk/src/matrix"; +import { + BaseViewModel, + Disposables, + type ViewSourceEventViewModel as ViewSourceEventViewModelInterface, + type ViewSourceEventViewSnapshot, +} from "@element-hq/web-shared-components"; + +export interface ViewSourceEventViewModelProps { + /** + * The hidden event whose source is being rendered. + */ + mxEvent: MatrixEvent; + /** + * Matrix client used to request decryption before rendering event source. + */ + cli: MatrixClient; +} + +/** + * ViewModel for hidden event source rendering. + */ +export class ViewSourceEventViewModel + extends BaseViewModel + implements ViewSourceEventViewModelInterface +{ + private decryptionListenerDisposables?: Disposables; + + private static computeSnapshot( + { mxEvent }: ViewSourceEventViewModelProps, + expanded: boolean, + ): ViewSourceEventViewSnapshot { + return { + expanded, + preview: `{ "type": ${mxEvent.getType()} }`, + source: expanded ? ViewSourceEventViewModel.computeSource(mxEvent) : "", + }; + } + + private static computeSource(mxEvent: MatrixEvent): string { + return JSON.stringify(mxEvent, null, 4) ?? ""; + } + + public constructor(props: ViewSourceEventViewModelProps) { + super(props, ViewSourceEventViewModel.computeSnapshot(props, false)); + this.disposables.track(() => this.removeDecryptionListener()); + this.setupDecryptionListener(); + } + + public setProps(newProps: Partial): void { + const nextProps = { ...this.props, ...newProps }; + const eventChanged = this.props.mxEvent !== nextProps.mxEvent; + const clientChanged = this.props.cli !== nextProps.cli; + + if (!eventChanged && !clientChanged) return; + + this.props = nextProps; + + this.setupDecryptionListener(); + + if (eventChanged) { + this.updateSnapshotFromProps(); + } + } + + public onToggle = (event: MouseEvent): void => { + event.preventDefault(); + + const expanded = !this.snapshot.current.expanded; + this.snapshot.merge({ + expanded, + source: expanded ? ViewSourceEventViewModel.computeSource(this.props.mxEvent) : "", + }); + }; + + private updateSnapshotFromProps(): void { + this.snapshot.merge(ViewSourceEventViewModel.computeSnapshot(this.props, this.snapshot.current.expanded)); + } + + private setupDecryptionListener(): void { + this.removeDecryptionListener(); + + const { cli, mxEvent } = this.props; + cli.decryptEventIfNeeded(mxEvent); + + if (!mxEvent.isBeingDecrypted()) return; + + const onDecrypted = (): void => { + this.removeDecryptionListener(); + if (this.props.mxEvent !== mxEvent) return; + + this.updateSnapshotFromProps(); + }; + + this.decryptionListenerDisposables = new Disposables(); + this.decryptionListenerDisposables.trackListener(mxEvent, MatrixEventEvent.Decrypted, onDecrypted); + } + + private removeDecryptionListener(): void { + this.decryptionListenerDisposables?.dispose(); + this.decryptionListenerDisposables = undefined; + } +} diff --git a/apps/web/test/viewmodels/message-body/ViewSourceEventViewModel-test.ts b/apps/web/test/viewmodels/message-body/ViewSourceEventViewModel-test.ts new file mode 100644 index 0000000000..6b0ee8e6f6 --- /dev/null +++ b/apps/web/test/viewmodels/message-body/ViewSourceEventViewModel-test.ts @@ -0,0 +1,143 @@ +/* +Copyright 2026 Element Creations Ltd. +Copyright 2024 New Vector Ltd. +Copyright 2019 The Matrix.org Foundation C.I.C. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import { type MouseEvent } from "react"; +import { type MatrixClient, MatrixEvent, MatrixEventEvent } from "matrix-js-sdk/src/matrix"; + +import { ViewSourceEventViewModel } from "../../../src/viewmodels/room/timeline/event-tile/body/ViewSourceEventViewModel"; + +describe("ViewSourceEventViewModel", () => { + const createClient = (): MatrixClient => + ({ + decryptEventIfNeeded: jest.fn().mockResolvedValue(undefined), + }) as unknown as MatrixClient; + + const createEvent = (type = "m.room.message", content: Record = {}): MatrixEvent => + new MatrixEvent({ + type, + event_id: "$event:example.org", + sender: "@alice:example.org", + content, + }); + + const createClickEvent = (): MouseEvent => + ({ + preventDefault: jest.fn(), + }) as unknown as MouseEvent; + + it("creates a collapsed event source snapshot and requests decryption", () => { + const cli = createClient(); + const mxEvent = createEvent("m.room.member"); + const vm = new ViewSourceEventViewModel({ cli, mxEvent }); + + expect(cli.decryptEventIfNeeded).toHaveBeenCalledWith(mxEvent); + expect(vm.getSnapshot()).toEqual({ + expanded: false, + preview: '{ "type": m.room.member }', + source: "", + }); + }); + + it("toggles expanded state", () => { + const mxEvent = createEvent(); + const vm = new ViewSourceEventViewModel({ cli: createClient(), mxEvent }); + const event = createClickEvent(); + + vm.onToggle(event); + + expect(event.preventDefault).toHaveBeenCalled(); + expect(vm.getSnapshot().expanded).toBe(true); + expect(vm.getSnapshot().source).toBe(JSON.stringify(mxEvent, null, 4)); + + vm.onToggle(createClickEvent()); + + expect(vm.getSnapshot().expanded).toBe(false); + expect(vm.getSnapshot().source).toBe(""); + }); + + it("updates the event source when the event changes", () => { + const cli = createClient(); + const oldEvent = createEvent("m.room.message"); + const newEvent = createEvent("m.room.topic", { topic: "New topic" }); + const vm = new ViewSourceEventViewModel({ cli, mxEvent: oldEvent }); + + vm.onToggle(createClickEvent()); + vm.setProps({ mxEvent: newEvent }); + + expect(cli.decryptEventIfNeeded).toHaveBeenCalledWith(newEvent); + expect(vm.getSnapshot()).toEqual({ + expanded: true, + preview: '{ "type": m.room.topic }', + source: JSON.stringify(newEvent, null, 4), + }); + }); + + it("removes the previous decryption listener when the event changes", () => { + const oldEvent = createEvent("m.room.encrypted"); + jest.spyOn(oldEvent, "isBeingDecrypted").mockReturnValue(true); + const offSpy = jest.spyOn(oldEvent, "off"); + const vm = new ViewSourceEventViewModel({ cli: createClient(), mxEvent: oldEvent }); + + vm.setProps({ mxEvent: createEvent("m.room.message") }); + + expect(offSpy).toHaveBeenCalledWith(MatrixEventEvent.Decrypted, expect.any(Function)); + }); + + it("updates the decryption request when the client changes", () => { + const oldClient = createClient(); + const newClient = createClient(); + const mxEvent = createEvent(); + const vm = new ViewSourceEventViewModel({ cli: oldClient, mxEvent }); + const listener = jest.fn(); + vm.subscribe(listener); + + vm.setProps({ cli: newClient }); + + expect(newClient.decryptEventIfNeeded).toHaveBeenCalledWith(mxEvent); + expect(listener).not.toHaveBeenCalled(); + }); + + it("does not emit when setProps receives unchanged props", () => { + const cli = createClient(); + const mxEvent = createEvent(); + const vm = new ViewSourceEventViewModel({ cli, mxEvent }); + const listener = jest.fn(); + vm.subscribe(listener); + + vm.setProps({ cli, mxEvent }); + + expect(listener).not.toHaveBeenCalled(); + }); + + it("updates the source after decryption completes", () => { + const mxEvent = createEvent("m.room.encrypted", { ciphertext: "encrypted" }); + jest.spyOn(mxEvent, "isBeingDecrypted").mockReturnValue(true); + const vm = new ViewSourceEventViewModel({ cli: createClient(), mxEvent }); + vm.onToggle(createClickEvent()); + const listener = jest.fn(); + vm.subscribe(listener); + + mxEvent.getContent().body = "decrypted"; + mxEvent.emit(MatrixEventEvent.Decrypted, mxEvent); + + expect(listener).toHaveBeenCalledTimes(1); + expect(vm.getSnapshot().source).toContain("decrypted"); + }); + + it("removes decryption listeners on dispose", () => { + const mxEvent = createEvent("m.room.encrypted"); + jest.spyOn(mxEvent, "isBeingDecrypted").mockReturnValue(true); + const offSpy = jest.spyOn(mxEvent, "off"); + const vm = new ViewSourceEventViewModel({ cli: createClient(), mxEvent }); + + vm.dispose(); + + expect(offSpy).toHaveBeenCalledWith(MatrixEventEvent.Decrypted, expect.any(Function)); + }); +}); diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.stories.tsx/default-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.stories.tsx/default-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..6264a9257394443d7c240090cfddc94be8a3bd70 GIT binary patch literal 18680 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 literal 0 HcmV?d00001 diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.stories.tsx/expanded-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.stories.tsx/expanded-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..965add6cf54593f91dc56d44eb0c595a0634809a GIT binary patch literal 24846 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 literal 0 HcmV?d00001 diff --git a/packages/shared-components/src/i18n/strings/en_EN.json b/packages/shared-components/src/i18n/strings/en_EN.json index 70b1193704..83fa213d22 100644 --- a/packages/shared-components/src/i18n/strings/en_EN.json +++ b/packages/shared-components/src/i18n/strings/en_EN.json @@ -41,6 +41,9 @@ "preferences": "Preferences", "state_encryption_enabled": "Experimental state encryption enabled" }, + "devtools": { + "toggle_event": "toggle event" + }, "keyboard": { "shift": "Shift" }, diff --git a/packages/shared-components/src/index.ts b/packages/shared-components/src/index.ts index c81e1943d1..a7a06ec999 100644 --- a/packages/shared-components/src/index.ts +++ b/packages/shared-components/src/index.ts @@ -27,6 +27,7 @@ export * from "./room/timeline/event-tile/body/MjolnirBodyView"; export * from "./room/timeline/event-tile/body/MVideoBodyView"; export * from "./room/timeline/event-tile/body/TextualBodyView"; export * from "./room/timeline/event-tile/body/UnknownBodyView"; +export * from "./room/timeline/event-tile/body/ViewSourceEventView"; export * from "./room/timeline/event-tile/EventTileView/TileErrorView"; export * from "./core/pill-input/Pill"; export * from "./core/pill-input/PillInput"; diff --git a/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.module.css b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.module.css new file mode 100644 index 0000000000..abaf8b6144 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.module.css @@ -0,0 +1,64 @@ +/* +Copyright 2026 Element Creations Ltd. +Copyright 2024 New Vector Ltd. +Copyright 2019 The Matrix.org Foundation C.I.C. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +.content { + display: flex; + color: var(--cpd-color-text-secondary); + font-size: var(--cpd-font-size-body-xs); + width: 100%; + overflow-x: auto; + line-height: normal; +} + +.source { + flex: 1; +} + +pre.source { + line-height: 1.2; + margin: 3.5px 0; +} + +.toggle { + --ViewSourceEvent_toggle-size: 16px; + + appearance: none; + border: 0; + padding: 0; + background: none; + color: var(--cpd-color-icon-accent-primary); + cursor: pointer; + display: inline-flex; + align-items: center; + justify-content: center; + visibility: hidden; + width: var(--ViewSourceEvent_toggle-size); + min-width: var(--ViewSourceEvent_toggle-size); + height: var(--ViewSourceEvent_toggle-size); +} + +.content:hover .toggle, +.toggle:focus-visible { + visibility: visible; +} + +.toggle:focus-visible { + outline: 2px solid var(--cpd-color-border-focused); + outline-offset: 2px; + border-radius: var(--cpd-space-1x); +} + +.toggle svg { + width: var(--ViewSourceEvent_toggle-size); + height: var(--ViewSourceEvent_toggle-size); +} + +.expanded .toggle { + align-self: flex-end; +} diff --git a/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.stories.tsx b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.stories.tsx new file mode 100644 index 0000000000..2e248660d3 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.stories.tsx @@ -0,0 +1,77 @@ +/* +Copyright 2026 Element Creations Ltd. +Copyright 2024 New Vector Ltd. +Copyright 2019 The Matrix.org Foundation C.I.C. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import React, { type JSX } from "react"; +import { fn } from "storybook/test"; + +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { useMockedViewModel } from "../../../../../core/viewmodel"; +import { withViewDocs } from "../../../../../../.storybook/withViewDocs"; +import { + ViewSourceEventView, + type ViewSourceEventViewActions, + type ViewSourceEventViewSnapshot, +} from "./ViewSourceEventView"; + +type ViewSourceEventViewProps = ViewSourceEventViewSnapshot & + ViewSourceEventViewActions & { + className?: string; + expandedClassName?: string; + }; + +const source = JSON.stringify( + { + type: "m.room.message", + sender: "@alice:example.org", + content: { + msgtype: "m.text", + body: "Hello", + }, + }, + null, + 4, +); + +const ViewSourceEventViewWrapperImpl = ({ + onToggle, + className, + expandedClassName, + ...snapshot +}: ViewSourceEventViewProps): JSX.Element => { + const vm = useMockedViewModel(snapshot, { onToggle }); + + return ; +}; + +const ViewSourceEventViewWrapper = withViewDocs(ViewSourceEventViewWrapperImpl, ViewSourceEventView); + +const meta = { + title: "Timeline/Timeline Event/ViewSourceEventView", + component: ViewSourceEventViewWrapper, + tags: ["autodocs"], + args: { + expanded: false, + preview: '{ "type": m.room.message }', + source, + onToggle: fn(), + className: "", + expandedClassName: "", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; + +export const Expanded: Story = { + args: { + expanded: true, + }, +}; diff --git a/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.test.tsx b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.test.tsx new file mode 100644 index 0000000000..0b75718aa5 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.test.tsx @@ -0,0 +1,107 @@ +/* +Copyright 2026 Element Creations Ltd. +Copyright 2024 New Vector Ltd. +Copyright 2019 The Matrix.org Foundation C.I.C. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import { composeStories } from "@storybook/react-vite"; +import { fireEvent, render, screen } from "@test-utils"; +import React from "react"; +import { describe, expect, it, vi } from "vitest"; + +import { MockViewModel } from "../../../../../core/viewmodel"; +import { + ViewSourceEventView, + type ViewSourceEventViewActions, + type ViewSourceEventViewModel, + type ViewSourceEventViewSnapshot, +} from "./ViewSourceEventView"; +import * as stories from "./ViewSourceEventView.stories"; + +const { Default, Expanded } = composeStories(stories); + +class TestViewSourceEventViewModel + extends MockViewModel + implements ViewSourceEventViewActions +{ + public constructor( + snapshot: ViewSourceEventViewSnapshot, + public onToggle: ViewSourceEventViewActions["onToggle"], + ) { + super(snapshot); + } +} + +const createVm = ( + snapshot: Partial = {}, + onToggle: ViewSourceEventViewActions["onToggle"] = vi.fn(), +): ViewSourceEventViewModel => + new TestViewSourceEventViewModel( + { + expanded: false, + preview: '{ "type": m.room.message }', + source: '{\n "type": "m.room.message"\n}', + ...snapshot, + }, + onToggle, + ) as ViewSourceEventViewModel; + +describe("ViewSourceEventView", () => { + const getToggleButton = (container: HTMLElement): HTMLButtonElement => { + const button = container.querySelector('button[aria-label="toggle event"]'); + + if (!button) { + throw new Error("Expected view source toggle button to be rendered"); + } + + return button; + }; + + it("renders the default story", () => { + const { container } = render(); + + expect(container).toMatchSnapshot(); + expect(screen.getByText('{ "type": m.room.message }')).toBeInTheDocument(); + expect(getToggleButton(container)).toBeInTheDocument(); + }); + + it("renders the expanded story", () => { + const { container } = render(); + + expect(container).toMatchSnapshot(); + expect(screen.getByText(/"sender": "@alice:example\.org"/)).toBeInTheDocument(); + }); + + it("invokes the toggle action", () => { + const onToggle = vi.fn(); + const vm = createVm({}, onToggle); + + const { container } = render(); + + fireEvent.click(getToggleButton(container)); + + expect(onToggle).toHaveBeenCalledTimes(1); + }); + + it("applies custom class names to the root element", () => { + const vm = createVm({ expanded: true }); + + const { container } = render( + , + ); + + expect(container.firstChild).toHaveClass("custom-source", "custom-expanded"); + }); + + it("forwards the provided ref to the root span", () => { + const ref = React.createRef(); + const vm = createVm(); + + render(); + + expect(ref.current).toBeInstanceOf(HTMLSpanElement); + }); +}); diff --git a/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.tsx b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.tsx new file mode 100644 index 0000000000..b0809be9d5 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/ViewSourceEventView.tsx @@ -0,0 +1,98 @@ +/* +Copyright 2026 Element Creations Ltd. +Copyright 2024 New Vector Ltd. +Copyright 2019 The Matrix.org Foundation C.I.C. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import React, { type JSX, type MouseEventHandler, type Ref } from "react"; +import classNames from "classnames"; +import { CollapseIcon, ExpandIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; +import { Tooltip } from "@vector-im/compound-web"; + +import { type ViewModel, useViewModel } from "../../../../../core/viewmodel"; +import { useI18n } from "../../../../../core/i18n/i18nContext"; +import styles from "./ViewSourceEventView.module.css"; + +export interface ViewSourceEventViewSnapshot { + /** + * Whether the full event source is visible. + */ + expanded: boolean; + /** + * Collapsed one-line event summary. + */ + preview: string; + /** + * Pretty-printed event source. + */ + source: string; +} + +export interface ViewSourceEventViewActions { + /** + * Invoked when the user expands or collapses the event source. + */ + onToggle: MouseEventHandler; +} + +export type ViewSourceEventViewModel = ViewModel; + +interface ViewSourceEventViewProps { + /** + * ViewModel providing the event source snapshot and actions. + */ + vm: ViewSourceEventViewModel; + /** + * Optional CSS class names applied to the root element. + */ + className?: string; + /** + * Optional CSS class name applied to the root element while expanded. + */ + expandedClassName?: string; + /** + * Optional ref forwarded to the root element. + */ + ref?: Ref; +} + +/** + * Renders a collapsible event source preview for hidden timeline events. + */ +export function ViewSourceEventView({ + vm, + className, + expandedClassName, + ref, +}: Readonly): JSX.Element { + const { expanded, preview, source } = useViewModel(vm); + const _t = useI18n().translate; + const toggleLabel = _t("devtools|toggle_event"); + + const classes = classNames( + styles.content, + className, + { + [styles.expanded]: expanded, + }, + expanded && expandedClassName, + ); + + return ( + + {expanded ? ( +
{source}
+ ) : ( + {preview} + )} + + + +
+ ); +} diff --git a/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/__snapshots__/ViewSourceEventView.test.tsx.snap b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/__snapshots__/ViewSourceEventView.test.tsx.snap new file mode 100644 index 0000000000..79703e7c36 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/__snapshots__/ViewSourceEventView.test.tsx.snap @@ -0,0 +1,70 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`ViewSourceEventView > renders the default story 1`] = ` +
+ + + { "type": m.room.message } + + + +
+`; + +exports[`ViewSourceEventView > renders the expanded story 1`] = ` +
+ +
+      {
+    "type": "m.room.message",
+    "sender": "@alice:example.org",
+    "content": {
+        "msgtype": "m.text",
+        "body": "Hello"
+    }
+}
+    
+ +
+
+`; diff --git a/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/index.tsx b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/index.tsx new file mode 100644 index 0000000000..6c642b4d93 --- /dev/null +++ b/packages/shared-components/src/room/timeline/event-tile/body/ViewSourceEventView/index.tsx @@ -0,0 +1,10 @@ +/* +Copyright 2026 Element Creations Ltd. +Copyright 2024 New Vector Ltd. +Copyright 2019 The Matrix.org Foundation C.I.C. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +export * from "./ViewSourceEventView"; From aeaeb55cdaec8b684db72fca5b612631747a8d92 Mon Sep 17 00:00:00 2001 From: Will Hunt <2072976+Half-Shot@users.noreply.github.com> Date: Tue, 12 May 2026 12:30:30 +0100 Subject: [PATCH 5/9] Rework Upload internals to use MVVM (#33307) * Initial reword of upload to MVVM. * Update tests * More incremental improvements * Refactor tests to use helper method for composer uploads. * Add drag and drop tests * lint * Add commentary * fixup test * More precise selector * Retarget uploads * lint * fixup * one more type * update snap * Fixup composerUploadFiles * fix import * lint * Copy and paste fixes too * Add tests for pasting * Add tests for pasting files. * Remove redundant fn * rm comment * tidy up * Test cleanup * More clean up * another fix * Use condensed version * Cleanup tests * more cleaning * last bity * s/throw Error/throw new Error/ --- .../playwright/e2e/timeline/timeline.spec.ts | 9 +- apps/web/playwright/pages/ElementAppPage.ts | 3 +- apps/web/src/ContentMessages.ts | 2 +- .../components/structures/FileDropTarget.tsx | 20 +- .../src/components/structures/RoomView.tsx | 50 ++-- .../src/components/structures/ThreadView.tsx | 82 +++---- .../views/right_panel/TimelineCard.tsx | 81 +++--- .../views/rooms/MessageComposerButtons.tsx | 82 +------ .../views/rooms/SendMessageComposer.tsx | 42 ++-- .../components/PlainTextComposer.tsx | 6 +- .../components/WysiwygComposer.tsx | 2 +- .../hooks/useInputEventProcessor.ts | 9 +- .../hooks/usePlainTextListeners.ts | 15 +- .../rooms/wysiwyg_composer/hooks/utils.ts | 27 +- .../viewmodels/room/RoomUploadViewModel.tsx | 231 ++++++++++++++++++ apps/web/test/test-utils/test-utils.ts | 4 +- .../structures/FileDropTarget-test.tsx | 65 +++-- .../__snapshots__/RoomView-test.tsx.snap | 95 ++++--- .../views/rooms/MessageComposer-test.tsx | 8 +- .../rooms/MessageComposerButtons-test.tsx | 7 +- .../views/rooms/SendMessageComposer-test.tsx | 13 +- .../EditWysiwygComposer-test.tsx | 13 +- .../SendWysiwygComposer-test.tsx | 21 +- .../components/WysiwygComposer-test.tsx | 43 ++-- .../wysiwyg_composer/hooks/utils-test.tsx | 154 +++--------- .../room/RoomUploadViewModel-test.ts | 174 +++++++++++++ 26 files changed, 768 insertions(+), 490 deletions(-) create mode 100644 apps/web/src/viewmodels/room/RoomUploadViewModel.tsx create mode 100644 apps/web/test/viewmodels/room/RoomUploadViewModel-test.ts diff --git a/apps/web/playwright/e2e/timeline/timeline.spec.ts b/apps/web/playwright/e2e/timeline/timeline.spec.ts index 8c4888bff5..a9a25bcbb4 100644 --- a/apps/web/playwright/e2e/timeline/timeline.spec.ts +++ b/apps/web/playwright/e2e/timeline/timeline.spec.ts @@ -751,7 +751,7 @@ test.describe("Timeline", () => { await expect(page.locator(".mx_EventTile[data-layout=irc] .mx_ViewSourceEvent_expanded")).toBeVisible(); }); - test("should render file size in kibibytes on a file tile", async ({ page, room }) => { + test("should render file size in kibibytes on a file tile", async ({ page, app, room }) => { await page.goto(`/#/room/${room.roomId}`); await expect( page @@ -760,12 +760,7 @@ test.describe("Timeline", () => { ).toBeVisible(); // Upload a file from the message composer - await page - .locator(".mx_MessageComposer_actions input[type='file']") - .setInputFiles(getSampleFilePath("matrix-org-client-versions.json")); - - // Click "Upload" button - await page.locator(".mx_Dialog").getByRole("button", { name: "Upload" }).click(); + await app.composerUploadFiles("room", getSampleFilePath("matrix-org-client-versions.json")); // Wait until the file is sent await expect(page.locator(".mx_RoomView_statusArea_expanded")).not.toBeVisible(); diff --git a/apps/web/playwright/pages/ElementAppPage.ts b/apps/web/playwright/pages/ElementAppPage.ts index 41abc8f980..f933484ff0 100644 --- a/apps/web/playwright/pages/ElementAppPage.ts +++ b/apps/web/playwright/pages/ElementAppPage.ts @@ -169,8 +169,7 @@ export class ElementAppPage { ): ReturnType { const input = this.page .locator(location === "room" ? ".mx_RoomView_body" : ".mx_RightPanel") - .getByRole("region", { name: "Message composer" }) - .locator("input[type='file']"); + .getByTestId("room-upload-context-input"); return input.setInputFiles(...params); } diff --git a/apps/web/src/ContentMessages.ts b/apps/web/src/ContentMessages.ts index ec68f854fe..15a43d79b6 100644 --- a/apps/web/src/ContentMessages.ts +++ b/apps/web/src/ContentMessages.ts @@ -607,7 +607,7 @@ export default class ContentMessages { throw e; } // Otherwise we failed to thumbnail, fall back to uploading an m.file - logger.error(e); + logger.error(`Expected file of type "${file.type}" to be an image, but got`, e); content.msgtype = MsgType.File; } } else if (file.type.startsWith("audio/")) { diff --git a/apps/web/src/components/structures/FileDropTarget.tsx b/apps/web/src/components/structures/FileDropTarget.tsx index 564383d9f4..a81c05fbad 100644 --- a/apps/web/src/components/structures/FileDropTarget.tsx +++ b/apps/web/src/components/structures/FileDropTarget.tsx @@ -1,4 +1,5 @@ /* +Copyright 2026 Element Creations Ltd. Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. @@ -7,16 +8,14 @@ Please see LICENSE files in the repository root for full details. */ import React, { useEffect, useState } from "react"; -import { type Room } from "matrix-js-sdk/src/matrix"; +import { useViewModel } from "@element-hq/web-shared-components"; import { _t } from "../../languageHandler"; import UploadBigSvg from "../../../res/img/upload-big.svg"; -import { useRoomState } from "../../hooks/useRoomState.ts"; +import { useRoomUploadViewModel } from "../../viewmodels/room/RoomUploadViewModel"; interface IProps { - room: Room; parent: HTMLElement | null; - onFileDrop(this: void, dataTransfer: DataTransfer): void; } interface IState { @@ -24,15 +23,16 @@ interface IState { counter: number; } -const FileDropTarget: React.FC = ({ parent, onFileDrop, room }) => { +const FileDropTarget: React.FC = ({ parent }) => { const [state, setState] = useState({ dragging: false, counter: 0, }); - const hasPermission = useRoomState(room, (state) => state.maySendMessage(room.client.getUserId()!)); + const vm = useRoomUploadViewModel(); + const { mayUpload } = useViewModel(vm); useEffect(() => { - if (!hasPermission || !parent || parent.ondrop) return; + if (!mayUpload || !parent || parent.ondrop) return; const onDragEnter = (ev: DragEvent): void => { ev.stopPropagation(); @@ -83,7 +83,7 @@ const FileDropTarget: React.FC = ({ parent, onFileDrop, room }) => { ev.stopPropagation(); ev.preventDefault(); if (!ev.dataTransfer) return; - onFileDrop(ev.dataTransfer); + void vm.initiateViaDataTransfer(ev.dataTransfer); setState((state) => ({ dragging: false, @@ -106,9 +106,9 @@ const FileDropTarget: React.FC = ({ parent, onFileDrop, room }) => { parent?.removeEventListener("dragenter", onDragEnter); parent?.removeEventListener("dragleave", onDragLeave); }; - }, [parent, onFileDrop, hasPermission]); + }, [parent, mayUpload, vm]); - if (hasPermission && state.dragging) { + if (mayUpload && state.dragging) { return (
diff --git a/apps/web/src/components/structures/RoomView.tsx b/apps/web/src/components/structures/RoomView.tsx index b5c03938bc..9483b05a9c 100644 --- a/apps/web/src/components/structures/RoomView.tsx +++ b/apps/web/src/components/structures/RoomView.tsx @@ -142,6 +142,7 @@ import { type RoomViewStore } from "../../stores/RoomViewStore.tsx"; import { RoomStatusBarViewModel } from "../../viewmodels/room/RoomStatusBar.ts"; import { EncryptionEventViewModel } from "../../viewmodels/room/timeline/event-tile/EncryptionEventViewModel.ts"; import { ModuleApi } from "../../modules/Api.ts"; +import { RoomUploadContextProvider } from "../../viewmodels/room/RoomUploadViewModel.tsx"; import { EventPresentationContextProvider } from "../../utils/EventPresentationContextProvider"; const DEBUG = false; @@ -302,7 +303,6 @@ interface LocalRoomViewProps { resizeNotifier: ResizeNotifier; permalinkCreator: RoomPermalinkCreator; roomView: RefObject; - onFileDrop: (dataTransfer: DataTransfer) => Promise; mainSplitContentType: MainSplitContentType; e2eStatus?: E2EStatus; } @@ -343,17 +343,19 @@ function LocalRoomView(props: LocalRoomViewProps): ReactElement {
-
- -
- - {encryptionTile} - - -
- {statusBar} - {composer} -
+ +
+ +
+ + {encryptionTile} + + +
+ {statusBar} + {composer} +
+
); @@ -2121,19 +2123,6 @@ export class RoomView extends React.Component { }); } - private onFileDrop = async (dataTransfer: DataTransfer): Promise => { - const roomId = this.getRoomId(); - if (!roomId || !this.context.client) return; - await ContentMessages.sharedInstance().sendContentListToRoom( - Array.from(dataTransfer.files), - roomId, - undefined, - this.state.replyToEvent, - this.context.client, - TimelineRenderingType.Room, - ); - }; - private onMeasurement = (narrow: boolean): void => { this.setState({ narrow }); }; @@ -2169,7 +2158,6 @@ export class RoomView extends React.Component { resizeNotifier={this.context.resizeNotifier} permalinkCreator={this.permalinkCreator} roomView={this.roomView} - onFileDrop={this.onFileDrop} mainSplitContentType={this.state.mainSplitContentType} /> @@ -2673,16 +2661,12 @@ export class RoomView extends React.Component { case MainSplitContentType.Timeline: mainSplitContentClassName = "mx_MainSplit_timeline"; mainSplitBody = ( - <> + {auxPanel} {pinnedMessageBanner}
- + {topUnreadMessagesBar} {jumpToBottom} {messagePanel} @@ -2691,7 +2675,7 @@ export class RoomView extends React.Component { {statusBarArea} {previewBar} {messageComposer} - + ); break; case MainSplitContentType.MaximisedWidget: diff --git a/apps/web/src/components/structures/ThreadView.tsx b/apps/web/src/components/structures/ThreadView.tsx index 54727b95e2..87303d3f8c 100644 --- a/apps/web/src/components/structures/ThreadView.tsx +++ b/apps/web/src/components/structures/ThreadView.tsx @@ -29,7 +29,6 @@ import TimelinePanel from "./TimelinePanel"; import dis from "../../dispatcher/dispatcher"; import { type ActionPayload } from "../../dispatcher/payloads"; import { Action } from "../../dispatcher/actions"; -import { MatrixClientPeg } from "../../MatrixClientPeg"; import { type E2EStatus } from "../../utils/ShieldUtils"; import EditorStateTransfer from "../../utils/EditorStateTransfer"; import RoomContext, { TimelineRenderingType } from "../../contexts/RoomContext"; @@ -51,6 +50,7 @@ import { type ComposerInsertPayload, ComposerType } from "../../dispatcher/paylo import Heading from "../views/typography/Heading"; import { type ThreadPayload } from "../../dispatcher/payloads/ThreadPayload"; import { ScopedRoomContextProvider } from "../../contexts/ScopedRoomContext.tsx"; +import { RoomUploadContextProvider } from "../../viewmodels/room/RoomUploadViewModel.tsx"; import { EventPresentationContextProvider } from "../../utils/EventPresentationContextProvider"; interface IProps { @@ -329,22 +329,6 @@ export default class ThreadView extends React.Component { } }; - private onFileDrop = (dataTransfer: DataTransfer): void => { - const roomId = this.props.mxEvent.getRoomId(); - if (roomId) { - ContentMessages.sharedInstance().sendContentListToRoom( - Array.from(dataTransfer.files), - roomId, - this.threadRelation, - this.context.replyToEvent, - MatrixClientPeg.safeGet(), - TimelineRenderingType.Thread, - ); - } else { - console.warn("Unknwon roomId for event", this.props.mxEvent); - } - }; - private get threadRelation(): IEventRelation { const relation: IEventRelation = { rel_type: THREAD_RELATION_TYPE.name, @@ -393,7 +377,7 @@ export default class ThreadView extends React.Component { timeline = ( <> - + { liveTimeline={this.state?.thread?.timelineSet?.getLiveTimeline()} narrow={this.state.narrow} > - { - PosthogTrackers.trackInteraction("WebThreadViewBackButton", ev); - }} - > - -
{timeline}
+ + { + PosthogTrackers.trackInteraction("WebThreadViewBackButton", ev); + }} + > + +
{timeline}
- {ContentMessages.sharedInstance().getCurrentUploads(threadRelation).length > 0 && ( - - )} + {ContentMessages.sharedInstance().getCurrentUploads(threadRelation).length > 0 && ( + + )} - {this.state.thread?.timelineSet && ( - - )} -
+ {this.state.thread?.timelineSet && ( + + )} +
+ ); } diff --git a/apps/web/src/components/views/right_panel/TimelineCard.tsx b/apps/web/src/components/views/right_panel/TimelineCard.tsx index 0ec7b8bedd..3d5cabd1f9 100644 --- a/apps/web/src/components/views/right_panel/TimelineCard.tsx +++ b/apps/web/src/components/views/right_panel/TimelineCard.tsx @@ -38,6 +38,7 @@ import { type ViewRoomPayload } from "../../../dispatcher/payloads/ViewRoomPaylo import Measured from "../elements/Measured"; import { UPDATE_EVENT } from "../../../stores/AsyncStore"; import { ScopedRoomContextProvider } from "../../../contexts/ScopedRoomContext.tsx"; +import { RoomUploadContextProvider } from "../../../viewmodels/room/RoomUploadViewModel.tsx"; import { EventPresentationContextProvider } from "../../../utils/EventPresentationContextProvider"; interface IProps { @@ -214,47 +215,49 @@ export default class TimelineCard extends React.Component { header={_t("right_panel|video_room_chat|title")} ref={this.card} > - -
- {jumpToBottom} - - -
- - {isUploading && } - - {showComposer && ( - - )} + )} + ); diff --git a/apps/web/src/components/views/rooms/MessageComposerButtons.tsx b/apps/web/src/components/views/rooms/MessageComposerButtons.tsx index 2221bf7592..94919e7788 100644 --- a/apps/web/src/components/views/rooms/MessageComposerButtons.tsx +++ b/apps/web/src/components/views/rooms/MessageComposerButtons.tsx @@ -1,4 +1,5 @@ /* +Copyright 2026 Element Creations Ltd. Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. @@ -14,7 +15,7 @@ import { THREAD_RELATION_TYPE, M_POLL_START, } from "matrix-js-sdk/src/matrix"; -import React, { type JSX, createContext, type ReactElement, type ReactNode, useContext, useRef } from "react"; +import React, { type JSX, createContext, type ReactElement, type ReactNode, useContext } from "react"; import { AttachmentIcon, MicOnIcon, @@ -27,22 +28,19 @@ import { import { _t } from "../../../languageHandler"; import { CollapsibleButton } from "./CollapsibleButton"; import { type MenuProps } from "../../structures/ContextMenu"; -import dis from "../../../dispatcher/dispatcher"; import ErrorDialog from "../dialogs/ErrorDialog"; import { LocationButton } from "../location"; import Modal from "../../../Modal"; import PollCreateDialog from "../elements/PollCreateDialog"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; -import ContentMessages from "../../../ContentMessages"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; -import { useDispatcher } from "../../../hooks/useDispatcher"; -import { chromeFileInputFix } from "../../../utils/BrowserWorkarounds"; import IconizedContextMenu, { IconizedContextMenuOptionList } from "../context_menus/IconizedContextMenu"; import { EmojiButton } from "./EmojiButton"; import { filterBoolean } from "../../../utils/arrays"; import { useSettingValue } from "../../../hooks/useSettings"; import AccessibleButton, { type ButtonEvent } from "../elements/AccessibleButton"; import { useScopedRoomContext } from "../../../contexts/ScopedRoomContext.tsx"; +import { useRoomUploadViewModel } from "../../../viewmodels/room/RoomUploadViewModel.tsx"; interface IProps { addEmoji: (emoji: string) => boolean; @@ -126,7 +124,7 @@ const MessageComposerButtons: React.FC = (props: IProps) => { }); return ( - + <> {mainButtons} {moreButtons.length > 0 && ( = (props: IProps) => { )} - + ); }; @@ -168,79 +166,13 @@ function uploadButton(): ReactElement { return ; } -type UploadButtonFn = () => void; -export const UploadButtonContext = createContext(null); - -interface IUploadButtonProps { - roomId: string; - relation?: IEventRelation; - children: ReactNode; -} - -// We put the file input outside the UploadButton component so that it doesn't get killed when the context menu closes. -const UploadButtonContextProvider: React.FC = ({ roomId, relation, children }) => { - const cli = useContext(MatrixClientContext); - const roomContext = useScopedRoomContext("timelineRenderingType", "replyToEvent"); - const uploadInput = useRef(null); - - const onUploadClick = (): void => { - if (cli?.isGuest()) { - dis.dispatch({ action: "require_registration" }); - return; - } - uploadInput.current?.click(); - }; - - useDispatcher(dis, (payload) => { - if (roomContext.timelineRenderingType === payload.context && payload.action === "upload_file") { - onUploadClick(); - } - }); - - const onUploadFileInputChange = (ev: React.ChangeEvent): void => { - if (ev.target.files?.length === 0) return; - - // Take a copy, so we can safely reset the value of the form control - ContentMessages.sharedInstance().sendContentListToRoom( - Array.from(ev.target.files!), - roomId, - relation, - roomContext.replyToEvent, - cli, - roomContext.timelineRenderingType, - ); - - // This is the onChange handler for a file form control, but we're - // not keeping any state, so reset the value of the form control - // to empty. - // NB. we need to set 'value': the 'files' property is immutable. - ev.target.value = ""; - }; - - const uploadInputStyle = { display: "none" }; - return ( - - {children} - - - - ); -}; - // Must be rendered within an UploadButtonContextProvider const UploadButton: React.FC = () => { const overflowMenuCloser = useContext(OverflowMenuContext); - const uploadButtonFn = useContext(UploadButtonContext); + const vm = useRoomUploadViewModel(); const onClick = (): void => { - uploadButtonFn?.(); + vm.openUploadDialog(); overflowMenuCloser?.(); // close overflow menu }; diff --git a/apps/web/src/components/views/rooms/SendMessageComposer.tsx b/apps/web/src/components/views/rooms/SendMessageComposer.tsx index 0d9a68c45d..66288fbbaf 100644 --- a/apps/web/src/components/views/rooms/SendMessageComposer.tsx +++ b/apps/web/src/components/views/rooms/SendMessageComposer.tsx @@ -6,7 +6,13 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com Please see LICENSE files in the repository root for full details. */ -import React, { createRef, type KeyboardEvent, type SyntheticEvent } from "react"; +import React, { + createRef, + type KeyboardEvent, + type SyntheticEvent, + type RefAttributes, + type ReactElement, +} from "react"; import { type MatrixEvent, type IEventRelation, @@ -37,8 +43,7 @@ import { CommandPartCreator, type Part, type PartCreator, type SerializedPart } import { findEditableEvent } from "../../../utils/EventUtils"; import SendHistoryManager from "../../../SendHistoryManager"; import { CommandCategories } from "../../../slash-commands/SlashCommands"; -import ContentMessages from "../../../ContentMessages"; -import { withMatrixClientHOC, type MatrixClientProps } from "../../../contexts/MatrixClientContext"; +import { useMatrixClientContext, type MatrixClientProps } from "../../../contexts/MatrixClientContext"; import { Action } from "../../../dispatcher/actions"; import { containsEmoji } from "../../../effects/utils"; import { CHAT_EFFECTS } from "../../../effects"; @@ -60,6 +65,7 @@ import { type IDiff } from "../../../editor/diff"; import { getBlobSafeMimeType } from "../../../utils/blobs"; import { EMOJI_REGEX } from "../../../HtmlUtils"; import { attachMentions, attachRelation } from "../../../utils/messages"; +import { type RoomUploadViewModel, useRoomUploadViewModel } from "../../../viewmodels/room/RoomUploadViewModel"; // The prefix used when persisting editor drafts to localstorage. export const EDITOR_STATE_STORAGE_PREFIX = "mx_cider_state_"; @@ -124,6 +130,7 @@ export function isQuickReaction(model: EditorModel): boolean { interface ISendMessageComposerProps extends MatrixClientProps { room: Room; + uploadVm: RoomUploadViewModel; placeholder?: string; relation?: IEventRelation; replyToEvent?: MatrixEvent; @@ -561,14 +568,7 @@ export class SendMessageComposer extends React.Component { console.log(error); @@ -660,5 +654,13 @@ export class SendMessageComposer extends React.Component & + RefAttributes>, +): ReactElement { + const client = useMatrixClientContext(); + const uploadVm = useRoomUploadViewModel(); + return ; +} + +export default SendMessageComposerWrapped; diff --git a/apps/web/src/components/views/rooms/wysiwyg_composer/components/PlainTextComposer.tsx b/apps/web/src/components/views/rooms/wysiwyg_composer/components/PlainTextComposer.tsx index f45cc5d74f..8caf4c5eab 100644 --- a/apps/web/src/components/views/rooms/wysiwyg_composer/components/PlainTextComposer.tsx +++ b/apps/web/src/components/views/rooms/wysiwyg_composer/components/PlainTextComposer.tsx @@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details. import classNames from "classnames"; import { type IEventRelation } from "matrix-js-sdk/src/matrix"; -import React, { type JSX, type RefObject, type ReactNode } from "react"; +import React, { type JSX, type RefObject, type ReactNode, useContext } from "react"; import { useComposerFunctions } from "../hooks/useComposerFunctions"; import { useIsFocused } from "../hooks/useIsFocused"; @@ -19,6 +19,7 @@ import { type ComposerFunctions } from "../types"; import { Editor } from "./Editor"; import { WysiwygAutocomplete } from "./WysiwygAutocomplete"; import { useSettingValue } from "../../../../../hooks/useSettings"; +import { RoomUploadContext } from "../../../../../viewmodels/room/RoomUploadViewModel"; interface PlainTextComposerProps { disabled?: boolean; @@ -46,6 +47,7 @@ export function PlainTextComposer({ eventRelation, }: PlainTextComposerProps): JSX.Element { const isAutoReplaceEmojiEnabled = useSettingValue("MessageComposerInput.autoReplaceEmoji"); + const uploadContext = useContext(RoomUploadContext); const { ref: editorRef, autocompleteRef, @@ -61,7 +63,7 @@ export function PlainTextComposer({ handleMention, handleAtRoomMention, handleEmoji, - } = usePlainTextListeners(initialContent, onChange, onSend, eventRelation, isAutoReplaceEmojiEnabled); + } = usePlainTextListeners(initialContent, onChange, onSend, isAutoReplaceEmojiEnabled, uploadContext || undefined); const composerFunctions = useComposerFunctions(editorRef, setContent); usePlainTextInitialization(initialContent, editorRef); useSetCursorPosition(disabled, editorRef); diff --git a/apps/web/src/components/views/rooms/wysiwyg_composer/components/WysiwygComposer.tsx b/apps/web/src/components/views/rooms/wysiwyg_composer/components/WysiwygComposer.tsx index b0696143aa..ab720e0283 100644 --- a/apps/web/src/components/views/rooms/wysiwyg_composer/components/WysiwygComposer.tsx +++ b/apps/web/src/components/views/rooms/wysiwyg_composer/components/WysiwygComposer.tsx @@ -60,7 +60,7 @@ export const WysiwygComposer = memo(function WysiwygComposer({ const { room } = useScopedRoomContext("room"); const autocompleteRef = useRef(null); - const inputEventProcessor = useInputEventProcessor(onSend, autocompleteRef, initialContent, eventRelation); + const inputEventProcessor = useInputEventProcessor(onSend, autocompleteRef, initialContent); const isAutoReplaceEmojiEnabled = useSettingValue("MessageComposerInput.autoReplaceEmoji"); const emojiSuggestions = useMemo(() => getEmojiSuggestions(isAutoReplaceEmojiEnabled), [isAutoReplaceEmojiEnabled]); diff --git a/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/useInputEventProcessor.ts b/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/useInputEventProcessor.ts index 30e5649013..d72f777218 100644 --- a/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/useInputEventProcessor.ts +++ b/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/useInputEventProcessor.ts @@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details. import { type Wysiwyg, type WysiwygEvent } from "@vector-im/matrix-wysiwyg"; import { useCallback } from "react"; -import { type IEventRelation, type MatrixClient } from "matrix-js-sdk/src/matrix"; +import { type MatrixClient } from "matrix-js-sdk/src/matrix"; import { useSettingValue } from "../../../../../hooks/useSettings"; import { getKeyBindingsManager } from "../../../../../KeyBindingsManager"; @@ -26,13 +26,14 @@ import { endEditing } from "../utils/editing"; import type Autocomplete from "../../Autocomplete"; import { handleClipboardEvent, handleEventWithAutocomplete, isEventToHandleAsClipboardEvent } from "./utils"; import { useScopedRoomContext } from "../../../../../contexts/ScopedRoomContext.tsx"; +import { useRoomUploadViewModel } from "../../../../../viewmodels/room/RoomUploadViewModel.tsx"; export function useInputEventProcessor( onSend: () => void, autocompleteRef: React.RefObject, initialContent?: string, - eventRelation?: IEventRelation, ): (event: WysiwygEvent, composer: Wysiwyg, editor: HTMLElement) => WysiwygEvent | null { + const roomUploadVm = useRoomUploadViewModel(); const roomContext = useScopedRoomContext("liveTimeline", "room", "replyToEvent", "timelineRenderingType"); const composerContext = useComposerContext(); const mxClient = useMatrixClientContext(); @@ -52,7 +53,7 @@ export function useInputEventProcessor( if (isEventToHandleAsClipboardEvent(event)) { const data = event instanceof ClipboardEvent ? event.clipboardData : event.dataTransfer; - const handled = handleClipboardEvent(event, data, roomContext, mxClient, eventRelation); + const handled = handleClipboardEvent(event, data, roomUploadVm); return handled ? null : event; } @@ -77,11 +78,11 @@ export function useInputEventProcessor( isCtrlEnterToSend, onSend, initialContent, + roomUploadVm, roomContext, composerContext, mxClient, autocompleteRef, - eventRelation, ], ); } diff --git a/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextListeners.ts b/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextListeners.ts index 81272f8b4b..1a4713503e 100644 --- a/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextListeners.ts +++ b/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/usePlainTextListeners.ts @@ -8,7 +8,6 @@ Please see LICENSE files in the repository root for full details. import { type KeyboardEvent, type RefObject, type SyntheticEvent, useCallback, useRef, useState } from "react"; import { type AllowedMentionAttributes, type MappedSuggestion } from "@vector-im/matrix-wysiwyg"; -import { type IEventRelation } from "matrix-js-sdk/src/matrix"; import { useSettingValue } from "../../../../../hooks/useSettings"; import { IS_MAC, Key } from "../../../../../Keyboard"; @@ -16,8 +15,7 @@ import type Autocomplete from "../../Autocomplete"; import { handleClipboardEvent, handleEventWithAutocomplete, isEventToHandleAsClipboardEvent } from "./utils"; import { useSuggestion } from "./useSuggestion"; import { isNotNull, isNotUndefined } from "../../../../../Typeguards"; -import { useMatrixClientContext } from "../../../../../contexts/MatrixClientContext"; -import { useScopedRoomContext } from "../../../../../contexts/ScopedRoomContext.tsx"; +import type { RoomUploadViewModel } from "../../../../../viewmodels/room/RoomUploadViewModel.tsx"; function isDivElement(target: EventTarget): target is HTMLDivElement { return target instanceof HTMLDivElement; @@ -46,8 +44,8 @@ export function usePlainTextListeners( initialContent?: string, onChange?: (content: string) => void, onSend?: () => void, - eventRelation?: IEventRelation, isAutoReplaceEmojiEnabled?: boolean, + roomUploadVM?: RoomUploadViewModel, ): { ref: RefObject; autocompleteRef: RefObject; @@ -64,9 +62,6 @@ export function usePlainTextListeners( onSelect: (this: void, event: SyntheticEvent) => void; suggestion: MappedSuggestion | null; } { - const roomContext = useScopedRoomContext("room", "timelineRenderingType", "replyToEvent"); - const mxClient = useMatrixClientContext(); - const ref = useRef(null); const autocompleteRef = useRef(null); const [content, setContent] = useState(initialContent); @@ -120,10 +115,10 @@ export function usePlainTextListeners( const { nativeEvent } = event; let imagePasteWasHandled = false; - if (isEventToHandleAsClipboardEvent(nativeEvent)) { + if (roomUploadVM && isEventToHandleAsClipboardEvent(nativeEvent)) { const data = nativeEvent instanceof ClipboardEvent ? nativeEvent.clipboardData : nativeEvent.dataTransfer; - imagePasteWasHandled = handleClipboardEvent(nativeEvent, data, roomContext, mxClient, eventRelation); + imagePasteWasHandled = handleClipboardEvent(nativeEvent, data, roomUploadVM); } // prevent default behaviour and skip call to onInput if the image paste event was handled @@ -133,7 +128,7 @@ export function usePlainTextListeners( onInput(event); } }, - [eventRelation, mxClient, onInput, roomContext], + [onInput, roomUploadVM], ); const enterShouldSend = !useSettingValue("MessageComposerInput.ctrlEnterToSend"); diff --git a/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/utils.ts b/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/utils.ts index 0a34cf0940..6475109ab5 100644 --- a/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/utils.ts +++ b/apps/web/src/components/views/rooms/wysiwyg_composer/hooks/utils.ts @@ -7,7 +7,6 @@ Please see LICENSE files in the repository root for full details. */ import { type RefObject } from "react"; -import { type IEventRelation, type MatrixClient } from "matrix-js-sdk/src/matrix"; import { type WysiwygEvent } from "@vector-im/matrix-wysiwyg"; import { type TimelineRenderingType } from "../../../../../contexts/RoomContext"; @@ -16,8 +15,8 @@ import type Autocomplete from "../../Autocomplete"; import { getKeyBindingsManager } from "../../../../../KeyBindingsManager"; import { KeyBindingAction } from "../../../../../accessibility/KeyboardShortcuts"; import { getBlobSafeMimeType } from "../../../../../utils/blobs"; -import ContentMessages from "../../../../../ContentMessages"; import { isNotNull } from "../../../../../Typeguards"; +import type { RoomUploadViewModel } from "../../../../../viewmodels/room/RoomUploadViewModel"; export function focusComposer( composerElement: RefObject, @@ -123,13 +122,8 @@ export function handleEventWithAutocomplete( export function handleClipboardEvent( event: ClipboardEvent | InputEvent, data: DataTransfer | null, - roomContext: Pick, - mxClient: MatrixClient, - eventRelation?: IEventRelation, + vm: RoomUploadViewModel, ): boolean { - // Logic in this function follows that of `SendMessageComposer.onPaste` - const { room, timelineRenderingType, replyToEvent } = roomContext; - function handleError(error: unknown): void { if (error instanceof Error) { console.log(error.message); @@ -138,7 +132,7 @@ export function handleClipboardEvent( } } - if (event.type !== "paste" || data === null || room === undefined) { + if (event.type !== "paste" || data === null) { return false; } @@ -147,16 +141,7 @@ export function handleClipboardEvent( // We check text/rtf instead of text/plain as when copy+pasting a file from Finder or Gnome Image Viewer // it puts the filename in as text/plain which we want to ignore. if (data.files.length && !data.types.includes("text/rtf")) { - ContentMessages.sharedInstance() - .sendContentListToRoom( - Array.from(data.files), - room.roomId, - eventRelation, - roomContext.replyToEvent, - mxClient, - timelineRenderingType, - ) - .catch(handleError); + vm.initiateViaDataTransfer(data).catch(handleError); return true; } @@ -188,9 +173,7 @@ export function handleClipboardEvent( const parts = response.url.split("/"); const filename = parts[parts.length - 1]; const file = new File([imgBlob], filename + "." + ext, { type: safetype }); - ContentMessages.sharedInstance() - .sendContentToRoom(file, room.roomId, eventRelation, mxClient, replyToEvent) - .catch(handleError); + return vm.initiateViaInputFiles([file]); }) .catch(handleError); }) diff --git a/apps/web/src/viewmodels/room/RoomUploadViewModel.tsx b/apps/web/src/viewmodels/room/RoomUploadViewModel.tsx new file mode 100644 index 0000000000..8b409e777b --- /dev/null +++ b/apps/web/src/viewmodels/room/RoomUploadViewModel.tsx @@ -0,0 +1,231 @@ +/* + * Copyright 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { BaseViewModel, useCreateAutoDisposedViewModel } from "@element-hq/web-shared-components"; +import { logger as rootLogger } from "matrix-js-sdk/src/logger"; +import React, { + type ChangeEventHandler, + createContext, + type ReactNode, + useCallback, + useContext, + useEffect, + useRef, +} from "react"; +import { + type MatrixClient, + type Room, + type IEventRelation, + type MatrixEvent, + RoomEvent, +} from "matrix-js-sdk/src/matrix"; + +import { useScopedRoomContext } from "../../contexts/ScopedRoomContext"; +import { useMatrixClientContext } from "../../contexts/MatrixClientContext"; +import ContentMessages from "../../ContentMessages"; +import type { TimelineRenderingType } from "../../contexts/RoomContext"; +import { chromeFileInputFix } from "../../utils/BrowserWorkarounds"; +import type { MatrixDispatcher } from "../../dispatcher/dispatcher"; +import defaultDispatcher from "../../dispatcher/dispatcher"; + +const logger = rootLogger.getChild("RoomUploadViewModel"); + +export interface RoomUploadViewSnapshot { + mayUpload: boolean; +} + +export interface RoomUploadViewActions { + initiateViaInputFiles(files: FileList | null): Promise; + initiateViaDataTransfer(dataTransfer: DataTransfer): Promise; + openUploadDialog(): void; +} + +export class RoomUploadViewModel + extends BaseViewModel> + implements RoomUploadViewActions +{ + public constructor( + private readonly room: Room, + private readonly client: MatrixClient, + private readonly timelineRenderingType: TimelineRenderingType, + private readonly dispatcher: MatrixDispatcher, + private replyToEvent: MatrixEvent | undefined, + private threadRelation: IEventRelation | undefined, + public readonly openUploadDialog: () => void, + ) { + super( + {}, + { + mayUpload: room.maySendMessage(), + }, + ); + room.on(RoomEvent.CurrentStateUpdated, this.onRoomCurrentStateUpdated); + this.disposables.track(() => { + room.off(RoomEvent.CurrentStateUpdated, this.onRoomCurrentStateUpdated); + }); + } + + private onRoomCurrentStateUpdated = (): void => { + this.snapshot.merge({ + mayUpload: this.room.maySendMessage(), + }); + }; + + public setReplyToEvent = (replyToEvent?: MatrixEvent): void => { + this.replyToEvent = replyToEvent; + }; + + public setThreadRelation = (threadRelation?: IEventRelation): void => { + this.threadRelation = threadRelation; + }; + + public initiateViaInputFiles = async (files: FileList | File[] | null): Promise => { + if (!this.checkCanUpload()) { + return; + } + const { roomId } = this.room; + logger.info("initiateViaInputFiles for", roomId); + if (!files?.length) return; + + try { + await ContentMessages.sharedInstance().sendContentListToRoom( + Array.from(files), + roomId, + this.threadRelation, + this.replyToEvent, + this.client, + this.timelineRenderingType, + ); + } catch (ex) { + logger.warn("Failed to handle file upload transfer", ex); + } + }; + + public initiateViaDataTransfer = async (dataTransfer: DataTransfer): Promise => { + if (!this.checkCanUpload()) { + return; + } + const { roomId } = this.room; + logger.info("initiateViaDataTransfer for", roomId); + if (!dataTransfer.files?.length) return; + + try { + await ContentMessages.sharedInstance().sendContentListToRoom( + Array.from(dataTransfer.files), + roomId, + this.threadRelation, + this.replyToEvent, + this.client, + this.timelineRenderingType, + ); + } catch (ex) { + logger.warn("Failed to handle drag and drop data transfer", ex); + } + }; + + private checkCanUpload(): boolean { + if (this.client.isGuest()) { + this.dispatcher.dispatch({ action: "require_registration" }); + return false; + } + return true; + } +} + +export const RoomUploadContext = createContext(null); + +export function useRoomUploadViewModel(): RoomUploadViewModel { + const ctx = useContext(RoomUploadContext); + if (!ctx) { + throw new Error("RoomFileUploadProvider is not present"); + } + return ctx; +} + +export function RoomUploadContextProvider({ + children, + threadRelation, +}: { + children: ReactNode; + threadRelation?: IEventRelation; +}): ReactNode { + const { room, timelineRenderingType, replyToEvent } = useScopedRoomContext( + "room", + "timelineRenderingType", + "replyToEvent", + ); + const client = useMatrixClientContext(); + const uploadInput = useRef(null); + + const openFilePicker = useCallback((): void => { + if (!uploadInput.current) { + throw new Error("Input not ready"); + } + uploadInput.current.click(); + }, [uploadInput]); + + const vm = useCreateAutoDisposedViewModel(() => { + if (!room) { + throw new Error("RoomUploadContextProvider must have a room"); + } + return new RoomUploadViewModel( + room, + client, + timelineRenderingType, + defaultDispatcher, + replyToEvent, + threadRelation, + openFilePicker, + ); + }); + + useEffect(() => { + vm.setReplyToEvent(replyToEvent); + }, [vm, replyToEvent]); + + useEffect(() => { + vm.setThreadRelation(threadRelation); + }, [vm, threadRelation]); + + const onInputChange: ChangeEventHandler = useCallback( + (ev) => { + void (async () => { + try { + await vm.initiateViaInputFiles(ev.target.files); + } finally { + // This is the onChange handler for a file form control, but we're + // not keeping any state, so reset the value of the form control + // to empty. + // NB. we need to set 'value': the 'files' property is immutable. + ev.target.value = ""; + } + })(); + }, + [vm], + ); + + // Note, while this logic could be largely replaced with https://developer.mozilla.org/en-US/docs/Web/API/Window/showOpenFilePicker + // it does not enjoy support across all our target platforms. + // Therefore, we use the invisible input element trick. + + return ( + + <> + {children} + + + + ); +} diff --git a/apps/web/test/test-utils/test-utils.ts b/apps/web/test/test-utils/test-utils.ts index 08fc1af63a..456a1e79b5 100644 --- a/apps/web/test/test-utils/test-utils.ts +++ b/apps/web/test/test-utils/test-utils.ts @@ -659,8 +659,8 @@ export function mkMessage({ export function mkStubRoom( roomId: string | null | undefined = null, - name: string | undefined, - client: MatrixClient | undefined, + name?: string | undefined, + client?: MatrixClient | undefined, state?: RoomState | undefined, ): Room { const stubTimeline = { diff --git a/apps/web/test/unit-tests/components/structures/FileDropTarget-test.tsx b/apps/web/test/unit-tests/components/structures/FileDropTarget-test.tsx index 20b02f9fa5..2950f66239 100644 --- a/apps/web/test/unit-tests/components/structures/FileDropTarget-test.tsx +++ b/apps/web/test/unit-tests/components/structures/FileDropTarget-test.tsx @@ -6,35 +6,62 @@ Please see LICENSE files in the repository root for full details. */ import React from "react"; -import { mocked } from "jest-mock"; import { render, fireEvent } from "jest-matrix-react"; -import { Room } from "matrix-js-sdk/src/matrix"; +import { useMockedViewModel } from "@element-hq/web-shared-components"; import FileDropTarget from "../../../../src/components/structures/FileDropTarget.tsx"; -import { stubClient } from "../../../test-utils"; +import { + RoomUploadContext, + type RoomUploadViewActions, + type RoomUploadViewModel, + type RoomUploadViewSnapshot, +} from "../../../../src/viewmodels/room/RoomUploadViewModel.tsx"; + +function FileDropTargetWrapped({ + element, + snapshot, + actions, +}: { + element: HTMLDivElement; + snapshot: RoomUploadViewSnapshot; + actions: Partial; +}) { + const mockVm = useMockedViewModel( + snapshot, + actions as RoomUploadViewActions, + ); + return ( + + + + ); +} describe("FileDropTarget", () => { - let room: Room; - beforeEach(() => { - const client = stubClient(); - room = new Room("!roomId:example.com", client, client.getUserId()!); - room.currentState.maySendMessage = jest.fn().mockReturnValue(true); - }); - it("should render nothing when idle", () => { const element = document.createElement("div"); const onFileDrop = jest.fn(); - const { asFragment } = render(); + const { asFragment } = render( + , + ); expect(asFragment()).toMatchSnapshot(); }); it("should render drop file prompt on mouse over with file if permissions allow", () => { const element = document.createElement("div"); const onFileDrop = jest.fn(); - mocked(room.currentState.maySendMessage).mockReturnValue(true); - - const { asFragment } = render(); + const { asFragment } = render( + , + ); fireEvent.dragEnter(element, { dataTransfer: { types: ["Files"], @@ -46,9 +73,13 @@ describe("FileDropTarget", () => { it("should not render drop file prompt on mouse over with file if permissions do not allow", () => { const element = document.createElement("div"); const onFileDrop = jest.fn(); - mocked(room.currentState.maySendMessage).mockReturnValue(false); - - const { asFragment } = render(); + const { asFragment } = render( + , + ); fireEvent.dragEnter(element, { dataTransfer: { types: ["Files"], diff --git a/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap b/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap index 0a6b8d1acc..d093f4da0e 100644 --- a/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap +++ b/apps/web/test/unit-tests/components/structures/__snapshots__/RoomView-test.tsx.snap @@ -270,6 +270,12 @@ exports[`RoomView for a local room in state ERROR should match the snapshot 1`]
+ `; @@ -638,16 +644,17 @@ exports[`RoomView for a local room in state NEW should match the snapshot 1`] = /> - + `; @@ -1010,16 +1017,17 @@ exports[`RoomView for a local room in state NEW that is encrypted should match t /> - + `; @@ -1320,6 +1328,12 @@ exports[`RoomView should hide the composer when hideComposer=true 1`] = ` /> + @@ -1621,15 +1635,16 @@ exports[`RoomView should hide the header when hideHeader=true 1`] = ` /> - + @@ -2096,15 +2111,16 @@ exports[`RoomView should hide the pinned message banner when hidePinnedMessageBa /> - + @@ -2571,15 +2587,16 @@ exports[`RoomView should hide the right panel when hideRightPanel=true 1`] = ` /> - + @@ -2794,6 +2811,12 @@ exports[`RoomView should not display the timeline when the room encryption is lo /> + @@ -3288,15 +3311,16 @@ exports[`RoomView should not display the timeline when the room encryption is lo /> - + @@ -3844,15 +3868,16 @@ exports[`RoomView video rooms should render joined video room view 1`] = ` /> - +
diff --git a/apps/web/test/unit-tests/components/views/rooms/MessageComposer-test.tsx b/apps/web/test/unit-tests/components/views/rooms/MessageComposer-test.tsx index bfd9c88448..078b8c97c2 100644 --- a/apps/web/test/unit-tests/components/views/rooms/MessageComposer-test.tsx +++ b/apps/web/test/unit-tests/components/views/rooms/MessageComposer-test.tsx @@ -36,6 +36,10 @@ import UIStore, { UI_EVENTS } from "../../../../../src/stores/UIStore"; import { Action } from "../../../../../src/dispatcher/actions"; import { ScopedRoomContextProvider } from "../../../../../src/contexts/ScopedRoomContext.tsx"; import type { RoomContextType } from "../../../../../src/contexts/RoomContext.ts"; +import { + RoomUploadContext, + type RoomUploadViewModel, +} from "../../../../../src/viewmodels/room/RoomUploadViewModel.tsx"; const openStickerPicker = async (): Promise => { await userEvent.click(screen.getByLabelText("More options")); @@ -469,7 +473,9 @@ function wrapAndRender( const getRawComponent = (props = {}, context = roomContext, client = mockClient) => ( - + + + ); diff --git a/apps/web/test/unit-tests/components/views/rooms/MessageComposerButtons-test.tsx b/apps/web/test/unit-tests/components/views/rooms/MessageComposerButtons-test.tsx index 58a58185d0..0f29c546ec 100644 --- a/apps/web/test/unit-tests/components/views/rooms/MessageComposerButtons-test.tsx +++ b/apps/web/test/unit-tests/components/views/rooms/MessageComposerButtons-test.tsx @@ -14,7 +14,8 @@ import { createTestClient, getRoomContext, mkStubRoom } from "../../../../test-u import { MatrixClientPeg } from "../../../../../src/MatrixClientPeg"; import MessageComposerButtons from "../../../../../src/components/views/rooms/MessageComposerButtons"; import { ScopedRoomContextProvider } from "../../../../../src/contexts/ScopedRoomContext.tsx"; -import type { RoomContextType } from "../../../../../src/contexts/RoomContext.ts"; +import { type RoomContextType } from "../../../../../src/contexts/RoomContext.ts"; +import { RoomUploadContextProvider } from "../../../../../src/viewmodels/room/RoomUploadViewModel.tsx"; describe("MessageComposerButtons", () => { // @ts-ignore - we're deliberately not implementing the whole interface here, but @@ -54,7 +55,9 @@ describe("MessageComposerButtons", () => { return render( - {component} + + {component} + , ); } diff --git a/apps/web/test/unit-tests/components/views/rooms/SendMessageComposer-test.tsx b/apps/web/test/unit-tests/components/views/rooms/SendMessageComposer-test.tsx index c6e5109406..2d616027ff 100644 --- a/apps/web/test/unit-tests/components/views/rooms/SendMessageComposer-test.tsx +++ b/apps/web/test/unit-tests/components/views/rooms/SendMessageComposer-test.tsx @@ -31,6 +31,7 @@ import { doMaybeLocalRoomAction } from "../../../../../src/utils/local-room"; import { addTextToComposer } from "../../../../test-utils/composer"; import { ScopedRoomContextProvider } from "../../../../../src/contexts/ScopedRoomContext.tsx"; import { SdkContextClass } from "../../../../../src/contexts/SDKContext.ts"; +import { RoomUploadContextProvider } from "../../../../../src/viewmodels/room/RoomUploadViewModel.tsx"; jest.mock("../../../../../src/utils/local-room", () => ({ doMaybeLocalRoomAction: jest.fn(), @@ -187,8 +188,10 @@ describe("", () => { }; const getRawComponent = (props = {}, roomContext = defaultRoomContext, client = mockClient) => ( - - + + + + ); @@ -435,7 +438,11 @@ describe("", () => { const { container } = render( - + + + + + , ); diff --git a/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/EditWysiwygComposer-test.tsx b/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/EditWysiwygComposer-test.tsx index 3293829686..fd47666269 100644 --- a/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/EditWysiwygComposer-test.tsx +++ b/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/EditWysiwygComposer-test.tsx @@ -27,6 +27,7 @@ import { type ActionPayload } from "../../../../../../src/dispatcher/payloads"; import * as EmojiButton from "../../../../../../src/components/views/rooms/EmojiButton"; import { createMocks } from "./utils"; import { ScopedRoomContextProvider } from "../../../../../../src/contexts/ScopedRoomContext.tsx"; +import { RoomUploadContextProvider } from "../../../../../../src/viewmodels/room/RoomUploadViewModel.tsx"; beforeAll(initOnce, 10000); @@ -46,7 +47,9 @@ describe("EditWysiwygComposer", () => { return render( - + + + , ); @@ -62,7 +65,9 @@ describe("EditWysiwygComposer", () => { rerender( - + + + , ); @@ -273,7 +278,9 @@ describe("EditWysiwygComposer", () => { render( - + + + , diff --git a/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/SendWysiwygComposer-test.tsx b/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/SendWysiwygComposer-test.tsx index 528615939a..0116c6e8e3 100644 --- a/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/SendWysiwygComposer-test.tsx +++ b/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/SendWysiwygComposer-test.tsx @@ -25,6 +25,7 @@ import { setSelection } from "../../../../../../src/components/views/rooms/wysiw import { createMocks } from "./utils"; import { ScopedRoomContextProvider } from "../../../../../../src/contexts/ScopedRoomContext.tsx"; import { E2EStatus } from "../../../../../../src/utils/ShieldUtils.ts"; +import { RoomUploadContextProvider } from "../../../../../../src/viewmodels/room/RoomUploadViewModel.tsx"; jest.mock("../../../../../../src/components/views/rooms/EmojiButton", () => ({ EmojiButton: ({ addEmoji }: { addEmoji: (emoji: string) => void }) => { @@ -77,15 +78,17 @@ describe("SendWysiwygComposer", () => { return render( - + + + , ); diff --git a/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/components/WysiwygComposer-test.tsx b/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/components/WysiwygComposer-test.tsx index ce4eb8634f..0a98d04969 100644 --- a/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/components/WysiwygComposer-test.tsx +++ b/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/components/WysiwygComposer-test.tsx @@ -33,6 +33,7 @@ import type AutocompleteProvider from "../../../../../../../src/autocomplete/Aut import * as Permalinks from "../../../../../../../src/utils/permalinks/Permalinks"; import { type PermalinkParts } from "../../../../../../../src/utils/permalinks/PermalinkConstructor"; import { ScopedRoomContextProvider } from "../../../../../../../src/contexts/ScopedRoomContext.tsx"; +import { RoomUploadContextProvider } from "../../../../../../../src/viewmodels/room/RoomUploadViewModel.tsx"; beforeAll(initOnce, 10000); @@ -42,12 +43,14 @@ describe("WysiwygComposer", () => { return render( - + + + , ); @@ -561,19 +564,21 @@ describe("WysiwygComposer", () => { return render( - - - + + + + + , ); diff --git a/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/hooks/utils-test.tsx b/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/hooks/utils-test.tsx index 3627513c20..ff8c622426 100644 --- a/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/hooks/utils-test.tsx +++ b/apps/web/test/unit-tests/components/views/rooms/wysiwyg_composer/hooks/utils-test.tsx @@ -5,29 +5,21 @@ Copyright 2023 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE files in the repository root for full details. */ -import { type IEventRelation, type MatrixEvent } from "matrix-js-sdk/src/matrix"; import { waitFor } from "jest-matrix-react"; import fetchMock from "@fetch-mock/jest"; -import { TimelineRenderingType } from "../../../../../../../src/contexts/RoomContext"; -import { mkStubRoom, stubClient } from "../../../../../../test-utils"; -import ContentMessages from "../../../../../../../src/ContentMessages"; -import { type IRoomState } from "../../../../../../../src/components/structures/RoomView"; import { handleClipboardEvent, isEventToHandleAsClipboardEvent, } from "../../../../../../../src/components/views/rooms/wysiwyg_composer/hooks/utils"; +import type { RoomUploadViewModel } from "../../../../../../../src/viewmodels/room/RoomUploadViewModel"; +import type { MockedObject } from "jest-mock"; -const mockClient = stubClient(); -const mockRoom = mkStubRoom("mock room", "mock room", mockClient); -const mockRoomState = { - room: mockRoom, - timelineRenderingType: TimelineRenderingType.Room, - replyToEvent: {} as unknown as MatrixEvent, -} as unknown as IRoomState; +const mockUploadVM = { + initiateViaDataTransfer: jest.fn().mockResolvedValue(undefined), + initiateViaInputFiles: jest.fn().mockResolvedValue(undefined), +} as Partial as MockedObject; -const sendContentListToRoomSpy = jest.spyOn(ContentMessages.sharedInstance(), "sendContentListToRoom"); -const sendContentToRoomSpy = jest.spyOn(ContentMessages.sharedInstance(), "sendContentToRoom"); const logSpy = jest.spyOn(console, "log").mockImplementation(() => {}); describe("handleClipboardEvent", () => { @@ -45,29 +37,16 @@ describe("handleClipboardEvent", () => { it("returns false if it is not a paste event", () => { const originalEvent = createMockClipboardEvent({ type: "copy" }); - const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockRoomState, mockClient); - + const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockUploadVM); expect(output).toBe(false); + expect(mockUploadVM.initiateViaDataTransfer).not.toHaveBeenCalled(); }); it("returns false if clipboard data is null", () => { const originalEvent = createMockClipboardEvent({ type: "paste", clipboardData: null }); - const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockRoomState, mockClient); - - expect(output).toBe(false); - }); - - it("returns false if room is undefined", () => { - const originalEvent = createMockClipboardEvent({ type: "paste" }); - const { room, ...roomStateWithoutRoom } = mockRoomState; - const output = handleClipboardEvent( - originalEvent, - originalEvent.clipboardData, - roomStateWithoutRoom, - mockClient, - ); - + const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockUploadVM); expect(output).toBe(false); + expect(mockUploadVM.initiateViaDataTransfer).not.toHaveBeenCalled(); }); it("returns false if room clipboardData files and types are empty", () => { @@ -75,8 +54,9 @@ describe("handleClipboardEvent", () => { type: "paste", clipboardData: { files: [], types: [] }, }); - const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockRoomState, mockClient); + const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockUploadVM); expect(output).toBe(false); + expect(mockUploadVM.initiateViaDataTransfer).not.toHaveBeenCalled(); }); it("handles event and calls sendContentListToRoom when data files are present", () => { @@ -84,65 +64,23 @@ describe("handleClipboardEvent", () => { type: "paste", clipboardData: { files: ["something here"], types: [] }, }); - const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockRoomState, mockClient); - const mockReplyToEvent = {} as unknown as MatrixEvent; - expect(sendContentListToRoomSpy).toHaveBeenCalledTimes(1); - expect(sendContentListToRoomSpy).toHaveBeenCalledWith( - originalEvent.clipboardData?.files, - mockRoom.roomId, - undefined, // this is the event relation, an optional arg - mockReplyToEvent, - mockClient, - mockRoomState.timelineRenderingType, - ); - expect(output).toBe(true); - }); - - it("calls sendContentListToRoom with eventRelation when present", () => { - const originalEvent = createMockClipboardEvent({ - type: "paste", - clipboardData: { files: ["something here"], types: [] }, - }); - const mockEventRelation = {} as unknown as IEventRelation; - const mockReplyToEvent = {} as unknown as MatrixEvent; - const output = handleClipboardEvent( - originalEvent, - originalEvent.clipboardData, - mockRoomState, - mockClient, - mockEventRelation, - ); - - expect(sendContentListToRoomSpy).toHaveBeenCalledTimes(1); - expect(sendContentListToRoomSpy).toHaveBeenCalledWith( - originalEvent.clipboardData?.files, - mockRoom.roomId, - mockEventRelation, // this is the event relation, an optional arg - mockReplyToEvent, - mockClient, - mockRoomState.timelineRenderingType, - ); + const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockUploadVM); + expect(mockUploadVM.initiateViaDataTransfer).toHaveBeenCalledTimes(1); + expect(mockUploadVM.initiateViaDataTransfer).toHaveBeenCalledWith(originalEvent.clipboardData); expect(output).toBe(true); }); it("calls the error handler when sentContentListToRoom errors", async () => { const mockErrorMessage = "something went wrong"; - sendContentListToRoomSpy.mockRejectedValueOnce(new Error(mockErrorMessage)); + mockUploadVM.initiateViaDataTransfer.mockRejectedValueOnce(new Error(mockErrorMessage)); const originalEvent = createMockClipboardEvent({ type: "paste", clipboardData: { files: ["something here"], types: [] }, }); - const mockEventRelation = {} as unknown as IEventRelation; - const output = handleClipboardEvent( - originalEvent, - originalEvent.clipboardData, - mockRoomState, - mockClient, - mockEventRelation, - ); + const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockUploadVM); - expect(sendContentListToRoomSpy).toHaveBeenCalledTimes(1); + expect(mockUploadVM.initiateViaDataTransfer).toHaveBeenCalledTimes(1); await waitFor(() => { expect(logSpy).toHaveBeenCalledWith(mockErrorMessage); }); @@ -158,15 +96,7 @@ describe("handleClipboardEvent", () => { getData: jest.fn().mockReturnValue("
invalid html"), }, }); - const mockEventRelation = {} as unknown as IEventRelation; - const output = handleClipboardEvent( - originalEvent, - originalEvent.clipboardData, - mockRoomState, - mockClient, - mockEventRelation, - ); - + const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockUploadVM); expect(logSpy).toHaveBeenCalledWith("Failed to handle pasted content as Safari inserted content"); expect(output).toBe(false); }); @@ -180,10 +110,10 @@ describe("handleClipboardEvent", () => { getData: jest.fn().mockReturnValue(``), }, }); - const mockEventRelation = {} as unknown as IEventRelation; - handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockRoomState, mockClient, mockEventRelation); + const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockUploadVM); expect(fetchMock).toHaveFetchedTimes(1, "blob:"); + expect(output).toBe(true); }); it("calls error handler when fetch fails", async () => { @@ -197,14 +127,7 @@ describe("handleClipboardEvent", () => { getData: jest.fn().mockReturnValue(``), }, }); - const mockEventRelation = {} as unknown as IEventRelation; - const output = handleClipboardEvent( - originalEvent, - originalEvent.clipboardData, - mockRoomState, - mockClient, - mockEventRelation, - ); + const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockUploadVM); await waitFor(() => { expect(logSpy).toHaveBeenCalledWith(mockErrorMessage); @@ -212,7 +135,7 @@ describe("handleClipboardEvent", () => { expect(output).toBe(true); }); - it("calls sendContentToRoom when parsing is successful", async () => { + it("calls initiateViaInputFiles when parsing is successful", async () => { fetchMock.get("test/file", { blob: () => { return Promise.resolve({ type: "image/jpeg" } as Blob); @@ -227,23 +150,11 @@ describe("handleClipboardEvent", () => { getData: jest.fn().mockReturnValue(``), }, }); - const mockEventRelation = {} as unknown as IEventRelation; - const output = handleClipboardEvent( - originalEvent, - originalEvent.clipboardData, - mockRoomState, - mockClient, - mockEventRelation, - ); + const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockUploadVM); await waitFor(() => { - expect(sendContentToRoomSpy).toHaveBeenCalledWith( - expect.any(File), - mockRoom.roomId, - mockEventRelation, - mockClient, - mockRoomState.replyToEvent, - ); + expect(mockUploadVM.initiateViaInputFiles).toHaveBeenCalledTimes(1); + expect(mockUploadVM.initiateViaInputFiles).toHaveBeenCalledWith([expect.any(File)]); }); expect(output).toBe(true); }); @@ -254,8 +165,8 @@ describe("handleClipboardEvent", () => { return Promise.resolve({ type: "image/jpeg" } as Blob); }, }); - const mockErrorMessage = "sendContentToRoom failed"; - sendContentToRoomSpy.mockRejectedValueOnce(mockErrorMessage); + const mockErrorMessage = "initiateViaInputFiles failed"; + mockUploadVM.initiateViaInputFiles.mockRejectedValueOnce(mockErrorMessage); const originalEvent = createMockClipboardEvent({ type: "paste", @@ -265,14 +176,7 @@ describe("handleClipboardEvent", () => { getData: jest.fn().mockReturnValue(``), }, }); - const mockEventRelation = {} as unknown as IEventRelation; - const output = handleClipboardEvent( - originalEvent, - originalEvent.clipboardData, - mockRoomState, - mockClient, - mockEventRelation, - ); + const output = handleClipboardEvent(originalEvent, originalEvent.clipboardData, mockUploadVM); await waitFor(() => { expect(logSpy).toHaveBeenCalledWith(mockErrorMessage); diff --git a/apps/web/test/viewmodels/room/RoomUploadViewModel-test.ts b/apps/web/test/viewmodels/room/RoomUploadViewModel-test.ts new file mode 100644 index 0000000000..837eaacc62 --- /dev/null +++ b/apps/web/test/viewmodels/room/RoomUploadViewModel-test.ts @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { type IEventRelation, type MatrixClient, type Room, RoomEvent } from "matrix-js-sdk/src/matrix"; + +import type { MockedObject } from "jest-mock"; +import { RoomUploadViewModel } from "../../../src/viewmodels/room/RoomUploadViewModel"; +import { mkEvent, mkStubRoom, stubClient } from "../../test-utils"; +import { TimelineRenderingType } from "../../../src/contexts/RoomContext"; +import type { MatrixDispatcher } from "../../../src/dispatcher/dispatcher"; +import ContentMessages from "../../../src/ContentMessages"; +const sendContentListToRoomSpy = jest.spyOn(ContentMessages.sharedInstance(), "sendContentListToRoom"); + +describe("RoomUploadViewModel", () => { + let client: MockedObject; + let room: MockedObject; + let dis: MockedObject; + beforeEach(() => { + jest.clearAllMocks(); + client = stubClient() as MockedObject; + room = mkStubRoom("!room", undefined, undefined) as MockedObject; + dis = { + dispatch: jest.fn(), + } as Partial as MockedObject; + }); + afterAll(() => { + jest.restoreAllMocks(); + }); + + it.each([true, false])("handles state of mayUpload when room.maySendMessage = %s", (maySendMessage) => { + room.maySendMessage.mockReturnValue(maySendMessage); + const vm = new RoomUploadViewModel( + room, + client, + TimelineRenderingType.Room, + dis, + undefined, + undefined, + () => {}, + ); + expect(vm.getSnapshot().mayUpload).toEqual(maySendMessage); + room.maySendMessage.mockReturnValue(!maySendMessage); + room.emit(RoomEvent.CurrentStateUpdated, room, null as any, null as any); + expect(vm.getSnapshot().mayUpload).toEqual(!maySendMessage); + }); + + describe("uploads via input", () => { + it("redirected if guest", async () => { + client.isGuest.mockReturnValue(true); + const vm = new RoomUploadViewModel( + room, + client, + TimelineRenderingType.Room, + dis, + undefined, + undefined, + () => {}, + ); + await vm.initiateViaInputFiles([] as unknown as FileList); + expect(dis.dispatch).toHaveBeenCalledWith({ action: "require_registration" }); + }); + it("skips empty files", async () => { + const vm = new RoomUploadViewModel( + room, + client, + TimelineRenderingType.Room, + dis, + undefined, + undefined, + () => {}, + ); + await vm.initiateViaInputFiles([] as unknown as FileList); + expect(dis.dispatch).not.toHaveBeenCalled(); + }); + it("uploads with correct context", async () => { + sendContentListToRoomSpy.mockResolvedValue(undefined); + const vm = new RoomUploadViewModel( + room, + client, + TimelineRenderingType.Thread, + dis, + undefined, + undefined, + () => {}, + ); + const replyEvent = mkEvent({ event: true, type: "anything", user: "anyone", content: {} }); + vm.setReplyToEvent(replyEvent); + const threadRelation: IEventRelation = { key: "foo" }; + vm.setThreadRelation(threadRelation); + const fileList = [ + { + name: "fake.png", + size: 1024, + type: "image/png", + }, + ] as unknown as FileList; + await vm.initiateViaInputFiles(fileList); + expect(sendContentListToRoomSpy).toHaveBeenCalledWith( + fileList, + room.roomId, + threadRelation, + replyEvent, + client, + TimelineRenderingType.Thread, + ); + }); + }); + + describe("uploads via data transfer", () => { + it("redirected if guest", async () => { + client.isGuest.mockReturnValue(true); + const vm = new RoomUploadViewModel( + room, + client, + TimelineRenderingType.Room, + dis, + undefined, + undefined, + () => {}, + ); + await vm.initiateViaDataTransfer({} as DataTransfer); + expect(dis.dispatch).toHaveBeenCalledWith({ action: "require_registration" }); + }); + it("skips empty files", async () => { + const vm = new RoomUploadViewModel( + room, + client, + TimelineRenderingType.Room, + dis, + undefined, + undefined, + () => {}, + ); + await vm.initiateViaDataTransfer({ files: [] as unknown as FileList } as DataTransfer); + expect(dis.dispatch).not.toHaveBeenCalled(); + }); + it("uploads with correct context", async () => { + sendContentListToRoomSpy.mockResolvedValue(undefined); + const vm = new RoomUploadViewModel( + room, + client, + TimelineRenderingType.Thread, + dis, + undefined, + undefined, + () => {}, + ); + const replyEvent = mkEvent({ event: true, type: "anything", user: "anyone", content: {} }); + vm.setReplyToEvent(replyEvent); + const threadRelation: IEventRelation = { key: "foo" }; + vm.setThreadRelation(threadRelation); + const files = [ + { + name: "fake.png", + size: 1024, + type: "image/png", + }, + ] as unknown as FileList; + await vm.initiateViaDataTransfer({ files } as DataTransfer); + expect(sendContentListToRoomSpy).toHaveBeenCalledWith( + files, + room.roomId, + threadRelation, + replyEvent, + client, + TimelineRenderingType.Thread, + ); + }); + }); +}); From 0f723390a9bc888c4bc462e3acab9f409c1e26b4 Mon Sep 17 00:00:00 2001 From: rbondesson Date: Tue, 12 May 2026 14:28:00 +0200 Subject: [PATCH 6/9] Refactor EventTile using the MVVM pattern - #1 (#33463) * Add EventTile layout attribute tests * Add EventTile timestamp tests * Add EventTile sender and avatar tests * Add EventTile read receipt tests * Add EventTile reactions and footer tests * Add EventTile action bar tests * Add EventTile reply chain tests * Add EventTile highlight exclusion tests * Add EventTile action bar focus tests * Add EventTile context menu characterization tests * Add EventTile rendering attribute tests * Add EventTile search thread info tests * Add EventTile reaction update tests * Add EventTile message type class tests * Fix flakyness in root attribute tests * Fix Sonar issues * Fix additional Sonar issues --- .../components/views/rooms/EventTile-test.tsx | 704 +++++++++++++++++- 1 file changed, 697 insertions(+), 7 deletions(-) diff --git a/apps/web/test/unit-tests/components/views/rooms/EventTile-test.tsx b/apps/web/test/unit-tests/components/views/rooms/EventTile-test.tsx index 1d2d0ac657..b0f0c0d346 100644 --- a/apps/web/test/unit-tests/components/views/rooms/EventTile-test.tsx +++ b/apps/web/test/unit-tests/components/views/rooms/EventTile-test.tsx @@ -15,6 +15,8 @@ import { type IEventDecryptionResult, type MatrixClient, MatrixEvent, + MatrixEventEvent, + MsgType, NotificationCountType, PendingEventOrdering, Room, @@ -44,6 +46,59 @@ import PinningUtils from "../../../../../src/utils/PinningUtils"; import { Layout } from "../../../../../src/settings/enums/Layout"; import { ScopedRoomContextProvider } from "../../../../../src/contexts/ScopedRoomContext.tsx"; import SettingsStore from "../../../../../src/settings/SettingsStore"; +import { RoomPermalinkCreator } from "../../../../../src/utils/permalinks/Permalinks"; +import PlatformPeg from "../../../../../src/PlatformPeg"; + +function getTile(container: HTMLElement): HTMLElement { + const tile = container.querySelector(".mx_EventTile"); + expect(tile).not.toBeNull(); + return tile as HTMLElement; +} + +function getLine(container: HTMLElement): HTMLElement { + const line = container.querySelector(".mx_EventTile_line"); + expect(line).not.toBeNull(); + return line as HTMLElement; +} + +function expectTileClass(container: HTMLElement, className: string): void { + expect(getTile(container)).toHaveClass(className); +} + +function makeReplyEvent(roomId: string): MatrixEvent { + const parentEvent = mkMessage({ + room: roomId, + user: "@alice:example.org", + msg: "Original message", + event: true, + }); + + return mkMessage({ + room: roomId, + user: "@bob:example.org", + msg: "Reply message", + event: true, + relatesTo: { + "m.in_reply_to": { + event_id: parentEvent.getId(), + }, + }, + }); +} + +function makeThreadReplyEvent(roomId: string): MatrixEvent { + return mkMessage({ + room: roomId, + user: "@alice:example.org", + msg: "Hello world!", + ts: 1234, + event: true, + relatesTo: { + rel_type: "m.thread", + event_id: "$thread-root", + }, + }); +} describe("EventTile", () => { const ROOM_ID = "!roomId:example.org"; @@ -83,11 +138,35 @@ describe("EventTile", () => { return render(); } + function makeOwnMessage(overrides: Partial[0]> = {}): MatrixEvent { + return mkMessage({ + ...overrides, + room: overrides.room ?? room.roomId, + user: overrides.user ?? client.getSafeUserId(), + msg: overrides.msg ?? "Hello world!", + event: overrides.event ?? true, + }); + } + + function makeTimestampedMessage(overrides: Partial[0]> = {}): MatrixEvent { + return mkMessage({ + ...overrides, + room: overrides.room ?? room.roomId, + user: overrides.user ?? "@alice:example.org", + msg: overrides.msg ?? "Hello world!", + ts: overrides.ts ?? 1234, + event: overrides.event ?? true, + }); + } + beforeEach(() => { jest.clearAllMocks(); stubClient(); client = MatrixClientPeg.safeGet(); + jest.spyOn(DMRoomMap, "shared").mockReturnValue({ + getUserIdForRoomId: jest.fn().mockReturnValue(undefined), + } as unknown as DMRoomMap); room = new Room(ROOM_ID, client, client.getSafeUserId(), { pendingEventOrdering: PendingEventOrdering.Detached, @@ -110,6 +189,550 @@ describe("EventTile", () => { jest.restoreAllMocks(); }); + describe("layout and tile attributes", () => { + it.each([ + ["last", { last: true }, "mx_EventTile_last"], + ["lastInSection", { lastInSection: true }, "mx_EventTile_lastInSection"], + ["contextual", { contextual: true }, "mx_EventTile_contextual"], + ["isSelectedEvent", { isSelectedEvent: true }, "mx_EventTile_selected"], + ["hideSender", { hideSender: true }, "mx_EventTile_noSender"], + ["isTwelveHour", { isTwelveHour: true }, "mx_EventTile_12hr"], + ] as const)("adds the %s class", (_propName, overrides, className) => { + const { container } = getComponent(overrides); + + expectTileClass(container, className); + }); + + it("marks events from other users as non-self events", () => { + const { container } = getComponent(); + + expect(getTile(container)).toHaveAttribute("data-self", "false"); + }); + + it("marks events from the current user as self events", () => { + const ownEvent = makeOwnMessage(); + const { container } = getComponent({ mxEvent: ownEvent }); + + expect(getTile(container)).toHaveAttribute("data-self", "true"); + }); + + it("exposes the rendered event id in room timelines", () => { + const { container } = getComponent(); + + expect(getTile(container)).toHaveAttribute("data-event-id", mxEvent.getId()); + }); + + it("renders the event line inside the tile", () => { + const { container } = getComponent(); + + expect(getTile(container)).toContainElement(getLine(container)); + }); + + it("does not expose a scroll token for local echo events", () => { + const localEcho = makeOwnMessage(); + localEcho.setStatus(EventStatus.SENDING); + const { container } = getComponent({ mxEvent: localEcho, eventSendStatus: EventStatus.SENDING }); + + expect(getTile(container)).not.toHaveAttribute("data-scroll-tokens"); + }); + }); + + describe("rendering root attributes", () => { + type RootAttribute = + | "data-scroll-tokens" + | "data-layout" + | "data-shape" + | "data-self" + | "data-event-id" + | "data-has-reply"; + + it.each([ + [ + TimelineRenderingType.Room, + ["data-scroll-tokens", "data-layout", "data-self", "data-event-id", "data-has-reply"], + ["data-shape"], + ], + [ + TimelineRenderingType.Thread, + ["data-scroll-tokens", "data-layout", "data-self", "data-event-id", "data-has-reply"], + ["data-shape"], + ], + [ + TimelineRenderingType.ThreadsList, + ["data-scroll-tokens", "data-layout", "data-shape", "data-self", "data-has-reply"], + ["data-event-id"], + ], + [ + TimelineRenderingType.Notification, + ["data-scroll-tokens", "data-layout", "data-shape", "data-self", "data-has-reply"], + ["data-event-id"], + ], + [ + TimelineRenderingType.File, + ["data-scroll-tokens"], + ["data-layout", "data-shape", "data-self", "data-event-id", "data-has-reply"], + ], + ] as const)( + "sets root attributes for %s rendering", + (renderingType, expectedPresentAttributes, expectedAbsentAttributes) => { + const { container } = getComponent({}, renderingType); + const tile = getTile(container); + const expectedValues: Record = { + "data-scroll-tokens": mxEvent.getId()!, + "data-layout": Layout.Group, + "data-shape": renderingType, + "data-self": "false", + "data-event-id": mxEvent.getId()!, + "data-has-reply": "false", + }; + + for (const attribute of expectedPresentAttributes) { + expect(tile).toHaveAttribute(attribute, expectedValues[attribute]); + } + + for (const attribute of expectedAbsentAttributes) { + expect(tile).not.toHaveAttribute(attribute); + } + }, + ); + }); + + describe("message type classes", () => { + it("adds media and image classes for image messages", () => { + const imageEvent = mkEvent({ + event: true, + type: EventType.RoomMessage, + room: room.roomId, + user: "@alice:example.org", + content: { + msgtype: MsgType.Image, + body: "image.png", + url: "mxc://example.org/image", + info: { + mimetype: "image/png", + w: 100, + h: 100, + size: 1234, + }, + }, + }); + const { container } = getComponent({ mxEvent: imageEvent }); + + expect(getLine(container)).toHaveClass("mx_EventTile_mediaLine"); + expect(getLine(container)).toHaveClass("mx_EventTile_image"); + }); + + it("adds emote classes for emote messages", () => { + const emoteEvent = mkEvent({ + event: true, + type: EventType.RoomMessage, + room: room.roomId, + user: "@alice:example.org", + content: { + msgtype: MsgType.Emote, + body: "waves", + }, + }); + const { container } = getComponent({ mxEvent: emoteEvent }); + + expect(getTile(container)).toHaveClass("mx_EventTile_emote"); + expect(getLine(container)).toHaveClass("mx_EventTile_emote"); + }); + + it("adds media and sticker classes for sticker events", () => { + const stickerEvent = mkEvent({ + event: true, + type: EventType.Sticker, + room: room.roomId, + user: "@alice:example.org", + content: { + body: "sticker.png", + url: "mxc://example.org/sticker", + info: { + mimetype: "image/png", + w: 100, + h: 100, + size: 1234, + }, + }, + }); + const { container } = getComponent({ mxEvent: stickerEvent }); + + expect(getLine(container)).toHaveClass("mx_EventTile_mediaLine"); + expect(getLine(container)).toHaveClass("mx_EventTile_sticker"); + }); + }); + + describe("timestamps", () => { + beforeEach(() => { + mxEvent = makeTimestampedMessage(); + }); + + it("hides the timestamp by default in room timelines", () => { + const { container } = getComponent(); + + expect(container.querySelector(".mx_MessageTimestamp")).toBeNull(); + }); + + it("shows the timestamp when the tile is hovered", () => { + const { container } = getComponent(); + + expect(container.querySelector(".mx_MessageTimestamp")).toBeNull(); + + fireEvent.mouseEnter(getTile(container)); + + expect(container.querySelector(".mx_MessageTimestamp")).not.toBeNull(); + }); + + it("shows the timestamp when focus is within the tile", () => { + const { container } = getComponent(); + + expect(container.querySelector(".mx_MessageTimestamp")).toBeNull(); + + fireEvent.focus(getTile(container)); + + expect(container.querySelector(".mx_MessageTimestamp")).not.toBeNull(); + }); + + it("shows the timestamp for the last event", () => { + const { container } = getComponent({ last: true }); + + expect(container.querySelector(".mx_MessageTimestamp")).not.toBeNull(); + }); + + it("shows the timestamp when timestamps are always shown", () => { + const { container } = getComponent({ alwaysShowTimestamps: true }); + + expect(container.querySelector(".mx_MessageTimestamp")).not.toBeNull(); + }); + + it("hides the timestamp when timestamps are disabled for the tile", () => { + const { container } = getComponent({ alwaysShowTimestamps: true, hideTimestamp: true }); + + expect(container.querySelector(".mx_MessageTimestamp")).toBeNull(); + }); + + it("renders a placeholder timestamp in IRC layout", () => { + const { container } = getComponent({ layout: Layout.IRC }); + const timestamp = container.querySelector(".mx_MessageTimestamp"); + + expect(timestamp).not.toBeNull(); + expect(timestamp?.tagName).toBe("SPAN"); + }); + + it("dispatches a room view when the linked timestamp is clicked", () => { + jest.spyOn(dis, "dispatch").mockImplementation(() => {}); + const permalinkCreator = new RoomPermalinkCreator(room); + const { container } = getComponent({ alwaysShowTimestamps: true, permalinkCreator }); + const timestamp = container.querySelector("a.mx_MessageTimestamp"); + + expect(timestamp).not.toBeNull(); + fireEvent.click(timestamp!); + + expect(dis.dispatch).toHaveBeenCalledWith( + expect.objectContaining({ + action: Action.ViewRoom, + event_id: mxEvent.getId(), + highlighted: true, + room_id: room.roomId, + }), + ); + }); + }); + + describe("sender and avatar rendering", () => { + it("shows sender and avatar in room timelines", () => { + const { container } = getComponent(); + + expect(container.querySelector(".mx_DisambiguatedProfile")).not.toBeNull(); + expect(container.querySelector(".mx_EventTile_avatar")).not.toBeNull(); + }); + + it("hides sender and avatar for continuation events in room timelines", () => { + const { container } = getComponent({ continuation: true }); + + expectTileClass(container, "mx_EventTile_continuation"); + expect(container.querySelector(".mx_DisambiguatedProfile")).toBeNull(); + expect(container.querySelector(".mx_EventTile_avatar")).toBeNull(); + }); + + it("hides sender but keeps avatar when sender display is disabled", () => { + const { container } = getComponent({ hideSender: true }); + + expectTileClass(container, "mx_EventTile_noSender"); + expect(container.querySelector(".mx_DisambiguatedProfile")).toBeNull(); + expect(container.querySelector(".mx_EventTile_avatar")).not.toBeNull(); + }); + + it("renders sender details as a permalink in file timelines", () => { + const { container } = getComponent({}, TimelineRenderingType.File); + const senderDetailsLink = container.querySelector(".mx_EventTile_senderDetailsLink"); + + expect(senderDetailsLink).not.toBeNull(); + expect(senderDetailsLink).toContainElement(container.querySelector(".mx_DisambiguatedProfile")); + expect(senderDetailsLink).toContainElement(container.querySelector(".mx_EventTile_avatar")); + }); + + it("renders sender details in thread timelines", () => { + const { container } = getComponent({}, TimelineRenderingType.Thread); + const senderDetails = container.querySelector(".mx_EventTile_senderDetails"); + + expect(senderDetails).not.toBeNull(); + expect(senderDetails).toContainElement(container.querySelector(".mx_DisambiguatedProfile")); + expect(senderDetails).toContainElement(container.querySelector(".mx_EventTile_avatar")); + }); + }); + + describe("read receipt option", () => { + it("shows a sent receipt for the current user's last successful event", () => { + const ownEvent = makeOwnMessage(); + const { getByRole } = getComponent({ mxEvent: ownEvent, lastSuccessful: true }); + + expect(getByRole("status")).toHaveAccessibleName("Your message was sent"); + }); + + it.each([ + [EventStatus.SENDING, "Sending your message…"], + [EventStatus.ENCRYPTING, "Encrypting your message…"], + [EventStatus.NOT_SENT, "Failed to send"], + ])("shows the %s receipt for the current user's pending event", (eventSendStatus, label) => { + const ownEvent = makeOwnMessage(); + ownEvent.setStatus(eventSendStatus); + const { getByRole } = getComponent({ mxEvent: ownEvent, eventSendStatus }); + + expect(getByRole("status")).toHaveAccessibleName(label); + }); + + it("does not show a sent receipt in the threads list", () => { + const ownEvent = makeOwnMessage(); + const { queryByRole } = getComponent( + { mxEvent: ownEvent, lastSuccessful: true }, + TimelineRenderingType.ThreadsList, + ); + + expect(queryByRole("status", { name: "Your message was sent" })).toBeNull(); + }); + + it("shows normal read receipts instead of the sent receipt when other users have read the event", () => { + const ownEvent = makeOwnMessage(); + const { getByRole, queryByRole } = getComponent({ + mxEvent: ownEvent, + lastSuccessful: true, + showReadReceipts: true, + readReceipts: [ + { + userId: "@bob:example.org", + roomMember: null, + ts: 1234, + }, + ], + }); + + expect(queryByRole("status", { name: "Your message was sent" })).toBeNull(); + expect(getByRole("group", { name: "Seen by 1 person" })).toBeInTheDocument(); + }); + }); + + describe("reactions and footer", () => { + it("gets annotation relations when reactions are enabled", () => { + const getRelationsForEvent = jest.fn().mockReturnValue(null); + + getComponent({ showReactions: true, getRelationsForEvent }); + + expect(getRelationsForEvent).toHaveBeenCalledWith(mxEvent.getId(), "m.annotation", "m.reaction"); + }); + + it("does not get annotation relations when reactions are disabled", () => { + const getRelationsForEvent = jest.fn().mockReturnValue(null); + + getComponent({ getRelationsForEvent }); + + expect(getRelationsForEvent).not.toHaveBeenCalled(); + }); + + it("refreshes annotation relations when reaction relations are created", () => { + const getRelationsForEvent = jest.fn().mockReturnValue(null); + getComponent({ showReactions: true, getRelationsForEvent }); + getRelationsForEvent.mockClear(); + + act(() => { + mxEvent.emit(MatrixEventEvent.RelationsCreated, "m.annotation", "m.reaction"); + }); + + expect(getRelationsForEvent).toHaveBeenCalledWith(mxEvent.getId(), "m.annotation", "m.reaction"); + }); + + it("does not refresh annotation relations for unrelated relations", () => { + const getRelationsForEvent = jest.fn().mockReturnValue(null); + getComponent({ showReactions: true, getRelationsForEvent }); + getRelationsForEvent.mockClear(); + + act(() => { + mxEvent.emit(MatrixEventEvent.RelationsCreated, "m.reference", "m.room.message"); + }); + + expect(getRelationsForEvent).not.toHaveBeenCalled(); + }); + + it("does not render reactions for redacted events", () => { + const getRelationsForEvent = jest.fn().mockReturnValue(null); + const { container } = getComponent({ showReactions: true, getRelationsForEvent, isRedacted: true }); + + expect(container.querySelector(".mx_ReactionsRow")).toBeNull(); + }); + + it("renders a footer for pinned messages", () => { + jest.spyOn(PinningUtils, "isPinned").mockReturnValue(true); + const { container } = getComponent(); + + expect(container.querySelector(".mx_EventTile_footer")).not.toBeNull(); + expect(screen.getByText("Pinned message")).toBeInTheDocument(); + }); + }); + + describe("action bar", () => { + it("does not render the message action bar by default", () => { + const { container } = getComponent(); + + expect(container.querySelector(".mx_MessageActionBar")).toBeNull(); + }); + + it("renders the message action bar when the tile is hovered", () => { + const { container } = getComponent(); + + fireEvent.mouseEnter(getTile(container)); + + expect(container.querySelector(".mx_MessageActionBar")).not.toBeNull(); + }); + + it("renders the message action bar when the tile receives keyboard focus", () => { + const matches = HTMLElement.prototype.matches; + jest.spyOn(HTMLElement.prototype, "matches").mockImplementation(function (this: HTMLElement, selector) { + if (selector === ":focus-visible") return true; + return matches.call(this, selector); + }); + const { container } = getComponent(); + + fireEvent.focus(getTile(container)); + + expect(container.querySelector(".mx_MessageActionBar")).not.toBeNull(); + }); + + it("hides the keyboard-focused message action bar when focus leaves the tile", () => { + const matches = HTMLElement.prototype.matches; + jest.spyOn(HTMLElement.prototype, "matches").mockImplementation(function (this: HTMLElement, selector) { + if (selector === ":focus-visible") return true; + return matches.call(this, selector); + }); + const { container } = getComponent(); + const tile = getTile(container); + + fireEvent.focus(tile); + expect(container.querySelector(".mx_MessageActionBar")).not.toBeNull(); + + fireEvent.blur(tile); + + expect(container.querySelector(".mx_MessageActionBar")).toBeNull(); + }); + + it("does not render the message action bar on hover when exporting", () => { + const { container } = getComponent({ forExport: true }); + + fireEvent.mouseEnter(getTile(container)); + + expect(container.querySelector(".mx_MessageActionBar")).toBeNull(); + }); + + it("does not render the message action bar on hover while editing", () => { + const { container } = getComponent({ editState: {} as EventTileProps["editState"] }); + + fireEvent.mouseEnter(getTile(container)); + + expect(container.querySelector(".mx_MessageActionBar")).toBeNull(); + }); + }); + + describe("context menu", () => { + it("renders the message context menu when the event line is right-clicked", async () => { + const { container } = getComponent(); + + fireEvent.contextMenu(getLine(container), { clientX: 1, clientY: 2 }); + + expect(await screen.findByTestId("mx_MessageContextMenu")).toBeInTheDocument(); + }); + + it("marks the tile selected when the context menu is open", async () => { + const { container } = getComponent(); + const tile = getTile(container); + + fireEvent.contextMenu(getLine(container), { clientX: 1, clientY: 2 }); + + expect(await screen.findByTestId("mx_MessageContextMenu")).toBeInTheDocument(); + expect(tile).toHaveClass("mx_EventTile_selected"); + }); + + it("shows the timestamp while the context menu is open", async () => { + mxEvent = makeTimestampedMessage(); + const { container } = getComponent(); + + expect(container.querySelector(".mx_MessageTimestamp")).toBeNull(); + + fireEvent.contextMenu(getLine(container), { clientX: 1, clientY: 2 }); + + expect(await screen.findByTestId("mx_MessageContextMenu")).toBeInTheDocument(); + expect(container.querySelector(".mx_MessageTimestamp")).not.toBeNull(); + }); + + it("does not render the message context menu while editing", () => { + const { container } = getComponent({ editState: {} as EventTileProps["editState"] }); + + expect(container.querySelector(".mx_EventTile_line")).toBeNull(); + expect(screen.queryByTestId("mx_MessageContextMenu")).toBeNull(); + }); + + it("does not override the native browser context menu for links", () => { + const { container } = getComponent(); + jest.spyOn(PlatformPeg, "get").mockReturnValue({ + allowOverridingNativeContextMenus: () => false, + } as ReturnType); + const link = document.createElement("a"); + link.href = "https://example.org/"; + getLine(container).appendChild(link); + + const event = new MouseEvent("contextmenu", { bubbles: true, cancelable: true, clientX: 1, clientY: 2 }); + link.dispatchEvent(event); + + expect(event.defaultPrevented).toBe(false); + expect(screen.queryByTestId("mx_MessageContextMenu")).toBeNull(); + }); + }); + + describe("reply chain", () => { + it("marks non-reply events as having no reply", () => { + const { container } = getComponent(); + + expect(getTile(container)).toHaveAttribute("data-has-reply", "false"); + expect(container.querySelector(".mx_ReplyChain_wrapper")).toBeNull(); + }); + + it("marks reply events as having a reply chain", () => { + const replyEvent = makeReplyEvent(room.roomId); + const { container } = getComponent({ mxEvent: replyEvent }); + + expect(getTile(container)).toHaveAttribute("data-has-reply", "true"); + expect(container.querySelector(".mx_ReplyChain_wrapper")).not.toBeNull(); + }); + + it("does not render the reply chain for redacted reply events", () => { + const replyEvent = makeReplyEvent(room.roomId); + jest.spyOn(replyEvent, "isRedacted").mockReturnValue(true); + const { container } = getComponent({ mxEvent: replyEvent }); + + expect(getTile(container)).toHaveAttribute("data-has-reply", "false"); + expect(container.querySelector(".mx_ReplyChain_wrapper")).toBeNull(); + }); + }); + describe("EventTile thread summary", () => { beforeEach(() => { jest.spyOn(client, "supportsThreads").mockReturnValue(true); @@ -150,6 +773,43 @@ describe("EventTile", () => { }); }); + describe("search thread info", () => { + it("renders search thread info for events in a thread", () => { + const threadEvent = makeThreadReplyEvent(room.roomId); + const { container } = getComponent({ mxEvent: threadEvent }, TimelineRenderingType.Search); + + expect(container.querySelector(".mx_ThreadSummary_icon")).not.toBeNull(); + expect(container.querySelector(".mx_ThreadSummary_icon")).toHaveTextContent("From a thread"); + }); + + it("renders search thread info as a link when a highlight link is provided", () => { + const threadEvent = makeThreadReplyEvent(room.roomId); + const { container } = getComponent( + { mxEvent: threadEvent, highlightLink: "https://example.org/thread" }, + TimelineRenderingType.Search, + ); + const threadInfo = container.querySelector("a.mx_ThreadSummary_icon"); + + expect(threadInfo).not.toBeNull(); + expect(threadInfo).toHaveAttribute("href", "https://example.org/thread"); + }); + + it("renders search thread info as text when no highlight link is provided", () => { + const threadEvent = makeThreadReplyEvent(room.roomId); + const { container } = getComponent({ mxEvent: threadEvent }, TimelineRenderingType.Search); + const threadInfo = container.querySelector(".mx_ThreadSummary_icon"); + + expect(threadInfo?.tagName).toBe("P"); + }); + + it("does not render search thread info outside search timelines", () => { + const threadEvent = makeThreadReplyEvent(room.roomId); + const { container } = getComponent({ mxEvent: threadEvent }, TimelineRenderingType.Room); + + expect(container.querySelector(".mx_ThreadSummary_icon")).toBeNull(); + }); + }); + describe("EventTile renderingType: ThreadsList", () => { it("shows an unread notification badge", () => { const { container } = getComponent({}, TimelineRenderingType.ThreadsList); @@ -246,13 +906,6 @@ describe("EventTile", () => { }); describe("EventTile in the right panel", () => { - beforeAll(() => { - const dmRoomMap: DMRoomMap = { - getUserIdForRoomId: jest.fn(), - } as unknown as DMRoomMap; - DMRoomMap.setShared(dmRoomMap); - }); - it("renders the room name for notifications", () => { const { container } = getComponent({}, TimelineRenderingType.Notification); expect(container.getElementsByClassName("mx_EventTile_details")[0]).toHaveTextContent( @@ -600,6 +1253,43 @@ describe("EventTile", () => { expect(isHighlighted(container)).toBeFalsy(); }); + it("does not highlight when exporting", () => { + mocked(client.getPushActionsForEvent).mockReturnValue({ + notify: true, + tweaks: { [TweakName.Highlight]: true }, + }); + const { container } = getComponent({ forExport: true }); + + expect(client.getPushActionsForEvent).not.toHaveBeenCalled(); + expect(isHighlighted(container)).toBeFalsy(); + }); + + it.each([TimelineRenderingType.Notification, TimelineRenderingType.ThreadsList])( + "does not highlight in %s timelines", + (renderingType) => { + mocked(client.getPushActionsForEvent).mockReturnValue({ + notify: true, + tweaks: { [TweakName.Highlight]: true }, + }); + const { container } = getComponent({}, renderingType); + + expect(client.getPushActionsForEvent).not.toHaveBeenCalled(); + expect(isHighlighted(container)).toBeFalsy(); + }, + ); + + it("does not highlight events sent by the current user", () => { + mocked(client.getPushActionsForEvent).mockReturnValue({ + notify: true, + tweaks: { [TweakName.Highlight]: true }, + }); + const ownEvent = makeOwnMessage(); + const { container } = getComponent({ mxEvent: ownEvent }); + + expect(client.getPushActionsForEvent).toHaveBeenCalledWith(ownEvent); + expect(isHighlighted(container)).toBeFalsy(); + }); + it("highlights when message's push actions have a highlight tweak", () => { mocked(client.getPushActionsForEvent).mockReturnValue({ notify: true, From f72f15ff1bb73798f0dd5d4bc9d61cc0f7e3f7f9 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 12 May 2026 13:12:37 +0000 Subject: [PATCH 7/9] Upgrade dependency to matrix-js-sdk@41.5.0 --- apps/web/package.json | 2 +- pnpm-lock.yaml | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 7df89851cd..f2a0900e81 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -81,7 +81,7 @@ "lodash": "npm:lodash-es@4.18.1", "maplibre-gl": "^5.0.0", "matrix-encrypt-attachment": "^1.0.3", - "matrix-js-sdk": "41.5.0-rc.0", + "matrix-js-sdk": "41.5.0", "matrix-widget-api": "^1.16.1", "memoize-one": "^6.0.0", "mime": "^4.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ac6af903b1..2d344cd629 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -472,8 +472,8 @@ importers: specifier: ^1.0.3 version: 1.0.3 matrix-js-sdk: - specifier: 41.5.0-rc.0 - version: 41.5.0-rc.0 + specifier: 41.5.0 + version: 41.5.0 matrix-widget-api: specifier: ^1.17.0 version: 1.17.0 @@ -5797,6 +5797,7 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} @@ -9977,8 +9978,8 @@ packages: matrix-events-sdk@0.0.1: resolution: {integrity: sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA==} - matrix-js-sdk@41.5.0-rc.0: - resolution: {integrity: sha512-+3k+eUYJzjX8wCTI/JrP22/QnhB8tb7vdZTtXh4g4ukVxf+B20HguAPOEmVYXmKUTko9hxCHu2e7DQqZazqZBA==} + matrix-js-sdk@41.5.0: + resolution: {integrity: sha512-CK3h+qQJ4wkVEUgEWc5MdLjccXyiFqncCC53P+auqOhnX2U6tAFsRfnbML1QQiKIsFMzqTrAnF/4a5LUUOIeXg==} engines: {node: '>=22.0.0'} matrix-web-i18n@3.6.0: @@ -23579,7 +23580,7 @@ snapshots: matrix-events-sdk@0.0.1: {} - matrix-js-sdk@41.5.0-rc.0: + matrix-js-sdk@41.5.0: dependencies: '@babel/runtime': 7.29.2 '@matrix-org/matrix-sdk-crypto-wasm': 18.2.0 From dc0dbd540becbb34d32a72570efcef1b30d174e5 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 12 May 2026 13:17:09 +0000 Subject: [PATCH 8/9] v1.12.18 --- CHANGELOG.md | 33 +++++++++++++++++++++++++++++++++ apps/desktop/package.json | 2 +- apps/web/package.json | 2 +- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c53af59eb..2c8720d408 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,36 @@ +Changes in [1.12.18](https://github.com/element-hq/element-web/releases/tag/v1.12.18) (2026-05-12) +================================================================================================== +## ✨ Features + +* Room list: add collapse/expand all sections ([#33318](https://github.com/element-hq/element-web/pull/33318)). Contributed by @florianduros. +* Show user status in timeline ([#32991](https://github.com/element-hq/element-web/pull/32991)). Contributed by @Half-Shot. +* Disable URL Preview setting if disabled on the homeserver ([#33279](https://github.com/element-hq/element-web/pull/33279)). Contributed by @Half-Shot. +* Go to welcome on logout ([#33306](https://github.com/element-hq/element-web/pull/33306)). Contributed by @t3chguy. +* Room list: edit or remove custom sections ([#33283](https://github.com/element-hq/element-web/pull/33283)). Contributed by @florianduros. +* Re-generate QR code if the channel expires before scan ([#33303](https://github.com/element-hq/element-web/pull/33303)). Contributed by @t3chguy. +* Update toast styles, improve incoming call notifications ([#33043](https://github.com/element-hq/element-web/pull/33043)). Contributed by @robintown. +* Add Module Composer API ([#33284](https://github.com/element-hq/element-web/pull/33284)). Contributed by @Half-Shot. +* Room list: exclude default section from room list item menu ([#33278](https://github.com/element-hq/element-web/pull/33278)). Contributed by @florianduros. +* Show 'Verify this device' toast even if there are no encrypted rooms yet ([#32891](https://github.com/element-hq/element-web/pull/32891)). Contributed by @andybalaam. +* Promote "Share encrypted history" from labs ([#33281](https://github.com/element-hq/element-web/pull/33281)). Contributed by @richvdh. +* Room list: assign room to section when section is created ([#33240](https://github.com/element-hq/element-web/pull/33240)). Contributed by @florianduros. +* Confirm before inviting unknown users to a DM/room ([#33171](https://github.com/element-hq/element-web/pull/33171)). Contributed by @richvdh. +* Room list: assign room to custom section ([#33238](https://github.com/element-hq/element-web/pull/33238)). Contributed by @florianduros. +* Redesign link previews ([#33061](https://github.com/element-hq/element-web/pull/33061)). Contributed by @Half-Shot. +* Room list: scroll to newly creation section ([#33210](https://github.com/element-hq/element-web/pull/33210)). Contributed by @florianduros. + +## 🐛 Bug Fixes + +* Update home page CSS ([#32723](https://github.com/element-hq/element-web/pull/32723)). Contributed by @wolterkam. +* Web: Fix typo in `152x152` icon source of `manifest.json` ([#33369](https://github.com/element-hq/element-web/pull/33369)). Contributed by @bartvdbraak. +* prevent replay hover from restarting playback ([#33364](https://github.com/element-hq/element-web/pull/33364)). Contributed by @ZacksBot. +* Properly save `undefined` id tokens from OIDC login ([#33345](https://github.com/element-hq/element-web/pull/33345)). Contributed by @gingershaped. +* Show the right cursor when hovering over a space ([#33351](https://github.com/element-hq/element-web/pull/33351)). Contributed by @robintown. +* Set `type` in auth dict for `m.oauth` UIA stage ([#33344](https://github.com/element-hq/element-web/pull/33344)). Contributed by @gingershaped. +* Remove duplicated UI in appearance settings ([#33336](https://github.com/element-hq/element-web/pull/33336)). Contributed by @t3chguy. +* Move playwright-common wait-on from devDependencies to dependencies ([#33272](https://github.com/element-hq/element-web/pull/33272)). Contributed by @t3chguy. + + Changes in [1.12.17](https://github.com/element-hq/element-web/releases/tag/v1.12.17) (2026-04-30) ================================================================================================== ## 🐛 Bug Fixes diff --git a/apps/desktop/package.json b/apps/desktop/package.json index a080962f65..db60149ecd 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -3,7 +3,7 @@ "productName": "Element", "main": "lib/electron-main.js", "exports": "./lib/electron-main.js", - "version": "1.12.18-rc.0", + "version": "1.12.18", "description": "Element: the future of secure communication", "author": { "name": "Element", diff --git a/apps/web/package.json b/apps/web/package.json index f2a0900e81..a19d4bb311 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "element-web", - "version": "1.12.18-rc.0", + "version": "1.12.18", "description": "Element: the future of secure communication", "author": "New Vector Ltd.", "repository": { From 13dd1a0b5e4594d2c1f60ba6c39c3454b2552b71 Mon Sep 17 00:00:00 2001 From: RiotRobot Date: Tue, 12 May 2026 13:21:16 +0000 Subject: [PATCH 9/9] Reset matrix-js-sdk back to develop branch --- apps/web/package.json | 2 +- pnpm-lock.yaml | 25 +++++-------------------- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 3acbad37ab..2a094d9ae6 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -81,7 +81,7 @@ "lodash": "npm:lodash-es@4.18.1", "maplibre-gl": "^5.0.0", "matrix-encrypt-attachment": "^1.0.3", - "matrix-js-sdk": "41.5.0", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop", "matrix-widget-api": "^1.16.1", "memoize-one": "^6.0.0", "mime": "^4.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f0aeef1ee5..8eecf981a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -463,7 +463,7 @@ importers: version: 1.0.3 matrix-js-sdk: specifier: github:matrix-org/matrix-js-sdk#develop - version: https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/d4739cbeda2b0b21e548dc496eb47da939c11f32 + version: https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/b125ef6855303575ae8f2fcc41427e746f22e8c9 matrix-widget-api: specifier: ^1.17.0 version: 1.17.0 @@ -1530,7 +1530,6 @@ packages: '@babel/plugin-proposal-private-methods@7.18.6': resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. peerDependencies: '@babel/core': ^7.0.0-0 @@ -2822,7 +2821,6 @@ packages: '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -2830,7 +2828,6 @@ packages: '@humanwhocodes/object-schema@2.0.3': resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead '@iconify-json/simple-icons@1.2.75': resolution: {integrity: sha512-KvcCUbvcBWb0sbqLIxHoY8z5/piXY08wcY9gfMhF+ph3AfzGMaSmZFkUY71HSXAljQngXkgs4bdKdekO0HQWvg==} @@ -5752,7 +5749,6 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} @@ -6649,7 +6645,6 @@ packages: boolean@3.2.0: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. brace-expansion@1.1.13: resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} @@ -8183,7 +8178,6 @@ packages: eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true espree@10.4.0: @@ -8611,7 +8605,6 @@ packages: glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@13.0.6: @@ -8620,7 +8613,6 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-agent@3.0.0: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} @@ -8985,7 +8977,6 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -9927,9 +9918,9 @@ packages: matrix-events-sdk@0.0.1: resolution: {integrity: sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA==} - matrix-js-sdk@https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/d4739cbeda2b0b21e548dc496eb47da939c11f32: - resolution: {tarball: https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/d4739cbeda2b0b21e548dc496eb47da939c11f32} - version: 41.4.0 + matrix-js-sdk@https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/b125ef6855303575ae8f2fcc41427e746f22e8c9: + resolution: {tarball: https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/b125ef6855303575ae8f2fcc41427e746f22e8c9} + version: 41.5.0 engines: {node: '>=22.0.0'} matrix-web-i18n@3.6.0: @@ -11365,7 +11356,6 @@ packages: react-beautiful-dnd@13.1.1: resolution: {integrity: sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==} - deprecated: 'react-beautiful-dnd is now deprecated. Context and options: https://github.com/atlassian/react-beautiful-dnd/issues/2672' peerDependencies: react: ^16.8.5 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 @@ -11701,12 +11691,10 @@ packages: rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@6.1.3: @@ -12903,7 +12891,6 @@ packages: uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@11.1.1: @@ -12916,7 +12903,6 @@ packages: uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true v8-to-istanbul@9.3.0: @@ -13270,7 +13256,6 @@ packages: whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} @@ -23486,7 +23471,7 @@ snapshots: matrix-events-sdk@0.0.1: {} - matrix-js-sdk@https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/d4739cbeda2b0b21e548dc496eb47da939c11f32: + matrix-js-sdk@https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/b125ef6855303575ae8f2fcc41427e746f22e8c9: dependencies: '@babel/runtime': 7.29.2 '@matrix-org/matrix-sdk-crypto-wasm': 18.2.0