From 54f325e87142fdad30771d1aa58869660ee711a7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:42:12 +0000 Subject: [PATCH 01/25] Update vector-im --- yarn.lock | 611 ++++++++++++++++++++++++++---------------------------- 1 file changed, 299 insertions(+), 312 deletions(-) diff --git a/yarn.lock b/yarn.lock index f59810b66f5..a8c52acfb43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1919,41 +1919,41 @@ "@figspec/components" "^1.0.1" "@lit-labs/react" "^1.0.2" -"@floating-ui/core@^1.6.0": - version "1.6.8" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12" - integrity sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA== +"@floating-ui/core@^1.7.3": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.3.tgz#462d722f001e23e46d86fd2bd0d21b7693ccb8b7" + integrity sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w== dependencies: - "@floating-ui/utils" "^0.2.8" + "@floating-ui/utils" "^0.2.10" -"@floating-ui/dom@^1.0.0": - version "1.6.11" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.11.tgz#8631857838d34ee5712339eb7cbdfb8ad34da723" - integrity sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ== +"@floating-ui/dom@^1.7.3": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.3.tgz#6174ac3409e6a064bbdf1f4bb07188ee9461f8cf" + integrity sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag== dependencies: - "@floating-ui/core" "^1.6.0" - "@floating-ui/utils" "^0.2.8" + "@floating-ui/core" "^1.7.3" + "@floating-ui/utils" "^0.2.10" -"@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" - integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== +"@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.5.tgz#d11e3726d2eb385d8cf3216348742907c1d49fcf" + integrity sha512-HDO/1/1oH9fjj4eLgegrlH3dklZpHtUYYFiVwMUwfGvk9jWDRWqkklA2/NFScknrcNSspbV868WjXORvreDX+Q== dependencies: - "@floating-ui/dom" "^1.0.0" + "@floating-ui/dom" "^1.7.3" "@floating-ui/react@^0.27.0": - version "0.27.0" - resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.27.0.tgz#e0931fd09374ab4b8ce1a1af5cb44d1ccd1bb95a" - integrity sha512-WLEksq7fJapXSJbmfiyq9pAW0a7ZFMEJToFE4oTDESxGjoa+nZu3YMjmZE2KvoUtQhqOK2yMMfWQFZyeWD0wGQ== + version "0.27.15" + resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.27.15.tgz#1005b01e8de79ff98de9a93717bdd1bd4fcd1949" + integrity sha512-0LGxhBi3BB1DwuSNQAmuaSuertFzNAerlMdPbotjTVnvPtdOs7CkrHLaev5NIXemhzDXNC0tFzuseut7cWA5mw== dependencies: - "@floating-ui/react-dom" "^2.1.2" - "@floating-ui/utils" "^0.2.8" + "@floating-ui/react-dom" "^2.1.5" + "@floating-ui/utils" "^0.2.10" tabbable "^6.0.0" -"@floating-ui/utils@^0.2.8": - version "0.2.8" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" - integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== +"@floating-ui/utils@^0.2.10": + version "0.2.10" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.10.tgz#a2a1e3812d14525f725d011a73eceb41fef5bc1c" + integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ== "@fontsource/inconsolata@^5": version "5.2.6" @@ -2723,286 +2723,289 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@radix-ui/primitive@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.0.tgz#42ef83b3b56dccad5d703ae8c42919a68798bbe2" - integrity sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA== +"@radix-ui/primitive@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.2.tgz#83f415c4425f21e3d27914c12b3272a32e3dae65" + integrity sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA== -"@radix-ui/react-arrow@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz#744f388182d360b86285217e43b6c63633f39e7a" - integrity sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw== +"@radix-ui/react-arrow@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz#e14a2657c81d961598c5e72b73dd6098acc04f09" + integrity sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w== dependencies: - "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-primitive" "2.1.3" -"@radix-ui/react-collection@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.0.tgz#f18af78e46454a2360d103c2251773028b7724ed" - integrity sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw== +"@radix-ui/react-collection@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.7.tgz#d05c25ca9ac4695cc19ba91f42f686e3ea2d9aec" + integrity sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw== dependencies: - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-slot" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" -"@radix-ui/react-compose-refs@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz#656432461fc8283d7b591dcf0d79152fae9ecc74" - integrity sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw== +"@radix-ui/react-compose-refs@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30" + integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== "@radix-ui/react-context-menu@^2.2.1": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-context-menu/-/react-context-menu-2.2.2.tgz#efcddc559fc3011721b65148f062d04027f76c7a" - integrity sha512-99EatSTpW+hRYHt7m8wdDlLtkmTovEe8Z/hnxUPV+SKuuNL5HWNhQI4QSdjZqNSgXHay2z4M3Dym73j9p2Gx5Q== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-menu" "2.1.2" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - -"@radix-ui/react-context@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.0.tgz#6df8d983546cfd1999c8512f3a8ad85a6e7fcee8" - integrity sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A== - -"@radix-ui/react-context@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a" - integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q== - -"@radix-ui/react-dialog@^1.1.1": + version "2.2.15" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context-menu/-/react-context-menu-2.2.15.tgz#d61a7c8badbcad72fadb9ed87efaa21df60b0a99" + integrity sha512-UsQUMjcYTsBjTSXw0P3GO0werEQvUY2plgRQuKoCTtkNr45q1DiL51j4m7gxhABzZ0BadoXNsIbg7F3KwiUBbw== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-menu" "2.1.15" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.2.2" + +"@radix-ui/react-context@1.1.2": version "1.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz#d9345575211d6f2d13e209e84aec9a8584b54d6c" - integrity sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.1" - "@radix-ui/react-focus-guards" "1.1.1" - "@radix-ui/react-focus-scope" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-portal" "1.1.2" - "@radix-ui/react-presence" "1.1.1" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-slot" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - aria-hidden "^1.1.1" - react-remove-scroll "2.6.0" - -"@radix-ui/react-direction@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" - integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36" + integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== -"@radix-ui/react-dismissable-layer@1.1.1": +"@radix-ui/react-dialog@^1.1.1": + version "1.1.14" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz#4c69c80c258bc6561398cfce055202ea11075107" + integrity sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.10" + "@radix-ui/react-focus-guards" "1.1.2" + "@radix-ui/react-focus-scope" "1.1.7" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.4" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" + "@radix-ui/react-use-controllable-state" "1.2.2" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" + +"@radix-ui/react-direction@1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz#cbdcb739c5403382bdde5f9243042ba643883396" - integrity sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ== + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.1.tgz#39e5a5769e676c753204b792fbe6cf508e550a14" + integrity sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw== + +"@radix-ui/react-dismissable-layer@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz#429b9bada3672c6895a5d6a642aca6ecaf4f18c3" + integrity sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ== dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-escape-keydown" "1.1.0" + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-escape-keydown" "1.1.1" "@radix-ui/react-dropdown-menu@^2.1.1": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz#acc49577130e3c875ef0133bd1e271ea3392d924" - integrity sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-menu" "2.1.2" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - -"@radix-ui/react-focus-guards@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz#8635edd346304f8b42cae86b05912b61aef27afe" - integrity sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg== + version "2.1.15" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.15.tgz#f507320de8e11bc1e671a6ec0c27a7a89e725131" + integrity sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-menu" "2.1.15" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-controllable-state" "1.2.2" + +"@radix-ui/react-focus-guards@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz#4ec9a7e50925f7fb661394460045b46212a33bed" + integrity sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA== -"@radix-ui/react-focus-scope@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz#ebe2891a298e0a33ad34daab2aad8dea31caf0b2" - integrity sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA== +"@radix-ui/react-focus-scope@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz#dfe76fc103537d80bf42723a183773fd07bfb58d" + integrity sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw== dependencies: - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-form@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-form/-/react-form-0.1.0.tgz#7111a6aa54a2bde0d11fb72643f9ffc871ac58ad" - integrity sha512-1/oVYPDjbFILOLIarcGcMKo+y6SbTVT/iUKVEw59CF4offwZgBgC3ZOeSBewjqU0vdA6FWTPWTN63obj55S/tQ== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-label" "2.1.0" - "@radix-ui/react-primitive" "2.0.0" - -"@radix-ui/react-id@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed" - integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA== - dependencies: - "@radix-ui/react-use-layout-effect" "1.1.0" - -"@radix-ui/react-label@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.0.tgz#3aa2418d70bb242be37c51ff5e51a2adcbc372e3" - integrity sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw== + version "0.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-form/-/react-form-0.1.7.tgz#acbf7ef57bbed1e76ea1f2d3b18eff465519435c" + integrity sha512-IXLKFnaYvFg/KkeV5QfOX7tRnwHXp127koOFUjLWMTrRv5Rny3DQcAtIFFeA/Cli4HHM8DuJCXAUsgnFVJndlw== dependencies: - "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-label" "2.1.7" + "@radix-ui/react-primitive" "2.1.3" -"@radix-ui/react-menu@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.2.tgz#91f6815845a4298dde775563ed2d80b7ad667899" - integrity sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-collection" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-dismissable-layer" "1.1.1" - "@radix-ui/react-focus-guards" "1.1.1" - "@radix-ui/react-focus-scope" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-popper" "1.2.0" - "@radix-ui/react-portal" "1.1.2" - "@radix-ui/react-presence" "1.1.1" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-roving-focus" "1.1.0" - "@radix-ui/react-slot" "1.1.0" - "@radix-ui/react-use-callback-ref" "1.1.0" - aria-hidden "^1.1.1" - react-remove-scroll "2.6.0" - -"@radix-ui/react-popper@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.0.tgz#a3e500193d144fe2d8f5d5e60e393d64111f2a7a" - integrity sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg== +"@radix-ui/react-id@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.1.tgz#1404002e79a03fe062b7e3864aa01e24bd1471f7" + integrity sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-label@2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.7.tgz#ad959ff9c6e4968d533329eb95696e1ba8ad72ab" + integrity sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ== + dependencies: + "@radix-ui/react-primitive" "2.1.3" + +"@radix-ui/react-menu@2.1.15": + version "2.1.15" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.15.tgz#a1a8f06cab3c309f9998cdbd2b3ad279e42ed483" + integrity sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-collection" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.10" + "@radix-ui/react-focus-guards" "1.1.2" + "@radix-ui/react-focus-scope" "1.1.7" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-popper" "1.2.7" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.4" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-roving-focus" "1.1.10" + "@radix-ui/react-slot" "1.2.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" + +"@radix-ui/react-popper@1.2.7": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.7.tgz#531cf2eebb3d3270d58f7d8136e4517646429978" + integrity sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ== dependencies: "@floating-ui/react-dom" "^2.0.0" - "@radix-ui/react-arrow" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" - "@radix-ui/react-use-rect" "1.1.0" - "@radix-ui/react-use-size" "1.1.0" - "@radix-ui/rect" "1.1.0" - -"@radix-ui/react-portal@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.2.tgz#51eb46dae7505074b306ebcb985bf65cc547d74e" - integrity sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg== - dependencies: - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-layout-effect" "1.1.0" - -"@radix-ui/react-presence@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.1.tgz#98aba423dba5e0c687a782c0669dcd99de17f9b1" - integrity sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A== + "@radix-ui/react-arrow" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-use-rect" "1.1.1" + "@radix-ui/react-use-size" "1.1.1" + "@radix-ui/rect" "1.1.1" + +"@radix-ui/react-portal@1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.9.tgz#14c3649fe48ec474ac51ed9f2b9f5da4d91c4472" + integrity sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ== + dependencies: + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-presence@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.4.tgz#253ac0ad4946c5b4a9c66878335f5cf07c967ced" + integrity sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA== dependencies: - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-primitive@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz#fe05715faa9203a223ccc0be15dc44b9f9822884" - integrity sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw== +"@radix-ui/react-primitive@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz#db9b8bcff49e01be510ad79893fb0e4cda50f1bc" + integrity sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ== dependencies: - "@radix-ui/react-slot" "1.1.0" + "@radix-ui/react-slot" "1.2.3" "@radix-ui/react-progress@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-progress/-/react-progress-1.1.0.tgz#28c267885ec154fc557ec7a66cb462787312f7e2" - integrity sha512-aSzvnYpP725CROcxAOEBVZZSIQVQdHgBr2QQFKySsaD14u8dNT0batuXI+AAGDdAHfXH8rbnHmjYFqVJ21KkRg== - dependencies: - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - -"@radix-ui/react-roving-focus@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz#b30c59daf7e714c748805bfe11c76f96caaac35e" - integrity sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA== - dependencies: - "@radix-ui/primitive" "1.1.0" - "@radix-ui/react-collection" "1.1.0" - "@radix-ui/react-compose-refs" "1.1.0" - "@radix-ui/react-context" "1.1.0" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-primitive" "2.0.0" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-progress/-/react-progress-1.1.7.tgz#a2b76398b3f24b6bd5e37f112b1e30fbedd4f38e" + integrity sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg== + dependencies: + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + +"@radix-ui/react-roving-focus@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz#46030496d2a490c4979d29a7e1252465e51e4b0b" + integrity sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-collection" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.2.2" "@radix-ui/react-separator@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.1.0.tgz#ee0f4d86003b0e3ea7bc6ccab01ea0adee32663e" - integrity sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA== + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.1.7.tgz#a18bd7fd07c10fda1bba14f2a3032e7b1a2b3470" + integrity sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA== dependencies: - "@radix-ui/react-primitive" "2.0.0" + "@radix-ui/react-primitive" "2.1.3" -"@radix-ui/react-slot@1.1.0", "@radix-ui/react-slot@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.0.tgz#7c5e48c36ef5496d97b08f1357bb26ed7c714b84" - integrity sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw== +"@radix-ui/react-slot@1.2.3", "@radix-ui/react-slot@^1.1.0": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.3.tgz#502d6e354fc847d4169c3bc5f189de777f68cfe1" + integrity sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A== dependencies: - "@radix-ui/react-compose-refs" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.2" -"@radix-ui/react-use-callback-ref@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1" - integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== +"@radix-ui/react-use-callback-ref@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40" + integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== -"@radix-ui/react-use-controllable-state@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0" - integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw== +"@radix-ui/react-use-controllable-state@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190" + integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg== dependencies: - "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-effect-event" "0.0.2" + "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-use-escape-keydown@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754" - integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw== +"@radix-ui/react-use-effect-event@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz#090cf30d00a4c7632a15548512e9152217593907" + integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA== dependencies: - "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-use-layout-effect@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27" - integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== +"@radix-ui/react-use-escape-keydown@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29" + integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.1" -"@radix-ui/react-use-rect@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz#13b25b913bd3e3987cc9b073a1a164bb1cf47b88" - integrity sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ== +"@radix-ui/react-use-layout-effect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e" + integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== + +"@radix-ui/react-use-rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz#01443ca8ed071d33023c1113e5173b5ed8769152" + integrity sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w== dependencies: - "@radix-ui/rect" "1.1.0" + "@radix-ui/rect" "1.1.1" -"@radix-ui/react-use-size@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz#b4dba7fbd3882ee09e8d2a44a3eed3a7e555246b" - integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw== +"@radix-ui/react-use-size@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz#6de276ffbc389a537ffe4316f5b0f24129405b37" + integrity sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ== dependencies: - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/rect@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.0.tgz#f817d1d3265ac5415dadc67edab30ae196696438" - integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg== +"@radix-ui/rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb" + integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw== "@rollup/plugin-inject@^5.0.5": version "5.0.5" @@ -4524,14 +4527,14 @@ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== "@vector-im/compound-design-tokens@^5.0.0": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@vector-im/compound-design-tokens/-/compound-design-tokens-5.0.1.tgz#341edcc860a7200ad38ba1f4a0a8f5f43ff5174f" - integrity sha512-PbxhjfHsVGBmrioM7iZ1wgcG8KIZRcnHIJhhEpWascWQwJ9lRm1K7ixV7sjwPWYQlmweSUB8jz4qmp7VTrxWng== + version "5.0.2" + resolved "https://registry.yarnpkg.com/@vector-im/compound-design-tokens/-/compound-design-tokens-5.0.2.tgz#5b6b3e09737f4a279fc9b47f5dd5320257c3a617" + integrity sha512-LcdrGY9qktuSs9TNX+DdGGq64vP7Qk5FiiqtZBr4PEk+hCQPEyRtKDfkXbAST+0tpAjUqVp5pzlOqNUKhpIhfg== "@vector-im/compound-web@^8.1.2": - version "8.1.2" - resolved "https://registry.yarnpkg.com/@vector-im/compound-web/-/compound-web-8.1.2.tgz#a8af8681b442e63e07b8f25204528b1b022c1db2" - integrity sha512-F9UyQBwRThwju+STz84iJy6JGWQ7UIxaprstfsGpiyS/3ror4E6m/mfwbrNjT0l3fhrhk6sRiTAMlcBRzYgdMQ== + version "8.2.0" + resolved "https://registry.yarnpkg.com/@vector-im/compound-web/-/compound-web-8.2.0.tgz#64193ce8d0c62a99e566cdb3bf4602160575ef3e" + integrity sha512-we+EQ/pw2YCEl7EMPdpeqP3HZpnQcCuOHoiAYKFwF4doXBDENLpTyA8ZdX0cViT3sqvExPT0RHZ2Nlt5Y6dQNQ== dependencies: "@floating-ui/react" "^0.27.0" "@radix-ui/react-context-menu" "^2.2.1" @@ -4543,9 +4546,8 @@ classnames "^2.5.1" vaul "^1.0.0" -"@vector-im/matrix-wysiwyg-wasm@link:../../../.cache/yarn/v6/npm-@vector-im-matrix-wysiwyg-2.39.0-a6238e517f23a2f3025d9c65445914771c63b163-integrity/node_modules/bindings/wysiwyg-wasm": +"@vector-im/matrix-wysiwyg-wasm@link:../../Library/Caches/Yarn/v6/npm-@vector-im-matrix-wysiwyg-2.39.0-a6238e517f23a2f3025d9c65445914771c63b163-integrity/node_modules/bindings/wysiwyg-wasm": version "0.0.0" - uid "" "@vector-im/matrix-wysiwyg@2.39.0": version "2.39.0" @@ -5004,10 +5006,10 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-hidden@^1.1.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" - integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== +aria-hidden@^1.2.4: + version "1.2.6" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.6.tgz#73051c9b088114c795b1ea414e9c0fff874ffc1a" + integrity sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA== dependencies: tslib "^2.0.0" @@ -9170,13 +9172,6 @@ interpret@^3.1.1: resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - ip-regex@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" @@ -10694,7 +10689,7 @@ long@^5.2.0: resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== -loose-envify@^1.0.0, loose-envify@^1.4.0: +loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -13036,37 +13031,36 @@ react-redux@^7.2.0: prop-types "^15.7.2" react-is "^17.0.2" -react-remove-scroll-bar@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz#3e585e9d163be84a010180b18721e851ac81a29c" - integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g== +react-remove-scroll-bar@^2.3.7: + version "2.3.8" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223" + integrity sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q== dependencies: - react-style-singleton "^2.2.1" + react-style-singleton "^2.2.2" tslib "^2.0.0" -react-remove-scroll@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz#fb03a0845d7768a4f1519a99fdb84983b793dc07" - integrity sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ== +react-remove-scroll@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz#d2101d414f6d81d7d3bf033f3c1cb4785789f753" + integrity sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA== dependencies: - react-remove-scroll-bar "^2.3.6" - react-style-singleton "^2.2.1" + react-remove-scroll-bar "^2.3.7" + react-style-singleton "^2.2.3" tslib "^2.1.0" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" + use-callback-ref "^1.3.3" + use-sidecar "^1.1.3" react-string-replace@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/react-string-replace/-/react-string-replace-1.1.1.tgz#8413a598c60e397fe77df3464f2889f00ba25989" integrity sha512-26TUbLzLfHQ5jO5N7y3Mx88eeKo0Ml0UjCQuX4BMfOd/JX+enQqlKpL1CZnmjeBRvQE8TR+ds9j1rqx9CxhKHQ== -react-style-singleton@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" - integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== +react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388" + integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== dependencies: get-nonce "^1.0.0" - invariant "^2.2.4" tslib "^2.0.0" react-transition-group@^4.4.1: @@ -15144,13 +15138,6 @@ url@^0.11.4: punycode "^1.4.1" qs "^6.12.3" -use-callback-ref@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz#6134c7f6ff76e2be0b56c809b17a650c942b1693" - integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== - dependencies: - tslib "^2.0.0" - use-callback-ref@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf" @@ -15163,7 +15150,7 @@ use-memo-one@^1.1.1: resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== -use-sidecar@^1.1.2, use-sidecar@^1.1.3: +use-sidecar@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb" integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ== @@ -15250,9 +15237,9 @@ vary@^1.1.2, vary@~1.1.2: integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vaul@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vaul/-/vaul-1.1.0.tgz#7da4bc965e0b184ada632f1208096b0f5575d920" - integrity sha512-YhO/bikcauk48hzhMhvIvT+U87cuCbNbKk9fF4Ou5UkI9t2KkBMernmdP37pCzF15hrv55fcny1YhexK8h6GVQ== + version "1.1.2" + resolved "https://registry.yarnpkg.com/vaul/-/vaul-1.1.2.tgz#c959f8b9dc2ed4f7d99366caee433fbef91f5ba9" + integrity sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA== dependencies: "@radix-ui/react-dialog" "^1.1.1" From a8856ca38958d24a2b6df06a6a380b5258fcdd4f Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 5 Aug 2025 10:47:39 +0100 Subject: [PATCH 02/25] Update snapshots Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../views/dialogs/__snapshots__/DevtoolsDialog-test.tsx.snap | 1 + .../views/dialogs/__snapshots__/LogoutDialog-test.tsx.snap | 2 ++ .../__snapshots__/MessageEditHistoryDialog-test.tsx.snap | 2 ++ .../__snapshots__/RestoreKeyBackupDialog-test.tsx.snap | 3 +++ .../views/elements/__snapshots__/AppTile-test.tsx.snap | 4 ++-- .../views/elements/__snapshots__/ImageView-test.tsx.snap | 1 + .../location/__snapshots__/LocationViewDialog-test.tsx.snap | 1 + .../__snapshots__/RoomSummaryCardView-test.tsx.snap | 3 +++ .../views/settings/__snapshots__/LayoutSwitcher-test.tsx.snap | 1 + .../settings/__snapshots__/ThemeChoicePanel-test.tsx.snap | 3 +++ .../encryption/__snapshots__/AdvancedPanel-test.tsx.snap | 1 + .../__snapshots__/AppearanceUserSettingsTab-test.tsx.snap | 1 + 12 files changed, 21 insertions(+), 2 deletions(-) diff --git a/test/unit-tests/components/views/dialogs/__snapshots__/DevtoolsDialog-test.tsx.snap b/test/unit-tests/components/views/dialogs/__snapshots__/DevtoolsDialog-test.tsx.snap index 2342bab71d1..2d34737729b 100644 --- a/test/unit-tests/components/views/dialogs/__snapshots__/DevtoolsDialog-test.tsx.snap +++ b/test/unit-tests/components/views/dialogs/__snapshots__/DevtoolsDialog-test.tsx.snap @@ -33,6 +33,7 @@ exports[`DevtoolsDialog renders the devtools dialog 1`] = ` > Room ID: !id
should match the snapshot 1`] = `
should support events with 1`] = `
should render 1`] = `
should restore key backup when the key is ca
should restore key backup when the key is in
Using this widget may share data
renders correctly 1`] = ` class="mx_ImageView_toolbar" >
renders map correctly 1`] = ` class="mx_ZoomButtons" >
has button to edit topic 1`] = ` aria-hidden="true" class="_input_19o42_24" id="«rv»" + role="switch" type="checkbox" />
renders the room summary 1`] = ` aria-hidden="true" class="_input_19o42_24" id="«r5»" + role="switch" type="checkbox" />
renders the room topic in the summary 1`] = ` aria-hidden="true" class="_input_19o42_24" id="«ri»" + role="switch" type="checkbox" />
should render 1`] = ` class="_input_19o42_24" id="radix-«rr»" name="compactLayout" + role="switch" title="" type="checkbox" /> diff --git a/test/unit-tests/components/views/settings/__snapshots__/ThemeChoicePanel-test.tsx.snap b/test/unit-tests/components/views/settings/__snapshots__/ThemeChoicePanel-test.tsx.snap index 487a6742743..01f5b8b0978 100644 --- a/test/unit-tests/components/views/settings/__snapshots__/ThemeChoicePanel-test.tsx.snap +++ b/test/unit-tests/components/views/settings/__snapshots__/ThemeChoicePanel-test.tsx.snap @@ -34,6 +34,7 @@ exports[` custom theme should display custom theme 1`] = ` class="_input_19o42_24" id="radix-«r28»" name="systemTheme" + role="switch" title="" type="checkbox" /> @@ -312,6 +313,7 @@ exports[` custom theme should render the custom theme sectio class="_input_19o42_24" id="radix-«r10»" name="systemTheme" + role="switch" title="" type="checkbox" /> @@ -590,6 +592,7 @@ exports[` renders the theme choice UI 1`] = ` class="_input_19o42_24" id="radix-«r0»" name="systemTheme" + role="switch" title="" type="checkbox" /> diff --git a/test/unit-tests/components/views/settings/encryption/__snapshots__/AdvancedPanel-test.tsx.snap b/test/unit-tests/components/views/settings/encryption/__snapshots__/AdvancedPanel-test.tsx.snap index 6fc4a568417..886f93fc949 100644 --- a/test/unit-tests/components/views/settings/encryption/__snapshots__/AdvancedPanel-test.tsx.snap +++ b/test/unit-tests/components/views/settings/encryption/__snapshots__/AdvancedPanel-test.tsx.snap @@ -224,6 +224,7 @@ exports[` should display the blacklist of unv class="_input_19o42_24" id="radix-«r6»" name="neverSendEncrypted" + role="switch" title="" type="checkbox" /> diff --git a/test/unit-tests/components/views/settings/tabs/user/__snapshots__/AppearanceUserSettingsTab-test.tsx.snap b/test/unit-tests/components/views/settings/tabs/user/__snapshots__/AppearanceUserSettingsTab-test.tsx.snap index 6c0407a9e8e..464e665fc56 100644 --- a/test/unit-tests/components/views/settings/tabs/user/__snapshots__/AppearanceUserSettingsTab-test.tsx.snap +++ b/test/unit-tests/components/views/settings/tabs/user/__snapshots__/AppearanceUserSettingsTab-test.tsx.snap @@ -561,6 +561,7 @@ exports[`AppearanceUserSettingsTab should render 1`] = ` class="_input_19o42_24" id="radix-«ru»" name="compactLayout" + role="switch" title="" type="checkbox" /> From 19e6aaf1c443f6c2b99223f0e9a007267c887909 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 5 Aug 2025 11:24:03 +0100 Subject: [PATCH 03/25] Update tests Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- playwright/e2e/crypto/utils.ts | 10 +++++----- .../e2e/settings/appearance-user-settings-tab/index.ts | 4 ++-- .../encryption-user-tab/encryption-tab.spec.ts | 2 +- .../components/views/settings/LayoutSwitcher-test.tsx | 6 +++--- .../views/settings/ThemeChoicePanel-test.tsx | 8 ++++---- .../views/settings/encryption/AdvancedPanel-test.tsx | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/playwright/e2e/crypto/utils.ts b/playwright/e2e/crypto/utils.ts index 289b123e86e..12640bfb3ef 100644 --- a/playwright/e2e/crypto/utils.ts +++ b/playwright/e2e/crypto/utils.ts @@ -300,9 +300,9 @@ export async function doTwoWaySasVerification(page: Page, verifier: JSHandle { const encryptionTab = await app.settings.openUserSettings("Encryption"); - const keyStorageToggle = encryptionTab.getByRole("checkbox", { name: "Allow key storage" }); + const keyStorageToggle = encryptionTab.getByRole("switch", { name: "Allow key storage" }); if (!(await keyStorageToggle.isChecked())) { - await encryptionTab.getByRole("checkbox", { name: "Allow key storage" }).click(); + await encryptionTab.getByRole("switch", { name: "Allow key storage" }).click(); } await encryptionTab.getByRole("button", { name: "Set up recovery" }).click(); @@ -323,11 +323,11 @@ export async function enableKeyBackup(app: ElementAppPage): Promise { export async function disableKeyBackup(app: ElementAppPage): Promise { const encryptionTab = await app.settings.openUserSettings("Encryption"); - const keyStorageToggle = encryptionTab.getByRole("checkbox", { name: "Allow key storage" }); + const keyStorageToggle = encryptionTab.getByRole("switch", { name: "Allow key storage" }); if (await keyStorageToggle.isChecked()) { - await encryptionTab.getByRole("checkbox", { name: "Allow key storage" }).click(); + await encryptionTab.getByRole("switch", { name: "Allow key storage" }).click(); await encryptionTab.getByRole("button", { name: "Delete key storage" }).click(); - await encryptionTab.getByRole("checkbox", { name: "Allow key storage" }).isVisible(); + await encryptionTab.getByRole("switch", { name: "Allow key storage" }).isVisible(); // Wait for the update to account data to stick await new Promise((resolve) => setTimeout(resolve, 2000)); diff --git a/playwright/e2e/settings/appearance-user-settings-tab/index.ts b/playwright/e2e/settings/appearance-user-settings-tab/index.ts index 29e51fb0ddc..e6eccac15a9 100644 --- a/playwright/e2e/settings/appearance-user-settings-tab/index.ts +++ b/playwright/e2e/settings/appearance-user-settings-tab/index.ts @@ -85,7 +85,7 @@ class Helpers { * Return the system theme toggle */ getMatchSystemThemeCheckbox() { - return this.getThemePanel().getByRole("checkbox", { name: "Match system theme" }); + return this.getThemePanel().getByRole("switch", { name: "Match system theme" }); } /** @@ -219,7 +219,7 @@ class Helpers { * Return the compact layout checkbox */ getCompactLayoutCheckbox() { - return this.getMessageLayoutPanel().getByRole("checkbox", { name: "Show compact text and messages" }); + return this.getMessageLayoutPanel().getByRole("switch", { name: "Show compact text and messages" }); } /** diff --git a/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts b/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts index ed1daecf350..20450f46f6a 100644 --- a/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts +++ b/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts @@ -117,7 +117,7 @@ test.describe("Encryption tab", () => { await verifySession(app, recoveryKey.encodedPrivateKey); await util.openEncryptionTab(); - await page.getByRole("checkbox", { name: "Allow key storage" }).click(); + await page.getByRole("switch", { name: "Allow key storage" }).click(); await expect( page.getByRole("heading", { name: "Are you sure you want to turn off key storage and delete it?" }), diff --git a/test/unit-tests/components/views/settings/LayoutSwitcher-test.tsx b/test/unit-tests/components/views/settings/LayoutSwitcher-test.tsx index 5d3f1709e29..5ff5f888c79 100644 --- a/test/unit-tests/components/views/settings/LayoutSwitcher-test.tsx +++ b/test/unit-tests/components/views/settings/LayoutSwitcher-test.tsx @@ -70,12 +70,12 @@ describe("", () => { await SettingsStore.setValue("useCompactLayout", null, SettingLevel.DEVICE, true); await renderLayoutSwitcher(); - expect(screen.getByRole("checkbox", { name: "Show compact text and messages" })).toBeChecked(); + expect(screen.getByRole("switch", { name: "Show compact text and messages" })).toBeChecked(); }); it("should change the setting when toggled", async () => { await renderLayoutSwitcher(); - act(() => screen.getByRole("checkbox", { name: "Show compact text and messages" }).click()); + act(() => screen.getByRole("switch", { name: "Show compact text and messages" }).click()); await waitFor(() => expect(SettingsStore.getValue("useCompactLayout")).toBe(true)); }); @@ -83,7 +83,7 @@ describe("", () => { it("should be disabled when the modern layout is not enabled", async () => { await SettingsStore.setValue("layout", null, SettingLevel.DEVICE, Layout.Bubble); await renderLayoutSwitcher(); - expect(screen.getByRole("checkbox", { name: "Show compact text and messages" })).toBeDisabled(); + expect(screen.getByRole("switch", { name: "Show compact text and messages" })).toBeDisabled(); }); }); }); diff --git a/test/unit-tests/components/views/settings/ThemeChoicePanel-test.tsx b/test/unit-tests/components/views/settings/ThemeChoicePanel-test.tsx index f1dbc9a2e0d..5332845d1be 100644 --- a/test/unit-tests/components/views/settings/ThemeChoicePanel-test.tsx +++ b/test/unit-tests/components/views/settings/ThemeChoicePanel-test.tsx @@ -56,24 +56,24 @@ describe("", () => { describe("system theme", () => { it("should disable Match system theme", async () => { render(); - expect(screen.getByRole("checkbox", { name: "Match system theme" })).not.toBeChecked(); + expect(screen.getByRole("switch", { name: "Match system theme" })).not.toBeChecked(); }); it("should enable Match system theme", async () => { await enableSystemTheme(true); render(); - expect(screen.getByRole("checkbox", { name: "Match system theme" })).toBeChecked(); + expect(screen.getByRole("switch", { name: "Match system theme" })).toBeChecked(); }); it("should change the system theme when clicked", async () => { jest.spyOn(SettingsStore, "setValue"); render(); - act(() => screen.getByRole("checkbox", { name: "Match system theme" }).click()); + act(() => screen.getByRole("switch", { name: "Match system theme" }).click()); // The system theme should be enabled - expect(screen.getByRole("checkbox", { name: "Match system theme" })).toBeChecked(); + expect(screen.getByRole("switch", { name: "Match system theme" })).toBeChecked(); expect(SettingsStore.setValue).toHaveBeenCalledWith("use_system_theme", null, "device", true); }); }); diff --git a/test/unit-tests/components/views/settings/encryption/AdvancedPanel-test.tsx b/test/unit-tests/components/views/settings/encryption/AdvancedPanel-test.tsx index ad98fa4e438..1876b607bb5 100644 --- a/test/unit-tests/components/views/settings/encryption/AdvancedPanel-test.tsx +++ b/test/unit-tests/components/views/settings/encryption/AdvancedPanel-test.tsx @@ -74,7 +74,7 @@ describe("", () => { await renderAdvancedPanel(); expect(screen.getByTestId("otherSettings")).toMatchSnapshot(); - const checkbox = screen.getByRole("checkbox", { + const checkbox = screen.getByRole("switch", { name: "In encrypted rooms, only send messages to verified users", }); expect(checkbox).toBeChecked(); From b578393d1672d60ae84cf7159538623b3e0ec76d Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 09:16:32 +0100 Subject: [PATCH 04/25] Make BaseDialog's div keyboard focusable and fix test. --- src/components/views/dialogs/BaseDialog.tsx | 3 +++ test/unit-tests/components/views/dialogs/BaseDialog-test.tsx | 1 + 2 files changed, 4 insertions(+) diff --git a/src/components/views/dialogs/BaseDialog.tsx b/src/components/views/dialogs/BaseDialog.tsx index 56f6d0c5289..a946a44e911 100644 --- a/src/components/views/dialogs/BaseDialog.tsx +++ b/src/components/views/dialogs/BaseDialog.tsx @@ -145,6 +145,9 @@ export default class BaseDialog extends React.Component { const lockProps: Record = { "onKeyDown": this.onKeyDown, "role": "dialog", + // Allow the dialog to be keyboard focusable + // So the escape key handling works in more cases (say you select the header) + "tabIndex": -1, // This should point to a node describing the dialog. // If we were about to completely follow this recommendation we'd need to // make all the components relying on BaseDialog to be aware of it. diff --git a/test/unit-tests/components/views/dialogs/BaseDialog-test.tsx b/test/unit-tests/components/views/dialogs/BaseDialog-test.tsx index e8737fe88d5..2bbf3ea0240 100644 --- a/test/unit-tests/components/views/dialogs/BaseDialog-test.tsx +++ b/test/unit-tests/components/views/dialogs/BaseDialog-test.tsx @@ -16,6 +16,7 @@ describe("BaseDialog", () => { const onFinished = jest.fn(); render(); await userEvent.keyboard("{Escape}"); + await userEvent.keyboard("{Escape}"); expect(onFinished).toHaveBeenCalled(); }); }); From f76a5354394b2d34c17b809f281f5dea220afb51 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 10:46:30 +0100 Subject: [PATCH 05/25] Update more e2e tests to use switch instead of checkbox --- playwright/e2e/crypto/toasts.spec.ts | 4 ++-- .../e2e/settings/encryption-user-tab/encryption-tab.spec.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/playwright/e2e/crypto/toasts.spec.ts b/playwright/e2e/crypto/toasts.spec.ts index 7b838edaacd..592076afa01 100644 --- a/playwright/e2e/crypto/toasts.spec.ts +++ b/playwright/e2e/crypto/toasts.spec.ts @@ -126,7 +126,7 @@ test.describe("'Turn on key storage' toast", () => { await toast.getByRole("button", { name: "Continue" }).click(); // Then we see the Encryption settings dialog with an option to turn on key storage - await expect(page.getByRole("checkbox", { name: "Allow key storage" })).toBeVisible(); + await expect(page.getByRole("switch", { name: "Allow key storage" })).toBeVisible(); // And when we close that await page.getByRole("button", { name: "Close dialog" }).click(); @@ -153,7 +153,7 @@ test.describe("'Turn on key storage' toast", () => { await page.getByRole("button", { name: "Go to Settings" }).click(); // Then we see Encryption settings again - await expect(page.getByRole("checkbox", { name: "Allow key storage" })).toBeVisible(); + await expect(page.getByRole("switch", { name: "Allow key storage" })).toBeVisible(); // And when we close that, see the toast, click Dismiss, and Yes, Dismiss await page.getByRole("button", { name: "Close dialog" }).click(); diff --git a/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts b/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts index 20450f46f6a..73bb48e2f69 100644 --- a/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts +++ b/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts @@ -136,7 +136,7 @@ test.describe("Encryption tab", () => { await page.getByRole("button", { name: "Delete key storage" }).click(); - await expect(page.getByRole("checkbox", { name: "Allow key storage" })).not.toBeChecked(); + await expect(page.getByRole("switch", { name: "Allow key storage" })).not.toBeChecked(); for (const prom of deleteRequestPromises) { const request = await prom; From e06d76e3f74d8f77e33247e9f4708bb39aebdce0 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 14:50:45 +0100 Subject: [PATCH 06/25] fix useParticipants incorrectly returning an array when a map is expected --- src/hooks/useCall.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/useCall.ts b/src/hooks/useCall.ts index db0660df2bf..cc32b46bc86 100644 --- a/src/hooks/useCall.ts +++ b/src/hooks/useCall.ts @@ -45,7 +45,7 @@ export const useParticipants = (call: Call | null): Map> return useTypedEventEmitterState( call ?? undefined, CallEvent.Participants, - useCallback((state) => state ?? call?.participants ?? [], [call]), + useCallback((state) => state ?? call?.participants ?? new Map(), [call]), ); }; From c45ad3063f97cad6989ec3fe44dacf6f0904a4e1 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 15:15:41 +0100 Subject: [PATCH 07/25] Try again to fix calParticipants --- src/hooks/useCall.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hooks/useCall.ts b/src/hooks/useCall.ts index cc32b46bc86..9f1fb010cbe 100644 --- a/src/hooks/useCall.ts +++ b/src/hooks/useCall.ts @@ -42,10 +42,11 @@ export const useConnectionState = (call: Call | null): ConnectionState => ); export const useParticipants = (call: Call | null): Map> => { + const participants = call?.participants; return useTypedEventEmitterState( call ?? undefined, CallEvent.Participants, - useCallback((state) => state ?? call?.participants ?? new Map(), [call]), + useCallback((state) => state ?? participants ?? new Map(), [participants]), ); }; From f83093cc44586b881d0918e4e4dee60d3263d44b Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 16:22:53 +0100 Subject: [PATCH 08/25] try fix RoomHeader tests again by also mocking useParticipants --- src/hooks/useCall.ts | 3 +- .../rooms/RoomHeader/RoomHeader-test.tsx | 42 +++++++++++++------ 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/hooks/useCall.ts b/src/hooks/useCall.ts index 9f1fb010cbe..cc32b46bc86 100644 --- a/src/hooks/useCall.ts +++ b/src/hooks/useCall.ts @@ -42,11 +42,10 @@ export const useConnectionState = (call: Call | null): ConnectionState => ); export const useParticipants = (call: Call | null): Map> => { - const participants = call?.participants; return useTypedEventEmitterState( call ?? undefined, CallEvent.Participants, - useCallback((state) => state ?? participants ?? new Map(), [participants]), + useCallback((state) => state ?? call?.participants ?? new Map(), [call]), ); }; diff --git a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index a9f02532c8e..da9add1b542 100644 --- a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -554,7 +554,9 @@ describe("RoomHeader", () => { }); it("join button is shown if there is an ongoing call", async () => { - mockRoomMembers(room, 3); + const members = mockRoomMembers(room, 3); + const participants = mockParticipants(members); + jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); render(, getWrapper()); const joinButton = getByLabelText(document.body, "Join"); @@ -562,7 +564,9 @@ describe("RoomHeader", () => { }); it("join button is disabled if there is an other ongoing call", async () => { - mockRoomMembers(room, 3); + const members = mockRoomMembers(room, 3); + const participants = mockParticipants(members); + jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); jest.spyOn(CallStore.prototype, "connectedCalls", "get").mockReturnValue( new Set([{ roomId: "some_other_room" } as Call]), @@ -582,7 +586,9 @@ describe("RoomHeader", () => { }); it("close lobby button is shown if there is an ongoing call but we are viewing the lobby", async () => { - mockRoomMembers(room, 3); + const members = mockRoomMembers(room, 3); + const participants = mockParticipants(members); + jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true); @@ -792,20 +798,32 @@ describe("RoomHeader", () => { /** * * @param count the number of users to create + * @returns the created members */ function mockRoomMembers(room: Room, count: number) { const members = Array(count) .fill(0) - .map((_, index) => ({ - userId: `@user-${index}:example.org`, - name: `Member ${index}`, - rawDisplayName: `Member ${index}`, - roomId: room.roomId, - membership: KnownMembership.Join, - getAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, - getMxcAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, - })); + .map((_, index) => { + const userId = `@user-${index}:example.org`; + const member = new RoomMember(room.roomId, userId); + member.name = `Member ${index}`; + member.rawDisplayName = `Member ${index}`; + member.membership = KnownMembership.Join; + member.getAvatarUrl = () => `mxc://avatar.url/user-${index}.png`; + member.getMxcAvatarUrl = () => `mxc://avatar.url/user-${index}.png`; + return member; + }); room.currentState.setJoinedMemberCount(members.length); room.getJoinedMembers = jest.fn().mockReturnValue(members); + return members; +} + +/** + * Creates a participants map from room members + * @param members the room members to convert to participants + * @returns Map of participants with device sets + */ +function mockParticipants(members: RoomMember[]): Map> { + return new Map(members.map((member, index) => [member, new Set([`device${index + 1}`])])); } From e456782efd5ea860cb6679be3adf440788fe40a4 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 16:40:12 +0100 Subject: [PATCH 09/25] Revert "try fix RoomHeader tests again by also mocking useParticipants" This reverts commit f83093cc44586b881d0918e4e4dee60d3263d44b. --- src/hooks/useCall.ts | 3 +- .../rooms/RoomHeader/RoomHeader-test.tsx | 42 ++++++------------- 2 files changed, 14 insertions(+), 31 deletions(-) diff --git a/src/hooks/useCall.ts b/src/hooks/useCall.ts index cc32b46bc86..9f1fb010cbe 100644 --- a/src/hooks/useCall.ts +++ b/src/hooks/useCall.ts @@ -42,10 +42,11 @@ export const useConnectionState = (call: Call | null): ConnectionState => ); export const useParticipants = (call: Call | null): Map> => { + const participants = call?.participants; return useTypedEventEmitterState( call ?? undefined, CallEvent.Participants, - useCallback((state) => state ?? call?.participants ?? new Map(), [call]), + useCallback((state) => state ?? participants ?? new Map(), [participants]), ); }; diff --git a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index da9add1b542..a9f02532c8e 100644 --- a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -554,9 +554,7 @@ describe("RoomHeader", () => { }); it("join button is shown if there is an ongoing call", async () => { - const members = mockRoomMembers(room, 3); - const participants = mockParticipants(members); - jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); + mockRoomMembers(room, 3); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); render(, getWrapper()); const joinButton = getByLabelText(document.body, "Join"); @@ -564,9 +562,7 @@ describe("RoomHeader", () => { }); it("join button is disabled if there is an other ongoing call", async () => { - const members = mockRoomMembers(room, 3); - const participants = mockParticipants(members); - jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); + mockRoomMembers(room, 3); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); jest.spyOn(CallStore.prototype, "connectedCalls", "get").mockReturnValue( new Set([{ roomId: "some_other_room" } as Call]), @@ -586,9 +582,7 @@ describe("RoomHeader", () => { }); it("close lobby button is shown if there is an ongoing call but we are viewing the lobby", async () => { - const members = mockRoomMembers(room, 3); - const participants = mockParticipants(members); - jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); + mockRoomMembers(room, 3); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true); @@ -798,32 +792,20 @@ describe("RoomHeader", () => { /** * * @param count the number of users to create - * @returns the created members */ function mockRoomMembers(room: Room, count: number) { const members = Array(count) .fill(0) - .map((_, index) => { - const userId = `@user-${index}:example.org`; - const member = new RoomMember(room.roomId, userId); - member.name = `Member ${index}`; - member.rawDisplayName = `Member ${index}`; - member.membership = KnownMembership.Join; - member.getAvatarUrl = () => `mxc://avatar.url/user-${index}.png`; - member.getMxcAvatarUrl = () => `mxc://avatar.url/user-${index}.png`; - return member; - }); + .map((_, index) => ({ + userId: `@user-${index}:example.org`, + name: `Member ${index}`, + rawDisplayName: `Member ${index}`, + roomId: room.roomId, + membership: KnownMembership.Join, + getAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, + getMxcAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, + })); room.currentState.setJoinedMemberCount(members.length); room.getJoinedMembers = jest.fn().mockReturnValue(members); - return members; -} - -/** - * Creates a participants map from room members - * @param members the room members to convert to participants - * @returns Map of participants with device sets - */ -function mockParticipants(members: RoomMember[]): Map> { - return new Map(members.map((member, index) => [member, new Set([`device${index + 1}`])])); } From fb502a68a08bd0227ace807fdaf394ed8719d92a Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 20:00:33 +0100 Subject: [PATCH 10/25] Try with no dependencies --- src/hooks/useCall.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/hooks/useCall.ts b/src/hooks/useCall.ts index 9f1fb010cbe..6ace5a70e69 100644 --- a/src/hooks/useCall.ts +++ b/src/hooks/useCall.ts @@ -42,11 +42,10 @@ export const useConnectionState = (call: Call | null): ConnectionState => ); export const useParticipants = (call: Call | null): Map> => { - const participants = call?.participants; return useTypedEventEmitterState( call ?? undefined, CallEvent.Participants, - useCallback((state) => state ?? participants ?? new Map(), [participants]), + useCallback((state) => state ?? call?.participants ?? new Map(), []), ); }; From 92034aaff9b46fd135ee4dbcd93dd62ad5985e5e Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 20:44:53 +0100 Subject: [PATCH 11/25] try mocking useCall rather than just useParticipantCount --- .../rooms/RoomHeader/RoomHeader-test.tsx | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index a9f02532c8e..9391af0049c 100644 --- a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -96,6 +96,9 @@ describe("RoomHeader", () => { setCardSpy = jest.spyOn(RightPanelStore.instance, "setCard"); jest.spyOn(ShieldUtils, "shieldStatusForRoom").mockResolvedValue(ShieldUtils.E2EStatus.Normal); + + // Mock useCall to return a Call object with stable participants to prevent React dependency errors + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall()); }); afterEach(() => { @@ -555,7 +558,8 @@ describe("RoomHeader", () => { it("join button is shown if there is an ongoing call", async () => { mockRoomMembers(room, 3); - jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); + // Mock a call with 3 participants instead of mocking useParticipantCount + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); render(, getWrapper()); const joinButton = getByLabelText(document.body, "Join"); expect(joinButton).not.toHaveAttribute("aria-disabled", "true"); @@ -563,7 +567,8 @@ describe("RoomHeader", () => { it("join button is disabled if there is an other ongoing call", async () => { mockRoomMembers(room, 3); - jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); + // Mock a call with 3 participants instead of mocking useParticipantCount + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); jest.spyOn(CallStore.prototype, "connectedCalls", "get").mockReturnValue( new Set([{ roomId: "some_other_room" } as Call]), ); @@ -583,7 +588,8 @@ describe("RoomHeader", () => { it("close lobby button is shown if there is an ongoing call but we are viewing the lobby", async () => { mockRoomMembers(room, 3); - jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); + // Mock a call with 3 participants instead of mocking useParticipantCount + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true); render(, getWrapper()); @@ -789,6 +795,34 @@ describe("RoomHeader", () => { }); }); +/** + * Creates a mock Call object with stable participants to prevent React dependency errors + */ +function createMockCall(roomId: string = "!1:example.org", participantCount: number = 0): Call { + const participants = new Map(); + + // Create mock participants with devices + for (let i = 0; i < participantCount; i++) { + const mockMember = { + userId: `@user-${i}:example.org`, + name: `Member ${i}`, + } as RoomMember; + + const deviceSet = new Set([`device-${i}`]); + participants.set(mockMember, deviceSet); + } + + return { + roomId, + participants, + widget: { id: "test-widget" }, + connectionState: "disconnected", + on: jest.fn(), + off: jest.fn(), + emit: jest.fn(), + } as unknown as Call; +} + /** * * @param count the number of users to create From 644be3155c434a309fcfd90a21370a732bb7bdd5 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 20:57:17 +0100 Subject: [PATCH 12/25] Mock the call store rather than the hook --- .../views/rooms/RoomHeader/RoomHeader-test.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index 9391af0049c..0871d728716 100644 --- a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -52,7 +52,6 @@ import * as ShieldUtils from "../../../../../../src/utils/ShieldUtils"; import { Container, WidgetLayoutStore } from "../../../../../../src/stores/widgets/WidgetLayoutStore"; import MatrixClientContext from "../../../../../../src/contexts/MatrixClientContext"; import { _t } from "../../../../../../src/languageHandler"; -import * as UseCall from "../../../../../../src/hooks/useCall"; import { SdkContextClass } from "../../../../../../src/contexts/SDKContext"; import WidgetStore, { type IApp } from "../../../../../../src/stores/WidgetStore"; import { UIFeature } from "../../../../../../src/settings/UIFeature"; @@ -97,8 +96,9 @@ describe("RoomHeader", () => { setCardSpy = jest.spyOn(RightPanelStore.instance, "setCard"); jest.spyOn(ShieldUtils, "shieldStatusForRoom").mockResolvedValue(ShieldUtils.E2EStatus.Normal); - // Mock useCall to return a Call object with stable participants to prevent React dependency errors - jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall()); + // Mock CallStore.instance.getCall to return a Call object with stable participants + // This prevents React dependency errors without disrupting hook execution order + jest.spyOn(CallStore.instance, "getCall").mockReturnValue(createMockCall()); }); afterEach(() => { @@ -558,8 +558,8 @@ describe("RoomHeader", () => { it("join button is shown if there is an ongoing call", async () => { mockRoomMembers(room, 3); - // Mock a call with 3 participants instead of mocking useParticipantCount - jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); + // Mock CallStore to return a call with 3 participants + jest.spyOn(CallStore.instance, "getCall").mockReturnValue(createMockCall(ROOM_ID, 3)); render(, getWrapper()); const joinButton = getByLabelText(document.body, "Join"); expect(joinButton).not.toHaveAttribute("aria-disabled", "true"); @@ -567,8 +567,8 @@ describe("RoomHeader", () => { it("join button is disabled if there is an other ongoing call", async () => { mockRoomMembers(room, 3); - // Mock a call with 3 participants instead of mocking useParticipantCount - jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); + // Mock CallStore to return a call with 3 participants + jest.spyOn(CallStore.instance, "getCall").mockReturnValue(createMockCall(ROOM_ID, 3)); jest.spyOn(CallStore.prototype, "connectedCalls", "get").mockReturnValue( new Set([{ roomId: "some_other_room" } as Call]), ); @@ -588,8 +588,8 @@ describe("RoomHeader", () => { it("close lobby button is shown if there is an ongoing call but we are viewing the lobby", async () => { mockRoomMembers(room, 3); - // Mock a call with 3 participants instead of mocking useParticipantCount - jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); + // Mock CallStore to return a call with 3 participants + jest.spyOn(CallStore.instance, "getCall").mockReturnValue(createMockCall(ROOM_ID, 3)); jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true); render(, getWrapper()); From 043d812b1defe75eb7d9c56546317f176b4ba34e Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 21:28:13 +0100 Subject: [PATCH 13/25] Only mock the call object for tests that expect it. --- .../components/views/rooms/RoomHeader/RoomHeader-test.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index 0871d728716..7c7cb375f9f 100644 --- a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -96,9 +96,9 @@ describe("RoomHeader", () => { setCardSpy = jest.spyOn(RightPanelStore.instance, "setCard"); jest.spyOn(ShieldUtils, "shieldStatusForRoom").mockResolvedValue(ShieldUtils.E2EStatus.Normal); - // Mock CallStore.instance.getCall to return a Call object with stable participants - // This prevents React dependency errors without disrupting hook execution order - jest.spyOn(CallStore.instance, "getCall").mockReturnValue(createMockCall()); + // Mock CallStore.instance.getCall to return null by default + // Individual tests can override this when they need a specific Call object + jest.spyOn(CallStore.instance, "getCall").mockReturnValue(null); }); afterEach(() => { From 8e67cfe3c46e13e40b46137499dc8bee31b666ac Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 22:03:27 +0100 Subject: [PATCH 14/25] Revert "Only mock the call object for tests that expect it." This reverts commit 043d812b1defe75eb7d9c56546317f176b4ba34e. --- .../components/views/rooms/RoomHeader/RoomHeader-test.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index 7c7cb375f9f..0871d728716 100644 --- a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -96,9 +96,9 @@ describe("RoomHeader", () => { setCardSpy = jest.spyOn(RightPanelStore.instance, "setCard"); jest.spyOn(ShieldUtils, "shieldStatusForRoom").mockResolvedValue(ShieldUtils.E2EStatus.Normal); - // Mock CallStore.instance.getCall to return null by default - // Individual tests can override this when they need a specific Call object - jest.spyOn(CallStore.instance, "getCall").mockReturnValue(null); + // Mock CallStore.instance.getCall to return a Call object with stable participants + // This prevents React dependency errors without disrupting hook execution order + jest.spyOn(CallStore.instance, "getCall").mockReturnValue(createMockCall()); }); afterEach(() => { From 667827eeb3084c98064fa1589bf1ecee63ca9110 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 22:03:40 +0100 Subject: [PATCH 15/25] Revert "Mock the call store rather than the hook" This reverts commit 644be3155c434a309fcfd90a21370a732bb7bdd5. --- .../views/rooms/RoomHeader/RoomHeader-test.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index 0871d728716..9391af0049c 100644 --- a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -52,6 +52,7 @@ import * as ShieldUtils from "../../../../../../src/utils/ShieldUtils"; import { Container, WidgetLayoutStore } from "../../../../../../src/stores/widgets/WidgetLayoutStore"; import MatrixClientContext from "../../../../../../src/contexts/MatrixClientContext"; import { _t } from "../../../../../../src/languageHandler"; +import * as UseCall from "../../../../../../src/hooks/useCall"; import { SdkContextClass } from "../../../../../../src/contexts/SDKContext"; import WidgetStore, { type IApp } from "../../../../../../src/stores/WidgetStore"; import { UIFeature } from "../../../../../../src/settings/UIFeature"; @@ -96,9 +97,8 @@ describe("RoomHeader", () => { setCardSpy = jest.spyOn(RightPanelStore.instance, "setCard"); jest.spyOn(ShieldUtils, "shieldStatusForRoom").mockResolvedValue(ShieldUtils.E2EStatus.Normal); - // Mock CallStore.instance.getCall to return a Call object with stable participants - // This prevents React dependency errors without disrupting hook execution order - jest.spyOn(CallStore.instance, "getCall").mockReturnValue(createMockCall()); + // Mock useCall to return a Call object with stable participants to prevent React dependency errors + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall()); }); afterEach(() => { @@ -558,8 +558,8 @@ describe("RoomHeader", () => { it("join button is shown if there is an ongoing call", async () => { mockRoomMembers(room, 3); - // Mock CallStore to return a call with 3 participants - jest.spyOn(CallStore.instance, "getCall").mockReturnValue(createMockCall(ROOM_ID, 3)); + // Mock a call with 3 participants instead of mocking useParticipantCount + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); render(, getWrapper()); const joinButton = getByLabelText(document.body, "Join"); expect(joinButton).not.toHaveAttribute("aria-disabled", "true"); @@ -567,8 +567,8 @@ describe("RoomHeader", () => { it("join button is disabled if there is an other ongoing call", async () => { mockRoomMembers(room, 3); - // Mock CallStore to return a call with 3 participants - jest.spyOn(CallStore.instance, "getCall").mockReturnValue(createMockCall(ROOM_ID, 3)); + // Mock a call with 3 participants instead of mocking useParticipantCount + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); jest.spyOn(CallStore.prototype, "connectedCalls", "get").mockReturnValue( new Set([{ roomId: "some_other_room" } as Call]), ); @@ -588,8 +588,8 @@ describe("RoomHeader", () => { it("close lobby button is shown if there is an ongoing call but we are viewing the lobby", async () => { mockRoomMembers(room, 3); - // Mock CallStore to return a call with 3 participants - jest.spyOn(CallStore.instance, "getCall").mockReturnValue(createMockCall(ROOM_ID, 3)); + // Mock a call with 3 participants instead of mocking useParticipantCount + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true); render(, getWrapper()); From 3900a1e20dcd154cdcc48365b7e44b2a7952eb40 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 22:03:48 +0100 Subject: [PATCH 16/25] Revert "try mocking useCall rather than just useParticipantCount" This reverts commit 92034aaff9b46fd135ee4dbcd93dd62ad5985e5e. --- .../rooms/RoomHeader/RoomHeader-test.tsx | 40 ++----------------- 1 file changed, 3 insertions(+), 37 deletions(-) diff --git a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index 9391af0049c..a9f02532c8e 100644 --- a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -96,9 +96,6 @@ describe("RoomHeader", () => { setCardSpy = jest.spyOn(RightPanelStore.instance, "setCard"); jest.spyOn(ShieldUtils, "shieldStatusForRoom").mockResolvedValue(ShieldUtils.E2EStatus.Normal); - - // Mock useCall to return a Call object with stable participants to prevent React dependency errors - jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall()); }); afterEach(() => { @@ -558,8 +555,7 @@ describe("RoomHeader", () => { it("join button is shown if there is an ongoing call", async () => { mockRoomMembers(room, 3); - // Mock a call with 3 participants instead of mocking useParticipantCount - jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); + jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); render(, getWrapper()); const joinButton = getByLabelText(document.body, "Join"); expect(joinButton).not.toHaveAttribute("aria-disabled", "true"); @@ -567,8 +563,7 @@ describe("RoomHeader", () => { it("join button is disabled if there is an other ongoing call", async () => { mockRoomMembers(room, 3); - // Mock a call with 3 participants instead of mocking useParticipantCount - jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); + jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); jest.spyOn(CallStore.prototype, "connectedCalls", "get").mockReturnValue( new Set([{ roomId: "some_other_room" } as Call]), ); @@ -588,8 +583,7 @@ describe("RoomHeader", () => { it("close lobby button is shown if there is an ongoing call but we are viewing the lobby", async () => { mockRoomMembers(room, 3); - // Mock a call with 3 participants instead of mocking useParticipantCount - jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); + jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true); render(, getWrapper()); @@ -795,34 +789,6 @@ describe("RoomHeader", () => { }); }); -/** - * Creates a mock Call object with stable participants to prevent React dependency errors - */ -function createMockCall(roomId: string = "!1:example.org", participantCount: number = 0): Call { - const participants = new Map(); - - // Create mock participants with devices - for (let i = 0; i < participantCount; i++) { - const mockMember = { - userId: `@user-${i}:example.org`, - name: `Member ${i}`, - } as RoomMember; - - const deviceSet = new Set([`device-${i}`]); - participants.set(mockMember, deviceSet); - } - - return { - roomId, - participants, - widget: { id: "test-widget" }, - connectionState: "disconnected", - on: jest.fn(), - off: jest.fn(), - emit: jest.fn(), - } as unknown as Call; -} - /** * * @param count the number of users to create From f396b28c68a554ba19fbadd6f892b427441e17a7 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 22:03:57 +0100 Subject: [PATCH 17/25] Revert "Try with no dependencies" This reverts commit fb502a68a08bd0227ace807fdaf394ed8719d92a. --- src/hooks/useCall.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hooks/useCall.ts b/src/hooks/useCall.ts index 6ace5a70e69..9f1fb010cbe 100644 --- a/src/hooks/useCall.ts +++ b/src/hooks/useCall.ts @@ -42,10 +42,11 @@ export const useConnectionState = (call: Call | null): ConnectionState => ); export const useParticipants = (call: Call | null): Map> => { + const participants = call?.participants; return useTypedEventEmitterState( call ?? undefined, CallEvent.Participants, - useCallback((state) => state ?? call?.participants ?? new Map(), []), + useCallback((state) => state ?? participants ?? new Map(), [participants]), ); }; From 6cf8dc570bbc528888b75a21d0337243c03cce61 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 22:04:01 +0100 Subject: [PATCH 18/25] Reapply "try fix RoomHeader tests again by also mocking useParticipants" This reverts commit e456782efd5ea860cb6679be3adf440788fe40a4. --- src/hooks/useCall.ts | 3 +- .../rooms/RoomHeader/RoomHeader-test.tsx | 42 +++++++++++++------ 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/hooks/useCall.ts b/src/hooks/useCall.ts index 9f1fb010cbe..cc32b46bc86 100644 --- a/src/hooks/useCall.ts +++ b/src/hooks/useCall.ts @@ -42,11 +42,10 @@ export const useConnectionState = (call: Call | null): ConnectionState => ); export const useParticipants = (call: Call | null): Map> => { - const participants = call?.participants; return useTypedEventEmitterState( call ?? undefined, CallEvent.Participants, - useCallback((state) => state ?? participants ?? new Map(), [participants]), + useCallback((state) => state ?? call?.participants ?? new Map(), [call]), ); }; diff --git a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index a9f02532c8e..da9add1b542 100644 --- a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -554,7 +554,9 @@ describe("RoomHeader", () => { }); it("join button is shown if there is an ongoing call", async () => { - mockRoomMembers(room, 3); + const members = mockRoomMembers(room, 3); + const participants = mockParticipants(members); + jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); render(, getWrapper()); const joinButton = getByLabelText(document.body, "Join"); @@ -562,7 +564,9 @@ describe("RoomHeader", () => { }); it("join button is disabled if there is an other ongoing call", async () => { - mockRoomMembers(room, 3); + const members = mockRoomMembers(room, 3); + const participants = mockParticipants(members); + jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); jest.spyOn(CallStore.prototype, "connectedCalls", "get").mockReturnValue( new Set([{ roomId: "some_other_room" } as Call]), @@ -582,7 +586,9 @@ describe("RoomHeader", () => { }); it("close lobby button is shown if there is an ongoing call but we are viewing the lobby", async () => { - mockRoomMembers(room, 3); + const members = mockRoomMembers(room, 3); + const participants = mockParticipants(members); + jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true); @@ -792,20 +798,32 @@ describe("RoomHeader", () => { /** * * @param count the number of users to create + * @returns the created members */ function mockRoomMembers(room: Room, count: number) { const members = Array(count) .fill(0) - .map((_, index) => ({ - userId: `@user-${index}:example.org`, - name: `Member ${index}`, - rawDisplayName: `Member ${index}`, - roomId: room.roomId, - membership: KnownMembership.Join, - getAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, - getMxcAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, - })); + .map((_, index) => { + const userId = `@user-${index}:example.org`; + const member = new RoomMember(room.roomId, userId); + member.name = `Member ${index}`; + member.rawDisplayName = `Member ${index}`; + member.membership = KnownMembership.Join; + member.getAvatarUrl = () => `mxc://avatar.url/user-${index}.png`; + member.getMxcAvatarUrl = () => `mxc://avatar.url/user-${index}.png`; + return member; + }); room.currentState.setJoinedMemberCount(members.length); room.getJoinedMembers = jest.fn().mockReturnValue(members); + return members; +} + +/** + * Creates a participants map from room members + * @param members the room members to convert to participants + * @returns Map of participants with device sets + */ +function mockParticipants(members: RoomMember[]): Map> { + return new Map(members.map((member, index) => [member, new Set([`device${index + 1}`])])); } From db50519ccab66804a17f54c0c12860251345b8d1 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 22:04:04 +0100 Subject: [PATCH 19/25] Revert "try fix RoomHeader tests again by also mocking useParticipants" This reverts commit f83093cc44586b881d0918e4e4dee60d3263d44b. --- src/hooks/useCall.ts | 3 +- .../rooms/RoomHeader/RoomHeader-test.tsx | 42 ++++++------------- 2 files changed, 14 insertions(+), 31 deletions(-) diff --git a/src/hooks/useCall.ts b/src/hooks/useCall.ts index cc32b46bc86..9f1fb010cbe 100644 --- a/src/hooks/useCall.ts +++ b/src/hooks/useCall.ts @@ -42,10 +42,11 @@ export const useConnectionState = (call: Call | null): ConnectionState => ); export const useParticipants = (call: Call | null): Map> => { + const participants = call?.participants; return useTypedEventEmitterState( call ?? undefined, CallEvent.Participants, - useCallback((state) => state ?? call?.participants ?? new Map(), [call]), + useCallback((state) => state ?? participants ?? new Map(), [participants]), ); }; diff --git a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index da9add1b542..a9f02532c8e 100644 --- a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -554,9 +554,7 @@ describe("RoomHeader", () => { }); it("join button is shown if there is an ongoing call", async () => { - const members = mockRoomMembers(room, 3); - const participants = mockParticipants(members); - jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); + mockRoomMembers(room, 3); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); render(, getWrapper()); const joinButton = getByLabelText(document.body, "Join"); @@ -564,9 +562,7 @@ describe("RoomHeader", () => { }); it("join button is disabled if there is an other ongoing call", async () => { - const members = mockRoomMembers(room, 3); - const participants = mockParticipants(members); - jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); + mockRoomMembers(room, 3); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); jest.spyOn(CallStore.prototype, "connectedCalls", "get").mockReturnValue( new Set([{ roomId: "some_other_room" } as Call]), @@ -586,9 +582,7 @@ describe("RoomHeader", () => { }); it("close lobby button is shown if there is an ongoing call but we are viewing the lobby", async () => { - const members = mockRoomMembers(room, 3); - const participants = mockParticipants(members); - jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants); + mockRoomMembers(room, 3); jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true); @@ -798,32 +792,20 @@ describe("RoomHeader", () => { /** * * @param count the number of users to create - * @returns the created members */ function mockRoomMembers(room: Room, count: number) { const members = Array(count) .fill(0) - .map((_, index) => { - const userId = `@user-${index}:example.org`; - const member = new RoomMember(room.roomId, userId); - member.name = `Member ${index}`; - member.rawDisplayName = `Member ${index}`; - member.membership = KnownMembership.Join; - member.getAvatarUrl = () => `mxc://avatar.url/user-${index}.png`; - member.getMxcAvatarUrl = () => `mxc://avatar.url/user-${index}.png`; - return member; - }); + .map((_, index) => ({ + userId: `@user-${index}:example.org`, + name: `Member ${index}`, + rawDisplayName: `Member ${index}`, + roomId: room.roomId, + membership: KnownMembership.Join, + getAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, + getMxcAvatarUrl: () => `mxc://avatar.url/user-${index}.png`, + })); room.currentState.setJoinedMemberCount(members.length); room.getJoinedMembers = jest.fn().mockReturnValue(members); - return members; -} - -/** - * Creates a participants map from room members - * @param members the room members to convert to participants - * @returns Map of participants with device sets - */ -function mockParticipants(members: RoomMember[]): Map> { - return new Map(members.map((member, index) => [member, new Set([`device${index + 1}`])])); } From f67825cff3c586ee0cc136285676f303d90840fa Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 22:04:14 +0100 Subject: [PATCH 20/25] Revert "Try again to fix calParticipants" This reverts commit c45ad3063f97cad6989ec3fe44dacf6f0904a4e1. --- src/hooks/useCall.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/hooks/useCall.ts b/src/hooks/useCall.ts index 9f1fb010cbe..cc32b46bc86 100644 --- a/src/hooks/useCall.ts +++ b/src/hooks/useCall.ts @@ -42,11 +42,10 @@ export const useConnectionState = (call: Call | null): ConnectionState => ); export const useParticipants = (call: Call | null): Map> => { - const participants = call?.participants; return useTypedEventEmitterState( call ?? undefined, CallEvent.Participants, - useCallback((state) => state ?? participants ?? new Map(), [participants]), + useCallback((state) => state ?? call?.participants ?? new Map(), [call]), ); }; From fecb387c52380e9517908a8230789ee61b556f48 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 22:04:22 +0100 Subject: [PATCH 21/25] Revert "fix useParticipants incorrectly returning an array when a map is expected" This reverts commit e06d76e3f74d8f77e33247e9f4708bb39aebdce0. --- src/hooks/useCall.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/useCall.ts b/src/hooks/useCall.ts index cc32b46bc86..db0660df2bf 100644 --- a/src/hooks/useCall.ts +++ b/src/hooks/useCall.ts @@ -45,7 +45,7 @@ export const useParticipants = (call: Call | null): Map> return useTypedEventEmitterState( call ?? undefined, CallEvent.Participants, - useCallback((state) => state ?? call?.participants ?? new Map(), [call]), + useCallback((state) => state ?? call?.participants ?? [], [call]), ); }; From 11641410d85c7e65c38232586077a9fc57b945e0 Mon Sep 17 00:00:00 2001 From: David Langley Date: Thu, 28 Aug 2025 10:01:39 +0100 Subject: [PATCH 22/25] bump compound-web --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d22c9a3b4b5..20b1e49b95f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4699,9 +4699,9 @@ "@vector-im/compound-web@^8.1.2": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@vector-im/compound-web/-/compound-web-8.2.0.tgz#64193ce8d0c62a99e566cdb3bf4602160575ef3e" - integrity sha512-we+EQ/pw2YCEl7EMPdpeqP3HZpnQcCuOHoiAYKFwF4doXBDENLpTyA8ZdX0cViT3sqvExPT0RHZ2Nlt5Y6dQNQ== + version "8.2.1" + resolved "https://registry.yarnpkg.com/@vector-im/compound-web/-/compound-web-8.2.1.tgz#e16ce566c836e6c0fa3318128e57fda0a4542514" + integrity sha512-mqIMbBtnY3RvpCOVBhE8YouSGwU/efllJR3q4Ds1/Z/rS0/dh3Mok2frG4zRg8wdDa91VI9XHBEjeugUrpRbzw== dependencies: "@floating-ui/react" "^0.27.0" "@radix-ui/react-context-menu" "^2.2.1" From 35019df356cd280e3472aad009d9a01cfbc9af19 Mon Sep 17 00:00:00 2001 From: David Langley Date: Thu, 28 Aug 2025 10:02:42 +0100 Subject: [PATCH 23/25] Update snapshots --- .../__snapshots__/PinnedEventTile-test.tsx.snap | 4 ++-- .../ThreadsActivityCentre-test.tsx.snap | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/test/unit-tests/components/views/rooms/__snapshots__/PinnedEventTile-test.tsx.snap b/test/unit-tests/components/views/rooms/__snapshots__/PinnedEventTile-test.tsx.snap index 26a121a88aa..0201e030732 100644 --- a/test/unit-tests/components/views/rooms/__snapshots__/PinnedEventTile-test.tsx.snap +++ b/test/unit-tests/components/views/rooms/__snapshots__/PinnedEventTile-test.tsx.snap @@ -185,7 +185,7 @@ exports[` should render the menu with all the options 1`] = ` aria-label="Open menu" aria-labelledby="radix-«r10»" aria-orientation="vertical" - class="_menu_19sse_8" + class="_menu_1glhz_8" data-align="start" data-orientation="vertical" data-radix-menu-content="" @@ -376,7 +376,7 @@ exports[` should render the menu without unpin and delete 1`] aria-label="Open menu" aria-labelledby="radix-«rl»" aria-orientation="vertical" - class="_menu_19sse_8" + class="_menu_1glhz_8" data-align="start" data-orientation="vertical" data-radix-menu-content="" diff --git a/test/unit-tests/components/views/spaces/__snapshots__/ThreadsActivityCentre-test.tsx.snap b/test/unit-tests/components/views/spaces/__snapshots__/ThreadsActivityCentre-test.tsx.snap index 2e778b51203..9bf572b78fc 100644 --- a/test/unit-tests/components/views/spaces/__snapshots__/ThreadsActivityCentre-test.tsx.snap +++ b/test/unit-tests/components/views/spaces/__snapshots__/ThreadsActivityCentre-test.tsx.snap @@ -4,7 +4,7 @@ exports[`ThreadsActivityCentre renders notifications matching the snapshot 1`] =

Threads activity @@ -230,7 +230,7 @@ exports[`ThreadsActivityCentre should close the release announcement when the TA

Threads activity @@ -273,7 +273,7 @@ exports[`ThreadsActivityCentre should match snapshot when empty 1`] = `

Threads activity @@ -307,7 +307,7 @@ exports[`ThreadsActivityCentre should order the room with the same notification

Threads activity From 0c907c53ae47e6c9e2a7876041bbb12ed4a478f7 Mon Sep 17 00:00:00 2001 From: David Langley Date: Thu, 28 Aug 2025 11:59:55 +0100 Subject: [PATCH 24/25] Fix bad merge, we don't need the second call to escape. The comment a couple of lines up explains things. --- test/unit-tests/components/views/dialogs/BaseDialog-test.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/test/unit-tests/components/views/dialogs/BaseDialog-test.tsx b/test/unit-tests/components/views/dialogs/BaseDialog-test.tsx index d32d26615f1..41a396c5b6a 100644 --- a/test/unit-tests/components/views/dialogs/BaseDialog-test.tsx +++ b/test/unit-tests/components/views/dialogs/BaseDialog-test.tsx @@ -21,7 +21,6 @@ describe("BaseDialog", () => { const dialog = container.querySelector('[role="dialog"]') as HTMLElement; dialog?.focus(); await userEvent.keyboard("{Escape}"); - await userEvent.keyboard("{Escape}"); expect(onFinished).toHaveBeenCalled(); }); }); From e2c1be49ca07cafe92eaf875e9433964fee78b52 Mon Sep 17 00:00:00 2001 From: David Langley Date: Thu, 28 Aug 2025 13:05:28 +0100 Subject: [PATCH 25/25] Trigger build to fix licence/cla check