From a4f63cdd22cc92b64bb116a1a55eb8bec2c4a9ab Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 5 Aug 2026 14:44:35 +0100 Subject: [PATCH] Emoji picker to shared components (#34337) * Exploration of a virtuoso-powered emoji picker moved to shared components Fable generated * fix pnpm lock * format & fix some lint issues * wrong import * fix lint warning * Fix off-by-one and remove manual overflow adjustment: let's leave the default unless it turns out to be necessary. Emoji should not take that long to load. * Convert to functional component * WIP: change to one big virtuoso scroller * Change to use virtuoso's own onRangeChanged and santitise category data and how it's passed around * Convert Tabs to functional component and put the focusing behaviour back with it just keeping track of refs by itself. * Absorb two line config file into main component * Actually add the config to the main file * Convert emoji to functional Also make selected always defined and use useCallback. * QuickReactions to functional component * Non-default exports & doc * Search to functional component * Well it seems to work just fine now * Use ref prop * fix lockfile AGAIN * lint * Remove default export * Remove some mx_ classnames and fix the inputRef to make the arrow keys in the search box work (well, work as much as they ever did). * Remove last of the mx_ id / classnames (except the one in the test) * Use useMemo to memoize * No need to export props interface (I think?) and fix comment now we don't do the mutation stuff anymore * Fix test * Fix axe violations & add screenshots * Avoid comparing dom snapshots in test * Allow more before or after, just compare order of the ones present in both. * Switch existing usages to new emoji picker and kill the old one with fire * Unused stuff * Remove i18n strings * Fix some tests * Update screenshots * Fix test by removing the last of the weird memoized-but-mutated data structure * Move the string somewhere more sensible than 'a11y' * i18n lint * Give the emojis IDs so aria-activedescendant works * Fix more tests * Add a small wrapper emoji picker component This lets us easily memoize the recent emojis when the emoji picker is opened. Also it saves a bit of boilerplate. * Remove old emojipicker css * Typos Co-authored-by: David Langley * Use compound constants * Rethemendex * Use catalog version for emojibase * Add comments * More comments * Fix comment * More comments * more comments (and make them uniform) * More comments * Fix pnpm lock again * Another comment * Apply button types to new version * Add comment * Disable screenshot as per comment --------- Co-authored-by: Will Hunt <2072976+Half-Shot@users.noreply.github.com> Co-authored-by: David Langley --- apps/web/package.json | 2 +- .../web/playwright/e2e/composer/CIDER.spec.ts | 12 +- .../reactions-in-threads.spec.ts | 4 +- .../playwright/e2e/threads/threads.spec.ts | 2 +- .../CIDER.spec.ts/emoji-picker-linux.png | Bin 41214 -> 41058 bytes .../emoji-picker-small-linux.png | Bin 24711 -> 24568 bytes apps/web/res/css/_components.pcss | 1 - .../css/views/emojipicker/_EmojiPicker.pcss | 216 -------- apps/web/src/accessibility/RovingTabIndex.tsx | 9 +- .../components/views/emojipicker/Category.tsx | 133 ----- .../components/views/emojipicker/Emoji.tsx | 55 -- .../views/emojipicker/EmojiPicker.tsx | 400 --------------- .../components/views/emojipicker/Header.tsx | 114 ----- .../components/views/emojipicker/Preview.tsx | 37 -- .../views/emojipicker/QuickReactions.tsx | 85 ---- .../views/emojipicker/ReactionPicker.tsx | 4 +- .../components/views/emojipicker/Search.tsx | 95 ---- .../components/views/emojipicker/config.ts | 12 - .../components/views/rooms/EmojiButton.tsx | 4 +- .../EmojiPickerWithRecents.test.tsx | 36 ++ .../emojipicker/EmojiPickerWithRecents.tsx | 39 ++ apps/web/src/i18n/strings/en_EN.json | 17 - .../EmojiPicker.stories.tsx/default-auto.png | Bin 0 -> 81138 bytes .../with-recents-auto.png | Bin 0 -> 77347 bytes .../with-selected-auto.png | Bin 0 -> 81816 bytes packages/shared-components/package.json | 1 + .../src/core/EmojiPicker/Emoji.tsx | 93 ++++ .../core/EmojiPicker/EmojiPicker.module.css | 227 +++++++++ .../core/EmojiPicker/EmojiPicker.stories.tsx | 47 ++ .../src/core/EmojiPicker/EmojiPicker.test.tsx | 344 ++++++------- .../src/core/EmojiPicker/EmojiPicker.tsx | 480 ++++++++++++++++++ .../src/core/EmojiPicker/Preview.tsx | 42 ++ .../src/core/EmojiPicker/QuickReactions.tsx | 90 ++++ .../src/core/EmojiPicker/RovingButton.tsx | 116 +++++ .../src/core/EmojiPicker/Search.tsx | 109 ++++ .../src/core/EmojiPicker/Tabs.tsx | 179 +++++++ .../src/core/EmojiPicker/index.ts | 8 + .../src/core/roving/Toolbar.tsx | 83 +++ .../src/core/roving/index.ts | 2 + .../src/i18n/strings/en_EN.json | 17 + packages/shared-components/src/index.ts | 1 + packages/shared-components/vite.config.ts | 2 + pnpm-lock.yaml | 8 +- pnpm-workspace.yaml | 2 + 44 files changed, 1751 insertions(+), 1377 deletions(-) delete mode 100644 apps/web/res/css/views/emojipicker/_EmojiPicker.pcss delete mode 100644 apps/web/src/components/views/emojipicker/Category.tsx delete mode 100644 apps/web/src/components/views/emojipicker/Emoji.tsx delete mode 100644 apps/web/src/components/views/emojipicker/EmojiPicker.tsx delete mode 100644 apps/web/src/components/views/emojipicker/Header.tsx delete mode 100644 apps/web/src/components/views/emojipicker/Preview.tsx delete mode 100644 apps/web/src/components/views/emojipicker/QuickReactions.tsx delete mode 100644 apps/web/src/components/views/emojipicker/Search.tsx delete mode 100644 apps/web/src/components/views/emojipicker/config.ts create mode 100644 apps/web/src/emojipicker/EmojiPickerWithRecents.test.tsx create mode 100644 apps/web/src/emojipicker/EmojiPickerWithRecents.tsx create mode 100644 packages/shared-components/__vis__/linux/__baselines__/core/EmojiPicker/EmojiPicker.stories.tsx/default-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/core/EmojiPicker/EmojiPicker.stories.tsx/with-recents-auto.png create mode 100644 packages/shared-components/__vis__/linux/__baselines__/core/EmojiPicker/EmojiPicker.stories.tsx/with-selected-auto.png create mode 100644 packages/shared-components/src/core/EmojiPicker/Emoji.tsx create mode 100644 packages/shared-components/src/core/EmojiPicker/EmojiPicker.module.css create mode 100644 packages/shared-components/src/core/EmojiPicker/EmojiPicker.stories.tsx rename apps/web/test/unit-tests/components/views/emojipicker/EmojiPicker-test.tsx => packages/shared-components/src/core/EmojiPicker/EmojiPicker.test.tsx (59%) create mode 100644 packages/shared-components/src/core/EmojiPicker/EmojiPicker.tsx create mode 100644 packages/shared-components/src/core/EmojiPicker/Preview.tsx create mode 100644 packages/shared-components/src/core/EmojiPicker/QuickReactions.tsx create mode 100644 packages/shared-components/src/core/EmojiPicker/RovingButton.tsx create mode 100644 packages/shared-components/src/core/EmojiPicker/Search.tsx create mode 100644 packages/shared-components/src/core/EmojiPicker/Tabs.tsx create mode 100644 packages/shared-components/src/core/EmojiPicker/index.ts create mode 100644 packages/shared-components/src/core/roving/Toolbar.tsx diff --git a/apps/web/package.json b/apps/web/package.json index 47dec44e43..fc8c36259c 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -44,7 +44,7 @@ "@fontsource/inter": "catalog:", "@formatjs/intl-segmenter": "^12.0.0", "@matrix-org/analytics-events": "^0.37.0", - "@matrix-org/emojibase-bindings": "^1.5.0", + "@matrix-org/emojibase-bindings": "catalog:", "@matrix-org/react-sdk-module-api": "^2.4.0", "@sentry/browser": "^10.0.0", "@types/png-chunks-extract": "^1.0.2", diff --git a/apps/web/playwright/e2e/composer/CIDER.spec.ts b/apps/web/playwright/e2e/composer/CIDER.spec.ts index 9629e63c9e..ef92710c10 100644 --- a/apps/web/playwright/e2e/composer/CIDER.spec.ts +++ b/apps/web/playwright/e2e/composer/CIDER.spec.ts @@ -74,7 +74,7 @@ test.describe("Composer", () => { test("should allow user to input emoji via graphical picker", async ({ page, app }) => { await app.getComposer(false).getByRole("button", { name: "Emoji" }).click(); - await page.getByTestId("mx_EmojiPicker").locator(".mx_EmojiPicker_item", { hasText: "πŸ˜‡" }).click(); + await page.getByLabel("Emoji picker").getByRole("button", { name: "πŸ˜‡" }).click(); await page.locator(".mx_ContextualMenu_background").click(); // Close emoji picker await page.getByRole("textbox", { name: "Send an unencrypted message…" }).press("Enter"); // Send message @@ -97,7 +97,7 @@ test.describe("Composer", () => { await app.getComposer(false).getByRole("button", { name: "Emoji" }).click(); // Mask the background of the screenshot to avoid failing the test just because some // other component have changed its rendering. - await expect(page.getByTestId("mx_EmojiPicker")).toMatchScreenshot("emoji-picker.png", { + await expect(page.getByLabel("Emoji picker")).toMatchScreenshot("emoji-picker.png", { css: ` .mx_ContextualMenu_background { background-color: magenta !important; @@ -113,7 +113,7 @@ test.describe("Composer", () => { await app.getComposer(false).getByRole("button", { name: "Emoji" }).click(); // Mask the background of the screenshot to avoid failing the test just because some // other component have changed its rendering. - await expect(page.getByTestId("mx_EmojiPicker")).toMatchScreenshot("emoji-picker-small.png", { + await expect(page.getByLabel("Emoji picker")).toMatchScreenshot("emoji-picker-small.png", { css: ` .mx_ContextualMenu_background { background-color: magenta !important; @@ -130,7 +130,7 @@ test.describe("Composer", () => { await emojiButton.click(); // Wait for emoji picker to be visible - const emojiPicker = page.getByTestId("mx_EmojiPicker"); + const emojiPicker = page.getByLabel("Emoji picker"); await expect(emojiPicker).toBeVisible(); // Get initial focused element (should be search input) @@ -145,8 +145,8 @@ test.describe("Composer", () => { await page.keyboard.press("Tab"); // Verify we're still within the emoji picker (not back to composer) - const focusedElement = await page.evaluate(() => document.activeElement?.closest(".mx_EmojiPicker")); - expect(focusedElement).not.toBeNull(); + const focusStillInPicker = await emojiPicker.evaluate((el) => el.contains(document.activeElement)); + expect(focusStillInPicker).toBe(true); // Close with Escape key await page.keyboard.press("Escape"); diff --git a/apps/web/playwright/e2e/read-receipts/reactions-in-threads.spec.ts b/apps/web/playwright/e2e/read-receipts/reactions-in-threads.spec.ts index 5073b78e4a..622e8e6021 100644 --- a/apps/web/playwright/e2e/read-receipts/reactions-in-threads.spec.ts +++ b/apps/web/playwright/e2e/read-receipts/reactions-in-threads.spec.ts @@ -180,7 +180,7 @@ test.describe("Read receipts", { tag: "@mergequeue" }, () => { await util.openThread("Msg1"); await page.locator(".mx_ThreadPanel").getByText("Reply1a").hover(); await page.getByRole("button", { name: "React" }).click(); - await page.locator(".mx_EmojiPicker_body").getByText("πŸ˜€").click(); + await page.getByLabel("Emoji Picker").getByRole("gridcell", { name: "πŸ˜€" }).click(); // And cancel the reaction await page.locator(".mx_ThreadPanel").getByLabel("Mae reacted with πŸ˜€").click(); @@ -191,7 +191,7 @@ test.describe("Read receipts", { tag: "@mergequeue" }, () => { // And I can do it all again without an error await page.locator(".mx_ThreadPanel").getByText("Reply1a").hover(); await page.getByRole("button", { name: "React" }).click(); - await page.locator(".mx_EmojiPicker_body").getByText("πŸ˜€").first().click(); + await page.getByLabel("Emoji Picker").getByRole("gridcell", { name: "πŸ˜€" }).first().click(); await page.locator(".mx_ThreadPanel").getByLabel("Mae reacted with πŸ˜€").click(); await expect(page.locator(".mx_ThreadPanel").getByLabel("Mae reacted with πŸ˜€")).not.toBeVisible(); }); diff --git a/apps/web/playwright/e2e/threads/threads.spec.ts b/apps/web/playwright/e2e/threads/threads.spec.ts index 75bda6d407..b2c1879350 100644 --- a/apps/web/playwright/e2e/threads/threads.spec.ts +++ b/apps/web/playwright/e2e/threads/threads.spec.ts @@ -140,7 +140,7 @@ test.describe("Threads", () => { await locator.hover(); await locator.getByRole("toolbar", { name: "Message Actions" }).getByRole("button", { name: "React" }).click(); - locator = page.locator(".mx_EmojiPicker"); + locator = page.getByLabel("Emoji picker"); await locator.getByRole("textbox").fill("wave"); await page.getByRole("gridcell", { name: "πŸ‘‹" }).click(); diff --git a/apps/web/playwright/snapshots/composer/CIDER.spec.ts/emoji-picker-linux.png b/apps/web/playwright/snapshots/composer/CIDER.spec.ts/emoji-picker-linux.png index 4adb4ad665c1aedfde66184d48792ed38afeaa47..e3370132a2936318adbd2ebf141f36898639946c 100644 GIT binary patch literal 41058 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

dB% z#35vFJUzS_3Y5pFf2l1inGpUc#m7hg7E~|^EOX4@J(4~sAw<{#E-PGy%qLj$gw_l3 zXMW>;LU@3{mlT?8TJ1-Uz?{bqGezuE>E^2MS9w}3OnPQ@nwpK9woN6lZ#TVu)Z#|; zp6rviu9#cJnGXkdsuUeCxSa>Fm#;W$0!8Ca9#<7!!OLeyqy88> zr8NSLABoIO-Z363$Ls@8EG!_=UxpDGaX*HZn+EqAdc_}1ZCpq=%SQMw`->3HuV|h2 zy}zRrRharrthm2s$HdX1y7`$bhwBYPH!aaOJw|Xw<_S?}muR|e@}9y}Sp4H!7V%VS zbAge<;XPH!i-%bz3Uha8KeVORzSf{B@YG^(U37pa1pB{Oz==lZutO)wg-cm;(u#gI zT}QdS#qWE>d-T!-6q|z+%C`W82bu^&AfI`UlaY#cubIX5i)rw(QUCA6NL4XWuJ z)RH4}kq+8EpO9ao=G^#oTBnJGJ<}x;w64B67R5(B z&s$@U(e(j{5PSi{zB+LJKPfQ&@2cPbt{D0M@vV3Cx+BkQDi6Z@a;F&hnXtTxQsPSd z0XR;4+Zl4sk|XnQknTQ?qUTQzwsyQXNYbgzCa^7c>2L=vdAOy@O_MMsy$@{<@>4UT z@Ys;gO5Z+S_f_#&9_{?v5`>ZXAAb_a*8l!Le<8pT@x~P1+=y4}C45eF3a1@*&Hg~t z$7w{-aoTm`@=>j;p;g-UV<#6hYpmp&pmw9x-OFtBO+}+SHjn=t*f@N7pmxO3=N?-| zxJihnHg`a`ly~NT@b=b0asBO=CM5+u00y9Fn>Lt_c<4vo9JyF+ky z_uw%5_n!0Kd*@&Gh%VWWyOUtR0l!uEjXSj6%c83k48wrOjWZ>;r}9xn z33W+>xwSk*kJDVpdq0-IgcNC3*h#)QJyhlKbVTc>{kV310TjprMh1^oy}Rq* z%UZS|#rfZXDt4z__QA!sS;I%d-v8Wv1A`0n_U*hLVq!NCW&7}1-*P&2Czy*Jra(Uw zFD3C;zT@GNv@A$RD=>g;JaH6hTkp*;U_|YhE_(yEPF%ulvLcmqy}r_czA5OIukBLN z_H;>>AXT|}hsVbfS-DRvCd#4T@af%{$_6EP@xl4H-gM)5f-#Y4cQ%3?$1m*M$Lk>R zmLMvPX^c4`49;5bczChA(wr?BGlOQ$<=x%B^L|KS;8mlIpSecv-lD53ej<0Va&VthX#PaPkVP-Q zI4ytVL>_=IsUvvXBpz|SnAqvzN7e<)7oyp__8y$o+H1gW^dTQ|wBqk!y&nME3*#-F z_mOUtU$Ea*UFyI$uM?o1o%xJ1%_%CA(rV3@*@?$UT#P}9oc&^TFXr{Y1R+L+jN(+Z zp)Bnb1)S<)cFq?k1pMyw-!~qcef)cj+qth`DHCzqVk_0%xdVj(ZZeQakjg*DJw0v} zi~Mu(P>f4ZZTUEWIGTh-K>V?O!XIDQI&fB><&3xfb{12>H1BW@4Hcjn2f%5f? zFcmXli=I(rhx%R&N2eIv;X3MAnu4RtOlo5G$1w zRXb~03tkPIr-hJfP!P;;`VbRD)L`RWltJGpAX;clwxuRT*#kP7)7{ufyEZyz=uCc+ z6)d{-AwcHW(dX^@6QjcEk=&lP!pO)fkG_TEC3hMMtGVnKQL`JOD&vJxDb?(M-H5)* z?_|A@*S{g_WbRLgVM$k0t`bVWVWZP%ZLFu6(&ATC05>P@bW_LLNKqiFGEg zUTK^W8cb3*d#ZN(iiJIl2$LA=|FM->UCeu<0^D#oLZ5GZeI6$&8azz*DK?D>G);mn*nd2GAT4q3wG8;UX1OOS(k6u=nQW&vehrk zu{fW~iTT3H6$aE480Z;|`X=Rkcy0@-yB0B(J_zVM=eTd$E6!+^znm5L;1BZ^{c4-Y zz0RDKtNSSm9=7V`?RfzAwD&ycoRxL_yyb4sX|USA0p*q-D7}^=}T+fnv?+@v~lfE%ic7JBY z;BpxFAgiyofo_{RP$8D2+|_nVWZ`lDwPyv9!MlH9-OV|0lIN zEwC)r)E?C^0Z%qDmr5glRO-CyBro_W8sFoa+x^H174xgdF3M`-<}XHg9UvAl5ncTX zwypFXi26qUup{x4#8UdSX43b+(A6pQWp)Q+>?g99E!gt*jd;c@Ie*2;gzg#V-;sqj4I^{BCamTJG$-MR z^GjSxj|g)^vzagU&%p*PSRyA^vry|(SvMU&RJ6J<@WhDBNOL(I%a&7* z`i1aQT-}8S7;>&#Ozg&ed!e*EvtbW@+pX*HFn+2M1)d?n%ZIHJu(>8*e%NT{M)+ zvMb|nm*Cc&Qw0-h6AIFt#O_M0YrAYj`!J>Rsd)pLiiDKS`c?v&560qlY8s^6l+*eg z+gKKAM0ccgNy3?=o(?hDX~%JWUp+eleTQ;$v+FZXt^UL}%(=?w>Dfn=Gj7qqV&E0#t9>WK zow-bk-A}59YFt-r^Qea=F(95f*&cg3DvTA!#ji79Km4HBW3G)WBP4T+#Iix4h#Gds zZ^C+oLAoC-oGv55pP~BqT5rD}4V*=)=0V$A@8R+*x@r5T)3!=oP12GO&qw*%?Jwm0 zYYy`aDD$g0rXyC+9#Q2J_It>Q>N}Omck5}7T@4|(9v_-XY+{8|2HspxnPbk-ukZdg zupHbT`+H>&j{R8p=NI)iW_L7#Gx-6XJqswL9Xzs&{zEo|Vd0&S{V~?B%BBIDZ$XnS zokW_9E|UFUK18LEO4IkC65}(}a~yHPGvdxBy@!UTXd8|32rzOo!0s4fKa5Xycjn<( z9k3mbwi;K+ME7Tif%tw$_Wq)nrD+9;Eovm)3;d+4i!o5dNN2jTI_k;_;FHct?WYnU&}N{pjsSAoDqcFV3M=4EGVk$)aZ7` zr98|F^rm`z_>0m>)LaR~;AShl>(5IXOzTcs9!UASUO-h7Z*vpWh0)+T45>T+J|HNV zx>GaHxu(BLJ}Pvr-ieZ^_0>78N#5aE8^}cV+A5c3`uOKi;3)<$fYSd!l&d^F-L`|j zo$0`p_eb7c2mBXnm6mx>#g#$N6q~;%o>S`Cxn5?Ji%^&Y4ksgBXT|xIcgo22iIJ4*xZ5$`UNzl@;Htt(YO8o%c6V_Lf>k5#VSg-5C_jb;X_?PL=IG0^)$Ng+4B?Y-75ZLr$H=wqeK{g0(x)j;Adg9B9q^q|2dfq7qiEOe zO}m&F->kJ?ztL=id9)kU{df2ZgD?BOR+oV##T5b5_*p!NRL)wI0hn8ONIEdq5^7pU z2(s8F3dsZ6gU5mNv%`-BLJb!{$zpm@q9rcovOh z1g(vLrnFaWA&V$W)ff^C3_iI$@#Q7@G!xL=aF4Cu1YQ?EJ?~f0aXb;sk!1g1Ou9`s z%c^;A&I&i`oV@M_qJQ%(b|x#aBjG@RV+zcIFaJECTkqBc?;57}k52S&e;np*%Er3o znDf@(IH7KqL?AT>wKkoB2>=U_g4cfWTSqy<)BkZmK=mRRok z=bFlnZ*0>vM56QYQ!0n!nhaXVvKC~x7S=lVO7|1T03h>}dE9I0Fx&|ZN{B0x%sm{2 zWJR4D+b8+l7OT$D={}oR0AUKy$Et#?iAF$->MgT9etkfKx1Lw$7<_k*KK#j6H~IXD z)2#kv)-XSe zPyIO6~AdhTWz9AsZU3NUdnb(B1n$}(l=2}tilUA&s`8TPqLJvmxR zFcG0I<~;XFj0{t!Z5%ZuXnen<*DxdK^f2?dzZVVjtWdS;r-H6ip)n>sqLwk0 z3-;*@yWuaVa(d0N$82?6OBLC#QmRqo;7y9#y#Oi+q4}to5}CD~sEN~+Nz#B#E1?wQ zir~npUtef5$pG6XKdmYhf@+gGA;eSA)3r}dxax&1QHenb6Bozr-MrN(F3n3eFDIAA z#RTF8B-m=@2h{)2U_+r7SYck+)QptX!3m+JZQ2wY5}dc_R|$9;x$QHQOugt^cI!2= z6BgC4bp#!Csx>9ce6$C?V$Zi74`QZb=qh2aO?A(w)UjgSOgUX>&{_9nwdPep?dZBj z$M_M^g6{5TX^Xj!a$=V?C8`#=x(yUy)A?uN8qWJjYBD^ZV+peKqkTpLg2WQFGI~R{ z!#l>Pa3pMf4~3$mr*+f_acN7T!-e;PLk_<&fCIMqZZqvA?Ki&>AN~MhBn&(Ql;+0? zAr4}aH)geT&%IX#Kyvg$TEZ7P?Gb{FQh43l4YweWL97bRWV(jRHBD5!|0c7URpG96`{kV&mjV$UF>Vh$<`-&|t$a4*mL^@JchjmgG=!mM4K zDWu?#?gaHO+Q~1?dF8JJ>kIZw$K7WFKUL^%4|Y;ngR-Ue12HINz=tk>?ZA&bRGuDlu7CwT*bTsy0k_OtIU68!$4;)W&?5? zyKU`$Z9XIr1|wGZ?pM91RpJlJs-9>HBM-+9ixyqvMuo=K;h!kWzmA^99DX5)eBfCgGD{opTDxC9#T5I_4>NNSJD0@#u(T5+Nj;{f0+H3mZQw$ zQ6F0KL>;hS|FNwaFfrBznV+r2xAT6TiZ|`aAoVUWeOd%uHw^U%41%qZW&wzuH0Mx} zHZVoJxc4egWk+c1uZ}y^>0M^%#NMrs6inM!j zY;Qb{^g3G)X}5);fg};dQakIsS>x&*{2{=oqO**PUSX}(!JapmI(BkjOk02>PPMU& zv0!Je?xFPU%DRR>y>jM+-qfr#?*ZbxzjRfiY?wJhqbs5`?n`-N{rPEu0IHmkC9cKwSjE*P-fwHoLPa4_X9ht7aCt#qNJc{ zs3ZGy>Aqw@p8BO|gZMJv8kadoih6Iinp>s*uzAM|^^s;Xd3j4Q<_ce)C}`H$I$A&_%$- z`e8vbrBfF%i`HG8;?C(HSmo=&V0GLg|FdfIY|eBGI)Obla74W(V1(cmhtn(P$ERo} zx3?=4$}3!6K%0@#IJd`h-67O@0hjcocCECibWFm&fyl<~9{PN7U$xG)&>AsN1gmXr`PJK=0!{5tSjc0^31|r^)`e)8 zXlcrs)oADjWu6X-j_WK}rW-#b<}|(H%zCV8p38O)U^=Ko_Lkh+{DK zLu-0N=+=B;nc<^EGRZLK;eMkR&P|YefA@+;>~B-qBcrk0k)g^1Cp6};Js{tqNCfTh zSR>@vv(HcCO`5nXR?owOAke%%JHV3ayqJ6fQLm9QP^4Kj*i;|cu+@6+ori0*(`HvC zz4FfcpEj`+V&sALm%J?Cw-k4}sYtt+lO+XWPoVS#p8W@!ihlKI>XK$AYv4OF^r%Z_ zbyD~UyE4$zR}}8kqLg^P^`DO)Q(}%blISdNsG0ZD1zs*Q~@+ai^7gU;XaMUqrANG)ld6h*<}S=@5##AujRbn^OyQz5;=Mo)+};V znlojvSAI=Mu?$Y+o)HS=n_03nlCAspPOKv7eF4ll6{kM-%MfNGyAQ$uQX@Ia+JKL9 zU(mvlqG~b3yu7_OX?(X@RK(ex_av0&S<*%f#tzENybi)ld-Mscvk^?>?S#QOR&ohv z`}kyk=#)~L^e0i&d32Od=i0$iP_?<;diLYgMckhZ`(D_0l28K&USJNsd=wKZ+ebIY z;-gwW3C?~-L}eeFM6Y&5pXW5DQ$^=*YeYH*GCV$qvcDKi9qUf{(OZLkjhMVg?p@O_E$G^2R);ulQ9uXhx-!%wN~N6slMaHIhQ;*mK;*G?LV zov(rfHOc*(geCNgQ&s)V#7ai6^pHib>vRmi`2hA>&DlNUtoXIc1^Bb%HE@BIPSLv5vLG6g`JA173KyTTEuIY0~DPNKWEWZJa(`ml9;513Mv}Pw;(b1fYFcfY?ag52+M(nHL6y{`Tf}T3`*IR7fqmztP;Cy zX->7QkNHbjR*;R7j2P~TZBG@ed^2N&9 z+=h^mO6$X-yxrC%1gSW`D0Fy5c{Kf+ga_99%3BW#?DK#vD#ja?d+~&sQ`HpLl5taH zMLzaL<2kJ#|2CuVyAXUMasnorHoEsLo?1c&dD1NRzy>PepDF2rWc-EC0)OnN;?ddl zz@RG3=*NL(B8lz~T6^9#FPhr6x-!Ss_AXHQo(Xtq`+9A~*dhpEjGjjsH6ZI;6e@?dH6U_S_ee1tHRq!$|5v=z{N1(esvoIvMI0bMs2q=nU zK>F?zuz$4su#tP<9E9`v{{+80GigxRsAUy(peF*Mh{jr6Cxc185 zi2U#kqKUF;#c5gW^2MLG`^e!n0`-o%7bf+>fw znhamhw$w2Q)3&R<3B#M#%sfuhf#|baC~V>&X-c+f-}2n3f-U3gn{^2e26i2m=LdL4LXdv-WAx2fr` zrRX@iUROxWfsdnCOd|zH=-e)~a z;W=*q`m{tG``rvV>~dT7F%+9EMpHBTRIVwC>FfVAU8zM)_;uc$Gi9#Z^01X1`>B!a zfI5wv@x93fR)gjV9Cv0e31G)B_eK{c-nRBx3uZD3Wzwoa&;ow9N?;VII`RG}I6KJ~ z4-1_W5}p>)6=CGTeiKB(?fN#XdaCg@cCIx-9d$t_G|D{Lux+WTQn%DLV0D)X(c+*t z-g-ua?8>LrBdPf4*z9$ZXzTyd%q>=LIc0L3D|+OM)wTQ8dvi(h8_rZ^#K8KK8#dMt z`cS1#_@ql|IF&zhrUV}qk4GB^wx(u2m2hh(aq#hVs@Y#@ySoU#>`YCe+G%eHg44Ih z9i37E*MA~hz?5;P9f4}MievGpLpl(~R2?h2FHa&^u|#T@fWArFBT}YeUo!G*F9zzK z9~;@Tsl4<$Uj&`W$6JQQ9QM#bT|yNyXv*}T2-T(9 zRS%+$Qb~&j@P3RN0;3q9oCJtc6_(8ln6e2#LJICF<4}}dmTr%{n zum_y;80hz#?{xvQ4E_;i-ex2emFoc^uyM$6zww%M)uak_W#)>&2iK0ZkUO*-o^Fu(h z`rE*lo0<)lF_6vAidSYJVe5LlGFc@`>wfH1V1rmve^#N(!(MBbCRxTg5Qv&qWv(!9 z$<4^3R;b}B9Ul2U8?8Q*nY-v%#bh!$+yh~ueS@%Bs_`a+?#|=0?*jmlrsF%O6?)Y;k0YePfKY}rkh+^>E-2YCaG<8J# z_Tci^RY?SC|A-Qx+llM5UBlOoCNh4q<_84`CnuCJmUGPx+G8GA%g!zz39gqIC0Mkc zb6DLdQ!3Wfd3Dx=(9lv37eDhQ+s*~!crH@t)wR3rHsd5~+l`nqZsm!Q9CT#S_`|yW z(TU)snWM^@3LjP$e*G-SY-rdESKFA8>6!hcqR`}CM82k%~DBgy`E>JvB2;VEM=?$@^J97~q8ji2G z0fZaxD(O_PFdJHZZ3F6*k@AiqqSYWpn9c%qbexpHoK2%38reQf%+X{dG;GRz)BfPI zU^+f&^|8O805u}+l+?N#GJ>l2eeR%nHIiFIJ~)REjW4bY?(z$w7Me}+%UV9^k>^Z} zm8p#RwU7hBo9WIU7o|yPup+ad<`6Ap-K+7P;L?7LTETL)XWQd!(CASMr~r)u&%+%s z(=|1!xK3vuu2L(GxozF@7#-fKy4Sh#F-ZtL?qq3!fz5)U9o`8scc`A0skQvUu%!mH zE>(WF`ns}K83r1NgX_qg0Odfpe;W0wqJ1rX$0~_Onn|>cqv(BOepbMin(6X+mBtM> zh4j|-5+iZTO@UH2-NEbY0N}mvJbtnpm? zX3Pp<_ul}j+gFUVb)j8o{?9H5nP*$#>sEhzZje;nT1w~(eJPw)yHwo8V?*sFbPwEh#Pfmz9_v~E#e#*Xbn3+!v z@Tuc-RL7#=R%ZzQ`gLy4d(CAoriW4d$q%wzLBaAKn^}x${Z&Din#fI-U|q{f;##WL2t6TWyz~ z>c!r(TOH`L9nu|*+J_%5+$+!LW{EeU$bf3bJF#v{^`jY5QfAdhSa2yjR@H+pXD;;D zI=_C?&N~Q)uOJuiHSU`BbQC4m$wc5xEe(4WBz>QWjWgI_0!G=*{Jf4uGz~g*YVGTc zE*`Er4MGUJoMT0e<}~}^NeyJO9kvD`ugK73dG{MOqD-dqGUWKHRax{5Ogf(rti|W@ z{@S(Mo8r(3ed2`}3GXu)TFrLF#Am~bwlEx6YBPI#U5Y(hDaxO^E5)u2M60QlTw-ph zsY2`-CiJT-iA>|AXqTQ)(j!x8WK*iX1^p88FvsCR;7&pb$pKr1Xd10J=b55O4CT#4 z85j3Q{+>KI9cZ(cOd~;yn(CtDj1kVIovWde7q-alYTY+K4LT_xDF|vDrR)aHz#<5r ziEF_`k9clhek3m}3t+b}?%XhDW=1Y7i|b)Ts7Pn=P@NP5dF4N2Xi$o@UCezGR#Qhq zPuM6C1qo)ZeuLj{c03UlRs&*TBv;EKFNVm7PZm5pfv4{SzM+QRZ1o44vw`W4Z?sdA z$0sFI`Ac{}`hN%;Vaf1?Ty)*A$;vI9+y0IwA0g*z(50L7{AxB3h2i_&>U`8s!VfmB zX(vWx^BpqiQ_?X6Yvf1bev^@;?GO_UK zJWU;v@@vD#OuR4b2@`=84IEB>>6k>dP-$J3Q-%s=iJG+tXyb(O#4mj?u~Mi7d#uu= z;nz0n;=C49QgS|U7!$OA$*zMxD}~!v1t} zpN13sr+1%i_Sf^4y@4#mI5422_%CQ?n%?{V#k!E_T<0@Solgm7-#@_zEU>`9ZLFuV z4&;%i5EX2PHfVGdwR&KZDtl@>7?2qF$ahV6%MCd zBY#^Qu__=1R?>UsJ=*x||&x59{W}iq|QDGC@Lx&DsRgMwND%036*jzBPyQA5rj2IAF^1n2?Fj ze*5E63#dI~!&fbAXoZ%@fv??r=R?B5*E7*{_+lUpNwws(ar`MmS1eb~srfxFW!sBW zL6J{%l9XjXSad;P=pY?hjzUU7J6e{xB{GQEG<5`iUJGi?& z^13wU4$-NbXznrWS48$WU~(xn;W5)=-I+@?4h0%^)J2Z;AsqbUv143lzw389AhlJh zBK}9ev)KkR9NzcsX_8uMnP-|{#yF;ibkjt8|921c#h0!Kq5^qBUsg+}#>^B#PKz^$ zsfXo=s_rKQ2teOS=y$F=4a&O>QJt7>UJ%p;H$DP)%D&>Hmf5FXyB^c9np0*}O`>6l z9yxbO9jd@;lRVvxQh*Ax_+n=e7zL#^7;$hlp!3YPY$pPNt3L{RY!$e;WFcjhr4tNaptW8a0rjVSK>ABUqLt7+?|~EW;T8aDq_lFQ5W6emj+JR7%htseP~-9b_hA zZ)6TQ%Ta3oEoRS~p+6O+i~ZK&uUo|5f-|s+GF$?S)Bi2Du<4$bz$K}8Ji9P}1g+zv z={=1;au#=X22`S)EU77?yo%-ib+Weqe})m@>juyZitX-H?R#@b9?ruvzr1ro{l9~5 zXL^il8(b^ma$x-{QqEvcL4`j!0mWUrTXb9fGV5q9=CyjM%~8`QVyBbVBf|J~rM{6n zckth{04rcMn<;z1ceBaW>-$dK_Tt_xpMFF3GlGuikIJR+&d|46-CPH83<3X9S*7#I zSOD{x#j*&t1Vg1MYZQ)(Vrvay-hd-DlIkdEnG_^y$5JPVF(rZsn?Bx$Hr7G~itRFG ztF+CU(pE+VI-x#+-bg^F_WQ7($B1ckpq*QqN4EL#yAzwQhIT+74obeLA<7s~OAvV; zWe=)PO{c4?z_U3Z&xNU1Us%toa?C=UUnEHE0zg$8Y({w)%Wx-c5f#sjCTrAkJXyUl_e;2N_a1|a% z6L8m5|MQx_cjm_0p1qEENTnRDf-zS$!yd=hsqFr>PhI!cwk)|tiL>EQ8F3`Enh0j)}YsrDZW!;Hk#ThPvj7fCVsAMxIxicR7SP)g|+30s%Ig1AE(B>LP zSTX7{GSw|C$NwswO_taz_GUjCp2b(3p$i>g$gJiq?%&I-Z zuh|@0zHc9sJg^DfVXus{j`I0DVyp~~mBdB(M3`C|LztS6NPo3bE@E2E^rJ^73AUF> zH`?f(b>a2_%s3wIV)I2dJ%jFW`J&6ahRRxptAm4wnWZwhHVao5O%D_8ya{Ke?cDCx zbim|_nAh_m)0V#Vkk_r2>r9d9JSVI@NHS-IP8UtjhE;cpTef@KQ`v>dZp`h&2ovYU zCw5YPW0-?C**sT4Z>DmulXqp3sT0Xr8kDnM1Q&Y+1^lU%s4Ju7}y@Uq3K7tVH_$9~_@k!ou63RS9;p+^RlgE+v8mp6b z6ql`UkHfkbPSe{aFWZgpxCut5t1*zoNb1z;gj^v~!LNB4p}fj8oQM5_yf7e=X!Y*ejYD^XzoO|r(6VNHRZ_fsFt-o~->h;;hut1Ue7tmg?ruQd0 z-+7AT7aOiA6Xn)P$g3{a?n`z7B`G)#R&Ou^Kl%c?SW}qCo6CsM_+H8ifr7X60gT75 zPa9T`jSI}G>GxJz{fyU7{N5^Bs2DOBy?-V0IXCEOzASLBt*1nx{2JoiokLk^x3%<7 zJmpBQ4`s#A_|m%Z+HevzmBm}kX3{0P`j2J>FYa|l1}#-$3~P>#DRD#b1v{lxhMohc z!XCS{L{Nxi^YAYHE^|_H8s7fffY2ep{-sy{H#p!FwvC6`e0Bc?5E z4o%TTo&8d(4gM&g>(h@G7?Gg>ti$lZ?8OWLoj9=fOm-k^%HrQ(G@#11etO?;&6W&- zJM!l_A1j(D|vT zh2jy(WV!x9`UcA|*Qaf}z9km@{I&Oqi?i;($Y(qqa139ZJhl<_D8xf3m>E=y(0`zZ zzm4_{bEYx{BT8EyDa%Tck@pp-Q*JE*w~5`Av`b(&UTdp2TFh0Ku`L}PQD+;cGUy04 zUN}6E2LcQ<&MtG&kDdGw-`a0|j4yC4cS+-nFY+Xhc$^xrqe*_*&9nc!7iAy&AH43? z(l9hY6Q>~+XQ+JoRe9P`Z4pUG#nO88N_`R!QN%b=ZPZQ$A1RCdM;J>xo(hC*UgLT| zE&b@*&l++8bOZGv9T7D|DzV~X*X}m#pgGHzjNG7wFw1!>{2RZ(=q_l;+RrkZidvfU zlS|Q9Gv*D{Wl)JKeTs|SgVp2(Yxb`y8~8=<&NyEqVDKqxX7kg6fc{$A7)bZjHof%i zMlRfC2$iV>hVsB~tw9Z#`>0@_EE_dYQufkU&CP!)w!|--P>UcZp8A{Xa9^xzdTH6j z#Yh~vS9=qF)I5&p3ow&}d&X>sOtql~%uXCE{@^GtOqc_^=hc*z!vt_n8{Nf{j{k<+W-N?`(;ZP7|awj(ekXnc95u}2F* zwM2m|K6M)(XG~>HOtjBh^e+UqqnVb#=13M&!6Rs6Vi@dvRj)`FVNva(s4#<{k+m!r zlqg>40ffOWXikk&0vF~bh;ZMmhDhz7CPCF7 zD0sYL!`*E0nQ^g8^YmPbPVw*+(_3A*Vx;Hym>ugKXHSI$3@`VcLhJn>BYSV2BXYM* z*X?AV*B!SVVw|5tC7*!N(g{@5_J#@oc2_NqlH)reaEGq{cdvkGO{asAs^*PnU96NEzF1Au(UV9?A%uqU*RLCzFsgr7;P za95pO6?(onmid7&131mf;_SD5PuED;6GwAf@sA*vyG?(A5L9w4w$@c>v+^So5NmJc z(S+kYdtJW1+F5xJ?F%mKiZM1VjY65Gp0Y{_D)I)({b)5^q=<<%wYQo&Ly@v-Jg3+5 z&HYmNb57dK)noXFW$(^y;=1SAS74&nJnV0H3@2O2SiJDf36wcsi_3Dtk18biFE$9r&mVI6fWUeVM8zkM|uMfTUiK7VMB5MXi=(!uy$(jYD^6Y|uE% z(jj<&hhZ?(WcEWea2@m|=VI)jvPE=Ds%vky;P!I9%qWOJxT&9N0AXm3xfcC-4K?_b)){F%;vI0yBKQitEAsS4Db?9{KX)zv>&dC^ww=2O(y zKeK~6?l*IbltRLa=ugtbY*vS;RBEuwS7OJJ$m^gM$lhE(?dWiXI12z0M6o@b$SOIJEWK z#5U_fX}MjfeR^Npz%cjukU~jZx+ykNU=8(cG7n|1I~XMrV?dVoboHm`i-qu_1b+N& zKK|7PltM(?z0QxQ^i8fylB4%8&~$jNV)B7r9ncAwJkj-WDV(cb^P0)R@DHAaez*r{ z;sHY|`S3@}oKk_UBg^jOuQBQFmH!;R<*Gw_AYvww>84>Qw*_=OYU*DvNo1(FYGj`| zMAP4$UyjQy1|2n`0fp3dQ%bJPbGC;}(d#luEz2gZ499fu&dIPo`A-;UIfKR_nwVFP zSZ~4Xch@2{KP&zaHIL|XS>1?3H>|p6AMoe#i2QRfpUMZ}Tc-Ex?>L@#usZVx&8@dg z7^*cYJ*(pVmtwA=&__S3D#C12b~kkBU?iuxS^3Wam<-HVw}qzA!xM_x(7{mJenT>= zRTZp+C(Q51a;hdFL(<~0$wOIZP&rC>P#TRuBL1v+|NiC?kSRKrRo}|kQ^pAEg!lCd zl{^RpzjJdo&lwgr{u@6g{XjZP&Yjd;6t#U`Ux-|rQ_;g0zl7D>d>bZtFSex?Hf_rB zbTfNr32m0S;ArCU1}K8^UVV=2H=3=Q!$%)cvbInE*D&O`x43(f+5`cy$FN`4wDTr% z!_PjU+Ezu%DL9^Qk>}(8Spa5+jcVvifXo4E#5bI>xf#bCL_319boSt*2)yh>Mo`OT z@9HOAJx^YeL^hHk)aB8PA3m8VoOyGM_l4g8E3m-TN2wCWD{t zuOelax2*ntuWdzGsCAY|w|Vw@_9R+AIH*T%8uF36Wt7_4hrm+Ruvxg32TQ`R90kv=p()U~&%6{>6BHg9SfL}_$AoFId3qRbYmIg;EDrItM$=r1R%=e3)*A|L9JVp$#9 zm!Up;EGt!~d(`Jx0p!-B?;|7SZ~9b9=_Eor;p2XaIu?6*?`Bzg@>nU;JpIy<&8F<1 z>4AfBq>XDu4p(Bd{7N9o0oSbu|DCWA^m$;*u2X*gK|$GQr)T!Dl_^Kr*27(Hd%);8 zlmDXz=rJ&KZL#~u3d=Br-cn_lV9X<EWJ)DQ3{k3v~D0xTt`C+1(gv6#k!E)qLkp&Q}6$m%%k?+U|&iln1OIzJ=n$}nOb zaMYo=BQ<1mSaD{0o9z#W?7^efWaNUJ(c4mgAf{zowyEH&)P=|Uq|w{z4ln`M($LSM zx?>?7Z;qBMa_*e&*0XljzI8Q8PV>6uPCEo1nG!MjpV4?bi5x2}Zk3F?Kt_IxG9OpG zo@wB~60FuQ26CmKTX1>jdX$tT=J*&UcIr(6V8?UZ=0F3LA|l*GY6=Z}A>)4{-t+$6 z-e*?&Io>JM6Y*pMN-0>|R^Zk-Zphohk0H5X0@PHwg`7f5ltXoUe+^dBrtvG;l*iRe z%Iq_S9U++@Ip~y>+JWzChc_I0MRN(z#CLvfaFsgP4!wFZeJLe_^Q1@@=^~7vJr4Zp z$22+(l(!Xl*$#`X)m0O*+-cU%D}<1)^L!{0((AsHBe_HhF!EiyV^^ov-W>&RW8W_# zRvzoWy@FobFSiIYDUk#{0e#+rFqVDvwa4oDGnUxgsd&wRS1FXK@dCIO8ZIR_TXu(q z&iep|4A2C%3{J-=V5-=MjW9#y?TO=YOgUsA1>t{MEk0Iren!V+r(A?)&}Dd(cv9OJ zPWOM>v zWY-S9z;z{=z}fXe6ZckUE%r*j7A4|u$?bL=R5prg<7 z{=dli>{(&x|Ad?qm$4Ips2R7u$&%ua?KWj=TN;~f@K z2BJnuG_VbC@J9E4Sv%pd9C25ozy1pA^ISD<&e84TA2C|0BJ`rDr-upGUFTcF`1UJz z;7{p;!0E|iK|z7{%j0;9?U_Hx9(%Hyw^o_z&*f9sZE?-n*&@nkNejq znYu!6&9>FDsjU0c`Dn*n;J$85cI$(fp9w4YSR0sa-O|h*E=RK#K_U->J(y5HJqCGU z@7p7ZUB&&T#PS)i8{)FgbZlv^qZ9{R!Giy*XLH46nGu~$Lpzhlp6uo6PIQJY|7bd2 z+QP!@4p>NFb1Ytp+KDcc!NyL{|8t;zY-s3PBR{YWfIOPt_QV|6c?3^N@b;ICU*Q1_ zVf*#zEM34VxTE7OD!m0z+u+)o{WbTy7tA%E!lx}@FG-v08l2ko*7Zabx$LUT^uhwq z&+%KDah;aC@ibQSl?h-IgFiEHQEbxlYoj;No8ZeVF7xL%w8w=5oozXvUCec(Er9)* zqbW2+&mABqCa>}C5x2r_YDIQ6ditp4s)T^qvpPI1b$s^6hW|{n+Ud*iB=ANHJ*|L0 zeM%qI;ZBy}UiUyu@OTa@Yr9bSWW#BGMF)-XmSAv6yTaWL ztBI*NSaRhz(ybWm*)P|u_8rXWNC?f)h38e36|o=ewzsyoC;k{ZIT2#3%gfuhWC$jI zDeN023z)-DZC+N=*bZzm@t&=vsVU%=+$!XFqp_&_b}{CY3ifz#ODg=bM+mpKEf9#V z_im8x)-W9EjGW=o-^HdqT zTtvLDK}{sUrD$Sq5`*7&uN!d_Dt&zdT+>!!(peGw(8fmp-E7-#bqz70G?T0``@Hdi(l-bMB6{O~AN1ITa5*;CfJMkmso%vQc!!8FH@XF*&BL z)IoN-`x}6{^#QF(<)&4gdrLgK70`Bef_U|_MZLCGhK2;gz@An0G|i>R!0qAR&HJ*x zsFjqq{T`rnhDHC0OAvMWSM968!AFL>vXXxTN`-@VrsD3bq4TF%)tkW1AovZ3HlYtIF+bOX z?zRg%H3-D##FdW8?lGxnMC$x}GjW6%laM!KyjD2*^gFy$J^1zYSLXuo8_4a2)mJdb zzJ%9jyE0Kx3#VZQQDvyY-^nU^9)>p=Q=Na1xw+O9X#1-8VIFwhE{l{qVdLu^`MeQJ zz3OK{m)=WDCMVB~tvnthDn9$K}uXOzcq=sPJgN<7^KwJGF@B&IDmq--*AP3BKh$d97p} zmmVeMazKsBc^;&h6J>zmsnRCJ;HJHAs?0<$8m5Au)NM>yzI2LxjA?%DX@3cS+wc z={reG~_Ej@(5d>^x{a$iK^&F}ak+*!xFjMtg!2y_B|6vrDPK6K8S6FY~ zgA8zF94+rMa>`@cVTV=*FcE_!iD`HYn2#&MMOSp8AOsP zVHj=0PM1okg*$NfDPS63Zy(Hnzf)qoLK1jrpY!3acF=ERmaY-81qmEd4It!-xAKzl zQziJH{Y0GST;Sy~Ge!Gi=;$J6*!f`qhG8gMDtf?Gv(7~KWKx8AmtE=lpTc9HeULMU3zUM+KbNPlUXvp|p zFpI(PE*O(&2DWWuX`4Qm=*_&SE7GWYY;A4ye*Bfk?VVbOYc>TEM&Z(`v`UfAbIzQ_ z3k^@P^0$b#J>FgLfw!GlCIB)6^jt8`G0*%##NiuP&d_7~dv~l8<2li9e6QqYUT|`9b^;2m zcecr6U^{-uTTaMw(T6L*7XCjV;{Oj){GVv?|Nh((vmTIG)RC-c2PA`HudkROKz>8- z*1Qt1erXI5*}mlTuaRlPu}jueW$ZQoJ2JlYaW#r*Sqr~9gTtxxITI}GcAgqR5N1CQ zjU#U4;d7Hr7Z^HW!9-~aTceMEI<~W5A(tu@iOXdWB=rIzR+wI=a4$$S$eLZ%toT>D z`|PcSHD|)E&!XlO6yvDQ+^`5Y)}vIzdWK0NJeM{T`2*F1U={ z+NHBBBrQ)qPP}a(^M0l1s(LqZ@v-UC)TN`K^gyfp=}AFGv7BayBu3zv4F-{yPN8!= zz}UALMM-U7z}RPT-|y$SK5(Jlgn(8Ha(`vnxPL4oZ?m#~)jZ-5Q1ri`k!wk-3J87h zjz6Q);02#b_Fehubeohp?vz)04cR98x9ig=O}C4#T@MB$4~P*Dk5O_DDqj$LAkQbi z7+M6mh2@_q$%HP3)0zt=3V=c8^|wzzN}7zMH#T5B(GbbjRQFHJQk`vvWi3_(_n&X! z|6$VSkxw)z3)-vA8fLgo9^pq)e>W z{O2G0H=Y3sYFW3QJvC1JOq)5>S45Ml&tR;pQKNs|ptlRVkrE^5&>kTzN=trs8C56p zml1HZdvek>)&f@3-ny^iExE3)iH$pk97LsW>gTW@EQ-EFY*7}J?WHcj@vIZ)@ZC(` z=3RXAo4W1gsDIigLcyZ-E6Vj8KKYY8Ix6=_*8jF+hjm=Hv=!fVhZe=_9NPB{wQh!m zv53M63ZB$j%^&tKtuo=G(6)X6_mJf0UE@szsqsRSK)!mt#s}1tM~r4`6fW> zu;ubv+1b?o5Q04GlH&SRP^<1 z%(OQ_*|V3dTGk@hM62zW&o1g4!-JG;a1*a=Z7oOK+&>~apVqu~8_pB5@Mu<@lJ|ML zq}1OB4F3>xzDl)#2XeJiL75}qg;-(zYUySYafbzcXug%w>1sgb)&s2&?=NY8h65Cv z-+RFgyPy-6OOSy=OzVzzN#D2MpMUwl*j%LaSCms;%5uDPSjt&! zZfPpzZpubioMLwYoPXiJFR5%gonzlj%VRZ65E$0 zxJXDLVOuf5gV?M0_+7JviT(GEo)yZCJMNtL^^kDN#_Xj;6Ya{K9Oqcr0?mo<43rOS zw2tZqCC(ovqpo7fufMzY%5$u@H2*m@Q0{gSUu8nyc}Bzc$soD9xwv z=#HHa-VO?N?)+5j-;sIfhQ1{oxQ^Qhi#c0Tha_t*m|Oj1=`;kt3Y{0pIdM&*xD2sK z1LIHbMxtuVM^ySr_tzTy0MX;(f<%60D|4eqE_;>Chr}2YwL#@5%|x|yYJO;I<)aY3 zmO}M&{fE21k-N#Pr+89?y;pf{aBw+Vxl_G*^_BU?%FMuu!^g-8c}s*ty@{n#HS9sx z;$IJeL1p zL%kQNEkx&?#=2ptkdbnGfe&Oyf)J|%d+0!|{ni|uO)|~=VV;bJS%JS6+BAEotP&@I40^%XSOKMA5U!sfIXK!X5~kqPyD9j7dP(nZ(N|Cm1q;! z^m(B`@^~j;i0+cuqNkhu#1A^Lm$?j_eGZ}o?`@lDG@+2ytvH!sQNkzskoP0an5H4S zUq5=WC;o9vY^oEdSHk?DYyV!~#Ps(BFI1F#=ViBITf@P709geJ`EO)ZolcsQWX0;+ zcayDFv5F7DA@tEeJg-ExjFMRjb&lX__FRv!o}rUjTIMvfjpKMqQ%b`9B@2jNcD3Nj z*Ci^;&qm7|7;$rtO;8s@mEL4FO5K}ic3Kq%!q~Ct>HTcqs-3X60Wv{|o3-gTPB$YQ z90$AGcGCF~YZ6x2mm+<$KI?BK-0GZ15mEx3yBWDmjNv$|f-q)!jujyqXt&sprv#Wy zj72A|!3b&uKV5Jv0Do2A+RbBQB--;$SmcUe3#hf2+obtAlHk71tE*7z@xiu zHBnX=$%Cy*$hGZLv0cqdNY^UTg=hzEBGA{FFJE$SrvKG}QjdQ1v%H*)%bw}#vj69( z3q_lX_j1g;*N-93YqwaH3E7}GIw$D|mD_2`ONv*T6^x^&Emcuw$#y6{mRPUx%}|r~ zeJ-S>2}H5Wmlp{yZnWm6J1(klDKCa9cU7YFn#_x3s`bpT-eei5++1hy*u;mv)9?SK zhX2j)kx9iQfG=uCV|QQ}z$yM~C&TEuX)LP0rOA-%`7!EO!@PT?IJ<&%K-c zYG2fG>S3$S_2p4b(iqI2C4Sn!J%4&BM4VqAb#Sl0pF{TJog+4r@K9JSgi<+Ce`ZBe z&4Z904W^)p7q-J!;b0@s`D!YpR?6zaJ(t3p=F3>ZU(6_FrDcCFC@AU2 zuioep7n3=Iv7g;py5-ktD}_l!>`^?+n0_j=UHMt4QIsyU{wJQ!NA4b!z(ri>1bDIi z(|Z3HpRqDnY+3MxS$r?7z6R-IHL^_$8($iEyAXpPVQsy0i-GkdxebdbDuTer6ssfE zh)!S9*x!%11$llG8>91vhzR(pal#rp_VroL`Qd}g0uXWDU=ewq!qWs6?HlTBDz)Lt zKx4yAN#Dwr8g&opMsDdD1<8X>T64%UQ#*rw=94v`Pi4Sf0_e{BhsvtH6yF#w`E-PO z1zWNUTS>B)^hibc88X#Jiz(~9=}A)vjK8a1Es@!@O3x!C{^!_iyIfe*A8CLup|qFZy5M+ummS3(pL|% zAI}+gKRPBZ3jRg;(0Kk5M__)$n%a(VW1_fBAceYncwid7#yA|Jh%g;F3i&Qy;~@Pn z8xc2mYi<31A3|fZ1W$oploSW93Meq*zIRy>(IFfmA;lTH`n~z&f?xEWZ4HXax$6$Z zcuY+(=|}+>z~>>!;aYlPfSf)gdb!8t;~2R~PW2tMDVX^rJz-&97sHvc*~IL&`?jZ^ z;p}Ml`;knZ!a>e}r;BB$B3z>*;W?1>KI;55x@~2877zokS-J;mU_YWECGOW=GkZQI zFvUF+MTmX7Dc6R=zBG_Rr|r#G#Wu}s>q5={+`q-yZho>+WtOF~ z{5>Pfo+@!>*0}Z7tB5;;^jx+T4qFwk%fw1SeR-pENwNEvm^FS`J$6!qXo7RN(f&Fo ztVN>{X(x`66Qnrzh3$lb;MmKo)LrNe4{Z_#7NKWQ8_yZ;12#ZIzEKT4vE`4Yr4m*X zuh75lHaX}dw@x~H$!AN+LzFYzbq@yt!#i#UR$CNL^<%Adf@&@U<_Iz&ZtO+92%-vF z+VMo5skgg#M5Ly-^vOzUzB$fhe|O+{6U)-ALFC61qQiS4lce~(G28|hI!h7TS7J3f zuB=}z258e@ls87mI zjSr_(G3Ob3lUAQY9d1uj$c%hcZYIp-1qmfpqYZNm+*X1mD2ov9iDb_7 z$&7?;?<>K~j6T@kJZtC~$xovf&Y8kvIVRj)zW^52l>^I@ zXChc~RR2Lv{eYbcv#nL}T90Ynb(gab)T-C^mUp-7T}d{giwdCS9%hUJkVfw>A}Z}( zTCvtZ_^U@p=1hdU!i0v`5PK<;I$WQbkd3-q*G9vNc0#ebyk2~*#8tRUmM+6UGK)%m z7`kQh$ruG9?0>1Gv(0fSqCxDh;PGSA&l94J2}Qd-4=&%qaLOwQhx^CP+|_Y)op=1D zzU#JCV+<8@cDn=bvLm#lp-6Sf$H>8&ok>Koa4RmxA$-O^yfl;2m74f9rn}my7F83( zdRE!5LH9c=i%6?(Z&TRrm`hbiVwb2W|FR`L8`>=kFe~%nI^Xgv;dxpy016Q!WP5(3 zv8L2Jg6jOra~g7#Ps6U=?!!n6AQsR-QL7kZ-twi0$N?wEc1>ez zcj?AlItkgX_021;pxTp=EoBod{5TO@VC}5rzh1Xa9Ggh%%k5S|4Acsa9{!XKPhwXM zx$3-9Y%Cy+&s&R3wh2r;`q=j+{c2cXTeYaz#x&rLmcI1%*JFm#$ZQu@c}G;;C=!1L z;UxOmAtKeN+GLx~J<$@1Ib#^NEW1Q^Vr?Eg=~;ppLA^{W!@1Ren}BCf`RN6; zP)GqEDyCWAu6bivHR$6gs8_lyZ`&ktm#i+#ZrObc-ZC$AC2-eIX5vY9bZUh7Vj4edd-Pu71OyRTbAt=+vcKMM6EvGsC=mHg zMHpN|rO`F^$$jV>LnrdHq-BEtvy_R^sk;8P*TJJiEm10G2UlI8+^30dmn?Ca@wLrR zPw=}i3QghQh&U~ffWxx%}_(bp?ZYHF};bH|nd9=PAkg_Yrzr?NfbY zlzvX;?*lzT>?R+IOQ}s@n|Uu9iw6fqJ*+sU)LngN3HCl8a&^5iKc3|3FvoTrPIfT> z)BS(LY&lSh1v~e5AJO}jNuTNqHDT)?e5RfJPih-TPEY+jL?}o&23*^C%vbmPxR1p< zjwn?AZjYz_w>`dS`*<%QmX;(2mr;1IsrQKmxEUD>>DD>)h*Z57%tZF^edpVE1*!+K zX#p(X>SqZF@e$ue8CW+_C)c?{cY#$w4vj#UxEW6M*In)+TJTcDIC0rsk{Azi3&+$) zR%l!fqm+z*x9>qOxv&i;M)lq`ZpGns#KQ38VwR+oA$5e9X4VKcWky9#duug4hnSSG zyOXNGj#SSZOcZOly-+Cx2=swSij5d&+`t7NlsqKkRA?f}Otz93v%+ zA|KzR1m15yhW=3#Y(a32@8C*Z{j0EphLUvrDHzxrhjY?3X96DF{`+MJ@P1c6u6T5Z RK?m4^r>kY4S)*}*gM-F`{`Tz~oP@Zr!nbeVmA*a%P#|9xBOx4?Z{HBVNeBxl zxn-PXg6pA*p${FdIdFuv#|I)Zw|LsS{zj*4m==U_&YezbYT%C)q-=1b)L2^&2%@lW z{z-fI(K!*cha4A^QGmbp=E37)YWi?)bHR6eFmXn!964Wt1Ns&s_i#pZEX=VSu=B@| z!%j^LK3%4m5EkM#FIT~`fU#AnDCYNmn^xzpOw=L1OpJ{G=P04yQ)J!Z&7HmGEN*(e zP_GvvM1Xs%c*Iyj|7iNuUB38mNe47RX$*9dQf}I7dX{h#?A~n)R6tKhL_#QOG#*)V zD(<*=ULO^qPotdU~~N42*Cy7NvjGTUwYFn+D;>jVK1}pp6;eOp#SXl+-is%cWW-aUBw> z9lEegiE7TQp~%zkR61Y&c}t1D^5qt7Q;?%QmOJQa zPDMcUjDL><>6$Yq*}nnu@vjW-{lK$k)MVB0%3ipnj&1`93+V!LtYGeVI+yD~ISS<- zx;oVgV?rl-=}no!(d4itcixX!7P$hGB(3&cR)cQ?eu}AP(-tDhHdIV?&JICBw}=AC z4BkHjj) zq@8X5;;;~MR=VtO;dK^w|8HpMUSKY?M^GmvhLKWQpRPIC0>v9ruclIR&-KG zHD}EfPP@BiGk(Nl`Lsu4Y@Q&F7gtDK8;Gr(J%N!ViMiQ#Jw@K3E=yUyJ@`AUtDumU zn7Hn=Lq{3!f3r=|iUYq}noUea<7Z2r8zY&E*bF*rhMX#uKNr@I>}vX*5rt>;ZTESU z4P?Q0P!#on#e&;XrTXk_#PZ@)J}%LVmbE@R8MK8}5dL9p<98yTK}MZSgi0?6dK(wNmd-LZ_WPcpCGmLF2vs_Upu$>iGbu|u zruFFlW&hGws(1#pbDh%2q0)Uz_Lyq#8kge|=)JnWVEl^Ty-aUm==^&Uh1Xa6Xipeo zQ8flUMWtU9Z_=$i_=b9f&(43bwsNtdc9;ljJ1+gOJDvE0u~e&Y=8tT^<#1t|6RQQz zHzjD)-$G$(AgQE`;ENslK^^bnfX&diEizO*G1>q*;@o&xIemr{V6N()H{P_N{Y+Yd z=f8=j1J%g;o^UDSsBMSZ99nj#376CA!>~CH>Yce(mq>FB%*OD{{pXjd9|-+T?$Y-OQrUw-Q!D+z>lIk&BbO_Vpyd$4Wt@#6Eo$mTf&lnz;-Mk>jJDqv_Y&BV@ z4N2)G*7K$+zw3^H(r$dJTZ4#%r;_USGTz$AR}n8>fPlvx+U5Beo|yge{DQ>>4hin} zg0x*v zn|h80VVe`x?i@XnC|=|9Bp1w_&~8YUBlF#T%gtGIn#U*+bS*NCX<`?vR0+r*H>fx1 z;+3vcs80-@&}ws4rdoEzR7s6~s#Yf7h{ zDc~=dTM#RcaYM-XjTKGB`h(@f->k7L5Y=QAP!hYhha{x?{&N2V0WNMtdDEx+EJ{NgCQaOi0KTuTM3bFhQflpl6wu*AAVQY7kA}) zU~x2~>KB(8L!*57gdS)Wdht*HP=`299T6mfE>w7?U!m)Ar_+BvX~1X2R4hT{f`b$N z+go4_n%$sYA5*2>9)-d1HXKX*c)3Y8Ovf*ca>WFH8EXlHMXgK~q@Yd&P%UEr0Veo; zGi6z=#$E~GCM2ZA>diqd5*QyW)?57HZ^9q^J4kThw2TTE)z0N5b^A+^zbK6(KVbd| z)0w2+L@G@3C%H7n<=L5$*7-`~ZFRS`538n;QDC~}Kt|rxRgFw07im8^!Ps=Ngaf*_ z8ksVnYBlG9FbnR`ZO2W0^P|kJ7u!@!?5C>N`C4`OTzWmyLfr;C8%Uxkv53dH=JNMp zLR9tO+>0g8$%l7J-FK)=uQ}oD<@jOP@S+T401YsQ|EgXFG_Lnhb z5FZgwL!3j%u4f0*e`1;sc1r*sFG0$aEbjPR-7{i>!jmEt3npS|3^_8~70>9Wkp&-J zRy29EX!%QJ$wJ#Wj=gBqQtX%+`mwt5G^4l`?N}@wHDwuJxWgV&Tio`lK5!OTkEJ)7 zDjCgKtPf!CUB^?Hd>EPg=tPbpAmOIT z?hevLG?=5MDiSbCAJ4Ylet<$+8l5iGi|sSMb#Bp(8>h1{moJXdt;-1y4by2UTEOk} z1aLIl#wAkKDF`T(iAxslmc|E{tBN~tsM8h$(EUnKRc({4-hS5DLDYd^;oA$v?xp$! z8vYb!aWqk4IXON|qrm3`@v$9uz-C%H!xvSYH50(X_Da;4&}SIgI}Cxn^WZV60xq%t z(Wed>D6m(%%L%2m^>wT&pr2!gaT?6v26?d6(TRI45qu^Cp9nt2q=;;{P7^e)QPaYk zhZ0GZC74yy&on4nMWErMnO2RDoB8v0r{~Kg`2LGHBoV$xFf#ah{?-C};lkdF`?ORM zdPdO{-Ic1cECi@n7RrGYnSEGIjl56mCYzaJpcT~J{JN<7cet<9?qk`%&T$cl#z*vF z!qQ(YY9)Nz=+?#dz4SX9l*q>iZp1S&b?$tM8;a~HI-hQK-K;{L&gGwNJ6v|%sy7ls z21;7OnX$Qy;M^I1u!%l)KH+6!Xwv5Id}66u-%|+>hRm0y^;p2xgN!U=X;n+YQm1GJdfD_ezHjn4pnpTl?YQNs}SOGKw z-KMUOmKa-UI4PsMi(lwSj^DxMrf-Ym)aLF`bUp;j%a4oMcy#K-O$w(xWFv+`&S-Lx z332*K*(gCJKLKij*phJrRQ<>tE^;6Si1uLXI}0lZvn^SqbYNwM-KoeEqU6{lK9hKk z5{mYj1j^t|3p@?6CKQ<095?9eV-NykvS@g=6xk1))`1;HsLRBu)lypo`mSOM+lO4J z(odJl@#0Rxnt!*gQR$r z0j6n&f<}hg=Qp&+ZchXVdiH%3J*C1RSie-X@5QpJ*G=8nDa*OKu12(|ar&!GdP&nA0O-ZP*afmcsYM z3vWSYa4%!xpw{MW!i8~Ahw|hMrUdyAn4~0;Lezzl`3j}V#uh=GvLY#t)&J503Ki}{ zE$+6=Dr-QzICYj(J$9>BL;YA-8<)FVx2AviBtHOssk^U0GU(vr?X-dsYRzmMv{RU# zj{lhWpAmioq5UOUSxSv<#W)EbI4%d48ltG%Z;9|ZdptkD#0BxZpb!c9`XhP#1Pn72 zO$SxJ9}DA-6OoUI>=vLzR>$MD&UqhOU3Ikr`>rvfm5hAwv&Ba{=q7)qi*qESwX+TejR`7?;2fmx&i>KG zmPu)*?}Dwy~MIXuNWyvd;A+65QGY3D9$1?x3CQy@7`^y44J=2$U%-pbt&yXscLJqN$>@ ze?<)&-Eo6VCQYaF`Q!e43OD+&fjtcJUm9-ISO+rX`oG;7E zG?@zx3;VR4PB+ocru}IlXJUoT~A3+s9y-=z27DfafSnl*3mi}z(gqwPGf&Mu7*NHn{Y$Dic zsZ4xKm=4us!;L>TrgJ^x=V$?Pt6(nC#YW}5k54ED3=U0KcJ@J_hAsKUIW;$Q`^m~i zv!&;zMqMi`*$WiO>052?`r;^wOzgS2Rh){-c@%@$8WCmAas?a_FQ&+V}jZBUxDko2;z??ea-JT@?yudng*;`;MOW;X1(ck?7^|I)gr!5ka+zp!@bA(o!|2 zj1U`k8@tQN&Q7l>j32OjPSs)0S2b@$h5D3^Cri$*7D`0Cis2m3hf-83K69Fw+N$#S zX8rrw71s|wh+B>=zeP!5<3=@oP^eHY<4KEbT~Yx|;&oEUpH}!&S6j}JdL8YVPIOJ& zh{u4f($7}xlV4)go2otSFwT3M!fUR@OC6p85}p&>Bpe@c+*g@Sb$;Rba4KuK`D_F+ z@#*#1=Jh>U(RA{BB{g;y7g~*#Po#7Yes^Ni1Dim!%$tmLEK81@IcHv8?K90n67S#` z)G(fZ+{%p`!khfIsYv4jdof-qbPN?X<(REu;0$i?wY>G;j8^S1QH`?1-y_TreIxJ7 zl_#@AnF^wZ?Q$teyx-N`U;TD2gwmQJ%ikaiT6|RFGlwh|uI~92OQz53C9;Ckj_)_HT#-e+cXbSE!i2jl15V-pg0%{d&R=nOvvWgwI%a}x4-gmjmH*zg|JwIYbh`6Ddi2h@GiFuV-LWw-6kE6L zk4Fa=2f-DAB0I8PaSq!zk>r%-B*>KP!`-@5Hs3#ZhaY~e+b(_r7K--QQsa>zZf_iJ z=8ugpJ5&`E82Io5S&fEsrg)!+CnnI;Bc5$OgQ(f~{c3+mAZ<@{aIfWG^1Ph9X6NJg z6Tm_k!bRcoad=L8As{^ZKAcBIw)!4EG-k8D**)JR`UM0R6`K--Gj#9sdF%kaeD5yO zWdwH)_zW$*?)F-nDmDJO0;c=(vu#Ifflx?^HrIy%eJJ(~E^cdI2!i!$)5I^;;Eqn5CymJjPEH)kq z87{XwB^MdIus{uF1napvk#rTL7@w!5V_(?}T;7(?0I@IGwH2RE_v~cH>twAkguz~Y zxs{goi!wBvuhvrs36?g1I8U4(K@Q}_<$UXIWg@G;whm264q9)2EK@qk_R%s`@*&;W z(8>0FxsGezbbq>%A4`fI1{rsK%^ic=Ebm&cG5ti6%h9MTT`O2TUHoV{-buu!os`k$ z6bT!Mi_~;kYkfpyH9kD>{=7XHugJL2UU5BL<9+cNFS6z$RZurxHY}cGN*(vPI#)l7`ij1A@wAYUr*wX>*@9%$kd2wrL z=W8z&3VFElKD1%3gT2-KP$iFgxV`4|+@`t~P!%X&=WN7haQYS?c;JvCcxXy|Iqt5KwWEzKIM7 z_s2;VwzP5Tc6b?nZlll#$0o%Fh4#Q&8#hgF@$U*sTC~YjBOt&qwDBMwX7E_&9e;lk zO4r>0zp`@;s$^`%(Wj?_L7GU{ZL#~Yrb8AWZ#ehoVo*9Xl!)A&dJH2 zu{od)73nop!b;8ie6zjlCRbN$kH=UeTVE_$wRe!|srj)2b2vv>#xfO4je65_Tb&f3 zbX}cm5UI4t@N4TUq~aLudt0)7KJIU)R4aAvTg^F@Aiur_B`2FEPiDp#rz{_axNSW0 zS%0|CWm`y#sOna#2wg?XwMl;D3!Qe>W~K1Su#&uyu=ww7|94YRGkTLQX=qXbj@vEa%81OBM!G2LEX38 z*EdH~nT^g%diL|;Nu8Zr93df)T+XA7LQpIJtxeCL=)LSXP9M3YkeH8`bKd;jSv5aI zZ+;7tA|iRArXy|uTV$uI$S1W*#=u%25Y^dTZnP{k$g(flP5N_qdD@6z2YG+F+{H)p zdF?0qX*RzrtH})?UX#h-uo;h%u!gf(K6E_80IZigYIVDLhqX?;Y(87dU02 zC;s$pHmkLYpuuc_XYQ`!}m(=8kE73S%qCKZpZ}p@(X%s&xLnIiVh-tK|RX2Fy%U7~~qU++KBJZ2y(H z1@n5J)jQAq@P6z`NPM50ZL#c&wMO)$RZ-`g2e{FRF(Fon6ReumD(}M|D8*Ua&TUmz zppb9@y9_=c{=LD`IPDhqi_g#C!zMtj1~4mJcDJu}SO?!+?+5z1@tADlq{tjyTyE~{ z_XCkuMSr`~ferYMaIBe%ITo z_~GMoIH}9-{bH5>z;wPq$<=HN>X%!zV{_LT7}#H`NOrz_zjz!kM!0{{czVC*>pRfi z?)u@pclFWUT;0bpNKTT$>j?jqdDsua`DkcxyI$`uB#2`52-(?>s=J%c*6WG6xnWhl z`czOCmUo@6@x?OHp;n-kmO4Hk`(vtN(V2)?8xGSkNUGI3Oc#guBH@IGAD|&wEZ3La zLq$^=px(b}*FF6BGBPqi!s3gh0^Yb>&r8Q4*5Sm}?*=t%fU)99w3-{8rkh(PNZzjq z9+v^p`ws4r>nBc}PplhbUgs-tPcF{(0&u^k4iT`J5dk)vt%_4fSnhA^0QetK1I_FPKbpPoneHtzJ~5P&!hrcDw9rPNpfIJKoyk^FRe1+wxhg|I8nf z8TWmUbUdVedUCUzPZJ7>?%?zWP`Hnm#May|)uJSF2oPTJxB$1C>3l4gvpQeb*4Ip= zd=rNp-%h{Mo%fr1B#-OabeH?>mG>u(+UYRL^T=~KjkKj^5d_0p) z?_NL%eBZIBhermd^Fd>4b^42Nu}t>*(<)humKH5K6)y!vq9nE(IO120GmidwvLj#&)Zg#Gx`xo)? za(=r?ISaJatF9*Bo8G{tr%Mzz8^o;TS%zd`SC?LuLTO-Av*TeDmbM)`BLny+&X3NFIM2Ukg*4LB$+ZyLNTfY38D24re#hcq31pK$du?1?`Z0^5h z#w5(gnjhDa5Oe?10-oyqRKMxd|NY~2Ep&#JrqLj;m&iSPndLx8;S{A;?UVgM-dAA0W{Z0AR@ob~1hlgl&77qmck?IsuZ*wg?$Yo#452w@9 zQ&4DGaVh4ayW=@(3JOF3|3*ByY+%qU0v_`fGy&`&mKyUsIU-b!`TNCc_2oualk*r^ z%-z7x?2fLwr^iCA(7*#6n{Cz^)|r@xZx84cN|jcdY_b^LcLGA9H#}Z( zG3q;Yx{VdwLT##Ws<6Tb-uG>ZX1>%6QdE2aYId!m2F|uah4B zJj^f_P=nofVzK<)%UhoWVQ?G-2w}!Z-1OlVMkp2ik-~l?0Oy)EGg!Hjdq0HzIr#LPrA+HZN~Sv z_(CE{Ne_p!%>Zc*u4#v+_ty6S1U|n%+p4-geqW>-{`T|&W^I5FY)&cGt z(tq-Gxb1{&t&PMN=Q1H|zf^Z=ebMX)^{qu`{V##QCl2BNu>fOUxYG%M7*UMnPIdc@ zKn_*=hBPub)j0&H75Pa+)DJIumVAvfR@?bB&@4A;Ln136ZW|~0uQ3~f@&K9@KN0Za z_cUtbU81E4?TX@fg_@Rf`0#kdZlPQyYWdSQFj(jx>LEqlWn@bZHr@Ye<|QsMOXlku zkpn!Vu2BbUk1hpXGs&_|TEF!eK!I6hlGE59OUWCBne@PzNB)_eqz3B@D#0?+ES&8V ze$BsQihuG5eww|MzreDhbpLC5 zt|$mSYgAqgKX;@WzAfx{Ia}LGj3BeU1T`!GS?`rAaaTk6Z295_*ogR)0)vKPNmJC; z+>d6OeDSo}5^dVvcP1M69{GMrH`Oc=)QFs_cMzPbw`LH}6oxhoTRD6R%%%bG`;!R+ zw&xSy@Y(pR9_-9>x(-&21v6-_ShBJVW5v7P{{*;S;!>hfOErf}qQyX^|Nc38iaS2R;HCuU+-`(k#^KsJ(@q_xmi z>-R)xVNg;QMz1kXMXMD8G7W9~ zjBc}z7K@v*xj06L;vcPOb?H9dO3x3a%-ZdTw1=%`lq<2ZLv>S)+fmCby^7m)D_lp;e9-wTl? z?_kI$F2Lu+)z!*Fyi#MvTHe(BQ(B>B?W??Oin5u78&7kznSpsIMI#DLXM`tK=cAGX+uw%9LJI?XF1 z*BID258?1`gLv}1h7qYNm^awnWMnCK>Yau%C4~HNXvQ~D4cnAFWY6<8J9Ocd%kJXH zC(e{%IGX7-$5oTkn3DOBf~d^$k8GrfEz4p39>ND4b~oEZWS6FM72ADaGj&N2Unn&G zof6o~f?eHP?LN4q0*@m)r?v2kpg08Ec4O5um^&I0HEZiRi`SnlDgvDYpUK|euJHWl z@|AJ69?dc76Jw)jwQ3fIUbZzcTSyib<<=8lq>0T&qYXntd8c&M3 z0n#@(C+o{st16o*GL62S6oCoq_*a+8rEULGG}{kz%nOzJoB@Czt!yS4pKX^pZ3#SQ z<9(I-G-LRLkQPA3(v~VrQuFFC0KrM_)fFLd3!bsd_dcktEcJS3`mCFc?oJ}OL8|P0 zUr%?l@%rbS+Sa3qCiumgz(-{u8_}Zfe>e7(E_ehnP!gk!62x}Jy9lkB;x25S z#^F|~e)}h>&mZ6M*|ZPjDCV|Z-|xwrD0YGkKU%S-{vSytGJTuCs=gY?6v>W7{6 z?v9bKX0wR7=>L%0U-9Kyia(}EWIiY#$)WN z;LA2WD;R+%CGPvEwg{UOG+a#?BGdv)|2lG?(*s(GQa83&{hL+Yefsq~5qC@>F+PI; z7`;{kNZK182U-&PMdkoxA`W-3v(1hUl1KTV8|kk=l`m%c6|mwuj~uIkiLGsY1xTap za%4&?zxWu?=IqRpEJ^`*Z3AVrS_sL{?JEJ=#N4vynzzUqhVg17sLrBm)Qaaq7k3gd zd=2MqJID*NTnhEKiF2DTO{agtVhA}dE_y00BS?>!719s9U^G5{>HgM8IHqdzlPs1Y za<0~xk{>L$`!3A6eJR4UdACSxX$X1^)0TU7E-uz#-KAYHRCwFIWxC?opEnF2@H{E3 zSJXi9Ix~^a<*Stv511>D_Z6Z14T|g{bZ|XSG*A4U_bvSMgY*1cS`qN6K)l$fsOegv z`3;kbdkKBn;BMcy4L0KkzE~Ia)Cj28Jfpmhy19Uk$y<;RUnkDt5(%KajPYSD38~s- zv0eC0lX05bbEpaQm=p9oa;mw}Y!h-ew@3GLyWFF5QY}w20VVU;tZ6`4XmMz??D~MQ zPLV&{W-4p9P|-ItxkYKC&Q1&|Q6~45klHZ4^?krpeuY!`?z}O(x?4#NSk96hj&ium z<~e=5j~4T3us4sMI-wXIjRO7Gw(|#!7kM=R7ve`o7`&Z?{NMcaq5eD^HJ{hU$y~ol zy0!slP1`0jHo4-(V<+Wq66hdNvRHhvY>gL%48u9Kh^Y3DpHd=Veg%tIAE|(&V@}6o z4cF|gw~7Q5-%qdIao)@-1KMBZD7)|Ogl7k1F^+sjfJ21@%}dpIP{*IYex0iA;`~J8 z+`qHfO?F)2xVthWC^x9b_ROjf-dVk(qxg*Oz9cVR%m_d`BhTRIimZ>3uDHsRyBZo6 z%+lcYphXJKx0qmb;9ttwAfyW!FhrjX>3oq`R5fvYrX>whr?h9o+vKpnJ$uOQ1l37% zv;qn5-UPP95>{&M8)tb`>i(?M@IJihR+YVAoj3;Obh8i-lh$BEKZB+Ilni^AyWJU8 zZerE#ZUz6bFrVWmEaHeqO(~N|se8BodIM~azQVL3^O0uwt^VsyQVEZ}(}f&mkX~{u zRJn_o=}-D5>1eURUiP>!jgJ5`xe*~503|NG>7pGWmbQ8_@LyWMz-T0*Wd=hN3v8`k z_);FF<>Vm=8fE!kCfhif&RZ#3P`6hU2zMqm9MtFXAV4!;Or|6mP$9-8>=eRevi0k= z-eK4p>Rr4KMSPn!sko+D8eUnt@$m^rYw;|-GV^xVf*{UTS7|p~?kAdoODd5h-Cux9 z{z0sO<_y;qN|R>yWIqzS6gR3|-O;_D>`Oyaek66>(on-6lH0kqu9Y(E9NIX^pjt+q zSk6u2d;9ZKz&YFShpklBE<0h!@nG!;oLiHxeDNOAOt>QYyi{>Jawkg_oK8*TKQ*yv zB~t}we4=8N3tiQRc5|bZc9BN@)MR`+R4P1bTmkb+TBNg}0y zl&sM0AdIReFE5HO2U$@oH)6CZ4CExbydYAQY~)j=F~I-e-0ruRp>3%;{nM=Uabo*_ z6$-RtC}FnHU*vIiaY@jQ@maXJVp%Ed72sm%{*Z zxx>cWy}C>^S`zi81thT!I1-c~sB9W9PV&QHY7z2BW_nONBN&izLR9rJ)lq4nuxvMr z9rm1@%Qa|c*w{HtkOa97!Xr$|;|?}x%GlM3+1pHb&*isL8Z{(ENqZxHucNGJj)6zJO0D(3bkT z#fCAu936!&7p03MozIh~4#V0-XEH)$1!M>8Scl|NHg#BU_)V#l(l>^DA@lNiC|XID z&4|g0(x(%|*hW;O_;hTS``hzmNHBx4IlVgbf zyLPu5dTL0IT%CQp+aqCGG?&6&Xm#XCiQ~=Ra%x2kLhk;XX`_Ri;)tE8R4W?S zeB{yMY@gp&en5Cqp9m6!?0C40@;J+3LYx_}qoDfG(beC3bg=@OrVyRbiCUsS{Qet} zq+12u1?^}fgG4_mM%aS4le{izw{>S<@iH8H^&Vw=OHiWHhTx6wQbw%z8N{i=Dqr*W zrA>}K86#gKXhwh?Tu9+lA2tf*wl{-JapSfyT!Fvkv2QwwhTxb^&muAE_NTndv13-4 zQ5C-)mnI|S=t%4dk9WP&h%^Gw5)=0 zPC%eh6i4HbD`2UUaE2$Uq!-#%EO7QyzCsmMn?GChj3Qy|#1vc7q~+ATZUV}nrZd%$ zGolaNx2+iu(MF+!zAhKU>vzj-r1tlcXG zbd`w-5yii_{J`L9aUU4V0yaYxc!fJD+iG>9Ya$=@ZQENqdiRt|J-2CL0KiH|r>+I8 zHV)QjCO|Sp;b38IDlJTIp$iO3XGMmQZnCL*%2XQ#)J$qK$-T9QFMQ+GUGFks8mof# zSE?Y%6E=J7+-oeMr~3RkFIo?WcdsBVDB$aQ4Xu21NpPy0_i#!#@SLp;f@0uaIALZx zcw!sBD4_EHFd#2fj@UKf>Q}&!Xo<;Dr|VJx@oK-3iESZOs*XO49EvccHC6eBGhjR_-JWME zYc^LTGST;O`UkXSzGmxuo4v(VynXm)^Y?vKS&7mIJuSWq-X1x#N{(DJuLQdBVPYe! zE6PoFm*^~GIQRWB<;5uF&A9;wmkf4n>1`}#i$i~GY-kSU5P?21CZvRyoCZ5(@K78P zJdC|tf3C(Zj%A3jXqDi_H}GQgL?A^pP{S^&w>4nz5Z)5T0%9d4*XVbQ8Ai&4_-KEc zrg;@f&)N4cB;kJ(DVBQugKkq0*8e;IFkWiF_f9KLw7lJox>E9Onl0F0XD${qMGcHE zyD!i8*2kB#^JHFw#WiGV_`AMoRRKT55xANKl3YQ0RiZ=~Xo**kp=eWws5U==ESv7z z{^796Oi{GCv64@%_ytLYhvO;NZCh`%OmVjxllN_v8Pu+5<6Xn3GE0I3D{d8 zlZVnWFpe@*P!zR9dCZr4TE1zJ4szP!{;;Z0(3!PHtfrVte*Mo)>CX|l{rh8N{!%Z^ zBJe|T6`gCX(P7PM1yfbU7CYgAUqN;xG^UX&PAIToE!`3!{!rkAd2qy z0wybMOxQ%xr-T`+(A$zuZK>_@glr*1&roO-$2Ei3QN;IF1#;iz$ z14Y}WoU*XA9>4N}OJRvisC@C93y`i#64Y&U3iVhUkftcU=U>0!d7-0}Z6=0ZBHwIQ z{)Ri_Sg7XuMb&LqUAyH-EHMwd4i>2|=}xK^^I5ueybDdQ*2Or~TaB59noG;|@_`E4 z;yU=VB9INn=#3C)xllH2j7$}ICi=nhE$b9<)SPN$46%j?zwJ;H`w2AfG%G>BBnkO* ziguCb4fm9}%1*lDV}5X_ZvFe-d*&sje{={|5dnT(=_P_Oi9RnX)t>D~2SXQg%j>Zd z>QbMQnds2kt&~82$?NQv7^g3)?#lBYRDJA~YYJeMF(5`L-kYm9owwy)0+y@9!$RS> za|IYY|6*)mzFAK#zxy_zXdlf+k0{8%epK8ZJ{`JQX*tOMV)LCCEY}5|f>Lf;b^Imk zeLqsBT@<=#34PbWyI^$0m?`>5IHNUELC+W_z(`}JZAI{L;x~7Nm>j7KUmj~bdnNuf zuRCoOZj8K;|MUi5*~uT17={&j@%P>8DANHK!x_yAhgpB$pj0i9P9X?_U8Sf-eO`9M zN~a!b-M=m8C6|+v9$Lf!uX#rcRZ`kQ)PIRjQ2B|OD=%Kn$5``a`-kGx~1pwp2q=`&aQX|EMRL-_`9mT+sstpsF z#!8=(X|k|U=MSJVnzS`|r9a%kgC!}23Gb{#gk{YqoTe?W4A9BZ1&S7bDPa5PjmTV> zX_3t|ZQQMxJ!d%5WCK)johX8DJ$&SRb}~e`>IGCF6WWg`G_cPs6%7b7%bsv2k*WA{ zN~DL0{J?J__l^@;q2)VsG=uS_kqAVj8F7NHd8ncle2LXUp`PgXE%--g_P^ z_eW(%8jBR0-+4gRTkqnu>*B_M(5l7paz_(you3Ek9{G(XXPZ1VWt$e; zwvF&sj)t<=>IqF%4$_5xv$~U@&wXWh?I(3?*5Iu>UY+1`=A;F2Kf+@bb&XgTXjq|s z0?B*=Nf5A<{ZjzFKZL6K5Es_?wwVs0MmJk-Wdx8I#t={bx+|_MoWZEQmH_}`GCGpM zxx8u*b}qm4>E~J@RGL#X2{_!ZC1@0!wlxL}K320wCVQVai0bb>IJWaSnp8Pu^S;JQ zcRAX)xUO)<$RENB^L*zERjD)#J!-li`Aov_mAS++We^Cd%&;tt%#luBUdqqQ*F<6d z(f7})y2zT)S5yetyMjD>lXKFTEFRiHd9V_~obMI#STtcIgx0K#8Kffs=LYyR8x68=c zCS-hY4@cma>ZMUu$6dc#SUaa9!~@g?*1qC?kNSSu-{6V7C{Nr3GZ~5xWcD+0BEq%pF$=%LZeIRmdo61b&V4Eosc=2D!R}+Y^VX zr*e{hZTTxA-)Ryip@ysOSW|8MK~uIH?|1+NeOK&U8Xt!uwZ^yX6bp@ zA)h8z{;puG+A>N28vM20edPwpRoZMON2Cm=V4U>gmTB@Cyp-#a^v+gO=cIfk5a3MT z@B5L~x5Y~WnB%Ro0GB5A`I>0*h5Y|QwsjVj!*q(N#|v7XQO5qoy6dR^opoPFp=XyYc0WTue zL=xkBoW9Iw@H%J@@X@u1-!hBIL+;;hGA$cTa}C3ncESy=|51U|wMI^k)2w#(y(+}B zn#2n!mF(NOh(RSB3S$mNb2w+vqC=CVX1(0}A6+!I?|19i6Y5l`rz9lN*4-0!Px>*J zm|7k(q-=MBQdR0g=bxvh!oCEQ&&q+78Xr^5w$sy{$6(Yhp2-p~{%i4y5#=}vqc%1e z-kO{dd8|YPGsc0SpTR;%#}_QaUUw9?(YPb!h!s z0bf2VB+a*In!i!^1J%?cbNfXYN}O}T$l*YoLy>JJ3XnFt2=t1y|JBNUMKuxsZ30&j zklsXk2_PLrij)YEUX48v`A~p1`fJm1XdgwKjki7B#?t6Ck zV(<2D&YZcKIdf*_H{Z|mxJi}y>Z$MzDceCC!LMk)`%Ro}07REsmqL$Y2GUmCQd!&= zhvmF@SJZscRA4ZTFj(WE%(saD6|$b;YPbNKR}vTm>d@eM+&OW`n|}l2Wle?uCx|=F zi$&z;dkk~T)6zl5;zoykL>aF;4UWKVe(zSkKFn!3kB@Qr2UA+m82F?Uivj*n3lMhg zBo!QN9@^j<>V`h2czLuKeP+)hXleHMm)QktK3%a)H>M4(=?E3Ul$%`C3 z15c*7Snk%%PrH0KY_bXy`9&CBE48uoI|#W}{u6;yEYRB+4RYN|R;;S3;?vE+zFvsh z3PPL0v8bJDlSy#ve=BSill2?=gRqO&1$A{kTQ%cHBqXJyUs(Qm&BqNg4CH-N8B53R z3+D{Mk1VdHf`k@h<6TxZHstU+&LRXyL5s%T=$4z2ley0MMm!LgmYz1d>qKmpgJ*Do zeR;%9A?KG2%Fzj=6z;Nqe~VtVpr@QpTk3c6|GfX8yyo>*zQ1qtggDh1d!7S4gir5C zV=jh&96`IY8d3A1V|;m4p9dkSnbNMSr#kM4hwvR^!+<4f4qV^Vyw z#rmo}n7-Yj!3~5vlja=%F=;K$+q2B>NRkLED*lD>t}pV?GGYAxTCOm38m$S@A)onA^+io4_)k+^3rCAh-C^(*6={ zi$3iPu2e1kCT9u%#hp^!yhxuzXTSZqf0S))?Qu!<0(PQ%Yb4nRjw3Hg5aglLytj=VHs9RevVTxj-$*hW^c}y`Z(iyZnq+RRJl_d zaYG&puEfHQ**`|~6y*RLI!l0!RZ)>q4;UEoK%uvPzaBljndQU#!SQRB(3|bO#>Fq^ zD5Lt931W=%*2DG}QW@Txzq-*yB&!aR$Z^|!H#fdSwxgpXqMs~M1laRk*%Kqd$tjWS zXMMhV#KDdelkM+gepe{ose?{s2w)wEM;ORYEom%}-*=EvmfTT~>#$ zt8}yp1b2ITzs}6alu2Q3Fht~A_J8NQB2SjgPUZe+m086nVB)vw)y20`Kj=-rMWs{VHKkLOodHu?x1eQ0SK7Be4 zGu}k*?-Qk(>c6i2PPXz;F{aLoE>cUFMd-)+foQ5mvHfT+!gq%+-@aGUBb4s>+i;_b&D=RDNo+jCH&`b>= z2)!$I6VCx6YNkJ75Dq*%9H(+dXlf^h2H^bgDE|djd43HlIX^3CpPD!GMU?WxU%f^7 zwZv;kq-CgiSzrj(b756|+ykTMy}q&0hQ_LU9+BWLF~x@Zbwcjm+`+V>2CEVnTy@17 zI7i1v6FV07qyeg<1Q4V;?rt=xkPkTYfVZF~N~MDjX6pN8gsG0%B?Iop-#6-8dwuT) znxt?`x*h+bnQak5foeKB-g~}L4{wrM3MQ^#n^W&ZNO*ZNPg3$cST%O{@fi8Fr^haSge;G&OtTr+X@Q^L^?X zeGnJp2%3+tphk@j4MpwHG0#=zzKP1(KS`}9;0-f-v!u{AU2QR6&V96I!g|<0Ly0H) z)#R*V&Ko`#smdCy;xt?{)O)zYaME{_jAI;gRmK&Fc8?=km0>3zYC$HT-JkP4p!-rg z!K%j?cwlHGO@q^}fw3#7kGwA*jb4IpOIsgiN^D|ht~N)QCQz~s#n029wNk4Q@BeLL zp`Wa>Pud^z#6Q5%F)PXdBa$kqQ%aq@r>K<`9sZ{xuD?G!?#(sGdm`_Lo6|HC=dItM zmm;6Zt84(%cBtjns2x}(?CuLkM@Dv`n<+p!@}VK!%?H}rkAi}ZV(It*K2#;@MY1Jz^0RHi3CfR*(GO7?IBYROs{blut z6=1Z#vY(rqLb7VsM@|OLYjoMBjj8xxc#Gl~{}L?s1uYlj&NkEV7+qPJSk_#4BfY{@ zf#v8uxgY$?TVP)&o7FsD?^iq6acg;*{1SN^Sl14IEF{)?Fq6w*SWd5 zWAEK>-WWn4WQ+lLag09QHf-_TGiaiVnY=lsix+MV-#u7t0=oUpXlrR?31{;dde!3h zA+aNYrSbQ~gtm6K8*cGC9g%RswV@UG2kz>Gs1T?J0#{=0SJA6bU@^|>!NGTo%g_DyPL8J-}OX1KX}oj^7$Mi4~%bRm2USxy$DC_^3|x<|`f>@#w0> zM93({tS4z`pK?kxsSHC52kz5;lfo^?VnO+T3gQi18&trRV@VYDUm3pezKu5>M3h~) z+jM#}*{E}|+(tYfG&ZUu-ga*9HcSN=+6ivCy)dex%u#tWruPGit<75HZjbcx<9B9_B@Ue1%xoD zlyD3E=Gk=U$u|(<=z-bLIV$Atit6*2q>hl27GqFs+9s3|T%X5bvayRQ#=4nv9%5E+ zF|h`wq73SCjwdw?*jbqN#4+gIe9=}7yr)`AJ(FX)UY~E`@w*xFC76E@s(^A@h~`q( z{W@6Tf4=;iDF*ZM`M{i;w+H-1xy%K7$#f}wk9Tk~2j|_p&aSONMkV$=sh*MX@fYIe znSJ^i>Tj?0&+`TzKDca8tW=`Q<>mywD?j{RAE?JnX8j9-tt1(+=3n?$3OUgk zLwM30rQFZ~h}RxA%gX&du8jA<|C^ll zNmYAkx^`-mOGHUKI?Uiw@@=b1PIaXgjm)7&4)+D~7f7a>azPSzs|#wH^;M4zkJqEl2Qw`E~;hAJSe{toX^ zB7xLru;vj}_8*eL0a(YGd|t`bQ5yMYs)|dhU(ZhrCLZlK9S(}MrD-@GIJPGhPHy8X z)(Q#cKm7DrtC11r1)P<(xnD?wdF;M3J|%ttSq9dq+KR( zLtm+WLTzc$*XktgQFD%^N=hapn#bMjo8m5xKj2($LkbL`k;J+0b$-Y zqnAg_!{V7?gAhCeOHNba@|=CaALjCYZy`iGBvtpe!b(sPIy3bEx9 zr!p2DnvG?CKJ{R2hWRn`5f*7bm=0+;NAb$~rRf%TB@@BXkfu=JW$XzJ{OuUM>-y4Q z=1x?dZP}^ZaVTAi@Ydrem$FI`RGE>e+Dt<2rncRai#%M>;g7}#!I^a9N3-OjG_Pi> z+F4DP0G%8CmkF*v%Ar(ad z6&aeWV=3{_DiAb)K$>H#i`C^KXU6L@ zM!Z$*^2@H?*+bH+7J`)vc#zKu!6Y0r&6#frD>T;i{*4C@G?~x$H>ADz6 z)o8#--mDihP;~wZxb(xPUVQ!rbe@~#p!R6(P0C^pCfxqiM8qFW2CBh6LP9cOln`vNf?k?p!o7I^8{##(G+oLr1DHTI#e=ohIMr>A# zkY=7j*W;#f-^}@`RU+%V7{IhP3eKs-oC9)vC|0?D^` z*5$0I(zCY3MVM?k@4p}E;JFoY{aPol>NeI2qm&{nP(NcvR%Dl|!^pfMyjEnJ-t{9m z^@4>_HZ&?UH1O*LGjE`@|MYK(M+?@(gkO)3UgsurAoo%-R8@@mU$bo>1N0?a6?O zeBBW?${!6xoLA=AGu6+O=?~2=Rq?Z5W_YZ(%SGICdgLbE$#hax}NPH(fi5;p_KWM+hmp-)zWb6gM>4O>9 zBwS3+`nm!n26>pvchw%3H=h(iQLOLeM>vA4FSx7M`46V;-%&UmYWjTRswJ0C$XCK7 zbrq+`8ud`BZrm=M{q~V_;(z$5!yASd@MOzjkH##*pEezpw<1+`c7FMa{4uTRf=3GLOU<~i(y^)+h=Tmp3RkqKofWOFf3UT0< zBoj5mbiknM2OE)<`@+OuBe}NG@j5!v#}Ad#>&0}i503T^_x@Zc z3w^Y7i-QVpd$R04C6O%84*2fsiH?s-e;9!zvk3!rW0;9B?}tPS!{C!8`JXfs_3s!b z8dR5S2v_@S4EPd#ZQ?$$Hom7^I)VGK_aI#7>;!okcwANoLp?8?vfubP@x9k6;XGlR zO|y?T+_pq4Y+f<=^SxM2-Q1O^w=DKzLf^f8v}`s$kx8;ayt=)tuZ3h|gSmPUzV)O`@~WmlIg9w3&Vqu7boR>dCd(2NXrn;+GuCQ$lkffe;D-1DdH^Yd z`CTU2a~@3MZ>TOE>k#*%ky>2oDp^@;QU|$`kv-(e?#EwYI`%Qzg1bPcSPgi5Le&!< z%6gflCZ?ap{y3y)j+L$y_GrfLOgxus(R;>MFnf}#ddnW;f5TvVQPI>V3jsq4=_2qtN{1$15&Tn0A1y9rs$=8zUc z%x6)RE7&DWXM760^$@$ypXPJPp9JGY<^0ZnP%DvU>V}rTL9b!OwDyvOiHHt!BE#t2 zTTQsioy@tuU2j2BnVP<)o{@2KQl^+cyk-dX9IWYa|_vA^wSD`8m53*QIgjO_!0 zhgT-CO90ZQUn(Z*V-&XT>T)DGIv+T3y`iBw=jSB?aiQfYJ9Fi5;FQRFa--FIBIKg? zL^5KkCI>0MJS$LgEqKY70y}p0gEL7wd4t^(s-^ACz>3x+2}6FTuOve7z^oh`4n zWwS~K>9ZtEKXLSI0&BL!y82heIe(8A)DNCgkd4y75_5CjPV{}m1!GTnup=b9>})BK zYgTIG70Kz&8v^zEmx5KCfrHHQ30qno61fq$OZf8<3fJiB6e(+oEt~Q?k_Skmy>`x2 ztyLq1Po`Wco*CqPA@wqK25?`91&+6imjQ%{dj2Po?e6`Mvk+$fsh2d`Su9`Q8jT3U zfLGQuMxw`=k-w)pku~iFJB^EfkIyQurK=srUnh5D>M8wifXgnsye*b7>hj!@WiVyJ zhnU#)_N$!OwM+piY3Se=?84%?o#lFa#TUQN+5dM>JC&a0FiXC^>qbr>kAN|n!^fZ}xYLXh~M%h3U`T=It1 zP{Jc{f|>nK+6RD|*EJwCEyQ`#4V8I(4BUZeqTA98>8Z9V7YOMzK`A*XHZE z6Pm{BA@bgR-tO=2(vE6=qpv_I113}K0cW|tFwOg$(fNoL=qgzd2z1)~PC*@Z->42f zyNS}1xo=#eR1G`4_BDVjKHqrKc+tdMV${qYwlYxCF}mQ-PV4ib{juh&4sS?TsndVA zPFV^)MfBuPIjKC%`fZ?tV{a`l%!E6?<($iZGC9}H>Iq|+p0~bSqlS8`pu(~&;QopA zN@SQY2pUJmphbfh>K2$7qaE;CD3I@*%eJ9Iy%dt*{kJ3!^NDfM1 z{!_N`<5!>c?)`6CuEPN`MB$f+yAir+Lu>y^+nG3nsS)^k3`U?b7vT}ZfADj3ordC6 z$R}Zm&(%%)xGLAgnW~&N^-J0G@BS-MHNa}cbQ}Z zoqs`IVrQTcqY}eGqe~>^AUn54@OJl^okMbJZdrJzHP&52LnpnoEKDsxk3QlU5Lxt$ zbTt9o!@`+T;8AP#R7vfe(_7Z13cpbAwv(I`8hgwbPp@AtWsu3*ck)oYNx@BIcm@4WfUGZ-QGKTZq}n7T+KEJ-0MfbyTX9ti%2b%@liy literal 24711 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 - -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_EmojiPicker { - width: 340px; - height: min(450px, 80vh); - max-height: 80vh; - - border-radius: 4px; - - display: flex; - flex-direction: column; -} - -.mx_EmojiPicker_body { - flex: 1; - overflow-y: scroll; -} - -.mx_EmojiPicker_header { - padding: 4px 8px 0; - border-bottom: 1px solid $message-action-bar-border-color; -} - -.mx_EmojiPicker_anchor { - border: none; - padding: var(--cpd-space-1x) 0; - /* We have to explicitly inherit the font as button browser styles are implicitly ignorant */ - font: inherit; - font-size: $font-20px; - line-height: 1; - border-bottom: 2px solid transparent; - background-color: transparent; - border-radius: 4px 4px 0 0; - - width: 36px; - height: 36px; - - color: $primary-content; - display: inline-block; - - &:not(:disabled) { - cursor: pointer; - } - &:disabled { - filter: opacity(0.3); - } - - &:not(:disabled):hover { - background-color: $focus-bg-color; - border-bottom: 2px solid $accent; - } -} - -.mx_EmojiPicker_anchor_visible { - border-bottom: 2px solid $accent; -} - -.mx_EmojiPicker_search { - margin: 8px; - border-radius: 4px; - border: 1px solid $input-border-color; - background-color: $background; - display: flex; - - input { - flex: 1; - border: none; - padding: 8px 12px; - border-radius: 4px 0; - - &::placeholder { - color: var(--cpd-color-text-secondary); - } - } - - button { - border: none; - background-color: inherit; - margin: 0; - padding: 8px; - align-self: center; - width: 32px; - height: 32px; - cursor: pointer; - - svg { - width: 100%; - height: 100%; - } - } -} - -.mx_EmojiPicker_search_icon { - width: 18px; - margin: 8px; - - svg { - width: 100%; - height: 100%; - color: $primary-content; - } -} - -.mx_EmojiPicker_category { - padding: 0 12px; - display: flex; - flex-direction: column; - align-items: center; -} - -.mx_EmojiPicker_category_label { - width: 304px; - font: var(--cpd-font-heading-sm-semibold); -} - -.mx_EmojiPicker_list { - width: 304px; - padding: 0; - margin: 0; -} - -.mx_EmojiPicker_item_wrapper { - display: inline-block; - list-style: none; - width: 38px; - cursor: pointer; - - &:focus-within { - background-color: $focus-bg-color; - } -} - -.mx_EmojiPicker_body_showHighlight .mx_EmojiPicker_item_wrapper [tabindex="0"] .mx_EmojiPicker_item { - background-color: $focus-bg-color; -} - -.mx_EmojiPicker_item { - display: inline-block; - font-size: $font-20px; - padding: 5px; - width: 100%; - height: 100%; - box-sizing: border-box; - text-align: center; - border-radius: 4px; - - &:hover { - background-color: $focus-bg-color; - } -} - -.mx_EmojiPicker_item_selected { - color: rgb(0, 0, 0, 0.5); - border: 1px solid $accent; - padding: 4px; -} - -.mx_EmojiPicker_category_label, -.mx_EmojiPicker_preview_name { - font-size: $font-16px; - font-weight: var(--cpd-font-weight-semibold); - margin: 0; -} - -.mx_EmojiPicker_footer { - border-top: 1px solid $message-action-bar-border-color; - min-height: 72px; - max-height: 72px; - - display: flex; - align-items: center; -} - -.mx_EmojiPicker_preview_emoji { - font-size: $font-32px; - padding: 8px 16px; -} - -.mx_EmojiPicker_preview_text { - display: flex; - flex: 1; - overflow: hidden; - padding-top: 1rem; - padding-bottom: 1rem; - flex-direction: column; -} - -.mx_EmojiPicker_name { - text-transform: capitalize; -} - -.mx_EmojiPicker_shortcode { - color: $light-fg-color; - overflow-wrap: break-word; - font: var(--cpd-font-body-md-regular); - - &::before, - &::after { - content: ":"; - } -} - -.mx_EmojiPicker_quick { - flex-direction: column; - justify-content: space-around; -} - -.mx_EmojiPicker_quick_header .mx_EmojiPicker_name { - margin-right: 4px; -} diff --git a/apps/web/src/accessibility/RovingTabIndex.tsx b/apps/web/src/accessibility/RovingTabIndex.tsx index 0c59ddf936..9318a84b2d 100644 --- a/apps/web/src/accessibility/RovingTabIndex.tsx +++ b/apps/web/src/accessibility/RovingTabIndex.tsx @@ -9,8 +9,6 @@ Please see LICENSE files in the repository root for full details. import React from "react"; import { RovingAction, - RovingGridIndexProvider as SharedRovingGridIndexProvider, - type RovingGridIndexProviderProps, RovingTabIndexProvider as SharedRovingTabIndexProvider, type RovingTabIndexProviderProps, } from "@element-hq/web-shared-components"; @@ -37,7 +35,7 @@ export type { IAction, IState } from "@element-hq/web-shared-components"; * https://developer.mozilla.org/en-US/docs/Web/Accessibility/Keyboard-navigable_JavaScript_widgets#Technique_1_Roving_tabindex */ -const getWebRovingAction = (ev: React.KeyboardEvent): RovingAction | undefined => { +export const getWebRovingAction = (ev: React.KeyboardEvent): RovingAction | undefined => { switch (getKeyBindingsManager().getAccessibilityAction(ev)) { case KeyBindingAction.Home: return RovingAction.Home; @@ -59,16 +57,11 @@ const getWebRovingAction = (ev: React.KeyboardEvent): RovingAction | undefined = }; type IRovingTabIndexProps = Omit; -type IRovingGridIndexProps = Omit; export const RovingTabIndexProvider: React.FC = (props) => { return ; }; -export const RovingGridIndexProvider: React.FC = (props) => { - return ; -}; - // re-export the semantic helper components for simplicity export { RovingTabIndexWrapper } from "./roving/RovingTabIndexWrapper"; export { RovingAccessibleButton } from "./roving/RovingAccessibleButton"; diff --git a/apps/web/src/components/views/emojipicker/Category.tsx b/apps/web/src/components/views/emojipicker/Category.tsx deleted file mode 100644 index db61015f56..0000000000 --- a/apps/web/src/components/views/emojipicker/Category.tsx +++ /dev/null @@ -1,133 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2020 The Matrix.org Foundation C.I.C. -Copyright 2019 Tulir Asokan - -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 RefObject } from "react"; -import { type DATA_BY_CATEGORY, type Emoji as IEmoji } from "@matrix-org/emojibase-bindings"; - -import { CATEGORY_HEADER_HEIGHT, EMOJI_HEIGHT, EMOJIS_PER_ROW } from "./config"; -import LazyRenderList from "../elements/LazyRenderList"; -import Emoji from "./Emoji"; -import { type ButtonEvent } from "../elements/AccessibleButton"; - -const OVERFLOW_ROWS = 3; - -export type CategoryKey = keyof typeof DATA_BY_CATEGORY | "recent"; - -export interface ICategory { - id: CategoryKey; - name: string; - // Emoji to show in the header for this category - emoji: string; - enabled: boolean; - // Whether the category is currently visible - visible: boolean; - // Whether the category is the first visible category - firstVisible: boolean; - ref: RefObject; -} - -interface IProps { - id: string; - name: string; - emojis: IEmoji[]; - selectedEmojis?: Set; - heightBefore: number; - viewportHeight: number; - scrollTop: number; - onClick(ev: ButtonEvent, emoji: IEmoji): void; - onMouseEnter(emoji: IEmoji): void; - onMouseLeave(emoji: IEmoji): void; - isEmojiDisabled?: (unicode: string) => boolean; -} - -function hexEncode(str: string): string { - let hex: string; - let i: number; - - let result = ""; - for (i = 0; i < str.length; i++) { - hex = str.charCodeAt(i).toString(16); - result += ("000" + hex).slice(-4); - } - - return result; -} - -class Category extends React.PureComponent { - private renderEmojiRow = (rowIndex: number): JSX.Element => { - const { onClick, onMouseEnter, onMouseLeave, selectedEmojis, emojis } = this.props; - const emojisForRow = emojis.slice(rowIndex * 8, (rowIndex + 1) * 8); - return ( -

- {emojisForRow.map((emoji) => ( -
- -
- ))} -
- ); - }; - - public render(): React.ReactNode { - const { emojis, name, heightBefore, viewportHeight, scrollTop } = this.props; - if (!emojis || emojis.length === 0) { - return null; - } - const rows = new Array(Math.ceil(emojis.length / EMOJIS_PER_ROW)); - for (let counter = 0; counter < rows.length; ++counter) { - rows[counter] = counter; - } - - const viewportTop = scrollTop; - const viewportBottom = viewportTop + viewportHeight; - const listTop = heightBefore + CATEGORY_HEADER_HEIGHT; - const listBottom = listTop + rows.length * EMOJI_HEIGHT; - const top = Math.max(viewportTop, listTop); - const bottom = Math.min(viewportBottom, listBottom); - // the viewport height and scrollTop passed to the LazyRenderList - // is capped at the intersection with the real viewport, so lists - // out of view are passed height 0, so they won't render any items. - const localHeight = Math.max(0, bottom - top); - const localScrollTop = Math.max(0, scrollTop - listTop); - - return ( -
-

{name}

- -
- ); - } -} - -export default Category; diff --git a/apps/web/src/components/views/emojipicker/Emoji.tsx b/apps/web/src/components/views/emojipicker/Emoji.tsx deleted file mode 100644 index 8cc104f9a5..0000000000 --- a/apps/web/src/components/views/emojipicker/Emoji.tsx +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2020 The Matrix.org Foundation C.I.C. -Copyright 2019 Tulir Asokan - -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 Emoji as IEmoji } from "@matrix-org/emojibase-bindings"; - -import { type ButtonEvent } from "../elements/AccessibleButton"; -import { RovingAccessibleButton } from "../../../accessibility/RovingTabIndex"; - -interface IProps { - emoji: IEmoji; - /** - * Set of which emojis are already selected and should be decorated as such. - * If specified, emoji will use a checkbox role with aria-checked set appropriately. - */ - selectedEmojis?: Set; - onClick(ev: ButtonEvent, emoji: IEmoji): void; - onMouseEnter(emoji: IEmoji): void; - onMouseLeave(emoji: IEmoji): void; - disabled?: boolean; - id?: string; - className?: string; -} - -class Emoji extends React.PureComponent { - public render(): React.ReactNode { - const { onClick, onMouseEnter, onMouseLeave, emoji, selectedEmojis } = this.props; - const isSelected = selectedEmojis?.has(emoji.unicode); - return ( - onClick(ev, emoji)} - onMouseEnter={() => onMouseEnter(emoji)} - onMouseLeave={() => onMouseLeave(emoji)} - className={this.props.className} - disabled={this.props.disabled || undefined} - role={selectedEmojis ? "checkbox" : undefined} - aria-checked={this.props.disabled ? undefined : isSelected} - focusOnMouseOver - > -
- {emoji.unicode} -
-
- ); - } -} - -export default Emoji; diff --git a/apps/web/src/components/views/emojipicker/EmojiPicker.tsx b/apps/web/src/components/views/emojipicker/EmojiPicker.tsx deleted file mode 100644 index 6b81f84b44..0000000000 --- a/apps/web/src/components/views/emojipicker/EmojiPicker.tsx +++ /dev/null @@ -1,400 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2020 The Matrix.org Foundation C.I.C. -Copyright 2019 Tulir Asokan - -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 Dispatch } from "react"; -import { DATA_BY_CATEGORY, getEmojiFromUnicode, type Emoji as IEmoji } from "@matrix-org/emojibase-bindings"; -import classNames from "classnames"; -import { AutoHideScrollbar } from "@element-hq/web-shared-components"; - -import { _t } from "../../../languageHandler"; -import * as recent from "../../../emojipicker/recent"; -import Header from "./Header"; -import Search from "./Search"; -import Preview from "./Preview"; -import QuickReactions from "./QuickReactions"; -import Category, { type CategoryKey, type ICategory } from "./Category"; -import { filterBoolean } from "../../../utils/arrays"; -import { - type IAction as RovingAction, - type IState as RovingState, - RovingGridIndexProvider, - RovingStateActionType, -} from "../../../accessibility/RovingTabIndex"; -import { Key } from "../../../Keyboard"; -import { type ButtonEvent } from "../elements/AccessibleButton"; -import { CATEGORY_HEADER_HEIGHT, EMOJI_HEIGHT, EMOJIS_PER_ROW } from "./config"; - -const ZERO_WIDTH_JOINER = "\u200D"; - -interface IProps { - selectedEmojis?: Set; - onChoose(unicode: string): boolean; - onFinished(): void; - isEmojiDisabled?: (unicode: string) => boolean; -} - -interface IState { - filter: string; - previewEmoji?: IEmoji; - scrollTop: number; - // initial estimation of height, dialog is hardcoded to 450px height. - // should be enough to never have blank rows of emojis as - // 3 rows of overflow are also rendered. The actual value is updated on scroll. - viewportHeight: number; - // Track if user has interacted with arrow keys or search - showHighlight: boolean; -} - -class EmojiPicker extends React.Component { - private readonly recentlyUsed: IEmoji[]; - private readonly memoizedDataByCategory: Record; - private readonly categories: ICategory[]; - - private scrollElement: HTMLDivElement | null = null; - - public constructor(props: IProps) { - super(props); - - this.state = { - filter: "", - scrollTop: 0, - viewportHeight: 280, - showHighlight: false, - }; - - // Convert recent emoji characters to emoji data, removing unknowns and duplicates - this.recentlyUsed = Array.from(new Set(filterBoolean(recent.get().map(getEmojiFromUnicode)))); - this.memoizedDataByCategory = { - recent: this.recentlyUsed, - ...DATA_BY_CATEGORY, - }; - - const hasRecentlyUsed = this.recentlyUsed.length > 0; - - const categoryConfig: Pick[] = [ - { id: "recent", name: _t("emoji|category_frequently_used"), emoji: "πŸ•’" }, - { id: "people", name: _t("emoji|category_smileys_people"), emoji: "πŸ˜€" }, - { id: "nature", name: _t("emoji|category_animals_nature"), emoji: "πŸ•" }, - { id: "foods", name: _t("emoji|category_food_drink"), emoji: "🍎" }, - { id: "activity", name: _t("emoji|category_activities"), emoji: "⚽️" }, - { id: "places", name: _t("emoji|category_travel_places"), emoji: "πŸš—" }, - { id: "objects", name: _t("emoji|category_objects"), emoji: "πŸ’‘" }, - { id: "symbols", name: _t("emoji|category_symbols"), emoji: "⁉️" }, - { id: "flags", name: _t("emoji|category_flags"), emoji: "🏁" }, - ]; - - this.categories = categoryConfig.map((config) => { - let isEnabled = true; - let isVisible = false; - let firstVisible = false; - if (config.id === "recent") { - isEnabled = hasRecentlyUsed; - isVisible = hasRecentlyUsed; - firstVisible = hasRecentlyUsed; - } else if (config.id === "people") { - isVisible = true; - firstVisible = !hasRecentlyUsed; - } - return { - ...config, - enabled: isEnabled, - visible: isVisible, - firstVisible: firstVisible, - ref: React.createRef(), - }; - }); - } - - private onScroll = (): void => { - const body = this.scrollElement; - if (!body) return; - this.setState({ - scrollTop: body.scrollTop, - viewportHeight: body.clientHeight, - }); - this.updateVisibility(); - }; - - // Given a roving emoji button returns the role=row element containing it - private readonly getRow = (rovingNode?: Element): Element | undefined => { - return this.getGridcell(rovingNode)?.parentElement ?? undefined; - }; - - // Given a roving emoji button returns the role=gridcell element containing it - private readonly getGridcell = (rovingNode?: Element): Element | undefined => { - return rovingNode?.parentElement ?? undefined; - }; - - // Given a role=gridcell node returns the roving emoji button contained within - private readonly getRovingNode = (gridcellNode: Element): HTMLElement | undefined => { - const node = gridcellNode.children[0]; - return node instanceof HTMLElement ? node : undefined; - }; - - private onKeyDown = (ev: React.KeyboardEvent, state: RovingState, dispatch: Dispatch): void => { - if (state.activeNode && [Key.ARROW_DOWN, Key.ARROW_RIGHT, Key.ARROW_LEFT, Key.ARROW_UP].includes(ev.key)) { - // If highlight is not shown yet, show it and reset to first emoji - if (!this.state.showHighlight) { - this.setState({ showHighlight: true }); - // Reset to first emoji when showing highlight for the first time (or after it was hidden) - if (state.nodes.length > 0) { - dispatch({ - type: RovingStateActionType.SetFocus, - payload: { node: state.nodes[0] }, - }); - } - ev.preventDefault(); - ev.stopPropagation(); - return; - } - } - }; - - private readonly shouldMoveFocus = (): boolean => { - return document.activeElement !== document.querySelector(".mx_EmojiPicker_search input"); - }; - - private readonly onGridNavigation = (ev: React.KeyboardEvent, focusNode: HTMLElement, state: RovingState): void => { - if (this.getRow(state.activeNode) !== this.getRow(focusNode)) { - focusNode.scrollIntoView({ - behavior: "auto", - block: "center", - inline: "center", - }); - } - }; - - private updateVisibility = (): void => { - const body = this.scrollElement; - if (!body) return; - const rect = body.getBoundingClientRect(); - let firstVisibleFound = false; - for (const cat of this.categories) { - const elem = body.querySelector(`[data-category-id="${cat.id}"]`); - if (!elem) { - cat.visible = false; - cat.ref.current?.classList.remove("mx_EmojiPicker_anchor_visible"); - continue; - } - const elemRect = elem.getBoundingClientRect(); - const y = elemRect.y - rect.y; - const yEnd = elemRect.y + elemRect.height - rect.y; - cat.visible = y < rect.height && yEnd > 0; - if (cat.visible && !firstVisibleFound) { - firstVisibleFound = true; - cat.firstVisible = true; - } else { - cat.firstVisible = false; - } - // We update this here instead of through React to avoid re-render on scroll. - if (!cat.ref.current) continue; - if (cat.visible) { - cat.ref.current.classList.add("mx_EmojiPicker_anchor_visible"); - cat.ref.current.setAttribute("aria-selected", "true"); - } else { - cat.ref.current.classList.remove("mx_EmojiPicker_anchor_visible"); - cat.ref.current.setAttribute("aria-selected", "false"); - } - if (cat.firstVisible) { - cat.ref.current.setAttribute("tabindex", "0"); - } else { - cat.ref.current.setAttribute("tabindex", "-1"); - } - } - }; - - private scrollToCategory = (category: string): void => { - this.scrollElement?.querySelector(`[data-category-id="${category}"]`)?.scrollIntoView(); - }; - - private onChangeFilter = (filter: string): void => { - const lcFilter = filter.toLowerCase().trim(); // filter is case insensitive - - // User has typed a query, show highlight - // If filter is cleared, hide highlight again - if (lcFilter && !this.state.showHighlight) { - this.setState({ showHighlight: true }); - } else if (!lcFilter && this.state.showHighlight) { - this.setState({ showHighlight: false }); - } - - for (const cat of this.categories) { - let emojis: IEmoji[]; - // If the new filter string includes the old filter string, we don't have to re-filter the whole dataset. - if (lcFilter.includes(this.state.filter)) { - emojis = this.memoizedDataByCategory[cat.id]; - } else { - emojis = cat.id === "recent" ? this.recentlyUsed : DATA_BY_CATEGORY[cat.id]; - } - - if (lcFilter !== "") { - emojis = emojis.filter((emoji) => this.emojiMatchesFilter(emoji, lcFilter)); - // Copy the array to not clobber the original unfiltered sorting - emojis = [...emojis].sort((a, b) => { - const indexA = a.shortcodes[0].indexOf(lcFilter); - const indexB = b.shortcodes[0].indexOf(lcFilter); - - // Prioritize emojis containing the filter in its shortcode - if (indexA == -1 || indexB == -1) { - return indexB - indexA; - } - - // If both emojis start with the filter - // put the shorter emoji first - if (indexA == 0 && indexB == 0) { - return a.shortcodes[0].length - b.shortcodes[0].length; - } - - // Prioritize emojis starting with the filter - return indexA - indexB; - }); - } - - this.memoizedDataByCategory[cat.id] = emojis; - cat.enabled = emojis.length > 0; - // The setState below doesn't re-render the header and we already have the refs for updateVisibility, so... - if (cat.ref.current) { - cat.ref.current.disabled = !cat.enabled; - } - } - this.setState({ filter }); - // Header underlines need to be updated, but updating requires knowing - // where the categories are, so we wait for a tick. - window.setTimeout(this.updateVisibility, 0); - }; - - private emojiMatchesFilter = (emoji: IEmoji, filter: string): boolean => { - // If the query is an emoji containing a variation then strip it to provide more useful matches - if (filter.includes(ZERO_WIDTH_JOINER)) { - filter = filter.split(ZERO_WIDTH_JOINER, 2)[0]; - } - return ( - emoji.label.toLowerCase().includes(filter) || - (Array.isArray(emoji.emoticon) - ? emoji.emoticon.some((x) => x.includes(filter)) - : emoji.emoticon?.includes(filter)) || - emoji.shortcodes.some((x) => x.toLowerCase().includes(filter)) || - emoji.unicode.split(ZERO_WIDTH_JOINER).includes(filter) - ); - }; - - private onEnterFilter = (): void => { - // Only select emoji if highlight is shown - if (!this.state.showHighlight) return; - - const btn = this.scrollElement?.querySelector('.mx_EmojiPicker_item_wrapper [tabindex="0"]'); - btn?.click(); - this.props.onFinished(); - }; - - private onHoverEmoji = (emoji: IEmoji): void => { - this.setState({ - previewEmoji: emoji, - }); - }; - - private onHoverEmojiEnd = (): void => { - this.setState({ - previewEmoji: undefined, - }); - }; - - private onClickEmoji = (ev: ButtonEvent, emoji: IEmoji): void => { - if (this.props.onChoose(emoji.unicode) !== false) { - recent.add(emoji.unicode); - } - if ((ev as React.KeyboardEvent).key === Key.ENTER) { - this.props.onFinished(); - } - }; - - private static categoryHeightForEmojiCount(count: number): number { - if (count === 0) { - return 0; - } - return CATEGORY_HEADER_HEIGHT + Math.ceil(count / EMOJIS_PER_ROW) * EMOJI_HEIGHT; - } - - public render(): React.ReactNode { - return ( - - {({ onKeyDownHandler }) => { - let heightBefore = 0; - return ( -
-
- - { - this.scrollElement = ref; - }} - onScroll={this.onScroll} - > - {this.categories.map((category) => { - const emojis = this.memoizedDataByCategory[category.id]; - const categoryElement = ( - - ); - const height = EmojiPicker.categoryHeightForEmojiCount(emojis.length); - heightBefore += height; - return categoryElement; - })} - - {this.state.previewEmoji ? ( - - ) : ( - - )} -
- ); - }} -
- ); - } -} - -export default EmojiPicker; diff --git a/apps/web/src/components/views/emojipicker/Header.tsx b/apps/web/src/components/views/emojipicker/Header.tsx deleted file mode 100644 index ccf661c1f3..0000000000 --- a/apps/web/src/components/views/emojipicker/Header.tsx +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2020 The Matrix.org Foundation C.I.C. -Copyright 2019 Tulir Asokan - -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 classNames from "classnames"; - -import { _t } from "../../../languageHandler"; -import { type CategoryKey, type ICategory } from "./Category"; -import { getKeyBindingsManager } from "../../../KeyBindingsManager"; -import { KeyBindingAction } from "../../../accessibility/KeyboardShortcuts"; - -interface IProps { - categories: ICategory[]; - onAnchorClick(id: CategoryKey): void; -} - -class Header extends React.PureComponent { - private findNearestEnabled(index: number, delta: number): number | undefined { - index += this.props.categories.length; - const cats = [...this.props.categories, ...this.props.categories, ...this.props.categories]; - - while (index < cats.length && index >= 0) { - if (cats[index].enabled) return index % this.props.categories.length; - index += delta > 0 ? 1 : -1; - } - } - - private changeCategoryRelative(delta: number): void { - // Move to the next/previous category using the first visible as the current. - const current = this.props.categories.findIndex((c) => c.visible); - this.changeCategoryAbsolute(current + delta, delta); - } - - private changeCategoryAbsolute(index: number, delta = 1): void { - const category = this.props.categories[this.findNearestEnabled(index, delta)!]; - if (category) { - this.props.onAnchorClick(category.id); - category.ref.current?.focus(); - } - } - - // Implements ARIA Tabs with Automatic Activation pattern - // https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-1/tabs.html - private onKeyDown = (ev: React.KeyboardEvent): void => { - let handled = true; - - const action = getKeyBindingsManager().getAccessibilityAction(ev); - switch (action) { - case KeyBindingAction.ArrowLeft: - this.changeCategoryRelative(-1); - break; - case KeyBindingAction.ArrowRight: - this.changeCategoryRelative(1); - break; - - case KeyBindingAction.Home: - this.changeCategoryAbsolute(0); - break; - case KeyBindingAction.End: - this.changeCategoryAbsolute(this.props.categories.length - 1, -1); - break; - default: - handled = false; - } - - if (handled) { - ev.preventDefault(); - ev.stopPropagation(); - } - }; - - public render(): React.ReactNode { - return ( - - ); - } -} - -export default Header; diff --git a/apps/web/src/components/views/emojipicker/Preview.tsx b/apps/web/src/components/views/emojipicker/Preview.tsx deleted file mode 100644 index d8d2fe9942..0000000000 --- a/apps/web/src/components/views/emojipicker/Preview.tsx +++ /dev/null @@ -1,37 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2020 The Matrix.org Foundation C.I.C. -Copyright 2019 Tulir Asokan - -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 Emoji } from "@matrix-org/emojibase-bindings"; - -interface IProps { - emoji: Emoji; -} - -class Preview extends React.PureComponent { - public render(): React.ReactNode { - const { - unicode, - label, - shortcodes: [shortcode], - } = this.props.emoji; - - return ( -
-
{unicode}
-
-
{label}
-
{shortcode}
-
-
- ); - } -} - -export default Preview; diff --git a/apps/web/src/components/views/emojipicker/QuickReactions.tsx b/apps/web/src/components/views/emojipicker/QuickReactions.tsx deleted file mode 100644 index 4b337cd5f5..0000000000 --- a/apps/web/src/components/views/emojipicker/QuickReactions.tsx +++ /dev/null @@ -1,85 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2020 The Matrix.org Foundation C.I.C. -Copyright 2019 Tulir Asokan - -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 { getEmojiFromUnicode, type Emoji as IEmoji } from "@matrix-org/emojibase-bindings"; - -import { _t } from "../../../languageHandler"; -import Emoji from "./Emoji"; -import { type ButtonEvent } from "../elements/AccessibleButton"; -import Toolbar from "../../../accessibility/Toolbar"; - -// We use the variation-selector Heart in Quick Reactions for some reason -const QUICK_REACTIONS = ["πŸ‘", "πŸ‘Ž", "πŸ˜„", "πŸŽ‰", "πŸ˜•", "❀️", "πŸš€", "πŸ‘€"].map((emoji) => { - const data = getEmojiFromUnicode(emoji); - if (!data) { - throw new Error(`Emoji ${emoji} doesn't exist in emojibase`); - } - return data; -}); - -interface IProps { - selectedEmojis?: Set; - onClick(ev: ButtonEvent, emoji: IEmoji): void; -} - -interface IState { - hover?: IEmoji; -} - -class QuickReactions extends React.Component { - public constructor(props: IProps) { - super(props); - this.state = {}; - } - - private onMouseEnter = (emoji: IEmoji): void => { - this.setState({ - hover: emoji, - }); - }; - - private onMouseLeave = (): void => { - this.setState({ - hover: undefined, - }); - }; - - public render(): React.ReactNode { - return ( -
-

- {!this.state.hover ? ( - _t("emoji|quick_reactions") - ) : ( - - {this.state.hover.label} - {this.state.hover.shortcodes[0]} - - )} -

- - {QUICK_REACTIONS.map((emoji) => ( - - ))} - -
- ); - } -} - -export default QuickReactions; diff --git a/apps/web/src/components/views/emojipicker/ReactionPicker.tsx b/apps/web/src/components/views/emojipicker/ReactionPicker.tsx index 11b3d9468a..19ed2a5385 100644 --- a/apps/web/src/components/views/emojipicker/ReactionPicker.tsx +++ b/apps/web/src/components/views/emojipicker/ReactionPicker.tsx @@ -10,12 +10,12 @@ Please see LICENSE files in the repository root for full details. import React from "react"; import { type MatrixEvent, EventType, RelationType, type Relations, RelationsEvent } from "matrix-js-sdk/src/matrix"; -import EmojiPicker from "./EmojiPicker"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; import dis from "../../../dispatcher/dispatcher"; import { Action } from "../../../dispatcher/actions"; import RoomContext from "../../../contexts/RoomContext"; import { type FocusComposerPayload } from "../../../dispatcher/payloads/FocusComposerPayload"; +import { EmojiPickerWithRecents } from "../../../emojipicker/EmojiPickerWithRecents"; interface IProps { mxEvent: MatrixEvent; @@ -125,7 +125,7 @@ class ReactionPicker extends React.Component { public render(): React.ReactNode { return ( - - -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 { CloseIcon, SearchIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; - -import { _t } from "../../../languageHandler"; -import { KeyBindingAction } from "../../../accessibility/KeyboardShortcuts"; -import { getKeyBindingsManager } from "../../../KeyBindingsManager"; -import { RovingTabIndexContext } from "../../../accessibility/RovingTabIndex"; - -interface IProps { - query: string; - onChange(value: string): void; - onEnter(): void; - onKeyDown(event: React.KeyboardEvent): void; -} - -class Search extends React.PureComponent { - public static contextType = RovingTabIndexContext; - declare public context: React.ContextType; - - private inputRef = React.createRef(); - - public componentDidMount(): void { - // For some reason, neither the autoFocus nor just calling focus() here worked, so here's a window.setTimeout - window.setTimeout(() => this.inputRef.current?.focus(), 0); - } - - private onKeyDown = (ev: React.KeyboardEvent): void => { - const action = getKeyBindingsManager().getAccessibilityAction(ev); - switch (action) { - case KeyBindingAction.Enter: - this.props.onEnter(); - ev.stopPropagation(); - ev.preventDefault(); - break; - - default: - this.props.onKeyDown(ev); - } - }; - - public render(): React.ReactNode { - let rightButton: JSX.Element; - if (this.props.query) { - rightButton = ( - - ); - } else { - rightButton = ( - - - - ); - } - - return ( -
- this.props.onChange(ev.target.value)} - onKeyDown={this.onKeyDown} - ref={this.inputRef} - // Setting aria-activedescendant on the input allows screen readers to identify the active emoji. - // Setting it when there is not a query causes screen readers to read out the first emoji when focusing the input, and it continually tells you you are in the table vs the input. - aria-activedescendant={this.props.query ? this.context.state.activeNode?.id : undefined} - aria-controls="mx_EmojiPicker_body" - aria-haspopup="grid" - aria-autocomplete="list" - /> - {rightButton} -
- ); - } -} - -export default Search; diff --git a/apps/web/src/components/views/emojipicker/config.ts b/apps/web/src/components/views/emojipicker/config.ts deleted file mode 100644 index 2b0e8c8858..0000000000 --- a/apps/web/src/components/views/emojipicker/config.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2020 The Matrix.org Foundation C.I.C. -Copyright 2019 Tulir Asokan - -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 const CATEGORY_HEADER_HEIGHT = 20; -export const EMOJI_HEIGHT = 35; -export const EMOJIS_PER_ROW = 8; diff --git a/apps/web/src/components/views/rooms/EmojiButton.tsx b/apps/web/src/components/views/rooms/EmojiButton.tsx index d5db6a3fd2..2bd6ed2fad 100644 --- a/apps/web/src/components/views/rooms/EmojiButton.tsx +++ b/apps/web/src/components/views/rooms/EmojiButton.tsx @@ -12,8 +12,8 @@ import { ReactionIcon } from "@vector-im/compound-design-tokens/assets/web/icons import { _t } from "../../../languageHandler"; import ContextMenu, { aboveLeftOf, type MenuProps, useContextMenu } from "../../structures/ContextMenu"; -import EmojiPicker from "../emojipicker/EmojiPicker"; import { CollapsibleButton, OverflowMenuContext } from "./CollapsibleButton"; +import { EmojiPickerWithRecents } from "../../../emojipicker/EmojiPickerWithRecents"; interface IEmojiButtonProps { addEmoji: (unicode: string) => boolean; @@ -35,7 +35,7 @@ export function EmojiButton({ addEmoji, menuPosition, className }: IEmojiButtonP contextMenu = ( - + ); } diff --git a/apps/web/src/emojipicker/EmojiPickerWithRecents.test.tsx b/apps/web/src/emojipicker/EmojiPickerWithRecents.test.tsx new file mode 100644 index 0000000000..ab3124750f --- /dev/null +++ b/apps/web/src/emojipicker/EmojiPickerWithRecents.test.tsx @@ -0,0 +1,36 @@ +/* +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. +*/ + +// @vitest-environment happy-dom + +import React from "react"; +import { describe, it, expect, vi } from "vitest"; +import { render, screen } from "test-utils-rtl"; +import userEvent from "@testing-library/user-event"; + +import { EmojiPickerWithRecents } from "./EmojiPickerWithRecents"; +import { getKeyBindingsManager } from "../KeyBindingsManager"; + +describe("EmojiPickerWithRecents", () => { + it("passes the selected emoji through to the picker", () => { + render( true} onFinished={vi.fn()} selectedEmojis={new Set(["πŸŽ‰"])} />); + + expect(screen.getByRole("checkbox", { name: "πŸŽ‰" })).toHaveAttribute("aria-checked", "true"); + expect(screen.getByRole("checkbox", { name: "πŸš€" })).toHaveAttribute("aria-checked", "false"); + }); + + it("resolves keyboard actions using the app's keybindings", async () => { + const getAccessibilityAction = vi.spyOn(getKeyBindingsManager(), "getAccessibilityAction"); + render( true} onFinished={vi.fn()} />); + + screen.getByRole("button", { name: "πŸŽ‰" }).focus(); + await userEvent.keyboard("[ArrowRight]"); + + expect(getAccessibilityAction).toHaveBeenCalled(); + expect(screen.getByRole("button", { name: "πŸ˜•" })).toHaveFocus(); + }); +}); diff --git a/apps/web/src/emojipicker/EmojiPickerWithRecents.tsx b/apps/web/src/emojipicker/EmojiPickerWithRecents.tsx new file mode 100644 index 0000000000..e7db148fe0 --- /dev/null +++ b/apps/web/src/emojipicker/EmojiPickerWithRecents.tsx @@ -0,0 +1,39 @@ +/* + * 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 React, { useMemo } from "react"; +import { EmojiPicker, type EmojiPickerProps } from "@element-hq/web-shared-components"; +import * as recent from "./recent"; +import { getWebRovingAction } from "../accessibility/RovingTabIndex"; + +/** + * Wrapped version of the shared-components emoji picker that passes in + * the recent emojis from the web app's local storage (also passes in the + * web roving actions). + */ +export function EmojiPickerWithRecents({ + selectedEmojis, + onChoose, + onFinished, + isEmojiDisabled, +}: Omit): React.ReactNode { + // There isn't anything for us to key the memoisation off here. This will just + // update when the component mounts which is probably good enough. + const recentEmojis = useMemo(() => recent.get(), []); + + return ( + + ); +} diff --git a/apps/web/src/i18n/strings/en_EN.json b/apps/web/src/i18n/strings/en_EN.json index 67dc0a814a..b04481805f 100644 --- a/apps/web/src/i18n/strings/en_EN.json +++ b/apps/web/src/i18n/strings/en_EN.json @@ -1,6 +1,5 @@ { "a11y": { - "emoji_picker": "Emoji picker", "jump_first_invite": "Jump to first invite.", "message_composer": "Message composer", "n_unread_messages": { @@ -921,22 +920,6 @@ }, "dialog_close_label": "Close dialog", "download_completed": "Download Completed", - "emoji": { - "categories": "Categories", - "category_activities": "Activities", - "category_animals_nature": "Animals & Nature", - "category_flags": "Flags", - "category_food_drink": "Food & Drink", - "category_frequently_used": "Frequently Used", - "category_objects": "Objects", - "category_smileys_people": "Smileys & People", - "category_symbols": "Symbols", - "category_travel_places": "Travel & Places", - "quick_reactions": "Quick Reactions" - }, - "emoji_picker": { - "cancel_search_label": "Cancel search" - }, "empty_room": "Empty room", "empty_room_was_name": "Empty room (was %(oldName)s)", "encryption": { diff --git a/packages/shared-components/__vis__/linux/__baselines__/core/EmojiPicker/EmojiPicker.stories.tsx/default-auto.png b/packages/shared-components/__vis__/linux/__baselines__/core/EmojiPicker/EmojiPicker.stories.tsx/default-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d6d5eff5adeed47b90aeec6c0da73e699de8fe GIT binary patch literal 81138 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

@&{XhI+L^+$s>G-qBrILGl_hY0gK=y3Z#VZ#L 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 jHSI$wit0qdc_ZpwXs+k=@|TOFt? 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 literal 0 HcmV?d00001 diff --git a/packages/shared-components/__vis__/linux/__baselines__/core/EmojiPicker/EmojiPicker.stories.tsx/with-selected-auto.png b/packages/shared-components/__vis__/linux/__baselines__/core/EmojiPicker/EmojiPicker.stories.tsx/with-selected-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..9a60f3edd61baf6cb38caf333c87b1dd946ddbd2 GIT binary patch literal 81816 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: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 + * + * 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, { useCallback } from "react"; +import { type Emoji as IEmoji } from "@matrix-org/emojibase-bindings"; +import classNames from "classnames"; + +import { RovingButton, type ButtonEvent } from "./RovingButton"; +import styles from "./EmojiPicker.module.css"; + +interface IProps { + /** + * The emoji to render. + */ + emoji: IEmoji; + /** + * Set of which emojis are already selected and should be decorated as such. + * If specified, emoji will use a checkbox role with aria-checked set appropriately. + */ + selectedEmojis?: Set; + /** + * Called when the emoji is clicked. + * + * @param ev - The button event + * @param emoji - The emoji that was clicked + */ + onClick: (ev: ButtonEvent, emoji: IEmoji) => void; + /** + * Called when the mouse enters the emoji. + * + * @param emoji - The emoji that the mouse entered + */ + onMouseEnter: (emoji: IEmoji) => void; + /** + * Called when the mouse leaves the emoji. + * + * @param emoji - The emoji that the mouse left + */ + onMouseLeave: (emoji: IEmoji) => void; + /** + * If true, the emoji will be disabled and not clickable. + */ + disabled?: boolean; + /** + * The id to use for the emoji button. + */ + id?: string; + /** + * Optional class name to apply to the emoji button. + */ + className?: string; +} + +/** + * A single emoji cell rendered in the emoji picker. + */ +export const Emoji = React.memo(function Emoji({ + onClick, + onMouseEnter, + onMouseLeave, + emoji, + selectedEmojis, + disabled, + id, + className, +}: IProps): React.ReactNode { + const isSelected = selectedEmojis?.has(emoji.unicode); + + const onMouseEnterWrapped = useCallback(() => onMouseEnter(emoji), [onMouseEnter, emoji]); + const onMouseLeaveWrapped = useCallback(() => onMouseLeave(emoji), [onMouseLeave, emoji]); + + return ( + onClick(ev, emoji)} + onMouseEnter={onMouseEnterWrapped} + onMouseLeave={onMouseLeaveWrapped} + className={className} + disabled={disabled || undefined} + role={selectedEmojis ? "checkbox" : undefined} + aria-checked={isSelected} + focusOnMouseOver + > +

{emoji.unicode}
+ + ); +}); diff --git a/packages/shared-components/src/core/EmojiPicker/EmojiPicker.module.css b/packages/shared-components/src/core/EmojiPicker/EmojiPicker.module.css new file mode 100644 index 0000000000..3ec00989bf --- /dev/null +++ b/packages/shared-components/src/core/EmojiPicker/EmojiPicker.module.css @@ -0,0 +1,227 @@ +/* + * Copyright 2026 Element Creations Ltd. + * Copyright 2019 Tulir Asokan + * + * 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. + */ + +.picker { + width: 340px; + height: min(450px, 80vh); + max-height: 80vh; + + border-radius: 4px; + + display: flex; + flex-direction: column; +} + +.body { + margin-left: var(--cpd-space-1-5x); + flex: 1; + overflow-y: scroll; +} + +.header { + padding: var(--cpd-space-1x) var(--cpd-space-2x) 0; + border-bottom: 1px solid var(--cpd-color-gray-400); +} + +.anchor { + border: none; + padding: var(--cpd-space-1x) 0; + /* We have to explicitly inherit the font as button browser styles are implicitly ignorant */ + font: inherit; + font-size: var(--cpd-font-size-heading-sm); + line-height: 1; + border-bottom: 2px solid transparent; + background-color: transparent; + border-radius: 4px 4px 0 0; + + width: 36px; + height: 36px; + + color: var(--cpd-color-text-primary); + display: inline-block; + + /* + * These have 'text' in them because they're emoji, but it doesn't make sense for the user + * to be able to select it + */ + user-select: none; + + &:not(:disabled) { + cursor: pointer; + } + + &:disabled { + filter: opacity(0.3); + } + + &:not(:disabled):hover { + background-color: var(--cpd-color-bg-subtle-primary); + border-bottom: 2px solid var(--cpd-color-text-action-accent); + } +} + +.anchorSelected { + border-bottom: 2px solid var(--cpd-color-text-action-accent); +} + +.search { + margin: 8px; + border-radius: 4px; + border: 1px solid var(--cpd-color-border-interactive-secondary); + background-color: var(--cpd-color-bg-canvas-default); + display: flex; + + input { + flex: 1; + border: none; + padding: var(--cpd-space-1x) var(--cpd-space-3x); + border-radius: 4px 0; + + &::placeholder { + color: var(--cpd-color-text-secondary); + } + } + + button { + border: none; + background-color: inherit; + margin: 0; + padding: var(--cpd-space-2x); + align-self: center; + width: 32px; + height: 32px; + cursor: pointer; + + svg { + width: 100%; + height: 100%; + } + } +} + +.searchIcon { + width: 18px; + margin: var(--cpd-space-2x); + + svg { + width: 100%; + height: 100%; + color: var(--cpd-color-text-primary); + } +} + +.category { + padding: 0 var(--cpd-space-3x); +} + +.categoryLabel { + width: 304px; + font: var(--cpd-font-heading-sm-semibold); +} + +.list { + padding: 0; + margin: 0; +} + +/* A single row of emoji within the grid. Fixed to the width of EMOJIS_PER_ROW + cells so the row never wraps, offset to align with the category headers. */ +.row { + width: 304px; + margin: 0 var(--cpd-space-3x); +} + +.itemWrapper { + display: inline-block; + list-style: none; + width: 38px; + cursor: pointer; + + &:focus-within { + background-color: var(--cpd-color-bg-subtle-primary); + } +} + +.bodyShowHighlight .itemWrapper [tabindex="0"] .item { + background-color: var(--cpd-color-bg-subtle-primary); +} + +.item { + display: inline-block; + font-size: var(--cpd-font-size-heading-sm); + padding: 5px; + width: 100%; + height: 100%; + box-sizing: border-box; + text-align: center; + border-radius: 4px; + + &:hover { + background-color: var(--cpd-color-bg-subtle-primary); + } +} + +.itemSelected { + color: rgb(0, 0, 0, 0.5); + border: 1px solid var(--cpd-color-text-action-accent); + padding: var(--cpd-space-1x); +} + +.categoryLabel, +.previewName { + font-size: 1rem; + font-weight: var(--cpd-font-weight-semibold); + margin: 0; +} + +.footer { + border-top: 1px solid var(--cpd-color-gray-400); + min-height: 72px; + max-height: 72px; + + display: flex; + align-items: center; +} + +.previewEmoji { + font-size: var(--cpd-font-size-heading-xl); + padding: var(--cpd-space-2x) var(--cpd-space-4x); +} + +.previewText { + display: flex; + flex: 1; + overflow: hidden; + padding-top: 1rem; + padding-bottom: 1rem; + flex-direction: column; +} + +.name { + text-transform: capitalize; +} + +.shortcode { + color: var(--cpd-color-text-secondary); + overflow-wrap: break-word; + font: var(--cpd-font-body-md-regular); + + &::before, + &::after { + content: ":"; + } +} + +.quick { + flex-direction: column; + justify-content: space-around; +} + +.quickHeader .name { + margin-right: var(--cpd-space-1x); +} diff --git a/packages/shared-components/src/core/EmojiPicker/EmojiPicker.stories.tsx b/packages/shared-components/src/core/EmojiPicker/EmojiPicker.stories.tsx new file mode 100644 index 0000000000..c0788217f6 --- /dev/null +++ b/packages/shared-components/src/core/EmojiPicker/EmojiPicker.stories.tsx @@ -0,0 +1,47 @@ +/* + * 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 { type Meta, type StoryObj } from "@storybook/react-vite"; +import { fn } from "storybook/test"; + +import { EmojiPicker } from "./EmojiPicker"; + +const meta = { + title: "Core/EmojiPicker", + component: EmojiPicker, + tags: ["autodocs"], + args: { + onChoose: fn(() => true), + onFinished: fn(), + onRecordRecent: fn(), + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; + +export const WithRecents: Story = { + args: { + recentEmojis: ["πŸ‘", "πŸŽ‰", "❀️", "πŸš€"], + }, +}; + +export const WithSelected: Story = { + args: { + selectedEmojis: new Set(["πŸ˜€", "πŸ™‚"]), + }, +}; + +export const DisabledEmoji: Story = { + // Disable screenshot because it doesn't actually look any different + tags: ["!snapshot"], + args: { + isEmojiDisabled: (unicode: string) => unicode === "πŸ˜€", + }, +}; diff --git a/apps/web/test/unit-tests/components/views/emojipicker/EmojiPicker-test.tsx b/packages/shared-components/src/core/EmojiPicker/EmojiPicker.test.tsx similarity index 59% rename from apps/web/test/unit-tests/components/views/emojipicker/EmojiPicker-test.tsx rename to packages/shared-components/src/core/EmojiPicker/EmojiPicker.test.tsx index 9c0b1bd796..9a62177f71 100644 --- a/apps/web/test/unit-tests/components/views/emojipicker/EmojiPicker-test.tsx +++ b/packages/shared-components/src/core/EmojiPicker/EmojiPicker.test.tsx @@ -1,184 +1,151 @@ /* -Copyright 2024 New Vector Ltd. -Copyright 2023 The Matrix.org Foundation C.I.C. + * Copyright 2026 Element Creations Ltd. + * 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. + */ -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, { createRef } from "react"; -import { render, waitFor, act } from "jest-matrix-react"; +import React from "react"; +import { DATA_BY_CATEGORY } from "@matrix-org/emojibase-bindings"; import userEvent from "@testing-library/user-event"; +import { render, waitFor, screen } from "@test-utils"; +import { describe, expect, it, vi } from "vitest"; -import EmojiPicker from "../../../../../src/components/views/emojipicker/EmojiPicker"; -import { stubClient } from "../../../../test-utils"; -import SettingsStore from "../../../../../src/settings/SettingsStore"; -import { SettingLevel } from "../../../../../src/settings/SettingLevel.ts"; +import { EmojiPicker, filterEmojis } from "./EmojiPicker"; describe("EmojiPicker", function () { - stubClient(); + // Recent emojis as they would be provided by the app, most used first + const RECENT_EMOJIS = ["πŸ˜€", "πŸŽ‰", "❀️"]; // Helper to get the currently active emoji's text content from the grid const getActiveEmojiText = (container: HTMLElement): string => - container.querySelector('.mx_EmojiPicker_body .mx_EmojiPicker_item_wrapper [tabindex="0"]')?.textContent || ""; + container.querySelector('[role="gridcell"] [tabindex="0"]')?.textContent || ""; - beforeEach(() => { - // Clear recent emojis to prevent test pollution - SettingsStore.reset(); + it("should disable the recent category when no recent emojis", () => { + render( false} onFinished={vi.fn()} />); + + const recentTab = screen.getByRole("tab", { name: "πŸ•’" }); + expect(recentTab).toBeDisabled(); }); - afterEach(() => { - jest.restoreAllMocks(); + it("should select the people category by default when no recent emojis", () => { + render( false} onFinished={vi.fn()} />); + + const peopleTab = screen.getByRole("tab", { name: "πŸ˜€" }); + expect(peopleTab).toHaveAttribute("aria-selected", "true"); }); - it("should initialize categories with correct state when no recent emojis", () => { - const ref = createRef(); - render( false} onFinished={jest.fn()} />); + it("should enable and select the recent category when recent emojis are supplied", () => { + render( false} onFinished={vi.fn()} recentEmojis={RECENT_EMOJIS} />); - //@ts-ignore private access - const categories = ref.current!.categories; - - // Verify we have all expected categories - expect(categories).toHaveLength(9); - expect(categories.map((c) => c.id)).toEqual([ - "recent", - "people", - "nature", - "foods", - "activity", - "places", - "objects", - "symbols", - "flags", - ]); - - // Recent category should be disabled when empty - const recentCategory = categories.find((c) => c.id === "recent"); - expect(recentCategory).toMatchObject({ - id: "recent", - enabled: false, - visible: false, - firstVisible: false, - }); - - // People category should be the first visible when no recent emojis - const peopleCategory = categories.find((c) => c.id === "people"); - expect(peopleCategory).toMatchObject({ - id: "people", - enabled: true, - visible: true, - firstVisible: true, - }); - - // Other categories should start as not visible and not firstVisible - const natureCategory = categories.find((c) => c.id === "nature"); - expect(natureCategory).toMatchObject({ - id: "nature", - enabled: true, - visible: false, - firstVisible: false, - }); - - const flagsCategory = categories.find((c) => c.id === "flags"); - expect(flagsCategory).toMatchObject({ - id: "flags", - enabled: true, - visible: false, - firstVisible: false, - }); - - // All categories should have refs and names - categories.forEach((cat) => { - expect(cat.ref).toBeTruthy(); - expect(cat.name).toBeTruthy(); - }); + const recentTab = screen.getByRole("tab", { name: "πŸ•’" }); + expect(recentTab).toBeEnabled(); + expect(recentTab).toHaveAttribute("aria-selected", "true"); }); - it("should initialize categories with recent as firstVisible when recent emojis exist", () => { - // Mock recent emojis - SettingsStore.setValue("recent_emoji", null, SettingLevel.ACCOUNT, [ - { emoji: "πŸ˜€", total: 3 }, - { emoji: "πŸŽ‰", total: 2 }, - { emoji: "❀️", total: 2 }, - ]); + it("should record recent emoji when onChoose does not return false", async () => { + const onChoose = vi.fn(() => true); + const onRecordRecent = vi.fn(); + const { container } = render( + , + ); - const ref = createRef(); - render( false} onFinished={jest.fn()} />); - - //@ts-ignore private access - const categories = ref.current!.categories; - - // Recent category should be enabled and firstVisible - const recentCategory = categories.find((c) => c.id === "recent"); - expect(recentCategory).toMatchObject({ - id: "recent", - enabled: true, - visible: true, - firstVisible: true, + await waitFor(() => { + expect(container.querySelector('[role="gridcell"]')).toBeInTheDocument(); }); - // People category should be visible but NOT firstVisible when recent exists - const peopleCategory = categories.find((c) => c.id === "people"); - expect(peopleCategory).toMatchObject({ - id: "people", - enabled: true, - visible: true, - firstVisible: false, + await userEvent.click(container.querySelector('[role="gridcell"] [role="button"]')!); + expect(onChoose).toHaveBeenCalledWith("πŸ˜€"); + expect(onRecordRecent).toHaveBeenCalledWith("πŸ˜€"); + }); + + it("should not record recent emoji when onChoose returns false", async () => { + const onRecordRecent = vi.fn(); + const { container } = render( + false} onFinished={vi.fn()} onRecordRecent={onRecordRecent} />, + ); + + await waitFor(() => { + expect(container.querySelector('[role="gridcell"]')).toBeInTheDocument(); }); + + await userEvent.click(container.querySelector('[role="gridcell"] [role="button"]')!); + expect(onRecordRecent).not.toHaveBeenCalled(); }); it("should not mangle default order after filtering", async () => { - const ref = createRef(); - const { container } = render( - false} onFinished={jest.fn()} />, + const { container } = render( false} onFinished={vi.fn()} />); + + // Extract the list of emoji currently visible in the grid + const getVisibleEmojis = (): string[] => + Array.from(container.querySelectorAll('[role="gridcell"]')).map((cell) => cell.textContent || ""); + + await waitFor(() => { + expect(container.querySelector('[role="gridcell"]')).toBeInTheDocument(); + }); + + // Wait for the virtualized rows to settle (out-of-view categories drop + // their transient initial rows once measured) before capturing. + const beforeEmojis = getVisibleEmojis(); + + const input = container.querySelector("input")!; + + // Apply a filter and assert that the visible emoji have changed + await userEvent.type(input, "test"); + await waitFor(() => expect(getVisibleEmojis()).not.toEqual(beforeEmojis)); + + // There may be different numbers of emoji before after since virtuoso may + // end up rendering more or fewer off screen. Chop any excess off so that it's + // just the *order* we're comparing. + await userEvent.clear(input); + await waitFor(() => { + const afterEmojis = getVisibleEmojis(); + const length = Math.min(beforeEmojis.length, afterEmojis.length); + expect(afterEmojis.slice(0, length)).toEqual(beforeEmojis.slice(0, length)); + }); + }); + + it("should keep the filter applied when recentEmojis prop is changed", async () => { + const { container, rerender } = render( + false} onFinished={vi.fn()} recentEmojis={[...RECENT_EMOJIS]} />, ); - // Record the HTML before filtering - const beforeHtml = container.innerHTML; + const getVisibleEmojis = (): string[] => + Array.from(container.querySelectorAll('[role="gridcell"]')).map((cell) => cell.textContent || ""); - // Apply a filter and assert that the HTML has changed - //@ts-ignore private access - act(() => ref.current!.onChangeFilter("test")); - expect(beforeHtml).not.toEqual(container.innerHTML); + const input = container.querySelector("input")!; + await userEvent.type(input, "wave"); + await waitFor(() => expect(getVisibleEmojis()).toContain("πŸ‘‹")); + const filtered = getVisibleEmojis(); - // Clear the filter and assert that the HTML matches what it was before filtering - //@ts-ignore private access - act(() => ref.current!.onChangeFilter("")); - await waitFor(() => expect(beforeHtml).toEqual(container.innerHTML)); + // add another recently used emoji but it doesn't match the filter, so it should not change what's visible. + rerender( false} onFinished={vi.fn()} recentEmojis={["🦑", ...RECENT_EMOJIS]} />); + + expect(input).toHaveValue("wave"); + expect(getVisibleEmojis()).toEqual(filtered); }); it("sort emojis by shortcode and size", function () { - const ep = new EmojiPicker({ onChoose: (str: string) => false, onFinished: jest.fn() }); + const sorted = filterEmojis(DATA_BY_CATEGORY.people, "heart"); - //@ts-ignore private access - act(() => ep.onChangeFilter("heart")); - - //@ts-ignore private access - expect(ep.memoizedDataByCategory["people"][0].shortcodes[0]).toEqual("heart"); - //@ts-ignore private access - expect(ep.memoizedDataByCategory["people"][1].shortcodes[0]).toEqual("heartbeat"); + expect(sorted[0].shortcodes[0]).toEqual("heart"); + expect(sorted[1].shortcodes[0]).toEqual("heartbeat"); }); it("should allow keyboard navigation using arrow keys", async () => { - // mock offsetParent - Object.defineProperty(HTMLElement.prototype, "offsetParent", { - get() { - return this.parentNode; - }, - }); - - const onChoose = jest.fn(); - const onFinished = jest.fn(); + const onChoose = vi.fn(); + const onFinished = vi.fn(); const { container } = render(); const input = container.querySelector("input")!; - expect(input).toHaveFocus(); + await waitFor(() => expect(input).toHaveFocus()); function getEmoji(): string { return getActiveEmojiText(container); } - expect(getEmoji()).toEqual("πŸ˜€"); + await waitFor(() => expect(getEmoji()).toEqual("πŸ˜€")); // First arrow key press shows highlight without navigating await userEvent.keyboard("[ArrowDown]"); expect(getEmoji()).toEqual("πŸ˜€"); @@ -188,6 +155,7 @@ describe("EmojiPicker", function () { await userEvent.keyboard("[ArrowUp]"); expect(getEmoji()).toEqual("πŸ˜€"); await userEvent.keyboard("Flag"); + await waitFor(() => expect(getEmoji()).not.toEqual("πŸ˜€")); await userEvent.keyboard("[ArrowRight]"); await userEvent.keyboard("[ArrowRight]"); expect(getEmoji()).toEqual("πŸ“«οΈ"); @@ -206,19 +174,12 @@ describe("EmojiPicker", function () { }); it("should move actual focus when navigating between emojis after Tab", async () => { - // mock offsetParent - Object.defineProperty(HTMLElement.prototype, "offsetParent", { - get() { - return this.parentNode; - }, - }); - - const onChoose = jest.fn(); - const onFinished = jest.fn(); + const onChoose = vi.fn(); + const onFinished = vi.fn(); const { container } = render(); const input = container.querySelector("input")!; - expect(input).toHaveFocus(); + await waitFor(() => expect(input).toHaveFocus()); // Wait for emojis to render await waitFor(() => { @@ -271,19 +232,12 @@ describe("EmojiPicker", function () { }); it("should not select emoji on Enter press before highlight is shown", async () => { - // mock offsetParent - Object.defineProperty(HTMLElement.prototype, "offsetParent", { - get() { - return this.parentNode; - }, - }); - - const onChoose = jest.fn(); - const onFinished = jest.fn(); + const onChoose = vi.fn(); + const onFinished = vi.fn(); const { container } = render(); const input = container.querySelector("input")!; - expect(input).toHaveFocus(); + await waitFor(() => expect(input).toHaveFocus()); // Wait for emojis to render await waitFor(() => { @@ -309,26 +263,19 @@ describe("EmojiPicker", function () { }); it("should reset to first emoji when filter is cleared after navigation", async () => { - // mock offsetParent - Object.defineProperty(HTMLElement.prototype, "offsetParent", { - get() { - return this.parentNode; - }, - }); - - const onChoose = jest.fn(); - const onFinished = jest.fn(); + const onChoose = vi.fn(); + const onFinished = vi.fn(); const { container } = render(); const input = container.querySelector("input")!; - expect(input).toHaveFocus(); + await waitFor(() => expect(input).toHaveFocus()); function getEmoji(): string { return getActiveEmojiText(container); } // Initially on first emoji - expect(getEmoji()).toEqual("πŸ˜€"); + await waitFor(() => expect(getEmoji()).toEqual("πŸ˜€")); // Show highlight with first arrow press await userEvent.keyboard("[ArrowDown]"); @@ -364,18 +311,41 @@ describe("EmojiPicker", function () { expect(getEmoji()).toEqual("πŸ™‚"); }); - describe("Category keyboard selection", () => { - beforeEach(() => { - // mock offsetParent - Object.defineProperty(HTMLElement.prototype, "offsetParent", { - get() { - return this.parentNode; - }, - }); - }); + it("should point aria-activedescendant at the active emoji while searching", async () => { + const { container } = render(); + const input = container.querySelector("input")!; + await waitFor(() => expect(input).toHaveFocus()); + + function getActiveEmoji(): HTMLElement { + return container.querySelector('[role="gridcell"] [tabindex="0"]')!; + } + + // With no query, the input must not claim an active descendant: doing so makes + // screen readers read out the first emoji merely on focusing the input. + await waitFor(() => expect(getActiveEmoji()).toBeInTheDocument()); + expect(input).not.toHaveAttribute("aria-activedescendant"); + + // Once there's a query, the active emoji must be identified to screen readers, + // which requires the emoji cells to have IDs for aria-activedescendant to target. + await userEvent.type(input, "te"); + await waitFor(() => expect(getActiveEmoji().textContent).toEqual("πŸ§‘β€πŸ«")); + + const activeId = getActiveEmoji().id; + expect(activeId).not.toEqual(""); + expect(input).toHaveAttribute("aria-activedescendant", activeId); + expect(container.querySelectorAll(`[id="${activeId}"]`)).toHaveLength(1); + + // ...and it must follow the selection as the query changes + await userEvent.type(input, "s"); + await waitFor(() => expect(getActiveEmoji().textContent).toEqual("πŸ§ͺ")); + expect(input).toHaveAttribute("aria-activedescendant", getActiveEmoji().id); + expect(getActiveEmoji().id).not.toEqual(activeId); + }); + + describe("Category keyboard selection", () => { it("check tabindex for the first category when no recent emojis", async () => { - const { container } = render(); + const { container } = render(); await waitFor(() => { expect(container.querySelector('[data-category-id="people"]')).toBeInTheDocument(); @@ -392,13 +362,9 @@ describe("EmojiPicker", function () { }); it("check tabindex for recent category when recent emojis exist", async () => { - // Mock recent emojis - SettingsStore.setValue("recent_emoji", null, SettingLevel.ACCOUNT, [ - { emoji: "πŸ˜€", total: 3 }, - { emoji: "πŸŽ‰", total: 2 }, - ]); - - const { container } = render(); + const { container } = render( + , + ); await waitFor(() => { expect(container.querySelector('[data-category-id="recent"]')).toBeInTheDocument(); @@ -415,7 +381,7 @@ describe("EmojiPicker", function () { }); it("should update table position when clicking on a different category tab", async () => { - const { container } = render(); + const { container } = render(); await waitFor(() => { expect(container.querySelector('[data-category-id="people"]')).toBeInTheDocument(); @@ -437,7 +403,7 @@ describe("EmojiPicker", function () { }); it("should navigate between category tabs using arrow keys", async () => { - const { container } = render(); + const { container } = render(); await waitFor(() => { expect(container.querySelector('[data-category-id="people"]')).toBeInTheDocument(); @@ -464,7 +430,7 @@ describe("EmojiPicker", function () { }); it("should navigate to first/last category using Home/End keys", async () => { - const { container } = render(); + const { container } = render(); await waitFor(() => { expect(container.querySelector('[data-category-id="people"]')).toBeInTheDocument(); diff --git a/packages/shared-components/src/core/EmojiPicker/EmojiPicker.tsx b/packages/shared-components/src/core/EmojiPicker/EmojiPicker.tsx new file mode 100644 index 0000000000..eb9aa532b6 --- /dev/null +++ b/packages/shared-components/src/core/EmojiPicker/EmojiPicker.tsx @@ -0,0 +1,480 @@ +/* + * Copyright 2026 Element Creations Ltd. + * Copyright 2020 The Matrix.org Foundation C.I.C. + * Copyright 2019 Tulir Asokan + * + * 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 Dispatch, useCallback, useId, useMemo, useRef, useState } from "react"; +import { DATA_BY_CATEGORY, getEmojiFromUnicode, type Emoji as IEmoji } from "@matrix-org/emojibase-bindings"; +import { type ListRange, Virtuoso, type Components, type VirtuosoHandle } from "react-virtuoso"; +import { Heading } from "@vector-im/compound-web"; +import classNames from "classnames"; + +import { _t, _td } from "../i18n/i18n"; +import { AutoHideScrollbar } from "../utils/Scrollbar"; +import { + type IAction as RovingAction, + type IState as RovingState, + RovingGridIndexProvider, + RovingStateActionType, + type RovingTabIndexProviderProps, +} from "../roving"; +import { Tabs } from "./Tabs"; +import { Search } from "./Search"; +import { Preview } from "./Preview"; +import { QuickReactions } from "./QuickReactions"; +import { Emoji } from "./Emoji"; +import { type ButtonEvent } from "./RovingButton"; +import styles from "./EmojiPicker.module.css"; + +const ZERO_WIDTH_JOINER = "\u200D"; + +export const EMOJI_HEIGHT = 35; +export const EMOJIS_PER_ROW = 8; + +const CATEGORY_CONFIG: Category[] = [ + { id: "recent", untranslatedName: _td("emoji|category_frequently_used"), emoji: "πŸ•’" }, + { id: "people", untranslatedName: _td("emoji|category_smileys_people"), emoji: "πŸ˜€" }, + { id: "nature", untranslatedName: _td("emoji|category_animals_nature"), emoji: "πŸ•" }, + { id: "foods", untranslatedName: _td("emoji|category_food_drink"), emoji: "🍎" }, + { id: "activity", untranslatedName: _td("emoji|category_activities"), emoji: "⚽️" }, + { id: "places", untranslatedName: _td("emoji|category_travel_places"), emoji: "πŸš—" }, + { id: "objects", untranslatedName: _td("emoji|category_objects"), emoji: "πŸ’‘" }, + { id: "symbols", untranslatedName: _td("emoji|category_symbols"), emoji: "⁉️" }, + { id: "flags", untranslatedName: _td("emoji|category_flags"), emoji: "🏁" }, +]; + +export type CategoryKey = keyof typeof DATA_BY_CATEGORY | "recent"; + +export interface Category { + id: CategoryKey; + untranslatedName: TranslationKey; + // Emoji to show in the header for this category + emoji: string; +} + +/** + * A single entry in the flat virtual list: either a category header or a row of + * emoji. Headers are interleaved with the rows so that they scroll inline with + * the content rather than staying pinned to the top. + */ +type ListItem = { type: "header"; category: Category } | { type: "row"; emojis: IEmoji[]; categoryId: CategoryKey }; + +// Stable component identities so Virtuoso does not remount its internals on re-render. +// The single Virtuoso renders a flat list that mixes category headers and emoji rows. +// The Item wrapper picks its semantics per entry: a plain block for headers, a grid +// row for emoji rows. +const GridList: Components["List"] = ({ ref, ...props }) => { + return
; +}; + +const GridItem: Components["Item"] = ({ item, ...props }) => { + // Headers are interleaved with emoji rows as direct children of the role="grid" + // list, so they must also be grid rows: a grid may only own rows/rowgroups. + if (item.type === "header") { + return
; + } + return
; +}; + +const gridComponents = { List: GridList, Item: GridItem }; + +/** + * Props for {@link EmojiPicker}. + */ +export interface EmojiPickerProps { + /** + * Set of which emojis are already selected and should be decorated as such. + * If specified, emoji will use a checkbox role with aria-checked set appropriately. + */ + selectedEmojis?: Set; + /** + * Called when the user chooses an emoji. + * + * Return `false` to prevent the emoji being recorded as recently used. + */ + onChoose: (unicode: string) => boolean; + /** + * Called when the picker is done, e.g. an emoji was chosen with Enter. + */ + onFinished: () => void; + /** + * Returns whether the emoji with the given unicode should be disabled. + */ + isEmojiDisabled?: (unicode: string) => boolean; + /** + * Recently used emoji (unicode strings, most relevant first) to show in the + * "Frequently Used" category. The category is hidden when empty or omitted. + */ + recentEmojis?: string[]; + /** + * Called with the chosen emoji unicode when it should be recorded as + * recently used, i.e. when {@link onChoose} did not return `false`. + */ + onRecordRecent?: (unicode: string) => void; + /** + * Optional action resolver used to map keyboard events to roving actions, + * e.g. to apply app-level custom keybindings. + * + * When omitted, a default mapping based on `KeyboardEvent.key` is used. + */ + getAction?: RovingTabIndexProviderProps["getAction"]; +} + +/** Convert recent emoji characters to emoji data, removing unknowns and duplicates */ +function resolveRecentEmojis(recentEmojis: string[] | undefined): IEmoji[] { + return Array.from( + new Set((recentEmojis ?? []).map(getEmojiFromUnicode).filter((emoji): emoji is IEmoji => !!emoji)), + ); +} + +function emojiMatchesFilter(emoji: IEmoji, filter: string): boolean { + // If the query is an emoji containing a variation then strip it to provide more useful matches + if (filter.includes(ZERO_WIDTH_JOINER)) { + filter = filter.split(ZERO_WIDTH_JOINER, 2)[0]; + } + return ( + emoji.label.toLowerCase().includes(filter) || + (Array.isArray(emoji.emoticon) + ? emoji.emoticon.some((x) => x.includes(filter)) + : emoji.emoticon?.includes(filter)) || + emoji.shortcodes.some((x) => x.toLowerCase().includes(filter)) || + emoji.unicode.split(ZERO_WIDTH_JOINER).includes(filter) + ); +} + +/** + * Filter the given emoji by the (already lower-cased and trimmed) query and + * sort matches so the most relevant shortcodes come first. Returns the input + * unchanged when the filter is empty. Never mutates the input array. + * + * @param emojis - The emoji to filter + * @param lcFilter - The lower-cased and trimmed filter string + * + * @returns The filtered and sorted emoji + */ +export function filterEmojis(emojis: IEmoji[], lcFilter: string): IEmoji[] { + if (lcFilter === "") return emojis; + + return emojis + .filter((emoji) => emojiMatchesFilter(emoji, lcFilter)) + .sort((a, b) => { + const indexA = a.shortcodes[0].indexOf(lcFilter); + const indexB = b.shortcodes[0].indexOf(lcFilter); + + // Prioritize emojis containing the filter in its shortcode + if (indexA == -1 || indexB == -1) { + return indexB - indexA; + } + + // If both emojis start with the filter + // put the shorter emoji first + if (indexA == 0 && indexB == 0) { + return a.shortcodes[0].length - b.shortcodes[0].length; + } + + // Prioritize emojis starting with the filter + return indexA - indexB; + }); +} + +/** + * A searchable emoji picker with categories, quick reactions and keyboard + * (roving grid) navigation. + */ +export function EmojiPicker({ + selectedEmojis, + onChoose, + onFinished, + isEmojiDisabled, + recentEmojis, + onRecordRecent, + getAction, +}: EmojiPickerProps): React.ReactNode { + const [filter, setFilter] = useState(""); + const [previewEmoji, setPreviewEmoji] = useState(undefined); + // Track if user has interacted with arrow keys or search + const [showHighlight, setShowHighlight] = useState(false); + // The scroll container of the picker body, once mounted. The Virtuoso windows + // its rows against this shared scroll parent. + const [scrollElement, setScrollElement] = useState(null); + + const searchRef = useRef(null); + const virtuosoRef = useRef(null); + + const recentlyUsed = useMemo(() => resolveRecentEmojis(recentEmojis), [recentEmojis]); + + const lcFilter = filter.toLowerCase().trim(); // filter is case insensitive + + // Compute emoji to show in each category and which categories are enabled + // (ie. non-empty) from the recently used list and the filter. + const { dataByCategory, enabledCategories } = useMemo(() => { + const dataByCategory = {} as Record; + const enabledCategories: CategoryKey[] = []; + + for (const cat of CATEGORY_CONFIG) { + const emojis = filterEmojis(cat.id === "recent" ? recentlyUsed : DATA_BY_CATEGORY[cat.id], lcFilter); + dataByCategory[cat.id] = emojis; + if (emojis.length > 0) { + enabledCategories.push(cat.id); + } + } + + return { dataByCategory, enabledCategories }; + }, [lcFilter, recentlyUsed]); + + const [selectedCategory, setSelectedCategory] = useState( + recentlyUsed.length > 0 ? "recent" : "people", + ); + + const collectScrollElement = useCallback((ref: HTMLDivElement | null): void => { + setScrollElement(ref); + }, []); + + // Flatten into a list for virtuoso. + const items = useMemo(() => { + const flat: ListItem[] = []; + for (const cat of CATEGORY_CONFIG) { + const emojis = dataByCategory[cat.id]; + if (emojis.length === 0) continue; + flat.push({ type: "header", category: cat }); + for (let i = 0; i < emojis.length; i += EMOJIS_PER_ROW) { + flat.push({ type: "row", emojis: emojis.slice(i, i + EMOJIS_PER_ROW), categoryId: cat.id }); + } + } + return flat; + }, [dataByCategory]); + + const onRangeChanged = useCallback( + (range: ListRange): void => { + // Collect the categories that own any item within the rendered range. Each + // flat-list entry knows its category (headers directly, rows via categoryId), + // so a category is visible whenever one of its entries is in range - including + // when its header itself has scrolled out of view. + const visibleCategoryIds = new Set(); + for (let i = range.startIndex; i <= range.endIndex; i++) { + const item = items[i]; + if (!item) continue; + visibleCategoryIds.add(item.type === "header" ? item.category.id : item.categoryId); + } + + setSelectedCategory(CATEGORY_CONFIG.find((cat) => visibleCategoryIds.has(cat.id))?.id ?? "people"); + }, + [items], + ); + + // Given a roving emoji button returns the role=gridcell element containing it + const getGridcell = useCallback((rovingNode?: Element): Element | undefined => { + return rovingNode?.parentElement ?? undefined; + }, []); + + // Given a roving emoji button returns the role=row element containing it + const getRow = useCallback( + (rovingNode?: Element): Element | undefined => { + return getGridcell(rovingNode)?.parentElement ?? undefined; + }, + [getGridcell], + ); + + // Given a role=gridcell node returns the roving emoji button contained within + const getRovingNode = useCallback((gridcellNode: Element): HTMLElement | undefined => { + const node = gridcellNode.children[0]; + return node instanceof HTMLElement ? node : undefined; + }, []); + + const onKeyDown = useCallback( + (ev: React.KeyboardEvent, state: RovingState, dispatch: Dispatch): void => { + if (state.activeNode && ["ArrowDown", "ArrowRight", "ArrowLeft", "ArrowUp"].includes(ev.key)) { + // If highlight is not shown yet, show it and reset to first emoji + if (!showHighlight) { + setShowHighlight(true); + // Reset to first emoji when showing highlight for the first time (or after it was hidden) + if (state.nodes.length > 0) { + dispatch({ + type: RovingStateActionType.SetFocus, + payload: { node: state.nodes[0] }, + }); + } + ev.preventDefault(); + ev.stopPropagation(); + return; + } + } + }, + [showHighlight], + ); + + const shouldMoveFocus = useCallback((): boolean => { + // If the search field is active, the grid will still move the selected element but we don't + // want it to change the focus because the user trying to type in the field. + // NB. This does still break the ability to navigate the text field with left/right arrows + // as they change the selected emoji in the grid. This seems… bad, but I'm keeping it how it was. + return document.activeElement !== searchRef.current; + }, []); + + const onGridNavigation = useCallback( + (_ev: React.KeyboardEvent, focusNode: HTMLElement, state: RovingState): void => { + if (getRow(state.activeNode) !== getRow(focusNode)) { + focusNode.scrollIntoView({ + behavior: "auto", + block: "center", + inline: "center", + }); + } + }, + [getRow], + ); + + const scrollToCategory = useCallback( + (category: string): void => { + // Find the flat index of the category's header and scroll it to the top. + const index = items.findIndex((item) => item.type === "header" && item.category.id === category); + if (index >= 0) { + virtuosoRef.current?.scrollToIndex({ index, align: "start" }); + } + }, + [items], + ); + + const onChangeFilter = useCallback((newFilter: string): void => { + setFilter(newFilter); + // User has typed a query, show highlight. + // If the filter is cleared, hide the highlight again. + setShowHighlight(newFilter.trim() !== ""); + }, []); + + const onEnterFilter = useCallback((): void => { + // Only select emoji if highlight is shown + if (!showHighlight) return; + + const btn = scrollElement?.querySelector('[role="gridcell"] [tabindex="0"]'); + btn?.click(); + onFinished(); + }, [showHighlight, scrollElement, onFinished]); + + const onHoverEmoji = useCallback((emoji: IEmoji): void => { + setPreviewEmoji(emoji); + }, []); + + const onHoverEmojiEnd = useCallback((): void => { + setPreviewEmoji(undefined); + }, []); + + const onClickEmoji = useCallback( + (ev: ButtonEvent, emoji: IEmoji): void => { + if (onChoose(emoji.unicode) !== false) { + onRecordRecent?.(emoji.unicode); + } + if ((ev as React.KeyboardEvent).key === "Enter") { + onFinished(); + } + }, + [onChoose, onRecordRecent, onFinished], + ); + + // Base for the IDs of the individual emoji cells: the search box points at the + // active cell with aria-activedescendant, which requires the cells to have IDs. + // It doesn't actually matter what the ID is, provided each is unique, because + // the search box queries the roving context for the active element and gets its ID. + // (generate a single unique ID and then suffix because hooks can't be called in + // a loop). + const emojiIdBase = useId(); + + const renderItem = useCallback( + (_index: number, item: ListItem): React.ReactNode => { + if (item.type === "header") { + const category = item.category; + return ( +
+ + {_t(category.untranslatedName)} + +
+ ); + } + return item.emojis.map((emoji) => ( +
+ +
+ )); + }, + [selectedEmojis, onClickEmoji, onHoverEmoji, onHoverEmojiEnd, isEmojiDisabled, emojiIdBase], + ); + + const pickerBodyId = useId(); + + return ( + + {({ onKeyDownHandler }) => ( +
+ + + + {scrollElement && ( + + )} + + {previewEmoji ? ( + + ) : ( + + )} +
+ )} +
+ ); +} diff --git a/packages/shared-components/src/core/EmojiPicker/Preview.tsx b/packages/shared-components/src/core/EmojiPicker/Preview.tsx new file mode 100644 index 0000000000..746e174f81 --- /dev/null +++ b/packages/shared-components/src/core/EmojiPicker/Preview.tsx @@ -0,0 +1,42 @@ +/* + * Copyright 2026 Element Creations Ltd. + * Copyright 2020 The Matrix.org Foundation C.I.C. + * Copyright 2019 Tulir Asokan + * + * 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 Emoji } from "@matrix-org/emojibase-bindings"; +import classNames from "classnames"; + +import styles from "./EmojiPicker.module.css"; + +interface IProps { + /** + * The emoji to preview. + */ + emoji: Emoji; +} + +/** + * A preview of the selected emoji, showing the emoji itself, its name, and its shortcode. + */ +export const Preview: React.FC = ({ emoji }) => { + const { + unicode, + label, + shortcodes: [shortcode], + } = emoji; + + return ( +
+
{unicode}
+
+
{label}
+
{shortcode}
+
+
+ ); +}; diff --git a/packages/shared-components/src/core/EmojiPicker/QuickReactions.tsx b/packages/shared-components/src/core/EmojiPicker/QuickReactions.tsx new file mode 100644 index 0000000000..66f53c2fb3 --- /dev/null +++ b/packages/shared-components/src/core/EmojiPicker/QuickReactions.tsx @@ -0,0 +1,90 @@ +/* + * Copyright 2026 Element Creations Ltd. + * Copyright 2020 The Matrix.org Foundation C.I.C. + * Copyright 2019 Tulir Asokan + * + * 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, { useCallback, useState } from "react"; +import { getEmojiFromUnicode, type Emoji as IEmoji } from "@matrix-org/emojibase-bindings"; +import classNames from "classnames"; + +import { _t } from "../i18n/i18n"; +import { Toolbar, type RovingTabIndexProviderProps } from "../roving"; +import { Emoji } from "./Emoji"; +import { type ButtonEvent } from "./RovingButton"; +import styles from "./EmojiPicker.module.css"; +import { Heading } from "@vector-im/compound-web"; + +// NB. This is the variation-selector Heart in Quick Reactions as per the spec) +const QUICK_REACTIONS = ["πŸ‘", "πŸ‘Ž", "πŸ˜„", "πŸŽ‰", "πŸ˜•", "❀️", "πŸš€", "πŸ‘€"].map((emoji) => { + const data = getEmojiFromUnicode(emoji); + if (!data) { + throw new Error(`Emoji ${emoji} doesn't exist in emojibase`); + } + return data; +}); + +interface IProps { + /** + * Set of emojis already selected. + */ + selectedEmojis?: Set; + /** + * Called when an emoji is clicked. + * + * @param ev - The button event + * @param emoji - The emoji that was clicked + */ + onClick: (ev: ButtonEvent, emoji: IEmoji) => void; + /** + * Optional function to override the default keyboard navigation mapping. + * When omitted, a default mapping based on `KeyboardEvent.key` is used. + */ + getAction?: RovingTabIndexProviderProps["getAction"]; +} + +/** + * A row of quick reaction emojis at the bottom of the emoji picker. + */ +export const QuickReactions: React.FC = ({ selectedEmojis, onClick, getAction }) => { + const [hover, setHover] = useState(undefined); + + const onMouseEnter = useCallback((emoji: IEmoji): void => { + setHover(emoji); + }, []); + + const onMouseLeave = useCallback((): void => { + setHover(undefined); + }, []); + + return ( +
+ + {!hover ? ( + _t("emoji|quick_reactions") + ) : ( + + {hover.label} + {hover.shortcodes[0]} + + )} + + + {QUICK_REACTIONS.map((emoji) => ( + + ))} + +
+ ); +}; diff --git a/packages/shared-components/src/core/EmojiPicker/RovingButton.tsx b/packages/shared-components/src/core/EmojiPicker/RovingButton.tsx new file mode 100644 index 0000000000..ba13509661 --- /dev/null +++ b/packages/shared-components/src/core/EmojiPicker/RovingButton.tsx @@ -0,0 +1,116 @@ +/* + * 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 React, { type JSX } from "react"; + +import { useRovingTabIndex } from "../roving"; + +/** + * An event which can trigger a button activation. + */ +export type ButtonEvent = React.MouseEvent | React.KeyboardEvent | React.FormEvent; + +interface RovingButtonProps extends Omit, "onClick"> { + /** + * Event handler for button activation. Invoked on click, Enter keydown and Space keyup. + */ + onClick(this: void, ev: ButtonEvent): void; + /** + * Whether the button should be disabled. A disabled button keeps its role and + * remains discoverable by keyboard, but is marked `aria-disabled` and does not + * invoke `onClick`. + */ + disabled?: boolean; + /** + * Whether the button should take the active roving tab stop when the mouse + * moves over it. + */ + focusOnMouseOver?: boolean; +} + +/** + * A minimal button participating in the surrounding roving tabindex group. + * + * Rendered as a `div` with `role="button"` (overridable) rather than a native + * button so that keyboard activation events are observable by the caller: + * Enter is consumed on keydown and Space on keyup, mirroring native button + * behaviour, without also risking activation of other focusable elements that + * might receive focus as a result of the click handler running. + */ +export function RovingButton({ + onClick, + disabled, + focusOnMouseOver, + onFocus, + onMouseOver, + onKeyDown, + onKeyUp, + role = "button", + children, + ...props +}: RovingButtonProps): JSX.Element { + const [onFocusInternal, isActive, ref] = useRovingTabIndex(); + + let behaviourProps: React.HTMLAttributes = { onKeyDown, onKeyUp }; + if (disabled) { + behaviourProps["aria-disabled"] = true; + } else { + behaviourProps = { + onClick, + onKeyDown: (e) => { + switch (e.key) { + case "Enter": + e.stopPropagation(); + e.preventDefault(); + onClick(e); + break; + case " ": + e.stopPropagation(); + e.preventDefault(); + break; + default: + onKeyDown?.(e); + } + }, + onKeyUp: (e) => { + switch (e.key) { + case "Enter": + e.stopPropagation(); + e.preventDefault(); + break; + case " ": + e.stopPropagation(); + e.preventDefault(); + onClick(e); + break; + default: + onKeyUp?.(e); + } + }, + }; + } + + return ( +
{ + onFocusInternal(); + onFocus?.(event); + }} + onMouseOver={(event) => { + if (focusOnMouseOver) onFocusInternal(); + onMouseOver?.(event); + }} + > + {children} +
+ ); +} diff --git a/packages/shared-components/src/core/EmojiPicker/Search.tsx b/packages/shared-components/src/core/EmojiPicker/Search.tsx new file mode 100644 index 0000000000..8c4321a5ae --- /dev/null +++ b/packages/shared-components/src/core/EmojiPicker/Search.tsx @@ -0,0 +1,109 @@ +/* + * Copyright 2026 Element Creations Ltd. + * Copyright 2020 The Matrix.org Foundation C.I.C. + * Copyright 2019 Tulir Asokan + * + * 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, useCallback, useContext, useEffect } from "react"; +import { CloseIcon, SearchIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; + +import { _t } from "../i18n/i18n"; +import { RovingTabIndexContext } from "../roving"; +import styles from "./EmojiPicker.module.css"; + +interface IProps { + /** + * The current search query. + */ + query: string; + /** + * Called when the search query changes. + * + * @param value - The new search query + */ + onChange: (value: string) => void; + /** + * Called when the Enter key is pressed in the search input. + */ + onEnter: () => void; + /** + * Called when a key is pressed in the search input. + * + * @param event - The keyboard event + */ + onKeyDown: (event: React.KeyboardEvent) => void; + /** + * The id of the element that this search box controls, for aria-controls. + */ + controlsId: string; + /** + * Ref to the search input, owned by the picker so it can inspect focus. + */ + inputRef: React.RefObject; +} + +/** + * The search input at the top of the emoji picker. + */ +export const Search: React.FC = ({ query, onChange, onEnter, onKeyDown, inputRef, controlsId }) => { + const context = useContext(RovingTabIndexContext); + + // This component gets mounted in a number of different places where the autoFocus attribute doesn't + // work, so focus the search box manually. + useEffect(() => { + inputRef.current?.focus(); + }, [inputRef]); + + const onInputKeyDown = useCallback( + (ev: React.KeyboardEvent): void => { + if (ev.key === "Enter") { + onEnter(); + ev.stopPropagation(); + ev.preventDefault(); + } else { + onKeyDown(ev); + } + }, + [onEnter, onKeyDown], + ); + + let rightButton: JSX.Element; + if (query) { + rightButton = ( + + ); + } else { + rightButton = ( + + + + ); + } + + return ( +
+ onChange(ev.target.value)} + onKeyDown={onInputKeyDown} + ref={inputRef} + // Setting aria-activedescendant on the input allows screen readers to identify the active emoji. + // Setting it when there is not a query causes screen readers to read out the first emoji when focusing the input, and it continually tells you you are in the table vs the input. + aria-activedescendant={query ? context.state.activeNode?.id : undefined} + aria-controls={controlsId} + aria-haspopup="grid" + aria-autocomplete="list" + /> + {rightButton} +
+ ); +}; diff --git a/packages/shared-components/src/core/EmojiPicker/Tabs.tsx b/packages/shared-components/src/core/EmojiPicker/Tabs.tsx new file mode 100644 index 0000000000..66effceec2 --- /dev/null +++ b/packages/shared-components/src/core/EmojiPicker/Tabs.tsx @@ -0,0 +1,179 @@ +/* + * Copyright 2026 Element Creations Ltd. + * Copyright 2020 The Matrix.org Foundation C.I.C. + * Copyright 2019 Tulir Asokan + * + * 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, { useCallback, useRef } from "react"; +import classNames from "classnames"; + +import { _t } from "../i18n/i18n"; +import { RovingAction, type RovingTabIndexProviderProps } from "../roving"; +import { type CategoryKey, type Category } from "./EmojiPicker"; +import styles from "./EmojiPicker.module.css"; + +interface Props { + /** + * The categories to display in the tab bar. + */ + categories: Category[]; + /** + * The categories that are enabled and can be selected. Disabled categories will be rendered but not selectable. + */ + enabledCategories: CategoryKey[]; + /** + * The currently selected category. + */ + selectedCategory: CategoryKey; + /** + * Called when a category tab is clicked. + * + * @param id - The id of the category that was clicked. + */ + onAnchorClick: (id: CategoryKey) => void; + /** + * Id of the scrollable picker body that the tabs control (for aria-controls). + */ + pickerBodyId: string; + /** + * Optional action resolver used to map keyboard events to + * {@link RovingAction} values, e.g. to apply app-level custom keybindings. + * + * When omitted, a default mapping based on `KeyboardEvent.key` is used. + */ + getAction?: RovingTabIndexProviderProps["getAction"]; +} + +const getDefaultAction = (ev: React.KeyboardEvent): RovingAction | undefined => { + switch (ev.key) { + case "ArrowLeft": + return RovingAction.ArrowLeft; + case "ArrowRight": + return RovingAction.ArrowRight; + case "Home": + return RovingAction.Home; + case "End": + return RovingAction.End; + default: + return undefined; + } +}; + +/** + * The tab bar at the top of the emoji picker with a tab for each category. + */ +export const Tabs: React.FC = ({ + categories, + enabledCategories, + selectedCategory, + onAnchorClick, + pickerBodyId, + getAction, +}) => { + const findNearestEnabled = useCallback( + (index: number, delta: number): number | undefined => { + index += categories.length; + const cats = [...categories, ...categories, ...categories]; + + while (index < cats.length && index >= 0) { + if (enabledCategories.includes(cats[index].id)) return index % categories.length; + index += delta > 0 ? 1 : -1; + } + }, + [categories, enabledCategories], + ); + + const changeCategoryAbsolute = useCallback( + (index: number, delta = 1): void => { + const category = categories[findNearestEnabled(index, delta)!]; + if (category) { + onAnchorClick(category.id); + tabRefs.current[category.id]?.current?.focus(); + } + }, + [categories, findNearestEnabled, onAnchorClick], + ); + + const changeCategoryRelative = useCallback( + (delta: number): void => { + // Move to the next/previous category using the selected as the current. + const current = categories.findIndex((c) => c.id === selectedCategory); + changeCategoryAbsolute(current + delta, delta); + }, + [categories, selectedCategory, changeCategoryAbsolute], + ); + + // Implements ARIA Tabs with Automatic Activation pattern + // https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-1/tabs.html + const onKeyDown = useCallback( + (ev: React.KeyboardEvent): void => { + let handled = true; + + const action = getAction?.(ev) ?? getDefaultAction(ev); + switch (action) { + case RovingAction.ArrowLeft: + changeCategoryRelative(-1); + break; + case RovingAction.ArrowRight: + changeCategoryRelative(1); + break; + + case RovingAction.Home: + changeCategoryAbsolute(0); + break; + case RovingAction.End: + changeCategoryAbsolute(categories.length - 1, -1); + break; + default: + handled = false; + } + + if (handled) { + ev.preventDefault(); + ev.stopPropagation(); + } + }, + [getAction, changeCategoryRelative, changeCategoryAbsolute, categories.length], + ); + + const tabRefs = useRef({} as Record>); + if (!tabRefs.current.recent) { + for (const category of categories) { + tabRefs.current[category.id] = React.createRef(); + } + } + + return ( + + ); +}; diff --git a/packages/shared-components/src/core/EmojiPicker/index.ts b/packages/shared-components/src/core/EmojiPicker/index.ts new file mode 100644 index 0000000000..ffca71ac9b --- /dev/null +++ b/packages/shared-components/src/core/EmojiPicker/index.ts @@ -0,0 +1,8 @@ +/* + * 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. + */ + +export { EmojiPicker, type EmojiPickerProps } from "./EmojiPicker"; diff --git a/packages/shared-components/src/core/roving/Toolbar.tsx b/packages/shared-components/src/core/roving/Toolbar.tsx new file mode 100644 index 0000000000..82bec14ba0 --- /dev/null +++ b/packages/shared-components/src/core/roving/Toolbar.tsx @@ -0,0 +1,83 @@ +/* + * Copyright 2026 Element Creations Ltd. + * Copyright 2020 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 Ref } from "react"; + +import { RovingAction, RovingTabIndexProvider, type RovingTabIndexProviderProps } from "./RovingTabIndex"; + +/** + * Props for {@link Toolbar}. + */ +export interface ToolbarProps extends Omit, "onKeyDown"> { + ref?: Ref; + /** + * Optional action resolver used to map keyboard events to + * {@link RovingAction} values, e.g. to apply app-level custom keybindings. + * + * When omitted, a default mapping based on `KeyboardEvent.key` is used. + */ + getAction?: RovingTabIndexProviderProps["getAction"]; +} + +const getDefaultAction = (ev: React.KeyboardEvent): RovingAction | undefined => { + switch (ev.key) { + case "ArrowUp": + return RovingAction.ArrowUp; + case "ArrowDown": + return RovingAction.ArrowDown; + default: + return undefined; + } +}; + +/** + * This component implements the Toolbar design pattern from the WAI-ARIA Authoring Practices guidelines. + * https://www.w3.org/TR/wai-aria-practices-1.1/#toolbar + * All buttons passed in children must use RovingTabIndex to set `onFocus`, `isActive`, `ref`. + */ +export const Toolbar = ({ children, ref, getAction, ...props }: ToolbarProps): JSX.Element => { + const onKeyDown = (ev: React.KeyboardEvent): void => { + const target = ev.target as HTMLElement; + // Don't interfere with input default keydown behaviour + if (target.tagName === "INPUT") return; + + let handled = true; + + // HOME and END are handled by RovingTabIndexProvider + const action = getAction?.(ev) ?? getDefaultAction(ev); + switch (action) { + case RovingAction.ArrowUp: + case RovingAction.ArrowDown: + if (target.hasAttribute("aria-haspopup")) { + target.click(); + } + break; + + default: + handled = false; + } + + if (handled) { + ev.preventDefault(); + ev.stopPropagation(); + } + }; + + // We handle both up/down and left/right as is allowed in the above WAI ARIA best practices + return ( + + {({ onKeyDownHandler }) => ( + // This may be wrong but seems to work, this is a roving-toolbar, so the focus follows one of the children + // oxlint-disable-next-line jsx-a11y/interactive-supports-focus +
+ {children} +
+ )} +
+ ); +}; diff --git a/packages/shared-components/src/core/roving/index.ts b/packages/shared-components/src/core/roving/index.ts index a7a7ecedf6..067f9c5670 100644 --- a/packages/shared-components/src/core/roving/index.ts +++ b/packages/shared-components/src/core/roving/index.ts @@ -25,3 +25,5 @@ export type { RovingGridRowResolver, } from "./RovingGridIndex"; export { RovingTabIndexWrapper } from "./RovingTabIndexWrapper"; +export { Toolbar } from "./Toolbar"; +export type { ToolbarProps } from "./Toolbar"; diff --git a/packages/shared-components/src/i18n/strings/en_EN.json b/packages/shared-components/src/i18n/strings/en_EN.json index 2dfcc71fdb..8166de74fe 100644 --- a/packages/shared-components/src/i18n/strings/en_EN.json +++ b/packages/shared-components/src/i18n/strings/en_EN.json @@ -44,6 +44,23 @@ "devtools": { "toggle_event": "toggle event" }, + "emoji": { + "categories": "Categories", + "category_activities": "Activities", + "category_animals_nature": "Animals & Nature", + "category_flags": "Flags", + "category_food_drink": "Food & Drink", + "category_frequently_used": "Frequently Used", + "category_objects": "Objects", + "category_smileys_people": "Smileys & People", + "category_symbols": "Symbols", + "category_travel_places": "Travel & Places", + "quick_reactions": "Quick Reactions" + }, + "emoji_picker": { + "cancel_search_label": "Cancel search", + "emoji_picker": "Emoji picker" + }, "keyboard": { "shift": "Shift" }, diff --git a/packages/shared-components/src/index.ts b/packages/shared-components/src/index.ts index 638d7b78fe..f483f4273e 100644 --- a/packages/shared-components/src/index.ts +++ b/packages/shared-components/src/index.ts @@ -12,6 +12,7 @@ export * from "./audio/PlayPauseButton"; export * from "./audio/SeekBar"; export * from "./core/AvatarWithDetails"; export * from "./core/MemberAvatar/MemberAvatarView.tsx"; +export * from "./core/EmojiPicker"; export * from "./core/FacePile/FacePileView.tsx"; export * from "./core/roving"; export * from "./room/composer/Banner"; diff --git a/packages/shared-components/vite.config.ts b/packages/shared-components/vite.config.ts index a87e3a3fa3..8652e26902 100644 --- a/packages/shared-components/vite.config.ts +++ b/packages/shared-components/vite.config.ts @@ -68,6 +68,7 @@ export default defineConfig({ // make sure to externalize deps that shouldn't be bundled // into your library external: [ + "@matrix-org/emojibase-bindings", "@vector-im/compound-design-tokens", "@vector-im/compound-web", "react-virtuoso", @@ -83,6 +84,7 @@ export default defineConfig({ // for externalized deps globals: { "react": "react", + "@matrix-org/emojibase-bindings": "matrixEmojibaseBindings", "@vector-im/compound-design-tokens": "compoundDesignTokens", "@vector-im/compound-web": "compoundWeb", "react-virtuoso": "reactVirtuoso", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aa572b673e..dfa0eaab3b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -209,6 +209,9 @@ catalogs: '@fontsource/inter': specifier: 5.3.0 version: 5.3.0 + '@matrix-org/emojibase-bindings': + specifier: 1.5.0 + version: 1.5.0 '@playwright/test': specifier: 1.61.1 version: 1.61.1 @@ -538,7 +541,7 @@ importers: specifier: ^0.37.0 version: 0.37.0 '@matrix-org/emojibase-bindings': - specifier: ^1.5.0 + specifier: 'catalog:' version: 1.5.0 '@matrix-org/react-sdk-module-api': specifier: ^2.4.0 @@ -1375,6 +1378,9 @@ importers: '@element-hq/element-web-module-api': specifier: workspace:* version: link:../module-api + '@matrix-org/emojibase-bindings': + specifier: 'catalog:' + version: 1.5.0 '@matrix-org/spec': specifier: ^1.7.0 version: 1.16.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 26578418f4..d9b508a462 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -30,6 +30,8 @@ catalog: "@vector-im/compound-web": 9.9.0 # i18n matrix-web-i18n: 3.6.0 + # emojibase + "@matrix-org/emojibase-bindings": 1.5.0 # fonts "@fontsource/inter": 5.3.0 # vite