From b72eba33e20738feb6e14a7bd1b641a00322f679 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 19:36:47 +0000 Subject: [PATCH 01/17] Update dependency vite-plugin-svgr to v4 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9b6eb301..84ef350a 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "typescript": "^5.1.6", "vite": "^4.2.0", "vite-plugin-html-template": "^1.1.0", - "vite-plugin-svgr": "^3.2.0" + "vite-plugin-svgr": "^4.0.0" }, "jest": { "testEnvironment": "./test/environment.ts", diff --git a/yarn.lock b/yarn.lock index 13a44384..263e1986 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16191,10 +16191,10 @@ vite-plugin-mdx@^3.5.6: resolve "^1.20.0" unified "^9.2.1" -vite-plugin-svgr@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-3.3.0.tgz#024f083c0f0831497d8507b82e49a8ee2b29701a" - integrity sha512-vWZMCcGNdPqgziYFKQ3Y95XP0d0YGp28+MM3Dp9cTa/px5CKcHHrIoPl2Jw81rgVm6/ZUNONzjXbZQZ7Kw66og== +vite-plugin-svgr@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-4.0.0.tgz#2fb2537bde793602784c126f04210eaf130304bd" + integrity sha512-ingW8FEJ4vz9mQumnMDhNysE+YleiaThYmgflhUIVI4iIjVsVA1SswYIKprWVmyFsiIk1DqcwUeTFCnUJA3Vvg== dependencies: "@rollup/pluginutils" "^5.0.4" "@svgr/core" "^8.1.0" From 55f129e651f7f076b01aeddd219a45c595edc902 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 22:41:39 +0000 Subject: [PATCH 02/17] Update dependency @vector-im/compound-web to v0.4.5 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 13a44384..b0defda2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5113,9 +5113,9 @@ svg2vectordrawable "^2.9.1" "@vector-im/compound-web@^0.4.0": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@vector-im/compound-web/-/compound-web-0.4.4.tgz#b7374336f51ad57c40bef67e06b733aca5ef8a48" - integrity sha512-Ox/5PgwXSue/1fnnxMogl83iW18dnIMIh/JTnogFHn6zCkyz4Zl2pTKO32FiPzID5kdd0Zf7Li5fMdY1ekS3sA== + version "0.4.5" + resolved "https://registry.yarnpkg.com/@vector-im/compound-web/-/compound-web-0.4.5.tgz#6e0e066fc3a51d6daf17251d9590647b51fe7434" + integrity sha512-XkuBqJlj4Brsj+IfwkXtlGhyFGXvc6VoxFO1wDipM9d48SrNUGtK8IOQVZVeBYtML6XPET5lmp9ORnSpzWI3Ig== dependencies: "@radix-ui/react-form" "^0.0.3" "@radix-ui/react-tooltip" "^1.0.6" From 9cfaff8cdbf4e6cb3f66524943da6fef3601f543 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 27 Sep 2023 01:08:38 +0000 Subject: [PATCH 03/17] Update sentry-javascript monorepo to v7 --- package.json | 4 +- yarn.lock | 129 ++++++++++++++++++++++++--------------------------- 2 files changed, 62 insertions(+), 71 deletions(-) diff --git a/package.json b/package.json index 9b6eb301..09b239d4 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,8 @@ "@react-stately/select": "^3.1.3", "@react-stately/tooltip": "^3.0.5", "@react-stately/tree": "^3.2.0", - "@sentry/react": "^6.13.3", - "@sentry/tracing": "^6.13.3", + "@sentry/react": "^7.0.0", + "@sentry/tracing": "^7.0.0", "@use-gesture/react": "^10.2.11", "@vector-im/compound-design-tokens": "^0.0.6", "@vector-im/compound-web": "^0.4.0", diff --git a/yarn.lock b/yarn.lock index 13a44384..04121e09 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3331,15 +3331,27 @@ "@sentry/utils" "7.69.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/browser@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.19.7.tgz#a40b6b72d911b5f1ed70ed3b4e7d4d4e625c0b5f" - integrity sha512-oDbklp4O3MtAM4mtuwyZLrgO1qDVYIujzNJQzXmi9YzymJCuzMLSRDvhY83NNDCRxf0pds4DShgYeZdbSyKraA== +"@sentry-internal/tracing@7.72.0": + version "7.72.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.72.0.tgz#6293a08b8b3dff80499207a4b4994ae70aafc34c" + integrity sha512-DToryaRSHk9R5RLgN4ktYEXZjQdqncOAWPqyyIurji8lIobXFRfmLtGL1wjoCK6sQNgWsjhSM9kXxwGnva1DNw== dependencies: - "@sentry/core" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" + "@sentry/core" "7.72.0" + "@sentry/types" "7.72.0" + "@sentry/utils" "7.72.0" + tslib "^2.4.1 || ^1.9.3" + +"@sentry/browser@7.72.0": + version "7.72.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.72.0.tgz#8920d32920031de7ef70140ac13de267e773e5c7" + integrity sha512-fcFDTzqhPd3VZAmmYW3KvBTBaEfrKjPmRhlAsfhkGWYLCHqVkNtzsFER4cmUNRGNxjyt9tcG3WlTTqgLRucycQ== + dependencies: + "@sentry-internal/tracing" "7.72.0" + "@sentry/core" "7.72.0" + "@sentry/replay" "7.72.0" + "@sentry/types" "7.72.0" + "@sentry/utils" "7.72.0" + tslib "^2.4.1 || ^1.9.3" "@sentry/bundler-plugin-core@2.7.1": version "2.7.1" @@ -3366,17 +3378,6 @@ proxy-from-env "^1.1.0" which "^2.0.2" -"@sentry/core@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.7.tgz#156aaa56dd7fad8c89c145be6ad7a4f7209f9785" - integrity sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw== - dependencies: - "@sentry/hub" "6.19.7" - "@sentry/minimal" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" - "@sentry/core@7.69.0": version "7.69.0" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.69.0.tgz#ebbe01df573f438f8613107020a4e18eb9adca4d" @@ -3386,23 +3387,14 @@ "@sentry/utils" "7.69.0" tslib "^2.4.1 || ^1.9.3" -"@sentry/hub@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.7.tgz#58ad7776bbd31e9596a8ec46365b45cd8b9cfd11" - integrity sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA== +"@sentry/core@7.72.0": + version "7.72.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.72.0.tgz#df19f9dc1c2cfc5993a73c0c36283c35f9c52f94" + integrity sha512-G03JdQ5ZsFNRjcNNi+QvCjqOuBvYqU92Gs1T2iK3GE8dSBTu2khThydMpG4xrKZQLIpHOyiIhlFZiuPtZ66W8w== dependencies: - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" - -"@sentry/minimal@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.7.tgz#b3ee46d6abef9ef3dd4837ebcb6bdfd01b9aa7b4" - integrity sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ== - dependencies: - "@sentry/hub" "6.19.7" - "@sentry/types" "6.19.7" - tslib "^1.9.3" + "@sentry/types" "7.72.0" + "@sentry/utils" "7.72.0" + tslib "^2.4.1 || ^1.9.3" "@sentry/node@^7.60.0": version "7.69.0" @@ -3418,46 +3410,42 @@ lru_map "^0.3.3" tslib "^2.4.1 || ^1.9.3" -"@sentry/react@^6.13.3": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-6.19.7.tgz#58cc2d6da20f7d3b0df40638dfbbbc86c9c85caf" - integrity sha512-VzJeBg/v41jfxUYPkH2WYrKjWc4YiMLzDX0f4Zf6WkJ4v3IlDDSkX6DfmWekjTKBho6wiMkSNy2hJ1dHfGZ9jA== +"@sentry/react@^7.0.0": + version "7.72.0" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.72.0.tgz#badb4b5e28d27c892917210a6816cb6a2af2c2a5" + integrity sha512-BYFO3uyB9FfdUq05NtsS+OfU636HMZ7avbSEALo24x+OPuaD+fCByTdgxYVpDRYrBPa7lALYzCge0PDcGnGiig== dependencies: - "@sentry/browser" "6.19.7" - "@sentry/minimal" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" + "@sentry/browser" "7.72.0" + "@sentry/types" "7.72.0" + "@sentry/utils" "7.72.0" hoist-non-react-statics "^3.3.2" - tslib "^1.9.3" + tslib "^2.4.1 || ^1.9.3" -"@sentry/tracing@^6.13.3": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.19.7.tgz#54bb99ed5705931cd33caf71da347af769f02a4c" - integrity sha512-ol4TupNnv9Zd+bZei7B6Ygnr9N3Gp1PUrNI761QSlHtPC25xXC5ssSD3GMhBgyQrcvpuRcCFHVNNM97tN5cZiA== +"@sentry/replay@7.72.0": + version "7.72.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.72.0.tgz#39da5d971045a6d9bf5d3bd16ccc1f5c0c42c4c8" + integrity sha512-dHH/mYCFBwJ/kYmL9L5KihjwQKcefiuvcH0otHSwKSpbbeEoM/BV+SHQoYGd6OMSYnL9fq1dHfF7Zo26p5Yu0Q== dependencies: - "@sentry/hub" "6.19.7" - "@sentry/minimal" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" + "@sentry/core" "7.72.0" + "@sentry/types" "7.72.0" + "@sentry/utils" "7.72.0" -"@sentry/types@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.7.tgz#c6b337912e588083fc2896eb012526cf7cfec7c7" - integrity sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg== +"@sentry/tracing@^7.0.0": + version "7.72.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.72.0.tgz#1b6a0475d1e9e19ffb5ead87be011e9c6a0941ae" + integrity sha512-DOMlyviMLNwWgN4gJw/TrHaAdBcZWvm8xLbgwMwrihRn/m84kmH2Ui1FUYpL30o/mH+mQS+53IHZukrgQjHkZA== + dependencies: + "@sentry-internal/tracing" "7.72.0" "@sentry/types@7.69.0": version "7.69.0" resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.69.0.tgz#012b8d90d270a473cc2a5cf58a56870542739292" integrity sha512-zPyCox0mzitzU6SIa1KIbNoJAInYDdUpdiA+PoUmMn2hFMH1llGU/cS7f4w/mAsssTlbtlBi72RMnWUCy578bw== -"@sentry/utils@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.7.tgz#6edd739f8185fd71afe49cbe351c1bbf5e7b7c79" - integrity sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA== - dependencies: - "@sentry/types" "6.19.7" - tslib "^1.9.3" +"@sentry/types@7.72.0": + version "7.72.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.72.0.tgz#b474d3821338a545fb2db109715d9aad502bc810" + integrity sha512-g6u0mk62yGshx02rfFADIfyR/S9VXcf3RG2qQPuvykrWtOfN/BOTrZypF7I+MiqKwRW76r3Pcu2C/AB+6z9XQA== "@sentry/utils@7.69.0", "@sentry/utils@^7.60.0": version "7.69.0" @@ -3467,6 +3455,14 @@ "@sentry/types" "7.69.0" tslib "^2.4.1 || ^1.9.3" +"@sentry/utils@7.72.0": + version "7.72.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.72.0.tgz#798c764ac61bb658e2117792010ccd20ad8c7b02" + integrity sha512-o/MtqI7WJXuswidH0bSgBP40KN2lrnyQEIx5uoyJUJi/QEaboIsqbxU62vaFJpde8SYrbA+rTnP3J3ujF2gUag== + dependencies: + "@sentry/types" "7.72.0" + tslib "^2.4.1 || ^1.9.3" + "@sentry/vite-plugin@^2.0.0": version "2.7.1" resolved "https://registry.yarnpkg.com/@sentry/vite-plugin/-/vite-plugin-2.7.1.tgz#23fa4c95079c3f2ba10b851dce7452c16adc82c8" @@ -15560,11 +15556,6 @@ tsconfig-paths@^3.14.2: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, "tslib@^2.4.1 || ^1.9.3": version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" From 752ba126dcdcc0b563e0e52fb951754c23943cd8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 27 Sep 2023 11:58:13 +0000 Subject: [PATCH 04/17] Update dependency @types/request to v2.48.9 --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 13a44384..2dac6b62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4397,9 +4397,9 @@ "@babel/types" "^7.20.7" "@types/caseless@*": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" - integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w== + version "0.12.3" + resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.3.tgz#8f7d6c8b536af838966b77ce73d63562561d2b92" + integrity sha512-ZD/NsIJYq/2RH+hY7lXmstfp/v9djGt9ah+xRQ3pcgR79qiKsG4pLl25AI7IcXxVO8dH9GiBE5rAknC0ePntlw== "@types/content-type@^1.1.5": version "1.1.6" @@ -4801,9 +4801,9 @@ form-data "^3.0.0" "@types/node@*": - version "20.6.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12" - integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw== + version "20.7.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" + integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0": version "16.18.46" @@ -4889,9 +4889,9 @@ csstype "^3.0.2" "@types/request@^2.48.8": - version "2.48.8" - resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.8.tgz#0b90fde3b655ab50976cb8c5ac00faca22f5a82c" - integrity sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ== + version "2.48.9" + resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.9.tgz#43e123e93b10bd740a298e25430de6fab7e726c2" + integrity sha512-4mi2hYsvPAhe8RXjk5DKB09sAUzbK68T2XjORehHdWyxFoX2zUnfi1VQ5wU4Md28H/5+uB4DkxY9BS4B87N/0A== dependencies: "@types/caseless" "*" "@types/node" "*" From c11b71abf6cb6c9b9b50760bbaeb37036fc9da83 Mon Sep 17 00:00:00 2001 From: raspin0 Date: Wed, 27 Sep 2023 12:16:41 +0000 Subject: [PATCH 05/17] Translated using Weblate (Polish) Currently translated at 100.0% (124 of 124 strings) Translation: Element Call/element-call Translate-URL: https://translate.element.io/projects/element-call/element-call/pl/ --- public/locales/pl/app.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/public/locales/pl/app.json b/public/locales/pl/app.json index c70620ae..7dbeedc4 100644 --- a/public/locales/pl/app.json +++ b/public/locales/pl/app.json @@ -107,5 +107,20 @@ "Share this call": "Udostępnij to połączenie", "Sharing screen": "Udostępnianie ekranu", "{{count, number}}|one": "{{count, number}}", - "{{names, list(style: short;)}}": "{{names, list(style: short;)}}" + "{{names, list(style: short;)}}": "{{names, list(style: short;)}}", + "Continue in browser": "Kontynuuj w przeglądarce", + "Mute microphone": "Wycisz mikrofon", + "Name of call": "Nazwa połączenia", + "Open in the app": "Otwórz w aplikacji", + "Ready to join?": "Gotowy, by dołączyć?", + "Select app": "Wybierz aplikację", + "Start new call": "Rozpocznij nowe połączenie", + "Start video": "Rozpocznij wideo", + "Back to recents": "Wróć do ostatnie", + "Stop video": "Zakończ wideo", + "Unmute microphone": "Odcisz mikrofon", + "Call not found": "Nie znaleziono połączenia", + "Calls are now end-to-end encrypted and need to be created from the home page. This helps make sure everyone's using the same encryption key.": "Połączenia są teraz szyfrowane end-to-end i muszą zostać utworzone ze strony głównej. Pomaga to upewnić się, że każdy korzysta z tego samego klucza szyfrującego.", + "You": "Ty", + "Your web browser does not support media end-to-end encryption. Supported Browsers are Chrome, Safari, Firefox >=117": "Twoja przeglądarka nie wspiera szyfrowania end-to-end. Wspierane przeglądarki to Chrome, Safari, Firefox >=117" } From 60f264620c6fbfe3fd24501f9397ab7962f36f76 Mon Sep 17 00:00:00 2001 From: random Date: Wed, 27 Sep 2023 13:37:42 +0000 Subject: [PATCH 06/17] Translated using Weblate (Italian) Currently translated at 100.0% (124 of 124 strings) Translation: Element Call/element-call Translate-URL: https://translate.element.io/projects/element-call/element-call/it/ --- public/locales/it/app.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/public/locales/it/app.json b/public/locales/it/app.json index 38188f72..d8fa7065 100644 --- a/public/locales/it/app.json +++ b/public/locales/it/app.json @@ -119,7 +119,8 @@ "Stop video": "Ferma video", "Unmute microphone": "Riaccendi il microfono", "Back to recents": "Torna ai recenti", - "Start new call": "Inizia nuova chiamata", + "Start new call": "Inizia una nuova chiamata", "Call not found": "Chiamata non trovata", - "Calls are now end-to-end encrypted and need to be created from the home page. This helps make sure everyone's using the same encryption key.": "Le chiamate ora sono cifrate end-to-end e devono essere create dalla pagina principale. Ciò assicura che chiunque usi la stessa chiave di crittografia." + "Calls are now end-to-end encrypted and need to be created from the home page. This helps make sure everyone's using the same encryption key.": "Le chiamate ora sono cifrate end-to-end e devono essere create dalla pagina principale. Ciò assicura che chiunque usi la stessa chiave di crittografia.", + "Your web browser does not support media end-to-end encryption. Supported Browsers are Chrome, Safari, Firefox >=117": "Il tuo browser non supporta la crittografia end-to-end dei media. I browser supportati sono Chrome, Safari, Firefox >=117" } From a959436ac7ae27da049e58b8fe0b170a88e2f9b6 Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 27 Sep 2023 15:17:04 -0400 Subject: [PATCH 07/17] Change wording from 'share' to 'invite' This was updated in the designs. --- .../{ShareButton.tsx => InviteButton.tsx} | 4 ++-- src/room/GroupCallView.tsx | 18 +++++++++--------- src/room/InCallView.tsx | 4 ++-- ...Modal.module.css => InviteModal.module.css} | 0 src/room/{ShareModal.tsx => InviteModal.tsx} | 6 +++--- src/room/LobbyView.tsx | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) rename src/button/{ShareButton.tsx => InviteButton.tsx} (95%) rename src/room/{ShareModal.module.css => InviteModal.module.css} (100%) rename src/room/{ShareModal.tsx => InviteModal.tsx} (87%) diff --git a/src/button/ShareButton.tsx b/src/button/InviteButton.tsx similarity index 95% rename from src/button/ShareButton.tsx rename to src/button/InviteButton.tsx index 2f7f1334..158b3297 100644 --- a/src/button/ShareButton.tsx +++ b/src/button/InviteButton.tsx @@ -19,13 +19,13 @@ import { Button } from "@vector-im/compound-web"; import { useTranslation } from "react-i18next"; import { ReactComponent as UserAddSolidIcon } from "@vector-im/compound-design-tokens/icons/user-add-solid.svg"; -export const ShareButton: FC< +export const InviteButton: FC< Omit, "children"> > = (props) => { const { t } = useTranslation(); return ( ); }; diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index ab96926a..de4b1ed4 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -47,7 +47,7 @@ import { useEnableE2EE } from "../settings/useSetting"; import { useRoomAvatar } from "./useRoomAvatar"; import { useRoomName } from "./useRoomName"; import { useJoinRule } from "./useJoinRule"; -import { ShareModal } from "./ShareModal"; +import { InviteModal } from "./InviteModal"; declare global { interface Window { @@ -274,15 +274,15 @@ export function GroupCallView({ const joinRule = useJoinRule(rtcSession.room); - const [shareModalOpen, setShareModalOpen] = useState(false); - const onDismissShareModal = useCallback( - () => setShareModalOpen(false), - [setShareModalOpen] + const [shareModalOpen, setInviteModalOpen] = useState(false); + const onDismissInviteModal = useCallback( + () => setInviteModalOpen(false), + [setInviteModalOpen] ); const onShareClickFn = useCallback( - () => setShareModalOpen(true), - [setShareModalOpen] + () => setInviteModalOpen(true), + [setInviteModalOpen] ); const onShareClick = joinRule === JoinRule.Public ? onShareClickFn : null; @@ -325,10 +325,10 @@ export function GroupCallView({ } const shareModal = ( - ); diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 313cc42f..06191f6c 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -69,7 +69,7 @@ import { useWakeLock } from "../useWakeLock"; import { useMergedRefs } from "../useMergedRefs"; import { MuteStates } from "./MuteStates"; import { MatrixInfo } from "./VideoPreview"; -import { ShareButton } from "../button/ShareButton"; +import { InviteButton } from "../button/InviteButton"; import { LayoutToggle } from "./LayoutToggle"; import { ECAddonConnectionState, @@ -417,7 +417,7 @@ export function InCallView({ {!reducedControls && onShareClick !== null && ( - + )} diff --git a/src/room/ShareModal.module.css b/src/room/InviteModal.module.css similarity index 100% rename from src/room/ShareModal.module.css rename to src/room/InviteModal.module.css diff --git a/src/room/ShareModal.tsx b/src/room/InviteModal.tsx similarity index 87% rename from src/room/ShareModal.tsx rename to src/room/InviteModal.tsx index 0439f10a..6a04e2ef 100644 --- a/src/room/ShareModal.tsx +++ b/src/room/InviteModal.tsx @@ -21,7 +21,7 @@ import { Room } from "matrix-js-sdk"; import { Modal } from "../Modal"; import { CopyButton } from "../button"; import { getAbsoluteRoomUrl } from "../matrix-utils"; -import styles from "./ShareModal.module.css"; +import styles from "./InviteModal.module.css"; import { useRoomSharedKey } from "../e2ee/sharedKeyManagement"; interface Props { @@ -30,12 +30,12 @@ interface Props { onDismiss: () => void; } -export const ShareModal: FC = ({ room, open, onDismiss }) => { +export const InviteModal: FC = ({ room, open, onDismiss }) => { const { t } = useTranslation(); const roomSharedKey = useRoomSharedKey(room.roomId); return ( - +

{t("Copy and share this call link")}

= ({ /> - {onShareClick !== null && } + {onShareClick !== null && } )} From 6865a13c3c9ffbafb904ba7a114ba5ed8a6d4b07 Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 27 Sep 2023 17:06:57 -0400 Subject: [PATCH 08/17] Revert "Merge pull request #1603 from vector-im/renovate/babel-monorepo" This reverts commit 03a2350e5c7b7715267b8511c28de5379ae28603, reversing changes made to db6734313331c76aafd49208d6fb3d88d790cdba. --- yarn.lock | 83 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 70 insertions(+), 13 deletions(-) diff --git a/yarn.lock b/yarn.lock index 13a44384..f308df03 100644 --- a/yarn.lock +++ b/yarn.lock @@ -65,7 +65,28 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.16.5", "@babel/core@^7.17.10", "@babel/core@^7.21.3", "@babel/core@^7.22.20", "@babel/core@^7.7.5": +"@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.16.5", "@babel/core@^7.17.10", "@babel/core@^7.7.5": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.20.tgz#e3d0eed84c049e2a2ae0a64d27b6a37edec385b7" + integrity sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.22.20" + "@babel/helpers" "^7.22.15" + "@babel/parser" "^7.22.16" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.20" + "@babel/types" "^7.22.19" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/core@^7.21.3", "@babel/core@^7.22.20": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== @@ -96,6 +117,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.22.15", "@babel/generator@^7.7.2": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" + integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== + dependencies: + "@babel/types" "^7.22.15" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/generator@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" @@ -106,16 +137,6 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.7.2": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" - integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== - dependencies: - "@babel/types" "^7.22.15" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - "@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -253,6 +274,17 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.5" +"@babel/helper-module-transforms@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz#da9edc14794babbe7386df438f3768067132f59e" + integrity sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" @@ -353,6 +385,15 @@ "@babel/traverse" "^7.22.11" "@babel/types" "^7.22.11" +"@babel/helpers@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" + integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.15" + "@babel/types" "^7.22.15" + "@babel/helpers@^7.23.0": version "7.23.1" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" @@ -381,7 +422,7 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.14.tgz#c7de58e8de106e88efca42ce17f0033209dfd245" integrity sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ== -"@babel/parser@^7.14.7": +"@babel/parser@^7.14.7", "@babel/parser@^7.22.16": version "7.22.16" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== @@ -1362,6 +1403,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.22.15", "@babel/traverse@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.20.tgz#db572d9cb5c79e02d83e5618b82f6991c07584c9" + integrity sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.22.16" + "@babel/types" "^7.22.19" + debug "^4.1.0" + globals "^11.1.0" + "@babel/traverse@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" @@ -1396,7 +1453,7 @@ "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" -"@babel/types@^7.3.3": +"@babel/types@^7.22.19", "@babel/types@^7.3.3": version "7.22.19" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684" integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg== From 8a14d60cb4126b6bda7b6496c14fe287c0fe9d37 Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 27 Sep 2023 17:34:41 -0400 Subject: [PATCH 09/17] Implement the new invite modal designs --- package.json | 1 + src/Modal.module.css | 78 ----------------- src/Modal.tsx | 20 ++++- src/Overlay.module.css | 99 ++++++++++++++++++++++ src/Toast.module.css | 38 +++++++++ src/Toast.tsx | 108 ++++++++++++++++++++++++ src/room/InviteModal.module.css | 8 +- src/room/InviteModal.tsx | 61 ++++++++++--- test/Toast-test.tsx | 59 +++++++++++++ test/__snapshots__/Toast-test.tsx.snap | 22 +++++ test/room/checkForParallelCalls-test.ts | 10 +-- test/utils.ts | 24 ++++++ yarn.lock | 5 ++ 13 files changed, 427 insertions(+), 106 deletions(-) create mode 100644 src/Overlay.module.css create mode 100644 src/Toast.module.css create mode 100644 src/Toast.tsx create mode 100644 test/Toast-test.tsx create mode 100644 test/__snapshots__/Toast-test.tsx.snap create mode 100644 test/utils.ts diff --git a/package.json b/package.json index 9b6eb301..ba8765e2 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "@storybook/react": "^6.5.0-alpha.5", "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.5.1", "@types/content-type": "^1.1.5", "@types/d3": "^7.4.0", "@types/dom-screen-wake-lock": "^1.0.1", diff --git a/src/Modal.module.css b/src/Modal.module.css index e72f6496..d6af51df 100644 --- a/src/Modal.module.css +++ b/src/Modal.module.css @@ -14,96 +14,18 @@ See the License for the specific language governing permissions and limitations under the License. */ -.overlay { - position: fixed; - z-index: 100; - inset: 0; - background: rgba(3, 12, 27, 0.528); -} - -@keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -.dialogOverlay[data-state="open"] { - animation: fade-in 200ms; -} - -@keyframes fade-out { - from { - opacity: 1; - } - to { - opacity: 0; - } -} - -.dialogOverlay[data-state="closed"] { - animation: fade-out 130ms; -} - .modal { - position: fixed; - z-index: 101; display: flex; flex-direction: column; } .dialog { - left: 50%; - top: 50%; - transform: translate(-50%, -50%); box-sizing: border-box; inline-size: 520px; max-inline-size: 90%; max-block-size: 600px; } -@keyframes zoom-in { - from { - opacity: 0; - transform: translate(-50%, -50%) scale(80%); - } - to { - opacity: 1; - transform: translate(-50%, -50%) scale(100%); - } -} - -@keyframes zoom-out { - from { - opacity: 1; - transform: translate(-50%, -50%) scale(100%); - } - to { - opacity: 0; - transform: translate(-50%, -50%) scale(80%); - } -} - -.dialog[data-state="open"] { - animation: zoom-in 200ms; -} - -.dialog[data-state="closed"] { - animation: zoom-out 130ms; -} - -@media (prefers-reduced-motion) { - .dialog[data-state="open"] { - animation-name: fade-in; - } - - .dialog[data-state="closed"] { - animation-name: fade-out; - } -} - .content { display: flex; flex-direction: column; diff --git a/src/Modal.tsx b/src/Modal.tsx index b644abe4..cacb24fe 100644 --- a/src/Modal.tsx +++ b/src/Modal.tsx @@ -32,6 +32,7 @@ import classNames from "classnames"; import { Heading } from "@vector-im/compound-web"; import styles from "./Modal.module.css"; +import overlayStyles from "./Overlay.module.css"; import { useMediaQuery } from "./useMediaQuery"; import { Glass } from "./Glass"; @@ -85,9 +86,14 @@ export function Modal({ dismissible={onDismiss !== undefined} > - +
@@ -108,12 +114,18 @@ export function Modal({
diff --git a/src/Overlay.module.css b/src/Overlay.module.css new file mode 100644 index 00000000..37bcf95d --- /dev/null +++ b/src/Overlay.module.css @@ -0,0 +1,99 @@ +/* +Copyright 2023 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.bg { + position: fixed; + z-index: 100; + inset: 0; + background: rgba(3, 12, 27, 0.528); +} + +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +.bg.animate[data-state="open"] { + animation: fade-in 200ms; +} + +@keyframes fade-out { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +.bg.animate[data-state="closed"] { + animation: fade-out 130ms; +} + +.overlay { + position: fixed; + z-index: 101; +} + +.overlay.animate { + left: 50%; + top: 50%; + transform: translate(-50%, -50%); +} + +@keyframes zoom-in { + from { + opacity: 0; + transform: translate(-50%, -50%) scale(80%); + } + to { + opacity: 1; + transform: translate(-50%, -50%) scale(100%); + } +} + +@keyframes zoom-out { + from { + opacity: 1; + transform: translate(-50%, -50%) scale(100%); + } + to { + opacity: 0; + transform: translate(-50%, -50%) scale(80%); + } +} + +.overlay.animate[data-state="open"] { + animation: zoom-in 200ms; +} + +.overlay.animate[data-state="closed"] { + animation: zoom-out 130ms; +} + +@media (prefers-reduced-motion) { + .overlay.animate[data-state="open"] { + animation-name: fade-in; + } + + .overlay.animate[data-state="closed"] { + animation-name: fade-out; + } +} diff --git a/src/Toast.module.css b/src/Toast.module.css new file mode 100644 index 00000000..5f19b3b2 --- /dev/null +++ b/src/Toast.module.css @@ -0,0 +1,38 @@ +/* +Copyright 2023 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.toast { + color: var(--cpd-color-text-on-solid-primary); + background: var(--cpd-color-alpha-gray-1200); + padding-inline: var(--cpd-space-3x); + padding-block: var(--cpd-space-1x); + border: none; + border-radius: var(--cpd-radius-pill-effect); + box-shadow: var(--small-drop-shadow); + display: flex; + align-items: center; + gap: var(--cpd-space-1x); +} + +.toast > h3 { + margin: 0; +} + +.toast > svg { + color: var(--cpd-color-icon-on-solid-primary); + flex-shrink: 0; + margin-inline-end: calc(-1 * var(--cpd-space-1x)); +} diff --git a/src/Toast.tsx b/src/Toast.tsx new file mode 100644 index 00000000..de532cde --- /dev/null +++ b/src/Toast.tsx @@ -0,0 +1,108 @@ +/* +Copyright 2023 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { + ComponentType, + FC, + SVGAttributes, + useCallback, + useEffect, +} from "react"; +import { + Root as DialogRoot, + Portal as DialogPortal, + Overlay as DialogOverlay, + Content as DialogContent, + Close as DialogClose, + Title as DialogTitle, +} from "@radix-ui/react-dialog"; +import classNames from "classnames"; +import { Text } from "@vector-im/compound-web"; + +import styles from "./Toast.module.css"; +import overlayStyles from "./Overlay.module.css"; + +interface Props { + /** + * The controlled open state of the toast. + */ + open: boolean; + /** + * Callback for when the user dismisses the toast. + */ + onDismiss: () => void; + /** + * A number of milliseconds after which the toast should be automatically + * dismissed. + */ + autoDismiss?: number; + children: string; + /** + * A supporting icon to display within the toast. + */ + Icon?: ComponentType>; +} + +/** + * A temporary message shown in an overlay in the center of the screen. + */ +export const Toast: FC = ({ + open, + onDismiss, + autoDismiss, + children, + Icon, +}) => { + const onOpenChange = useCallback( + (open: boolean) => { + if (!open) onDismiss(); + }, + [onDismiss] + ); + + useEffect(() => { + if (open && autoDismiss !== undefined) { + const timeout = setTimeout(onDismiss, autoDismiss); + return () => clearTimeout(timeout); + } + }, [open, autoDismiss, onDismiss]); + + return ( + + + + + + + + {children} + + + {Icon && } + + + + + ); +}; diff --git a/src/room/InviteModal.module.css b/src/room/InviteModal.module.css index dec0c304..dd7aa755 100644 --- a/src/room/InviteModal.module.css +++ b/src/room/InviteModal.module.css @@ -14,6 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -.copyButton { +.url { + text-align: center; + color: var(--cpd-color-text-secondary); + margin-block-end: var(--cpd-space-8x); +} + +.button { width: 100%; } diff --git a/src/room/InviteModal.tsx b/src/room/InviteModal.tsx index 6a04e2ef..7c2a9e73 100644 --- a/src/room/InviteModal.tsx +++ b/src/room/InviteModal.tsx @@ -14,15 +14,19 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { FC } from "react"; +import { FC, MouseEvent, useCallback, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { Room } from "matrix-js-sdk"; +import { Button, Text } from "@vector-im/compound-web"; +import { ReactComponent as LinkIcon } from "@vector-im/compound-design-tokens/icons/link.svg"; +import { ReactComponent as CheckIcon } from "@vector-im/compound-design-tokens/icons/check.svg"; +import useClipboard from "react-use-clipboard"; import { Modal } from "../Modal"; -import { CopyButton } from "../button"; import { getAbsoluteRoomUrl } from "../matrix-utils"; import styles from "./InviteModal.module.css"; import { useRoomSharedKey } from "../e2ee/sharedKeyManagement"; +import { Toast } from "../Toast"; interface Props { room: Room; @@ -33,19 +37,48 @@ interface Props { export const InviteModal: FC = ({ room, open, onDismiss }) => { const { t } = useTranslation(); const roomSharedKey = useRoomSharedKey(room.roomId); + const url = useMemo( + () => + getAbsoluteRoomUrl(room.roomId, room.name, roomSharedKey ?? undefined), + [room, roomSharedKey] + ); + const [, setCopied] = useClipboard(url); + const [toastOpen, setToastOpen] = useState(false); + const onToastDismiss = useCallback(() => setToastOpen(false), [setToastOpen]); + + const onButtonClick = useCallback( + (e: MouseEvent) => { + e.stopPropagation(); + setCopied(); + onDismiss(); + setToastOpen(true); + }, + [setCopied, onDismiss] + ); return ( - -

{t("Copy and share this call link")}

- -
+ <> + + + {url} + + + + + {t("Link copied to clipboard")} + + ); }; diff --git a/test/Toast-test.tsx b/test/Toast-test.tsx new file mode 100644 index 00000000..605feaea --- /dev/null +++ b/test/Toast-test.tsx @@ -0,0 +1,59 @@ +/* +Copyright 2023 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { screen, render } from "@testing-library/react"; +import { Toast } from "../src/Toast"; +import userEvent from "@testing-library/user-event"; +import { withFakeTimers } from "./utils"; + +test("Toast renders", () => { + render( + {}}> + Hello world! + + ); + expect(screen.queryByRole("dialog")).toBe(null); + render( + {}}> + Hello world! + + ); + expect(screen.getByRole("dialog")).toMatchSnapshot(); +}); + +test("Toast dismisses when clicked", async () => { + const onDismiss = jest.fn(); + render( + + Hello world! + + ); + await userEvent.click(screen.getByRole("dialog")); + expect(onDismiss).toHaveBeenCalled(); +}); + +test("Toast dismisses itself after the specified timeout", async () => { + withFakeTimers(() => { + const onDismiss = jest.fn(); + render( + + Hello world! + + ); + jest.advanceTimersByTime(2000); + expect(onDismiss).toHaveBeenCalled(); + }); +}); diff --git a/test/__snapshots__/Toast-test.tsx.snap b/test/__snapshots__/Toast-test.tsx.snap new file mode 100644 index 00000000..3391de02 --- /dev/null +++ b/test/__snapshots__/Toast-test.tsx.snap @@ -0,0 +1,22 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Toast renders 1`] = ` + +`; diff --git a/test/room/checkForParallelCalls-test.ts b/test/room/checkForParallelCalls-test.ts index 6b5f0166..0a1344df 100644 --- a/test/room/checkForParallelCalls-test.ts +++ b/test/room/checkForParallelCalls-test.ts @@ -18,15 +18,7 @@ import { Mocked, mocked } from "jest-mock"; import { RoomState } from "matrix-js-sdk/src/models/room-state"; import { PosthogAnalytics } from "../../src/analytics/PosthogAnalytics"; import { checkForParallelCalls } from "../../src/room/checkForParallelCalls"; - -const withFakeTimers = (continuation: () => void) => { - jest.useFakeTimers(); - try { - continuation(); - } finally { - jest.useRealTimers(); - } -}; +import { withFakeTimers } from "../utils"; const withMockedPosthog = ( continuation: (posthog: Mocked) => void diff --git a/test/utils.ts b/test/utils.ts new file mode 100644 index 00000000..9fb282ef --- /dev/null +++ b/test/utils.ts @@ -0,0 +1,24 @@ +/* +Copyright 2023 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +export function withFakeTimers(continuation: () => void): void { + jest.useFakeTimers(); + try { + continuation(); + } finally { + jest.useRealTimers(); + } +} diff --git a/yarn.lock b/yarn.lock index f308df03..593a64af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4394,6 +4394,11 @@ "@testing-library/dom" "^9.0.0" "@types/react-dom" "^18.0.0" +"@testing-library/user-event@^14.5.1": + version "14.5.1" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.1.tgz#27337d72046d5236b32fd977edee3f74c71d332f" + integrity sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg== + "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" From 2069c13bb8650dcec80e180a84ada39f7c6de98d Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 27 Sep 2023 17:52:43 -0400 Subject: [PATCH 10/17] Regenerate strings --- public/locales/en-GB/app.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/public/locales/en-GB/app.json b/public/locales/en-GB/app.json index 6dd6e72b..a8f5f256 100644 --- a/public/locales/en-GB/app.json +++ b/public/locales/en-GB/app.json @@ -30,7 +30,7 @@ "Continue in browser": "Continue in browser", "Copied!": "Copied!", "Copy": "Copy", - "Copy and share this call link": "Copy and share this call link", + "Copy link": "Copy link", "Create account": "Create account", "Debug log": "Debug log", "Debug log request": "Debug log request", @@ -55,9 +55,12 @@ "If you are experiencing issues or simply would like to provide some feedback, please send us a short description below.": "If you are experiencing issues or simply would like to provide some feedback, please send us a short description below.", "Include debug logs": "Include debug logs", "Inspector": "Inspector", + "Invite": "Invite", + "Invite to this call": "Invite to this call", "Join call": "Join call", "Join call now": "Join call now", "Join existing call?": "Join existing call?", + "Link copied to clipboard": "Link copied to clipboard", "Loading…": "Loading…", "Local volume": "Local volume", "Logging in…": "Logging in…", @@ -92,9 +95,7 @@ "Sending debug logs…": "Sending debug logs…", "Sending…": "Sending…", "Settings": "Settings", - "Share": "Share", "Share screen": "Share screen", - "Share this call": "Share this call", "Sharing screen": "Sharing screen", "Show call inspector": "Show call inspector", "Show connection stats": "Show connection stats", From d0416e71cb4355e4fd9ea8f5a2afa071fc47bffb Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 27 Sep 2023 17:53:04 -0400 Subject: [PATCH 11/17] Fix the i18n string scanner Apparently the upgrade to i18next-parser v8 came with the deprecation of this 'useKeysAsDefaultValues' option, and this is the new way to configure that behavior. --- i18next-parser.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/i18next-parser.config.js b/i18next-parser.config.js index a12797ee..e5c99251 100644 --- a/i18next-parser.config.js +++ b/i18next-parser.config.js @@ -18,5 +18,6 @@ export default { output: "public/locales/$LOCALE/$NAMESPACE.json", input: ["src/**/*.{ts,tsx}"], sort: true, - useKeysAsDefaultValue: true, + // The key becomes the English version of the string + defaultValue: (_l, _ns, key) => key, }; From 916a88712a677c0ef03dbdcb2463a01e1483a666 Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 27 Sep 2023 18:12:04 -0400 Subject: [PATCH 12/17] Replace the avatar stack in the header with an icon This is a design update. --- public/locales/en-GB/app.json | 2 +- src/Facepile.tsx | 66 ----------------------------------- src/Header.module.css | 1 - src/Header.tsx | 23 ++++++------ src/room/GroupCallView.tsx | 23 +++++------- src/room/InCallView.tsx | 7 ++-- src/room/LobbyView.tsx | 9 +++-- 7 files changed, 29 insertions(+), 102 deletions(-) delete mode 100644 src/Facepile.tsx diff --git a/public/locales/en-GB/app.json b/public/locales/en-GB/app.json index 6dd6e72b..14ee2185 100644 --- a/public/locales/en-GB/app.json +++ b/public/locales/en-GB/app.json @@ -5,7 +5,6 @@ "{{count}} stars|other": "{{count}} stars", "{{displayName}} is presenting": "{{displayName}} is presenting", "{{displayName}}, your call has ended.": "{{displayName}}, your call has ended.", - "{{names, list(style: short;)}}": "{{names, list(style: short;)}}", "<0><1>You may withdraw consent by unchecking this box. If you are currently in a call, this setting will take effect at the end of the call.": "<0><1>You may withdraw consent by unchecking this box. If you are currently in a call, this setting will take effect at the end of the call.", "<0>Already have an account?<1><0>Log in Or <2>Access as a guest": "<0>Already have an account?<1><0>Log in Or <2>Access as a guest", "<0>Create an account Or <2>Access as a guest": "<0>Create an account Or <2>Access as a guest", @@ -74,6 +73,7 @@ "Not now, return to home screen": "Not now, return to home screen", "Not registered yet? <2>Create an account": "Not registered yet? <2>Create an account", "Open in the app": "Open in the app", + "Participants": "Participants", "Password": "Password", "Passwords must match": "Passwords must match", "Profile": "Profile", diff --git a/src/Facepile.tsx b/src/Facepile.tsx deleted file mode 100644 index 7ed995ce..00000000 --- a/src/Facepile.tsx +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2022 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import { HTMLAttributes } from "react"; -import { MatrixClient } from "matrix-js-sdk/src/client"; -import { RoomMember } from "matrix-js-sdk/src/models/room-member"; -import { useTranslation } from "react-i18next"; -import { AvatarStack } from "@vector-im/compound-web"; - -import { Avatar, Size } from "./Avatar"; - -interface Props extends HTMLAttributes { - className?: string; - client: MatrixClient; - members: RoomMember[]; - max?: number; - size?: Size | number; -} - -export function Facepile({ - className, - client, - members, - max = 3, - size = Size.XS, - ...rest -}: Props) { - const { t } = useTranslation(); - - const displayedMembers = members.slice(0, max); - - return ( - m.name), - })} - {...rest} - > - {displayedMembers.map((member, i) => { - const avatarUrl = member.getMxcAvatarUrl(); - return ( - - ); - })} - - ); -} diff --git a/src/Header.module.css b/src/Header.module.css index 4f36182d..bb66034b 100644 --- a/src/Header.module.css +++ b/src/Header.module.css @@ -111,7 +111,6 @@ limitations under the License. display: flex; align-items: center; gap: var(--cpd-space-1-5x); - font: var(--cpd-font-body-sm-medium); } @media (min-width: 800px) { diff --git a/src/Header.tsx b/src/Header.tsx index aea3da71..3de71d59 100644 --- a/src/Header.tsx +++ b/src/Header.tsx @@ -18,13 +18,12 @@ import classNames from "classnames"; import { FC, HTMLAttributes, ReactNode } from "react"; import { Link } from "react-router-dom"; import { useTranslation } from "react-i18next"; -import { MatrixClient, RoomMember } from "matrix-js-sdk/src/matrix"; -import { Heading } from "@vector-im/compound-web"; +import { Heading, Text } from "@vector-im/compound-web"; +import { ReactComponent as UserProfileIcon } from "@vector-im/compound-design-tokens/icons/user-profile.svg"; import styles from "./Header.module.css"; import { ReactComponent as Logo } from "./icons/Logo.svg"; import { Avatar, Size } from "./Avatar"; -import { Facepile } from "./Facepile"; import { EncryptionLock } from "./room/EncryptionLock"; import { useMediaQuery } from "./useMediaQuery"; @@ -118,8 +117,7 @@ interface RoomHeaderInfoProps { name: string; avatarUrl: string | null; encrypted: boolean; - participants: RoomMember[]; - client: MatrixClient; + participantCount: number; } export const RoomHeaderInfo: FC = ({ @@ -127,8 +125,7 @@ export const RoomHeaderInfo: FC = ({ name, avatarUrl, encrypted, - participants, - client, + participantCount, }) => { const { t } = useTranslation(); const size = useMediaQuery("(max-width: 550px)") ? "sm" : "lg"; @@ -153,10 +150,16 @@ export const RoomHeaderInfo: FC = ({
- {participants.length > 0 && ( + {participantCount > 0 && (
- - {t("{{count, number}}", { count: participants.length })} + + + {t("{{count, number}}", { count: participantCount })} +
)}
diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index ab96926a..eade3f52 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -20,7 +20,7 @@ import { MatrixClient } from "matrix-js-sdk/src/client"; import { Room, isE2EESupported } from "livekit-client"; import { logger } from "matrix-js-sdk/src/logger"; import { MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; -import { JoinRule, RoomMember } from "matrix-js-sdk/src/matrix"; +import { JoinRule } from "matrix-js-sdk/src/matrix"; import { Heading, Link, Text } from "@vector-im/compound-web"; import { useTranslation } from "react-i18next"; @@ -111,18 +111,11 @@ export function GroupCallView({ client, ]); - const participatingMembers = useMemo(() => { - const members: RoomMember[] = []; - // Count each member only once, regardless of how many devices they use - const addedUserIds = new Set(); - for (const membership of memberships) { - if (!addedUserIds.has(membership.member.userId)) { - addedUserIds.add(membership.member.userId); - members.push(membership.member); - } - } - return members; - }, [memberships]); + // Count each member only once, regardless of how many devices they use + const participantCount = useMemo( + () => new Set(memberships.map((m) => m.member.userId)).size, + [memberships] + ); const deviceContext = useMediaDevices(); const latestDevices = useRef(); @@ -340,7 +333,7 @@ export function GroupCallView({ client={client} matrixInfo={matrixInfo} rtcSession={rtcSession} - participatingMembers={participatingMembers} + participantCount={participantCount} onLeave={onLeave} hideHeader={hideHeader} muteStates={muteStates} @@ -391,7 +384,7 @@ export function GroupCallView({ onEnter={() => enterRTCSession(rtcSession)} confineToRoom={confineToRoom} hideHeader={hideHeader} - participatingMembers={participatingMembers} + participantCount={participantCount} onShareClick={onShareClick} /> diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 313cc42f..4c0ceddb 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -120,7 +120,7 @@ export interface InCallViewProps { rtcSession: MatrixRTCSession; livekitRoom: Room; muteStates: MuteStates; - participatingMembers: RoomMember[]; + participantCount: number; onLeave: (error?: Error) => void; hideHeader: boolean; otelGroupCallMembership?: OTelGroupCallMembership; @@ -134,7 +134,7 @@ export function InCallView({ rtcSession, livekitRoom, muteStates, - participatingMembers, + participantCount, onLeave, hideHeader, otelGroupCallMembership, @@ -411,8 +411,7 @@ export function InCallView({ name={matrixInfo.roomName} avatarUrl={matrixInfo.roomAvatar} encrypted={matrixInfo.roomEncrypted} - participants={participatingMembers} - client={client} + participantCount={participantCount} /> diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx index fe8ccd9d..7703206b 100644 --- a/src/room/LobbyView.tsx +++ b/src/room/LobbyView.tsx @@ -16,7 +16,7 @@ limitations under the License. import { FC, useCallback, useState } from "react"; import { useTranslation } from "react-i18next"; -import { MatrixClient, RoomMember } from "matrix-js-sdk/src/matrix"; +import { MatrixClient } from "matrix-js-sdk/src/matrix"; import { Button, Link } from "@vector-im/compound-web"; import classNames from "classnames"; import { useHistory } from "react-router-dom"; @@ -44,7 +44,7 @@ interface Props { onEnter: () => void; confineToRoom: boolean; hideHeader: boolean; - participatingMembers: RoomMember[]; + participantCount: number; onShareClick: (() => void) | null; } @@ -55,7 +55,7 @@ export const LobbyView: FC = ({ onEnter, confineToRoom, hideHeader, - participatingMembers, + participantCount, onShareClick, }) => { const { t } = useTranslation(); @@ -104,8 +104,7 @@ export const LobbyView: FC = ({ name={matrixInfo.roomName} avatarUrl={matrixInfo.roomAvatar} encrypted={matrixInfo.roomEncrypted} - participants={participatingMembers} - client={client} + participantCount={participantCount} /> From 1dc4ef67f38472f092300d3f9994c761893179f1 Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 27 Sep 2023 18:26:16 -0400 Subject: [PATCH 13/17] Remove the group call inspector It's unused ever since we switched to LiveKit, and we intend to use other telemetry mechanisms going forward to fill this debugging use case, so it can be removed as discussed in today's team meeting. --- package.json | 3 - public/locales/en-GB/app.json | 4 - src/App.tsx | 45 +- src/SequenceDiagramViewerPage.tsx | 72 ---- src/room/GroupCallInspector.module.css | 41 -- src/room/GroupCallInspector.tsx | 542 ------------------------ src/room/InCallView.tsx | 9 - src/settings/SettingsModal.tsx | 21 - src/settings/submit-rageshake.ts | 46 +- src/settings/useSetting.ts | 2 - yarn.lock | 564 +------------------------ 11 files changed, 37 insertions(+), 1312 deletions(-) delete mode 100644 src/SequenceDiagramViewerPage.tsx delete mode 100644 src/room/GroupCallInspector.module.css delete mode 100644 src/room/GroupCallInspector.tsx diff --git a/package.json b/package.json index 9b6eb301..49765787 100644 --- a/package.json +++ b/package.json @@ -60,16 +60,13 @@ "lodash": "^4.17.21", "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#6385c9c0dab8fe67bd3a8992a4777f243fdd1b68", "matrix-widget-api": "^1.3.1", - "mermaid": "^9.0.0", "normalize.css": "^8.0.1", "pako": "^2.0.4", "postcss-preset-env": "^9.0.0", "posthog-js": "^1.29.0", - "re-resizable": "^6.9.0", "react": "18", "react-dom": "18", "react-i18next": "^13.0.0", - "react-json-view": "^1.21.3", "react-router-dom": "^5.2.0", "react-use-clipboard": "^1.0.7", "react-use-measure": "^2.1.1", diff --git a/public/locales/en-GB/app.json b/public/locales/en-GB/app.json index 6dd6e72b..38672e3b 100644 --- a/public/locales/en-GB/app.json +++ b/public/locales/en-GB/app.json @@ -32,12 +32,10 @@ "Copy": "Copy", "Copy and share this call link": "Copy and share this call link", "Create account": "Create account", - "Debug log": "Debug log", "Debug log request": "Debug log request", "Developer": "Developer", "Developer Settings": "Developer Settings", "Display name": "Display name", - "Download debug logs": "Download debug logs", "Element Call Home": "Element Call Home", "Element Call is temporarily not end-to-end encrypted while we test scalability.": "Element Call is temporarily not end-to-end encrypted while we test scalability.", "Enable end-to-end encryption (password protected calls)": "Enable end-to-end encryption (password protected calls)", @@ -54,7 +52,6 @@ "How did it go?": "How did it go?", "If you are experiencing issues or simply would like to provide some feedback, please send us a short description below.": "If you are experiencing issues or simply would like to provide some feedback, please send us a short description below.", "Include debug logs": "Include debug logs", - "Inspector": "Inspector", "Join call": "Join call", "Join call now": "Join call now", "Join existing call?": "Join existing call?", @@ -96,7 +93,6 @@ "Share screen": "Share screen", "Share this call": "Share this call", "Sharing screen": "Sharing screen", - "Show call inspector": "Show call inspector", "Show connection stats": "Show connection stats", "Sign in": "Sign in", "Sign out": "Sign out", diff --git a/src/App.tsx b/src/App.tsx index 00890f31..7bfd5a0c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -30,8 +30,6 @@ import { LoginPage } from "./auth/LoginPage"; import { RegisterPage } from "./auth/RegisterPage"; import { RoomPage } from "./room/RoomPage"; import { ClientProvider } from "./ClientContext"; -import { SequenceDiagramViewerPage } from "./SequenceDiagramViewerPage"; -import { InspectorContextProvider } from "./room/GroupCallInspector"; import { CrashView, LoadingView } from "./FullScreenView"; import { DisconnectedBanner } from "./DisconnectedBanner"; import { Initializer } from "./initializer"; @@ -83,30 +81,25 @@ export default function App({ history }: AppProps) { - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/src/SequenceDiagramViewerPage.tsx b/src/SequenceDiagramViewerPage.tsx deleted file mode 100644 index 9fb66f94..00000000 --- a/src/SequenceDiagramViewerPage.tsx +++ /dev/null @@ -1,72 +0,0 @@ -/* -Copyright 2022 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import { useCallback, useState } from "react"; -import { useTranslation } from "react-i18next"; - -import { - SequenceDiagramViewer, - SequenceDiagramMatrixEvent, -} from "./room/GroupCallInspector"; -import { FieldRow, InputField } from "./input/Input"; -import { usePageTitle } from "./usePageTitle"; - -interface DebugLog { - localUserId: string; - eventsByUserId: { [userId: string]: SequenceDiagramMatrixEvent[] }; - remoteUserIds: string[]; -} - -export function SequenceDiagramViewerPage() { - const { t } = useTranslation(); - usePageTitle(t("Inspector")); - - const [debugLog, setDebugLog] = useState(); - const [selectedUserId, setSelectedUserId] = useState(); - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - const onChangeDebugLog = useCallback((e) => { - if (e.target.files && e.target.files.length > 0) { - e.target.files[0].text().then((text: string) => { - setDebugLog(JSON.parse(text)); - }); - } - }, []); - - return ( -
- - - - {debugLog && selectedUserId && ( - - )} -
- ); -} diff --git a/src/room/GroupCallInspector.module.css b/src/room/GroupCallInspector.module.css deleted file mode 100644 index 95d1855f..00000000 --- a/src/room/GroupCallInspector.module.css +++ /dev/null @@ -1,41 +0,0 @@ -/* -Copyright 2022 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -.inspector { - background-color: var(--cpd-color-bg-subtle-secondary); -} - -.scrollContainer { - height: 100%; - overflow-y: auto; -} - -.sequenceDiagramViewer { - display: flex; - flex-direction: column; - align-items: center; - padding: 20px; -} - -.selectInput { - align-self: flex-start; -} - -.sequenceDiagramViewer :global(.messageText) { - font-size: var(--font-size-caption); - fill: var(--cpd-color-text-primary) !important; - stroke: var(--cpd-color-text-primary) !important; -} diff --git a/src/room/GroupCallInspector.tsx b/src/room/GroupCallInspector.tsx deleted file mode 100644 index d3df2c5b..00000000 --- a/src/room/GroupCallInspector.tsx +++ /dev/null @@ -1,542 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck - -/* -Copyright 2022 New Vector Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import * as Sentry from "@sentry/react"; -import { Resizable } from "re-resizable"; -import { - useEffect, - useState, - useReducer, - useRef, - createContext, - useContext, - Dispatch, - SetStateAction, - ReactNode, -} from "react"; -import ReactJson, { CollapsedFieldProps } from "react-json-view"; -import mermaid from "mermaid"; -import { Item } from "@react-stately/collections"; -import { MatrixEvent, IContent } from "matrix-js-sdk/src/models/event"; -import { - GroupCall, - GroupCallError, - GroupCallEvent, -} from "matrix-js-sdk/src/webrtc/groupCall"; -import { ClientEvent, MatrixClient } from "matrix-js-sdk/src/client"; -import { RoomStateEvent } from "matrix-js-sdk/src/models/room-state"; -import { - CallEvent, - CallState, - CallError, - MatrixCall, - VoipEvent, -} from "matrix-js-sdk/src/webrtc/call"; - -import styles from "./GroupCallInspector.module.css"; -import { SelectInput } from "../input/SelectInput"; -import { PosthogAnalytics } from "../analytics/PosthogAnalytics"; -import { OTelGroupCallMembership } from "../otel/OTelGroupCallMembership"; - -interface InspectorContextState { - eventsByUserId?: { [userId: string]: SequenceDiagramMatrixEvent[] }; - remoteUserIds?: string[]; - localUserId?: string; - localSessionId?: string; -} - -const defaultCollapsedFields = [ - "org.matrix.msc3401.call", - "org.matrix.msc3401.call.member", - "calls", - "callStats", - "hangupCalls", - "toDeviceEvents", - "sentVoipEvents", - "content", -]; - -function shouldCollapse({ name }: CollapsedFieldProps) { - return name ? defaultCollapsedFields.includes(name) : false; -} - -function getUserName(userId: string) { - const match = userId.match(/@([^:]+):/); - - return match && match.length > 0 - ? match[1].replace("-", " ").replace(/\W/g, "") - : userId.replace(/\W/g, ""); -} - -function formatContent(type: string, content: CallEventContent) { - if (type === "m.call.hangup") { - return `callId: ${content.call_id.slice(-4)} reason: ${ - content.reason - } senderSID: ${content.sender_session_id} destSID: ${ - content.dest_session_id - }`; - } - if (type.startsWith("m.call.")) { - return `callId: ${content.call_id?.slice(-4)} senderSID: ${ - content.sender_session_id - } destSID: ${content.dest_session_id}`; - } else if (type === "org.matrix.msc3401.call.member") { - const call = - content["m.calls"] && - content["m.calls"].length > 0 && - content["m.calls"][0]; - const device = - call && - call["m.devices"] && - call["m.devices"].length > 0 && - call["m.devices"][0]; - return `conf_id: ${call && call["m.call_id"].slice(-4)} sessionId: ${ - device && device.session_id - }`; - } else { - return ""; - } -} - -const dateFormatter = new Intl.DateTimeFormat([], { - hour: "2-digit", - minute: "2-digit", - second: "2-digit", - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore the linter does not know about this property of the DataTimeFormatOptions - fractionalSecondDigits: 3, -}); - -function formatTimestamp(timestamp: number | Date) { - return dateFormatter.format(timestamp); -} - -function formatType(event: SequenceDiagramMatrixEvent): string { - if (event.content.msgtype === "m.bad.encrypted") return "Undecryptable"; - return event.type; -} - -function lineForEvent(event: SequenceDiagramMatrixEvent): string { - return `${getUserName(event.from)} ${ - event.ignored ? "-x" : "->>" - } ${getUserName(event.to)}: ${formatTimestamp(event.timestamp)} ${formatType( - event - )} ${formatContent(event.type, event.content)}`; -} - -export const InspectorContext = - createContext< - [InspectorContextState, Dispatch>] - >(undefined); - -export function InspectorContextProvider({ - children, -}: { - children: ReactNode; -}) { - // We take the tuple of [currentState, setter] and stick - // it straight into the context for other things to call - // the setState method... this feels like a fairly severe - // contortion of the hooks API - is this really the best way - // to do this? - const context = useState({}); - return ( - - {children} - - ); -} - -type CallEventContent = { - ["m.calls"]: { - ["m.devices"]: { session_id: string; [x: string]: unknown }[]; - ["m.call_id"]: string; - }[]; -} & { - call_id: string; - reason: string; - sender_session_id: string; - dest_session_id: string; -} & IContent; - -export type SequenceDiagramMatrixEvent = { - to: string; - from: string; - timestamp: number; - type: string; - content: CallEventContent; - ignored: boolean; -}; - -interface SequenceDiagramViewerProps { - localUserId: string; - remoteUserIds: string[]; - selectedUserId: string; - onSelectUserId: (userId: string) => void; - events: SequenceDiagramMatrixEvent[]; -} - -export function SequenceDiagramViewer({ - localUserId, - remoteUserIds, - selectedUserId, - onSelectUserId, - events, -}: SequenceDiagramViewerProps) { - const mermaidElRef = useRef(null); - - useEffect(() => { - mermaid.initialize({ - startOnLoad: true, - theme: "dark", - sequence: { - showSequenceNumbers: true, - }, - }); - }, []); - - useEffect(() => { - const graphDefinition = `sequenceDiagram - participant ${getUserName(localUserId)} - participant Room - participant ${selectedUserId ? getUserName(selectedUserId) : "unknown"} - ${events ? events.map(lineForEvent).join("\n ") : ""} - `; - - mermaid.mermaidAPI.render("mermaid", graphDefinition, (svgCode: string) => { - if (!mermaidElRef.current) return; - mermaidElRef.current.innerHTML = svgCode; - }); - }, [events, localUserId, selectedUserId]); - - return ( -
-
- onSelectUserId(key.toString())} - > - {remoteUserIds.map((userId) => ( - {userId} - ))} - -
-
-
-
- ); -} - -function reducer( - state: InspectorContextState, - action: { - type?: CallEvent | ClientEvent | RoomStateEvent; - event?: MatrixEvent; - rawEvent?: VoipEvent; - callStateEvent?: MatrixEvent; - memberStateEvents?: MatrixEvent[]; - } -) { - switch (action.type) { - case RoomStateEvent.Events: { - const { event, callStateEvent, memberStateEvents } = action; - - let eventsByUserId = state.eventsByUserId; - let remoteUserIds = state.remoteUserIds; - - if (event) { - const fromId = event.getStateKey(); - - remoteUserIds = - fromId === state.localUserId || eventsByUserId[fromId] - ? state.remoteUserIds - : [...state.remoteUserIds, fromId]; - - eventsByUserId = { ...state.eventsByUserId }; - - if (event.getStateKey() === state.localUserId) { - for (const userId in eventsByUserId) { - eventsByUserId[userId] = [ - ...(eventsByUserId[userId] || []), - { - from: fromId, - to: "Room", - type: event.getType(), - content: event.getContent(), - timestamp: event.getTs() || Date.now(), - ignored: false, - }, - ]; - } - } else { - eventsByUserId[fromId] = [ - ...(eventsByUserId[fromId] || []), - { - from: fromId, - to: "Room", - type: event.getType(), - content: event.getContent(), - timestamp: event.getTs() || Date.now(), - ignored: false, - }, - ]; - } - } - - return { - ...state, - eventsByUserId, - remoteUserIds, - callStateEvent: callStateEvent.getContent(), - memberStateEvents: Object.fromEntries( - memberStateEvents.map((e) => [e.getStateKey(), e.getContent()]) - ), - }; - } - case ClientEvent.ReceivedVoipEvent: { - const event = action.event; - const eventsByUserId = { ...state.eventsByUserId }; - const fromId = event.getSender(); - const toId = state.localUserId; - const content = event.getContent(); - - const remoteUserIds = eventsByUserId[fromId] - ? state.remoteUserIds - : [...state.remoteUserIds, fromId]; - - eventsByUserId[fromId] = [ - ...(eventsByUserId[fromId] || []), - { - from: fromId, - to: toId, - type: event.getType(), - content, - timestamp: event.getTs() || Date.now(), - ignored: state.localSessionId !== content.dest_session_id, - }, - ]; - - return { ...state, eventsByUserId, remoteUserIds }; - } - case CallEvent.SendVoipEvent: { - const event = action.rawEvent; - const eventsByUserId = { ...state.eventsByUserId }; - const fromId = state.localUserId; - const toId = event.userId as string; - - const remoteUserIds = eventsByUserId[toId] - ? state.remoteUserIds - : [...state.remoteUserIds, toId]; - - eventsByUserId[toId] = [ - ...(eventsByUserId[toId] || []), - { - from: fromId, - to: toId, - type: event.eventType as string, - content: event.content as CallEventContent, - timestamp: Date.now(), - ignored: false, - }, - ]; - - return { ...state, eventsByUserId, remoteUserIds }; - } - default: - return state; - } -} - -function useGroupCallState( - client: MatrixClient, - groupCall: GroupCall, - otelGroupCallMembership: OTelGroupCallMembership -): InspectorContextState { - const [state, dispatch] = useReducer(reducer, { - localUserId: client.getUserId(), - localSessionId: client.getSessionId(), - eventsByUserId: {}, - remoteUserIds: [], - callStateEvent: null, - memberStateEvents: {}, - }); - - useEffect(() => { - function onUpdateRoomState(event?: MatrixEvent) { - const callStateEvent = groupCall.room.currentState.getStateEvents( - "org.matrix.msc3401.call", - groupCall.groupCallId - ); - - const memberStateEvents = groupCall.room.currentState.getStateEvents( - "org.matrix.msc3401.call.member" - ); - - dispatch({ - type: RoomStateEvent.Events, - event, - callStateEvent, - memberStateEvents, - }); - - otelGroupCallMembership?.onUpdateRoomState(event); - } - - function onReceivedVoipEvent(event: MatrixEvent) { - dispatch({ type: ClientEvent.ReceivedVoipEvent, event }); - - otelGroupCallMembership?.onReceivedVoipEvent(event); - } - - function onSendVoipEvent(event: VoipEvent, call: MatrixCall) { - dispatch({ type: CallEvent.SendVoipEvent, rawEvent: event }); - - otelGroupCallMembership?.onSendEvent(call, event); - } - - function onCallStateChange( - newState: CallState, - _: CallState, - call: MatrixCall - ) { - otelGroupCallMembership?.onCallStateChange(call, newState); - } - - function onCallError(error: CallError, call: MatrixCall) { - otelGroupCallMembership.onCallError(error, call); - } - - function onGroupCallError(error: GroupCallError) { - otelGroupCallMembership.onGroupCallError(error); - } - - function onUndecryptableToDevice(event: MatrixEvent) { - dispatch({ type: ClientEvent.ReceivedVoipEvent, event }); - - Sentry.captureMessage("Undecryptable to-device Event"); - // probably unnecessary if it's now captured via otel? - PosthogAnalytics.instance.eventUndecryptableToDevice.track( - groupCall.groupCallId - ); - - otelGroupCallMembership.onUndecryptableToDevice(event); - } - - client.on(RoomStateEvent.Events, onUpdateRoomState); - groupCall.on(CallEvent.SendVoipEvent, onSendVoipEvent); - groupCall.on(CallEvent.State, onCallStateChange); - groupCall.on(CallEvent.Error, onCallError); - groupCall.on(GroupCallEvent.Error, onGroupCallError); - //client.on("state", onCallsChanged); - //client.on("hangup", onCallHangup); - client.on(ClientEvent.ReceivedVoipEvent, onReceivedVoipEvent); - client.on(ClientEvent.UndecryptableToDeviceEvent, onUndecryptableToDevice); - - onUpdateRoomState(); - - return () => { - client.removeListener(RoomStateEvent.Events, onUpdateRoomState); - groupCall.removeListener(CallEvent.SendVoipEvent, onSendVoipEvent); - groupCall.removeListener(CallEvent.State, onCallStateChange); - groupCall.removeListener(CallEvent.Error, onCallError); - groupCall.removeListener(GroupCallEvent.Error, onGroupCallError); - //client.removeListener("state", onCallsChanged); - //client.removeListener("hangup", onCallHangup); - client.removeListener(ClientEvent.ReceivedVoipEvent, onReceivedVoipEvent); - client.removeListener( - ClientEvent.UndecryptableToDeviceEvent, - onUndecryptableToDevice - ); - }; - }, [client, groupCall, otelGroupCallMembership]); - - return state; -} - -interface GroupCallInspectorProps { - client: MatrixClient; - groupCall: GroupCall; - otelGroupCallMembership: OTelGroupCallMembership; - show: boolean; -} - -export function GroupCallInspector({ - client, - groupCall, - otelGroupCallMembership, - show, -}: GroupCallInspectorProps) { - const [currentTab, setCurrentTab] = useState("sequence-diagrams"); - const [selectedUserId, setSelectedUserId] = useState(); - const state = useGroupCallState(client, groupCall, otelGroupCallMembership); - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const [_, setState] = useContext(InspectorContext); - - useEffect(() => { - setState(state); - }, [setState, state]); - - if (!show) { - return null; - } - - return ( - -
- - -
- {currentTab === "sequence-diagrams" && - state.localUserId && - selectedUserId && - state.eventsByUserId && - state.remoteUserIds && ( - - )} - {currentTab === "inspector" && ( - - )} -
- ); -} diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 313cc42f..dc6b1fa4 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -169,7 +169,6 @@ export function InCallView({ screenSharingTracks.length > 0 ); - //const [showInspector] = useShowInspector(); const [showConnectionStats] = useShowConnectionStats(); const { hideScreensharing } = useUrlParams(); @@ -427,14 +426,6 @@ export function InCallView({ {renderContent()} {footer}
- {/*otelGroupCallMembership && ( - - )*/} {!noControls && } { const { t } = useTranslation(); - const [showInspector, setShowInspector] = useShowInspector(); const [optInAnalytics, setOptInAnalytics] = useOptInAnalytics(); const [developerSettingsTab, setDeveloperSettingsTab] = useDeveloperSettingsTab(); @@ -70,8 +66,6 @@ export const SettingsModal = (props: Props) => { useShowConnectionStats(); const [enableE2EE, setEnableE2EE] = useEnableE2EE(); - const downloadDebugLog = useDownloadDebugLog(); - // Generate a `SelectInput` with a list of devices for a given device kind. const generateDeviceSelection = (devices: MediaDevice, caption: string) => { if (devices.available.length == 0) return null; @@ -234,18 +228,6 @@ export const SettingsModal = (props: Props) => { })} - - ) => - setShowInspector(e.target.checked) - } - /> - { } /> - - - ); diff --git a/src/settings/submit-rageshake.ts b/src/settings/submit-rageshake.ts index d871ed79..83feeb00 100644 --- a/src/settings/submit-rageshake.ts +++ b/src/settings/submit-rageshake.ts @@ -14,13 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { - ComponentProps, - useCallback, - useContext, - useEffect, - useState, -} from "react"; +import { ComponentProps, useCallback, useEffect, useState } from "react"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore import pako from "pako"; @@ -30,7 +24,6 @@ import { logger } from "matrix-js-sdk/src/logger"; import { getLogsForReport } from "./rageshake"; import { useClient } from "../ClientContext"; -import { InspectorContext } from "../room/GroupCallInspector"; import { Config } from "../config/Config"; import { ElementCallOpenTelemetry } from "../otel/otel"; import { RageshakeRequestModal } from "../room/RageshakeRequestModal"; @@ -58,10 +51,6 @@ export function useSubmitRageshake(): { } { const { client } = useClient(); - // The value of the context is the whole tuple returned from setState, - // so we just want the current state. - const [inspectorState] = useContext(InspectorContext) ?? []; - const [{ sending, sent, error }, setState] = useState<{ sending: boolean; sent: boolean; @@ -270,16 +259,6 @@ export function useSubmitRageshake(): { gzip(ElementCallOpenTelemetry.instance.rageshakeProcessor!.dump()), "traces.json.gz" ); - - if (inspectorState) { - body.append( - "file", - new Blob([JSON.stringify(inspectorState)], { - type: "text/plain", - }), - "groupcall.txt" - ); - } } if (opts.rageshakeRequestId) { @@ -300,7 +279,7 @@ export function useSubmitRageshake(): { logger.error(error); } }, - [client, inspectorState, sending] + [client, sending] ); return { @@ -311,27 +290,6 @@ export function useSubmitRageshake(): { }; } -export function useDownloadDebugLog(): () => void { - const json = useContext(InspectorContext); - - const downloadDebugLog = useCallback(() => { - const blob = new Blob([JSON.stringify(json)], { type: "application/json" }); - const url = URL.createObjectURL(blob); - const el = document.createElement("a"); - el.href = url; - el.download = "groupcall.json"; - el.style.display = "none"; - document.body.appendChild(el); - el.click(); - setTimeout(() => { - URL.revokeObjectURL(url); - el.parentNode!.removeChild(el); - }, 0); - }, [json]); - - return downloadDebugLog; -} - export function useRageshakeRequest(): ( roomId: string, rageshakeRequestId: string diff --git a/src/settings/useSetting.ts b/src/settings/useSetting.ts index 1ab9781d..d9dac3bd 100644 --- a/src/settings/useSetting.ts +++ b/src/settings/useSetting.ts @@ -83,8 +83,6 @@ export const useSpatialAudio = (): DisableableSetting => { return [false, null]; }; -export const useShowInspector = () => useSetting("show-inspector", false); - // null = undecided export const useOptInAnalytics = (): DisableableSetting => { const settingVal = useSetting("opt-in-analytics", null); diff --git a/yarn.lock b/yarn.lock index 13a44384..f4c32cbe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1300,13 +1300,6 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.8.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" - integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/runtime@^7.13.10", "@babel/runtime@^7.20.6", "@babel/runtime@^7.22.5": version "7.23.1" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" @@ -1328,6 +1321,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.8.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" + integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.12.7": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" @@ -1415,11 +1415,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@braintree/sanitize-url@^6.0.0": - version "6.0.4" - resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz#923ca57e173c6b232bbbb07347b1be982f03e783" - integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A== - "@bufbuild/protobuf@^1.3.0": version "1.3.1" resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.3.1.tgz#c4de66bacbe7ac97fe054e68314aeba6f45177f9" @@ -5909,11 +5904,6 @@ arrify@^2.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - asn1.js@^5.2.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -6189,11 +6179,6 @@ base-x@^4.0.0: resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== -base16@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" - integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== - base64-js@^1.0.2: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -6993,11 +6978,6 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== -commander@7, commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -7013,6 +6993,11 @@ commander@^6.2.1: resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + commander@~11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" @@ -7173,20 +7158,6 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cose-base@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-1.0.3.tgz#650334b41b869578a543358b80cda7e0abe0a60a" - integrity sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg== - dependencies: - layout-base "^1.0.0" - -cose-base@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-2.2.0.tgz#1c395c35b6e10bb83f9769ca8b817d614add5c01" - integrity sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g== - dependencies: - layout-base "^2.0.0" - cosmiconfig@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" @@ -7295,13 +7266,6 @@ cross-fetch@3.1.6: dependencies: node-fetch "^2.6.11" -cross-fetch@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -7464,280 +7428,6 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.2.tgz#673b5f233bf34d8e602b949429f8171d9121bea3" integrity sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA== -cytoscape-cose-bilkent@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz#762fa121df9930ffeb51a495d87917c570ac209b" - integrity sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ== - dependencies: - cose-base "^1.0.0" - -cytoscape-fcose@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz#e4d6f6490df4fab58ae9cea9e5c3ab8d7472f471" - integrity sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ== - dependencies: - cose-base "^2.2.0" - -cytoscape@^3.23.0: - version "3.26.0" - resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.26.0.tgz#b4c6961445fd51e1fd3cca83c3ffe924d9a8abc9" - integrity sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w== - dependencies: - heap "^0.2.6" - lodash "^4.17.21" - -"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.0.tgz#15bf96cd9b7333e02eb8de8053d78962eafcff14" - integrity sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g== - dependencies: - internmap "1 - 2" - -d3-axis@3: - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-3.0.0.tgz#c42a4a13e8131d637b745fc2973824cfeaf93322" - integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw== - -d3-brush@3: - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-3.0.0.tgz#6f767c4ed8dcb79de7ede3e1c0f89e63ef64d31c" - integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ== - dependencies: - d3-dispatch "1 - 3" - d3-drag "2 - 3" - d3-interpolate "1 - 3" - d3-selection "3" - d3-transition "3" - -d3-chord@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-3.0.1.tgz#d156d61f485fce8327e6abf339cb41d8cbba6966" - integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g== - dependencies: - d3-path "1 - 3" - -"d3-color@1 - 3", d3-color@3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" - integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== - -d3-contour@4: - version "4.0.0" - resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-4.0.0.tgz#5a1337c6da0d528479acdb5db54bc81a0ff2ec6b" - integrity sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw== - dependencies: - d3-array "^3.2.0" - -d3-delaunay@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.2.tgz#7fd3717ad0eade2fc9939f4260acfb503f984e92" - integrity sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ== - dependencies: - delaunator "5" - -"d3-dispatch@1 - 3", d3-dispatch@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" - integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== - -"d3-drag@2 - 3", d3-drag@3: - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba" - integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== - dependencies: - d3-dispatch "1 - 3" - d3-selection "3" - -"d3-dsv@1 - 3", d3-dsv@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" - integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== - dependencies: - commander "7" - iconv-lite "0.6" - rw "1" - -"d3-ease@1 - 3", d3-ease@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" - integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== - -d3-fetch@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-3.0.1.tgz#83141bff9856a0edb5e38de89cdcfe63d0a60a22" - integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw== - dependencies: - d3-dsv "1 - 3" - -d3-force@3: - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4" - integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== - dependencies: - d3-dispatch "1 - 3" - d3-quadtree "1 - 3" - d3-timer "1 - 3" - -"d3-format@1 - 3", d3-format@3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" - integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== - -d3-geo@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.0.1.tgz#4f92362fd8685d93e3b1fae0fd97dc8980b1ed7e" - integrity sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA== - dependencies: - d3-array "2.5.0 - 3" - -d3-hierarchy@3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6" - integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== - -"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" - integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== - dependencies: - d3-color "1 - 3" - -"d3-path@1 - 3", d3-path@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.0.1.tgz#f09dec0aaffd770b7995f1a399152bf93052321e" - integrity sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w== - -d3-polygon@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-3.0.1.tgz#0b45d3dd1c48a29c8e057e6135693ec80bf16398" - integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg== - -"d3-quadtree@1 - 3", d3-quadtree@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f" - integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== - -d3-random@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4" - integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ== - -d3-scale-chromatic@3: - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#15b4ceb8ca2bb0dcb6d1a641ee03d59c3b62376a" - integrity sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g== - dependencies: - d3-color "1 - 3" - d3-interpolate "1 - 3" - -d3-scale@4: - version "4.0.2" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" - integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== - dependencies: - d3-array "2.10.0 - 3" - d3-format "1 - 3" - d3-interpolate "1.2.0 - 3" - d3-time "2.1.1 - 3" - d3-time-format "2 - 4" - -"d3-selection@2 - 3", d3-selection@3: - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31" - integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== - -d3-shape@3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.1.0.tgz#c8a495652d83ea6f524e482fca57aa3f8bc32556" - integrity sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ== - dependencies: - d3-path "1 - 3" - -"d3-time-format@2 - 4", d3-time-format@4: - version "4.1.0" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" - integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== - dependencies: - d3-time "1 - 3" - -"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3: - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.0.0.tgz#65972cb98ae2d4954ef5c932e8704061335d4975" - integrity sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ== - dependencies: - d3-array "2 - 3" - -"d3-timer@1 - 3", d3-timer@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" - integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== - -"d3-transition@2 - 3", d3-transition@3: - version "3.0.1" - resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f" - integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w== - dependencies: - d3-color "1 - 3" - d3-dispatch "1 - 3" - d3-ease "1 - 3" - d3-interpolate "1 - 3" - d3-timer "1 - 3" - -d3-zoom@3: - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3" - integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw== - dependencies: - d3-dispatch "1 - 3" - d3-drag "2 - 3" - d3-interpolate "1 - 3" - d3-selection "2 - 3" - d3-transition "2 - 3" - -d3@^7.4.0, d3@^7.8.2: - version "7.8.5" - resolved "https://registry.yarnpkg.com/d3/-/d3-7.8.5.tgz#fde4b760d4486cdb6f0cc8e2cbff318af844635c" - integrity sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA== - dependencies: - d3-array "3" - d3-axis "3" - d3-brush "3" - d3-chord "3" - d3-color "3" - d3-contour "4" - d3-delaunay "6" - d3-dispatch "3" - d3-drag "3" - d3-dsv "3" - d3-ease "3" - d3-fetch "3" - d3-force "3" - d3-format "3" - d3-geo "3" - d3-hierarchy "3" - d3-interpolate "3" - d3-path "3" - d3-polygon "3" - d3-quadtree "3" - d3-random "3" - d3-scale "4" - d3-scale-chromatic "3" - d3-selection "3" - d3-shape "3" - d3-time "3" - d3-time-format "4" - d3-timer "3" - d3-transition "3" - d3-zoom "3" - -dagre-d3-es@7.0.9: - version "7.0.9" - resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz#aca12fccd9d09955a4430029ba72ee6934542a8d" - integrity sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w== - dependencies: - d3 "^7.8.2" - lodash-es "^4.17.21" - damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" @@ -7752,11 +7442,6 @@ data-urls@^3.0.2: whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" -dayjs@^1.11.7: - version "1.11.9" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a" - integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA== - de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" @@ -7909,13 +7594,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -delaunator@5: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b" - integrity sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw== - dependencies: - robust-predicates "^3.0.0" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -8102,11 +7780,6 @@ domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -dompurify@2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.3.tgz#f4133af0e6a50297fc8874e2eaedc13a3c308c03" - integrity sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ== - domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" @@ -8168,11 +7841,6 @@ electron-to-chromium@^1.4.477, electron-to-chromium@^1.4.526: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.529.tgz#8c3377a05e5737f899770d14524dd8e2e4cb2351" integrity sha512-6uyPyXTo8lkv8SWAmjKFbG42U073TXlzD4R8rW3EzuznhFS2olCIAfjjQtV2dV2ar/vRF55KUd3zQYnCB0dd3A== -elkjs@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/elkjs/-/elkjs-0.8.2.tgz#c37763c5a3e24e042e318455e0147c912a7c248e" - integrity sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ== - elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -9112,31 +8780,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fbemitter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" - integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== - dependencies: - fbjs "^3.0.0" - -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== - -fbjs@^3.0.0, fbjs@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" - integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== - dependencies: - cross-fetch "^3.1.5" - fbjs-css-vars "^1.0.0" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.30" - fetch-retry@^5.0.2: version "5.0.6" resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.6.tgz#17d0bc90423405b7a88b74355bf364acd2a7fa56" @@ -9297,14 +8940,6 @@ flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: inherits "^2.0.3" readable-stream "^2.3.6" -flux@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.3.tgz#573b504a24982c4768fdfb59d8d2ea5637d72ee7" - integrity sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw== - dependencies: - fbemitter "^3.0.0" - fbjs "^3.0.1" - for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -9976,11 +9611,6 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -heap@^0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" - integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== - heimdalljs-logger@^0.1.10, heimdalljs-logger@^0.1.7: version "0.1.10" resolved "https://registry.yarnpkg.com/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz#90cad58aabb1590a3c7e640ddc6a4cd3a43faaf7" @@ -10217,7 +9847,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6, iconv-lite@0.6.3: +iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -10348,11 +9978,6 @@ internal-slot@^1.0.4, internal-slot@^1.0.5: has "^1.0.3" side-channel "^1.0.4" -"internmap@1 - 2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" - integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== - interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -11487,11 +11112,6 @@ keyv@^4.5.3: dependencies: json-buffer "3.0.1" -khroma@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/khroma/-/khroma-2.0.0.tgz#7577de98aed9f36c7a474c4d453d94c0d6c6588b" - integrity sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g== - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -11538,16 +11158,6 @@ language-tags@=1.0.5: dependencies: language-subtag-registry "~0.3.2" -layout-base@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-1.0.2.tgz#1291e296883c322a9dd4c5dd82063721b53e26e2" - integrity sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg== - -layout-base@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-2.0.1.tgz#d0337913586c90f9c2c075292069f5c2da5dd285" - integrity sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg== - lazy-universal-dotenv@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" @@ -11677,26 +11287,11 @@ locate-path@^7.1.0: dependencies: p-locate "^6.0.0" -lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash.curry@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" - integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.flow@^3.3.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" - integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -11989,28 +11584,6 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -mermaid@^9.0.0: - version "9.4.3" - resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-9.4.3.tgz#62cf210c246b74972ea98c19837519b6f03427f2" - integrity sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw== - dependencies: - "@braintree/sanitize-url" "^6.0.0" - cytoscape "^3.23.0" - cytoscape-cose-bilkent "^4.1.0" - cytoscape-fcose "^2.1.0" - d3 "^7.4.0" - dagre-d3-es "7.0.9" - dayjs "^1.11.7" - dompurify "2.4.3" - elkjs "^0.8.2" - khroma "^2.0.0" - lodash-es "^4.17.21" - non-layered-tidy-tree-layout "^2.0.2" - stylis "^4.1.2" - ts-dedent "^2.2.0" - uuid "^9.0.0" - web-worker "^1.2.0" - methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -12315,13 +11888,6 @@ node-dir@^0.1.10: dependencies: minimatch "^3.0.2" -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - node-fetch@^2.6.1, node-fetch@^2.6.11, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -12368,11 +11934,6 @@ node-releases@^2.0.13: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== -non-layered-tidy-tree-layout@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz#57d35d13c356643fc296a55fb11ac15e74da7804" - integrity sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw== - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -13505,13 +13066,6 @@ promise.prototype.finally@^3.1.0: define-properties "^1.2.0" es-abstract "^1.22.1" -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - prompts@^2.0.1, prompts@^2.4.0: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -13606,11 +13160,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -pure-color@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" - integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== - pure-rand@^6.0.0: version "6.0.3" resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.3.tgz#3c9e6b53c09e52ac3cedffc85ab7c1c7094b38cb" @@ -13707,21 +13256,6 @@ raw-loader@^4.0.2: loader-utils "^2.0.0" schema-utils "^3.0.0" -re-resizable@^6.9.0: - version "6.9.11" - resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.9.11.tgz#f356e27877f12d926d076ab9ad9ff0b95912b475" - integrity sha512-a3hiLWck/NkmyLvGWUuvkAmN1VhwAz4yOhS6FdMTaxCUVN9joIWkT11wsO68coG/iEYuwn+p/7qAmfQzRhiPLQ== - -react-base16-styling@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" - integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== - dependencies: - base16 "^1.0.0" - lodash.curry "^4.0.1" - lodash.flow "^3.3.0" - pure-color "^1.2.0" - react-docgen-typescript@^2.1.1: version "2.2.2" resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz#4611055e569edc071204aadb20e1c93e1ab1659c" @@ -13783,21 +13317,6 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-json-view@^1.21.3: - version "1.21.3" - resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" - integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== - dependencies: - flux "^4.0.1" - react-base16-styling "^0.6.0" - react-lifecycles-compat "^3.0.4" - react-textarea-autosize "^8.3.2" - -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - react-refresh@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" @@ -13869,15 +13388,6 @@ react-style-singleton@^2.2.1: invariant "^2.2.4" tslib "^2.0.0" -react-textarea-autosize@^8.3.2: - version "8.3.4" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524" - integrity sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ== - dependencies: - "@babel/runtime" "^7.10.2" - use-composed-ref "^1.3.0" - use-latest "^1.2.1" - react-transition-group@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" @@ -14345,11 +13855,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -robust-predicates@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a" - integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g== - rollup@^3.27.1: version "3.29.2" resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.2.tgz#cbc76cd5b03b9f9e93be991d23a1dff9c6d5b740" @@ -14381,11 +13886,6 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rw@1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" - integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== - rxjs@^7.5.2, rxjs@^7.8.0: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" @@ -14620,7 +14120,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== @@ -15147,11 +14647,6 @@ style-to-object@0.3.0, style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" -stylis@^4.1.2: - version "4.3.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.0.tgz#abe305a669fc3d8777e10eefcfc73ad861c5588c" - integrity sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ== - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -15540,7 +15035,7 @@ ts-debounce@^4.0.0: resolved "https://registry.yarnpkg.com/ts-debounce/-/ts-debounce-4.0.0.tgz#33440ef64fab53793c3d546a8ca6ae539ec15841" integrity sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg== -ts-dedent@^2.0.0, ts-dedent@^2.2.0: +ts-dedent@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== @@ -15671,11 +15166,6 @@ typescript@^5.0.4, typescript@^5.1.6: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== -ua-parser-js@^0.7.30: - version "0.7.31" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" - integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== - uglify-js@^3.1.4: version "3.17.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" @@ -15966,23 +15456,6 @@ use-callback-ref@^1.3.0: dependencies: tslib "^2.0.0" -use-composed-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" - integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== - -use-isomorphic-layout-effect@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== - -use-latest@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" - integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== - dependencies: - use-isomorphic-layout-effect "^1.1.1" - use-sidecar@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" @@ -16038,7 +15511,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@9, uuid@^9.0.0: +uuid@9: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== @@ -16284,11 +15757,6 @@ web-namespaces@^1.0.0: resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== -web-worker@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/web-worker/-/web-worker-1.2.0.tgz#5d85a04a7fbc1e7db58f66595d7a3ac7c9c180da" - integrity sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA== - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" From a7556f66b1b2ba53d0f8bef55dc3cc582b5b71a7 Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 27 Sep 2023 18:35:38 -0400 Subject: [PATCH 14/17] Update the colors of name tags This was changed in the designs so we don't have to hard-code colors for them anymore. --- src/video-grid/VideoTile.module.css | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/video-grid/VideoTile.module.css b/src/video-grid/VideoTile.module.css index 6b302775..3b0238d8 100644 --- a/src/video-grid/VideoTile.module.css +++ b/src/video-grid/VideoTile.module.css @@ -71,8 +71,7 @@ limitations under the License. padding: var(--cpd-space-1x); padding-block: var(--cpd-space-1x); color: var(--cpd-color-text-primary); - /* TODO: un-hardcode this color. It comes from the dark theme. */ - background-color: rgba(237, 244, 252, 0.79); + background-color: var(--cpd-color-bg-canvas-default); display: flex; align-items: center; border-radius: var(--cpd-radius-pill-effect); @@ -83,11 +82,6 @@ limitations under the License. box-shadow: var(--small-drop-shadow); } -:global(.cpd-theme-dark) .nameTag { - /* TODO: un-hardcode this color. It comes from the light theme. */ - background-color: rgba(2, 7, 13, 0.77); -} - .nameTag > svg { flex-shrink: 0; } From 2730cea181cd27ae9b5353a736af57b1dc75c472 Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 27 Sep 2023 19:06:10 -0400 Subject: [PATCH 15/17] Fix imports --- package.json | 2 +- src/E2EEBanner.tsx | 2 +- src/Header.tsx | 2 +- src/Modal.tsx | 2 +- src/UserMenu.tsx | 8 ++++---- src/auth/LoginPage.tsx | 2 +- src/auth/RegisterPage.tsx | 2 +- src/button/Button.tsx | 20 ++++++++++---------- src/button/CopyButton.tsx | 4 ++-- src/button/ShareButton.tsx | 2 +- src/button/VolumeIcon.tsx | 6 +++--- src/input/AvatarInputField.tsx | 2 +- src/input/Input.tsx | 2 +- src/input/SelectInput.tsx | 2 +- src/input/StarRatingInput.tsx | 4 ++-- src/room/AppSelectionModal.tsx | 2 +- src/room/EncryptionLock.tsx | 4 ++-- src/room/InCallView.tsx | 4 ++-- src/room/LayoutToggle.tsx | 4 ++-- src/settings/SettingsModal.tsx | 12 ++++++------ src/tabs/Tabs.stories.tsx | 6 +++--- src/video-grid/VideoTile.tsx | 4 ++-- test/mocks/svgr.ts | 4 ++-- 23 files changed, 51 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index 84ef350a..d763f529 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ ], "moduleNameMapper": { "\\.css$": "identity-obj-proxy", - "\\.svg$": "/test/mocks/svgr.ts", + "\\.svg\\?react$": "/test/mocks/svgr.ts", "^\\./IndexedDBWorker\\?worker$": "/test/mocks/workerMock.ts", "^\\./olm$": "/test/mocks/olmMock.ts" }, diff --git a/src/E2EEBanner.tsx b/src/E2EEBanner.tsx index 774f3582..c4223b2d 100644 --- a/src/E2EEBanner.tsx +++ b/src/E2EEBanner.tsx @@ -18,7 +18,7 @@ import { Trans } from "react-i18next"; import { Banner } from "./Banner"; import styles from "./E2EEBanner.module.css"; -import { ReactComponent as LockOffIcon } from "./icons/LockOff.svg"; +import LockOffIcon from "./icons/LockOff.svg?react"; import { useEnableE2EE } from "./settings/useSetting"; export const E2EEBanner = () => { diff --git a/src/Header.tsx b/src/Header.tsx index aea3da71..7c2937cf 100644 --- a/src/Header.tsx +++ b/src/Header.tsx @@ -22,7 +22,7 @@ import { MatrixClient, RoomMember } from "matrix-js-sdk/src/matrix"; import { Heading } from "@vector-im/compound-web"; import styles from "./Header.module.css"; -import { ReactComponent as Logo } from "./icons/Logo.svg"; +import Logo from "./icons/Logo.svg?react"; import { Avatar, Size } from "./Avatar"; import { Facepile } from "./Facepile"; import { EncryptionLock } from "./room/EncryptionLock"; diff --git a/src/Modal.tsx b/src/Modal.tsx index b644abe4..ac701402 100644 --- a/src/Modal.tsx +++ b/src/Modal.tsx @@ -27,7 +27,7 @@ import { } from "@radix-ui/react-dialog"; import { Drawer } from "vaul"; import { VisuallyHidden } from "@radix-ui/react-visually-hidden"; -import { ReactComponent as CloseIcon } from "@vector-im/compound-design-tokens/icons/close.svg"; +import CloseIcon from "@vector-im/compound-design-tokens/icons/close.svg?react"; import classNames from "classnames"; import { Heading } from "@vector-im/compound-web"; diff --git a/src/UserMenu.tsx b/src/UserMenu.tsx index 515e71f0..42f31951 100644 --- a/src/UserMenu.tsx +++ b/src/UserMenu.tsx @@ -24,10 +24,10 @@ import { PopoverMenuTrigger } from "./popover/PopoverMenu"; import { Menu } from "./Menu"; import { TooltipTrigger } from "./Tooltip"; import { Avatar, Size } from "./Avatar"; -import { ReactComponent as UserIcon } from "./icons/User.svg"; -import { ReactComponent as SettingsIcon } from "./icons/Settings.svg"; -import { ReactComponent as LoginIcon } from "./icons/Login.svg"; -import { ReactComponent as LogoutIcon } from "./icons/Logout.svg"; +import UserIcon from "./icons/User.svg?react"; +import SettingsIcon from "./icons/Settings.svg?react"; +import LoginIcon from "./icons/Login.svg?react"; +import LogoutIcon from "./icons/Logout.svg?react"; import { Body } from "./typography/Typography"; import styles from "./UserMenu.module.css"; diff --git a/src/auth/LoginPage.tsx b/src/auth/LoginPage.tsx index f17f24fa..6569f262 100644 --- a/src/auth/LoginPage.tsx +++ b/src/auth/LoginPage.tsx @@ -18,7 +18,7 @@ import { FC, FormEvent, useCallback, useRef, useState } from "react"; import { useHistory, useLocation, Link } from "react-router-dom"; import { Trans, useTranslation } from "react-i18next"; -import { ReactComponent as Logo } from "../icons/LogoLarge.svg"; +import Logo from "../icons/LogoLarge.svg?react"; import { useClient } from "../ClientContext"; import { FieldRow, InputField, ErrorMessage } from "../input/Input"; import { Button } from "../button"; diff --git a/src/auth/RegisterPage.tsx b/src/auth/RegisterPage.tsx index d0c22fc8..52c652f6 100644 --- a/src/auth/RegisterPage.tsx +++ b/src/auth/RegisterPage.tsx @@ -34,7 +34,7 @@ import { Button } from "../button"; import { useClientLegacy } from "../ClientContext"; import { useInteractiveRegistration } from "./useInteractiveRegistration"; import styles from "./LoginPage.module.css"; -import { ReactComponent as Logo } from "../icons/LogoLarge.svg"; +import Logo from "../icons/LogoLarge.svg?react"; import { LoadingView } from "../FullScreenView"; import { useRecaptcha } from "./useRecaptcha"; import { Caption, Link } from "../typography/Typography"; diff --git a/src/button/Button.tsx b/src/button/Button.tsx index 3d269dc2..efb9f295 100644 --- a/src/button/Button.tsx +++ b/src/button/Button.tsx @@ -20,18 +20,18 @@ import { useButton } from "@react-aria/button"; import { mergeProps, useObjectRef } from "@react-aria/utils"; import { useTranslation } from "react-i18next"; import { Tooltip } from "@vector-im/compound-web"; -import { ReactComponent as MicOnSolidIcon } from "@vector-im/compound-design-tokens/icons/mic-on-solid.svg"; -import { ReactComponent as MicOffSolidIcon } from "@vector-im/compound-design-tokens/icons/mic-off-solid.svg"; -import { ReactComponent as VideoCallIcon } from "@vector-im/compound-design-tokens/icons/video-call.svg"; -import { ReactComponent as VideoCallOffIcon } from "@vector-im/compound-design-tokens/icons/video-call-off.svg"; -import { ReactComponent as EndCallIcon } from "@vector-im/compound-design-tokens/icons/end-call.svg"; -import { ReactComponent as ShareScreenSolidIcon } from "@vector-im/compound-design-tokens/icons/share-screen-solid.svg"; -import { ReactComponent as SettingsSolidIcon } from "@vector-im/compound-design-tokens/icons/settings-solid.svg"; -import { ReactComponent as ChevronDownIcon } from "@vector-im/compound-design-tokens/icons/chevron-down.svg"; +import MicOnSolidIcon from "@vector-im/compound-design-tokens/icons/mic-on-solid.svg?react"; +import MicOffSolidIcon from "@vector-im/compound-design-tokens/icons/mic-off-solid.svg?react"; +import VideoCallIcon from "@vector-im/compound-design-tokens/icons/video-call.svg?react"; +import VideoCallOffIcon from "@vector-im/compound-design-tokens/icons/video-call-off.svg?react"; +import EndCallIcon from "@vector-im/compound-design-tokens/icons/end-call.svg?react"; +import ShareScreenSolidIcon from "@vector-im/compound-design-tokens/icons/share-screen-solid.svg?react"; +import SettingsSolidIcon from "@vector-im/compound-design-tokens/icons/settings-solid.svg?react"; +import ChevronDownIcon from "@vector-im/compound-design-tokens/icons/chevron-down.svg?react"; import styles from "./Button.module.css"; -import { ReactComponent as Fullscreen } from "../icons/Fullscreen.svg"; -import { ReactComponent as FullscreenExit } from "../icons/FullscreenExit.svg"; +import Fullscreen from "../icons/Fullscreen.svg?react"; +import FullscreenExit from "../icons/FullscreenExit.svg?react"; import { VolumeIcon } from "./VolumeIcon"; export type ButtonVariant = diff --git a/src/button/CopyButton.tsx b/src/button/CopyButton.tsx index 91c8e750..c2631c6e 100644 --- a/src/button/CopyButton.tsx +++ b/src/button/CopyButton.tsx @@ -17,8 +17,8 @@ limitations under the License. import { useTranslation } from "react-i18next"; import useClipboard from "react-use-clipboard"; -import { ReactComponent as CheckIcon } from "../icons/Check.svg"; -import { ReactComponent as CopyIcon } from "../icons/Copy.svg"; +import CheckIcon from "../icons/Check.svg?react"; +import CopyIcon from "../icons/Copy.svg?react"; import { Button, ButtonVariant } from "./Button"; interface Props { diff --git a/src/button/ShareButton.tsx b/src/button/ShareButton.tsx index 2f7f1334..02c0fc9c 100644 --- a/src/button/ShareButton.tsx +++ b/src/button/ShareButton.tsx @@ -17,7 +17,7 @@ limitations under the License. import { ComponentPropsWithoutRef, FC } from "react"; import { Button } from "@vector-im/compound-web"; import { useTranslation } from "react-i18next"; -import { ReactComponent as UserAddSolidIcon } from "@vector-im/compound-design-tokens/icons/user-add-solid.svg"; +import UserAddSolidIcon from "@vector-im/compound-design-tokens/icons/user-add-solid.svg?react"; export const ShareButton: FC< Omit, "children"> diff --git a/src/button/VolumeIcon.tsx b/src/button/VolumeIcon.tsx index 00aebb06..626dcece 100644 --- a/src/button/VolumeIcon.tsx +++ b/src/button/VolumeIcon.tsx @@ -17,9 +17,9 @@ limitations under the License. import { ComponentPropsWithoutRef, FC } from "react"; -import { ReactComponent as AudioMuted } from "../icons/AudioMuted.svg"; -import { ReactComponent as AudioLow } from "../icons/AudioLow.svg"; -import { ReactComponent as Audio } from "../icons/Audio.svg"; +import AudioMuted from "../icons/AudioMuted.svg?react"; +import AudioLow from "../icons/AudioLow.svg?react"; +import Audio from "../icons/Audio.svg?react"; interface Props extends ComponentPropsWithoutRef<"svg"> { /** diff --git a/src/input/AvatarInputField.tsx b/src/input/AvatarInputField.tsx index 8a069718..b8897c4a 100644 --- a/src/input/AvatarInputField.tsx +++ b/src/input/AvatarInputField.tsx @@ -28,7 +28,7 @@ import { useTranslation } from "react-i18next"; import { Avatar, Size } from "../Avatar"; import { Button } from "../button"; -import { ReactComponent as EditIcon } from "../icons/Edit.svg"; +import EditIcon from "../icons/Edit.svg?react"; import styles from "./AvatarInputField.module.css"; interface Props extends AllHTMLAttributes { diff --git a/src/input/Input.tsx b/src/input/Input.tsx index 387d02d0..b6826681 100644 --- a/src/input/Input.tsx +++ b/src/input/Input.tsx @@ -25,7 +25,7 @@ import { import classNames from "classnames"; import styles from "./Input.module.css"; -import { ReactComponent as CheckIcon } from "../icons/Check.svg"; +import CheckIcon from "../icons/Check.svg?react"; import { TranslatedError } from "../TranslatedError"; interface FieldRowProps { diff --git a/src/input/SelectInput.tsx b/src/input/SelectInput.tsx index ff6ea7c3..0feb346e 100644 --- a/src/input/SelectInput.tsx +++ b/src/input/SelectInput.tsx @@ -24,7 +24,7 @@ import { useTranslation } from "react-i18next"; import { Popover } from "../popover/Popover"; import { ListBox } from "../ListBox"; import styles from "./SelectInput.module.css"; -import { ReactComponent as ArrowDownIcon } from "../icons/ArrowDown.svg"; +import ArrowDownIcon from "../icons/ArrowDown.svg?react"; interface Props extends AriaSelectOptions { className?: string; diff --git a/src/input/StarRatingInput.tsx b/src/input/StarRatingInput.tsx index 3017a117..8667998e 100644 --- a/src/input/StarRatingInput.tsx +++ b/src/input/StarRatingInput.tsx @@ -17,8 +17,8 @@ import { useState } from "react"; import { useTranslation } from "react-i18next"; import styles from "./StarRatingInput.module.css"; -import { ReactComponent as StarSelected } from "../icons/StarSelected.svg"; -import { ReactComponent as StarUnselected } from "../icons/StarUnselected.svg"; +import StarSelected from "../icons/StarSelected.svg?react"; +import StarUnselected from "../icons/StarUnselected.svg?react"; interface Props { starCount: number; diff --git a/src/room/AppSelectionModal.tsx b/src/room/AppSelectionModal.tsx index a6216ee1..8220ffbc 100644 --- a/src/room/AppSelectionModal.tsx +++ b/src/room/AppSelectionModal.tsx @@ -17,7 +17,7 @@ limitations under the License. import { FC, MouseEvent, useCallback, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { Button, Text } from "@vector-im/compound-web"; -import { ReactComponent as PopOutIcon } from "@vector-im/compound-design-tokens/icons/pop-out.svg"; +import PopOutIcon from "@vector-im/compound-design-tokens/icons/pop-out.svg?react"; import { logger } from "matrix-js-sdk/src/logger"; import { Modal } from "../Modal"; diff --git a/src/room/EncryptionLock.tsx b/src/room/EncryptionLock.tsx index 6544a35b..a96edee2 100644 --- a/src/room/EncryptionLock.tsx +++ b/src/room/EncryptionLock.tsx @@ -17,8 +17,8 @@ limitations under the License. import { FC } from "react"; import { Tooltip } from "@vector-im/compound-web"; import { useTranslation } from "react-i18next"; -import { ReactComponent as LockIcon } from "@vector-im/compound-design-tokens/icons/lock.svg"; -import { ReactComponent as LockOffIcon } from "@vector-im/compound-design-tokens/icons/lock-off.svg"; +import LockIcon from "@vector-im/compound-design-tokens/icons/lock.svg?react"; +import LockOffIcon from "@vector-im/compound-design-tokens/icons/lock-off.svg?react"; import styles from "./EncryptionLock.module.css"; diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 313cc42f..bab0da04 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -33,8 +33,8 @@ import useMeasure from "react-use-measure"; import { logger } from "matrix-js-sdk/src/logger"; import { MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; -import { ReactComponent as LogoMark } from "../icons/LogoMark.svg"; -import { ReactComponent as LogoType } from "../icons/LogoType.svg"; +import LogoMark from "../icons/LogoMark.svg?react"; +import LogoType from "../icons/LogoType.svg?react"; import type { IWidgetApiRequest } from "matrix-widget-api"; import { HangupButton, diff --git a/src/room/LayoutToggle.tsx b/src/room/LayoutToggle.tsx index 5252204b..88d9aef7 100644 --- a/src/room/LayoutToggle.tsx +++ b/src/room/LayoutToggle.tsx @@ -17,8 +17,8 @@ limitations under the License. import { ChangeEvent, FC, useCallback, useId } from "react"; import { useTranslation } from "react-i18next"; import { Tooltip } from "@vector-im/compound-web"; -import { ReactComponent as SpotlightViewIcon } from "@vector-im/compound-design-tokens/icons/spotlight-view.svg"; -import { ReactComponent as GridViewIcon } from "@vector-im/compound-design-tokens/icons/grid-view.svg"; +import SpotlightViewIcon from "@vector-im/compound-design-tokens/icons/spotlight-view.svg?react"; +import GridViewIcon from "@vector-im/compound-design-tokens/icons/grid-view.svg?react"; import classNames from "classnames"; import styles from "./LayoutToggle.module.css"; diff --git a/src/settings/SettingsModal.tsx b/src/settings/SettingsModal.tsx index 5f01e4ce..3a6d9649 100644 --- a/src/settings/SettingsModal.tsx +++ b/src/settings/SettingsModal.tsx @@ -22,12 +22,12 @@ import { MatrixClient } from "matrix-js-sdk"; import { Modal } from "../Modal"; import styles from "./SettingsModal.module.css"; import { TabContainer, TabItem } from "../tabs/Tabs"; -import { ReactComponent as AudioIcon } from "../icons/Audio.svg"; -import { ReactComponent as VideoIcon } from "../icons/Video.svg"; -import { ReactComponent as DeveloperIcon } from "../icons/Developer.svg"; -import { ReactComponent as OverflowIcon } from "../icons/Overflow.svg"; -import { ReactComponent as UserIcon } from "../icons/User.svg"; -import { ReactComponent as FeedbackIcon } from "../icons/Feedback.svg"; +import AudioIcon from "../icons/Audio.svg?react"; +import VideoIcon from "../icons/Video.svg?react"; +import DeveloperIcon from "../icons/Developer.svg?react"; +import OverflowIcon from "../icons/Overflow.svg?react"; +import UserIcon from "../icons/User.svg?react"; +import FeedbackIcon from "../icons/Feedback.svg?react"; import { SelectInput } from "../input/SelectInput"; import { useShowInspector, diff --git a/src/tabs/Tabs.stories.tsx b/src/tabs/Tabs.stories.tsx index 87d76baf..9b921621 100644 --- a/src/tabs/Tabs.stories.tsx +++ b/src/tabs/Tabs.stories.tsx @@ -17,9 +17,9 @@ limitations under the License. import { FC } from "react"; import { TabContainer, TabItem } from "./Tabs"; -import { ReactComponent as AudioIcon } from "../icons/Audio.svg"; -import { ReactComponent as VideoIcon } from "../icons/Video.svg"; -import { ReactComponent as DeveloperIcon } from "../icons/Developer.svg"; +import AudioIcon from "../icons/Audio.svg?react"; +import VideoIcon from "../icons/Video.svg?react"; +import DeveloperIcon from "../icons/Developer.svg?react"; import { Body } from "../typography/Typography"; export default { diff --git a/src/video-grid/VideoTile.tsx b/src/video-grid/VideoTile.tsx index c8e9fedf..3ab2ee83 100644 --- a/src/video-grid/VideoTile.tsx +++ b/src/video-grid/VideoTile.tsx @@ -34,8 +34,8 @@ import { RoomMember, RoomMemberEvent, } from "matrix-js-sdk/src/models/room-member"; -import { ReactComponent as MicOnSolidIcon } from "@vector-im/compound-design-tokens/icons/mic-on-solid.svg"; -import { ReactComponent as MicOffSolidIcon } from "@vector-im/compound-design-tokens/icons/mic-off-solid.svg"; +import MicOnSolidIcon from "@vector-im/compound-design-tokens/icons/mic-on-solid.svg?react"; +import MicOffSolidIcon from "@vector-im/compound-design-tokens/icons/mic-off-solid.svg?react"; import { Text } from "@vector-im/compound-web"; import { Avatar } from "../Avatar"; diff --git a/test/mocks/svgr.ts b/test/mocks/svgr.ts index 18490609..cb6723c1 100644 --- a/test/mocks/svgr.ts +++ b/test/mocks/svgr.ts @@ -1,3 +1,3 @@ // Mock file for SVG imports -export default "SvgrURL"; -export const ReactComponent = "div"; +const ReactComponent = "svg"; +export default ReactComponent; From 8fe029d5fa449e0f91fef056ca93cef4533aed98 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 09:45:11 +0000 Subject: [PATCH 16/17] Update dependency posthog-js to v1.81.2 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index e391a591..87d36fc5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13398,9 +13398,9 @@ postcss@^8.4.27: source-map-js "^1.0.2" posthog-js@^1.29.0: - version "1.81.1" - resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.81.1.tgz#43f454bf57d0ff649c990e28660bb9a0a292267e" - integrity sha512-pQfG9ZGVn3R7Uh1cC/S02trZ6u4TOLs1NhZG3WiNrqMKDA8MJQjZ/PqdkLO0/BeozRBfIbON6pw3xfOIneIclg== + version "1.81.2" + resolved "https://registry.yarnpkg.com/posthog-js/-/posthog-js-1.81.2.tgz#0065b213c2d1ba1f9c167dc881e16656f5c70c07" + integrity sha512-3QLdn7koy7n+nj23HAr/KbVYwOmQcCn0K/5zlaWazef8t4s5L8JgJSMkw96pDRuAYfYcUCr9yWLQDpDakPiIHQ== dependencies: fflate "^0.4.1" From 44a4d7a1d0d742fc4e2d1835df442471adfbde53 Mon Sep 17 00:00:00 2001 From: Robin Date: Thu, 28 Sep 2023 09:44:00 -0400 Subject: [PATCH 17/17] Fix a broken SVG import https://github.com/vector-im/element-call/pull/1642 raced with https://github.com/vector-im/element-call/pull/1625, resulting in a broken import. --- src/Header.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Header.tsx b/src/Header.tsx index 2f98c83f..848319f2 100644 --- a/src/Header.tsx +++ b/src/Header.tsx @@ -19,7 +19,7 @@ import { FC, HTMLAttributes, ReactNode } from "react"; import { Link } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { Heading, Text } from "@vector-im/compound-web"; -import { ReactComponent as UserProfileIcon } from "@vector-im/compound-design-tokens/icons/user-profile.svg"; +import UserProfileIcon from "@vector-im/compound-design-tokens/icons/user-profile.svg?react"; import styles from "./Header.module.css"; import Logo from "./icons/Logo.svg?react";