diff --git a/index.html b/index.html index 0d8e9039e..be26f5c96 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ - + diff --git a/package-lock.json b/package-lock.json index 5b794b7ea..bffea9789 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@atlaskit/pragmatic-drag-and-drop": "1.8.1", "@atlaskit/pragmatic-drag-and-drop-auto-scroll": "2.1.5", "@atlaskit/pragmatic-drag-and-drop-hitbox": "1.1.0", - "@fontsource/inter": "4.5.14", + "@fontsource-variable/inter": "5.2.8", "@giphy/js-fetch-api": "5.8.0", "@giphy/js-types": "4.3.0", "@giphy/react-components": "1.6.0", @@ -30,7 +30,7 @@ "classnames": "2.5.1", "dateformat": "5.0.3", "dayjs": "1.11.20", - "domhandler": "5.0.3", + "domhandler": "6.0.1", "dompurify": "3.4.5", "emojibase": "15.3.1", "emojibase-data": "15.3.2", @@ -39,7 +39,7 @@ "folds": "2.6.2", "html-dom-parser": "7.1.0", "html-react-parser": "6.1.2", - "i18next": "23.12.2", + "i18next": "26.2.0", "i18next-browser-languagedetector": "8.2.1", "i18next-http-backend": "4.0.0", "immer": "11.1.8", @@ -60,7 +60,7 @@ "react-dom": "18.2.0", "react-error-boundary": "6.1.1", "react-google-recaptcha": "2.1.0", - "react-i18next": "15.0.0", + "react-i18next": "17.0.8", "react-range": "1.10.0", "react-router-dom": "6.30.3", "sanitize-html": "2.17.4", @@ -105,8 +105,8 @@ "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "4.6.0", "husky": "9.1.7", - "lint-staged": "16.3.2", - "prettier": "2.8.1", + "lint-staged": "17.0.5", + "prettier": "3.8.3", "semantic-release": "25.0.3", "typescript": "4.9.4", "vite": "6.4.2", @@ -2495,10 +2495,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@fontsource/inter": { - "version": "4.5.14", - "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-4.5.14.tgz", - "integrity": "sha512-JDC9AocdPLuGsASkvWw9hS5gtHE7K9dOwL98XLrk5yjYqxy4uVnScG58NUvFMJDVJRl/7c8Wnap6PEs+7Zvj1Q==" + "node_modules/@fontsource-variable/inter": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.2.8.tgz", + "integrity": "sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } }, "node_modules/@giphy/js-analytics": { "version": "1.8.1", @@ -7022,9 +7026,9 @@ } }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", - "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", + "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", "dev": true, "license": "MIT", "dependencies": { @@ -7112,13 +7116,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -7900,6 +7897,21 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/dom-serializer/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -7912,19 +7924,36 @@ ] }, "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-6.0.1.tgz", + "integrity": "sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg==", + "license": "BSD-2-Clause", "dependencies": { - "domelementtype": "^2.3.0" + "domelementtype": "^3.0.0" }, "engines": { - "node": ">= 4" + "node": ">=20.19.0" }, "funding": { + "type": "github", "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/domhandler/node_modules/domelementtype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-3.0.0.tgz", + "integrity": "sha512-umCQid3jKbDmVjx8jGaW7uUykm4DEUeyV21hPxNMo2nV955DhUThwqyOIDtreepP31hl84X7G5U9ZfsWvIB3Pg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + } + }, "node_modules/dompurify": { "version": "3.4.5", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.5.tgz", @@ -7947,6 +7976,21 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/domutils/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -10232,22 +10276,6 @@ "node": ">=20.19.0" } }, - "node_modules/html-dom-parser/node_modules/domhandler": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-6.0.1.tgz", - "integrity": "sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^3.0.0" - }, - "engines": { - "node": ">=20.19.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, "node_modules/html-dom-parser/node_modules/domutils": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-4.0.2.tgz", @@ -10339,37 +10367,6 @@ } } }, - "node_modules/html-react-parser/node_modules/domelementtype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-3.0.0.tgz", - "integrity": "sha512-umCQid3jKbDmVjx8jGaW7uUykm4DEUeyV21hPxNMo2nV955DhUThwqyOIDtreepP31hl84X7G5U9ZfsWvIB3Pg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause", - "engines": { - "node": ">=20.19.0" - } - }, - "node_modules/html-react-parser/node_modules/domhandler": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-6.0.1.tgz", - "integrity": "sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^3.0.0" - }, - "engines": { - "node": ">=20.19.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, "node_modules/htmlparser2": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", @@ -10389,6 +10386,21 @@ "entities": "^7.0.1" } }, + "node_modules/htmlparser2/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, "node_modules/htmlparser2/node_modules/entities": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", @@ -10465,25 +10477,31 @@ } }, "node_modules/i18next": { - "version": "23.12.2", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.12.2.tgz", - "integrity": "sha512-XIeh5V+bi8SJSWGL3jqbTEBW5oD6rbP5L+E7dVQh1MNTxxYef0x15rhJVcRb7oiuq4jLtgy2SD8eFlf6P2cmqg==", + "version": "26.2.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-26.2.0.tgz", + "integrity": "sha512-zwBHldHdTmwN7r6UNc7lC6GWNN+YYg3DrRSeHR5PRRBf5QnJZcYHrQc0uaU26qZeYxR7iFZD+Y315dPnKP47wA==", "funding": [ { "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" + "url": "https://www.locize.com/i18next" }, { "type": "individual", "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + }, + { + "type": "individual", + "url": "https://www.locize.com" } ], - "dependencies": { - "@babel/runtime": "^7.23.2" + "license": "MIT", + "peerDependencies": { + "typescript": "^5 || ^6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/i18next-browser-languagedetector": { @@ -11923,37 +11941,28 @@ "license": "MIT" }, "node_modules/lint-staged": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.3.2.tgz", - "integrity": "sha512-xKqhC2AeXLwiAHXguxBjuChoTTWFC6Pees0SHPwOpwlvI3BH7ZADFPddAdN3pgo3aiKgPUx/bxE78JfUnxQnlg==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.0.5.tgz", + "integrity": "sha512-d12yC+/e8RhBjZtaxZn71FyrgU/P5e+uAPifhCLwdosQZP/zamSdKRWDC30ocVIbzDKiFG1McHc/LUgB92GIPw==", "dev": true, "license": "MIT", "dependencies": { - "commander": "^14.0.3", - "listr2": "^9.0.5", - "micromatch": "^4.0.8", + "listr2": "^10.2.1", + "picomatch": "^4.0.4", "string-argv": "^0.3.2", - "tinyexec": "^1.0.2", - "yaml": "^2.8.2" + "tinyexec": "^1.1.2" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": ">=20.17" + "node": ">=22.22.1" }, "funding": { "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/commander": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", - "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" + }, + "optionalDependencies": { + "yaml": "^2.8.4" } }, "node_modules/lint-staged/node_modules/yaml": { @@ -11962,6 +11971,7 @@ "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "dev": true, "license": "ISC", + "optional": true, "bin": { "yaml": "bin.mjs" }, @@ -11973,21 +11983,20 @@ } }, "node_modules/listr2": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", - "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.1.tgz", + "integrity": "sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==", "dev": true, "license": "MIT", "dependencies": { - "cli-truncate": "^5.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", + "cli-truncate": "^5.2.0", + "eventemitter3": "^5.0.4", "log-update": "^6.1.0", "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" + "wrap-ansi": "^10.0.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.13.0" } }, "node_modules/listr2/node_modules/ansi-regex": { @@ -12016,26 +12025,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, "node_modules/listr2/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", + "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12058,18 +12059,18 @@ } }, "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", + "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -15754,15 +15755,16 @@ } }, "node_modules/prettier": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", - "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, + "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -16026,16 +16028,19 @@ } }, "node_modules/react-i18next": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.0.tgz", - "integrity": "sha512-2O3IgF4zivg57Q6p6i+ChDgJ371IDcEWbuWC6gvoh5NbkDMs0Q+O7RPr4v61+Se32E0V+LmtwePAeqWZW0bi6g==", + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-17.0.8.tgz", + "integrity": "sha512-0ooKbGLU8JXhe1zwpQUWIeXSgLPOfwJmgheWRIUpcoA0CpyabpGhayjdG+/eA5esC1AQ8h2jWpXjJfzQzeDOCw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.24.8", - "html-parse-stringify": "^3.0.1" + "@babel/runtime": "^7.29.2", + "html-parse-stringify": "^3.0.1", + "use-sync-external-store": "^1.6.0" }, "peerDependencies": { - "i18next": ">= 23.2.3", - "react": ">= 16.8.0" + "i18next": ">= 26.2.0", + "react": ">= 16.8.0", + "typescript": "^5 || ^6" }, "peerDependenciesMeta": { "react-dom": { @@ -16043,6 +16048,9 @@ }, "react-native": { "optional": true + }, + "typescript": { + "optional": true } } }, @@ -18137,9 +18145,9 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", - "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.2.tgz", + "integrity": "sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 85ea43584..88e93a08a 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@atlaskit/pragmatic-drag-and-drop": "1.8.1", "@atlaskit/pragmatic-drag-and-drop-auto-scroll": "2.1.5", "@atlaskit/pragmatic-drag-and-drop-hitbox": "1.1.0", - "@fontsource/inter": "4.5.14", + "@fontsource-variable/inter": "5.2.8", "@giphy/js-fetch-api": "5.8.0", "@giphy/js-types": "4.3.0", "@giphy/react-components": "1.6.0", @@ -83,7 +83,7 @@ "classnames": "2.5.1", "dateformat": "5.0.3", "dayjs": "1.11.20", - "domhandler": "5.0.3", + "domhandler": "6.0.1", "dompurify": "3.4.5", "emojibase": "15.3.1", "emojibase-data": "15.3.2", @@ -92,7 +92,7 @@ "folds": "2.6.2", "html-dom-parser": "7.1.0", "html-react-parser": "6.1.2", - "i18next": "23.12.2", + "i18next": "26.2.0", "i18next-browser-languagedetector": "8.2.1", "i18next-http-backend": "4.0.0", "immer": "11.1.8", @@ -113,7 +113,7 @@ "react-dom": "18.2.0", "react-error-boundary": "6.1.1", "react-google-recaptcha": "2.1.0", - "react-i18next": "15.0.0", + "react-i18next": "17.0.8", "react-range": "1.10.0", "react-router-dom": "6.30.3", "sanitize-html": "2.17.4", @@ -158,8 +158,8 @@ "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "4.6.0", "husky": "9.1.7", - "lint-staged": "16.3.2", - "prettier": "2.8.1", + "lint-staged": "17.0.5", + "prettier": "3.8.3", "semantic-release": "25.0.3", "typescript": "4.9.4", "vite": "6.4.2", diff --git a/src/app/components/AccountDataEditor.tsx b/src/app/components/AccountDataEditor.tsx index 93b570fde..b1192f5f9 100644 --- a/src/app/components/AccountDataEditor.tsx +++ b/src/app/components/AccountDataEditor.tsx @@ -54,7 +54,7 @@ function AccountDataEdit({ const { handleKeyDown, operations, getTarget } = useTextAreaCodeEditor( textAreaRef, - EDITOR_INTENT_SPACE_COUNT + EDITOR_INTENT_SPACE_COUNT, ); const [submitState, submit] = useAsyncCallback(submitChange); @@ -278,7 +278,7 @@ export function AccountDataEditor({ const contentJSONStr = useMemo( () => JSON.stringify(data.content, null, EDITOR_INTENT_SPACE_COUNT), - [data.content] + [data.content], ); return ( diff --git a/src/app/components/AuthFlowsLoader.tsx b/src/app/components/AuthFlowsLoader.tsx index 227551f7d..b9a7ed335 100644 --- a/src/app/components/AuthFlowsLoader.tsx +++ b/src/app/components/AuthFlowsLoader.tsx @@ -45,7 +45,7 @@ export function AuthFlowsLoader({ fallback, error, children }: AuthFlowsLoaderPr }; return authFlows; - }, [mx]) + }, [mx]), ); useEffect(() => { diff --git a/src/app/components/BackRouteHandler.tsx b/src/app/components/BackRouteHandler.tsx index 3b13e4872..c2c871d82 100644 --- a/src/app/components/BackRouteHandler.tsx +++ b/src/app/components/BackRouteHandler.tsx @@ -24,7 +24,7 @@ export function BackRouteHandler({ children }: BackRouteHandlerProps) { caseSensitive: true, end: false, }, - location.pathname + location.pathname, ) ) { navigate(getHomePath()); @@ -37,7 +37,7 @@ export function BackRouteHandler({ children }: BackRouteHandlerProps) { caseSensitive: true, end: false, }, - location.pathname + location.pathname, ) ) { navigate(getDirectPath()); @@ -49,7 +49,7 @@ export function BackRouteHandler({ children }: BackRouteHandlerProps) { caseSensitive: true, end: false, }, - location.pathname + location.pathname, ); const encodedSpaceIdOrAlias = spaceMatch?.params.spaceIdOrAlias; const decodedSpaceIdOrAlias = @@ -66,7 +66,7 @@ export function BackRouteHandler({ children }: BackRouteHandlerProps) { caseSensitive: true, end: false, }, - location.pathname + location.pathname, ) ) { navigate(getExplorePath()); @@ -79,7 +79,7 @@ export function BackRouteHandler({ children }: BackRouteHandlerProps) { caseSensitive: true, end: false, }, - location.pathname + location.pathname, ) ) { navigate(getInboxPath()); diff --git a/src/app/components/BackupRestore.tsx b/src/app/components/BackupRestore.tsx index 9f7dab4d5..0ecf66002 100644 --- a/src/app/components/BackupRestore.tsx +++ b/src/app/components/BackupRestore.tsx @@ -157,7 +157,7 @@ export function BackupRestoreTile({ crypto }: BackupRestoreTileProps) { setRestoreProgress(progress); }, }); - }, [crypto, setRestoreProgress]) + }, [crypto, setRestoreProgress]), ); const handleRestore = () => { diff --git a/src/app/components/CallEmbedProvider.tsx b/src/app/components/CallEmbedProvider.tsx index 36864324e..22fdc1ea3 100644 --- a/src/app/components/CallEmbedProvider.tsx +++ b/src/app/components/CallEmbedProvider.tsx @@ -104,7 +104,7 @@ function IncomingCall({ dm, info, onIgnore, onAnswer, onReject }: IncomingCallPr const roomName = useRoomName(room); const roomAvatar = useRoomAvatar(room, dm); const avatarUrl = roomAvatar - ? mxcUrlToHttp(mx, roomAvatar, useAuthentication, 96, 96, 'crop') ?? undefined + ? (mxcUrlToHttp(mx, roomAvatar, useAuthentication, 96, 96, 'crop') ?? undefined) : undefined; const session = useCallSession(room); @@ -115,7 +115,7 @@ function IncomingCall({ dm, info, onIgnore, onAnswer, onReject }: IncomingCallPr if (members.length === 0) { onIgnore(); } - }, [room, session, onIgnore]) + }, [room, session, onIgnore]), ); const playSound = useCallback(() => { @@ -312,7 +312,7 @@ function IncomingCallListener({ callEmbed, joined }: IncomingCallListenerProps) const hasCallPermission = permissions.stateEvent( StateEvent.GroupCallMemberPrefix, - mx.getSafeUserId() + mx.getSafeUserId(), ); if (!hasCallPermission) return; @@ -331,7 +331,7 @@ function IncomingCallListener({ callEmbed, joined }: IncomingCallListenerProps) setCallInfo(info); }, - [mx] + [mx], ); useEffect(() => { @@ -355,7 +355,7 @@ function IncomingCallListener({ callEmbed, joined }: IncomingCallListenerProps) }); setCallInfo(undefined); }, - [mx] + [mx], ); const handleAnswer = useCallback( @@ -364,7 +364,7 @@ function IncomingCallListener({ callEmbed, joined }: IncomingCallListenerProps) setCallInfo(undefined); navigateRoom(room.roomId); }, - [startCall, navigateRoom] + [startCall, navigateRoom], ); if (callInfo && callEmbed?.roomId === callInfo.room.roomId) { @@ -390,7 +390,7 @@ function CallUtils({ embed }: { embed: CallEmbed }) { embed, useCallback(() => { setCallEmbed(undefined); - }, [setCallEmbed]) + }, [setCallEmbed]), ); return null; @@ -427,7 +427,7 @@ export function CallEmbedProvider({ children }: CallEmbedProviderProps) { () => () => { activeDragCleanupRef.current?.(); }, - [] + [], ); // Track previous pipMode to only reset position when first entering pip (not on callVisible changes) @@ -510,11 +510,11 @@ export function CallEmbedProvider({ children }: CallEmbedProviderProps) { if (pipDragRef.current.dragged) { el.style.left = `${Math.max( 0, - Math.min(window.innerWidth - el.offsetWidth, pipDragRef.current.origLeft + dx) + Math.min(window.innerWidth - el.offsetWidth, pipDragRef.current.origLeft + dx), )}px`; el.style.top = `${Math.max( 0, - Math.min(window.innerHeight - el.offsetHeight, pipDragRef.current.origTop + dy) + Math.min(window.innerHeight - el.offsetHeight, pipDragRef.current.origTop + dy), )}px`; el.style.right = 'auto'; el.style.bottom = 'auto'; @@ -563,11 +563,11 @@ export function CallEmbedProvider({ children }: CallEmbedProviderProps) { if (pipDragRef.current.dragged) { el.style.left = `${Math.max( 0, - Math.min(window.innerWidth - el.offsetWidth, pipDragRef.current.origLeft + dx) + Math.min(window.innerWidth - el.offsetWidth, pipDragRef.current.origLeft + dx), )}px`; el.style.top = `${Math.max( 0, - Math.min(window.innerHeight - el.offsetHeight, pipDragRef.current.origTop + dy) + Math.min(window.innerHeight - el.offsetHeight, pipDragRef.current.origTop + dy), )}px`; el.style.right = 'auto'; el.style.bottom = 'auto'; diff --git a/src/app/components/ConfirmPasswordMatch.tsx b/src/app/components/ConfirmPasswordMatch.tsx index bb50eb60f..f4a660039 100644 --- a/src/app/components/ConfirmPasswordMatch.tsx +++ b/src/app/components/ConfirmPasswordMatch.tsx @@ -7,7 +7,7 @@ type ConfirmPasswordMatchProps = { match: boolean, doMatch: () => void, passRef: RefObject, - confPassRef: RefObject + confPassRef: RefObject, ) => ReactNode; }; export function ConfirmPasswordMatch({ initialValue, children }: ConfirmPasswordMatchProps) { @@ -28,7 +28,7 @@ export function ConfirmPasswordMatch({ initialValue, children }: ConfirmPassword { wait: 500, immediate: false, - } + }, ); return children(match, doMatch, passRef, confPassRef); diff --git a/src/app/components/DeviceVerificationSetup.tsx b/src/app/components/DeviceVerificationSetup.tsx index d92f14bb2..04990ccc2 100644 --- a/src/app/components/DeviceVerificationSetup.tsx +++ b/src/app/components/DeviceVerificationSetup.tsx @@ -27,7 +27,7 @@ import { useAlive } from '../hooks/useAlive'; import { UseStateProvider } from './UseStateProvider'; type UIACallback = ( - authDict: AuthDict | null + authDict: AuthDict | null, ) => Promise<[IAuthData, undefined] | [undefined, T]>; type PerformAction = (authDict: AuthDict | null) => Promise; @@ -42,7 +42,7 @@ function makeUIAAction( authData: IAuthData, performAction: PerformAction, resolve: (data: T) => void, - reject: (error?: any) => void + reject: (error?: any) => void, ): UIAAction { const action: UIAAction = { authData, @@ -91,7 +91,7 @@ function SetupVerification({ onComplete }: SetupVerificationProps) { setNextAuthData(authData); } }, - [uiaAction, alive] + [uiaAction, alive], ); const resetUIA = useCallback(() => { @@ -118,7 +118,7 @@ function SetupVerification({ onComplete }: SetupVerificationProps) { (err) => { resetUIA(); reject(err); - } + }, ); if (alive()) { setUIAAction(action); @@ -130,7 +130,7 @@ function SetupVerification({ onComplete }: SetupVerificationProps) { reject(error); }); }), - [alive, resetUIA] + [alive, resetUIA], ); const [setupState, setup] = useAsyncCallback( @@ -159,8 +159,8 @@ function SetupVerification({ onComplete }: SetupVerificationProps) { onComplete(recoveryKeyData.encodedPrivateKey); }, - [mx, onComplete, authUploadDeviceSigningKeys] - ) + [mx, onComplete, authUploadDeviceSigningKeys], + ), ); const loading = setupState.status === AsyncStatus.Loading; @@ -316,7 +316,7 @@ export const DeviceVerificationSetup = forwardRef ); - } + }, ); type DeviceVerificationResetProps = { onCancel: () => void; @@ -375,5 +375,5 @@ export const DeviceVerificationReset = forwardRef ); - } + }, ); diff --git a/src/app/components/GifPicker.tsx b/src/app/components/GifPicker.tsx index cb96c7423..913442433 100644 --- a/src/app/components/GifPicker.tsx +++ b/src/app/components/GifPicker.tsx @@ -27,7 +27,7 @@ function GifPickerInner({ onSelect, requestClose, lotusTerminal }: GifPickerInne onSelect(url, width, height); requestClose(); }, - [onSelect, requestClose] + [onSelect, requestClose], ); return ( diff --git a/src/app/components/ImageOverlay.tsx b/src/app/components/ImageOverlay.tsx index ea690924c..271c36b34 100644 --- a/src/app/components/ImageOverlay.tsx +++ b/src/app/components/ImageOverlay.tsx @@ -41,5 +41,5 @@ export const ImageOverlay = as<'div', ImageOverlayProps>( - ) + ), ); diff --git a/src/app/components/JoinRulesSwitcher.tsx b/src/app/components/JoinRulesSwitcher.tsx index bbc0a65dc..134134ad3 100644 --- a/src/app/components/JoinRulesSwitcher.tsx +++ b/src/app/components/JoinRulesSwitcher.tsx @@ -33,7 +33,7 @@ export const useJoinRuleIcons = (roomType?: string): JoinRuleIcons => [JoinRule.Public]: getRoomIconSrc(Icons, roomType, JoinRule.Public), [JoinRule.Private]: getRoomIconSrc(Icons, roomType, JoinRule.Private), }), - [roomType] + [roomType], ); type JoinRuleLabels = Record; @@ -47,7 +47,7 @@ export const useRoomJoinRuleLabel = (): JoinRuleLabels => [JoinRule.Public]: 'Public', [JoinRule.Private]: 'Invite Only', }), - [] + [], ); type JoinRulesSwitcherProps = { @@ -79,7 +79,7 @@ export function JoinRulesSwitcher({ setCords(undefined); onChange(selectedRule); }, - [onChange] + [onChange], ); return ( diff --git a/src/app/components/LogoutDialog.tsx b/src/app/components/LogoutDialog.tsx index a948ca401..3b474704e 100644 --- a/src/app/components/LogoutDialog.tsx +++ b/src/app/components/LogoutDialog.tsx @@ -21,13 +21,13 @@ export const LogoutDialog = forwardRef( const verificationStatus = useDeviceVerificationStatus( mx.getCrypto(), mx.getSafeUserId(), - mx.getDeviceId() ?? undefined + mx.getDeviceId() ?? undefined, ); const [logoutState, logout] = useAsyncCallback( useCallback(async () => { await logoutClient(mx); - }, [mx]) + }, [mx]), ); const ongoingLogout = logoutState.status === AsyncStatus.Loading; @@ -87,5 +87,5 @@ export const LogoutDialog = forwardRef( ); - } + }, ); diff --git a/src/app/components/ManualVerification.tsx b/src/app/components/ManualVerification.tsx index f7cde92b4..e451aa450 100644 --- a/src/app/components/ManualVerification.tsx +++ b/src/app/components/ManualVerification.tsx @@ -126,7 +126,7 @@ export function ManualVerificationTile({ const [method, setMethod] = useState( hasPassphrase ? ManualVerificationMethod.RecoveryPassphrase - : ManualVerificationMethod.RecoveryKey + : ManualVerificationMethod.RecoveryKey, ); const verifyAndRestoreBackup = useCallback( @@ -143,11 +143,11 @@ export function ManualVerificationTile({ await crypto.loadSessionBackupPrivateKeyFromSecretStorage(); }, - [mx, secretStorageKeyId] + [mx, secretStorageKeyId], ); const [verifyState, handleDecodedRecoveryKey] = useAsyncCallback( - verifyAndRestoreBackup + verifyAndRestoreBackup, ); const verifying = verifyState.status === AsyncStatus.Loading; diff --git a/src/app/components/Pdf-viewer/PdfViewer.tsx b/src/app/components/Pdf-viewer/PdfViewer.tsx index a94328951..3946f74f5 100644 --- a/src/app/components/Pdf-viewer/PdfViewer.tsx +++ b/src/app/components/Pdf-viewer/PdfViewer.tsx @@ -43,7 +43,7 @@ export const PdfViewer = as<'div', PdfViewerProps>( const [pdfJSState, loadPdfJS] = usePdfJSLoader(); const [docState, loadPdfDocument] = usePdfDocumentLoader( pdfJSState.status === AsyncStatus.Success ? pdfJSState.data : undefined, - src + src, ); const isLoading = pdfJSState.status === AsyncStatus.Loading || docState.status === AsyncStatus.Loading; @@ -257,5 +257,5 @@ export const PdfViewer = as<'div', PdfViewerProps>( )} ); - } + }, ); diff --git a/src/app/components/RoomNotificationSwitcher.tsx b/src/app/components/RoomNotificationSwitcher.tsx index 7ce915661..eb3da7a84 100644 --- a/src/app/components/RoomNotificationSwitcher.tsx +++ b/src/app/components/RoomNotificationSwitcher.tsx @@ -17,7 +17,7 @@ const useRoomNotificationModes = (): RoomNotificationMode[] => RoomNotificationMode.SpecialMessages, RoomNotificationMode.Mute, ], - [] + [], ); const useRoomNotificationModeStr = (): Record => @@ -28,7 +28,7 @@ const useRoomNotificationModeStr = (): Record => [RoomNotificationMode.SpecialMessages]: 'Mention & Keywords', [RoomNotificationMode.Mute]: 'Mute', }), - [] + [], ); type NotificationModeSwitcherProps = { @@ -37,7 +37,7 @@ type NotificationModeSwitcherProps = { children: ( handleOpen: MouseEventHandler, opened: boolean, - changing: boolean + changing: boolean, ) => ReactNode; }; export function RoomNotificationModeSwitcher({ diff --git a/src/app/components/SecretStorage.tsx b/src/app/components/SecretStorage.tsx index c128f3958..9257a9dd5 100644 --- a/src/app/components/SecretStorage.tsx +++ b/src/app/components/SecretStorage.tsx @@ -36,7 +36,7 @@ export function SecretStorageRecoveryPassphrase({ passphrase, salt, iterations, - bits + bits, ); const match = await mx.secretStorage.checkKey(decodedRecoveryKey, keyContent as any); @@ -47,8 +47,8 @@ export function SecretStorageRecoveryPassphrase({ return decodedRecoveryKey; }, - [mx, keyContent] - ) + [mx, keyContent], + ), ); const drivingKey = driveKeyState.status === AsyncStatus.Loading; @@ -140,8 +140,8 @@ export function SecretStorageRecoveryKey({ return decodedRecoveryKey; }, - [mx, keyContent] - ) + [mx, keyContent], + ), ); const drivingKey = driveKeyState.status === AsyncStatus.Loading; diff --git a/src/app/components/ServerConfigsLoader.tsx b/src/app/components/ServerConfigsLoader.tsx index 3c8ce8eb7..0c79dc9eb 100644 --- a/src/app/components/ServerConfigsLoader.tsx +++ b/src/app/components/ServerConfigsLoader.tsx @@ -42,7 +42,7 @@ export function ServerConfigsLoader({ children }: ServerConfigsLoaderProps) { mediaConfig, authMetadata: validatedAuthMetadata, }; - }, [mx]) + }, [mx]), ); const configs: ServerConfigs = diff --git a/src/app/components/SpaceChildDirectsProvider.tsx b/src/app/components/SpaceChildDirectsProvider.tsx index 203363e1e..486985bea 100644 --- a/src/app/components/SpaceChildDirectsProvider.tsx +++ b/src/app/components/SpaceChildDirectsProvider.tsx @@ -21,7 +21,7 @@ export function SpaceChildDirectsProvider({ const childDirects = useSpaceChildren( allRoomsAtom, spaceId, - useChildDirectScopeFactory(mx, mDirects, roomToParents) + useChildDirectScopeFactory(mx, mDirects, roomToParents), ); return children(childDirects); diff --git a/src/app/components/SpaceChildRoomsProvider.tsx b/src/app/components/SpaceChildRoomsProvider.tsx index 65ed03bec..e1933410e 100644 --- a/src/app/components/SpaceChildRoomsProvider.tsx +++ b/src/app/components/SpaceChildRoomsProvider.tsx @@ -21,7 +21,7 @@ export function SpaceChildRoomsProvider({ const childRooms = useSpaceChildren( allRoomsAtom, spaceId, - useChildRoomScopeFactory(mx, mDirects, roomToParents) + useChildRoomScopeFactory(mx, mDirects, roomToParents), ); return children(childRooms); diff --git a/src/app/components/SpecVersionsLoader.tsx b/src/app/components/SpecVersionsLoader.tsx index 5ce41d2f5..f44724906 100644 --- a/src/app/components/SpecVersionsLoader.tsx +++ b/src/app/components/SpecVersionsLoader.tsx @@ -15,7 +15,7 @@ export function SpecVersionsLoader({ children, }: SpecVersionsLoaderProps) { const [state, load] = useAsyncCallback( - useCallback(() => specVersions(fetch, baseUrl), [baseUrl]) + useCallback(() => specVersions(fetch, baseUrl), [baseUrl]), ); const [ignoreError, setIgnoreError] = useState(false); @@ -38,6 +38,6 @@ export function SpecVersionsLoader({ ? state.data : { versions: [], - } + }, ); } diff --git a/src/app/components/create-room/AdditionalCreatorInput.tsx b/src/app/components/create-room/AdditionalCreatorInput.tsx index 84b922310..82b316cc4 100644 --- a/src/app/components/create-room/AdditionalCreatorInput.tsx +++ b/src/app/components/create-room/AdditionalCreatorInput.tsx @@ -35,7 +35,7 @@ import { highlightText, makeHighlightRegex } from '../../plugins/react-custom-ht export const useAdditionalCreators = (defaultCreators?: string[]) => { const mx = useMatrixClient(); const [additionalCreators, setAdditionalCreators] = useState( - () => defaultCreators?.filter((id) => id !== mx.getSafeUserId()) ?? [] + () => defaultCreators?.filter((id) => id !== mx.getSafeUserId()) ?? [], ); const addAdditionalCreator = (userId: string) => { @@ -90,12 +90,12 @@ export function AdditionalCreatorInput({ const [validUserId, setValidUserId] = useState(); const filteredUsers = useMemo( () => directUsers.filter((userId) => !additionalCreators.includes(userId)), - [directUsers, additionalCreators] + [directUsers, additionalCreators], ); const [result, search, resetSearch] = useAsyncSearch( filteredUsers, getUserIdString, - SEARCH_OPTIONS + SEARCH_OPTIONS, ); const queryHighlighRegex = result?.query ? makeHighlightRegex([result.query]) : undefined; diff --git a/src/app/components/create-room/CreateRoomAliasInput.tsx b/src/app/components/create-room/CreateRoomAliasInput.tsx index e84658c01..37eb2050f 100644 --- a/src/app/components/create-room/CreateRoomAliasInput.tsx +++ b/src/app/components/create-room/CreateRoomAliasInput.tsx @@ -42,9 +42,9 @@ export function CreateRoomAliasInput({ disabled }: { disabled?: boolean }) { throw e; } }, - [mx] + [mx], ), - setAliasAvail + setAliasAvail, ); const aliasAvailable: boolean | undefined = aliasAvail.status === AsyncStatus.Success ? aliasAvail.data : undefined; diff --git a/src/app/components/create-room/utils.ts b/src/app/components/create-room/utils.ts index f3e699aa3..394b0226c 100644 --- a/src/app/components/create-room/utils.ts +++ b/src/app/components/create-room/utils.ts @@ -15,7 +15,7 @@ import { CreateRoomAccess } from './types'; export const createRoomCreationContent = ( type: RoomType | undefined, allowFederation: boolean, - additionalCreators: string[] | undefined + additionalCreators: string[] | undefined, ): object => { const content: Record = {}; if (typeof type === 'string') { @@ -34,7 +34,7 @@ export const createRoomCreationContent = ( export const createRoomJoinRulesState = ( access: CreateRoomAccess, parent: Room | undefined, - knock: boolean + knock: boolean, ) => { let content: RoomJoinRulesEventContent = { join_rule: knock ? JoinRule.Knock : JoinRule.Invite, @@ -136,7 +136,7 @@ export const createRoom = async (mx: MatrixClient, data: CreateRoomData): Promis creation_content: createRoomCreationContent( data.type, data.allowFederation, - data.additionalCreators + data.additionalCreators, ), power_level_content_override: data.type === RoomType.Call ? createVoiceRoomPowerLevelsOverride() : undefined, @@ -158,7 +158,7 @@ export const createRoom = async (mx: MatrixClient, data: CreateRoomData): Promis suggested: false, via: [getMxIdServer(mx.getUserId() ?? '') ?? ''], }, - result.room_id + result.room_id, ); } diff --git a/src/app/components/cutout-card/CutoutCard.tsx b/src/app/components/cutout-card/CutoutCard.tsx index bf5ddf8b6..32e25f135 100644 --- a/src/app/components/cutout-card/CutoutCard.tsx +++ b/src/app/components/cutout-card/CutoutCard.tsx @@ -11,5 +11,5 @@ export const CutoutCard = as<'div', { variant?: TContainerColor }>( {...props} ref={ref} /> - ) + ), ); diff --git a/src/app/components/editor/Editor.tsx b/src/app/components/editor/Editor.tsx index bf623edad..bbc2889e7 100644 --- a/src/app/components/editor/Editor.tsx +++ b/src/app/components/editor/Editor.tsx @@ -36,7 +36,7 @@ const withInline = (editor: Editor): Editor => { editor.isInline = (element) => [BlockType.Mention, BlockType.Emoticon, BlockType.Link, BlockType.Command].includes( - element.type + element.type, ) || isInline(element); return editor; @@ -88,11 +88,11 @@ export const CustomEditor = forwardRef( onChange, onPaste, }, - ref + ref, ) => { const renderElement = useCallback( (props: RenderElementProps) => , - [] + [], ); const renderLeaf = useCallback((props: RenderLeafProps) => , []); @@ -103,7 +103,7 @@ export const CustomEditor = forwardRef( const shortcutToggled = toggleKeyboardShortcut(editor, evt); if (shortcutToggled) evt.preventDefault(); }, - [editor, onKeyDown] + [editor, onKeyDown], ); const renderPlaceholder = useCallback( @@ -115,7 +115,7 @@ export const CustomEditor = forwardRef( ), - [] + [], ); return ( @@ -160,5 +160,5 @@ export const CustomEditor = forwardRef( ); - } + }, ); diff --git a/src/app/components/editor/autocomplete/EmoticonAutocomplete.tsx b/src/app/components/editor/autocomplete/EmoticonAutocomplete.tsx index d358ff7df..e3874cb6f 100644 --- a/src/app/components/editor/autocomplete/EmoticonAutocomplete.tsx +++ b/src/app/components/editor/autocomplete/EmoticonAutocomplete.tsx @@ -51,14 +51,14 @@ export function EmoticonAutocomplete({ const list: Array = []; return list.concat( imagePacks.flatMap((pack) => pack.getImages(ImageUsage.Emoticon)), - emojis + emojis, ); }, [imagePacks]); const [result, search, resetSearch] = useAsyncSearch( searchList, getEmoticonSearchStr, - SEARCH_OPTIONS + SEARCH_OPTIONS, ); const autoCompleteEmoticon = result ? result.items.slice(0, 20) : recentEmoji; diff --git a/src/app/components/editor/autocomplete/RoomMentionAutocomplete.tsx b/src/app/components/editor/autocomplete/RoomMentionAutocomplete.tsx index 377cecab1..2c59d129b 100644 --- a/src/app/components/editor/autocomplete/RoomMentionAutocomplete.tsx +++ b/src/app/components/editor/autocomplete/RoomMentionAutocomplete.tsx @@ -91,9 +91,9 @@ export function RoomMentionAutocomplete({ if (alias) return [r.name, alias]; return r.name; }, - [mx] + [mx], ), - SEARCH_OPTIONS + SEARCH_OPTIONS, ); const autoCompleteRoomIds = result ? result.items.slice(0, 20) : allRooms.slice(0, 20); @@ -111,7 +111,7 @@ export function RoomMentionAutocomplete({ name.startsWith('#') ? name : `#${name}`, roomId === roomAliasOrId || mx.getRoom(roomId)?.getCanonicalAlias() === roomAliasOrId, undefined, - viaServers + viaServers, ); replaceWithElement(editor, query.range, mentionEl); moveCursor(editor, true); diff --git a/src/app/components/editor/autocomplete/UserMentionAutocomplete.tsx b/src/app/components/editor/autocomplete/UserMentionAutocomplete.tsx index 7a8012eb4..0c2ffc79e 100644 --- a/src/app/components/editor/autocomplete/UserMentionAutocomplete.tsx +++ b/src/app/components/editor/autocomplete/UserMentionAutocomplete.tsx @@ -98,7 +98,7 @@ export function UserMentionAutocomplete({ const [result, search, resetSearch] = useAsyncSearch(members, getRoomMemberStr, SEARCH_OPTIONS); const autoCompleteMembers = (result ? result.items.slice(0, 20) : members.slice(0, 20)).filter( - withAllowedMembership + withAllowedMembership, ); useEffect(() => { @@ -110,7 +110,7 @@ export function UserMentionAutocomplete({ const mentionEl = createMentionElement( uId, name.startsWith('@') ? name : `@${name}`, - mx.getUserId() === uId || roomAliasOrId === uId + mx.getUserId() === uId || roomAliasOrId === uId, ); replaceWithElement(editor, query.range, mentionEl); moveCursor(editor, true); diff --git a/src/app/components/editor/autocomplete/autocompleteQuery.ts b/src/app/components/editor/autocomplete/autocompleteQuery.ts index 1baa44a13..72a0b484a 100644 --- a/src/app/components/editor/autocomplete/autocompleteQuery.ts +++ b/src/app/components/editor/autocomplete/autocompleteQuery.ts @@ -22,7 +22,7 @@ export type AutocompleteQuery = { export const getAutocompletePrefix = ( editor: Editor, queryRange: BaseRange, - validPrefixes: readonly TPrefix[] + validPrefixes: readonly TPrefix[], ): TPrefix | undefined => { const world = Editor.string(editor, queryRange); return validPrefixes.find((p) => world.startsWith(p)); @@ -31,13 +31,13 @@ export const getAutocompletePrefix = ( export const getAutocompleteQueryText = ( editor: Editor, queryRange: BaseRange, - prefix: string + prefix: string, ): string => Editor.string(editor, queryRange).slice(prefix.length); export const getAutocompleteQuery = ( editor: Editor, queryRange: BaseRange, - validPrefixes: readonly TPrefix[] + validPrefixes: readonly TPrefix[], ): AutocompleteQuery | undefined => { const prefix = getAutocompletePrefix(editor, queryRange, validPrefixes); if (!prefix) return undefined; diff --git a/src/app/components/editor/input.ts b/src/app/components/editor/input.ts index 56da58930..70f1a1368 100644 --- a/src/app/components/editor/input.ts +++ b/src/app/components/editor/input.ts @@ -77,7 +77,7 @@ const getInlineNodeMarkType = (node: Element): MarkType | undefined => { const getInlineMarkElement = ( markType: MarkType, node: Element, - getChild: (child: ChildNode) => InlineElement[] + getChild: (child: ChildNode) => InlineElement[], ): InlineElement[] => { const children = node.children.flatMap(getChild); const mdSequence = node.attribs['data-md']; @@ -115,7 +115,7 @@ const getInlineNonMarkElement = (node: Element): MentionElement | EmoticonElemen getText(node) || roomMention.roomIdOrAlias, false, undefined, - roomMention.viaServers + roomMention.viaServers, ); } const eventMention = parseMatrixToRoomEvent(href); @@ -125,7 +125,7 @@ const getInlineNonMarkElement = (node: Element): MentionElement | EmoticonElemen getText(node) || eventMention.roomIdOrAlias, false, eventMention.eventId, - eventMention.viaServers + eventMention.viaServers, ); } } @@ -167,7 +167,7 @@ const getInlineElement = (node: ChildNode, processText: ProcessTextCallback): In const parseBlockquoteNode = ( node: Element, - processText: ProcessTextCallback + processText: ProcessTextCallback, ): BlockQuoteElement[] | ParagraphElement[] => { const quoteLines: Array = []; let lineHolder: InlineElement[] = []; @@ -259,7 +259,7 @@ const parseCodeBlockNode = (node: Element): CodeBlockElement[] | ParagraphElemen const parseListMarkdown = ( node: Element, processText: ProcessTextCallback, - depth = 0 + depth = 0, ): ParagraphElement[] => { const md = isTag(node) && node.name === 'ul' ? '*' : '-'; const prefix = node.attribs['data-md'] ?? md; @@ -269,7 +269,7 @@ const parseListMarkdown = ( const digit = digitOrChar ? parseInt(digitOrChar, 10) : undefined; const lines: ParagraphElement[] = []; - let lineNo = digit === undefined || Number.isNaN(digit) ? digitOrChar ?? 1 : digit; + let lineNo = digit === undefined || Number.isNaN(digit) ? (digitOrChar ?? 1) : digit; const pushLine = (line: InlineElement[]) => { lines.push({ type: BlockType.Paragraph, @@ -353,7 +353,7 @@ const parseListLines = (children: ChildNode[], processText: ProcessTextCallback) }; const parseListNode = ( node: Element, - processText: ProcessTextCallback + processText: ProcessTextCallback, ): OrderedListElement[] | UnorderedListElement[] | ParagraphElement[] => { if (node.attribs['data-md'] !== undefined) { return parseListMarkdown(node, processText); @@ -385,7 +385,7 @@ const parseListNode = ( }; const parseHeadingNode = ( node: Element, - processText: ProcessTextCallback + processText: ProcessTextCallback, ): HeadingElement | ParagraphElement => { const children = getInlineElement(node, processText); @@ -411,7 +411,7 @@ const parseHeadingNode = ( export const domToEditorInput = ( domNodes: ChildNode[], processText: ProcessTextCallback, - processLineStartText: ProcessTextCallback + processLineStartText: ProcessTextCallback, ): Descendant[] => { const children: Descendant[] = []; diff --git a/src/app/components/editor/output.ts b/src/app/components/editor/output.ts index 2942a8319..2fca27307 100644 --- a/src/app/components/editor/output.ts +++ b/src/app/components/editor/output.ts @@ -74,7 +74,7 @@ const elementToCustomHtml = (node: CustomElement, children: string): string => { case BlockType.Emoticon: return node.key.startsWith('mxc://') ? `${sanitizeText(
-            node.shortcode
+            node.shortcode,
           )}` : sanitizeText(node.key); case BlockType.Link: @@ -92,12 +92,12 @@ const ignoreHTMLParseInlineMD = (text: string): string => text, HTML_TAG_REG_G, (match) => match[0], - (txt) => parseInlineMD(txt) + (txt) => parseInlineMD(txt), ).join(''); export const toMatrixCustomHTML = ( node: Descendant | Descendant[], - opts: OutputOptions + opts: OutputOptions, ): string => { let markdownLines = ''; const parseNode = (n: Descendant, index: number, targetNodes: Descendant[]) => { diff --git a/src/app/components/editor/utils.ts b/src/app/components/editor/utils.ts index 90c549c84..512d50f6b 100644 --- a/src/app/components/editor/utils.ts +++ b/src/app/components/editor/utils.ts @@ -160,7 +160,7 @@ export const createMentionElement = ( name: string, highlight: boolean, eventId?: string, - viaServers?: string[] + viaServers?: string[], ): MentionElement => ({ type: BlockType.Mention, id, @@ -180,7 +180,7 @@ export const createEmoticonElement = (key: string, shortcode: string): EmoticonE export const createLinkElement = ( href: string, - children: string | FormattedText[] + children: string | FormattedText[], ): LinkElement => ({ type: BlockType.Link, href, @@ -213,7 +213,7 @@ interface PointUntilCharOptions { export const getPointUntilChar = ( editor: Editor, cursorPoint: BasePoint, - options: PointUntilCharOptions + options: PointUntilCharOptions, ): BasePoint | undefined => { let targetPoint: BasePoint | undefined; let prevPoint: BasePoint | undefined; diff --git a/src/app/components/emoji-board/EmojiBoard.tsx b/src/app/components/emoji-board/EmojiBoard.tsx index 466e2c108..960ca3095 100644 --- a/src/app/components/emoji-board/EmojiBoard.tsx +++ b/src/app/components/emoji-board/EmojiBoard.tsx @@ -71,7 +71,7 @@ type StickerGroupItem = { const useGroups = ( tab: EmojiBoardTab, - imagePacks: ImagePack[] + imagePacks: ImagePack[], ): [EmojiGroupItem[], StickerGroupItem[]] => { const mx = useMatrixClient(); @@ -309,7 +309,7 @@ function EmojiGroupHolder({ shortcode: emojiInfo.shortcode, }); }, - [setPreviewData] + [setPreviewData], ); const throttleEmojiHover = useThrottle(handleEmojiPreview, { @@ -385,7 +385,7 @@ export function EmojiBoard({ const previewAtom = useMemo( () => createPreviewDataAtom(emojiTab ? DefaultEmojiPreview : undefined), - [emojiTab] + [emojiTab], ); const activeGroupIdAtom = useMemo(() => atom(undefined), []); const setActiveGroupId = useSetAtom(activeGroupIdAtom); @@ -404,7 +404,7 @@ export function EmojiBoard({ const [result, search, resetSearch] = useAsyncSearch( searchList, getEmoticonSearchStr, - SEARCH_OPTIONS + SEARCH_OPTIONS, ); const searchedItems = result?.items.slice(0, 100); @@ -416,9 +416,9 @@ export function EmojiBoard({ if (term) search(term); else resetSearch(); }, - [search, resetSearch] + [search, resetSearch], ), - { wait: 200 } + { wait: 200 }, ); const contentScrollRef = useRef(null); diff --git a/src/app/components/emoji-board/useEmojiGroupIcons.ts b/src/app/components/emoji-board/useEmojiGroupIcons.ts index bef737410..faa1ecc27 100644 --- a/src/app/components/emoji-board/useEmojiGroupIcons.ts +++ b/src/app/components/emoji-board/useEmojiGroupIcons.ts @@ -17,5 +17,5 @@ export const useEmojiGroupIcons = (): IEmojiGroupIcons => [EmojiGroupId.Symbol]: Icons.Peace, [EmojiGroupId.Flag]: Icons.Flag, }), - [] + [], ); diff --git a/src/app/components/emoji-board/useEmojiGroupLabels.ts b/src/app/components/emoji-board/useEmojiGroupLabels.ts index a1e5cf2c0..3b224891d 100644 --- a/src/app/components/emoji-board/useEmojiGroupLabels.ts +++ b/src/app/components/emoji-board/useEmojiGroupLabels.ts @@ -15,5 +15,5 @@ export const useEmojiGroupLabels = (): IEmojiGroupLabels => [EmojiGroupId.Symbol]: 'Symbols', [EmojiGroupId.Flag]: 'Flags', }), - [] + [], ); diff --git a/src/app/components/event-readers/EventReaders.tsx b/src/app/components/event-readers/EventReaders.tsx index 37ef858c5..1d61191be 100644 --- a/src/app/components/event-readers/EventReaders.tsx +++ b/src/app/components/event-readers/EventReaders.tsx @@ -104,7 +104,8 @@ export const EventReaders = as<'div', EventReadersProps>( const name = getName(readerId); const avatarMxcUrl = room.getMember(readerId)?.getMxcAvatarUrl(); const avatarUrl = avatarMxcUrl - ? mxcUrlToHttp(mx, avatarMxcUrl, useAuthentication, 100, 100, 'crop') ?? undefined + ? (mxcUrlToHttp(mx, avatarMxcUrl, useAuthentication, 100, 100, 'crop') ?? + undefined) : undefined; const receiptTs = room.getReadReceiptForUserId(readerId)?.data.ts; @@ -119,7 +120,7 @@ export const EventReaders = as<'div', EventReadersProps>( space?.roomId, readerId, getMouseEventCords(event.nativeEvent), - 'Bottom' + 'Bottom', ); }} before={ @@ -162,5 +163,5 @@ export const EventReaders = as<'div', EventReadersProps>( ); - } + }, ); diff --git a/src/app/components/image-editor/ImageEditor.tsx b/src/app/components/image-editor/ImageEditor.tsx index 53e4662a4..08ad469f8 100644 --- a/src/app/components/image-editor/ImageEditor.tsx +++ b/src/app/components/image-editor/ImageEditor.tsx @@ -47,5 +47,5 @@ export const ImageEditor = as<'div', ImageEditorProps>( ); - } + }, ); diff --git a/src/app/components/image-pack-view/ImagePackContent.tsx b/src/app/components/image-pack-view/ImagePackContent.tsx index a696ebe8b..b26b22194 100644 --- a/src/app/components/image-pack-view/ImagePackContent.tsx +++ b/src/app/components/image-pack-view/ImagePackContent.tsx @@ -57,7 +57,7 @@ export const ImagePackContent = as<'div', ImagePackContentProps>( Array.from(savedImages).find(([, img]) => img.shortcode === shortcode) !== undefined; return hasInSaved; }, - [imagePack, savedImages, uploadedImages] + [imagePack, savedImages, uploadedImages], ); const pickFiles = useFilePicker( @@ -74,9 +74,9 @@ export const ImagePackContent = as<'div', ImagePackContentProps>( setFiles((f) => [...f, ...uniqueFiles]); }, - [hasImageWithShortcode] + [hasImageWithShortcode], ), - true + true, ); const handleMetaSave = useCallback( @@ -88,10 +88,10 @@ export const ImagePackContent = as<'div', ImagePackContentProps>( ...imagePack.meta.content, ...m?.content, ...editedMeta.content, - }) + }), ); }, - [imagePack.meta] + [imagePack.meta], ); const handleMetaCancel = () => setMetaEditing(false); @@ -104,10 +104,10 @@ export const ImagePackContent = as<'div', ImagePackContentProps>( ...imagePack.meta.content, ...m?.content, usage: usg, - }) + }), ); }, - [imagePack.meta] + [imagePack.meta], ); const handleUploadRemove = useCallback((file: TUploadContent) => { @@ -123,13 +123,13 @@ export const ImagePackContent = as<'div', ImagePackContentProps>( }; const image = PackImageReader.fromPackImage( getFileNameWithoutExt(data.file.name), - packImage + packImage, ); if (!image) return; handleUploadRemove(data.file); setUploadedImages((imgs) => [image, ...imgs]); }, - [handleUploadRemove] + [handleUploadRemove], ); const handleImageEdit = (shortcode: string) => { @@ -164,7 +164,7 @@ export const ImagePackContent = as<'div', ImagePackContentProps>( ? new PackImageReader( suffixRename(image.shortcode, hasImageWithShortcode), image.url, - image.content + image.content, ) : image; @@ -199,7 +199,7 @@ export const ImagePackContent = as<'div', ImagePackContentProps>( images.forEach((img) => pushImage(img)); return onUpdate?.(pack); - }, [imagePack, images, savedMeta, uploadedImages, savedImages, deleteImages, onUpdate]) + }, [imagePack, images, savedMeta, uploadedImages, savedImages, deleteImages, onUpdate]), ); useEffect(() => { @@ -384,5 +384,5 @@ export const ImagePackContent = as<'div', ImagePackContentProps>( )} ); - } + }, ); diff --git a/src/app/components/image-pack-view/PackMeta.tsx b/src/app/components/image-pack-view/PackMeta.tsx index f091f30b9..824426b2e 100644 --- a/src/app/components/image-pack-view/PackMeta.tsx +++ b/src/app/components/image-pack-view/PackMeta.tsx @@ -53,7 +53,7 @@ export function ImagePackProfile({ meta, canEdit, onEdit }: ImagePackProfileProp const mx = useMatrixClient(); const useAuthentication = useMediaAuthentication(); const avatarUrl = meta.avatar - ? mxcUrlToHttp(mx, meta.avatar, useAuthentication) ?? undefined + ? (mxcUrlToHttp(mx, meta.avatar, useAuthentication) ?? undefined) : undefined; return ( @@ -101,7 +101,7 @@ export function ImagePackProfileEdit({ meta, onCancel, onSave }: ImagePackProfil const useAuthentication = useMediaAuthentication(); const [avatar, setAvatar] = useState(meta.avatar); - const avatarUrl = avatar ? mxcUrlToHttp(mx, avatar, useAuthentication) ?? undefined : undefined; + const avatarUrl = avatar ? (mxcUrlToHttp(mx, avatar, useAuthentication) ?? undefined) : undefined; const [imageFile, setImageFile] = useState(); const avatarFileUrl = useObjectURL(imageFile); diff --git a/src/app/components/image-pack-view/RoomImagePack.tsx b/src/app/components/image-pack-view/RoomImagePack.tsx index 92b4ff218..511be3186 100644 --- a/src/app/components/image-pack-view/RoomImagePack.tsx +++ b/src/app/components/image-pack-view/RoomImagePack.tsx @@ -32,7 +32,7 @@ export function RoomImagePack({ room, stateKey }: RoomImagePackProps) { { roomId: room.roomId, stateKey, - } + }, ); }, [room.roomId, stateKey]); const imagePack = useRoomImagePack(room, stateKey) ?? fallbackPack; @@ -46,10 +46,10 @@ export function RoomImagePack({ room, stateKey }: RoomImagePackProps) { address.roomId, StateEvent.PoniesRoomEmotes, packContent, - address.stateKey + address.stateKey, ); }, - [mx, imagePack] + [mx, imagePack], ); return ( diff --git a/src/app/components/image-pack-view/UsageSwitcher.tsx b/src/app/components/image-pack-view/UsageSwitcher.tsx index 1a1eb432d..6823ae0ec 100644 --- a/src/app/components/image-pack-view/UsageSwitcher.tsx +++ b/src/app/components/image-pack-view/UsageSwitcher.tsx @@ -29,7 +29,7 @@ export function UsageSelector({ selected, onChange }: UsageSelectorProps) { const allUsages: ImageUsage[][] = useMemo( () => [[ImageUsage.Emoticon], [ImageUsage.Sticker], [ImageUsage.Sticker, ImageUsage.Emoticon]], - [] + [], ); return ( diff --git a/src/app/components/image-pack-view/UserImagePack.tsx b/src/app/components/image-pack-view/UserImagePack.tsx index 4987793d6..05d30acdb 100644 --- a/src/app/components/image-pack-view/UserImagePack.tsx +++ b/src/app/components/image-pack-view/UserImagePack.tsx @@ -15,7 +15,7 @@ export function UserImagePack() { async (packContent: PackContent) => { await mx.setAccountData(AccountDataEvent.PoniesUserEmotes, packContent); }, - [mx] + [mx], ); return ; diff --git a/src/app/components/image-viewer/ImageViewer.tsx b/src/app/components/image-viewer/ImageViewer.tsx index fae5b0b93..582e17e32 100644 --- a/src/app/components/image-viewer/ImageViewer.tsx +++ b/src/app/components/image-viewer/ImageViewer.tsx @@ -93,5 +93,5 @@ export const ImageViewer = as<'div', ImageViewerProps>( ); - } + }, ); diff --git a/src/app/components/invite-user-prompt/InviteUserPrompt.tsx b/src/app/components/invite-user-prompt/InviteUserPrompt.tsx index 586d2904d..84d56bc6d 100644 --- a/src/app/components/invite-user-prompt/InviteUserPrompt.tsx +++ b/src/app/components/invite-user-prompt/InviteUserPrompt.tsx @@ -69,12 +69,12 @@ export function InviteUserPrompt({ room, requestClose }: InviteUserProps) { const membership = room.getMember(userId)?.membership; return membership !== Membership.Join; }), - [directUsers, room] + [directUsers, room], ); const [result, search, resetSearch] = useAsyncSearch( filteredUsers, getUserIdString, - SEARCH_OPTIONS + SEARCH_OPTIONS, ); const queryHighlighRegex = result?.query ? makeHighlightRegex(result.query.split(' ')) @@ -85,8 +85,8 @@ export function InviteUserPrompt({ room, requestClose }: InviteUserProps) { async (userId, reason) => { await mx.invite(room.roomId, userId, reason); }, - [mx, room] - ) + [mx, room], + ), ); const inviting = inviteState.status === AsyncStatus.Loading; diff --git a/src/app/components/leave-room-prompt/LeaveRoomPrompt.tsx b/src/app/components/leave-room-prompt/LeaveRoomPrompt.tsx index c84480b19..714ee4836 100644 --- a/src/app/components/leave-room-prompt/LeaveRoomPrompt.tsx +++ b/src/app/components/leave-room-prompt/LeaveRoomPrompt.tsx @@ -32,7 +32,7 @@ export function LeaveRoomPrompt({ roomId, onDone, onCancel }: LeaveRoomPromptPro const [leaveState, leaveRoom] = useAsyncCallback( useCallback(async () => { mx.leave(roomId); - }, [mx, roomId]) + }, [mx, roomId]), ); const handleLeave = () => { diff --git a/src/app/components/leave-space-prompt/LeaveSpacePrompt.tsx b/src/app/components/leave-space-prompt/LeaveSpacePrompt.tsx index d4c59e379..55ec3f286 100644 --- a/src/app/components/leave-space-prompt/LeaveSpacePrompt.tsx +++ b/src/app/components/leave-space-prompt/LeaveSpacePrompt.tsx @@ -32,7 +32,7 @@ export function LeaveSpacePrompt({ roomId, onDone, onCancel }: LeaveSpacePromptP const [leaveState, leaveRoom] = useAsyncCallback( useCallback(async () => { mx.leave(roomId); - }, [mx, roomId]) + }, [mx, roomId]), ); const handleLeave = () => { diff --git a/src/app/components/media/Image.tsx b/src/app/components/media/Image.tsx index dda21a53f..3eaa808b1 100644 --- a/src/app/components/media/Image.tsx +++ b/src/app/components/media/Image.tsx @@ -5,5 +5,5 @@ import * as css from './media.css'; export const Image = forwardRef>( ({ className, alt, ...props }, ref) => ( {alt} - ) + ), ); diff --git a/src/app/components/media/MediaControls.tsx b/src/app/components/media/MediaControls.tsx index 95a344aba..fb8565d22 100644 --- a/src/app/components/media/MediaControls.tsx +++ b/src/app/components/media/MediaControls.tsx @@ -23,5 +23,5 @@ export const MediaControl = as<'div', MediaControlProps>( {after && {after}} {children} - ) + ), ); diff --git a/src/app/components/media/Video.tsx b/src/app/components/media/Video.tsx index 03108c329..7360f23fb 100644 --- a/src/app/components/media/Video.tsx +++ b/src/app/components/media/Video.tsx @@ -6,5 +6,5 @@ export const Video = forwardRef ( // eslint-disable-next-line jsx-a11y/media-has-caption