diff --git a/package.json b/package.json index c854e9fb..07275913 100644 --- a/package.json +++ b/package.json @@ -29,11 +29,11 @@ "emoji-picker-react": "4.12.0", "es-toolkit": "1.30.1", "eventemitter3": "5.0.1", - "i18next": "24.1.0", + "i18next": "24.2.0", "i18next-browser-languagedetector": "8.0.2", "i18next-http-backend": "3.0.1", "livekit-client": "2.7.5", - "microsoft-cognitiveservices-speech-sdk": "1.41.0", + "microsoft-cognitiveservices-speech-sdk": "1.42.0", "mobile-detect": "1.4.5", "nosleep.js": "0.12.0", "plugnmeet-protocol-js": "1.0.7-rc.14", @@ -47,9 +47,9 @@ "react-i18next": "15.2.0", "react-player": "2.16.0", "react-redux": "9.2.0", - "react-toastify": "10.0.6", + "react-toastify": "11.0.2", "resumablejs": "1.1.0", - "sanitize-html": "2.13.1", + "sanitize-html": "2.14.0", "validator": "13.12.0", "video.js": "8.21.0" }, @@ -75,7 +75,7 @@ "eslint-plugin-react-hooks": "5.1.0", "eslint-plugin-react-refresh": "0.4.16", "fork-ts-checker-webpack-plugin": "9.0.2", - "globals": "15.13.0", + "globals": "15.14.0", "html-webpack-plugin": "5.6.3", "husky": "9.1.7", "lint-staged": "15.2.11", @@ -90,13 +90,13 @@ "sass-loader": "16.0.4", "size-limit": "11.1.6", "style-loader": "4.0.0", - "tailwindcss": "3.4.16", + "tailwindcss": "3.4.17", "terser-webpack-plugin": "5.3.11", "ts-loader": "9.5.1", "typescript": "5.7.2", - "typescript-eslint": "8.18.0", + "typescript-eslint": "8.18.1", "webpack": "5.97.1", - "webpack-cli": "5.1.4", + "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.0", "webpack-merge": "6.0.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82a4dc30..8fff6d72 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,8 +51,8 @@ importers: specifier: 5.0.1 version: 5.0.1 i18next: - specifier: 24.1.0 - version: 24.1.0(typescript@5.7.2) + specifier: 24.2.0 + version: 24.2.0(typescript@5.7.2) i18next-browser-languagedetector: specifier: 8.0.2 version: 8.0.2 @@ -63,8 +63,8 @@ importers: specifier: 2.7.5 version: 2.7.5 microsoft-cognitiveservices-speech-sdk: - specifier: 1.41.0 - version: 1.41.0 + specifier: 1.42.0 + version: 1.42.0 mobile-detect: specifier: 1.4.5 version: 1.4.5 @@ -97,7 +97,7 @@ importers: version: 4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-i18next: specifier: 15.2.0 - version: 15.2.0(i18next@24.1.0(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.2.0(i18next@24.2.0(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-player: specifier: 2.16.0 version: 2.16.0(react@18.3.1) @@ -105,14 +105,14 @@ importers: specifier: 9.2.0 version: 9.2.0(@types/react@18.3.1)(react@18.3.1)(redux@5.0.1) react-toastify: - specifier: 10.0.6 - version: 10.0.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 11.0.2 + version: 11.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) resumablejs: specifier: 1.1.0 version: 1.1.0 sanitize-html: - specifier: 2.13.1 - version: 2.13.1 + specifier: 2.14.0 + version: 2.14.0 validator: specifier: 13.12.0 version: 13.12.0 @@ -125,7 +125,7 @@ importers: version: 9.17.0 '@pmmmwh/react-refresh-webpack-plugin': specifier: 0.5.15 - version: 0.5.15(react-refresh@0.14.2)(webpack-dev-server@5.2.0)(webpack@5.97.1) + version: 0.5.15(react-refresh@0.14.2)(webpack-dev-server@5.2.0(webpack-cli@6.0.1)(webpack@5.97.1))(webpack@5.97.1(webpack-cli@6.0.1)) '@size-limit/preset-app': specifier: 11.1.6 version: 11.1.6(size-limit@11.1.6) @@ -155,16 +155,16 @@ importers: version: 10.4.20(postcss@8.4.49) clean-webpack-plugin: specifier: 4.0.0 - version: 4.0.0(webpack@5.97.1) + version: 4.0.0(webpack@5.97.1(webpack-cli@6.0.1)) copy-webpack-plugin: specifier: 12.0.2 - version: 12.0.2(webpack@5.97.1) + version: 12.0.2(webpack@5.97.1(webpack-cli@6.0.1)) css-loader: specifier: 7.1.2 - version: 7.1.2(webpack@5.97.1) + version: 7.1.2(webpack@5.97.1(webpack-cli@6.0.1)) css-minimizer-webpack-plugin: specifier: 7.0.0 - version: 7.0.0(webpack@5.97.1) + version: 7.0.0(webpack@5.97.1(webpack-cli@6.0.1)) eslint: specifier: 9.17.0 version: 9.17.0(jiti@2.3.3) @@ -182,13 +182,13 @@ importers: version: 0.4.16(eslint@9.17.0(jiti@2.3.3)) fork-ts-checker-webpack-plugin: specifier: 9.0.2 - version: 9.0.2(typescript@5.7.2)(webpack@5.97.1) + version: 9.0.2(typescript@5.7.2)(webpack@5.97.1(webpack-cli@6.0.1)) globals: - specifier: 15.13.0 - version: 15.13.0 + specifier: 15.14.0 + version: 15.14.0 html-webpack-plugin: specifier: 5.6.3 - version: 5.6.3(webpack@5.97.1) + version: 5.6.3(webpack@5.97.1(webpack-cli@6.0.1)) husky: specifier: 9.1.7 version: 9.1.7 @@ -197,13 +197,13 @@ importers: version: 15.2.11 mini-css-extract-plugin: specifier: 2.9.2 - version: 2.9.2(webpack@5.97.1) + version: 2.9.2(webpack@5.97.1(webpack-cli@6.0.1)) postcss: specifier: 8.4.49 version: 8.4.49 postcss-loader: specifier: 8.1.1 - version: 8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1) + version: 8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(webpack-cli@6.0.1)) postcss-nested: specifier: 7.0.2 version: 7.0.2(postcss@8.4.49) @@ -221,37 +221,37 @@ importers: version: 1.83.0 sass-loader: specifier: 16.0.4 - version: 16.0.4(sass@1.83.0)(webpack@5.97.1) + version: 16.0.4(sass@1.83.0)(webpack@5.97.1(webpack-cli@6.0.1)) size-limit: specifier: 11.1.6 version: 11.1.6 style-loader: specifier: 4.0.0 - version: 4.0.0(webpack@5.97.1) + version: 4.0.0(webpack@5.97.1(webpack-cli@6.0.1)) tailwindcss: - specifier: 3.4.16 - version: 3.4.16 + specifier: 3.4.17 + version: 3.4.17 terser-webpack-plugin: specifier: 5.3.11 - version: 5.3.11(webpack@5.97.1) + version: 5.3.11(webpack@5.97.1(webpack-cli@6.0.1)) ts-loader: specifier: 9.5.1 - version: 9.5.1(typescript@5.7.2)(webpack@5.97.1) + version: 9.5.1(typescript@5.7.2)(webpack@5.97.1(webpack-cli@6.0.1)) typescript: specifier: 5.7.2 version: 5.7.2 typescript-eslint: - specifier: 8.18.0 - version: 8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) + specifier: 8.18.1 + version: 8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) webpack: specifier: 5.97.1 - version: 5.97.1(webpack-cli@5.1.4) + version: 5.97.1(webpack-cli@6.0.1) webpack-cli: - specifier: 5.1.4 - version: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) + specifier: 6.0.1 + version: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) webpack-dev-server: specifier: 5.2.0 - version: 5.2.0(webpack-cli@5.1.4)(webpack@5.97.1) + version: 5.2.0(webpack-cli@6.0.1)(webpack@5.97.1) webpack-merge: specifier: 6.0.1 version: 6.0.1 @@ -284,9 +284,9 @@ packages: '@bufbuild/protobuf@2.2.3': resolution: {integrity: sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==} - '@discoveryjs/json-ext@0.5.7': - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} + '@discoveryjs/json-ext@0.6.3': + resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} + engines: {node: '>=14.17.0'} '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} @@ -867,51 +867,51 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.18.0': - resolution: {integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==} + '@typescript-eslint/eslint-plugin@8.18.1': + resolution: {integrity: sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.18.0': - resolution: {integrity: sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==} + '@typescript-eslint/parser@8.18.1': + resolution: {integrity: sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.18.0': - resolution: {integrity: sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==} + '@typescript-eslint/scope-manager@8.18.1': + resolution: {integrity: sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.18.0': - resolution: {integrity: sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==} + '@typescript-eslint/type-utils@8.18.1': + resolution: {integrity: sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.18.0': - resolution: {integrity: sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==} + '@typescript-eslint/types@8.18.1': + resolution: {integrity: sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.18.0': - resolution: {integrity: sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==} + '@typescript-eslint/typescript-estree@8.18.1': + resolution: {integrity: sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.18.0': - resolution: {integrity: sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==} + '@typescript-eslint/utils@8.18.1': + resolution: {integrity: sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.18.0': - resolution: {integrity: sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==} + '@typescript-eslint/visitor-keys@8.18.1': + resolution: {integrity: sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@videojs/http-streaming@3.16.2': @@ -975,26 +975,26 @@ packages: '@webgpu/types@0.1.38': resolution: {integrity: sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==} - '@webpack-cli/configtest@2.1.1': - resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} - engines: {node: '>=14.15.0'} + '@webpack-cli/configtest@3.0.1': + resolution: {integrity: sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==} + engines: {node: '>=18.12.0'} peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x + webpack: ^5.82.0 + webpack-cli: 6.x.x - '@webpack-cli/info@2.0.2': - resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} - engines: {node: '>=14.15.0'} + '@webpack-cli/info@3.0.1': + resolution: {integrity: sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==} + engines: {node: '>=18.12.0'} peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x + webpack: ^5.82.0 + webpack-cli: 6.x.x - '@webpack-cli/serve@2.0.5': - resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} - engines: {node: '>=14.15.0'} + '@webpack-cli/serve@3.0.1': + resolution: {integrity: sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==} + engines: {node: '>=18.12.0'} peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x + webpack: ^5.82.0 + webpack-cli: 6.x.x webpack-dev-server: '*' peerDependenciesMeta: webpack-dev-server: @@ -1357,10 +1357,6 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -1450,10 +1446,6 @@ packages: cross-fetch@4.0.0: resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -2101,8 +2093,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.13.0: - resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} engines: {node: '>=18'} globby@14.0.2: @@ -2245,8 +2237,8 @@ packages: i18next-http-backend@3.0.1: resolution: {integrity: sha512-XT2lYSkbAtDE55c6m7CtKxxrsfuRQO3rUfHzj8ZyRtY9CkIX3aRGwXGTkUhpGWce+J8n7sfu3J0f2wTzo7Lw0A==} - i18next@24.1.0: - resolution: {integrity: sha512-suKlX82AlptkMUO5YRfaAeH4FQyyKvR66jNaubTMiyPPMx7INU6PXAiy3PGULc0q6K+t9nxmDf/TRj9KjAivmw==} + i18next@24.2.0: + resolution: {integrity: sha512-ArJJTS1lV6lgKH7yEf4EpgNZ7+THl7bsGxxougPYiXRTJ/Fe1j08/TBpV9QsXCIYVfdE/HWG/xLezJ5DOlfBOA==} peerDependencies: typescript: ^5 peerDependenciesMeta: @@ -2608,8 +2600,8 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - microsoft-cognitiveservices-speech-sdk@1.41.0: - resolution: {integrity: sha512-96jyuCBK5TDQm9sHriYuR0UeJ5OsE2WuggDgYSn8L72AsgmjOZxM2BlxgS5BLZuwhIOw91KSc6l1eoTqs+zwfg==} + microsoft-cognitiveservices-speech-sdk@1.42.0: + resolution: {integrity: sha512-ERrS1rwPPCN1foOwlJv3XmKO4NtBchjW+zYPQBgv4ffRfh87DcxuISXICPDjvlAU61w/r+y6p1W0pnX3gwVZ7A==} mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} @@ -3364,11 +3356,11 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-toastify@10.0.6: - resolution: {integrity: sha512-yYjp+omCDf9lhZcrZHKbSq7YMuK0zcYkDFTzfRFgTXkTFHZ1ToxwAonzA4JI5CxA91JpjFLmwEsZEgfYfOqI1A==} + react-toastify@11.0.2: + resolution: {integrity: sha512-GjHuGaiXMvbls3ywqv8XdWONwrcO4DXCJIY1zVLkHU73gEElKvTTXNI5Vom3s/k/M8hnkrfsqgBSX3OwmlonbA==} peerDependencies: - react: '>=18' - react-dom: '>=18' + react: ^18 || ^19 + react-dom: ^18 || ^19 react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} @@ -3492,8 +3484,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sanitize-html@2.13.1: - resolution: {integrity: sha512-ZXtKq89oue4RP7abL9wp/9URJcqQNABB5GGJ2acW1sdO8JTVl92f4ygD7Yc9Ze09VAZhnt2zegeU0tbNsdcLYg==} + sanitize-html@2.14.0: + resolution: {integrity: sha512-CafX+IUPxZshXqqRaG9ZClSlfPVjSxI0td7n07hk8QO2oO+9JDnlcL8iM8TWeOXOIBFgIOx6zioTzM53AOMn3g==} sass-loader@16.0.4: resolution: {integrity: sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==} @@ -3768,8 +3760,8 @@ packages: tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tailwindcss@3.4.16: - resolution: {integrity: sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==} + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} hasBin: true @@ -3886,8 +3878,8 @@ packages: typed-emitter@2.1.0: resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} - typescript-eslint@8.18.0: - resolution: {integrity: sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ==} + typescript-eslint@8.18.1: + resolution: {integrity: sha512-Mlaw6yxuaDEPQvb/2Qwu3/TfgeBHy9iTJ3mTwe7OvpPmF6KPQjVOfGyEJpPv6Ez2C34OODChhXrzYw/9phI0MQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3988,18 +3980,15 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webpack-cli@5.1.4: - resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} - engines: {node: '>=14.15.0'} + webpack-cli@6.0.1: + resolution: {integrity: sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==} + engines: {node: '>=18.12.0'} hasBin: true peerDependencies: - '@webpack-cli/generators': '*' - webpack: 5.x.x + webpack: ^5.82.0 webpack-bundle-analyzer: '*' webpack-dev-server: '*' peerDependenciesMeta: - '@webpack-cli/generators': - optional: true webpack-bundle-analyzer: optional: true webpack-dev-server: @@ -4027,10 +4016,6 @@ packages: webpack-cli: optional: true - webpack-merge@5.10.0: - resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} - engines: {node: '>=10.0.0'} - webpack-merge@6.0.1: resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} engines: {node: '>=18.0.0'} @@ -4134,11 +4119,6 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.6.0: - resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} - engines: {node: '>= 14'} - hasBin: true - yaml@2.6.1: resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} engines: {node: '>= 14'} @@ -4196,7 +4176,7 @@ snapshots: '@bufbuild/protobuf@2.2.3': {} - '@discoveryjs/json-ext@0.5.7': {} + '@discoveryjs/json-ext@0.6.3': {} '@eslint-community/eslint-utils@4.4.0(eslint@9.17.0(jiti@2.3.3))': dependencies: @@ -4446,7 +4426,7 @@ snapshots: '@pkgr/core@0.1.1': {} - '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(webpack-dev-server@5.2.0)(webpack@5.97.1)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(webpack-dev-server@5.2.0(webpack-cli@6.0.1)(webpack@5.97.1))(webpack@5.97.1(webpack-cli@6.0.1))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.38.1 @@ -4456,9 +4436,9 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) optionalDependencies: - webpack-dev-server: 5.2.0(webpack-cli@5.1.4)(webpack@5.97.1) + webpack-dev-server: 5.2.0(webpack-cli@6.0.1)(webpack@5.97.1) '@puppeteer/browsers@2.2.2': dependencies: @@ -4829,14 +4809,14 @@ snapshots: '@types/node': 22.7.5 optional: true - '@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2))(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2))(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) - '@typescript-eslint/scope-manager': 8.18.0 - '@typescript-eslint/type-utils': 8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.18.0 + '@typescript-eslint/parser': 8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.18.1 + '@typescript-eslint/type-utils': 8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.1 eslint: 9.17.0(jiti@2.3.3) graphemer: 1.4.0 ignore: 5.3.2 @@ -4846,41 +4826,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2)': + '@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 8.18.0 - '@typescript-eslint/types': 8.18.0 - '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.18.0 - debug: 4.3.7 + '@typescript-eslint/scope-manager': 8.18.1 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.1 + debug: 4.4.0 eslint: 9.17.0(jiti@2.3.3) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.18.0': + '@typescript-eslint/scope-manager@8.18.1': dependencies: - '@typescript-eslint/types': 8.18.0 - '@typescript-eslint/visitor-keys': 8.18.0 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/visitor-keys': 8.18.1 - '@typescript-eslint/type-utils@8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2)': + '@typescript-eslint/type-utils@8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) - debug: 4.3.7 + '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) + debug: 4.4.0 eslint: 9.17.0(jiti@2.3.3) ts-api-utils: 1.3.0(typescript@5.7.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.18.0': {} + '@typescript-eslint/types@8.18.1': {} - '@typescript-eslint/typescript-estree@8.18.0(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@8.18.1(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 8.18.0 - '@typescript-eslint/visitor-keys': 8.18.0 - debug: 4.3.7 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/visitor-keys': 8.18.1 + debug: 4.4.0 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 @@ -4890,20 +4870,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2)': + '@typescript-eslint/utils@8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.17.0(jiti@2.3.3)) - '@typescript-eslint/scope-manager': 8.18.0 - '@typescript-eslint/types': 8.18.0 - '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.18.1 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) eslint: 9.17.0(jiti@2.3.3) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.18.0': + '@typescript-eslint/visitor-keys@8.18.1': dependencies: - '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/types': 8.18.1 eslint-visitor-keys: 4.2.0 '@videojs/http-streaming@3.16.2(video.js@8.21.0)': @@ -5006,22 +4986,22 @@ snapshots: '@webgpu/types@0.1.38': {} - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.97.1)': + '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack@5.97.1(webpack-cli@6.0.1))': dependencies: - webpack: 5.97.1(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) + webpack: 5.97.1(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.97.1)': + '@webpack-cli/info@3.0.1(webpack-cli@6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack@5.97.1(webpack-cli@6.0.1))': dependencies: - webpack: 5.97.1(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) + webpack: 5.97.1(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.0)(webpack@5.97.1)': + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack-dev-server@5.2.0(webpack-cli@6.0.1)(webpack@5.97.1))(webpack@5.97.1(webpack-cli@6.0.1))': dependencies: - webpack: 5.97.1(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) + webpack: 5.97.1(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) optionalDependencies: - webpack-dev-server: 5.2.0(webpack-cli@5.1.4)(webpack@5.97.1) + webpack-dev-server: 5.2.0(webpack-cli@6.0.1)(webpack@5.97.1) '@xmldom/xmldom@0.8.10': {} @@ -5053,7 +5033,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -5340,10 +5320,10 @@ snapshots: dependencies: source-map: 0.6.1 - clean-webpack-plugin@4.0.0(webpack@5.97.1): + clean-webpack-plugin@4.0.0(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: del: 4.1.1 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) cli-cursor@5.0.0: dependencies: @@ -5396,8 +5376,6 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@10.0.1: {} - commander@12.1.0: {} commander@2.20.3: {} @@ -5440,7 +5418,7 @@ snapshots: copy-text-to-clipboard@3.2.0: {} - copy-webpack-plugin@12.0.2(webpack@5.97.1): + copy-webpack-plugin@12.0.2(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: fast-glob: 3.3.2 glob-parent: 6.0.2 @@ -5448,7 +5426,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) core-js-pure@3.38.1: {} @@ -5480,12 +5458,6 @@ snapshots: transitivePeerDependencies: - encoding - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -5496,7 +5468,7 @@ snapshots: dependencies: postcss: 8.4.49 - css-loader@7.1.2(webpack@5.97.1): + css-loader@7.1.2(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 @@ -5507,9 +5479,9 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) - css-minimizer-webpack-plugin@7.0.0(webpack@5.97.1): + css-minimizer-webpack-plugin@7.0.0(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 cssnano: 7.0.6(postcss@8.4.49) @@ -5517,7 +5489,7 @@ snapshots: postcss: 8.4.49 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) css-select@4.3.0: dependencies: @@ -6071,7 +6043,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.2)(webpack@5.97.1): + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.2)(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: '@babel/code-frame': 7.25.7 chalk: 4.1.2 @@ -6086,7 +6058,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.7.2 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) form-data@4.0.1: dependencies: @@ -6183,7 +6155,7 @@ snapshots: globals@14.0.0: {} - globals@15.13.0: {} + globals@15.14.0: {} globby@14.0.2: dependencies: @@ -6257,7 +6229,7 @@ snapshots: dependencies: void-elements: 3.1.0 - html-webpack-plugin@5.6.3(webpack@5.97.1): + html-webpack-plugin@5.6.3(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -6265,7 +6237,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) htmlparser2@6.1.0: dependencies: @@ -6330,7 +6302,7 @@ snapshots: https-proxy-agent@4.0.0: dependencies: agent-base: 5.1.1 - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -6357,7 +6329,7 @@ snapshots: transitivePeerDependencies: - encoding - i18next@24.1.0(typescript@5.7.2): + i18next@24.2.0(typescript@5.7.2): dependencies: '@babel/runtime': 7.25.7 optionalDependencies: @@ -6687,7 +6659,7 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - microsoft-cognitiveservices-speech-sdk@1.41.0: + microsoft-cognitiveservices-speech-sdk@1.42.0: dependencies: '@types/webrtc': 0.0.37 agent-base: 6.0.2 @@ -6718,11 +6690,11 @@ snapshots: dependencies: dom-walk: 0.1.2 - mini-css-extract-plugin@2.9.2(webpack@5.97.1): + mini-css-extract-plugin@2.9.2(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) minimalistic-assert@1.0.1: {} @@ -7045,18 +7017,18 @@ snapshots: postcss-load-config@4.0.2(postcss@8.4.49): dependencies: lilconfig: 3.1.3 - yaml: 2.6.0 + yaml: 2.6.1 optionalDependencies: postcss: 8.4.49 - postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1): + postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: cosmiconfig: 9.0.0(typescript@5.7.2) jiti: 1.21.6 postcss: 8.4.49 semver: 7.6.3 optionalDependencies: - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) transitivePeerDependencies: - typescript @@ -7340,11 +7312,11 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-i18next@15.2.0(i18next@24.1.0(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-i18next@15.2.0(i18next@24.2.0(typescript@5.7.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.25.7 html-parse-stringify: 3.0.1 - i18next: 24.1.0(typescript@5.7.2) + i18next: 24.2.0(typescript@5.7.2) react: 18.3.1 optionalDependencies: react-dom: 18.3.1(react@18.3.1) @@ -7376,7 +7348,7 @@ snapshots: react-refresh@0.14.2: {} - react-toastify@10.0.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-toastify@11.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: clsx: 2.1.1 react: 18.3.1 @@ -7496,7 +7468,7 @@ snapshots: safer-buffer@2.1.2: {} - sanitize-html@2.13.1: + sanitize-html@2.14.0: dependencies: deepmerge: 4.3.1 escape-string-regexp: 4.0.0 @@ -7505,12 +7477,12 @@ snapshots: parse-srcset: 1.0.2 postcss: 8.4.49 - sass-loader@16.0.4(sass@1.83.0)(webpack@5.97.1): + sass-loader@16.0.4(sass@1.83.0)(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: neo-async: 2.6.2 optionalDependencies: sass: 1.83.0 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) sass@1.83.0: dependencies: @@ -7773,9 +7745,9 @@ snapshots: strip-json-comments@3.1.1: {} - style-loader@4.0.0(webpack@5.97.1): + style-loader@4.0.0(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) stylehacks@7.0.4(postcss@8.4.49): dependencies: @@ -7824,7 +7796,7 @@ snapshots: tabbable@6.2.0: {} - tailwindcss@3.4.16: + tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -7875,14 +7847,14 @@ snapshots: fast-fifo: 1.3.2 streamx: 2.20.1 - terser-webpack-plugin@5.3.11(webpack@5.97.1): + terser-webpack-plugin@5.3.11(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 terser: 5.34.1 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) terser@5.34.1: dependencies: @@ -7936,7 +7908,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-loader@9.5.1(typescript@5.7.2)(webpack@5.97.1): + ts-loader@9.5.1(typescript@5.7.2)(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.17.1 @@ -7944,7 +7916,7 @@ snapshots: semver: 7.6.3 source-map: 0.7.4 typescript: 5.7.2 - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) tslib@2.7.0: {} @@ -7963,11 +7935,11 @@ snapshots: optionalDependencies: rxjs: 7.8.1 - typescript-eslint@8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2): + typescript-eslint@8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2))(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) - '@typescript-eslint/parser': 8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2))(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) + '@typescript-eslint/parser': 8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(jiti@2.3.3))(typescript@5.7.2) eslint: 9.17.0(jiti@2.3.3) typescript: 5.7.2 transitivePeerDependencies: @@ -8057,26 +8029,26 @@ snapshots: webidl-conversions@3.0.1: {} - webpack-cli@5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1): + webpack-cli@6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1): dependencies: - '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.97.1) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.97.1) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.0)(webpack@5.97.1) + '@discoveryjs/json-ext': 0.6.3 + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack@5.97.1(webpack-cli@6.0.1)) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack@5.97.1(webpack-cli@6.0.1)) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack-dev-server@5.2.0(webpack-cli@6.0.1)(webpack@5.97.1))(webpack@5.97.1(webpack-cli@6.0.1)) colorette: 2.0.20 - commander: 10.0.1 - cross-spawn: 7.0.3 + commander: 12.1.0 + cross-spawn: 7.0.6 envinfo: 7.14.0 fastest-levenshtein: 1.0.16 import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.97.1(webpack-cli@5.1.4) - webpack-merge: 5.10.0 + webpack: 5.97.1(webpack-cli@6.0.1) + webpack-merge: 6.0.1 optionalDependencies: - webpack-dev-server: 5.2.0(webpack-cli@5.1.4)(webpack@5.97.1) + webpack-dev-server: 5.2.0(webpack-cli@6.0.1)(webpack@5.97.1) - webpack-dev-middleware@7.4.2(webpack@5.97.1): + webpack-dev-middleware@7.4.2(webpack@5.97.1(webpack-cli@6.0.1)): dependencies: colorette: 2.0.20 memfs: 4.14.0 @@ -8085,9 +8057,9 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.97.1(webpack-cli@5.1.4) + webpack: 5.97.1(webpack-cli@6.0.1) - webpack-dev-server@5.2.0(webpack-cli@5.1.4)(webpack@5.97.1): + webpack-dev-server@5.2.0(webpack-cli@6.0.1)(webpack@5.97.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -8114,23 +8086,17 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.2(webpack@5.97.1) + webpack-dev-middleware: 7.4.2(webpack@5.97.1(webpack-cli@6.0.1)) ws: 8.18.0 optionalDependencies: - webpack: 5.97.1(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) + webpack: 5.97.1(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-merge@5.10.0: - dependencies: - clone-deep: 4.0.1 - flat: 5.0.2 - wildcard: 2.0.1 - webpack-merge@6.0.1: dependencies: clone-deep: 4.0.1 @@ -8139,7 +8105,7 @@ snapshots: webpack-sources@3.2.3: {} - webpack@5.97.1(webpack-cli@5.1.4): + webpack@5.97.1(webpack-cli@6.0.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -8161,11 +8127,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(webpack@5.97.1) + terser-webpack-plugin: 5.3.11(webpack@5.97.1(webpack-cli@6.0.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.97.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -8226,8 +8192,6 @@ snapshots: yallist@4.0.0: {} - yaml@2.6.0: {} - yaml@2.6.1: {} yargs-parser@20.2.9: {} diff --git a/src/components/header/durationView.tsx b/src/components/header/durationView.tsx index 64351798..93051731 100644 --- a/src/components/header/durationView.tsx +++ b/src/components/header/durationView.tsx @@ -1,8 +1,8 @@ import React, { useEffect, useState } from 'react'; -import { toast } from 'react-toastify'; import { useTranslation } from 'react-i18next'; import { store } from '../../store'; +import { displayInstantNotification } from '../../helpers/utils'; interface IDurationViewProps { duration: number; @@ -59,13 +59,11 @@ const DurationView = ({ duration }: IDurationViewProps) => { case '30:00': case '10:00': case '5:00': - toast( + displayInstantNotification( t('notifications.room-will-end-in', { minutes: remaining, }), - { - type: 'warning', - }, + 'warning', ); } }, [isRecorder, remaining, t]); diff --git a/src/components/main-area/index.tsx b/src/components/main-area/index.tsx index 7cc603bc..79cc2e5a 100644 --- a/src/components/main-area/index.tsx +++ b/src/components/main-area/index.tsx @@ -69,6 +69,12 @@ const MainArea = () => { setAllowChat(false); dispatch(updateIsActiveChatPanel(false)); } + + // ask for notification permission + // we'll not bother if permission was rejected before + if ('Notification' in window && Notification.permission !== 'denied') { + Notification.requestPermission().then(); + } }, [dispatch]); useEffect(() => { diff --git a/src/components/participants/participant/icons/menu-items/mic.tsx b/src/components/participants/participant/icons/menu-items/mic.tsx index 091a1af6..3a11293e 100644 --- a/src/components/participants/participant/icons/menu-items/mic.tsx +++ b/src/components/participants/participant/icons/menu-items/mic.tsx @@ -58,6 +58,7 @@ const MicMenuItem = ({ userId }: IMicMenuItemProps) => { name: session.currentUser?.name, task: t(task), }), + userId, ); toast( diff --git a/src/components/participants/participant/icons/menu-items/webcam.tsx b/src/components/participants/participant/icons/menu-items/webcam.tsx index f67b6e17..160b0368 100644 --- a/src/components/participants/participant/icons/menu-items/webcam.tsx +++ b/src/components/participants/participant/icons/menu-items/webcam.tsx @@ -44,6 +44,7 @@ const WebcamMenuItem = ({ userId }: IWebcamMenuItemProps) => { name: session.currentUser?.name, task: t(task), }), + userId, ); toast( diff --git a/src/helpers/hooks/useWatchVisibilityChange.tsx b/src/helpers/hooks/useWatchVisibilityChange.tsx index 5f25fc71..43e0707d 100644 --- a/src/helpers/hooks/useWatchVisibilityChange.tsx +++ b/src/helpers/hooks/useWatchVisibilityChange.tsx @@ -4,12 +4,15 @@ import { AnalyticsEventType, DataMsgBodyType, } from 'plugnmeet-protocol-js'; +import { useDispatch } from 'react-redux'; import { getNatsConn } from '../nats'; +import { updateIsPNMWindowTabVisible } from '../../store/slices/roomSettingsSlice'; const useWatchVisibilityChange = () => { const [hidden, setHidden] = useState(false); const conn = getNatsConn(); + const dispatch = useDispatch(); useEffect(() => { const onBlur = () => { @@ -82,6 +85,7 @@ const useWatchVisibilityChange = () => { AnalyticsEventType.USER, data, ); + dispatch(updateIsPNMWindowTabVisible(!hidden)); //eslint-disable-next-line }, [hidden]); }; diff --git a/src/helpers/nats/HandleDataMessage.ts b/src/helpers/nats/HandleDataMessage.ts index aedbc56e..10c381c9 100644 --- a/src/helpers/nats/HandleDataMessage.ts +++ b/src/helpers/nats/HandleDataMessage.ts @@ -1,4 +1,3 @@ -import { toast } from 'react-toastify'; import { DataChannelMessage, DataMsgBodyType } from 'plugnmeet-protocol-js'; import ConnectNats from './ConnectNats'; @@ -15,6 +14,7 @@ import { addExternalMediaPlayerAction, externalMediaPlayerSeekTo, } from '../../store/slices/externalMediaPlayer'; +import { displayInstantNotification } from '../utils'; export default class HandleDataMessage { private _that: ConnectNats; @@ -47,19 +47,13 @@ export default class HandleDataMessage { if (payload.fromUserId === this._that.userId || this._that.isRecorder) { return; } - toast(payload.message, { - toastId: 'info-status', - type: 'info', - }); + displayInstantNotification(payload.message, 'info'); break; case DataMsgBodyType.ALERT: if (payload.fromUserId === this._that.userId || this._that.isRecorder) { return; } - toast(payload.message, { - toastId: 'alert-status', - type: 'warning', - }); + displayInstantNotification(payload.message, 'warning'); break; case DataMsgBodyType.EXTERNAL_MEDIA_PLAYER_EVENTS: if (payload.fromUserId === this._that.userId) { diff --git a/src/helpers/nats/HandleParticipants.ts b/src/helpers/nats/HandleParticipants.ts index c39f57ee..0ba1dec4 100644 --- a/src/helpers/nats/HandleParticipants.ts +++ b/src/helpers/nats/HandleParticipants.ts @@ -1,4 +1,3 @@ -import { toast } from 'react-toastify'; import { ConnectionQuality, RemoteTrackPublication, @@ -38,6 +37,7 @@ import { import { updatePlayAudioNotification } from '../../store/slices/roomSettingsSlice'; import { removeOneSpeaker } from '../../store/slices/activeSpeakersSlice'; import { getMediaServerConn } from '../livekit/utils'; +import { displayInstantNotification } from '../utils'; export default class HandleParticipants { private _that: ConnectNats; @@ -322,15 +322,11 @@ export default class HandleParticipants { } // also play notification store.dispatch(updatePlayAudioNotification(true)); - - toast( + displayInstantNotification( i18n.t('waiting-room.user-waiting', { name: name, }), - { - type: 'info', - toastId: 'user-waiting', - }, + 'info', ); } } diff --git a/src/helpers/nats/HandleRoomData.ts b/src/helpers/nats/HandleRoomData.ts index a70dd6a8..d90808bd 100644 --- a/src/helpers/nats/HandleRoomData.ts +++ b/src/helpers/nats/HandleRoomData.ts @@ -16,7 +16,7 @@ import i18n from '../i18n'; import { addChatMessage } from '../../store/slices/chatMessagesSlice'; import { handleToAddWhiteboardUploadedOfficeNewFile } from '../../components/whiteboard/helpers/utils'; import { WhiteboardFileConversionRes } from '../../store/slices/interfaces/whiteboard'; -import { sleep } from '../utils'; +import { displayInstantNotification, sleep } from '../utils'; export default class HandleRoomData { private _room: ICurrentRoom; @@ -86,13 +86,15 @@ export default class HandleRoomData { const isActiveRecording = store.getState().session.isActiveRecording; if (!isActiveRecording && this._room.metadata?.isRecording) { - toast(i18n.t('room-metadata.session-recording'), { - type: 'info', - }); + displayInstantNotification( + i18n.t('room-metadata.session-recording'), + 'info', + ); } else if (isActiveRecording && !this._room.metadata?.isRecording) { - toast(i18n.t('room-metadata.session-not-recording'), { - type: 'info', - }); + displayInstantNotification( + i18n.t('room-metadata.session-not-recording'), + 'info', + ); } }; @@ -105,13 +107,9 @@ export default class HandleRoomData { const isActiveRtmpBroadcasting = store.getState().session.isActiveRtmpBroadcasting; if (!isActiveRtmpBroadcasting && this._room.metadata?.isActiveRtmp) { - toast(i18n.t('room-metadata.rtmp-started'), { - type: 'info', - }); + displayInstantNotification(i18n.t('room-metadata.rtmp-started'), 'info'); } else if (isActiveRtmpBroadcasting && !this._room.metadata?.isActiveRtmp) { - toast(i18n.t('room-metadata.rtmp-stopped'), { - type: 'info', - }); + displayInstantNotification(i18n.t('room-metadata.rtmp-stopped'), 'info'); } }; diff --git a/src/helpers/nats/HandleSystemData.tsx b/src/helpers/nats/HandleSystemData.tsx index 37290d80..069905ef 100644 --- a/src/helpers/nats/HandleSystemData.tsx +++ b/src/helpers/nats/HandleSystemData.tsx @@ -21,6 +21,7 @@ import NewPollMsg from '../../components/extra-pages/newPollMsg'; import { updateReceivedInvitationFor } from '../../store/slices/breakoutRoomSlice'; import { breakoutRoomApi } from '../../store/services/breakoutRoomApi'; import { addChatMessage } from '../../store/slices/chatMessagesSlice'; +import { displayInstantNotification } from '../utils'; export default class HandleSystemData { constructor() {} @@ -33,28 +34,19 @@ export default class HandleSystemData { const nt = fromJsonString(NatsSystemNotificationSchema, data); switch (nt.type) { case NatsSystemNotificationTypes.NATS_SYSTEM_NOTIFICATION_INFO: - toast(i18n.t(nt.msg), { - toastId: 'info-status', - type: 'info', - }); + displayInstantNotification(i18n.t(nt.msg), 'info'); if (nt.withSound) { this.playNotification(); } break; case NatsSystemNotificationTypes.NATS_SYSTEM_NOTIFICATION_WARNING: - toast(i18n.t(nt.msg), { - toastId: 'info-status', - type: 'warning', - }); + displayInstantNotification(i18n.t(nt.msg), 'warning'); if (nt.withSound) { this.playNotification(); } break; case NatsSystemNotificationTypes.NATS_SYSTEM_NOTIFICATION_ERROR: - toast(i18n.t(nt.msg), { - toastId: 'info-status', - type: 'error', - }); + displayInstantNotification(i18n.t(nt.msg), 'error'); if (nt.withSound) { this.playNotification(); } @@ -74,13 +66,11 @@ export default class HandleSystemData { }), ); } else { - toast( + displayInstantNotification( i18n.t('speech-services.token-generation-failed', { error: res.msg, }), - { - type: 'error', - }, + 'error', ); } }; @@ -88,8 +78,9 @@ export default class HandleSystemData { public handlePoll = (payload: NatsMsgServerToClient) => { switch (payload.event) { case NatsMsgServerToClientEvents.POLL_CREATED: + displayInstantNotification(i18n.t('polls.new-poll'), 'info'); toast(, { - toastId: 'info-status', + toastId: 'poll-status', type: 'info', autoClose: false, }); @@ -126,6 +117,10 @@ export default class HandleSystemData { switch (payload.event) { case NatsMsgServerToClientEvents.JOIN_BREAKOUT_ROOM: if (payload.msg !== '') { + displayInstantNotification( + i18n.t('breakout-room.invitation-msg'), + 'info', + ); store.dispatch(updateReceivedInvitationFor(payload.msg)); store.dispatch(breakoutRoomApi.util.invalidateTags(['My_Rooms'])); } diff --git a/src/helpers/utils.ts b/src/helpers/utils.ts index 75b84dcb..038e4627 100644 --- a/src/helpers/utils.ts +++ b/src/helpers/utils.ts @@ -1,5 +1,6 @@ import { AudioPresets, ScreenSharePresets, VideoPresets } from 'livekit-client'; import { errors } from '@nats-io/nats-core'; +import { toast, TypeOptions } from 'react-toastify'; import i18n from './i18n'; import { store } from '../store'; @@ -282,3 +283,30 @@ export function createEmptyVideoStreamTrack(name: string) { return emptyStreamTrack; } + +export const displayInstantNotification = ( + message: string, + type: TypeOptions, +) => { + toast(message, { + toastId: type + '-status', + type, + }); + + const isPNMWindowTabVisible = + store.getState().roomSettings.isPNMWindowTabVisible; + // if not visible, then we can show notification + if ( + !isPNMWindowTabVisible && + 'Notification' in window && + Notification.permission === 'granted' + ) { + // we'll see if website has any favicon icon, then we'll use it + const favicon = document.querySelector("link[rel*='icon']"); + let icon: string | undefined = undefined; + if (favicon) { + icon = favicon.getAttribute('href') ?? undefined; + } + new Notification(message, { icon }); + } +}; diff --git a/src/store/slices/interfaces/roomSettings.ts b/src/store/slices/interfaces/roomSettings.ts index 04ae3506..9aaab7d8 100644 --- a/src/store/slices/interfaces/roomSettings.ts +++ b/src/store/slices/interfaces/roomSettings.ts @@ -38,6 +38,7 @@ export interface IRoomSettings { visibleHeader: boolean; visibleFooter: boolean; azureTokenInfo?: AzureTokenInfo; + isPNMWindowTabVisible: boolean; } export interface IMediaDevice { diff --git a/src/store/slices/roomSettingsSlice.ts b/src/store/slices/roomSettingsSlice.ts index a3ed97dd..30eca5fd 100644 --- a/src/store/slices/roomSettingsSlice.ts +++ b/src/store/slices/roomSettingsSlice.ts @@ -45,6 +45,7 @@ const initialState: IRoomSettings = { columnCameraPosition: ColumnCameraPosition.LEFT, visibleHeader: true, visibleFooter: true, + isPNMWindowTabVisible: true, }; const roomSettingsSlice = createSlice({ @@ -164,6 +165,9 @@ const roomSettingsSlice = createSlice({ state.azureTokenInfo.token = ''; } }, + updateIsPNMWindowTabVisible: (state, action: PayloadAction) => { + state.isPNMWindowTabVisible = action.payload; + }, }, }); @@ -195,6 +199,7 @@ export const { updateAzureTokenInfo, cleanAzureToken, updateIsNatsServerConnected, + updateIsPNMWindowTabVisible, } = roomSettingsSlice.actions; export default roomSettingsSlice.reducer;