Merge branch 'develop'

This commit is contained in:
molvqingtai 2024-10-29 10:24:34 +08:00
commit 859a8f4a01
11 changed files with 412 additions and 285 deletions

View file

@ -44,7 +44,7 @@
}, },
"homepage": "https://github.com/molvqingtai/WebChat", "homepage": "https://github.com/molvqingtai/WebChat",
"dependencies": { "dependencies": {
"@hookform/resolvers": "^3.9.0", "@hookform/resolvers": "^3.9.1",
"@lottiefiles/dotlottie-react": "^0.9.2", "@lottiefiles/dotlottie-react": "^0.9.2",
"@perfsee/jsonr": "^1.13.0", "@perfsee/jsonr": "^1.13.0",
"@radix-ui/react-avatar": "^1.1.1", "@radix-ui/react-avatar": "^1.1.1",
@ -72,8 +72,8 @@
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"framer-motion": "^11.11.10", "framer-motion": "^11.11.10",
"idb-keyval": "^6.2.1", "idb-keyval": "^6.2.1",
"lucide-react": "^0.453.0", "lucide-react": "^0.454.0",
"nanoid": "^5.0.7", "nanoid": "^5.0.8",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-hook-form": "^7.53.1", "react-hook-form": "^7.53.1",
@ -96,7 +96,7 @@
"devDependencies": { "devDependencies": {
"@commitlint/cli": "^19.5.0", "@commitlint/cli": "^19.5.0",
"@commitlint/config-conventional": "^19.5.0", "@commitlint/config-conventional": "^19.5.0",
"@eslint-react/eslint-plugin": "^1.15.1", "@eslint-react/eslint-plugin": "^1.15.2",
"@eslint/js": "^9.13.0", "@eslint/js": "^9.13.0",
"@semantic-release/changelog": "^6.0.3", "@semantic-release/changelog": "^6.0.3",
"@semantic-release/exec": "^6.0.3", "@semantic-release/exec": "^6.0.3",
@ -104,10 +104,10 @@
"@types/eslint": "^9.6.1", "@types/eslint": "^9.6.1",
"@types/eslint__js": "^8.42.3", "@types/eslint__js": "^8.42.3",
"@types/eslint-plugin-tailwindcss": "^3.17.0", "@types/eslint-plugin-tailwindcss": "^3.17.0",
"@types/node": "^22.8.1", "@types/node": "^22.8.2",
"@types/react": "^18.3.12", "@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1", "@types/react-dom": "^18.3.1",
"@typescript-eslint/parser": "^8.11.0", "@typescript-eslint/parser": "^8.12.1",
"@vitejs/plugin-react": "^4.3.3", "@vitejs/plugin-react": "^4.3.3",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
@ -128,7 +128,7 @@
"tailwindcss": "^3.4.14", "tailwindcss": "^3.4.14",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",
"typescript": "^5.6.3", "typescript": "^5.6.3",
"typescript-eslint": "^8.11.0", "typescript-eslint": "^8.12.1",
"vite-plugin-svgr": "^4.2.0", "vite-plugin-svgr": "^4.2.0",
"webext-bridge": "^6.0.1", "webext-bridge": "^6.0.1",
"wxt": "^0.19.13" "wxt": "^0.19.13"

View file

@ -9,8 +9,8 @@ importers:
.: .:
dependencies: dependencies:
'@hookform/resolvers': '@hookform/resolvers':
specifier: ^3.9.0 specifier: ^3.9.1
version: 3.9.0(react-hook-form@7.53.1(react@18.3.1)) version: 3.9.1(react-hook-form@7.53.1(react@18.3.1))
'@lottiefiles/dotlottie-react': '@lottiefiles/dotlottie-react':
specifier: ^0.9.2 specifier: ^0.9.2
version: 0.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 0.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -93,11 +93,11 @@ importers:
specifier: ^6.2.1 specifier: ^6.2.1
version: 6.2.1 version: 6.2.1
lucide-react: lucide-react:
specifier: ^0.453.0 specifier: ^0.454.0
version: 0.453.0(react@18.3.1) version: 0.454.0(react@18.3.1)
nanoid: nanoid:
specifier: ^5.0.7 specifier: ^5.0.8
version: 5.0.7 version: 5.0.8
react: react:
specifier: ^18.3.1 specifier: ^18.3.1
version: 18.3.1 version: 18.3.1
@ -155,13 +155,13 @@ importers:
devDependencies: devDependencies:
'@commitlint/cli': '@commitlint/cli':
specifier: ^19.5.0 specifier: ^19.5.0
version: 19.5.0(@types/node@22.8.1)(typescript@5.6.3) version: 19.5.0(@types/node@22.8.2)(typescript@5.6.3)
'@commitlint/config-conventional': '@commitlint/config-conventional':
specifier: ^19.5.0 specifier: ^19.5.0
version: 19.5.0 version: 19.5.0
'@eslint-react/eslint-plugin': '@eslint-react/eslint-plugin':
specifier: ^1.15.1 specifier: ^1.15.2
version: 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) version: 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint/js': '@eslint/js':
specifier: ^9.13.0 specifier: ^9.13.0
version: 9.13.0 version: 9.13.0
@ -184,8 +184,8 @@ importers:
specifier: ^8.42.3 specifier: ^8.42.3
version: 8.42.3 version: 8.42.3
'@types/node': '@types/node':
specifier: ^22.8.1 specifier: ^22.8.2
version: 22.8.1 version: 22.8.2
'@types/react': '@types/react':
specifier: ^18.3.12 specifier: ^18.3.12
version: 18.3.12 version: 18.3.12
@ -193,11 +193,11 @@ importers:
specifier: ^18.3.1 specifier: ^18.3.1
version: 18.3.1 version: 18.3.1
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: ^8.11.0 specifier: ^8.12.1
version: 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) version: 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@vitejs/plugin-react': '@vitejs/plugin-react':
specifier: ^4.3.3 specifier: ^4.3.3
version: 4.3.3(vite@5.4.10(@types/node@22.8.1)) version: 4.3.3(vite@5.4.10(@types/node@22.8.2))
autoprefixer: autoprefixer:
specifier: ^10.4.20 specifier: ^10.4.20
version: 10.4.20(postcss@8.4.47) version: 10.4.20(postcss@8.4.47)
@ -256,17 +256,17 @@ importers:
specifier: ^5.6.3 specifier: ^5.6.3
version: 5.6.3 version: 5.6.3
typescript-eslint: typescript-eslint:
specifier: ^8.11.0 specifier: ^8.12.1
version: 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) version: 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
vite-plugin-svgr: vite-plugin-svgr:
specifier: ^4.2.0 specifier: ^4.2.0
version: 4.2.0(rollup@4.21.3)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)) version: 4.2.0(rollup@4.21.3)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.2))
webext-bridge: webext-bridge:
specifier: ^6.0.1 specifier: ^6.0.1
version: 6.0.1 version: 6.0.1
wxt: wxt:
specifier: ^0.19.13 specifier: ^0.19.13
version: 0.19.13(@types/node@22.8.1)(bufferutil@4.0.8)(rollup@4.21.3)(utf-8-validate@6.0.4) version: 0.19.13(@types/node@22.8.2)(bufferutil@4.0.8)(rollup@4.21.3)(utf-8-validate@6.0.4)
packages: packages:
@ -633,14 +633,14 @@ packages:
resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint-react/ast@1.15.1': '@eslint-react/ast@1.15.2':
resolution: {integrity: sha512-vR69yo/9lihImDK4fvay0i6yHtgrjl6gSDwVomOgFJpkFp0nZ1E2OkVuOkqmXvKvOUxs/SJxPq4n6HxRdA4q7A==} resolution: {integrity: sha512-Dtn6Ai/P74CLoZ4mPR/9Mm4xXuulXULaXNXAzusZSNfa3+4podw6LCxKHpLcLqsvfZN3mciW3cC8CAyH7/MZwg==}
'@eslint-react/core@1.15.1': '@eslint-react/core@1.15.2':
resolution: {integrity: sha512-sVRGwz8lzTRoONgya18xErhkJ0SOabCbJm//OXWfb3GiCQ0iWHcagyLEOWeFg9rTbV+touBc2vvNbSNAUS8/qg==} resolution: {integrity: sha512-F8qh1oeqdXrepTQKp0kbQ8UTVDhSbJGvsQhO6YMSOC/Bci98Z2ad/VZXfZtMcYtvj+/4s0nmifzrYfvjt7easw==}
'@eslint-react/eslint-plugin@1.15.1': '@eslint-react/eslint-plugin@1.15.2':
resolution: {integrity: sha512-EEs5M+8rO7fBxpLAssJEw7l0ErYWzywtHYeFNeyaiA42OCfC8gLICUdfA6QWbJSxG04THje6gvMrdkTe9m0ymQ==} resolution: {integrity: sha512-j4O+dVFG24VrEu0lfiY7PTiAdKpYBWrc16/J4OymTERxwJYAZLuedoIYextSYjpJ7Hn9RhQyhGq4jqbcIpyVwg==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'} engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
@ -649,20 +649,20 @@ packages:
typescript: typescript:
optional: true optional: true
'@eslint-react/jsx@1.15.1': '@eslint-react/jsx@1.15.2':
resolution: {integrity: sha512-FP+Q8lesrKgWfbVJZbB7PrLqasjJy2zk4+YVP0L2fmT6PzDMidxHVLbEqN9fT8FUtyexSBMonvetZTD2V4+nWw==} resolution: {integrity: sha512-IwkmPazUhEpMQgu6gVzCWuvWU7Za7SmddKowNIelSfoX0o5uZVh42anrVnGyX0jgx9X7XcZOUYll3F701Ftyqw==}
'@eslint-react/shared@1.15.1': '@eslint-react/shared@1.15.2':
resolution: {integrity: sha512-SfP1yU9taJMjwr06C/jvTowFcq5AoIKJEPNpyKmVED3pHYjdq1IpziTAU8FjB2GBbVfU6kHdbMxkcO30PfSRCA==} resolution: {integrity: sha512-5xOCUbf+AhWcMKdQSPRmqJrnsepiP1SYyoc0w8M69DLhkuRfTnzVsJsvXNGS74+8oG8jBfRU/C1dkQxNWoODWg==}
'@eslint-react/tools@1.15.1': '@eslint-react/tools@1.15.2':
resolution: {integrity: sha512-j+/fTzPc91KPFISegS0+ljDiHGb5AbxDqK/O/E+MH4CSrLJFiChJh7pVMw6vs7Y1TjxEhoK+Gl3WDxZWnNBM9A==} resolution: {integrity: sha512-u5vASGC6Ui+5G0AkorTZHevHE1w6Spaun9UdmadMDTuZdPLbfIUPoD4dfZ5AaqH6wVfdpmieHFXsItuvRWHWxw==}
'@eslint-react/types@1.15.1': '@eslint-react/types@1.15.2':
resolution: {integrity: sha512-59Tp35OeEoUB8jVyuLd0YbaOSeNKyYkW8eeh2radkIz5gQe2Whns+Nk6kIq2qYCr3vVVWBfiI3corkIByWBukA==} resolution: {integrity: sha512-s8HfvVPl8aCb+coIPrFULDugR22GiRKU6keXwdRqQaHR4U0a6YtSqNFssoxEvMdkesNAQ2kIhZEE4oXRyR7gFw==}
'@eslint-react/var@1.15.1': '@eslint-react/var@1.15.2':
resolution: {integrity: sha512-9IRZoXHkYtesgYQzEi4Gz93yG3mkUWQeBb+FNv44CRiKQ0egbGfDJCe+nqGsD67OebI1JKnmTMqLRR8YWPxMnw==} resolution: {integrity: sha512-Kd37TnpjGWXUshTruUxH2wyo4ODItf/yn8P8VbgOAirkKg/Y7cSsep3hXuY4hXlpOd/ZgoGmtGE8JHsm65Vfxw==}
'@eslint/config-array@0.18.0': '@eslint/config-array@0.18.0':
resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
@ -910,8 +910,8 @@ packages:
engines: {node: '>=6'} engines: {node: '>=6'}
hasBin: true hasBin: true
'@hookform/resolvers@3.9.0': '@hookform/resolvers@3.9.1':
resolution: {integrity: sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==} resolution: {integrity: sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==}
peerDependencies: peerDependencies:
react-hook-form: ^7.0.0 react-hook-form: ^7.0.0
@ -2003,8 +2003,8 @@ packages:
'@types/murmurhash3js-revisited@3.0.3': '@types/murmurhash3js-revisited@3.0.3':
resolution: {integrity: sha512-QvlqvYtGBYIDeO8dFdY4djkRubcrc+yTJtBc7n8VZPlJDUS/00A+PssbvERM8f9bYRmcaSEHPZgZojeQj7kzAA==} resolution: {integrity: sha512-QvlqvYtGBYIDeO8dFdY4djkRubcrc+yTJtBc7n8VZPlJDUS/00A+PssbvERM8f9bYRmcaSEHPZgZojeQj7kzAA==}
'@types/node@22.8.1': '@types/node@22.8.2':
resolution: {integrity: sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==} resolution: {integrity: sha512-NzaRNFV+FZkvK/KLCsNdTvID0SThyrs5SHB6tsD/lajr22FGC73N2QeDPM2wHtVde8mgcXuSsHQkH5cX1pbPLw==}
'@types/normalize-package-data@2.4.4': '@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@ -2045,8 +2045,8 @@ packages:
'@types/yauzl@2.10.3': '@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
'@typescript-eslint/eslint-plugin@8.11.0': '@typescript-eslint/eslint-plugin@8.12.1':
resolution: {integrity: sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==} resolution: {integrity: sha512-gNg/inLRcPoBsKKIe4Vv38SVSOhk4BKWNO0T56sVff33gRqtTpOsrhHtiOKD1lmIOmCtZMPaW2x/h2FlM+sCEg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
@ -2056,8 +2056,8 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/parser@8.11.0': '@typescript-eslint/parser@8.12.1':
resolution: {integrity: sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==} resolution: {integrity: sha512-I/I9Bg7qFa8rOgBnUUHIWTgzbB5wVkSLX+04xGUzTcJUtdq/I2uHWR9mbW6qUYJG/UmkuDcTax5JHvoEWOAHOQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
@ -2066,12 +2066,12 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/scope-manager@8.11.0': '@typescript-eslint/scope-manager@8.12.1':
resolution: {integrity: sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==} resolution: {integrity: sha512-bma6sD1iViTt+y9MAwDlBdPTMCqoH/BNdcQk4rKhIZWv3eM0xHmzeSrPJA663PAqFqfpOmtdugycpr0E1mZDVA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/type-utils@8.11.0': '@typescript-eslint/type-utils@8.12.1':
resolution: {integrity: sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==} resolution: {integrity: sha512-zJzrvbDVjIzVKV2TGHcjembEhws8RWXJhmqfO9hS2gRXBN0gDwGhRPEdJ6AZglzfJ+YA1q09EWpSLSXjBJpIMQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@ -2079,12 +2079,12 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/types@8.11.0': '@typescript-eslint/types@8.12.1':
resolution: {integrity: sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==} resolution: {integrity: sha512-anMS4es5lxBe4UVcDXOkcDb3csnm5BvaNIbOFfvy/pJEohorsggdVB8MFbl5EZiEuBnZZ0ei1z7W5b6FdFiV1Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.11.0': '@typescript-eslint/typescript-estree@8.12.1':
resolution: {integrity: sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==} resolution: {integrity: sha512-k/o9khHOckPeDXilFTIPsP9iAYhhdMh3OsOL3i2072PNpFqhqzRHx472/0DeC8H/WZee3bZG0z2ddGRSPgeOKw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@ -2092,14 +2092,14 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/utils@8.11.0': '@typescript-eslint/utils@8.12.1':
resolution: {integrity: sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==} resolution: {integrity: sha512-sDv9yFHrhKe1WN8EYuzfhKCh/sFRupe9P+m/lZ5YgVvPoCUGHNN50IO4llSu7JAbftUM/QcCh+GeCortXPrBYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
'@typescript-eslint/visitor-keys@8.11.0': '@typescript-eslint/visitor-keys@8.12.1':
resolution: {integrity: sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==} resolution: {integrity: sha512-2RwdwnNGuOQKdGjuhujQHUqBZhEuodg2sLVPvOfWktvA9sOXOVqARjOyHSyhN2LiJGKxV6c8oOcmOtRcAnEeFw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.2.0': '@ungap/structured-clone@1.2.0':
@ -3141,8 +3141,8 @@ packages:
eslint-config-prettier: eslint-config-prettier:
optional: true optional: true
eslint-plugin-react-debug@1.15.1: eslint-plugin-react-debug@1.15.2:
resolution: {integrity: sha512-UY/Ey0yP/X+4chhXpgTqouIy6+uMbgKQR5hyLjR9Rrj10IdW6tQoMRC2od/ibErQlIWfFAZS2D1W0X82Ks2IJg==} resolution: {integrity: sha512-k+4Z+Gel0Vh3eQ5fLTOe+wvHuvD6ApOzBDupIRISv+sU24KXykT3J0+xZLy3gu5OfhxQ0hE7b3gY8bZvYaW41w==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'} engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
@ -3151,8 +3151,8 @@ packages:
typescript: typescript:
optional: true optional: true
eslint-plugin-react-dom@1.15.1: eslint-plugin-react-dom@1.15.2:
resolution: {integrity: sha512-f9zHIZc3ktda8TK/DkGlhu6XLhMYSazQvFuaxxCUNWsKHKQaGr/YbMmNnanwPa4qHEHBfhy0nXr77e2gYa7rLA==} resolution: {integrity: sha512-strNT28BHy7yeQgdbBzPGUHDqRkZFI5IfKlkuiozk+vPSZfLj0K2X8L25DvNXr5eRMTyV6TlUsk1Y6xr6ZJgPg==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'} engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
@ -3161,8 +3161,8 @@ packages:
typescript: typescript:
optional: true optional: true
eslint-plugin-react-hooks-extra@1.15.1: eslint-plugin-react-hooks-extra@1.15.2:
resolution: {integrity: sha512-BqHXPejTBVurYJkUeAND/ku3zGT2ONtMXFRMPZqTWImrtzNb/fIHohhtGxs8RQVfpzda6GgBc0x0TIUVhBxFiQ==} resolution: {integrity: sha512-v+PazTS64GPCCGj9dEvSirHc4oNQm74zhE/CpsEo+0IBre38CavN7Ausq/OAgipmnihoyEH7hMgUzJsCAABEmQ==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'} engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
@ -3171,8 +3171,8 @@ packages:
typescript: typescript:
optional: true optional: true
eslint-plugin-react-naming-convention@1.15.1: eslint-plugin-react-naming-convention@1.15.2:
resolution: {integrity: sha512-Ynhhn2I9OHbSZsDamNU7+swMlWSVAI9QYMtmDtlCDglRTVIFKHtG0rKnTk1X8VYJIX0un40rowwakQwQnkleVQ==} resolution: {integrity: sha512-Vj4SOKlFAs0c+ICal0rVZHjVmEFAKEROhJV8xBu6ZO7JcVDb3Yc7N6t8/vTwhGJDk0jQ8quNSV0dPCX4gvLlDw==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'} engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
@ -3181,8 +3181,8 @@ packages:
typescript: typescript:
optional: true optional: true
eslint-plugin-react-web-api@1.15.1: eslint-plugin-react-web-api@1.15.2:
resolution: {integrity: sha512-ZVZ+ReoFGcm98i5ULGo9Ee4Z1YOn6rKKWCCJ3uacnXT0DqhzTPXi88P8a6z16uKrWeHWjTNYdIssKIpw2oys4g==} resolution: {integrity: sha512-UIwuLvJn/2vbnB8IRnfNpsgcNQlJPJKfF/6/XwselRcRkgl5qk1B8pypapG/g3MqJ85jIAUj1Xn+bQu2BiTa7g==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'} engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
@ -3191,8 +3191,8 @@ packages:
typescript: typescript:
optional: true optional: true
eslint-plugin-react-x@1.15.1: eslint-plugin-react-x@1.15.2:
resolution: {integrity: sha512-PjscVhBiEuFP6sLFTNVdBRlybqS5PEN3H3NG91Ag4Va/QI6bkedZbRpalhCL0rvsZYlhp0e0Oa9EZvwW/H+w5A==} resolution: {integrity: sha512-HIpYzojk5fzalJ09UJRhtu1cJcFxM/YsTCdVPE/v3sqWb/1v8bzPVtUkQbR787G4o/M0wTUy+pBzTYAJeBRnOw==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'} engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
@ -4412,8 +4412,8 @@ packages:
lru-cache@5.1.1: lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
lucide-react@0.453.0: lucide-react@0.454.0:
resolution: {integrity: sha512-kL+RGZCcJi9BvJtzg2kshO192Ddy9hv3ij+cPrVPWSRzgCWCVazoQJxOjAwgK53NomL07HB7GPHW120FimjNhQ==} resolution: {integrity: sha512-hw7zMDwykCLnEzgncEEjHeA6+45aeEzRYuKHuyRSOPkhko+J3ySGjGIzu+mmMfDFG1vazHepMaYFYHbTFAZAAQ==}
peerDependencies: peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc
@ -4753,8 +4753,8 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true hasBin: true
nanoid@5.0.7: nanoid@5.0.8:
resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} resolution: {integrity: sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==}
engines: {node: ^18 || >=20} engines: {node: ^18 || >=20}
hasBin: true hasBin: true
@ -6197,8 +6197,8 @@ packages:
typedarray@0.0.6: typedarray@0.0.6:
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
typescript-eslint@8.11.0: typescript-eslint@8.12.1:
resolution: {integrity: sha512-cBRGnW3FSlxaYwU8KfAewxFK5uzeOAp0l2KebIlPDOT5olVi65KDG/yjBooPBG0kGW/HLkoz1c/iuBFehcS3IA==} resolution: {integrity: sha512-SsKedZnq4TStkrpqnk+OqTnmkC9CkYBRNKjQ965CLpFruGcRkPF5UhKxbcbF6c/m2r6YAgKw/UtQxdlMjh3mug==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@ -6895,11 +6895,11 @@ snapshots:
'@colors/colors@1.5.0': '@colors/colors@1.5.0':
optional: true optional: true
'@commitlint/cli@19.5.0(@types/node@22.8.1)(typescript@5.6.3)': '@commitlint/cli@19.5.0(@types/node@22.8.2)(typescript@5.6.3)':
dependencies: dependencies:
'@commitlint/format': 19.5.0 '@commitlint/format': 19.5.0
'@commitlint/lint': 19.5.0 '@commitlint/lint': 19.5.0
'@commitlint/load': 19.5.0(@types/node@22.8.1)(typescript@5.6.3) '@commitlint/load': 19.5.0(@types/node@22.8.2)(typescript@5.6.3)
'@commitlint/read': 19.5.0 '@commitlint/read': 19.5.0
'@commitlint/types': 19.5.0 '@commitlint/types': 19.5.0
tinyexec: 0.3.0 tinyexec: 0.3.0
@ -6946,7 +6946,7 @@ snapshots:
'@commitlint/rules': 19.5.0 '@commitlint/rules': 19.5.0
'@commitlint/types': 19.5.0 '@commitlint/types': 19.5.0
'@commitlint/load@19.5.0(@types/node@22.8.1)(typescript@5.6.3)': '@commitlint/load@19.5.0(@types/node@22.8.2)(typescript@5.6.3)':
dependencies: dependencies:
'@commitlint/config-validator': 19.5.0 '@commitlint/config-validator': 19.5.0
'@commitlint/execute-rule': 19.5.0 '@commitlint/execute-rule': 19.5.0
@ -6954,7 +6954,7 @@ snapshots:
'@commitlint/types': 19.5.0 '@commitlint/types': 19.5.0
chalk: 5.3.0 chalk: 5.3.0
cosmiconfig: 9.0.0(typescript@5.6.3) cosmiconfig: 9.0.0(typescript@5.6.3)
cosmiconfig-typescript-loader: 5.0.0(@types/node@22.8.1)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) cosmiconfig-typescript-loader: 5.0.0(@types/node@22.8.2)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3)
lodash.isplainobject: 4.0.6 lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2 lodash.merge: 4.6.2
lodash.uniq: 4.5.0 lodash.uniq: 4.5.0
@ -7097,13 +7097,13 @@ snapshots:
'@eslint-community/regexpp@4.11.1': {} '@eslint-community/regexpp@4.11.1': {}
'@eslint-react/ast@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': '@eslint-react/ast@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)':
dependencies: dependencies:
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@eslint-react/types': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/types': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) '@typescript-eslint/typescript-estree': 8.12.1(typescript@5.6.3)
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
birecord: 0.1.1 birecord: 0.1.1
string-ts: 2.2.0 string-ts: 2.2.0
ts-pattern: 5.5.0 ts-pattern: 5.5.0
@ -7112,18 +7112,18 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
'@eslint-react/core@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': '@eslint-react/core@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)':
dependencies: dependencies:
'@eslint-react/ast': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/ast': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/jsx': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/jsx': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/shared': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/shared': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@eslint-react/types': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/types': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/var': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/var': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/type-utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
birecord: 0.1.1 birecord: 0.1.1
short-unique-id: 5.2.0 short-unique-id: 5.2.0
ts-pattern: 5.5.0 ts-pattern: 5.5.0
@ -7132,72 +7132,72 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
'@eslint-react/eslint-plugin@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': '@eslint-react/eslint-plugin@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)':
dependencies: dependencies:
'@eslint-react/shared': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/shared': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@eslint-react/types': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/types': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/type-utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint: 9.13.0(jiti@2.3.3) eslint: 9.13.0(jiti@2.3.3)
eslint-plugin-react-debug: 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) eslint-plugin-react-debug: 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint-plugin-react-dom: 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) eslint-plugin-react-dom: 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint-plugin-react-hooks-extra: 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) eslint-plugin-react-hooks-extra: 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint-plugin-react-naming-convention: 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) eslint-plugin-react-naming-convention: 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint-plugin-react-web-api: 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) eslint-plugin-react-web-api: 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint-plugin-react-x: 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) eslint-plugin-react-x: 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
optionalDependencies: optionalDependencies:
typescript: 5.6.3 typescript: 5.6.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@eslint-react/jsx@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': '@eslint-react/jsx@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)':
dependencies: dependencies:
'@eslint-react/ast': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/ast': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@eslint-react/types': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/types': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/var': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/var': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
ts-pattern: 5.5.0 ts-pattern: 5.5.0
transitivePeerDependencies: transitivePeerDependencies:
- eslint - eslint
- supports-color - supports-color
- typescript - typescript
'@eslint-react/shared@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': '@eslint-react/shared@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)':
dependencies: dependencies:
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
picomatch: 4.0.2 picomatch: 4.0.2
transitivePeerDependencies: transitivePeerDependencies:
- eslint - eslint
- supports-color - supports-color
- typescript - typescript
'@eslint-react/tools@1.15.1': {} '@eslint-react/tools@1.15.2': {}
'@eslint-react/types@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': '@eslint-react/types@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)':
dependencies: dependencies:
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
transitivePeerDependencies: transitivePeerDependencies:
- eslint - eslint
- supports-color - supports-color
- typescript - typescript
'@eslint-react/var@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': '@eslint-react/var@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)':
dependencies: dependencies:
'@eslint-react/ast': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/ast': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@eslint-react/types': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/types': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
ts-pattern: 5.5.0 ts-pattern: 5.5.0
transitivePeerDependencies: transitivePeerDependencies:
- eslint - eslint
@ -7580,7 +7580,7 @@ snapshots:
'@grpc/grpc-js@1.9.15': '@grpc/grpc-js@1.9.15':
dependencies: dependencies:
'@grpc/proto-loader': 0.7.13 '@grpc/proto-loader': 0.7.13
'@types/node': 22.8.1 '@types/node': 22.8.2
'@grpc/proto-loader@0.7.13': '@grpc/proto-loader@0.7.13':
dependencies: dependencies:
@ -7589,7 +7589,7 @@ snapshots:
protobufjs: 7.4.0 protobufjs: 7.4.0
yargs: 17.7.2 yargs: 17.7.2
'@hookform/resolvers@3.9.0(react-hook-form@7.53.1(react@18.3.1))': '@hookform/resolvers@3.9.1(react-hook-form@7.53.1(react@18.3.1))':
dependencies: dependencies:
react-hook-form: 7.53.1(react@18.3.1) react-hook-form: 7.53.1(react@18.3.1)
@ -8511,7 +8511,7 @@ snapshots:
'@rtco/peer': 0.2.17 '@rtco/peer': 0.2.17
bufferutil: 4.0.8 bufferutil: 4.0.8
eventemitter3: 5.0.1 eventemitter3: 5.0.1
nanoid: 5.0.7 nanoid: 5.0.8
socket.io-client: 4.8.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) socket.io-client: 4.8.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)
utf-8-validate: 6.0.4 utf-8-validate: 6.0.4
transitivePeerDependencies: transitivePeerDependencies:
@ -8804,7 +8804,7 @@ snapshots:
'@types/conventional-commits-parser@5.0.0': '@types/conventional-commits-parser@5.0.0':
dependencies: dependencies:
'@types/node': 22.8.1 '@types/node': 22.8.2
'@types/debug@4.1.12': '@types/debug@4.1.12':
dependencies: dependencies:
@ -8812,7 +8812,7 @@ snapshots:
'@types/dns-packet@5.6.5': '@types/dns-packet@5.6.5':
dependencies: dependencies:
'@types/node': 22.8.1 '@types/node': 22.8.2
'@types/eslint-plugin-tailwindcss@3.17.0': '@types/eslint-plugin-tailwindcss@3.17.0':
dependencies: dependencies:
@ -8863,7 +8863,7 @@ snapshots:
'@types/murmurhash3js-revisited@3.0.3': {} '@types/murmurhash3js-revisited@3.0.3': {}
'@types/node@22.8.1': '@types/node@22.8.2':
dependencies: dependencies:
undici-types: 6.19.8 undici-types: 6.19.8
@ -8884,7 +8884,7 @@ snapshots:
'@types/readable-stream@4.0.15': '@types/readable-stream@4.0.15':
dependencies: dependencies:
'@types/node': 22.8.1 '@types/node': 22.8.2
safe-buffer: 5.1.2 safe-buffer: 5.1.2
'@types/semver@7.5.8': {} '@types/semver@7.5.8': {}
@ -8899,21 +8899,21 @@ snapshots:
'@types/ws@8.5.12': '@types/ws@8.5.12':
dependencies: dependencies:
'@types/node': 22.8.1 '@types/node': 22.8.2
'@types/yauzl@2.10.3': '@types/yauzl@2.10.3':
dependencies: dependencies:
'@types/node': 22.8.1 '@types/node': 22.8.2
optional: true optional: true
'@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': '@typescript-eslint/eslint-plugin@8.12.1(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.11.1 '@eslint-community/regexpp': 4.11.1
'@typescript-eslint/parser': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/parser': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/type-utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/visitor-keys': 8.11.0 '@typescript-eslint/visitor-keys': 8.12.1
eslint: 9.13.0(jiti@2.3.3) eslint: 9.13.0(jiti@2.3.3)
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.3.2 ignore: 5.3.2
@ -8924,12 +8924,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': '@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) '@typescript-eslint/typescript-estree': 8.12.1(typescript@5.6.3)
'@typescript-eslint/visitor-keys': 8.11.0 '@typescript-eslint/visitor-keys': 8.12.1
debug: 4.3.7 debug: 4.3.7
eslint: 9.13.0(jiti@2.3.3) eslint: 9.13.0(jiti@2.3.3)
optionalDependencies: optionalDependencies:
@ -8937,15 +8937,15 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/scope-manager@8.11.0': '@typescript-eslint/scope-manager@8.12.1':
dependencies: dependencies:
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/visitor-keys': 8.11.0 '@typescript-eslint/visitor-keys': 8.12.1
'@typescript-eslint/type-utils@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': '@typescript-eslint/type-utils@8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)':
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) '@typescript-eslint/typescript-estree': 8.12.1(typescript@5.6.3)
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
debug: 4.3.7 debug: 4.3.7
ts-api-utils: 1.3.0(typescript@5.6.3) ts-api-utils: 1.3.0(typescript@5.6.3)
optionalDependencies: optionalDependencies:
@ -8954,12 +8954,12 @@ snapshots:
- eslint - eslint
- supports-color - supports-color
'@typescript-eslint/types@8.11.0': {} '@typescript-eslint/types@8.12.1': {}
'@typescript-eslint/typescript-estree@8.11.0(typescript@5.6.3)': '@typescript-eslint/typescript-estree@8.12.1(typescript@5.6.3)':
dependencies: dependencies:
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/visitor-keys': 8.11.0 '@typescript-eslint/visitor-keys': 8.12.1
debug: 4.3.7 debug: 4.3.7
fast-glob: 3.3.2 fast-glob: 3.3.2
is-glob: 4.0.3 is-glob: 4.0.3
@ -8971,32 +8971,32 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)': '@typescript-eslint/utils@8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.13.0(jiti@2.3.3)) '@eslint-community/eslint-utils': 4.4.0(eslint@9.13.0(jiti@2.3.3))
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) '@typescript-eslint/typescript-estree': 8.12.1(typescript@5.6.3)
eslint: 9.13.0(jiti@2.3.3) eslint: 9.13.0(jiti@2.3.3)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
'@typescript-eslint/visitor-keys@8.11.0': '@typescript-eslint/visitor-keys@8.12.1':
dependencies: dependencies:
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@ungap/structured-clone@1.2.0': {} '@ungap/structured-clone@1.2.0': {}
'@vitejs/plugin-react@4.3.3(vite@5.4.10(@types/node@22.8.1))': '@vitejs/plugin-react@4.3.3(vite@5.4.10(@types/node@22.8.2))':
dependencies: dependencies:
'@babel/core': 7.25.2 '@babel/core': 7.25.2
'@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2)
'@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2)
'@types/babel__core': 7.20.5 '@types/babel__core': 7.20.5
react-refresh: 0.14.2 react-refresh: 0.14.2
vite: 5.4.10(@types/node@22.8.1) vite: 5.4.10(@types/node@22.8.2)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -9524,7 +9524,7 @@ snapshots:
chrome-launcher@1.1.0: chrome-launcher@1.1.0:
dependencies: dependencies:
'@types/node': 22.8.1 '@types/node': 22.8.2
escape-string-regexp: 4.0.0 escape-string-regexp: 4.0.0
is-wsl: 2.2.0 is-wsl: 2.2.0
lighthouse-logger: 2.0.1 lighthouse-logger: 2.0.1
@ -9716,9 +9716,9 @@ snapshots:
core-util-is@1.0.3: {} core-util-is@1.0.3: {}
cosmiconfig-typescript-loader@5.0.0(@types/node@22.8.1)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): cosmiconfig-typescript-loader@5.0.0(@types/node@22.8.2)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3):
dependencies: dependencies:
'@types/node': 22.8.1 '@types/node': 22.8.2
cosmiconfig: 9.0.0(typescript@5.6.3) cosmiconfig: 9.0.0(typescript@5.6.3)
jiti: 1.21.6 jiti: 1.21.6
typescript: 5.6.3 typescript: 5.6.3
@ -10153,19 +10153,19 @@ snapshots:
'@types/eslint': 9.6.1 '@types/eslint': 9.6.1
eslint-config-prettier: 9.1.0(eslint@9.13.0(jiti@2.3.3)) eslint-config-prettier: 9.1.0(eslint@9.13.0(jiti@2.3.3))
eslint-plugin-react-debug@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3): eslint-plugin-react-debug@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3):
dependencies: dependencies:
'@eslint-react/ast': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/ast': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/core': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/core': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/jsx': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/jsx': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/shared': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/shared': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@eslint-react/types': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/types': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/var': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/var': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/type-utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint: 9.13.0(jiti@2.3.3) eslint: 9.13.0(jiti@2.3.3)
string-ts: 2.2.0 string-ts: 2.2.0
ts-pattern: 5.5.0 ts-pattern: 5.5.0
@ -10174,18 +10174,18 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-react-dom@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3): eslint-plugin-react-dom@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3):
dependencies: dependencies:
'@eslint-react/ast': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/ast': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/core': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/core': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/jsx': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/jsx': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/shared': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/shared': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@eslint-react/types': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/types': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/var': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/var': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint: 9.13.0(jiti@2.3.3) eslint: 9.13.0(jiti@2.3.3)
ts-pattern: 5.5.0 ts-pattern: 5.5.0
optionalDependencies: optionalDependencies:
@ -10193,19 +10193,19 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-react-hooks-extra@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3): eslint-plugin-react-hooks-extra@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3):
dependencies: dependencies:
'@eslint-react/ast': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/ast': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/core': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/core': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/jsx': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/jsx': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/shared': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/shared': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@eslint-react/types': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/types': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/var': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/var': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/type-utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint: 9.13.0(jiti@2.3.3) eslint: 9.13.0(jiti@2.3.3)
ts-pattern: 5.5.0 ts-pattern: 5.5.0
optionalDependencies: optionalDependencies:
@ -10213,18 +10213,18 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-react-naming-convention@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3): eslint-plugin-react-naming-convention@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3):
dependencies: dependencies:
'@eslint-react/ast': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/ast': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/core': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/core': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/jsx': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/jsx': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/shared': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/shared': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@eslint-react/types': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/types': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/type-utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint: 9.13.0(jiti@2.3.3) eslint: 9.13.0(jiti@2.3.3)
ts-pattern: 5.5.0 ts-pattern: 5.5.0
optionalDependencies: optionalDependencies:
@ -10232,18 +10232,18 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-react-web-api@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3): eslint-plugin-react-web-api@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3):
dependencies: dependencies:
'@eslint-react/ast': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/ast': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/core': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/core': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/jsx': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/jsx': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/shared': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/shared': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@eslint-react/types': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/types': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/var': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/var': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
birecord: 0.1.1 birecord: 0.1.1
eslint: 9.13.0(jiti@2.3.3) eslint: 9.13.0(jiti@2.3.3)
ts-pattern: 5.5.0 ts-pattern: 5.5.0
@ -10252,19 +10252,19 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-react-x@1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3): eslint-plugin-react-x@1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3):
dependencies: dependencies:
'@eslint-react/ast': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/ast': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/core': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/core': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/jsx': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/jsx': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/shared': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/shared': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/tools': 1.15.1 '@eslint-react/tools': 1.15.2
'@eslint-react/types': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/types': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@eslint-react/var': 1.15.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@eslint-react/var': 1.15.2(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/scope-manager': 8.11.0 '@typescript-eslint/scope-manager': 8.12.1
'@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/type-utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/types': 8.11.0 '@typescript-eslint/types': 8.12.1
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint: 9.13.0(jiti@2.3.3) eslint: 9.13.0(jiti@2.3.3)
is-immutable-type: 5.0.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) is-immutable-type: 5.0.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
ts-pattern: 5.5.0 ts-pattern: 5.5.0
@ -11103,7 +11103,7 @@ snapshots:
is-immutable-type@5.0.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3): is-immutable-type@5.0.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3):
dependencies: dependencies:
'@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/type-utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
eslint: 9.13.0(jiti@2.3.3) eslint: 9.13.0(jiti@2.3.3)
ts-api-utils: 1.3.0(typescript@5.6.3) ts-api-utils: 1.3.0(typescript@5.6.3)
ts-declaration-location: 1.0.4(typescript@5.6.3) ts-declaration-location: 1.0.4(typescript@5.6.3)
@ -11604,7 +11604,7 @@ snapshots:
dependencies: dependencies:
yallist: 3.1.1 yallist: 3.1.1
lucide-react@0.453.0(react@18.3.1): lucide-react@0.454.0(react@18.3.1):
dependencies: dependencies:
react: 18.3.1 react: 18.3.1
@ -12158,7 +12158,7 @@ snapshots:
nanoid@3.3.7: {} nanoid@3.3.7: {}
nanoid@5.0.7: {} nanoid@5.0.8: {}
napi-build-utils@1.0.2: {} napi-build-utils@1.0.2: {}
@ -12672,7 +12672,7 @@ snapshots:
'@protobufjs/path': 1.1.2 '@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0 '@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0 '@protobufjs/utf8': 1.1.0
'@types/node': 22.8.1 '@types/node': 22.8.2
long: 5.2.3 long: 5.2.3
protons-runtime@5.5.0: protons-runtime@5.5.0:
@ -13700,11 +13700,11 @@ snapshots:
typedarray@0.0.6: {} typedarray@0.0.6: {}
typescript-eslint@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3): typescript-eslint@8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3):
dependencies: dependencies:
'@typescript-eslint/eslint-plugin': 8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/eslint-plugin': 8.12.1(@typescript-eslint/parser@8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/parser': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/parser': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
'@typescript-eslint/utils': 8.11.0(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3) '@typescript-eslint/utils': 8.12.1(eslint@9.13.0(jiti@2.3.3))(typescript@5.6.3)
optionalDependencies: optionalDependencies:
typescript: 5.6.3 typescript: 5.6.3
transitivePeerDependencies: transitivePeerDependencies:
@ -13947,12 +13947,12 @@ snapshots:
'@types/unist': 3.0.3 '@types/unist': 3.0.3
vfile-message: 4.0.2 vfile-message: 4.0.2
vite-node@2.1.3(@types/node@22.8.1): vite-node@2.1.3(@types/node@22.8.2):
dependencies: dependencies:
cac: 6.7.14 cac: 6.7.14
debug: 4.3.7 debug: 4.3.7
pathe: 1.1.2 pathe: 1.1.2
vite: 5.4.10(@types/node@22.8.1) vite: 5.4.10(@types/node@22.8.2)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- less - less
@ -13964,24 +13964,24 @@ snapshots:
- supports-color - supports-color
- terser - terser
vite-plugin-svgr@4.2.0(rollup@4.21.3)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.1)): vite-plugin-svgr@4.2.0(rollup@4.21.3)(typescript@5.6.3)(vite@5.4.10(@types/node@22.8.2)):
dependencies: dependencies:
'@rollup/pluginutils': 5.1.0(rollup@4.21.3) '@rollup/pluginutils': 5.1.0(rollup@4.21.3)
'@svgr/core': 8.1.0(typescript@5.6.3) '@svgr/core': 8.1.0(typescript@5.6.3)
'@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.6.3)) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.6.3))
vite: 5.4.10(@types/node@22.8.1) vite: 5.4.10(@types/node@22.8.2)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
- typescript - typescript
vite@5.4.10(@types/node@22.8.1): vite@5.4.10(@types/node@22.8.2):
dependencies: dependencies:
esbuild: 0.21.5 esbuild: 0.21.5
postcss: 8.4.47 postcss: 8.4.47
rollup: 4.21.3 rollup: 4.21.3
optionalDependencies: optionalDependencies:
'@types/node': 22.8.1 '@types/node': 22.8.2
fsevents: 2.3.3 fsevents: 2.3.3
watchpack@2.4.1: watchpack@2.4.1:
@ -14166,7 +14166,7 @@ snapshots:
bufferutil: 4.0.8 bufferutil: 4.0.8
utf-8-validate: 6.0.4 utf-8-validate: 6.0.4
wxt@0.19.13(@types/node@22.8.1)(bufferutil@4.0.8)(rollup@4.21.3)(utf-8-validate@6.0.4): wxt@0.19.13(@types/node@22.8.2)(bufferutil@4.0.8)(rollup@4.21.3)(utf-8-validate@6.0.4):
dependencies: dependencies:
'@aklinker1/rollup-plugin-visualizer': 5.12.0(rollup@4.21.3) '@aklinker1/rollup-plugin-visualizer': 5.12.0(rollup@4.21.3)
'@types/chrome': 0.0.269 '@types/chrome': 0.0.269
@ -14209,8 +14209,8 @@ snapshots:
publish-browser-extension: 2.2.2 publish-browser-extension: 2.2.2
scule: 1.3.0 scule: 1.3.0
unimport: 3.13.1(rollup@4.21.3) unimport: 3.13.1(rollup@4.21.3)
vite: 5.4.10(@types/node@22.8.1) vite: 5.4.10(@types/node@22.8.2)
vite-node: 2.1.3(@types/node@22.8.1) vite-node: 2.1.3(@types/node@22.8.2)
web-ext-run: 0.2.1(bufferutil@4.0.8)(utf-8-validate@6.0.4) web-ext-run: 0.2.1(bufferutil@4.0.8)(utf-8-validate@6.0.4)
webextension-polyfill: 0.12.0 webextension-polyfill: 0.12.0
transitivePeerDependencies: transitivePeerDependencies:

View file

@ -0,0 +1,34 @@
import { Button } from '@/components/ui/Button'
import { createElement } from '@/utils'
import { ImageIcon } from 'lucide-react'
export interface ImageButtonProps {
onSelect?: (file: File) => void
disabled?: boolean
}
const ImageButton = ({ onSelect, disabled }: ImageButtonProps) => {
const handleClick = () => {
const input = createElement<HTMLInputElement>(`<input type="file" accept="image/png,image/jpeg,image/webp" />`)
input.addEventListener(
'change',
async (e: Event) => {
onSelect?.((e.target as HTMLInputElement).files![0])
},
{ once: true }
)
input.click()
}
return (
<Button disabled={disabled} onClick={handleClick} variant="ghost" size="icon" className="dark:text-white">
<ImageIcon size={20} />
</Button>
)
}
ImageButton.displayName = 'ImageButton'
export default ImageButton

View file

@ -3,6 +3,7 @@ import { forwardRef, type ChangeEvent, CompositionEvent, type KeyboardEvent } fr
import { cn } from '@/utils' import { cn } from '@/utils'
import { Textarea } from '@/components/ui/Textarea' import { Textarea } from '@/components/ui/Textarea'
import { ScrollArea } from '@/components/ui/ScrollArea' import { ScrollArea } from '@/components/ui/ScrollArea'
import LoadingIcon from '@/assets/images/loading.svg'
export interface MessageInputProps { export interface MessageInputProps {
value?: string value?: string
@ -11,6 +12,7 @@ export interface MessageInputProps {
preview?: boolean preview?: boolean
autoFocus?: boolean autoFocus?: boolean
disabled?: boolean disabled?: boolean
loading?: boolean
onInput?: (e: ChangeEvent<HTMLTextAreaElement>) => void onInput?: (e: ChangeEvent<HTMLTextAreaElement>) => void
onKeyDown?: (e: KeyboardEvent<HTMLTextAreaElement>) => void onKeyDown?: (e: KeyboardEvent<HTMLTextAreaElement>) => void
onCompositionStart?: (e: CompositionEvent<HTMLTextAreaElement>) => void onCompositionStart?: (e: CompositionEvent<HTMLTextAreaElement>) => void
@ -33,7 +35,8 @@ const MessageInput = forwardRef<HTMLTextAreaElement, MessageInputProps>(
onCompositionStart, onCompositionStart,
onCompositionEnd, onCompositionEnd,
autoFocus, autoFocus,
disabled disabled,
loading
}, },
ref ref
) => { ) => {
@ -45,7 +48,12 @@ const MessageInput = forwardRef<HTMLTextAreaElement, MessageInputProps>(
onKeyDown={onKeyDown} onKeyDown={onKeyDown}
autoFocus={autoFocus} autoFocus={autoFocus}
maxLength={maxLength} maxLength={maxLength}
className="box-border resize-none whitespace-pre-wrap break-words border-none bg-gray-50 pb-5 [field-sizing:content] [word-break:break-word] focus:ring-0 focus:ring-offset-0 dark:bg-slate-800" className={cn(
'box-border resize-none whitespace-pre-wrap break-words border-none bg-slate-100 pb-5 [field-sizing:content] [word-break:break-word] focus:ring-0 focus:ring-offset-0 dark:bg-slate-800',
{
'disabled:opacity-100': loading
}
)}
rows={2} rows={2}
value={value} value={value}
spellCheck={false} spellCheck={false}
@ -53,12 +61,21 @@ const MessageInput = forwardRef<HTMLTextAreaElement, MessageInputProps>(
onCompositionEnd={onCompositionEnd} onCompositionEnd={onCompositionEnd}
placeholder="Type your message here." placeholder="Type your message here."
onInput={onInput} onInput={onInput}
disabled={disabled} disabled={disabled || loading}
/> />
</ScrollArea> </ScrollArea>
<div className="absolute bottom-1 right-3 rounded-lg text-xs text-slate-400 dark:text-slate-50"> <div
className={cn('absolute bottom-1 right-3 rounded-lg text-xs text-slate-400', {
'opacity-50': disabled || loading
})}
>
{value?.length ?? 0}/{maxLength} {value?.length ?? 0}/{maxLength}
</div> </div>
{loading && (
<div className="absolute inset-0 flex items-center justify-center text-slate-800 after:absolute after:inset-0 after:backdrop-blur-xs dark:text-slate-100">
<LoadingIcon className="relative z-10 size-10"></LoadingIcon>
</div>
)}
</div> </div>
) )
} }

View file

@ -111,7 +111,7 @@ const AppButton: FC<AppButtonProps> = ({ className }) => {
> >
<div <div
className={cn( className={cn(
'absolute grid grid-rows-[repeat(2,minmax(0,2.5rem))] w-full justify-center items-center transition-all duration-500', 'absolute grid grid-rows-[repeat(2,minmax(0,2.5rem))] w-full justify-center items-center transition-all duration-300',
isDarkMode ? 'top-0' : '-top-10', isDarkMode ? 'top-0' : '-top-10',
isDarkMode ? 'bg-slate-950 text-white' : 'bg-white text-orange-400' isDarkMode ? 'bg-slate-950 text-white' : 'bg-white text-orange-400'
)} )}

View file

@ -15,10 +15,12 @@ import useTriggerAway from '@/hooks/useTriggerAway'
import { ScrollArea } from '@/components/ui/ScrollArea' import { ScrollArea } from '@/components/ui/ScrollArea'
import { Virtuoso, VirtuosoHandle } from 'react-virtuoso' import { Virtuoso, VirtuosoHandle } from 'react-virtuoso'
import UserInfoDomain from '@/domain/UserInfo' import UserInfoDomain from '@/domain/UserInfo'
import { cn, getRootNode, getTextSimilarity } from '@/utils' import { blobToBase64, cn, compressImage, getRootNode, getTextSimilarity } from '@/utils'
import { Avatar, AvatarFallback } from '@/components/ui/Avatar' import { Avatar, AvatarFallback } from '@/components/ui/Avatar'
import { AvatarImage } from '@radix-ui/react-avatar' import { AvatarImage } from '@radix-ui/react-avatar'
import ToastDomain from '@/domain/Toast' import ToastDomain from '@/domain/Toast'
import ImageButton from '../../components/ImageButton'
import { nanoid } from 'nanoid'
const Footer: FC = () => { const Footer: FC = () => {
const send = useRemeshSend() const send = useRemeshSend()
@ -40,6 +42,7 @@ const Footer: FC = () => {
const shareAutoCompleteListRef = useShareRef(setAutoCompleteListRef, autoCompleteListRef) const shareAutoCompleteListRef = useShareRef(setAutoCompleteListRef, autoCompleteListRef)
const isComposing = useRef(false) const isComposing = useRef(false)
const virtuosoRef = useRef<VirtuosoHandle>(null) const virtuosoRef = useRef<VirtuosoHandle>(null)
const [inputLoading, setInputLoading] = useState(false)
const shareRef = useShareRef(inputRef, setRef) const shareRef = useShareRef(inputRef, setRef)
@ -47,6 +50,7 @@ const Footer: FC = () => {
* When inserting a username using the @ syntax, record the username's position information and the mapping relationship between the position information and userId to distinguish between users with the same name. * When inserting a username using the @ syntax, record the username's position information and the mapping relationship between the position information and userId to distinguish between users with the same name.
*/ */
const atUserRecord = useRef<Map<string, Set<[number, number]>>>(new Map()) const atUserRecord = useRef<Map<string, Set<[number, number]>>>(new Map())
const imageRecord = useRef<Map<string, string>>(new Map())
const updateAtUserAtRecord = useMemo( const updateAtUserAtRecord = useMemo(
() => (message: string, start: number, end: number, offset: number, atUserId?: string) => { () => (message: string, start: number, end: number, offset: number, atUserId?: string) => {
@ -102,11 +106,29 @@ const Footer: FC = () => {
const selectedUser = autoCompleteList.find((_, index) => index === selectedUserIndex)! const selectedUser = autoCompleteList.find((_, index) => index === selectedUserIndex)!
const handleSend = () => { // Replace the hash URL in ![Image](hash:${hash}) with base64 and update the atUserRecord.
const transformMessage = async (message: string) => {
let newMessage = message
const matchList = [...message.matchAll(/!\[Image\]\(hash:([^\s)]+)\)/g)]
matchList?.forEach((match) => {
const base64 = imageRecord.current.get(match[1])
if (base64) {
const base64Syntax = `![Image](${base64})`
const hashSyntax = match[0]
const startIndex = match.index
const endIndex = startIndex + base64Syntax.length - hashSyntax.length
newMessage = newMessage.replace(hashSyntax, base64Syntax)
updateAtUserAtRecord(newMessage, startIndex, endIndex, 0)
}
})
return newMessage
}
const handleSend = async () => {
if (!`${message}`.trim()) { if (!`${message}`.trim()) {
return send(toastDomain.command.WarningCommand('Message cannot be empty.')) return send(toastDomain.command.WarningCommand('Message cannot be empty.'))
} }
const transformedMessage = await transformMessage(message)
const atUsers = [...atUserRecord.current] const atUsers = [...atUserRecord.current]
.map(([userId, positions]) => { .map(([userId, positions]) => {
const user = userList.find((user) => user.userId === userId) const user = userList.find((user) => user.userId === userId)
@ -114,7 +136,7 @@ const Footer: FC = () => {
}) })
.filter(Boolean) .filter(Boolean)
send(roomDomain.command.SendTextMessageCommand({ body: message, atUsers })) send(roomDomain.command.SendTextMessageCommand({ body: transformedMessage, atUsers }))
send(messageInputDomain.command.ClearCommand()) send(messageInputDomain.command.ClearCommand())
} }
@ -211,6 +233,33 @@ const Footer: FC = () => {
}) })
} }
const handleInjectImage = async (file: File) => {
try {
setInputLoading(true)
const blob = await compressImage({ input: file, targetSize: 30 * 1024, outputType: 'image/webp' })
const base64 = await blobToBase64(blob)
const hash = nanoid()
const newMessage = `${message.slice(0, selectionEnd)}![Image](hash:${hash})${message.slice(selectionEnd)}`
const start = selectionStart
const end = selectionEnd + newMessage.length - message.length
updateAtUserAtRecord(newMessage, start, end, 0)
send(messageInputDomain.command.InputCommand(newMessage))
imageRecord.current.set(hash, base64)
requestIdleCallback(() => {
inputRef.current?.setSelectionRange(end, end)
inputRef.current?.focus()
})
} catch (error) {
send(toastDomain.command.ErrorCommand((error as Error).message))
} finally {
setInputLoading(false)
}
}
const handleInjectAtSyntax = (username: string) => { const handleInjectAtSyntax = (username: string) => {
const atIndex = message.lastIndexOf('@', selectionEnd - 1) const atIndex = message.lastIndexOf('@', selectionEnd - 1)
// Determine if there is a space before @ // Determine if there is a space before @
@ -285,11 +334,13 @@ const Footer: FC = () => {
ref={shareRef} ref={shareRef}
value={message} value={message}
onInput={handleInput} onInput={handleInput}
loading={inputLoading}
onKeyDown={handleKeyDown} onKeyDown={handleKeyDown}
maxLength={MESSAGE_MAX_LENGTH} maxLength={MESSAGE_MAX_LENGTH}
></MessageInput> ></MessageInput>
<div className="flex items-center"> <div className="flex items-center">
<EmojiButton onSelect={handleInjectEmoji}></EmojiButton> <EmojiButton onSelect={handleInjectEmoji}></EmojiButton>
<ImageButton disabled={inputLoading} onSelect={handleInjectImage}></ImageButton>
<Button className="ml-auto" size="sm" onClick={handleSend}> <Button className="ml-auto" size="sm" onClick={handleSend}>
<span className="mr-2">Send</span> <span className="mr-2">Send</span>
<CornerDownLeftIcon className="text-slate-400" size={12}></CornerDownLeftIcon> <CornerDownLeftIcon className="text-slate-400" size={12}></CornerDownLeftIcon>

View file

@ -3,7 +3,7 @@ import { type ChangeEvent } from 'react'
import { ImagePlusIcon } from 'lucide-react' import { ImagePlusIcon } from 'lucide-react'
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/Avatar' import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/Avatar'
import { Label } from '@/components/ui/Label' import { Label } from '@/components/ui/Label'
import { cn, compressImage } from '@/utils' import { blobToBase64, cn, compressImage } from '@/utils'
export interface AvatarSelectProps { export interface AvatarSelectProps {
value?: string value?: string
@ -31,15 +31,10 @@ const AvatarSelect = React.forwardRef<HTMLInputElement, AvatarSelectProps>(
* In chrome storage.sync, each key-value pair supports a maximum storage of 8kb * In chrome storage.sync, each key-value pair supports a maximum storage of 8kb
* and all key-value pairs support a maximum storage of 100kb. * and all key-value pairs support a maximum storage of 100kb.
*/ */
const blob = await compressImage({ input: file, targetSize: compressSize }) const blob = await compressImage({ input: file, targetSize: compressSize, outputType: 'image/webp' })
const reader = new FileReader() const base64 = await blobToBase64(blob)
reader.onload = (e) => { onSuccess?.(base64)
const base64 = e.target?.result as string onChange?.(base64)
onSuccess?.(base64)
onChange?.(base64)
}
reader.onerror = () => onError?.(new Error('Failed to read image file.'))
reader.readAsDataURL(blob)
} catch (error) { } catch (error) {
onError?.(error as Error) onError?.(error as Error)
} }
@ -63,7 +58,14 @@ const AvatarSelect = React.forwardRef<HTMLInputElement, AvatarSelectProps>(
<ImagePlusIcon size={30} className="text-slate-400 group-hover:text-slate-500" /> <ImagePlusIcon size={30} className="text-slate-400 group-hover:text-slate-500" />
</AvatarFallback> </AvatarFallback>
</Avatar> </Avatar>
<input ref={ref} hidden disabled={disabled} type="file" accept="image/png,image/jpeg" onChange={handleChange} /> <input
ref={ref}
hidden
disabled={disabled}
type="file"
accept="image/png,image/jpeg,image/webp"
onChange={handleChange}
/>
</Label> </Label>
) )
} }

View file

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200">
<radialGradient id="a4" cx=".66" fx=".66" cy=".3125" fy=".3125" gradientTransform="scale(1.5)">
<stop offset="0" stop-color="currentColor"></stop><stop offset=".3" stop-color="currentColor" stop-opacity=".9"></stop>
<stop offset=".6" stop-color="currentColor" stop-opacity=".6"></stop>
<stop offset=".8" stop-color="currentColor" stop-opacity=".3"></stop>
<stop offset="1" stop-color="currentColor" stop-opacity="0"></stop>
</radialGradient>
<circle transform-origin="center" fill="none" stroke="url(#a4)" stroke-width="15" stroke-linecap="round" stroke-dasharray="200 1000" stroke-dashoffset="0" cx="100" cy="100" r="70">
<animateTransform type="rotate" attributeName="transform" calcMode="spline" dur="2" values="360;0" keyTimes="0;1" keySplines="0 0 1 1" repeatCount="indefinite"></animateTransform>
</circle>
<circle transform-origin="center" fill="none" opacity=".2" stroke="currentColor" stroke-width="15" stroke-linecap="round" cx="100" cy="100" r="70"></circle>
</svg>

After

Width:  |  Height:  |  Size: 1 KiB

10
src/utils/blobToBase64.ts Normal file
View file

@ -0,0 +1,10 @@
const blobToBase64 = (blob: Blob) => {
return new Promise<string>((resolve, reject) => {
const reader = new FileReader()
reader.onload = (e) => resolve(e.target?.result as string)
reader.onerror = () => reject(new Error('Failed to read file.'))
reader.readAsDataURL(blob)
})
}
export default blobToBase64

View file

@ -60,7 +60,7 @@ const compress = async (
const compressImage = async (options: Options) => { const compressImage = async (options: Options) => {
const { input, targetSize, toleranceSize = -1024 } = options const { input, targetSize, toleranceSize = -1024 } = options
if (!['image/jpeg', 'image/png', 'image/webp'].includes(input.type)) { if (!['image/jpeg', 'image/png', 'image/webp'].includes(input.type)) {
throw new Error('Invalid input type, only support image/jpeg, image/png, image/webp') throw new Error('Only PNG, JPEG and WebP image are supported.')
} }
if (input.size <= targetSize) { if (input.size <= targetSize) {

View file

@ -14,3 +14,4 @@ export { default as generateRandomName } from './generateRandomName'
export { default as getCursorPosition } from './getCursorPosition' export { default as getCursorPosition } from './getCursorPosition'
export { default as getTextSimilarity } from './getTextSimilarity' export { default as getTextSimilarity } from './getTextSimilarity'
export { default as getRootNode } from './getRootNode' export { default as getRootNode } from './getRootNode'
export { default as blobToBase64 } from './blobToBase64'