From 46fde56c4593eb26471eb9f1d52ea8dc89a7d702 Mon Sep 17 00:00:00 2001 From: the-madhankumar Date: Sun, 7 Jun 2026 21:16:45 +0530 Subject: [PATCH 1/3] feat: implement custom mobile PWA install prompt with dual-lock device detection and sw compliance --- index.html | 41 ++++---- package-lock.json | 174 +++++++++++++------------------ public/image_192.png | Bin 0 -> 18815 bytes public/image_512.png | Bin 0 -> 48489 bytes public/manifest.json | 8 +- public/sw.js | 43 ++++++++ src/App.tsx | 3 +- src/components/InstallPrompt.tsx | 109 +++++++++++++++++++ src/main.tsx | 14 +++ vite.config.ts | 2 +- 10 files changed, 266 insertions(+), 128 deletions(-) create mode 100644 public/image_192.png create mode 100644 public/image_512.png create mode 100644 public/sw.js create mode 100644 src/components/InstallPrompt.tsx diff --git a/index.html b/index.html index ff863cd..5fe3f70 100644 --- a/index.html +++ b/index.html @@ -1,19 +1,24 @@ - - - - - - - - - - - - FreshScan AI | Edge-AI Fish Freshness Assessment - - -
- - - + + + + + + + + + + + + FreshScan AI | Edge-AI Fish Freshness Assessment + + + +
+ + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 884076d..12a9888 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "frontend", - "version": "1.2.0", + "version": "1.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "frontend", - "version": "1.2.0", + "version": "1.3.0", "dependencies": { "@tailwindcss/vite": "^4.2.2", "framer-motion": "^12.38.0", @@ -39,13 +39,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -54,9 +54,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, "license": "MIT", "engines": { @@ -95,14 +95,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -112,14 +112,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -129,9 +129,9 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "license": "MIT", "engines": { @@ -139,29 +139,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -171,9 +171,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", "engines": { @@ -181,9 +181,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", "engines": { @@ -191,9 +191,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, "license": "MIT", "engines": { @@ -215,13 +215,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -231,33 +231,33 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", "debug": "^4.3.1" }, "engines": { @@ -265,53 +265,19 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@emnapi/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", - "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@epic-web/invariant": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", @@ -1508,9 +1474,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, @@ -1899,7 +1865,7 @@ "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "acorn": "bin/acorn" diff --git a/public/image_192.png b/public/image_192.png new file mode 100644 index 0000000000000000000000000000000000000000..71b86f4c7352375dfc00b2c0e9eb2879b86442c9 GIT binary patch literal 18815 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 Gg8mNx69|_8 literal 0 HcmV?d00001 diff --git a/public/manifest.json b/public/manifest.json index 6f54492..ca5ff90 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -9,14 +9,14 @@ "orientation": "portrait", "icons": [ { - "src": "/fish.gif", + "src": "/image_192.png", "sizes": "192x192", - "type": "image/gif" + "type": "image/png" }, { - "src": "/fish.gif", + "src": "/image_512.png", "sizes": "512x512", - "type": "image/gif" + "type": "image/png" } ] } diff --git a/public/sw.js b/public/sw.js new file mode 100644 index 0000000..5f48162 --- /dev/null +++ b/public/sw.js @@ -0,0 +1,43 @@ +const CACHE_NAME = "freshscan-pwa-v1"; +const ASSETS_TO_CACHE = [ + "/", + "/index.html" +]; + +self.addEventListener('install', (event) => { + event.waitUntil( + caches.open(CACHE_NAME).then((cache) => { + return cache.addAll(ASSETS_TO_CACHE); + }) + ); + self.skipWaiting(); +}); + +self.addEventListener('activate', (event) => { + event.waitUntil( + caches.keys().then((cacheNames) => { + return Promise.all( + cacheNames.map((cache) => { + if (cache !== CACHE_NAME) { + console.log('[Service Worker] Clearing old cache:', cache); + return caches.delete(cache); + } + }) + ); + }) + ); + self.clients.claim(); +}); + +self.addEventListener('fetch', (event) => { + if (!event.request.url.startsWith(self.location.origin)) return; + + event.respondWith( + fetch(event.request) + .catch(() => { + return caches.match(event.request).then((response) => { + return response || caches.match('/index.html'); + }); + }) + ); +}); \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 14f81c6..f1baf45 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -10,6 +10,7 @@ import MarketMapPage from './pages/MarketMapPage'; import ResultsPage from './pages/ResultsPage'; import PostHogPageView from './components/PostHogPageView'; import NotFound from './pages/NotFound'; +import InstallPrompt from './components/InstallPrompt'; export default function App() { return ( @@ -19,7 +20,7 @@ export default function App() { {/* Fires a $pageview event to PostHog on every SPA route change */} - + }> } /> diff --git a/src/components/InstallPrompt.tsx b/src/components/InstallPrompt.tsx new file mode 100644 index 0000000..8b3f86c --- /dev/null +++ b/src/components/InstallPrompt.tsx @@ -0,0 +1,109 @@ +import { useState, useEffect } from 'react'; + +export default function InstallPrompt() { + console.log("InstallPrompt Rendered"); + const [showInstallPrompt, setShowInstallPrompt] = useState(false); + const [deferredPrompt, setDeferredPrompt] = useState(null); + + useEffect(() => { + const handler = (e: any) => { + e.preventDefault(); + + const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera; + + const isMobileOrTablet = /android|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(userAgent); + const hasTouchScreen = window.matchMedia('(pointer: coarse)').matches; + + if (isMobileOrTablet && hasTouchScreen) { + setDeferredPrompt(e); + setShowInstallPrompt(true); + console.log("Is Mobile or Tablet : ", isMobileOrTablet); + console.log("User Agent : ", userAgent); + } + + console.log('beforeinstallprompt fired'); + }; + + window.addEventListener('beforeinstallprompt', handler); + + return () => { + window.removeEventListener('beforeinstallprompt', handler); + }; + }, []); + + const handleInstallClick = async () => { + if (!deferredPrompt) return; + + try { + await deferredPrompt.prompt(); + + const choiceResult = await deferredPrompt.userChoice; + + if (choiceResult.outcome === 'accepted') { + console.log('🔥 User installed the PWA!'); + } else { + console.log('❌ User dismissed the install dialog.'); + } + } catch (err) { + console.error("Error triggering the install prompt:", err); + } + + setDeferredPrompt(null); + setShowInstallPrompt(false); + }; + + const handleNotNow = async () => { + setShowInstallPrompt(false); + } + + return ( + + <> + {showInstallPrompt && ( +
+
+ FreshScan AI + +
+

+ FreshScan AI +

+ +

+ Install App +

+
+
+ +

+ Add FreshScan AI to your home screen for instant fish freshness + analysis in one tap. +

+ +
+ + + +
+
+ )} + + ); +} \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx index fac91d0..d70727b 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -26,6 +26,20 @@ if (POSTHOG_KEY) { }); } +if ('serviceWorker' in navigator) { + try { + navigator.serviceWorker + .register('/sw.js') + .then((reg) => { + console.log('SW registered', reg); + }) + .catch(console.error); + } + catch (e) { + console.log("Error occured during the registration of sw", e) + } +} + createRoot(document.getElementById('root')!).render( diff --git a/vite.config.ts b/vite.config.ts index e9ab029..e3009b9 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,7 +4,7 @@ import tailwindcss from '@tailwindcss/vite' // https://vite.dev/config/ export default defineConfig({ - plugins: [react(), tailwindcss()], + plugins: [react(), tailwindcss(), ], server: { // In local dev, proxy /api/* to the FastAPI backend at :8000. From ea9f2050e2c8c03159d1a55550a4129f7dc7fec4 Mon Sep 17 00:00:00 2001 From: the-madhankumar Date: Sun, 7 Jun 2026 21:26:48 +0530 Subject: [PATCH 2/3] feat(fix): done the type fix in the InstallPrompt.tsx --- src/components/InstallPrompt.tsx | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/components/InstallPrompt.tsx b/src/components/InstallPrompt.tsx index 8b3f86c..c33bed2 100644 --- a/src/components/InstallPrompt.tsx +++ b/src/components/InstallPrompt.tsx @@ -1,21 +1,32 @@ import { useState, useEffect } from 'react'; +interface BeforeInstallPromptEvent extends Event { + readonly platforms: string[]; + readonly userChoice: Promise<{ + outcome: 'accepted' | 'dismissed'; + platform: string; + }>; + prompt(): Promise; +} + export default function InstallPrompt() { console.log("InstallPrompt Rendered"); const [showInstallPrompt, setShowInstallPrompt] = useState(false); - const [deferredPrompt, setDeferredPrompt] = useState(null); + const [deferredPrompt, setDeferredPrompt] = useState(null); useEffect(() => { - const handler = (e: any) => { + const handler = (e: Event) => { e.preventDefault(); - const userAgent = navigator.userAgent || navigator.vendor || (window as any).opera; + const installEvent = e as BeforeInstallPromptEvent; + + const userAgent = navigator.userAgent || navigator.vendor || ''; const isMobileOrTablet = /android|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(userAgent); const hasTouchScreen = window.matchMedia('(pointer: coarse)').matches; if (isMobileOrTablet && hasTouchScreen) { - setDeferredPrompt(e); + setDeferredPrompt(installEvent); setShowInstallPrompt(true); console.log("Is Mobile or Tablet : ", isMobileOrTablet); console.log("User Agent : ", userAgent); @@ -24,10 +35,10 @@ export default function InstallPrompt() { console.log('beforeinstallprompt fired'); }; - window.addEventListener('beforeinstallprompt', handler); + window.addEventListener('beforeinstallprompt', handler as EventListener); return () => { - window.removeEventListener('beforeinstallprompt', handler); + window.removeEventListener('beforeinstallprompt', handler as EventListener); }; }, []); @@ -52,12 +63,11 @@ export default function InstallPrompt() { setShowInstallPrompt(false); }; - const handleNotNow = async () => { + const handleNotNow = () => { setShowInstallPrompt(false); - } + }; return ( - <> {showInstallPrompt && (
From ac37cdc047cf2252c9b1150e43c00b1b8d25866e Mon Sep 17 00:00:00 2001 From: the-madhankumar Date: Sun, 7 Jun 2026 22:28:53 +0530 Subject: [PATCH 3/3] feat(fix): just fixed npm lint and build again with the updates --- package-lock.json | 1138 ++++++++++++++++------------------------ package.json | 3 + src/pages/AuthPage.tsx | 14 +- 3 files changed, 453 insertions(+), 702 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4fb7912..21fac6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "frontend", "version": "1.3.0", "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@emnapi/wasi-threads": "1.2.1", "@tailwindcss/vite": "^4.2.2", "framer-motion": "^12.38.0", "i18next": "^26.3.0", @@ -70,21 +73,21 @@ } }, "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -379,14 +382,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", - "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1585,6 +1588,34 @@ "node": ">=6.9.0" } }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "license": "MIT", + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@epic-web/invariant": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", @@ -1831,29 +1862,43 @@ } }, "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanfs/core": "^0.19.1", + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1949,9 +1994,9 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz", - "integrity": "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", "license": "MIT", "optional": true, "dependencies": { @@ -1966,274 +2011,28 @@ "@emnapi/runtime": "^1.7.1" } }, - "node_modules/@opentelemetry/api": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", - "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", - "license": "Apache-2.0", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/api-logs": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.208.0.tgz", - "integrity": "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.3.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.2.0.tgz", - "integrity": "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/exporter-logs-otlp-http": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.208.0.tgz", - "integrity": "sha512-jOv40Bs9jy9bZVLo/i8FwUiuCvbjWDI+ZW13wimJm4LjnlwJxGgB+N/VWOZUTpM+ah/awXeQqKdNlpLf2EjvYg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.208.0", - "@opentelemetry/core": "2.2.0", - "@opentelemetry/otlp-exporter-base": "0.208.0", - "@opentelemetry/otlp-transformer": "0.208.0", - "@opentelemetry/sdk-logs": "0.208.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.208.0.tgz", - "integrity": "sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/otlp-transformer": "0.208.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.208.0.tgz", - "integrity": "sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.208.0", - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0", - "@opentelemetry/sdk-logs": "0.208.0", - "@opentelemetry/sdk-metrics": "2.2.0", - "@opentelemetry/sdk-trace-base": "2.2.0", - "protobufjs": "^7.3.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/resources": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.7.1.tgz", - "integrity": "sha512-DeT6KKolmC4e/dRQvMQ/RwlnzhaqeiFOXY5ngoOPJ07GgVVKxZOg9EcrNZb5aTzUn+iCrJldAgOfQm1O/QfPAQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.7.1", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.7.1.tgz", - "integrity": "sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-logs": { - "version": "0.208.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.208.0.tgz", - "integrity": "sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.208.0", - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.2.0.tgz", - "integrity": "sha512-G5KYP6+VJMZzpGipQw7Giif48h6SGQ2PFKEYCybeXJsOCB4fp8azqMAAzE5lnnHK3ZVwYQrgmFbsUJO/zOnwGw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.9.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.2.0.tgz", - "integrity": "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/resources": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/resources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", - "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.2.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.41.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.41.1.tgz", - "integrity": "sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==", - "license": "Apache-2.0", - "engines": { - "node": ">=14" - } - }, "node_modules/@oxc-project/types": { - "version": "0.122.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz", - "integrity": "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==", + "version": "0.133.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" } }, "node_modules/@posthog/core": { - "version": "1.29.11", - "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.29.11.tgz", - "integrity": "sha512-/4EF7oxAFSWJgaXxppT8bdYp7MGAnWFnKz994+MetTz/T6CKbYpjqIXHCofQXtcOXjEclTYj91igA+IkVFKiSg==", + "version": "1.30.10", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.30.10.tgz", + "integrity": "sha512-R7Z5jDB3ugwfSujMmRd5osPPR6L6BqfcaSNcYOekzRMZ4Jklq74p05xByP09EnUvKXb5czI+RQVCITTWRWuFXw==", "license": "MIT", "dependencies": { - "@posthog/types": "1.376.2" + "@posthog/types": "1.382.0" } }, "node_modules/@posthog/types": { - "version": "1.376.2", - "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.376.2.tgz", - "integrity": "sha512-Y3ROpAxNqgcy2G0w6JoG5Gt+P6WNY2lkHTPMPzWqexRwemYbFegDi5AifDyD9/tstKTlOYKTTExtaJ5EBcghyQ==", + "version": "1.382.0", + "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.382.0.tgz", + "integrity": "sha512-iK4OcSgvtmS9FZ9EUpvwlRZmHCLXaZ3+6dbRjkE7q9LL0zHLewxJH84H6uGvCw8aGzxs5rIliZqPHgimTcQEaw==", "license": "MIT" }, "node_modules/@protobufjs/aspromise": { @@ -2311,9 +2110,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", "cpu": [ "arm64" ], @@ -2327,9 +2126,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", "cpu": [ "arm64" ], @@ -2343,9 +2142,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", "cpu": [ "x64" ], @@ -2359,9 +2158,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", "cpu": [ "x64" ], @@ -2375,9 +2174,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", - "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", "cpu": [ "arm" ], @@ -2391,9 +2190,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", "cpu": [ "arm64" ], @@ -2407,9 +2206,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", "cpu": [ "arm64" ], @@ -2423,9 +2222,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", "cpu": [ "ppc64" ], @@ -2439,9 +2238,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", "cpu": [ "s390x" ], @@ -2455,9 +2254,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", "cpu": [ "x64" ], @@ -2471,9 +2270,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", "cpu": [ "x64" ], @@ -2487,9 +2286,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", "cpu": [ "arm64" ], @@ -2503,25 +2302,27 @@ } }, "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", - "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", "cpu": [ "wasm32" ], "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.1" + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" }, "engines": { - "node": ">=14.0.0" + "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", "cpu": [ "arm64" ], @@ -2535,9 +2336,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", "cpu": [ "x64" ], @@ -2551,10 +2352,9 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.7", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz", - "integrity": "sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==", - "dev": true, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "license": "MIT" }, "node_modules/@rollup/plugin-babel": { @@ -3028,47 +2828,47 @@ ] }, "node_modules/@tailwindcss/node": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", - "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.0.tgz", + "integrity": "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==", "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.19.0", + "enhanced-resolve": "^5.21.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", - "tailwindcss": "4.2.2" + "tailwindcss": "4.3.0" } }, "node_modules/@tailwindcss/oxide": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", - "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.0.tgz", + "integrity": "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==", "license": "MIT", "engines": { "node": ">= 20" }, "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-x64": "4.2.2", - "@tailwindcss/oxide-freebsd-x64": "4.2.2", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", - "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", - "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-x64-musl": "4.2.2", - "@tailwindcss/oxide-wasm32-wasi": "4.2.2", - "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", - "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" + "@tailwindcss/oxide-android-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-x64": "4.3.0", + "@tailwindcss/oxide-freebsd-x64": "4.3.0", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-x64-musl": "4.3.0", + "@tailwindcss/oxide-wasm32-wasi": "4.3.0", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" } }, "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", - "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.0.tgz", + "integrity": "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==", "cpu": [ "arm64" ], @@ -3082,9 +2882,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", - "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.0.tgz", + "integrity": "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==", "cpu": [ "arm64" ], @@ -3098,9 +2898,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", - "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.0.tgz", + "integrity": "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==", "cpu": [ "x64" ], @@ -3114,9 +2914,9 @@ } }, "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", - "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.0.tgz", + "integrity": "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==", "cpu": [ "x64" ], @@ -3130,9 +2930,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", - "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.0.tgz", + "integrity": "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==", "cpu": [ "arm" ], @@ -3146,9 +2946,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", - "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.0.tgz", + "integrity": "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==", "cpu": [ "arm64" ], @@ -3162,9 +2962,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", - "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.0.tgz", + "integrity": "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==", "cpu": [ "arm64" ], @@ -3178,9 +2978,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", - "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.0.tgz", + "integrity": "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==", "cpu": [ "x64" ], @@ -3194,9 +2994,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", - "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.0.tgz", + "integrity": "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==", "cpu": [ "x64" ], @@ -3210,9 +3010,9 @@ } }, "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", - "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.0.tgz", + "integrity": "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==", "bundleDependencies": [ "@napi-rs/wasm-runtime", "@emnapi/core", @@ -3227,10 +3027,10 @@ "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "^1.8.1", - "@emnapi/runtime": "^1.8.1", - "@emnapi/wasi-threads": "^1.1.0", - "@napi-rs/wasm-runtime": "^1.1.1", + "@emnapi/core": "^1.10.0", + "@emnapi/runtime": "^1.10.0", + "@emnapi/wasi-threads": "^1.2.1", + "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, @@ -3238,68 +3038,10 @@ "node": ">=14.0.0" } }, - "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { - "version": "1.8.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { - "version": "1.8.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1", - "@tybys/wasm-util": "^0.10.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { - "version": "2.8.1", - "inBundle": true, - "license": "0BSD", - "optional": true - }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", - "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", + "integrity": "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==", "cpu": [ "arm64" ], @@ -3313,9 +3055,9 @@ } }, "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", - "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.0.tgz", + "integrity": "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==", "cpu": [ "x64" ], @@ -3329,14 +3071,14 @@ } }, "node_modules/@tailwindcss/vite": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.2.tgz", - "integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.0.tgz", + "integrity": "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==", "license": "MIT", "dependencies": { - "@tailwindcss/node": "4.2.2", - "@tailwindcss/oxide": "4.2.2", - "tailwindcss": "4.2.2" + "@tailwindcss/node": "4.3.0", + "@tailwindcss/oxide": "4.3.0", + "tailwindcss": "4.3.0" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" @@ -3359,9 +3101,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", "license": "MIT", "optional": true, "dependencies": { @@ -3400,18 +3142,18 @@ } }, "node_modules/@types/node": { - "version": "25.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.1.tgz", - "integrity": "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==", + "version": "25.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.2.tgz", + "integrity": "sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw==", "license": "MIT", "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "node_modules/@types/react": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", - "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -3442,17 +3184,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.0.tgz", - "integrity": "sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.1.tgz", + "integrity": "sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.58.0", - "@typescript-eslint/type-utils": "8.58.0", - "@typescript-eslint/utils": "8.58.0", - "@typescript-eslint/visitor-keys": "8.58.0", + "@typescript-eslint/scope-manager": "8.60.1", + "@typescript-eslint/type-utils": "8.60.1", + "@typescript-eslint/utils": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -3465,7 +3207,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.58.0", + "@typescript-eslint/parser": "^8.60.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -3481,16 +3223,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.0.tgz", - "integrity": "sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.60.1.tgz", + "integrity": "sha512-A0M6ua6H252bVjPvvtSgl2QA4+ET9S5Mtkb2GDyTxIhH/C4qDItT7RQNO5PhMC6NXGYXOR9dIalcDDgBKT7oFA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.58.0", - "@typescript-eslint/types": "8.58.0", - "@typescript-eslint/typescript-estree": "8.58.0", - "@typescript-eslint/visitor-keys": "8.58.0", + "@typescript-eslint/scope-manager": "8.60.1", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/typescript-estree": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1", "debug": "^4.4.3" }, "engines": { @@ -3506,14 +3248,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.0.tgz", - "integrity": "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.60.1.tgz", + "integrity": "sha512-eXkTH2bxmXlqD1RnOPmLZ9ZM9D3VwSx04JOwBnP9RQ+yUA5a2Mu7SfW8uaV2Aon53NJzZlZYuX7tn91Izf+xaw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.58.0", - "@typescript-eslint/types": "^8.58.0", + "@typescript-eslint/tsconfig-utils": "^8.60.1", + "@typescript-eslint/types": "^8.60.1", "debug": "^4.4.3" }, "engines": { @@ -3528,14 +3270,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.0.tgz", - "integrity": "sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.60.1.tgz", + "integrity": "sha512-gvI5OQoptnxQnchOirukCuQ55svJSTuD/4k5+pC267xyBtYry748R9/c3tYUzb/iE6RZfllRz2lVulLCHkTm4w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.0", - "@typescript-eslint/visitor-keys": "8.58.0" + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3546,9 +3288,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.0.tgz", - "integrity": "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.1.tgz", + "integrity": "sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA==", "dev": true, "license": "MIT", "engines": { @@ -3563,15 +3305,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.0.tgz", - "integrity": "sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.60.1.tgz", + "integrity": "sha512-sdwTrpjosW7ANQYJ39ZBF1ZyEMEGVB2UsikrserVM/30a/F1dTLnu9bGxEdosugyu5caigjLrR2qiD11asjI1A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.0", - "@typescript-eslint/typescript-estree": "8.58.0", - "@typescript-eslint/utils": "8.58.0", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/typescript-estree": "8.60.1", + "@typescript-eslint/utils": "8.60.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -3588,9 +3330,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.0.tgz", - "integrity": "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.60.1.tgz", + "integrity": "sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==", "dev": true, "license": "MIT", "engines": { @@ -3602,16 +3344,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.0.tgz", - "integrity": "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.60.1.tgz", + "integrity": "sha512-alpRkfG8hlVE5kdJW2GkfgDgXxold3e8e4l6EnmhRmRLbekgAPCCGDVD++sABy9FcgPFroq+uFcCSM1vR57Cew==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.58.0", - "@typescript-eslint/tsconfig-utils": "8.58.0", - "@typescript-eslint/types": "8.58.0", - "@typescript-eslint/visitor-keys": "8.58.0", + "@typescript-eslint/project-service": "8.60.1", + "@typescript-eslint/tsconfig-utils": "8.60.1", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/visitor-keys": "8.60.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -3640,9 +3382,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { @@ -3669,9 +3411,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.2.tgz", + "integrity": "sha512-c8jsqUZm3omBOI66G90z1Dyw5z622G8oLG+omfsHBJf3CWQTlOcwOjvOG6wtiNfW6anKm/eA39LMwMtMez2TiQ==", "dev": true, "license": "ISC", "bin": { @@ -3682,16 +3424,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.0.tgz", - "integrity": "sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.60.1.tgz", + "integrity": "sha512-h2MPBLoNtjc3qZWfY3Tl51yPorQ2McHn8pJfcMNTcIvrrZrr90Ykffit0yjrPFWQcRcUxzH20+6OcVdW4yHtUg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.58.0", - "@typescript-eslint/types": "8.58.0", - "@typescript-eslint/typescript-estree": "8.58.0" + "@typescript-eslint/scope-manager": "8.60.1", + "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/typescript-estree": "8.60.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3706,13 +3448,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.0.tgz", - "integrity": "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.60.1.tgz", + "integrity": "sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/types": "8.60.1", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -3737,13 +3479,13 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz", - "integrity": "sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.2.tgz", + "integrity": "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==", "dev": true, "license": "MIT", "dependencies": { - "@rolldown/pluginutils": "1.0.0-rc.7" + "@rolldown/pluginutils": "^1.0.0" }, "engines": { "node": "^20.19.0 || >=22.12.0" @@ -3786,9 +3528,9 @@ } }, "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -3967,9 +3709,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.14", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.14.tgz", - "integrity": "sha512-fOVLPAsFTsQfuCkvahZkzq6nf8KvGWanlYoTh0SVA0A/PIUxQGU2AOZAoD95n2gFLVDW/jP6sbGLny95nmEuHA==", + "version": "2.10.34", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.34.tgz", + "integrity": "sha512-IMDedajPifLnHNY0X9n8hKxRTQ6/eTHwr5bDo04WnuqxyKw6LYtQywCuuqPZwhl3aBXMvQpJov42GLCwRRdQzw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3980,9 +3722,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", "dev": true, "license": "MIT", "dependencies": { @@ -4092,9 +3834,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001785", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001785.tgz", - "integrity": "sha512-blhOL/WNR+Km1RI/LCVAvA73xplXA7ZbjzI4YkMK9pa6T/P3F2GxjNpEkyw5repTw9IvkyrjyHpwjnhZ5FOvYQ==", + "version": "1.0.30001797", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001797.tgz", + "integrity": "sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==", "dev": true, "funding": [ { @@ -4129,6 +3871,19 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -4213,22 +3968,6 @@ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -4458,9 +4197,9 @@ } }, "node_modules/dompurify": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.6.tgz", - "integrity": "sha512-+7gzEI8trIIQkVCvQ3ucGtNfH3nOmDgVTzc62rAAOlMxLth78pwpPoZCPc7CyRzAQF89MqcfPdEWkDwnjgqktg==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.8.tgz", + "integrity": "sha512-yb1cEmaOum7wFvOCSQxyfgVlv5D47Rc30iZWoMpbDIWTnJ6grDDQyu2KFJzB2k7u0pMuJcQ1zphH//fFnw2tjQ==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -4498,9 +4237,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.331", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.331.tgz", - "integrity": "sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==", + "version": "1.5.368", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.368.tgz", + "integrity": "sha512-7RckJJK4uESJF9PxvfMWd3TGqIiieUTG4HxnKaKuIpGbcr+r2ZEB3g2gAhCP3Fqm42vJSzLfgab9eva/C4/XVw==", "dev": true, "license": "ISC" }, @@ -4512,13 +4251,13 @@ "license": "MIT" }, "node_modules/enhanced-resolve": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.23.0.tgz", + "integrity": "sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" + "tapable": "^2.3.3" }, "engines": { "node": ">=10.13.0" @@ -4744,9 +4483,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", - "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", "dev": true, "license": "MIT", "dependencies": { @@ -4760,7 +4499,7 @@ "node": ">=18" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" } }, "node_modules/eslint-plugin-react-refresh": { @@ -5072,13 +4811,13 @@ } }, "node_modules/framer-motion": { - "version": "12.38.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz", - "integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==", + "version": "12.40.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.40.0.tgz", + "integrity": "sha512-uaBd3qC1v3KQqBEjwTUd183K6PbS+j0yR9w9VmEOLWA/tnUcSn8Xa3uck7t4dgpDoUss8xQTcj8W2L07lrnLFg==", "license": "MIT", "dependencies": { - "motion-dom": "^12.38.0", - "motion-utils": "^12.36.0", + "motion-dom": "^12.40.0", + "motion-utils": "^12.39.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -5341,9 +5080,9 @@ } }, "node_modules/globals": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", - "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", "dev": true, "license": "MIT", "engines": { @@ -6098,9 +5837,9 @@ } }, "node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" @@ -6114,10 +5853,20 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -6539,9 +6288,9 @@ } }, "node_modules/lucide-react": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.16.0.tgz", - "integrity": "sha512-dYwyPzb4MEKpGUmNYk3WKWPnMrHs3FKM+q94kAnJrcDIqqn1hq2xY8scaS2ovsOCM5D51ey2gaRG3PBb1vgoYQ==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.17.0.tgz", + "integrity": "sha512-9FA9evdox/JQL5PT57fdA1x/yg8T7knJ98+zjTL3UfKza6pflQUUh3XtaQIHKvnsJw1lmsEyHVlt5jchYxOQ5w==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -6590,18 +6339,18 @@ } }, "node_modules/motion-dom": { - "version": "12.38.0", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.38.0.tgz", - "integrity": "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==", + "version": "12.40.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.40.0.tgz", + "integrity": "sha512-HxU3ZaBwNPVQUBQf1xxgq+7JrPNZvjLVxgbpEZL7RrWJnsxOf0/OM+yrHG9ogLQ31Do/r57Oz2gQWPK+6q62mg==", "license": "MIT", "dependencies": { - "motion-utils": "^12.36.0" + "motion-utils": "^12.39.0" } }, "node_modules/motion-utils": { - "version": "12.36.0", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz", - "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==", + "version": "12.39.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.39.0.tgz", + "integrity": "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==", "license": "MIT" }, "node_modules/ms": { @@ -6612,9 +6361,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", "funding": [ { "type": "github", @@ -6637,11 +6386,14 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.37", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", - "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", + "version": "2.0.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", + "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/object-inspect": { "version": "1.13.4", @@ -6884,9 +6636,9 @@ } }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", "funding": [ { "type": "opencollective", @@ -6903,7 +6655,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -6912,18 +6664,13 @@ } }, "node_modules/posthog-js": { - "version": "1.376.2", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.376.2.tgz", - "integrity": "sha512-Anz2pCp7dcNbammTExiZpcKC08dxfrHYaJgaXH6rq5x3Zcfj/4FkcMJF2cGCrdQXel5Y4vftiVSseZda0HAQTQ==", + "version": "1.382.0", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.382.0.tgz", + "integrity": "sha512-lXwVlNdPLkhDft48ZgLQ5Jf4RsuQVwz7Hr7luD4DAG+4wDGA+k9eE2no36r3Z1w4uK0EmIf9lmav6+4RsmP7nA==", "license": "SEE LICENSE IN LICENSE", "dependencies": { - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.208.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.208.0", - "@opentelemetry/resources": "^2.2.0", - "@opentelemetry/sdk-logs": "^0.208.0", - "@posthog/core": "1.29.11", - "@posthog/types": "1.376.2", + "@posthog/core": "1.30.10", + "@posthog/types": "1.382.0", "core-js": "^3.38.1", "dompurify": "^3.3.2", "fflate": "^0.4.8", @@ -6966,9 +6713,9 @@ } }, "node_modules/protobufjs": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.1.tgz", - "integrity": "sha512-4K0myLaWL5EteuSAro91EGFgcfVgxb64Jx+7oDAY6GOkXD4M69yuSEljNcInGVCA5sOPxmZ/EqDLj2x0Q0+Ygg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.2.tgz", + "integrity": "sha512-N9EiLovGEQOJSPF26Ij7qUGvahfEnq0eeYZ02aigIedkmz1qZSwjnP9SBITHJuF/6MYbIW4HDN8zdYjsjqJKXQ==", "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { @@ -7006,24 +6753,24 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", + "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", + "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.4" + "react": "^19.2.7" } }, "node_modules/react-hot-toast": { @@ -7117,9 +6864,9 @@ } }, "node_modules/react-router": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.14.0.tgz", - "integrity": "sha512-m/xR9N4LQLmAS0ZhkY2nkPA1N7gQ5TUVa5n8TgANuDTARbn1gt+zLPXEm7W0XDTbrQ2AJSJKhoa6yx1D8BcpxQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.17.0.tgz", + "integrity": "sha512-FDELK7rTMlCHO5+reyXsPlmfr7N1F91lPHsWYfMEGQm/KQ+F4JFM8jGoeQDmDvdTs93Fw9aSilH+uKRb4/jXvQ==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -7139,12 +6886,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.14.0.tgz", - "integrity": "sha512-2G3ajSVSZMEtmTjIklRWlNvo8wICEpLihfD/0YMDxbWK2UyP5EGfnoIn9AIQGnF3G/FX0MRbHXdFcD+rL1ZreQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.17.0.tgz", + "integrity": "sha512-fyU2yjGups/hE6Xz0I5ZYbVL8Gx29eCjgpHaRaTaVU+OOAdfRX05KsvyRm0GO8YQwOkhpU3MurW1jyMUJn+zSw==", "license": "MIT", "dependencies": { - "react-router": "7.14.0" + "react-router": "7.17.0" }, "engines": { "node": ">=20.0.0" @@ -7309,13 +7056,13 @@ } }, "node_modules/rolldown": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz", - "integrity": "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.122.0", - "@rolldown/pluginutils": "1.0.0-rc.12" + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" }, "bin": { "rolldown": "bin/cli.mjs" @@ -7324,28 +7071,22 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-x64": "1.0.0-rc.12", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" - } - }, - "node_modules/rolldown/node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz", - "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==", - "license": "MIT" + "@rolldown/binding-android-arm64": "1.0.3", + "@rolldown/binding-darwin-arm64": "1.0.3", + "@rolldown/binding-darwin-x64": "1.0.3", + "@rolldown/binding-freebsd-x64": "1.0.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", + "@rolldown/binding-linux-arm64-gnu": "1.0.3", + "@rolldown/binding-linux-arm64-musl": "1.0.3", + "@rolldown/binding-linux-ppc64-gnu": "1.0.3", + "@rolldown/binding-linux-s390x-gnu": "1.0.3", + "@rolldown/binding-linux-x64-gnu": "1.0.3", + "@rolldown/binding-linux-x64-musl": "1.0.3", + "@rolldown/binding-openharmony-arm64": "1.0.3", + "@rolldown/binding-wasm32-wasi": "1.0.3", + "@rolldown/binding-win32-arm64-msvc": "1.0.3", + "@rolldown/binding-win32-x64-msvc": "1.0.3" + } }, "node_modules/rollup": { "version": "4.61.1", @@ -7898,16 +7639,19 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -7924,15 +7668,15 @@ } }, "node_modules/tailwindcss": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", - "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", + "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==", "license": "MIT" }, "node_modules/tapable": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", - "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "license": "MIT", "engines": { "node": ">=6" @@ -8004,13 +7748,13 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -8176,16 +7920,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.58.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.58.0.tgz", - "integrity": "sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==", + "version": "8.60.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.60.1.tgz", + "integrity": "sha512-6m5hkkRAp8lKvhVpcprAIn5KkehQEh+47oHH2VGnExEh7dhNxXlg6GPAOIu6TxbVQxhebrJDvjl3020ooiWCMA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.58.0", - "@typescript-eslint/parser": "8.58.0", - "@typescript-eslint/typescript-estree": "8.58.0", - "@typescript-eslint/utils": "8.58.0" + "@typescript-eslint/eslint-plugin": "8.60.1", + "@typescript-eslint/parser": "8.60.1", + "@typescript-eslint/typescript-estree": "8.60.1", + "@typescript-eslint/utils": "8.60.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -8353,16 +8097,16 @@ } }, "node_modules/vite": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.3.tgz", - "integrity": "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==", + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", "license": "MIT", "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", - "postcss": "^8.5.8", - "rolldown": "1.0.0-rc.12", - "tinyglobby": "^0.2.15" + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" }, "bin": { "vite": "bin/vite.js" @@ -8378,8 +8122,8 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.1.0", - "esbuild": "^0.27.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", @@ -8470,9 +8214,9 @@ } }, "node_modules/web-vitals": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-5.2.0.tgz", - "integrity": "sha512-i2z98bEmaCqSDiHEDu+gHl/dmR4Q+TxFmG3/13KkMO+o8UxQzCqWaDRCiLgEa41nlO4VpXSI0ASa1xWmO9sBlA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-5.3.0.tgz", + "integrity": "sha512-q6LWsLatGYZp5VGBIOvbTj6JBV2nOmC8KvWztXBmwJcfFAzhwKwbOxhUH306XY3CcaZDUlSmSuNPBsCn0bFu+g==", "license": "Apache-2.0" }, "node_modules/webidl-conversions": { @@ -8948,9 +8692,9 @@ } }, "node_modules/zod": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", - "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, "license": "MIT", "funding": { diff --git a/package.json b/package.json index 1525380..4e1bef8 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,9 @@ "supabase:reset": "cd backend && supabase db reset" }, "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@emnapi/wasi-threads": "1.2.1", "@tailwindcss/vite": "^4.2.2", "framer-motion": "^12.38.0", "i18next": "^26.3.0", diff --git a/src/pages/AuthPage.tsx b/src/pages/AuthPage.tsx index 616e2ec..5824875 100644 --- a/src/pages/AuthPage.tsx +++ b/src/pages/AuthPage.tsx @@ -21,14 +21,18 @@ export default function AuthPage() { const error = params.get('error'); if (error) { - setStatus('error'); - setErrorMsg('Authentication failed. Please try again.'); + setTimeout(() => { + setStatus('error'); + setErrorMsg('Authentication failed. Please try again.'); + }, 0); window.history.replaceState({}, '', '/auth'); return; } if (accessToken) { - setStatus('processing'); + setTimeout(() => { + setStatus('processing'); + }, 0); setToken(accessToken); window.history.replaceState({}, '', '/auth'); navigate('/mode', { replace: true }); @@ -44,11 +48,11 @@ export default function AuthPage() { try { setStatus('processing'); const loginUrl = api.loginUrl(); - + if (!loginUrl) { throw new Error("Login URL configuration missing"); } - + // Force full browser navigation for OAuth window.location.href = loginUrl; } catch (err) {