diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 47fe8c23..82d9371b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -9,6 +9,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Setup Deno uses: denoland/setup-deno@v2 @@ -31,6 +33,18 @@ jobs: - name: Cache Dependencies run: deno cache src/index.tsx + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v44 + with: + files: | + **/*.ts + **/*.tsx + + - name: Type check changed files + if: steps.changed-files.outputs.all_changed_files != '' + run: deno check ${{ steps.changed-files.outputs.all_changed_files }} + - name: Run linter run: deno task lint @@ -50,4 +64,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: build - path: dist/build.tar + path: dist/build.tar \ No newline at end of file diff --git a/deno.json b/deno.json index 3306d537..785a9808 100644 --- a/deno.json +++ b/deno.json @@ -32,20 +32,21 @@ }, "fmt": { "exclude": [ - "src/*.gen.ts", + "*.gen.ts", "*.test.ts", "*.test.tsx" ] }, "lint": { "exclude": [ - "src/*.gen.ts", + "*.gen.ts", "*.test.ts", "*.test.tsx" ], "report": "pretty" }, "exclude": [ + "*.gen.ts", "node_modules/", "dist", "build", diff --git a/deno.lock b/deno.lock index b6ff8d96..61edba5b 100644 --- a/deno.lock +++ b/deno.lock @@ -1,105 +1,100 @@ { "version": "5", "specifiers": { - "jsr:@std/path@*": "1.0.6", "jsr:@std/path@^1.1.0": "1.1.0", - "npm:@bufbuild/protobuf@^2.2.5": "2.2.5", - "npm:@jsr/meshtastic__core@2.6.2": "2.6.2", + "npm:@bufbuild/protobuf@^2.5.2": "2.5.2", "npm:@jsr/meshtastic__core@2.6.4": "2.6.4", "npm:@jsr/meshtastic__js@2.6.0-0": "2.6.0-0", "npm:@jsr/meshtastic__transport-http@*": "0.2.1", - "npm:@jsr/meshtastic__transport-web-bluetooth@*": "0.1.1", + "npm:@jsr/meshtastic__transport-web-bluetooth@*": "0.1.2", "npm:@jsr/meshtastic__transport-web-serial@*": "0.2.1", - "npm:@noble/curves@^1.9.0": "1.9.0", - "npm:@radix-ui/react-accordion@^1.2.8": "1.2.8_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-checkbox@^1.2.3": "1.2.3_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-dialog@^1.1.11": "1.1.11_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-dropdown-menu@^2.1.12": "2.1.12_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-label@^2.1.4": "2.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-menubar@^1.1.12": "1.1.12_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-popover@^1.1.11": "1.1.11_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-scroll-area@^1.2.6": "1.2.6_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-select@^2.2.2": "2.2.2_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-separator@^1.1.4": "1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-slider@^1.3.2": "1.3.2_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-switch@^1.2.2": "1.2.2_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-tabs@^1.1.9": "1.1.9_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-toast@^1.2.11": "1.2.11_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-toggle-group@^1.1.9": "1.1.10_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@radix-ui/react-tooltip@^1.2.4": "1.2.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@tailwindcss/postcss@^4.1.5": "4.1.5", - "npm:@tanstack/react-router-devtools@^1.120.16": "1.120.16_@tanstack+react-router@1.120.15__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0_solid-js@1.9.7__seroval@1.3.2", - "npm:@tanstack/react-router@^1.120.15": "1.120.15_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@tanstack/router-devtools@^1.120.15": "1.120.15_@tanstack+react-router@1.120.15__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@tanstack/router-plugin@^1.120.15": "1.120.15_@tanstack+react-router@1.120.15__react@19.1.0__react-dom@19.1.0___react@19.1.0_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_@babel+core@7.27.1_react@19.1.0_react-dom@19.1.0__react@19.1.0_@types+node@22.15.3", + "npm:@noble/curves@^1.9.2": "1.9.2", + "npm:@radix-ui/react-accordion@^1.2.11": "1.2.11_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-checkbox@^1.3.2": "1.3.2_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-dialog@^1.1.14": "1.1.14_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-dropdown-menu@^2.1.15": "2.1.15_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-label@^2.1.7": "2.1.7_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-menubar@^1.1.15": "1.1.15_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-popover@^1.1.14": "1.1.14_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-scroll-area@^1.2.9": "1.2.9_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-select@^2.2.5": "2.2.5_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-separator@^1.1.7": "1.1.7_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-slider@^1.3.5": "1.3.5_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-switch@^1.2.5": "1.2.5_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-tabs@^1.1.12": "1.1.12_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-toast@^1.2.14": "1.2.14_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-toggle-group@^1.1.10": "1.1.10_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@radix-ui/react-tooltip@^1.2.7": "1.2.7_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@tailwindcss/postcss@^4.1.8": "4.1.8", + "npm:@tanstack/react-router-devtools@^1.120.20": "1.120.20_@tanstack+react-router@1.120.20__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0_solid-js@1.9.7__seroval@1.3.2", + "npm:@tanstack/react-router@^1.120.20": "1.120.20_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@tanstack/router-devtools@^1.120.20": "1.120.20_@tanstack+react-router@1.120.20__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@tanstack/router-plugin@^1.120.20": "1.120.20_@tanstack+react-router@1.120.20__react@19.1.0__react-dom@19.1.0___react@19.1.0_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_@babel+core@7.27.4_react@19.1.0_react-dom@19.1.0__react@19.1.0_@types+node@24.0.0", "npm:@testing-library/jest-dom@^6.6.3": "6.6.3", - "npm:@testing-library/react-hooks@^8.0.1": "8.0.1_@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@testing-library/react@^16.3.0": "16.3.0_@testing-library+dom@10.4.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@testing-library/react-hooks@^8.0.1": "8.0.1_@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:@testing-library/react@^16.3.0": "16.3.0_@testing-library+dom@10.4.0_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0", "npm:@testing-library/user-event@^14.6.1": "14.6.1_@testing-library+dom@10.4.0", "npm:@turf/turf@^7.2.0": "7.2.0", - "npm:@types/chrome@^0.0.318": "0.0.318", + "npm:@types/chrome@^0.0.326": "0.0.326", "npm:@types/js-cookie@^3.0.6": "3.0.6", - "npm:@types/node@^22.15.3": "22.15.3", - "npm:@types/react-dom@^19.1.3": "19.1.3_@types+react@19.1.2", - "npm:@types/react@^19.1.2": "19.1.2", - "npm:@types/serviceworker@^0.0.133": "0.0.133", + "npm:@types/node@24": "24.0.0", + "npm:@types/react-dom@^19.1.6": "19.1.6_@types+react@19.1.7", + "npm:@types/react@^19.1.7": "19.1.7", + "npm:@types/serviceworker@^0.0.139": "0.0.139", "npm:@types/w3c-web-serial@*": "1.0.8", "npm:@types/w3c-web-serial@^1.0.8": "1.0.8", "npm:@types/web-bluetooth@*": "0.0.21", "npm:@types/web-bluetooth@^0.0.21": "0.0.21", - "npm:@vitejs/plugin-react@^4.4.1": "4.4.1_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_@babel+core@7.27.1_@types+node@22.15.3", - "npm:autoprefixer@^10.4.21": "10.4.21_postcss@8.5.3", + "npm:@vitejs/plugin-react@^4.5.2": "4.5.2_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_@babel+core@7.27.4_@types+node@24.0.0", + "npm:autoprefixer@^10.4.21": "10.4.21_postcss@8.5.4", "npm:base64-js@^1.5.1": "1.5.1", "npm:class-variance-authority@~0.7.1": "0.7.1", "npm:clsx@^2.1.1": "2.1.1", - "npm:cmdk@^1.1.1": "1.1.1_react@19.1.0_react-dom@19.1.0__react@19.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2", + "npm:cmdk@^1.1.1": "1.1.1_react@19.1.0_react-dom@19.1.0__react@19.1.0_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7", "npm:crypto-random-string@5": "5.0.0", "npm:gzipper@^8.2.1": "8.2.1", - "npm:happy-dom@^17.4.6": "17.4.6", + "npm:happy-dom@^17.6.3": "17.6.3", "npm:i18next-browser-languagedetector@^8.1.0": "8.1.0", "npm:i18next-http-backend@^3.0.2": "3.0.2", - "npm:i18next@^25.2.0": "25.2.0_typescript@5.8.3", - "npm:idb-keyval@^6.2.1": "6.2.1", + "npm:i18next@^25.2.1": "25.2.1_typescript@5.8.3", + "npm:idb-keyval@^6.2.2": "6.2.2", "npm:immer@^10.1.1": "10.1.1", "npm:js-cookie@^3.0.5": "3.0.5", - "npm:lucide-react@0.507": "0.507.0_react@19.1.0", - "npm:maplibre-gl@5.4.0": "5.4.0", - "npm:postcss@^8.5.3": "8.5.3", + "npm:lucide-react@0.513": "0.513.0_react@19.1.0", + "npm:maplibre-gl@5.6.0": "5.6.0", + "npm:postcss@^8.5.4": "8.5.4", "npm:react-dom@^19.1.0": "19.1.0_react@19.1.0", "npm:react-error-boundary@6": "6.0.0_react@19.1.0", - "npm:react-hook-form@^7.56.2": "7.56.2_react@19.1.0", - "npm:react-i18next@^15.5.1": "15.5.1_i18next@25.2.0__typescript@5.8.3_react@19.1.0_typescript@5.8.3", - "npm:react-map-gl@8.0.4": "8.0.4_maplibre-gl@5.4.0_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "npm:react-hook-form@^7.57.0": "7.57.0_react@19.1.0", + "npm:react-i18next@^15.5.2": "15.5.2_i18next@25.2.1__typescript@5.8.3_react@19.1.0_typescript@5.8.3", + "npm:react-map-gl@8.0.4": "8.0.4_maplibre-gl@5.6.0_react@19.1.0_react-dom@19.1.0__react@19.1.0", "npm:react-qrcode-logo@3": "3.0.0_react@19.1.0_react-dom@19.1.0__react@19.1.0", "npm:react@^19.1.0": "19.1.0", "npm:rfc4648@^1.5.4": "1.5.4", "npm:simple-git-hooks@^2.13.0": "2.13.0", - "npm:tailwind-merge@^3.2.0": "3.2.0", - "npm:tailwindcss-animate@^1.0.7": "1.0.7_tailwindcss@4.1.5", - "npm:tailwindcss@^4.1.5": "4.1.5", + "npm:tailwind-merge@^3.3.0": "3.3.0", + "npm:tailwindcss-animate@^1.0.7": "1.0.7_tailwindcss@4.1.8", + "npm:tailwindcss@^4.1.8": "4.1.8", "npm:tar@^7.4.3": "7.4.3", "npm:testing-library@^0.0.2": "0.0.2_@angular+common@6.1.10__@angular+core@6.1.10___rxjs@6.6.7___zone.js@0.8.29__rxjs@6.6.7_@angular+core@6.1.10__rxjs@6.6.7__zone.js@0.8.29", "npm:typescript@^5.8.3": "5.8.3", - "npm:vite-plugin-i18n-ally@^6.0.1": "6.0.1_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_@types+node@22.15.3", - "npm:vite-plugin-node-polyfills@0.23": "0.23.0_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_@types+node@22.15.3", - "npm:vite-plugin-pwa@1": "1.0.0_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_workbox-build@7.3.0__ajv@8.17.1__@babel+core@7.27.1__rollup@2.79.2_workbox-window@7.3.0_@types+node@22.15.3", - "npm:vite-plugin-static-copy@3": "3.0.0_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_@types+node@22.15.3", - "npm:vite@^6.3.4": "6.3.4_@types+node@22.15.3_picomatch@4.0.2", - "npm:vitest@^3.1.2": "3.1.2_@types+node@22.15.3_happy-dom@17.4.6_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2", - "npm:zod@^3.25.0": "3.25.49", - "npm:zustand@5.0.4": "5.0.4_@types+react@19.1.2_immer@10.1.1_react@19.1.0" + "npm:vite-plugin-i18n-ally@^6.1.0": "6.1.0_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_@types+node@24.0.0", + "npm:vite-plugin-node-polyfills@0.23": "0.23.0_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_@types+node@24.0.0", + "npm:vite-plugin-pwa@1": "1.0.0_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_workbox-build@7.3.0__ajv@8.17.1__@babel+core@7.27.4__rollup@2.79.2_workbox-window@7.3.0_@types+node@24.0.0", + "npm:vite-plugin-static-copy@3": "3.0.0_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_@types+node@24.0.0", + "npm:vite@^6.3.5": "6.3.5_@types+node@24.0.0_picomatch@4.0.2", + "npm:vitest@^3.2.3": "3.2.3_@types+node@24.0.0_happy-dom@17.6.3_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2", + "npm:zod@^3.25.57": "3.25.57", + "npm:zustand@5.0.5": "5.0.5_@types+react@19.1.7_immer@10.1.1_react@19.1.0" }, "jsr": { - "@std/path@1.0.6": { - "integrity": "ab2c55f902b380cf28e0eec501b4906e4c1960d13f00e11cfbcd21de15f18fed" - }, "@std/path@1.1.0": { "integrity": "ddc94f8e3c275627281cbc23341df6b8bcc874d70374f75fec2533521e3d6886" } }, "npm": { - "@adobe/css-tools@4.4.2": { - "integrity": "sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==" + "@adobe/css-tools@4.4.3": { + "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==" }, "@alloc/quick-lru@5.2.0": { "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" @@ -140,15 +135,15 @@ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dependencies": [ "@babel/helper-validator-identifier", - "js-tokens", + "js-tokens@4.0.0", "picocolors" ] }, - "@babel/compat-data@7.27.1": { - "integrity": "sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==" + "@babel/compat-data@7.27.5": { + "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==" }, - "@babel/core@7.27.1": { - "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", + "@babel/core@7.27.4": { + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", "dependencies": [ "@ampproject/remapping", "@babel/code-frame", @@ -167,8 +162,8 @@ "semver" ] }, - "@babel/generator@7.27.1": { - "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "@babel/generator@7.27.5": { + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", "dependencies": [ "@babel/parser", "@babel/types", @@ -177,14 +172,14 @@ "jsesc@3.1.0" ] }, - "@babel/helper-annotate-as-pure@7.27.1": { - "integrity": "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==", + "@babel/helper-annotate-as-pure@7.27.3": { + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dependencies": [ "@babel/types" ] }, - "@babel/helper-compilation-targets@7.27.1": { - "integrity": "sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==", + "@babel/helper-compilation-targets@7.27.2": { + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dependencies": [ "@babel/compat-data", "@babel/helper-validator-option", @@ -193,7 +188,7 @@ "semver" ] }, - "@babel/helper-create-class-features-plugin@7.27.1_@babel+core@7.27.1": { + "@babel/helper-create-class-features-plugin@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", "dependencies": [ "@babel/core", @@ -206,7 +201,7 @@ "semver" ] }, - "@babel/helper-create-regexp-features-plugin@7.27.1_@babel+core@7.27.1": { + "@babel/helper-create-regexp-features-plugin@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", "dependencies": [ "@babel/core", @@ -215,7 +210,7 @@ "semver" ] }, - "@babel/helper-define-polyfill-provider@0.6.4_@babel+core@7.27.1": { + "@babel/helper-define-polyfill-provider@0.6.4_@babel+core@7.27.4": { "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", "dependencies": [ "@babel/core", @@ -240,8 +235,8 @@ "@babel/types" ] }, - "@babel/helper-module-transforms@7.27.1_@babel+core@7.27.1": { - "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", + "@babel/helper-module-transforms@7.27.3_@babel+core@7.27.4": { + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "dependencies": [ "@babel/core", "@babel/helper-module-imports", @@ -258,7 +253,7 @@ "@babel/helper-plugin-utils@7.27.1": { "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==" }, - "@babel/helper-remap-async-to-generator@7.27.1_@babel+core@7.27.1": { + "@babel/helper-remap-async-to-generator@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dependencies": [ "@babel/core", @@ -267,7 +262,7 @@ "@babel/traverse" ] }, - "@babel/helper-replace-supers@7.27.1_@babel+core@7.27.1": { + "@babel/helper-replace-supers@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "dependencies": [ "@babel/core", @@ -300,21 +295,21 @@ "@babel/types" ] }, - "@babel/helpers@7.27.1": { - "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", + "@babel/helpers@7.27.6": { + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dependencies": [ "@babel/template", "@babel/types" ] }, - "@babel/parser@7.27.1": { - "integrity": "sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==", + "@babel/parser@7.27.5": { + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "dependencies": [ "@babel/types" ], "bin": true }, - "@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", "dependencies": [ "@babel/core", @@ -322,21 +317,21 @@ "@babel/traverse" ] }, - "@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dependencies": [ "@babel/core", @@ -345,7 +340,7 @@ "@babel/plugin-transform-optional-chaining" ] }, - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", "dependencies": [ "@babel/core", @@ -353,41 +348,41 @@ "@babel/traverse" ] }, - "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2_@babel+core@7.27.1": { + "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2_@babel+core@7.27.4": { "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dependencies": [ "@babel/core" ] }, - "@babel/plugin-syntax-import-assertions@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-syntax-import-assertions@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-syntax-import-attributes@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-syntax-import-attributes@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-syntax-jsx@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-syntax-jsx@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-syntax-typescript@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-syntax-typescript@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-syntax-unicode-sets-regex@7.18.6_@babel+core@7.27.1": { + "@babel/plugin-syntax-unicode-sets-regex@7.18.6_@babel+core@7.27.4": { "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dependencies": [ "@babel/core", @@ -395,14 +390,14 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-arrow-functions@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-arrow-functions@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-async-generator-functions@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-async-generator-functions@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", "dependencies": [ "@babel/core", @@ -411,7 +406,7 @@ "@babel/traverse" ] }, - "@babel/plugin-transform-async-to-generator@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-async-to-generator@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "dependencies": [ "@babel/core", @@ -420,21 +415,21 @@ "@babel/helper-remap-async-to-generator" ] }, - "@babel/plugin-transform-block-scoped-functions@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-block-scoped-functions@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-block-scoping@7.27.1_@babel+core@7.27.1": { - "integrity": "sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==", + "@babel/plugin-transform-block-scoping@7.27.5_@babel+core@7.27.4": { + "integrity": "sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-class-properties@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-class-properties@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "dependencies": [ "@babel/core", @@ -442,7 +437,7 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-class-static-block@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-class-static-block@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", "dependencies": [ "@babel/core", @@ -450,7 +445,7 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-classes@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-classes@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", "dependencies": [ "@babel/core", @@ -462,7 +457,7 @@ "globals" ] }, - "@babel/plugin-transform-computed-properties@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-computed-properties@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "dependencies": [ "@babel/core", @@ -470,14 +465,14 @@ "@babel/template" ] }, - "@babel/plugin-transform-destructuring@7.27.1_@babel+core@7.27.1": { - "integrity": "sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==", + "@babel/plugin-transform-destructuring@7.27.3_@babel+core@7.27.4": { + "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-dotall-regex@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-dotall-regex@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "dependencies": [ "@babel/core", @@ -485,14 +480,14 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-duplicate-keys@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-duplicate-keys@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "dependencies": [ "@babel/core", @@ -500,28 +495,28 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-dynamic-import@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-dynamic-import@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-exponentiation-operator@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-exponentiation-operator@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-export-namespace-from@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-export-namespace-from@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-for-of@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-for-of@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dependencies": [ "@babel/core", @@ -529,7 +524,7 @@ "@babel/helper-skip-transparent-expression-wrappers" ] }, - "@babel/plugin-transform-function-name@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-function-name@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dependencies": [ "@babel/core", @@ -538,35 +533,35 @@ "@babel/traverse" ] }, - "@babel/plugin-transform-json-strings@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-json-strings@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-literals@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-literals@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-logical-assignment-operators@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-logical-assignment-operators@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-member-expression-literals@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-member-expression-literals@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-modules-amd@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-modules-amd@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dependencies": [ "@babel/core", @@ -574,7 +569,7 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-modules-commonjs@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-modules-commonjs@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dependencies": [ "@babel/core", @@ -582,7 +577,7 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-modules-systemjs@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-modules-systemjs@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", "dependencies": [ "@babel/core", @@ -592,7 +587,7 @@ "@babel/traverse" ] }, - "@babel/plugin-transform-modules-umd@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-modules-umd@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dependencies": [ "@babel/core", @@ -600,7 +595,7 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-named-capturing-groups-regex@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-named-capturing-groups-regex@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "dependencies": [ "@babel/core", @@ -608,37 +603,38 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-new-target@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-new-target@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-nullish-coalescing-operator@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-nullish-coalescing-operator@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-numeric-separator@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-numeric-separator@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-object-rest-spread@7.27.1_@babel+core@7.27.1": { - "integrity": "sha512-/sSliVc9gHE20/7D5qsdGlq7RG5NCDTWsAhyqzGuq174EtWJoGzIu1BQ7G56eDsTcy1jseBZwv50olSdXOlGuA==", + "@babel/plugin-transform-object-rest-spread@7.27.3_@babel+core@7.27.4": { + "integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==", "dependencies": [ "@babel/core", "@babel/helper-compilation-targets", "@babel/helper-plugin-utils", + "@babel/plugin-transform-destructuring", "@babel/plugin-transform-parameters" ] }, - "@babel/plugin-transform-object-super@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-object-super@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dependencies": [ "@babel/core", @@ -646,14 +642,14 @@ "@babel/helper-replace-supers" ] }, - "@babel/plugin-transform-optional-catch-binding@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-optional-catch-binding@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-optional-chaining@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-optional-chaining@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", "dependencies": [ "@babel/core", @@ -661,14 +657,14 @@ "@babel/helper-skip-transparent-expression-wrappers" ] }, - "@babel/plugin-transform-parameters@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-parameters@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-private-methods@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-private-methods@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "dependencies": [ "@babel/core", @@ -676,7 +672,7 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-private-property-in-object@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-private-property-in-object@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "dependencies": [ "@babel/core", @@ -685,35 +681,35 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-property-literals@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-property-literals@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-react-jsx-self@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-react-jsx-self@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-react-jsx-source@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-react-jsx-source@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-regenerator@7.27.1_@babel+core@7.27.1": { - "integrity": "sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==", + "@babel/plugin-transform-regenerator@7.27.5_@babel+core@7.27.4": { + "integrity": "sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-regexp-modifiers@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-regexp-modifiers@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "dependencies": [ "@babel/core", @@ -721,21 +717,21 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-reserved-words@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-reserved-words@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-shorthand-properties@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-shorthand-properties@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-spread@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-spread@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "dependencies": [ "@babel/core", @@ -743,35 +739,35 @@ "@babel/helper-skip-transparent-expression-wrappers" ] }, - "@babel/plugin-transform-sticky-regex@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-sticky-regex@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-template-literals@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-template-literals@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-typeof-symbol@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-typeof-symbol@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-unicode-escapes@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-unicode-escapes@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dependencies": [ "@babel/core", "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-unicode-property-regex@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-unicode-property-regex@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "dependencies": [ "@babel/core", @@ -779,7 +775,7 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-unicode-regex@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-unicode-regex@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dependencies": [ "@babel/core", @@ -787,7 +783,7 @@ "@babel/helper-plugin-utils" ] }, - "@babel/plugin-transform-unicode-sets-regex@7.27.1_@babel+core@7.27.1": { + "@babel/plugin-transform-unicode-sets-regex@7.27.1_@babel+core@7.27.4": { "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "dependencies": [ "@babel/core", @@ -795,8 +791,8 @@ "@babel/helper-plugin-utils" ] }, - "@babel/preset-env@7.27.1_@babel+core@7.27.1": { - "integrity": "sha512-TZ5USxFpLgKDpdEt8YWBR7p6g+bZo6sHaXLqP2BY/U0acaoI8FTVflcYCr/v94twM1C5IWFdZ/hscq9WjUeLXA==", + "@babel/preset-env@7.27.2_@babel+core@7.27.4": { + "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", "dependencies": [ "@babel/compat-data", "@babel/core", @@ -870,7 +866,7 @@ "semver" ] }, - "@babel/preset-modules@0.1.6-no-external-plugins_@babel+core@7.27.1": { + "@babel/preset-modules@0.1.6-no-external-plugins_@babel+core@7.27.4": { "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dependencies": [ "@babel/core", @@ -879,19 +875,19 @@ "esutils" ] }, - "@babel/runtime@7.27.1": { - "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==" + "@babel/runtime@7.27.6": { + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==" }, - "@babel/template@7.27.1": { - "integrity": "sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==", + "@babel/template@7.27.2": { + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dependencies": [ "@babel/code-frame", "@babel/parser", "@babel/types" ] }, - "@babel/traverse@7.27.1": { - "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "@babel/traverse@7.27.4": { + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", "dependencies": [ "@babel/code-frame", "@babel/generator", @@ -902,15 +898,15 @@ "globals" ] }, - "@babel/types@7.27.1": { - "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "@babel/types@7.27.6": { + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "dependencies": [ "@babel/helper-string-parser", "@babel/helper-validator-identifier" ] }, - "@bufbuild/protobuf@2.2.5": { - "integrity": "sha512-/g5EzJifw5GF8aren8wZ/G5oMuPoGeS6MQD3ca8ddcvdXR5UELUfdTZITCGNhNXynY/AYl3Z4plmxdj/tRl/hQ==" + "@bufbuild/protobuf@2.5.2": { + "integrity": "sha512-foZ7qr0IsUBjzWIq+SuBLfdQCpJ1j8cTuNNT4owngTHoN5KsJb8L9t65fzz7SCeSWzescoOil/0ldqiL041ABg==" }, "@emnapi/core@1.4.3": { "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", @@ -931,146 +927,146 @@ "tslib@2.8.1" ] }, - "@esbuild/aix-ppc64@0.25.3": { - "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", + "@esbuild/aix-ppc64@0.25.5": { + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", "os": ["aix"], "cpu": ["ppc64"] }, - "@esbuild/android-arm64@0.25.3": { - "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", + "@esbuild/android-arm64@0.25.5": { + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", "os": ["android"], "cpu": ["arm64"] }, - "@esbuild/android-arm@0.25.3": { - "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", + "@esbuild/android-arm@0.25.5": { + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", "os": ["android"], "cpu": ["arm"] }, - "@esbuild/android-x64@0.25.3": { - "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", + "@esbuild/android-x64@0.25.5": { + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", "os": ["android"], "cpu": ["x64"] }, - "@esbuild/darwin-arm64@0.25.3": { - "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", + "@esbuild/darwin-arm64@0.25.5": { + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", "os": ["darwin"], "cpu": ["arm64"] }, - "@esbuild/darwin-x64@0.25.3": { - "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", + "@esbuild/darwin-x64@0.25.5": { + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", "os": ["darwin"], "cpu": ["x64"] }, - "@esbuild/freebsd-arm64@0.25.3": { - "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", + "@esbuild/freebsd-arm64@0.25.5": { + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", "os": ["freebsd"], "cpu": ["arm64"] }, - "@esbuild/freebsd-x64@0.25.3": { - "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", + "@esbuild/freebsd-x64@0.25.5": { + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", "os": ["freebsd"], "cpu": ["x64"] }, - "@esbuild/linux-arm64@0.25.3": { - "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", + "@esbuild/linux-arm64@0.25.5": { + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", "os": ["linux"], "cpu": ["arm64"] }, - "@esbuild/linux-arm@0.25.3": { - "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", + "@esbuild/linux-arm@0.25.5": { + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", "os": ["linux"], "cpu": ["arm"] }, - "@esbuild/linux-ia32@0.25.3": { - "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", + "@esbuild/linux-ia32@0.25.5": { + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", "os": ["linux"], "cpu": ["ia32"] }, - "@esbuild/linux-loong64@0.25.3": { - "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", + "@esbuild/linux-loong64@0.25.5": { + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", "os": ["linux"], "cpu": ["loong64"] }, - "@esbuild/linux-mips64el@0.25.3": { - "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", + "@esbuild/linux-mips64el@0.25.5": { + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", "os": ["linux"], "cpu": ["mips64el"] }, - "@esbuild/linux-ppc64@0.25.3": { - "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", + "@esbuild/linux-ppc64@0.25.5": { + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", "os": ["linux"], "cpu": ["ppc64"] }, - "@esbuild/linux-riscv64@0.25.3": { - "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", + "@esbuild/linux-riscv64@0.25.5": { + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", "os": ["linux"], "cpu": ["riscv64"] }, - "@esbuild/linux-s390x@0.25.3": { - "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", + "@esbuild/linux-s390x@0.25.5": { + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", "os": ["linux"], "cpu": ["s390x"] }, - "@esbuild/linux-x64@0.25.3": { - "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", + "@esbuild/linux-x64@0.25.5": { + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", "os": ["linux"], "cpu": ["x64"] }, - "@esbuild/netbsd-arm64@0.25.3": { - "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", + "@esbuild/netbsd-arm64@0.25.5": { + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", "os": ["netbsd"], "cpu": ["arm64"] }, - "@esbuild/netbsd-x64@0.25.3": { - "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", + "@esbuild/netbsd-x64@0.25.5": { + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", "os": ["netbsd"], "cpu": ["x64"] }, - "@esbuild/openbsd-arm64@0.25.3": { - "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", + "@esbuild/openbsd-arm64@0.25.5": { + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", "os": ["openbsd"], "cpu": ["arm64"] }, - "@esbuild/openbsd-x64@0.25.3": { - "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", + "@esbuild/openbsd-x64@0.25.5": { + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", "os": ["openbsd"], "cpu": ["x64"] }, - "@esbuild/sunos-x64@0.25.3": { - "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", + "@esbuild/sunos-x64@0.25.5": { + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", "os": ["sunos"], "cpu": ["x64"] }, - "@esbuild/win32-arm64@0.25.3": { - "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", + "@esbuild/win32-arm64@0.25.5": { + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", "os": ["win32"], "cpu": ["arm64"] }, - "@esbuild/win32-ia32@0.25.3": { - "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", + "@esbuild/win32-ia32@0.25.5": { + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", "os": ["win32"], "cpu": ["ia32"] }, - "@esbuild/win32-x64@0.25.3": { - "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", + "@esbuild/win32-x64@0.25.5": { + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", "os": ["win32"], "cpu": ["x64"] }, - "@floating-ui/core@1.7.0": { - "integrity": "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==", + "@floating-ui/core@1.7.1": { + "integrity": "sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==", "dependencies": [ "@floating-ui/utils" ] }, - "@floating-ui/dom@1.7.0": { - "integrity": "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==", + "@floating-ui/dom@1.7.1": { + "integrity": "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==", "dependencies": [ "@floating-ui/core", "@floating-ui/utils" ] }, - "@floating-ui/react-dom@2.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "@floating-ui/react-dom@2.1.3_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-huMBfiU9UnQ2oBwIhgzyIiSpVgvlDstU8CX0AF+wS+KzmYMs0J2a3GwuFHV1Lz+jlrQGeC1fF+Nv0QoumyV0bA==", "dependencies": [ "@floating-ui/dom", "react", @@ -1123,17 +1119,6 @@ "@jridgewell/sourcemap-codec" ] }, - "@jsr/meshtastic__core@2.6.2": { - "integrity": "sha512-mzsxs9hQeVimQd/tj15Ojw5FYY8Iko3EbDviFZoEw3bmXgiySG53GvQsNA9wV13lFbDu96SM3uK/LI3EHMFY9w==", - "dependencies": [ - "@bufbuild/protobuf", - "@jsr/meshtastic__protobufs", - "crc", - "ste-simple-events", - "tslog" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/meshtastic__core/2.6.2.tgz" - }, "@jsr/meshtastic__core@2.6.4": { "integrity": "sha512-1Kz5DK6peFxluHOJR38vFwfgeJzMXTz+3p6TvibjILVhSQC2U1nu8aJbn6w5zhRqS+j79OmtrRvdzL6VNsTkkQ==", "dependencies": [ @@ -1166,21 +1151,21 @@ "@jsr/meshtastic__transport-http@0.2.1": { "integrity": "sha512-lmQKr3aIINKvtGROU4HchmSVqbZSbkIHqajowRRC8IAjsnR0zNTyxz210QyY4pFUF9hpcW3GRjwq5h/VO2JuGg==", "dependencies": [ - "@jsr/meshtastic__core@2.6.2" + "@jsr/meshtastic__core" ], "tarball": "https://npm.jsr.io/~/11/@jsr/meshtastic__transport-http/0.2.1.tgz" }, - "@jsr/meshtastic__transport-web-bluetooth@0.1.1": { - "integrity": "sha512-eAj23n/Pxe8hMjO/uYbI/C+l1s0tLm41EzvcLWQtLQyEKJpPP+/Eqc5lUmDeF7FVPS2IYhllFJvV8Ili7okHtQ==", + "@jsr/meshtastic__transport-web-bluetooth@0.1.2": { + "integrity": "sha512-Z+5pv9RXNgY0/crKExOH3pZ6LT0HIXFmnBL7NX5AO2knOFRn+4lmxQEhhmiTTlkUfqyEfAvbjuY5u4mq9TPTdQ==", "dependencies": [ - "@jsr/meshtastic__core@2.6.2" + "@jsr/meshtastic__core" ], - "tarball": "https://npm.jsr.io/~/11/@jsr/meshtastic__transport-web-bluetooth/0.1.1.tgz" + "tarball": "https://npm.jsr.io/~/11/@jsr/meshtastic__transport-web-bluetooth/0.1.2.tgz" }, "@jsr/meshtastic__transport-web-serial@0.2.1": { "integrity": "sha512-yumjEGLkAuJYOC3aWKvZzbQqi/LnqaKfNpVCY7Ki7oLtAshNiZrBLiwiFhN7+ZR9FfMdJThyBMqREBDRRWTO1Q==", "dependencies": [ - "@jsr/meshtastic__core@2.6.2" + "@jsr/meshtastic__core" ], "tarball": "https://npm.jsr.io/~/11/@jsr/meshtastic__transport-web-serial/0.2.1.tgz" }, @@ -1225,8 +1210,8 @@ ], "bin": true }, - "@maplibre/maplibre-gl-style-spec@23.2.2": { - "integrity": "sha512-kLcVlItPCULc20SM6pSVA7u8nST9xmQA8d7utc9j3KB0Tf/xhM4GgCn/QsZcmlbN/wW0ujyomDrvZ3/LbwvAmw==", + "@maplibre/maplibre-gl-style-spec@23.3.0": { + "integrity": "sha512-IGJtuBbaGzOUgODdBRg66p8stnwj9iDXkgbYKoYcNiiQmaez5WVRfXm4b03MCDwmZyX93csbfHFWEJJYHnn5oA==", "dependencies": [ "@mapbox/jsonlint-lines-primitives", "@mapbox/unitbezier", @@ -1238,16 +1223,16 @@ ], "bin": true }, - "@napi-rs/wasm-runtime@0.2.9": { - "integrity": "sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==", + "@napi-rs/wasm-runtime@0.2.11": { + "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==", "dependencies": [ "@emnapi/core", "@emnapi/runtime", "@tybys/wasm-util" ] }, - "@noble/curves@1.9.0": { - "integrity": "sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg==", + "@noble/curves@1.9.2": { + "integrity": "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==", "dependencies": [ "@noble/hashes" ] @@ -1278,17 +1263,17 @@ "@radix-ui/primitive@1.1.2": { "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==" }, - "@radix-ui/react-accordion@1.2.8_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-c7OKBvO36PfQIUGIjj1Wko0hH937pYFU2tR5zbIJDUsmTzHoZVHHt4bmb7OOJbzTaWJtVELKWojBHa7OcnUHmQ==", + "@radix-ui/react-accordion@1.2.11_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==", "dependencies": [ "@radix-ui/primitive", "@radix-ui/react-collapsible", - "@radix-ui/react-collection@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-collection", "@radix-ui/react-compose-refs", "@radix-ui/react-context", "@radix-ui/react-direction", "@radix-ui/react-id", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-controllable-state", "@types/react", "@types/react-dom", @@ -1300,10 +1285,10 @@ "@types/react-dom" ] }, - "@radix-ui/react-arrow@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-qz+fxrqgNxG0dYew5l7qR3c7wdgRu1XVUHGnGYX7rg5HM4p9SWaRmJwfgR3J0SgyUKayLmzQIun+N6rWRgiRKw==", + "@radix-ui/react-arrow@1.1.7_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", "dependencies": [ - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@types/react", "@types/react-dom", "react", @@ -1314,14 +1299,14 @@ "@types/react-dom" ] }, - "@radix-ui/react-checkbox@1.2.3_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-pHVzDYsnaDmBlAuwim45y3soIN8H4R7KbkSVirGhXO+R/kO2OLCe0eucUEbddaTcdMHHdzcIGHtZSMSQlA+apw==", + "@radix-ui/react-checkbox@1.3.2_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-yd+dI56KZqawxKZrJ31eENUwqc1QSqg4OZ15rybGjF2ZNwMO+wCyHzAVLRp9qoYJf7kYy0YpZ2b0JCzJ42HZpA==", "dependencies": [ "@radix-ui/primitive", "@radix-ui/react-compose-refs", "@radix-ui/react-context", "@radix-ui/react-presence", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-controllable-state", "@radix-ui/react-use-previous", "@radix-ui/react-use-size", @@ -1335,15 +1320,15 @@ "@types/react-dom" ] }, - "@radix-ui/react-collapsible@1.1.8_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-hxEsLvK9WxIAPyxdDRULL4hcaSjMZCfP7fHB0Z1uUnDoDBat1Zh46hwYfa69DeZAbJrPckjf0AGAtEZyvDyJbw==", + "@radix-ui/react-collapsible@1.1.11_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==", "dependencies": [ "@radix-ui/primitive", "@radix-ui/react-compose-refs", "@radix-ui/react-context", "@radix-ui/react-id", "@radix-ui/react-presence", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-controllable-state", "@radix-ui/react-use-layout-effect", "@types/react", @@ -1356,30 +1341,13 @@ "@types/react-dom" ] }, - "@radix-ui/react-collection@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-cv4vSf7HttqXilDnAnvINd53OTl1/bjUYVZrkFnA7nwmY9Ob2POUy0WY0sfqBAe1s5FyKsyceQlqiEGPYNTadg==", - "dependencies": [ - "@radix-ui/react-compose-refs", - "@radix-ui/react-context", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-slot@1.2.0_@types+react@19.1.2_react@19.1.0", - "@types/react", - "@types/react-dom", - "react", - "react-dom" - ], - "optionalPeers": [ - "@types/react", - "@types/react-dom" - ] - }, - "@radix-ui/react-collection@1.1.7_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "@radix-ui/react-collection@1.1.7_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", "dependencies": [ "@radix-ui/react-compose-refs", "@radix-ui/react-context", - "@radix-ui/react-primitive@2.1.3_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-slot@1.2.3_@types+react@19.1.2_react@19.1.0", + "@radix-ui/react-primitive", + "@radix-ui/react-slot", "@types/react", "@types/react-dom", "react", @@ -1390,7 +1358,7 @@ "@types/react-dom" ] }, - "@radix-ui/react-compose-refs@1.1.2_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-compose-refs@1.1.2_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "dependencies": [ "@types/react", @@ -1400,7 +1368,7 @@ "@types/react" ] }, - "@radix-ui/react-context@1.1.2_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-context@1.1.2_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "dependencies": [ "@types/react", @@ -1410,8 +1378,8 @@ "@types/react" ] }, - "@radix-ui/react-dialog@1.1.11_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-yI7S1ipkP5/+99qhSI6nthfo/tR6bL6Zgxi/+1UO6qPa6UeM6nlafWcQ65vB4rU2XjgjMfMhI3k9Y5MztA62VQ==", + "@radix-ui/react-dialog@1.1.14_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==", "dependencies": [ "@radix-ui/primitive", "@radix-ui/react-compose-refs", @@ -1422,8 +1390,8 @@ "@radix-ui/react-id", "@radix-ui/react-portal", "@radix-ui/react-presence", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-slot@1.2.0_@types+react@19.1.2_react@19.1.0", + "@radix-ui/react-primitive", + "@radix-ui/react-slot", "@radix-ui/react-use-controllable-state", "@types/react", "@types/react-dom", @@ -1437,7 +1405,7 @@ "@types/react-dom" ] }, - "@radix-ui/react-direction@1.1.1_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-direction@1.1.1_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", "dependencies": [ "@types/react", @@ -1447,12 +1415,12 @@ "@types/react" ] }, - "@radix-ui/react-dismissable-layer@1.1.7_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw==", + "@radix-ui/react-dismissable-layer@1.1.10_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==", "dependencies": [ "@radix-ui/primitive", "@radix-ui/react-compose-refs", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-callback-ref", "@radix-ui/react-use-escape-keydown", "@types/react", @@ -1465,15 +1433,15 @@ "@types/react-dom" ] }, - "@radix-ui/react-dropdown-menu@2.1.12_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-VJoMs+BWWE7YhzEQyVwvF9n22Eiyr83HotCVrMQzla/OwRovXCgah7AcaEr4hMNj4gJxSdtIbcHGvmJXOoJVHA==", + "@radix-ui/react-dropdown-menu@2.1.15_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==", "dependencies": [ "@radix-ui/primitive", "@radix-ui/react-compose-refs", "@radix-ui/react-context", "@radix-ui/react-id", "@radix-ui/react-menu", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-controllable-state", "@types/react", "@types/react-dom", @@ -1485,7 +1453,7 @@ "@types/react-dom" ] }, - "@radix-ui/react-focus-guards@1.1.2_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-focus-guards@1.1.2_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==", "dependencies": [ "@types/react", @@ -1495,11 +1463,11 @@ "@types/react" ] }, - "@radix-ui/react-focus-scope@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-r2annK27lIW5w9Ho5NyQgqs0MmgZSTIKXWpVCJaLC1q2kZrZkcqnmHkCHMEmv8XLvsLlurKMPT+kbKkRkm/xVA==", + "@radix-ui/react-focus-scope@1.1.7_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", "dependencies": [ "@radix-ui/react-compose-refs", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-callback-ref", "@types/react", "@types/react-dom", @@ -1511,7 +1479,7 @@ "@types/react-dom" ] }, - "@radix-ui/react-id@1.1.1_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-id@1.1.1_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", "dependencies": [ "@radix-ui/react-use-layout-effect", @@ -1522,10 +1490,10 @@ "@types/react" ] }, - "@radix-ui/react-label@2.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-wy3dqizZnZVV4ja0FNnUhIWNwWdoldXrneEyUcVtLYDAt8ovGS4ridtMAOGgXBBIfggL4BOveVWsjXDORdGEQg==", + "@radix-ui/react-label@2.1.7_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", "dependencies": [ - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@types/react", "@types/react-dom", "react", @@ -1536,11 +1504,11 @@ "@types/react-dom" ] }, - "@radix-ui/react-menu@2.1.12_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-+qYq6LfbiGo97Zz9fioX83HCiIYYFNs8zAsVCMQrIakoNYylIzWuoD/anAD3UzvvR6cnswmfRFJFq/zYYq/k7Q==", + "@radix-ui/react-menu@2.1.15_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==", "dependencies": [ "@radix-ui/primitive", - "@radix-ui/react-collection@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-collection", "@radix-ui/react-compose-refs", "@radix-ui/react-context", "@radix-ui/react-direction", @@ -1551,9 +1519,9 @@ "@radix-ui/react-popper", "@radix-ui/react-portal", "@radix-ui/react-presence", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-roving-focus@1.1.7_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-slot@1.2.0_@types+react@19.1.2_react@19.1.0", + "@radix-ui/react-primitive", + "@radix-ui/react-roving-focus", + "@radix-ui/react-slot", "@radix-ui/react-use-callback-ref", "@types/react", "@types/react-dom", @@ -1567,18 +1535,18 @@ "@types/react-dom" ] }, - "@radix-ui/react-menubar@1.1.12_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-bM2vT5nxRqJH/d1vFQ9jLsW4qR70yFQw2ZD1TUPWUNskDsV0eYeMbbNJqxNjGMOVogEkOJaHtu11kzYdTJvVJg==", + "@radix-ui/react-menubar@1.1.15_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-Z71C7LGD+YDYo3TV81paUs8f3Zbmkvg6VLRQpKYfzioOE6n7fOhA3ApK/V/2Odolxjoc4ENk8AYCjohCNayd5A==", "dependencies": [ "@radix-ui/primitive", - "@radix-ui/react-collection@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-collection", "@radix-ui/react-compose-refs", "@radix-ui/react-context", "@radix-ui/react-direction", "@radix-ui/react-id", "@radix-ui/react-menu", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-roving-focus@1.1.7_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", + "@radix-ui/react-roving-focus", "@radix-ui/react-use-controllable-state", "@types/react", "@types/react-dom", @@ -1590,8 +1558,8 @@ "@types/react-dom" ] }, - "@radix-ui/react-popover@1.1.11_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-yFMfZkVA5G3GJnBgb2PxrrcLKm1ZLWXrbYVgdyTl//0TYEIHS9LJbnyz7WWcZ0qCq7hIlJZpRtxeSeIG5T5oJw==", + "@radix-ui/react-popover@1.1.14_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==", "dependencies": [ "@radix-ui/primitive", "@radix-ui/react-compose-refs", @@ -1603,8 +1571,8 @@ "@radix-ui/react-popper", "@radix-ui/react-portal", "@radix-ui/react-presence", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-slot@1.2.0_@types+react@19.1.2_react@19.1.0", + "@radix-ui/react-primitive", + "@radix-ui/react-slot", "@radix-ui/react-use-controllable-state", "@types/react", "@types/react-dom", @@ -1618,14 +1586,14 @@ "@types/react-dom" ] }, - "@radix-ui/react-popper@1.2.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-3p2Rgm/a1cK0r/UVkx5F/K9v/EplfjAeIFCGOPYPO4lZ0jtg4iSQXt/YGTSLWaf4x7NG6Z4+uKFcylcTZjeqDA==", + "@radix-ui/react-popper@1.2.7_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==", "dependencies": [ "@floating-ui/react-dom", "@radix-ui/react-arrow", "@radix-ui/react-compose-refs", "@radix-ui/react-context", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-callback-ref", "@radix-ui/react-use-layout-effect", "@radix-ui/react-use-rect", @@ -1641,10 +1609,10 @@ "@types/react-dom" ] }, - "@radix-ui/react-portal@1.1.6_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw==", + "@radix-ui/react-portal@1.1.9_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", "dependencies": [ - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-layout-effect", "@types/react", "@types/react-dom", @@ -1656,7 +1624,7 @@ "@types/react-dom" ] }, - "@radix-ui/react-presence@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "@radix-ui/react-presence@1.1.4_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", "dependencies": [ "@radix-ui/react-compose-refs", @@ -1671,24 +1639,10 @@ "@types/react-dom" ] }, - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw==", - "dependencies": [ - "@radix-ui/react-slot@1.2.0_@types+react@19.1.2_react@19.1.0", - "@types/react", - "@types/react-dom", - "react", - "react-dom" - ], - "optionalPeers": [ - "@types/react", - "@types/react-dom" - ] - }, - "@radix-ui/react-primitive@2.1.3_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "@radix-ui/react-primitive@2.1.3_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "dependencies": [ - "@radix-ui/react-slot@1.2.3_@types+react@19.1.2_react@19.1.0", + "@radix-ui/react-slot", "@types/react", "@types/react-dom", "react", @@ -1699,38 +1653,16 @@ "@types/react-dom" ] }, - "@radix-ui/react-roving-focus@1.1.10_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "@radix-ui/react-roving-focus@1.1.10_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { "integrity": "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==", "dependencies": [ "@radix-ui/primitive", - "@radix-ui/react-collection@1.1.7_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-compose-refs", - "@radix-ui/react-context", - "@radix-ui/react-direction", - "@radix-ui/react-id", - "@radix-ui/react-primitive@2.1.3_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-use-callback-ref", - "@radix-ui/react-use-controllable-state", - "@types/react", - "@types/react-dom", - "react", - "react-dom" - ], - "optionalPeers": [ - "@types/react", - "@types/react-dom" - ] - }, - "@radix-ui/react-roving-focus@1.1.7_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-C6oAg451/fQT3EGbWHbCQjYTtbyjNO1uzQgMzwyivcHT3GKNEmu1q3UuREhN+HzHAVtv3ivMVK08QlC+PkYw9Q==", - "dependencies": [ - "@radix-ui/primitive", - "@radix-ui/react-collection@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-collection", "@radix-ui/react-compose-refs", "@radix-ui/react-context", "@radix-ui/react-direction", "@radix-ui/react-id", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-callback-ref", "@radix-ui/react-use-controllable-state", "@types/react", @@ -1743,8 +1675,8 @@ "@types/react-dom" ] }, - "@radix-ui/react-scroll-area@1.2.6_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-lj8OMlpPERXrQIHlEQdlXHJoRT52AMpBrgyPYylOhXYq5e/glsEdtOc/kCQlsTdtgN5U0iDbrrolDadvektJGQ==", + "@radix-ui/react-scroll-area@1.2.9_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==", "dependencies": [ "@radix-ui/number", "@radix-ui/primitive", @@ -1752,7 +1684,7 @@ "@radix-ui/react-context", "@radix-ui/react-direction", "@radix-ui/react-presence", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-callback-ref", "@radix-ui/react-use-layout-effect", "@types/react", @@ -1765,12 +1697,12 @@ "@types/react-dom" ] }, - "@radix-ui/react-select@2.2.2_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-HjkVHtBkuq+r3zUAZ/CvNWUGKPfuicGDbgtZgiQuFmNcV5F+Tgy24ep2nsAW2nFgvhGPJVqeBZa6KyVN0EyrBA==", + "@radix-ui/react-select@2.2.5_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==", "dependencies": [ "@radix-ui/number", "@radix-ui/primitive", - "@radix-ui/react-collection@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-collection", "@radix-ui/react-compose-refs", "@radix-ui/react-context", "@radix-ui/react-direction", @@ -1780,8 +1712,8 @@ "@radix-ui/react-id", "@radix-ui/react-popper", "@radix-ui/react-portal", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-slot@1.2.0_@types+react@19.1.2_react@19.1.0", + "@radix-ui/react-primitive", + "@radix-ui/react-slot", "@radix-ui/react-use-callback-ref", "@radix-ui/react-use-controllable-state", "@radix-ui/react-use-layout-effect", @@ -1799,10 +1731,10 @@ "@types/react-dom" ] }, - "@radix-ui/react-separator@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-2fTm6PSiUm8YPq9W0E4reYuv01EE3aFSzt8edBiXqPHshF8N9+Kymt/k0/R+F3dkY5lQyB/zPtrP82phskLi7w==", + "@radix-ui/react-separator@1.1.7_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", "dependencies": [ - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@types/react", "@types/react-dom", "react", @@ -1813,16 +1745,16 @@ "@types/react-dom" ] }, - "@radix-ui/react-slider@1.3.2_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-oQnqfgSiYkxZ1MrF6672jw2/zZvpB+PJsrIc3Zm1zof1JHf/kj7WhmROw7JahLfOwYQ5/+Ip0rFORgF1tjSiaQ==", + "@radix-ui/react-slider@1.3.5_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==", "dependencies": [ "@radix-ui/number", "@radix-ui/primitive", - "@radix-ui/react-collection@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-collection", "@radix-ui/react-compose-refs", "@radix-ui/react-context", "@radix-ui/react-direction", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-controllable-state", "@radix-ui/react-use-layout-effect", "@radix-ui/react-use-previous", @@ -1837,18 +1769,7 @@ "@types/react-dom" ] }, - "@radix-ui/react-slot@1.2.0_@types+react@19.1.2_react@19.1.0": { - "integrity": "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==", - "dependencies": [ - "@radix-ui/react-compose-refs", - "@types/react", - "react" - ], - "optionalPeers": [ - "@types/react" - ] - }, - "@radix-ui/react-slot@1.2.3_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-slot@1.2.3_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "dependencies": [ "@radix-ui/react-compose-refs", @@ -1859,13 +1780,13 @@ "@types/react" ] }, - "@radix-ui/react-switch@1.2.2_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-7Z8n6L+ifMIIYZ83f28qWSceUpkXuslI2FJ34+kDMTiyj91ENdpdQ7VCidrzj5JfwfZTeano/BnGBbu/jqa5rQ==", + "@radix-ui/react-switch@1.2.5_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==", "dependencies": [ "@radix-ui/primitive", "@radix-ui/react-compose-refs", "@radix-ui/react-context", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-controllable-state", "@radix-ui/react-use-previous", "@radix-ui/react-use-size", @@ -1879,16 +1800,16 @@ "@types/react-dom" ] }, - "@radix-ui/react-tabs@1.1.9_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-KIjtwciYvquiW/wAFkELZCVnaNLBsYNhTNcvl+zfMAbMhRkcvNuCLXDDd22L0j7tagpzVh/QwbFpwAATg7ILPw==", + "@radix-ui/react-tabs@1.1.12_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==", "dependencies": [ "@radix-ui/primitive", "@radix-ui/react-context", "@radix-ui/react-direction", "@radix-ui/react-id", "@radix-ui/react-presence", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-roving-focus@1.1.7_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", + "@radix-ui/react-roving-focus", "@radix-ui/react-use-controllable-state", "@types/react", "@types/react-dom", @@ -1900,17 +1821,17 @@ "@types/react-dom" ] }, - "@radix-ui/react-toast@1.2.11_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-Ed2mlOmT+tktOsu2NZBK1bCSHh/uqULu1vWOkpQTVq53EoOuZUZw7FInQoDB3uil5wZc2oe0XN9a7uVZB7/6AQ==", + "@radix-ui/react-toast@1.2.14_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-nAP5FBxBJGQ/YfUB+r+O6USFVkWq3gAInkxyEnmvEV5jtSbfDhfa4hwX8CraCnbjMLsE7XSf/K75l9xXY7joWg==", "dependencies": [ "@radix-ui/primitive", - "@radix-ui/react-collection@1.1.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-collection", "@radix-ui/react-compose-refs", "@radix-ui/react-context", "@radix-ui/react-dismissable-layer", "@radix-ui/react-portal", "@radix-ui/react-presence", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-callback-ref", "@radix-ui/react-use-controllable-state", "@radix-ui/react-use-layout-effect", @@ -1925,14 +1846,14 @@ "@types/react-dom" ] }, - "@radix-ui/react-toggle-group@1.1.10_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "@radix-ui/react-toggle-group@1.1.10_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { "integrity": "sha512-kiU694Km3WFLTC75DdqgM/3Jauf3rD9wxeS9XtyWFKsBUeZA337lC+6uUazT7I1DhanZ5gyD5Stf8uf2dbQxOQ==", "dependencies": [ "@radix-ui/primitive", "@radix-ui/react-context", "@radix-ui/react-direction", - "@radix-ui/react-primitive@2.1.3_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-roving-focus@1.1.10_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", + "@radix-ui/react-roving-focus", "@radix-ui/react-toggle", "@radix-ui/react-use-controllable-state", "@types/react", @@ -1945,11 +1866,11 @@ "@types/react-dom" ] }, - "@radix-ui/react-toggle@1.1.9_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "@radix-ui/react-toggle@1.1.9_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { "integrity": "sha512-ZoFkBBz9zv9GWer7wIjvdRxmh2wyc2oKWw6C6CseWd6/yq1DK/l5lJ+wnsmFwJZbBYqr02mrf8A2q/CVCuM3ZA==", "dependencies": [ "@radix-ui/primitive", - "@radix-ui/react-primitive@2.1.3_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@radix-ui/react-use-controllable-state", "@types/react", "@types/react-dom", @@ -1961,8 +1882,8 @@ "@types/react-dom" ] }, - "@radix-ui/react-tooltip@1.2.4_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-DyW8VVeeMSSLFvAmnVnCwvI3H+1tpJFHT50r+tdOoMse9XqYDBCcyux8u3G2y+LOpt7fPQ6KKH0mhs+ce1+Z5w==", + "@radix-ui/react-tooltip@1.2.7_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==", "dependencies": [ "@radix-ui/primitive", "@radix-ui/react-compose-refs", @@ -1972,8 +1893,8 @@ "@radix-ui/react-popper", "@radix-ui/react-portal", "@radix-ui/react-presence", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "@radix-ui/react-slot@1.2.0_@types+react@19.1.2_react@19.1.0", + "@radix-ui/react-primitive", + "@radix-ui/react-slot", "@radix-ui/react-use-controllable-state", "@radix-ui/react-visually-hidden", "@types/react", @@ -1986,7 +1907,7 @@ "@types/react-dom" ] }, - "@radix-ui/react-use-callback-ref@1.1.1_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-use-callback-ref@1.1.1_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", "dependencies": [ "@types/react", @@ -1996,7 +1917,7 @@ "@types/react" ] }, - "@radix-ui/react-use-controllable-state@1.2.2_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-use-controllable-state@1.2.2_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", "dependencies": [ "@radix-ui/react-use-effect-event", @@ -2008,7 +1929,7 @@ "@types/react" ] }, - "@radix-ui/react-use-effect-event@0.0.2_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-use-effect-event@0.0.2_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", "dependencies": [ "@radix-ui/react-use-layout-effect", @@ -2019,7 +1940,7 @@ "@types/react" ] }, - "@radix-ui/react-use-escape-keydown@1.1.1_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-use-escape-keydown@1.1.1_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", "dependencies": [ "@radix-ui/react-use-callback-ref", @@ -2030,7 +1951,7 @@ "@types/react" ] }, - "@radix-ui/react-use-layout-effect@1.1.1_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-use-layout-effect@1.1.1_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", "dependencies": [ "@types/react", @@ -2040,7 +1961,7 @@ "@types/react" ] }, - "@radix-ui/react-use-previous@1.1.1_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-use-previous@1.1.1_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", "dependencies": [ "@types/react", @@ -2050,7 +1971,7 @@ "@types/react" ] }, - "@radix-ui/react-use-rect@1.1.1_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-use-rect@1.1.1_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", "dependencies": [ "@radix-ui/rect", @@ -2061,7 +1982,7 @@ "@types/react" ] }, - "@radix-ui/react-use-size@1.1.1_@types+react@19.1.2_react@19.1.0": { + "@radix-ui/react-use-size@1.1.1_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", "dependencies": [ "@radix-ui/react-use-layout-effect", @@ -2072,10 +1993,10 @@ "@types/react" ] }, - "@radix-ui/react-visually-hidden@1.2.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-rQj0aAWOpCdCMRbI6pLQm8r7S2BM3YhTa0SzOYD55k+hJA8oo9J+H+9wLM9oMlZWOX/wJWPTzfDfmZkf7LvCfg==", + "@radix-ui/react-visually-hidden@1.2.3_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", "dependencies": [ - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "@types/react", "@types/react-dom", "react", @@ -2089,7 +2010,10 @@ "@radix-ui/rect@1.1.1": { "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==" }, - "@rollup/plugin-babel@5.3.1_@babel+core@7.27.1_rollup@2.79.2": { + "@rolldown/pluginutils@1.0.0-beta.11": { + "integrity": "sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==" + }, + "@rollup/plugin-babel@5.3.1_@babel+core@7.27.4_rollup@2.79.2": { "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", "dependencies": [ "@babel/core", @@ -2161,103 +2085,103 @@ "rollup@2.79.2" ] }, - "@rollup/rollup-android-arm-eabi@4.40.1": { - "integrity": "sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==", + "@rollup/rollup-android-arm-eabi@4.42.0": { + "integrity": "sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==", "os": ["android"], "cpu": ["arm"] }, - "@rollup/rollup-android-arm64@4.40.1": { - "integrity": "sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==", + "@rollup/rollup-android-arm64@4.42.0": { + "integrity": "sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==", "os": ["android"], "cpu": ["arm64"] }, - "@rollup/rollup-darwin-arm64@4.40.1": { - "integrity": "sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==", + "@rollup/rollup-darwin-arm64@4.42.0": { + "integrity": "sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==", "os": ["darwin"], "cpu": ["arm64"] }, - "@rollup/rollup-darwin-x64@4.40.1": { - "integrity": "sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==", + "@rollup/rollup-darwin-x64@4.42.0": { + "integrity": "sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==", "os": ["darwin"], "cpu": ["x64"] }, - "@rollup/rollup-freebsd-arm64@4.40.1": { - "integrity": "sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==", + "@rollup/rollup-freebsd-arm64@4.42.0": { + "integrity": "sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==", "os": ["freebsd"], "cpu": ["arm64"] }, - "@rollup/rollup-freebsd-x64@4.40.1": { - "integrity": "sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==", + "@rollup/rollup-freebsd-x64@4.42.0": { + "integrity": "sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==", "os": ["freebsd"], "cpu": ["x64"] }, - "@rollup/rollup-linux-arm-gnueabihf@4.40.1": { - "integrity": "sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==", + "@rollup/rollup-linux-arm-gnueabihf@4.42.0": { + "integrity": "sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==", "os": ["linux"], "cpu": ["arm"] }, - "@rollup/rollup-linux-arm-musleabihf@4.40.1": { - "integrity": "sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==", + "@rollup/rollup-linux-arm-musleabihf@4.42.0": { + "integrity": "sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==", "os": ["linux"], "cpu": ["arm"] }, - "@rollup/rollup-linux-arm64-gnu@4.40.1": { - "integrity": "sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==", + "@rollup/rollup-linux-arm64-gnu@4.42.0": { + "integrity": "sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==", "os": ["linux"], "cpu": ["arm64"] }, - "@rollup/rollup-linux-arm64-musl@4.40.1": { - "integrity": "sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==", + "@rollup/rollup-linux-arm64-musl@4.42.0": { + "integrity": "sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==", "os": ["linux"], "cpu": ["arm64"] }, - "@rollup/rollup-linux-loongarch64-gnu@4.40.1": { - "integrity": "sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==", + "@rollup/rollup-linux-loongarch64-gnu@4.42.0": { + "integrity": "sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==", "os": ["linux"], "cpu": ["loong64"] }, - "@rollup/rollup-linux-powerpc64le-gnu@4.40.1": { - "integrity": "sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==", + "@rollup/rollup-linux-powerpc64le-gnu@4.42.0": { + "integrity": "sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==", "os": ["linux"], "cpu": ["ppc64"] }, - "@rollup/rollup-linux-riscv64-gnu@4.40.1": { - "integrity": "sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==", + "@rollup/rollup-linux-riscv64-gnu@4.42.0": { + "integrity": "sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==", "os": ["linux"], "cpu": ["riscv64"] }, - "@rollup/rollup-linux-riscv64-musl@4.40.1": { - "integrity": "sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==", + "@rollup/rollup-linux-riscv64-musl@4.42.0": { + "integrity": "sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==", "os": ["linux"], "cpu": ["riscv64"] }, - "@rollup/rollup-linux-s390x-gnu@4.40.1": { - "integrity": "sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==", + "@rollup/rollup-linux-s390x-gnu@4.42.0": { + "integrity": "sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==", "os": ["linux"], "cpu": ["s390x"] }, - "@rollup/rollup-linux-x64-gnu@4.40.1": { - "integrity": "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==", + "@rollup/rollup-linux-x64-gnu@4.42.0": { + "integrity": "sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==", "os": ["linux"], "cpu": ["x64"] }, - "@rollup/rollup-linux-x64-musl@4.40.1": { - "integrity": "sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==", + "@rollup/rollup-linux-x64-musl@4.42.0": { + "integrity": "sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==", "os": ["linux"], "cpu": ["x64"] }, - "@rollup/rollup-win32-arm64-msvc@4.40.1": { - "integrity": "sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==", + "@rollup/rollup-win32-arm64-msvc@4.42.0": { + "integrity": "sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==", "os": ["win32"], "cpu": ["arm64"] }, - "@rollup/rollup-win32-ia32-msvc@4.40.1": { - "integrity": "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==", + "@rollup/rollup-win32-ia32-msvc@4.42.0": { + "integrity": "sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==", "os": ["win32"], "cpu": ["ia32"] }, - "@rollup/rollup-win32-x64-msvc@4.40.1": { - "integrity": "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==", + "@rollup/rollup-win32-x64-msvc@4.42.0": { + "integrity": "sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==", "os": ["win32"], "cpu": ["x64"] }, @@ -2270,62 +2194,65 @@ "string.prototype.matchall" ] }, - "@tailwindcss/node@4.1.5": { - "integrity": "sha512-CBhSWo0vLnWhXIvpD0qsPephiaUYfHUX3U9anwDaHZAeuGpTiB3XmsxPAN6qX7bFhipyGBqOa1QYQVVhkOUGxg==", + "@tailwindcss/node@4.1.8": { + "integrity": "sha512-OWwBsbC9BFAJelmnNcrKuf+bka2ZxCE2A4Ft53Tkg4uoiE67r/PMEYwCsourC26E+kmxfwE0hVzMdxqeW+xu7Q==", "dependencies": [ + "@ampproject/remapping", "enhanced-resolve", "jiti", "lightningcss", + "magic-string@0.30.17", + "source-map-js", "tailwindcss" ] }, - "@tailwindcss/oxide-android-arm64@4.1.5": { - "integrity": "sha512-LVvM0GirXHED02j7hSECm8l9GGJ1RfgpWCW+DRn5TvSaxVsv28gRtoL4aWKGnXqwvI3zu1GABeDNDVZeDPOQrw==", + "@tailwindcss/oxide-android-arm64@4.1.8": { + "integrity": "sha512-Fbz7qni62uKYceWYvUjRqhGfZKwhZDQhlrJKGtnZfuNtHFqa8wmr+Wn74CTWERiW2hn3mN5gTpOoxWKk0jRxjg==", "os": ["android"], "cpu": ["arm64"] }, - "@tailwindcss/oxide-darwin-arm64@4.1.5": { - "integrity": "sha512-//TfCA3pNrgnw4rRJOqavW7XUk8gsg9ddi8cwcsWXp99tzdBAZW0WXrD8wDyNbqjW316Pk2hiN/NJx/KWHl8oA==", + "@tailwindcss/oxide-darwin-arm64@4.1.8": { + "integrity": "sha512-RdRvedGsT0vwVVDztvyXhKpsU2ark/BjgG0huo4+2BluxdXo8NDgzl77qh0T1nUxmM11eXwR8jA39ibvSTbi7A==", "os": ["darwin"], "cpu": ["arm64"] }, - "@tailwindcss/oxide-darwin-x64@4.1.5": { - "integrity": "sha512-XQorp3Q6/WzRd9OalgHgaqgEbjP3qjHrlSUb5k1EuS1Z9NE9+BbzSORraO+ecW432cbCN7RVGGL/lSnHxcd+7Q==", + "@tailwindcss/oxide-darwin-x64@4.1.8": { + "integrity": "sha512-t6PgxjEMLp5Ovf7uMb2OFmb3kqzVTPPakWpBIFzppk4JE4ix0yEtbtSjPbU8+PZETpaYMtXvss2Sdkx8Vs4XRw==", "os": ["darwin"], "cpu": ["x64"] }, - "@tailwindcss/oxide-freebsd-x64@4.1.5": { - "integrity": "sha512-bPrLWbxo8gAo97ZmrCbOdtlz/Dkuy8NK97aFbVpkJ2nJ2Jo/rsCbu0TlGx8joCuA3q6vMWTSn01JY46iwG+clg==", + "@tailwindcss/oxide-freebsd-x64@4.1.8": { + "integrity": "sha512-g8C8eGEyhHTqwPStSwZNSrOlyx0bhK/V/+zX0Y+n7DoRUzyS8eMbVshVOLJTDDC+Qn9IJnilYbIKzpB9n4aBsg==", "os": ["freebsd"], "cpu": ["x64"] }, - "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.5": { - "integrity": "sha512-1gtQJY9JzMAhgAfvd/ZaVOjh/Ju/nCoAsvOVJenWZfs05wb8zq+GOTnZALWGqKIYEtyNpCzvMk+ocGpxwdvaVg==", + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.8": { + "integrity": "sha512-Jmzr3FA4S2tHhaC6yCjac3rGf7hG9R6Gf2z9i9JFcuyy0u79HfQsh/thifbYTF2ic82KJovKKkIB6Z9TdNhCXQ==", "os": ["linux"], "cpu": ["arm"] }, - "@tailwindcss/oxide-linux-arm64-gnu@4.1.5": { - "integrity": "sha512-dtlaHU2v7MtdxBXoqhxwsWjav7oim7Whc6S9wq/i/uUMTWAzq/gijq1InSgn2yTnh43kR+SFvcSyEF0GCNu1PQ==", + "@tailwindcss/oxide-linux-arm64-gnu@4.1.8": { + "integrity": "sha512-qq7jXtO1+UEtCmCeBBIRDrPFIVI4ilEQ97qgBGdwXAARrUqSn/L9fUrkb1XP/mvVtoVeR2bt/0L77xx53bPZ/Q==", "os": ["linux"], "cpu": ["arm64"] }, - "@tailwindcss/oxide-linux-arm64-musl@4.1.5": { - "integrity": "sha512-fg0F6nAeYcJ3CriqDT1iVrqALMwD37+sLzXs8Rjy8Z1ZHshJoYceodfyUwGJEsQoTyWbliFNRs2wMQNXtT7MVA==", + "@tailwindcss/oxide-linux-arm64-musl@4.1.8": { + "integrity": "sha512-O6b8QesPbJCRshsNApsOIpzKt3ztG35gfX9tEf4arD7mwNinsoCKxkj8TgEE0YRjmjtO3r9FlJnT/ENd9EVefQ==", "os": ["linux"], "cpu": ["arm64"] }, - "@tailwindcss/oxide-linux-x64-gnu@4.1.5": { - "integrity": "sha512-SO+F2YEIAHa1AITwc8oPwMOWhgorPzzcbhWEb+4oLi953h45FklDmM8dPSZ7hNHpIk9p/SCZKUYn35t5fjGtHA==", + "@tailwindcss/oxide-linux-x64-gnu@4.1.8": { + "integrity": "sha512-32iEXX/pXwikshNOGnERAFwFSfiltmijMIAbUhnNyjFr3tmWmMJWQKU2vNcFX0DACSXJ3ZWcSkzNbaKTdngH6g==", "os": ["linux"], "cpu": ["x64"] }, - "@tailwindcss/oxide-linux-x64-musl@4.1.5": { - "integrity": "sha512-6UbBBplywkk/R+PqqioskUeXfKcBht3KU7juTi1UszJLx0KPXUo10v2Ok04iBJIaDPkIFkUOVboXms5Yxvaz+g==", + "@tailwindcss/oxide-linux-x64-musl@4.1.8": { + "integrity": "sha512-s+VSSD+TfZeMEsCaFaHTaY5YNj3Dri8rST09gMvYQKwPphacRG7wbuQ5ZJMIJXN/puxPcg/nU+ucvWguPpvBDg==", "os": ["linux"], "cpu": ["x64"] }, - "@tailwindcss/oxide-wasm32-wasi@4.1.5": { - "integrity": "sha512-hwALf2K9FHuiXTPqmo1KeOb83fTRNbe9r/Ixv9ZNQ/R24yw8Ge1HOWDDgTdtzntIaIUJG5dfXCf4g9AD4RiyhQ==", + "@tailwindcss/oxide-wasm32-wasi@4.1.8": { + "integrity": "sha512-CXBPVFkpDjM67sS1psWohZ6g/2/cd+cq56vPxK4JeawelxwK4YECgl9Y9TjkE2qfF+9/s1tHHJqrC4SS6cVvSg==", "dependencies": [ "@emnapi/core", "@emnapi/runtime", @@ -2336,18 +2263,22 @@ ], "cpu": ["wasm32"] }, - "@tailwindcss/oxide-win32-arm64-msvc@4.1.5": { - "integrity": "sha512-oDKncffWzaovJbkuR7/OTNFRJQVdiw/n8HnzaCItrNQUeQgjy7oUiYpsm9HUBgpmvmDpSSbGaCa2Evzvk3eFmA==", + "@tailwindcss/oxide-win32-arm64-msvc@4.1.8": { + "integrity": "sha512-7GmYk1n28teDHUjPlIx4Z6Z4hHEgvP5ZW2QS9ygnDAdI/myh3HTHjDqtSqgu1BpRoI4OiLx+fThAyA1JePoENA==", "os": ["win32"], "cpu": ["arm64"] }, - "@tailwindcss/oxide-win32-x64-msvc@4.1.5": { - "integrity": "sha512-WiR4dtyrFdbb+ov0LK+7XsFOsG+0xs0PKZKkt41KDn9jYpO7baE3bXiudPVkTqUEwNfiglCygQHl2jklvSBi7Q==", + "@tailwindcss/oxide-win32-x64-msvc@4.1.8": { + "integrity": "sha512-fou+U20j+Jl0EHwK92spoWISON2OBnCazIc038Xj2TdweYV33ZRkS9nwqiUi2d/Wba5xg5UoHfvynnb/UB49cQ==", "os": ["win32"], "cpu": ["x64"] }, - "@tailwindcss/oxide@4.1.5": { - "integrity": "sha512-1n4br1znquEvyW/QuqMKQZlBen+jxAbvyduU87RS8R3tUSvByAkcaMTkJepNIrTlYhD+U25K4iiCIxE6BGdRYA==", + "@tailwindcss/oxide@4.1.8": { + "integrity": "sha512-d7qvv9PsM5N3VNKhwVUhpK6r4h9wtLkJ6lz9ZY9aeZgrUWk1Z8VPyqyDT9MZlem7GTGseRQHkeB1j3tC7W1P+A==", + "dependencies": [ + "detect-libc", + "tar" + ], "optionalDependencies": [ "@tailwindcss/oxide-android-arm64", "@tailwindcss/oxide-darwin-arm64", @@ -2361,10 +2292,11 @@ "@tailwindcss/oxide-wasm32-wasi", "@tailwindcss/oxide-win32-arm64-msvc", "@tailwindcss/oxide-win32-x64-msvc" - ] + ], + "scripts": true }, - "@tailwindcss/postcss@4.1.5": { - "integrity": "sha512-5lAC2/pzuyfhsFgk6I58HcNy6vPK3dV/PoPxSDuOTVbDvCddYHzHiJZZInGIY0venvzzfrTEUAXJFULAfFmObg==", + "@tailwindcss/postcss@4.1.8": { + "integrity": "sha512-vB/vlf7rIky+w94aWMw34bWW1ka6g6C3xIOdICKX2GC0VcLtL6fhlLiafF0DVIwa9V6EHz8kbWMkS2s2QvvNlw==", "dependencies": [ "@alloc/quick-lru", "@tailwindcss/node", @@ -2373,11 +2305,11 @@ "tailwindcss" ] }, - "@tanstack/history@1.115.0": { - "integrity": "sha512-K7JJNrRVvyjAVnbXOH2XLRhFXDkeP54Kt2P4FR1Kl2KDGlIbkua5VqZQD2rot3qaDrpufyUa63nuLai1kOLTsQ==" + "@tanstack/history@1.120.17": { + "integrity": "sha512-k07LFI4Qo074IIaWzT/XjD0KlkGx2w1V3fnNtclKx0oAl8z4O9kCh6za+FPEIRe98xLgNFEiddDbJeAYGSlPtw==" }, - "@tanstack/react-router-devtools@1.120.15_@tanstack+react-router@1.120.15__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0_solid-js@1.9.7__seroval@1.3.2": { - "integrity": "sha512-5KcUXc3fkiLo/6Y56gOM3JqmYXG1ElIH2iyUWuG5IlcegLrpXhu4OBQ+8Q4+62CD0OKy0ifUDyemrCOAEOfCvw==", + "@tanstack/react-router-devtools@1.120.20_@tanstack+react-router@1.120.20__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0_solid-js@1.9.7__seroval@1.3.2": { + "integrity": "sha512-8wYUBdhaMQLo+f5GlJ31WK3T5gpQWetIG7bEGbhrgmd8Z6nZbUYfq10BtVnIwhJwiQa/39Fi9778/09N13l00A==", "dependencies": [ "@tanstack/react-router", "@tanstack/router-devtools-core", @@ -2386,18 +2318,8 @@ "solid-js" ] }, - "@tanstack/react-router-devtools@1.120.16_@tanstack+react-router@1.120.15__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0_solid-js@1.9.7__seroval@1.3.2": { - "integrity": "sha512-DWXmMLknVJJMGP2k5yeUWBDhJOHbV2jVfnZKxtGzA64xXhwDFgU9qpodcmYSq3+kHWsKrd7iX0wc7d27rGwGDA==", - "dependencies": [ - "@tanstack/react-router", - "@tanstack/router-devtools-core", - "react", - "react-dom", - "solid-js" - ] - }, - "@tanstack/react-router@1.120.15_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-apzBmXh4pHwqUGU3kD8y2FJMi7rVoUbRxh5oV7v8kEb6Aq5Xpdo+OcpThw8h/M2zv7v4Ef8IoY6WFCKKu3HBjQ==", + "@tanstack/react-router@1.120.20_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-+zNruUE9NsfGm9cHd22Xs7FRtBrBhDZe94pB69BEIjqjrEPZct6f5VhTV9WQ+bDZ6fRz8tUuxNFAgm/3Lm4AIg==", "dependencies": [ "@tanstack/history", "@tanstack/react-store", @@ -2418,16 +2340,16 @@ "use-sync-external-store" ] }, - "@tanstack/router-core@1.120.15": { - "integrity": "sha512-soLj+mEuvSxAVFK/3b85IowkkvmSuQL6J0RSIyKJFGFgy0CmUzpcBGEO99+JNWvvvzHgIoY4F4KtLIN+rvFSFA==", + "@tanstack/router-core@1.120.19": { + "integrity": "sha512-5JUVgkxnIM3NxMwzKt0tfz2UopZVxwq6Kl7Rp33zlFJaPjpiRs46VuRjVeAvkpJd6samo1gcH1rWqmnPUmtGcw==", "dependencies": [ "@tanstack/history", "@tanstack/store", "tiny-invariant" ] }, - "@tanstack/router-devtools-core@1.120.15_@tanstack+router-core@1.120.15_solid-js@1.9.7__seroval@1.3.2_tiny-invariant@1.3.3": { - "integrity": "sha512-AT9obPHKpJqnHMbwshozSy6sApg5LchiAll3blpS3MMDybUCidYHrdhe9MZJLmlC99IQiEGmuZERP3VRcuPNHg==", + "@tanstack/router-devtools-core@1.120.19_@tanstack+router-core@1.120.19_solid-js@1.9.7__seroval@1.3.2_tiny-invariant@1.3.3": { + "integrity": "sha512-B/8riYIxs5z+6BmkycfkllhZzRV0/jt8MEqlVHU/HDyAi+00luhi+4xwqQNxiAIUpFa6+0twmGPj4SI3SPA6nQ==", "dependencies": [ "@tanstack/router-core", "clsx", @@ -2436,19 +2358,19 @@ "tiny-invariant" ] }, - "@tanstack/router-devtools@1.120.15_@tanstack+react-router@1.120.15__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-u7KbvupWSppoEUYuhCBzmWkd1hcODzHhvGIuWZKoQO9q/qeNY5XptbzGqBSUooXyoF4T/pAdCRILF5zFIqexJw==", + "@tanstack/router-devtools@1.120.20_@tanstack+react-router@1.120.20__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-NvmPjLxEeFR1XyC0XGd2xmP6LMYTEyBzjikLz/4OvyFtnSJS5iM3nEK0dk2dk3teFSclsf7rJpSsA+iyn9Ab1g==", "dependencies": [ "@tanstack/react-router", - "@tanstack/react-router-devtools@1.120.15_@tanstack+react-router@1.120.15__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0_solid-js@1.9.7__seroval@1.3.2", + "@tanstack/react-router-devtools", "clsx", "goober", "react", "react-dom" ] }, - "@tanstack/router-generator@1.120.15_@tanstack+react-router@1.120.15__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-QwZ0rNXxzgOEUDRRAEWVjofKxuxSMIYEdYC3z20k6a7jkLC6pnlCORFx41Vf4xVCO6eElqlrUKXWLTleYSsvQw==", + "@tanstack/router-generator@1.120.20_@tanstack+react-router@1.120.20__react@19.1.0__react-dom@19.1.0___react@19.1.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "integrity": "sha512-tv8uOjteyMnUUDepjknkiTQ90EL6sNuDGsfeUz0wXFQ6dy/cqYqV0pXzJuBRN79ToteWFdq5sJeypqUdzOC8+w==", "dependencies": [ "@tanstack/react-router", "@tanstack/virtual-file-routes", @@ -2460,8 +2382,8 @@ "@tanstack/react-router" ] }, - "@tanstack/router-plugin@1.120.15_@tanstack+react-router@1.120.15__react@19.1.0__react-dom@19.1.0___react@19.1.0_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_@babel+core@7.27.1_react@19.1.0_react-dom@19.1.0__react@19.1.0_@types+node@22.15.3": { - "integrity": "sha512-ARuuPRKO5HzN3V0LzmkIGm0e447t5VCy2ijbUnzd08KjcJm3lG221ViC2qI+vTom1zp6yeNZHfJW1LBh1yLrTw==", + "@tanstack/router-plugin@1.120.20_@tanstack+react-router@1.120.20__react@19.1.0__react-dom@19.1.0___react@19.1.0_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_@babel+core@7.27.4_react@19.1.0_react-dom@19.1.0__react@19.1.0_@types+node@24.0.0": { + "integrity": "sha512-GaDcIZSVaMoLvG6pu0yRLz8C8jtFo1avV23Q1UbZzv+1i66Uk0twcfTPy/eJbB8pgRA2P5Eu7xo7L3g5HvkGRw==", "dependencies": [ "@babel/core", "@babel/plugin-syntax-jsx", @@ -2488,8 +2410,8 @@ "vite" ] }, - "@tanstack/router-utils@1.115.0": { - "integrity": "sha512-Dng4y+uLR9b5zPGg7dHReHOTHQa6x+G6nCoZshsDtWrYsrdCcJEtLyhwZ5wG8OyYS6dVr/Cn+E5Bd2b6BhJ89w==", + "@tanstack/router-utils@1.120.17": { + "integrity": "sha512-emgT4FthaGtTRaRg9bsr0uaq3EHdl/flS4bKLuFaetiFTt8wk8EVU2a7EZlkaaAfLLDPaiGbP1S2DDaZQ7ci+Q==", "dependencies": [ "@babel/generator", "@babel/parser", @@ -2500,8 +2422,8 @@ "@tanstack/store@0.7.1": { "integrity": "sha512-PjUQKXEXhLYj2X5/6c1Xn/0/qKY0IVFxTJweopRfF26xfjVyb14yALydJrHupDh3/d+1WKmfEgZPBVCmDkzzwg==" }, - "@tanstack/virtual-file-routes@1.115.0": { - "integrity": "sha512-XLUh1Py3AftcERrxkxC5Y5m5mfllRH3YR6YVlyjFgI2Tc2Ssy2NKmQFQIafoxfW459UJ8Dn81nWKETEIJifE4g==" + "@tanstack/virtual-file-routes@1.120.17": { + "integrity": "sha512-Ssi+yKcjG9ru02ieCpUBF7QQBEKGB7WQS1R9va3GHu+Oq9WjzmJ4rifzdugjTeKD3yfT7d1I+pOxRhoWog6CHw==" }, "@testing-library/dom@10.4.0": { "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", @@ -2528,7 +2450,7 @@ "redent" ] }, - "@testing-library/react-hooks@8.0.1_@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "@testing-library/react-hooks@8.0.1_@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { "integrity": "sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==", "dependencies": [ "@babel/runtime", @@ -2542,7 +2464,7 @@ "react-dom" ] }, - "@testing-library/react@16.3.0_@testing-library+dom@10.4.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "@testing-library/react@16.3.0_@testing-library+dom@10.4.0_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7_react@19.1.0_react-dom@19.1.0__react@19.1.0": { "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==", "dependencies": [ "@babel/runtime", @@ -3941,8 +3863,14 @@ "@babel/types" ] }, - "@types/chrome@0.0.318": { - "integrity": "sha512-rrtyYQ1t+g7EyG0FejE+UXQBjSGUHGh0RIdXwUT/laPo9T724NOIgXA94ns6ewmNauwijYa5ck3+dBxWnHcynQ==", + "@types/chai@5.2.2": { + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dependencies": [ + "@types/deep-eql" + ] + }, + "@types/chrome@0.0.326": { + "integrity": "sha512-WS7jKf3ZRZFHOX7dATCZwqNJgdfiSF0qBRFxaO0LhIOvTNBrfkab26bsZwp6EBpYtqp8loMHJTnD6vDTLWPKYw==", "dependencies": [ "@types/filesystem", "@types/har-format" @@ -3951,6 +3879,9 @@ "@types/d3-voronoi@1.1.12": { "integrity": "sha512-DauBl25PKZZ0WVJr42a6CNvI6efsdzofl9sajqZr2Gf5Gu733WkDdUGiPkUHXiUvYGzNNlFQde2wdZdfQPG+yw==" }, + "@types/deep-eql@4.0.2": { + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==" + }, "@types/estree@0.0.39": { "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, @@ -3992,8 +3923,8 @@ "@types/pbf" ] }, - "@types/node@22.15.3": { - "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", + "@types/node@24.0.0": { + "integrity": "sha512-yZQa2zm87aRVcqDyH5+4Hv9KYgSdgwX1rFnGvpbzMaC7YAljmhBET93TPiTd3ObwTL+gSpIzPKg5BqVxdCvxKg==", "dependencies": [ "undici-types" ] @@ -4001,14 +3932,14 @@ "@types/pbf@3.0.5": { "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==" }, - "@types/react-dom@19.1.3_@types+react@19.1.2": { - "integrity": "sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg==", + "@types/react-dom@19.1.6_@types+react@19.1.7": { + "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", "dependencies": [ "@types/react" ] }, - "@types/react@19.1.2": { - "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", + "@types/react@19.1.7": { + "integrity": "sha512-BnsPLV43ddr05N71gaGzyZ5hzkCmGwhMvYc8zmvI8Ci1bRkkDSzDDVfAXfN2tk748OwI7ediiPX6PfT9p0QGVg==", "dependencies": [ "csstype" ] @@ -4016,8 +3947,8 @@ "@types/resolve@1.20.2": { "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" }, - "@types/serviceworker@0.0.133": { - "integrity": "sha512-lEyAbLUMztFbps2GVZ5mKIXl5+BZiGfOOA8JxN6KTiT91Ct31lSAHISKUl2+iOwmrUwNvWeI9rbsFxFqDZCghQ==" + "@types/serviceworker@0.0.139": { + "integrity": "sha512-x//6Zo+4hF9UbHIbUVc830KI5/2URFMgQbYvr98XEzdnJ2ZdP1UsaT8XXHgAeSgZPeRdEMFXrnQ5rS2zCV0vEQ==" }, "@types/supercluster@7.1.3": { "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", @@ -4041,7 +3972,7 @@ "react-dom" ] }, - "@vis.gl/react-maplibre@8.0.4_maplibre-gl@5.4.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "@vis.gl/react-maplibre@8.0.4_maplibre-gl@5.6.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": { "integrity": "sha512-HwZyfLjEu+y1mUFvwDAkVxinGm8fEegaWN+O8np/WZ2Sqe5Lv6OXFpV6GWz9LOEvBYMbGuGk1FQdejo+4HCJ5w==", "dependencies": [ "@maplibre/maplibre-gl-style-spec@19.3.3", @@ -4053,28 +3984,30 @@ "maplibre-gl" ] }, - "@vitejs/plugin-react@4.4.1_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_@babel+core@7.27.1_@types+node@22.15.3": { - "integrity": "sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==", + "@vitejs/plugin-react@4.5.2_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_@babel+core@7.27.4_@types+node@24.0.0": { + "integrity": "sha512-QNVT3/Lxx99nMQWJWF7K4N6apUEuT0KlZA3mx/mVaoGj3smm/8rc8ezz15J1pcbcjDK0V15rpHetVfya08r76Q==", "dependencies": [ "@babel/core", "@babel/plugin-transform-react-jsx-self", "@babel/plugin-transform-react-jsx-source", + "@rolldown/pluginutils", "@types/babel__core", "react-refresh", "vite" ] }, - "@vitest/expect@3.1.2": { - "integrity": "sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==", + "@vitest/expect@3.2.3": { + "integrity": "sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==", "dependencies": [ + "@types/chai", "@vitest/spy", "@vitest/utils", "chai", "tinyrainbow" ] }, - "@vitest/mocker@3.1.2_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_@types+node@22.15.3": { - "integrity": "sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==", + "@vitest/mocker@3.2.3_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_@types+node@24.0.0": { + "integrity": "sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==", "dependencies": [ "@vitest/spy", "estree-walker@3.0.3", @@ -4085,43 +4018,44 @@ "vite" ] }, - "@vitest/pretty-format@3.1.2": { - "integrity": "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==", + "@vitest/pretty-format@3.2.3": { + "integrity": "sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==", "dependencies": [ "tinyrainbow" ] }, - "@vitest/runner@3.1.2": { - "integrity": "sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==", + "@vitest/runner@3.2.3": { + "integrity": "sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==", "dependencies": [ "@vitest/utils", - "pathe" + "pathe", + "strip-literal" ] }, - "@vitest/snapshot@3.1.2": { - "integrity": "sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==", + "@vitest/snapshot@3.2.3": { + "integrity": "sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==", "dependencies": [ "@vitest/pretty-format", "magic-string@0.30.17", "pathe" ] }, - "@vitest/spy@3.1.2": { - "integrity": "sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==", + "@vitest/spy@3.2.3": { + "integrity": "sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==", "dependencies": [ "tinyspy" ] }, - "@vitest/utils@3.1.2": { - "integrity": "sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==", + "@vitest/utils@3.2.3": { + "integrity": "sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==", "dependencies": [ "@vitest/pretty-format", "loupe", "tinyrainbow" ] }, - "acorn@8.14.1": { - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "acorn@8.15.0": { + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "bin": true }, "ajv@8.17.1": { @@ -4158,8 +4092,8 @@ "argparse@2.0.1": { "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "aria-hidden@1.2.4": { - "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "aria-hidden@1.2.6": { + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", "dependencies": [ "tslib@2.8.1" ] @@ -4228,7 +4162,7 @@ "at-least-node@1.0.0": { "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, - "autoprefixer@10.4.21_postcss@8.5.3": { + "autoprefixer@10.4.21_postcss@8.5.4": { "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "dependencies": [ "browserslist", @@ -4256,7 +4190,7 @@ "@babel/types" ] }, - "babel-plugin-polyfill-corejs2@0.4.13_@babel+core@7.27.1": { + "babel-plugin-polyfill-corejs2@0.4.13_@babel+core@7.27.4": { "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", "dependencies": [ "@babel/compat-data", @@ -4265,7 +4199,7 @@ "semver" ] }, - "babel-plugin-polyfill-corejs3@0.11.1_@babel+core@7.27.1": { + "babel-plugin-polyfill-corejs3@0.11.1_@babel+core@7.27.4": { "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", "dependencies": [ "@babel/core", @@ -4273,7 +4207,7 @@ "core-js-compat" ] }, - "babel-plugin-polyfill-regenerator@0.6.4_@babel+core@7.27.1": { + "babel-plugin-polyfill-regenerator@0.6.4_@babel+core@7.27.4": { "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", "dependencies": [ "@babel/core", @@ -4383,8 +4317,8 @@ "pako" ] }, - "browserslist@4.24.5": { - "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", + "browserslist@4.25.0": { + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", "dependencies": [ "caniuse-lite", "electron-to-chromium", @@ -4409,7 +4343,7 @@ "builtin-status-codes@3.0.0": { "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" }, - "bundle-require@5.1.0_esbuild@0.25.3": { + "bundle-require@5.1.0_esbuild@0.25.5": { "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", "dependencies": [ "esbuild", @@ -4455,8 +4389,8 @@ "get-intrinsic" ] }, - "caniuse-lite@1.0.30001716": { - "integrity": "sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw==" + "caniuse-lite@1.0.30001721": { + "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==" }, "chai@5.2.0": { "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", @@ -4519,13 +4453,13 @@ "clsx@2.1.1": { "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" }, - "cmdk@1.1.1_react@19.1.0_react-dom@19.1.0__react@19.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2": { + "cmdk@1.1.1_react@19.1.0_react-dom@19.1.0__react@19.1.0_@types+react@19.1.7_@types+react-dom@19.1.6__@types+react@19.1.7": { "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", "dependencies": [ "@radix-ui/react-compose-refs", "@radix-ui/react-dialog", "@radix-ui/react-id", - "@radix-ui/react-primitive@2.1.0_@types+react@19.1.2_@types+react-dom@19.1.3__@types+react@19.1.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", + "@radix-ui/react-primitive", "react", "react-dom" ] @@ -4572,8 +4506,8 @@ "cookie@1.0.2": { "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==" }, - "core-js-compat@3.42.0": { - "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", + "core-js-compat@3.43.0": { + "integrity": "sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==", "dependencies": [ "browserslist" ] @@ -4689,8 +4623,8 @@ "is-data-view" ] }, - "debug@4.4.0": { - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "debug@4.4.1": { + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dependencies": [ "ms" ] @@ -4789,8 +4723,8 @@ ], "bin": true }, - "electron-to-chromium@1.5.149": { - "integrity": "sha512-UyiO82eb9dVOx8YO3ajDf9jz2kKyt98DEITRdeLPstOEuTlLzDA4Gyq5K9he71TQziU5jUVu2OAu5N48HmQiyQ==" + "electron-to-chromium@1.5.166": { + "integrity": "sha512-QPWqHL0BglzPYyJJ1zSSmwFFL6MFXhbACOCcsCdUMCkzPdS9/OIBVxg516X/Ado2qwAq8k0nJJ7phQPCqiaFAw==" }, "elliptic@6.6.1": { "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", @@ -4817,8 +4751,8 @@ "tapable" ] }, - "es-abstract@1.23.9": { - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "es-abstract@1.24.0": { + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dependencies": [ "array-buffer-byte-length", "arraybuffer.prototype.slice", @@ -4847,7 +4781,9 @@ "is-array-buffer", "is-callable", "is-data-view", + "is-negative-zero", "is-regex", + "is-set", "is-shared-array-buffer", "is-string", "is-typed-array", @@ -4862,6 +4798,7 @@ "safe-push-apply", "safe-regex-test", "set-proto", + "stop-iteration-iterator", "string.prototype.trim", "string.prototype.trimend", "string.prototype.trimstart", @@ -4905,8 +4842,8 @@ "is-symbol" ] }, - "esbuild@0.25.3": { - "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", + "esbuild@0.25.5": { + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", "optionalDependencies": [ "@esbuild/aix-ppc64", "@esbuild/android-arm", @@ -5006,8 +4943,8 @@ "reusify" ] }, - "fdir@6.4.4_picomatch@4.0.2": { - "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "fdir@6.4.6_picomatch@4.0.2": { + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "dependencies": [ "picomatch@4.0.2" ], @@ -5219,8 +5156,8 @@ ], "bin": true }, - "happy-dom@17.4.6": { - "integrity": "sha512-OEV1hDe9i2rFr66+WZNiwy1S8rAJy6bRXmXql68YJDjdfHBRbN76om+qVh68vQACf6y5Bcr90e/oK53RQxsDdg==", + "happy-dom@17.6.3": { + "integrity": "sha512-UVIHeVhxmxedbWPCfgS55Jg2rDfwf2BCKeylcPSqazLz5w3Kri7Q4xdBJubsr/+VUzFLh0VjIvh13RaDA2/Xug==", "dependencies": [ "webidl-conversions@7.0.0", "whatwg-mimetype" @@ -5302,8 +5239,8 @@ "cross-fetch" ] }, - "i18next@25.2.0_typescript@5.8.3": { - "integrity": "sha512-ERhJICsxkw1vE7G0lhCUYv4ZxdBEs03qblt1myJs94rYRK9loJF3xDj8mgQz3LmCyp0yYrNjbN/1/GWZTZDGCA==", + "i18next@25.2.1_typescript@5.8.3": { + "integrity": "sha512-+UoXK5wh+VlE1Zy5p6MjcvctHXAhRwQKCxiJD8noKZzIXmnAX8gdHX5fLPA3MEVxEN4vbZkQFy8N0LyD9tUqPw==", "dependencies": [ "@babel/runtime", "typescript" @@ -5312,8 +5249,8 @@ "typescript" ] }, - "idb-keyval@6.2.1": { - "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==" + "idb-keyval@6.2.2": { + "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==" }, "idb@7.1.1": { "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" @@ -5324,7 +5261,7 @@ "immer@10.1.1": { "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==" }, - "importx@0.5.2_esbuild@0.25.3": { + "importx@0.5.2_esbuild@0.25.5": { "integrity": "sha512-YEwlK86Ml5WiTxN/ECUYC5U7jd1CisAVw7ya4i9ZppBoHfFkT2+hChhr3PE2fYxUKLkNyivxEQpa5Ruil1LJBQ==", "dependencies": [ "bundle-require", @@ -5474,6 +5411,9 @@ "define-properties" ] }, + "is-negative-zero@2.0.3": { + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==" + }, "is-number-object@1.1.1": { "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dependencies": [ @@ -5592,6 +5532,9 @@ "js-tokens@4.0.0": { "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "js-tokens@9.0.1": { + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==" + }, "js-yaml@4.1.0": { "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": [ @@ -5656,58 +5599,58 @@ "leven@3.1.0": { "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, - "lightningcss-darwin-arm64@1.29.2": { - "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", + "lightningcss-darwin-arm64@1.30.1": { + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", "os": ["darwin"], "cpu": ["arm64"] }, - "lightningcss-darwin-x64@1.29.2": { - "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", + "lightningcss-darwin-x64@1.30.1": { + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", "os": ["darwin"], "cpu": ["x64"] }, - "lightningcss-freebsd-x64@1.29.2": { - "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", + "lightningcss-freebsd-x64@1.30.1": { + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", "os": ["freebsd"], "cpu": ["x64"] }, - "lightningcss-linux-arm-gnueabihf@1.29.2": { - "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", + "lightningcss-linux-arm-gnueabihf@1.30.1": { + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", "os": ["linux"], "cpu": ["arm"] }, - "lightningcss-linux-arm64-gnu@1.29.2": { - "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", + "lightningcss-linux-arm64-gnu@1.30.1": { + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", "os": ["linux"], "cpu": ["arm64"] }, - "lightningcss-linux-arm64-musl@1.29.2": { - "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", + "lightningcss-linux-arm64-musl@1.30.1": { + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", "os": ["linux"], "cpu": ["arm64"] }, - "lightningcss-linux-x64-gnu@1.29.2": { - "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", + "lightningcss-linux-x64-gnu@1.30.1": { + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", "os": ["linux"], "cpu": ["x64"] }, - "lightningcss-linux-x64-musl@1.29.2": { - "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", + "lightningcss-linux-x64-musl@1.30.1": { + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", "os": ["linux"], "cpu": ["x64"] }, - "lightningcss-win32-arm64-msvc@1.29.2": { - "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", + "lightningcss-win32-arm64-msvc@1.30.1": { + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", "os": ["win32"], "cpu": ["arm64"] }, - "lightningcss-win32-x64-msvc@1.29.2": { - "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", + "lightningcss-win32-x64-msvc@1.30.1": { + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", "os": ["win32"], "cpu": ["x64"] }, - "lightningcss@1.29.2": { - "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", + "lightningcss@1.30.1": { + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", "dependencies": [ "detect-libc" ], @@ -5761,8 +5704,8 @@ "yallist@3.1.1" ] }, - "lucide-react@0.507.0_react@19.1.0": { - "integrity": "sha512-XfgE6gvAHwAtnbUvWiTTHx4S3VGR+cUJHEc0vrh9Ogu672I1Tue2+Cp/8JJqpytgcBHAB1FVI297W4XGNwc2dQ==", + "lucide-react@0.513.0_react@19.1.0": { + "integrity": "sha512-CJZKq2g8Y8yN4Aq002GahSXbG2JpFv9kXwyiOAMvUBv7pxeOFHUWKB0mO7MiY4ZVFCV4aNjv2BJFq/z3DgKPQg==", "dependencies": [ "react" ] @@ -5783,8 +5726,8 @@ "@jridgewell/sourcemap-codec" ] }, - "maplibre-gl@5.4.0": { - "integrity": "sha512-ZVrtdFIhFAqt53H2k5Ssqn7QIKNI19fW+He5tr4loxZxWZffp1aZYY9ImNncAJaALU/NYlV6Eul7UVB56/N7WQ==", + "maplibre-gl@5.6.0": { + "integrity": "sha512-7TuHMozUC4rlIp08bSsxCixFn18P24otrlZU/7UGCO5RufFTJadFzauTrvBHr9FB67MbJ6nvFXEftGd0bUl4Iw==", "dependencies": [ "@mapbox/geojson-rewind", "@mapbox/jsonlint-lines-primitives", @@ -5793,7 +5736,7 @@ "@mapbox/unitbezier", "@mapbox/vector-tile", "@mapbox/whoots-js", - "@maplibre/maplibre-gl-style-spec@23.2.2", + "@maplibre/maplibre-gl-style-spec@23.3.0", "@types/geojson", "@types/geojson-vt", "@types/mapbox__point-geometry", @@ -6109,8 +6052,8 @@ "postcss-value-parser@4.2.0": { "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, - "postcss@8.5.3": { - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "postcss@8.5.4": { + "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", "dependencies": [ "nanoid", "picocolors", @@ -6170,8 +6113,8 @@ "punycode@2.3.1": { "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, - "qrcode-generator@1.4.4": { - "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" + "qrcode-generator@1.5.0": { + "integrity": "sha512-sqo7otiDq5rA4djRkFI7IjLQqxRrLpIou0d3rqr03JJLUGf5raPh91xCio+lFFbQf0SlcVckStz0EmDEX3EeZA==" }, "qs@6.14.0": { "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", @@ -6240,14 +6183,14 @@ "react" ] }, - "react-hook-form@7.56.2_react@19.1.0": { - "integrity": "sha512-vpfuHuQMF/L6GpuQ4c3ZDo+pRYxIi40gQqsCmmfUBwm+oqvBhKhwghCuj2o00YCgSfU6bR9KC/xnQGWm3Gr08A==", + "react-hook-form@7.57.0_react@19.1.0": { + "integrity": "sha512-RbEks3+cbvTP84l/VXGUZ+JMrKOS8ykQCRYdm5aYsxnDquL0vspsyNhGRO7pcH6hsZqWlPOjLye7rJqdtdAmlg==", "dependencies": [ "react" ] }, - "react-i18next@15.5.1_i18next@25.2.0__typescript@5.8.3_react@19.1.0_typescript@5.8.3": { - "integrity": "sha512-C8RZ7N7H0L+flitiX6ASjq9p5puVJU1Z8VyL3OgM/QOMRf40BMZX+5TkpxzZVcTmOLPX5zlti4InEX5pFyiVeA==", + "react-i18next@15.5.2_i18next@25.2.1__typescript@5.8.3_react@19.1.0_typescript@5.8.3": { + "integrity": "sha512-ePODyXgmZQAOYTbZXQn5rRsSBu3Gszo69jxW6aKmlSgxKAI1fOhDwSu6bT4EKHciWPKQ7v7lPrjeiadR6Gi+1A==", "dependencies": [ "@babel/runtime", "html-parse-stringify", @@ -6262,7 +6205,7 @@ "react-is@17.0.2": { "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, - "react-map-gl@8.0.4_maplibre-gl@5.4.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": { + "react-map-gl@8.0.4_maplibre-gl@5.6.0_react@19.1.0_react-dom@19.1.0__react@19.1.0": { "integrity": "sha512-SHdpvFIvswsZBg6BCPcwY/nbKuCo3sJM1Cj7Sd+gA3gFRFOixD+KtZ2XSuUWq2WySL2emYEXEgrLZoXsV4Ut4Q==", "dependencies": [ "@vis.gl/react-mapbox", @@ -6287,7 +6230,7 @@ "react-refresh@0.17.0": { "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==" }, - "react-remove-scroll-bar@2.3.8_@types+react@19.1.2_react@19.1.0": { + "react-remove-scroll-bar@2.3.8_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "dependencies": [ "@types/react", @@ -6299,8 +6242,8 @@ "@types/react" ] }, - "react-remove-scroll@2.6.3_@types+react@19.1.2_react@19.1.0": { - "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==", + "react-remove-scroll@2.7.1_@types+react@19.1.7_react@19.1.0": { + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", "dependencies": [ "@types/react", "react", @@ -6314,7 +6257,7 @@ "@types/react" ] }, - "react-style-singleton@2.2.3_@types+react@19.1.2_react@19.1.0": { + "react-style-singleton@2.2.3_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "dependencies": [ "@types/react", @@ -6463,8 +6406,8 @@ ], "bin": true }, - "rollup@4.40.1": { - "integrity": "sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==", + "rollup@4.42.0": { + "integrity": "sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==", "dependencies": [ "@types/estree@1.0.7" ], @@ -6740,6 +6683,13 @@ "ste-core" ] }, + "stop-iteration-iterator@1.1.0": { + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dependencies": [ + "es-errors", + "internal-slot" + ] + }, "stream-browserify@3.0.0": { "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dependencies": [ @@ -6835,6 +6785,12 @@ "min-indent" ] }, + "strip-literal@3.0.0": { + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dependencies": [ + "js-tokens@9.0.1" + ] + }, "supercluster@8.0.1": { "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", "dependencies": [ @@ -6856,20 +6812,20 @@ "tinyqueue@2.0.3" ] }, - "tailwind-merge@3.2.0": { - "integrity": "sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==" + "tailwind-merge@3.3.0": { + "integrity": "sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ==" }, - "tailwindcss-animate@1.0.7_tailwindcss@4.1.5": { + "tailwindcss-animate@1.0.7_tailwindcss@4.1.8": { "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", "dependencies": [ "tailwindcss" ] }, - "tailwindcss@4.1.5": { - "integrity": "sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA==" + "tailwindcss@4.1.8": { + "integrity": "sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og==" }, - "tapable@2.2.1": { - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + "tapable@2.2.2": { + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==" }, "tar@7.4.3": { "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", @@ -6894,8 +6850,8 @@ "unique-string" ] }, - "terser@5.39.0": { - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "terser@5.42.0": { + "integrity": "sha512-UYCvU9YQW2f/Vwl+P0GfhxJxbUGLwd+5QrrGgLajzWAtC/23AX0vcise32kkP7Eu0Wu9VlzzHAXkLObgjQfFlQ==", "dependencies": [ "@jridgewell/source-map", "acorn", @@ -6943,15 +6899,15 @@ "tinyexec@0.3.2": { "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" }, - "tinyglobby@0.2.13_picomatch@4.0.2": { - "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "tinyglobby@0.2.14_picomatch@4.0.2": { + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", "dependencies": [ "fdir", "picomatch@4.0.2" ] }, - "tinypool@1.0.2": { - "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==" + "tinypool@1.1.0": { + "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==" }, "tinyqueue@2.0.3": { "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" @@ -6962,8 +6918,8 @@ "tinyrainbow@2.0.0": { "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==" }, - "tinyspy@3.0.2": { - "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==" + "tinyspy@4.0.3": { + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==" }, "to-regex-range@5.0.1": { "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", @@ -7086,8 +7042,8 @@ "which-boxed-primitive" ] }, - "undici-types@6.21.0": { - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + "undici-types@7.8.0": { + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==" }, "unicode-canonical-property-names-ecmascript@2.0.1": { "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==" @@ -7137,7 +7093,7 @@ "upath@1.2.0": { "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, - "update-browserslist-db@1.1.3_browserslist@4.24.5": { + "update-browserslist-db@1.1.3_browserslist@4.25.0": { "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dependencies": [ "browserslist", @@ -7153,7 +7109,7 @@ "qs" ] }, - "use-callback-ref@1.3.3_@types+react@19.1.2_react@19.1.0": { + "use-callback-ref@1.3.3_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", "dependencies": [ "@types/react", @@ -7164,7 +7120,7 @@ "@types/react" ] }, - "use-sidecar@1.1.3_@types+react@19.1.2_react@19.1.0": { + "use-sidecar@1.1.3_@types+react@19.1.7_react@19.1.0": { "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", "dependencies": [ "@types/react", @@ -7195,8 +7151,8 @@ "which-typed-array" ] }, - "vite-node@3.1.2_@types+node@22.15.3": { - "integrity": "sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA==", + "vite-node@3.2.3_@types+node@24.0.0": { + "integrity": "sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==", "dependencies": [ "cac", "debug", @@ -7206,8 +7162,8 @@ ], "bin": true }, - "vite-plugin-i18n-ally@6.0.1_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_@types+node@22.15.3": { - "integrity": "sha512-BmXlAkrmSRrbaho7iJpBf1d2EPyDK2oqY1AKVxkJEUikGDPducFpLfpmlqTyUNhsWZT01ZLWdjR2uIRnnVJXzw==", + "vite-plugin-i18n-ally@6.1.0_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_@types+node@24.0.0": { + "integrity": "sha512-AyJa2r2FE5xvKpByPP8/ZxEHyn+hx8tizxOurVq+yCxDicaQyBC4N91AntF6iF0N0iiJNt3hrpgjEt8uu2cGUA==", "dependencies": [ "cookie", "debug", @@ -7223,7 +7179,7 @@ "vite" ] }, - "vite-plugin-node-polyfills@0.23.0_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_@types+node@22.15.3": { + "vite-plugin-node-polyfills@0.23.0_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_@types+node@24.0.0": { "integrity": "sha512-4n+Ys+2bKHQohPBKigFlndwWQ5fFKwaGY6muNDMTb0fSQLyBzS+jjUNRZG9sKF0S/Go4ApG6LFnUGopjkILg3w==", "dependencies": [ "@rollup/plugin-inject", @@ -7231,7 +7187,7 @@ "vite" ] }, - "vite-plugin-pwa@1.0.0_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_workbox-build@7.3.0__ajv@8.17.1__@babel+core@7.27.1__rollup@2.79.2_workbox-window@7.3.0_@types+node@22.15.3": { + "vite-plugin-pwa@1.0.0_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_workbox-build@7.3.0__ajv@8.17.1__@babel+core@7.27.4__rollup@2.79.2_workbox-window@7.3.0_@types+node@24.0.0": { "integrity": "sha512-X77jo0AOd5OcxmWj3WnVti8n7Kw2tBgV1c8MCXFclrSlDV23ePzv2eTDIALXI2Qo6nJ5pZJeZAuX0AawvRfoeA==", "dependencies": [ "debug", @@ -7242,7 +7198,7 @@ "workbox-window" ] }, - "vite-plugin-static-copy@3.0.0_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2_@types+node@22.15.3": { + "vite-plugin-static-copy@3.0.0_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2_@types+node@24.0.0": { "integrity": "sha512-Uki9pPUQ4ZnoMEdIFabvoh9h6Bh9Q1m3iF7BrZvoiF30reREpJh2gZb4jOnW1/uYFzyRiLCmFSkM+8hwiq1vWQ==", "dependencies": [ "chokidar", @@ -7253,15 +7209,15 @@ "vite" ] }, - "vite@6.3.4_@types+node@22.15.3_picomatch@4.0.2": { - "integrity": "sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==", + "vite@6.3.5_@types+node@24.0.0_picomatch@4.0.2": { + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dependencies": [ "@types/node", "esbuild", "fdir", "picomatch@4.0.2", "postcss", - "rollup@4.40.1", + "rollup@4.42.0", "tinyglobby" ], "optionalDependencies": [ @@ -7272,9 +7228,10 @@ ], "bin": true }, - "vitest@3.1.2_@types+node@22.15.3_happy-dom@17.4.6_vite@6.3.4__@types+node@22.15.3__picomatch@4.0.2": { - "integrity": "sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==", + "vitest@3.2.3_@types+node@24.0.0_happy-dom@17.6.3_vite@6.3.5__@types+node@24.0.0__picomatch@4.0.2": { + "integrity": "sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==", "dependencies": [ + "@types/chai", "@types/node", "@vitest/expect", "@vitest/mocker", @@ -7289,6 +7246,7 @@ "happy-dom", "magic-string@0.30.17", "pathe", + "picomatch@4.0.2", "std-env", "tinybench", "tinyexec", @@ -7426,7 +7384,7 @@ "workbox-core" ] }, - "workbox-build@7.3.0_ajv@8.17.1_@babel+core@7.27.1_rollup@2.79.2": { + "workbox-build@7.3.0_ajv@8.17.1_@babel+core@7.27.4_rollup@2.79.2": { "integrity": "sha512-JGL6vZTPlxnlqZRhR/K/msqg3wKP+m0wfEUVosK7gsYzSgeIxvZLi1ViJJzVL7CEeI8r7rGFV973RiEqkP3lWQ==", "dependencies": [ "@apideck/better-ajv-errors", @@ -7571,14 +7529,14 @@ "yocto-queue@1.2.1": { "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==" }, - "zod@3.25.49": { - "integrity": "sha512-JMMPMy9ZBk3XFEdbM3iL1brx4NUSejd6xr3ELrrGEfGb355gjhiAWtG3K5o+AViV/3ZfkIrCzXsZn6SbLwTR8Q==" + "zod@3.25.57": { + "integrity": "sha512-6tgzLuwVST5oLUxXTmBqoinKMd3JeesgbgseXeFasKKj8Q1FCZrHnbqJOyiEvr4cVAlbug+CgIsmJ8cl/pU5FA==" }, "zone.js@0.8.29": { "integrity": "sha512-mla2acNCMkWXBD+c+yeUrBUrzOxYMNFdQ6FGfigGGtEVBPJx07BQeJekjt9DmH1FtZek4E9rE1eRR9qQpxACOQ==" }, - "zustand@5.0.4_@types+react@19.1.2_immer@10.1.1_react@19.1.0": { - "integrity": "sha512-39VFTN5InDtMd28ZhjLyuTnlytDr9HfwO512Ai4I8ZABCoyAj4F1+sr7sD1jP/+p7k77Iko0Pb5NhgBFDCX0kQ==", + "zustand@5.0.5_@types+react@19.1.7_immer@10.1.1_react@19.1.0": { + "integrity": "sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==", "dependencies": [ "@types/react", "immer", @@ -7599,48 +7557,48 @@ ], "packageJson": { "dependencies": [ - "npm:@bufbuild/protobuf@^2.2.5", + "npm:@bufbuild/protobuf@^2.5.2", "npm:@jsr/meshtastic__core@2.6.4", "npm:@jsr/meshtastic__js@2.6.0-0", "npm:@jsr/meshtastic__transport-http@*", "npm:@jsr/meshtastic__transport-web-bluetooth@*", "npm:@jsr/meshtastic__transport-web-serial@*", - "npm:@noble/curves@^1.9.0", - "npm:@radix-ui/react-accordion@^1.2.8", - "npm:@radix-ui/react-checkbox@^1.2.3", - "npm:@radix-ui/react-dialog@^1.1.11", - "npm:@radix-ui/react-dropdown-menu@^2.1.12", - "npm:@radix-ui/react-label@^2.1.4", - "npm:@radix-ui/react-menubar@^1.1.12", - "npm:@radix-ui/react-popover@^1.1.11", - "npm:@radix-ui/react-scroll-area@^1.2.6", - "npm:@radix-ui/react-select@^2.2.2", - "npm:@radix-ui/react-separator@^1.1.4", - "npm:@radix-ui/react-slider@^1.3.2", - "npm:@radix-ui/react-switch@^1.2.2", - "npm:@radix-ui/react-tabs@^1.1.9", - "npm:@radix-ui/react-toast@^1.2.11", - "npm:@radix-ui/react-toggle-group@^1.1.9", - "npm:@radix-ui/react-tooltip@^1.2.4", - "npm:@tailwindcss/postcss@^4.1.5", - "npm:@tanstack/react-router-devtools@^1.120.16", - "npm:@tanstack/react-router@^1.120.15", - "npm:@tanstack/router-devtools@^1.120.15", - "npm:@tanstack/router-plugin@^1.120.15", + "npm:@noble/curves@^1.9.2", + "npm:@radix-ui/react-accordion@^1.2.11", + "npm:@radix-ui/react-checkbox@^1.3.2", + "npm:@radix-ui/react-dialog@^1.1.14", + "npm:@radix-ui/react-dropdown-menu@^2.1.15", + "npm:@radix-ui/react-label@^2.1.7", + "npm:@radix-ui/react-menubar@^1.1.15", + "npm:@radix-ui/react-popover@^1.1.14", + "npm:@radix-ui/react-scroll-area@^1.2.9", + "npm:@radix-ui/react-select@^2.2.5", + "npm:@radix-ui/react-separator@^1.1.7", + "npm:@radix-ui/react-slider@^1.3.5", + "npm:@radix-ui/react-switch@^1.2.5", + "npm:@radix-ui/react-tabs@^1.1.12", + "npm:@radix-ui/react-toast@^1.2.14", + "npm:@radix-ui/react-toggle-group@^1.1.10", + "npm:@radix-ui/react-tooltip@^1.2.7", + "npm:@tailwindcss/postcss@^4.1.8", + "npm:@tanstack/react-router-devtools@^1.120.20", + "npm:@tanstack/react-router@^1.120.20", + "npm:@tanstack/router-devtools@^1.120.20", + "npm:@tanstack/router-plugin@^1.120.20", "npm:@testing-library/jest-dom@^6.6.3", "npm:@testing-library/react-hooks@^8.0.1", "npm:@testing-library/react@^16.3.0", "npm:@testing-library/user-event@^14.6.1", "npm:@turf/turf@^7.2.0", - "npm:@types/chrome@^0.0.318", + "npm:@types/chrome@^0.0.326", "npm:@types/js-cookie@^3.0.6", - "npm:@types/node@^22.15.3", - "npm:@types/react-dom@^19.1.3", - "npm:@types/react@^19.1.2", - "npm:@types/serviceworker@^0.0.133", + "npm:@types/node@24", + "npm:@types/react-dom@^19.1.6", + "npm:@types/react@^19.1.7", + "npm:@types/serviceworker@^0.0.139", "npm:@types/w3c-web-serial@^1.0.8", "npm:@types/web-bluetooth@^0.0.21", - "npm:@vitejs/plugin-react@^4.4.1", + "npm:@vitejs/plugin-react@^4.5.2", "npm:autoprefixer@^10.4.21", "npm:base64-js@^1.5.1", "npm:class-variance-authority@~0.7.1", @@ -7648,39 +7606,39 @@ "npm:cmdk@^1.1.1", "npm:crypto-random-string@5", "npm:gzipper@^8.2.1", - "npm:happy-dom@^17.4.6", + "npm:happy-dom@^17.6.3", "npm:i18next-browser-languagedetector@^8.1.0", "npm:i18next-http-backend@^3.0.2", - "npm:i18next@^25.2.0", - "npm:idb-keyval@^6.2.1", + "npm:i18next@^25.2.1", + "npm:idb-keyval@^6.2.2", "npm:immer@^10.1.1", "npm:js-cookie@^3.0.5", - "npm:lucide-react@0.507", - "npm:maplibre-gl@5.4.0", - "npm:postcss@^8.5.3", + "npm:lucide-react@0.513", + "npm:maplibre-gl@5.6.0", + "npm:postcss@^8.5.4", "npm:react-dom@^19.1.0", "npm:react-error-boundary@6", - "npm:react-hook-form@^7.56.2", - "npm:react-i18next@^15.5.1", + "npm:react-hook-form@^7.57.0", + "npm:react-i18next@^15.5.2", "npm:react-map-gl@8.0.4", "npm:react-qrcode-logo@3", "npm:react@^19.1.0", "npm:rfc4648@^1.5.4", "npm:simple-git-hooks@^2.13.0", - "npm:tailwind-merge@^3.2.0", + "npm:tailwind-merge@^3.3.0", "npm:tailwindcss-animate@^1.0.7", - "npm:tailwindcss@^4.1.5", + "npm:tailwindcss@^4.1.8", "npm:tar@^7.4.3", "npm:testing-library@^0.0.2", "npm:typescript@^5.8.3", - "npm:vite-plugin-i18n-ally@^6.0.1", + "npm:vite-plugin-i18n-ally@^6.1.0", "npm:vite-plugin-node-polyfills@0.23", "npm:vite-plugin-pwa@1", "npm:vite-plugin-static-copy@3", - "npm:vite@^6.3.4", - "npm:vitest@^3.1.2", - "npm:zod@^3.25.0", - "npm:zustand@5.0.4" + "npm:vite@^6.3.5", + "npm:vitest@^3.2.3", + "npm:zod@^3.25.57", + "npm:zustand@5.0.5" ] } } diff --git a/package.json b/package.json index d6ed5138..de862e5c 100644 --- a/package.json +++ b/package.json @@ -34,32 +34,32 @@ }, "homepage": "https://meshtastic.org", "dependencies": { - "@bufbuild/protobuf": "^2.2.5", + "@bufbuild/protobuf": "^2.5.2", "@meshtastic/core": "npm:@jsr/meshtastic__core@2.6.4", "@meshtastic/js": "npm:@jsr/meshtastic__js@2.6.0-0", "@meshtastic/transport-http": "npm:@jsr/meshtastic__transport-http", "@meshtastic/transport-web-bluetooth": "npm:@jsr/meshtastic__transport-web-bluetooth", "@meshtastic/transport-web-serial": "npm:@jsr/meshtastic__transport-web-serial", - "@noble/curves": "^1.9.0", - "@radix-ui/react-accordion": "^1.2.8", - "@radix-ui/react-checkbox": "^1.2.3", - "@radix-ui/react-dialog": "^1.1.11", - "@radix-ui/react-dropdown-menu": "^2.1.12", - "@radix-ui/react-label": "^2.1.4", - "@radix-ui/react-menubar": "^1.1.12", - "@radix-ui/react-popover": "^1.1.11", - "@radix-ui/react-scroll-area": "^1.2.6", - "@radix-ui/react-select": "^2.2.2", - "@radix-ui/react-separator": "^1.1.4", - "@radix-ui/react-slider": "^1.3.2", - "@radix-ui/react-switch": "^1.2.2", - "@radix-ui/react-tabs": "^1.1.9", - "@radix-ui/react-toast": "^1.2.11", - "@radix-ui/react-toggle-group": "^1.1.9", - "@radix-ui/react-tooltip": "^1.2.4", - "@tanstack/react-router": "^1.120.15", - "@tanstack/react-router-devtools": "^1.120.16", - "@tanstack/router-devtools": "^1.120.15", + "@noble/curves": "^1.9.2", + "@radix-ui/react-accordion": "^1.2.11", + "@radix-ui/react-checkbox": "^1.3.2", + "@radix-ui/react-dialog": "^1.1.14", + "@radix-ui/react-dropdown-menu": "^2.1.15", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-menubar": "^1.1.15", + "@radix-ui/react-popover": "^1.1.14", + "@radix-ui/react-scroll-area": "^1.2.9", + "@radix-ui/react-select": "^2.2.5", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slider": "^1.3.5", + "@radix-ui/react-switch": "^1.2.5", + "@radix-ui/react-tabs": "^1.1.12", + "@radix-ui/react-toast": "^1.2.14", + "@radix-ui/react-toggle-group": "^1.1.10", + "@radix-ui/react-tooltip": "^1.2.7", + "@tanstack/react-router": "^1.120.20", + "@tanstack/react-router-devtools": "^1.120.20", + "@tanstack/router-devtools": "^1.120.20", "@turf/turf": "^7.2.0", "@types/web-bluetooth": "^0.0.21", "base64-js": "^1.5.1", @@ -67,56 +67,56 @@ "clsx": "^2.1.1", "cmdk": "^1.1.1", "crypto-random-string": "^5.0.0", - "i18next": "^25.2.0", + "i18next": "^25.2.1", "i18next-browser-languagedetector": "^8.1.0", "i18next-http-backend": "^3.0.2", - "idb-keyval": "^6.2.1", + "idb-keyval": "^6.2.2", "immer": "^10.1.1", "js-cookie": "^3.0.5", - "lucide-react": "^0.507.0", - "maplibre-gl": "5.4.0", + "lucide-react": "^0.513.0", + "maplibre-gl": "5.6.0", "react": "^19.1.0", "react-dom": "^19.1.0", "react-error-boundary": "^6.0.0", - "react-hook-form": "^7.56.2", - "react-i18next": "^15.5.1", + "react-hook-form": "^7.57.0", + "react-i18next": "^15.5.2", "react-map-gl": "8.0.4", "react-qrcode-logo": "^3.0.0", "rfc4648": "^1.5.4", - "vite-plugin-i18n-ally": "^6.0.1", + "vite-plugin-i18n-ally": "^6.1.0", "vite-plugin-node-polyfills": "^0.23.0", - "zod": "^3.25.0", - "zustand": "5.0.4" + "zod": "^3.25.57", + "zustand": "5.0.5" }, "devDependencies": { - "@tailwindcss/postcss": "^4.1.5", - "@tanstack/router-plugin": "^1.120.15", + "@tailwindcss/postcss": "^4.1.8", + "@tanstack/router-plugin": "^1.120.20", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^14.6.1", - "@types/chrome": "^0.0.318", - "@types/node": "^22.15.3", - "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.3", - "@types/serviceworker": "^0.0.133", + "@types/chrome": "^0.0.326", + "@types/node": "^24.0.0", + "@types/react": "^19.1.7", + "@types/react-dom": "^19.1.6", + "@types/serviceworker": "^0.0.139", "@types/js-cookie": "^3.0.6", "@types/w3c-web-serial": "^1.0.8", - "@vitejs/plugin-react": "^4.4.1", + "@vitejs/plugin-react": "^4.5.2", "autoprefixer": "^10.4.21", "gzipper": "^8.2.1", - "happy-dom": "^17.4.6", - "postcss": "^8.5.3", + "happy-dom": "^17.6.3", + "postcss": "^8.5.4", "simple-git-hooks": "^2.13.0", - "tailwind-merge": "^3.2.0", - "tailwindcss": "^4.1.5", + "tailwind-merge": "^3.3.0", + "tailwindcss": "^4.1.8", "tailwindcss-animate": "^1.0.7", "tar": "^7.4.3", "testing-library": "^0.0.2", "typescript": "^5.8.3", - "vite": "^6.3.4", + "vite": "^6.3.5", "vite-plugin-pwa": "^1.0.0", "vite-plugin-static-copy": "^3.0.0", - "vitest": "^3.1.2" + "vitest": "^3.2.3" } } diff --git a/src/components/BatteryStatus.tsx b/src/components/BatteryStatus.tsx index c80bb87e..feb7ff67 100644 --- a/src/components/BatteryStatus.tsx +++ b/src/components/BatteryStatus.tsx @@ -8,56 +8,45 @@ import { import { useTranslation } from "react-i18next"; import { DeviceMetrics } from "./types.ts"; -interface BatteryStateConfig { - condition: (level: number) => boolean; - Icon: React.ElementType; - className: string; - text: (level: number) => string; +type BatteryStatusKey = keyof typeof BATTERY_STATUS; + +interface BatteryStatusProps { + deviceMetrics?: DeviceMetrics | null; } interface BatteryStatusProps { deviceMetrics?: DeviceMetrics | null; } -const getBatteryStates = ( - t: (key: string, options?: object) => string, -): BatteryStateConfig[] => { - return [ - { - condition: (level) => level > 100, - Icon: PlugZapIcon, - className: "text-gray-500", - text: () => t("batteryStatus.pluggedIn"), - }, - { - condition: (level) => level > 80, - Icon: BatteryFullIcon, - className: "text-green-500", - text: (level) => t("batteryStatus.charging", { level }), - }, - { - condition: (level) => level > 20, - Icon: BatteryMediumIcon, - className: "text-yellow-500", - text: (level) => t("batteryStatus.charging", { level }), - }, - { - condition: () => true, - Icon: BatteryLowIcon, - className: "text-red-500", - text: (level) => t("batteryStatus.charging", { level }), - }, - ]; -}; +interface StatusConfig { + Icon: React.ElementType; + className: string; + text: string; +} + +const BATTERY_STATUS = { + PLUGGED_IN: "PLUGGED_IN", + FULL: "FULL", + MEDIUM: "MEDIUM", + LOW: "LOW", +} as const; -const getBatteryState = ( - level: number, - batteryStates: BatteryStateConfig[], -) => { - return batteryStates.find((state) => state.condition(level)); +export const getBatteryStatus = (level: number): BatteryStatusKey => { + if (level > 100) { + return BATTERY_STATUS.PLUGGED_IN; + } + if (level > 80) { + return BATTERY_STATUS.FULL; + } + if (level > 20) { + return BATTERY_STATUS.MEDIUM; + } + return BATTERY_STATUS.LOW; }; const BatteryStatus: React.FC = ({ deviceMetrics }) => { + const { t } = useTranslation(); + if ( deviceMetrics?.batteryLevel === undefined || deviceMetrics?.batteryLevel === null @@ -65,16 +54,39 @@ const BatteryStatus: React.FC = ({ deviceMetrics }) => { return null; } - const { t } = useTranslation(); - const batteryStates = getBatteryStates(t); - const { batteryLevel } = deviceMetrics; - const currentState = getBatteryState(batteryLevel, batteryStates) ?? - batteryStates[batteryStates.length - 1]; - const BatteryIcon = currentState.Icon; - const iconClassName = currentState.className; - const statusText = currentState.text(batteryLevel); + const statusKey = getBatteryStatus(batteryLevel); + + const statusConfigMap: Record = { + [BATTERY_STATUS.PLUGGED_IN]: { + Icon: PlugZapIcon, + className: "text-gray-500", + text: t("batteryStatus.pluggedIn"), + }, + [BATTERY_STATUS.FULL]: { + Icon: BatteryFullIcon, + className: "text-green-500", + text: t("batteryStatus.charging", { level: batteryLevel }), + }, + [BATTERY_STATUS.MEDIUM]: { + Icon: BatteryMediumIcon, + className: "text-yellow-500", + text: t("batteryStatus.charging", { level: batteryLevel }), + }, + [BATTERY_STATUS.LOW]: { + Icon: BatteryLowIcon, + className: "text-red-500", + text: t("batteryStatus.charging", { level: batteryLevel }), + }, + }; + + // 3. Use the key to get the current state configuration + const { + Icon: BatteryIcon, + className: iconClassName, + text: statusText, + } = statusConfigMap[statusKey]; return (
{ - channelSet?.settings.map((ch: unknown, index: number) => { - connection?.setChannel( - create(Protobuf.Channel.ChannelSchema, { - index, - role: index === 0 - ? Protobuf.Channel.Channel_Role.PRIMARY - : Protobuf.Channel.Channel_Role.SECONDARY, - settings: ch, - }), - ); - }); + channelSet?.settings.map( + (ch: Protobuf.Channel.ChannelSettings, index: number) => { + connection?.setChannel( + create(Protobuf.Channel.ChannelSchema, { + index, + role: index === 0 + ? Protobuf.Channel.Channel_Role.PRIMARY + : Protobuf.Channel.Channel_Role.SECONDARY, + settings: ch, + }), + ); + }, + ); if (channelSet?.loraConfig) { connection?.setConfig( diff --git a/src/components/Dialog/LocationResponseDialog.tsx b/src/components/Dialog/LocationResponseDialog.tsx index bd376de3..be8a95dc 100644 --- a/src/components/Dialog/LocationResponseDialog.tsx +++ b/src/components/Dialog/LocationResponseDialog.tsx @@ -12,7 +12,7 @@ import { numberToHexUnpadded } from "@noble/curves/abstract/utils"; import { useTranslation } from "react-i18next"; export interface LocationResponseDialogProps { - location: Types.PacketMetadata | undefined; + location: Types.PacketMetadata | undefined; open: boolean; onOpenChange: () => void; } @@ -33,6 +33,13 @@ export const LocationResponseDialog = ({ ? `${numberToHexUnpadded(from?.num).substring(0, 4)}` : t("unknown.shortName")); + const position = location?.data; + + const hasCoordinates = position && + typeof position.latitudeI === "number" && + typeof position.longitudeI === "number" && + typeof position.altitude === "number"; + return ( @@ -45,31 +52,40 @@ export const LocationResponseDialog = ({ -
- -

- {t("locationResponse.coordinates")} - - {location?.data.latitudeI / 1e7},{" "} - {location?.data.longitudeI / 1e7} - -

-

- {t("locationResponse.altitude")} - {location?.data.altitude} - {location?.data.altitde < 1 - ? t("unit.meter.one") - : t("unit.meter.plural")} + {hasCoordinates + ? ( +

+ +

+ {t("locationResponse.coordinates")} + + {" "} + {position.latitudeI ?? 0 / 1e7},{" "} + {position.longitudeI ?? 0 / 1e7} + +

+

+ {t("locationResponse.altitude")} {position.altitude} + {position.altitude ?? 0 < 1 + ? t("unit.meter.one") + : t("unit.meter.plural")} +

+
+
+ ) + : ( + // Optional: Show a message if coordinates are not available +

+ {t("locationResponse.noCoordinates")}

-
-
+ )}
diff --git a/src/components/Form/FormSelect.tsx b/src/components/Form/FormSelect.tsx index db110c15..4c8559ca 100644 --- a/src/components/Form/FormSelect.tsx +++ b/src/components/Form/FormSelect.tsx @@ -15,7 +15,6 @@ export interface SelectFieldProps extends BaseFormBuilderProps { type: "select"; selectChange?: (e: string, name: string) => void; validate?: (newValue: string) => Promise; - defaultValue?: string; properties: BaseFormBuilderProps["properties"] & { defaultValue?: T; enumValue: { @@ -44,7 +43,6 @@ export function SelectInput({ } = useController({ name: field.name, control, - defaultValue: field.properties.defaultValue, }); const { enumValue, formatEnumName, defaultValue, ...remainingProperties } = diff --git a/src/components/PageComponents/Map/NodeDetail.tsx b/src/components/PageComponents/Map/NodeDetail.tsx index 516a2fd3..2423cb42 100644 --- a/src/components/PageComponents/Map/NodeDetail.tsx +++ b/src/components/PageComponents/Map/NodeDetail.tsx @@ -94,7 +94,7 @@ export const NodeDetail = ({ node }: NodeDetailProps) => { align="center" sideOffset={5} > - {t("nodeDetail.directMessage.label", { + {t("nodeDetails.directMessage.label", { shortName, })} @@ -106,8 +106,8 @@ export const NodeDetail = ({ node }: NodeDetailProps) => { fill={node.isFavorite ? "black" : "none"} size={15} aria-label={node.isFavorite - ? t("nodeDetail.favorite.label") - : t("nodeDetail.notFavorite.label")} + ? t("nodeDetails.favorite.label") + : t("nodeDetails.notFavorite.label")} />
@@ -134,14 +134,14 @@ export const NodeDetail = ({ node }: NodeDetailProps) => {
{node.lastHeard > 0 && (
- {t("nodeDetail.status.heard")}{" "} + {t("nodeDetails.lastHeard")}{" "}
)}
{node.viaMqtt && (
- {t("nodeDetail.status.mqtt")} + {t("nodeDetails.status.mqtt")}
)} @@ -166,7 +166,7 @@ export const NodeDetail = ({ node }: NodeDetailProps) => {
{formatQuantity(node.position?.altitude, { @@ -181,15 +181,15 @@ export const NodeDetail = ({ node }: NodeDetailProps) => {
{!!node.deviceMetrics?.channelUtilization && (
-
{t("nodeDetail.channelUtilization")}
- +
{t("nodeDetails.channelUtilization")}
+ {node.deviceMetrics?.channelUtilization.toPrecision(3)}%
)} {!!node.deviceMetrics?.airUtilTx && (
-
{t("nodeDetail.airTxUtilization")}
+
{t("nodeDetails.airTxUtilization")}
{node.deviceMetrics?.airUtilTx.toPrecision(3)}% diff --git a/src/components/PageComponents/Messages/TraceRoute.test.tsx b/src/components/PageComponents/Messages/TraceRoute.test.tsx index 896f2567..606022a6 100644 --- a/src/components/PageComponents/Messages/TraceRoute.test.tsx +++ b/src/components/PageComponents/Messages/TraceRoute.test.tsx @@ -133,20 +133,4 @@ describe("TraceRoute", () => { // Check for translated '??' placeholder expect(screen.getAllByText(/↓ \?\?dBm/)).toHaveLength(2); }); - - it("renders hop hex if node is not found", () => { - render( - , - ); - - // Check for translated '!' prefix - expect(screen.getByText("!63")).toBeInTheDocument(); - expect(screen.getByText("↓ 5dBm")).toBeInTheDocument(); - expect(screen.getByText("↓ 15dBm")).toBeInTheDocument(); - }); }); diff --git a/src/components/generic/Table/index.test.tsx b/src/components/generic/Table/index.test.tsx index 727357f4..1d85d266 100644 --- a/src/components/generic/Table/index.test.tsx +++ b/src/components/generic/Table/index.test.tsx @@ -3,7 +3,6 @@ import { fireEvent, render, screen } from "@testing-library/react"; import { Table } from "@components/generic/Table/index.tsx"; import { TimeAgo } from "@components/generic/TimeAgo.tsx"; import { Mono } from "@components/generic/Mono.tsx"; -// @ts-types="react" describe("Generic Table", () => { it("Can render an empty table.", () => { diff --git a/src/core/stores/messageStore/index.ts b/src/core/stores/messageStore/index.ts index 125bf40b..84992898 100644 --- a/src/core/stores/messageStore/index.ts +++ b/src/core/stores/messageStore/index.ts @@ -184,13 +184,13 @@ export const useMessageStore = create()( const deleted = messageLog.delete(params.messageId); if (deleted) { - console.log( + console.info( `Deleted message ${params.messageId} from ${params.type} message ${parentKey}`, ); // Clean up empty MessageLogMap and its entry in the parent map if (messageLog.size === 0) { parentMap.delete(parentKey); - console.log(`Cleaned up empty message entry for ${parentKey}`); + console.info(`Cleaned up empty message entry for ${parentKey}`); } } else { console.warn( diff --git a/src/core/utils/test.tsx b/src/core/utils/test.tsx deleted file mode 100644 index cb9906ae..00000000 --- a/src/core/utils/test.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { - createMemoryHistory, - createRouter, - Outlet, - RootRoute, - Route, - RouterProvider, -} from "@tanstack/react-router"; -import { render as rtlRender, RenderOptions } from "@testing-library/react"; -import type { FunctionComponent, ReactElement, ReactNode } from "react"; - -// a root route for the test router. -const rootRoute = new RootRoute({ - component: () => ( - <> - - - ), -}); - -interface CustomRenderOptions extends Omit { - initialEntries?: string[]; - ui?: ReactElement; -} - -let currentRouter: ReturnType | null = null; - -/** - * Custom render function for testing components that need TanStack Router context. - * @param ui The main ReactElement to render (your component under test). - * @param options Custom render options including initialEntries for the router. - * @returns An object containing the testing-library render result and the router instance. - */ -const customRender = ( - ui: ReactElement, - options: CustomRenderOptions = {}, -) => { - const { initialEntries = ["/"], ...renderOptions } = options; - - // A specific route that renders the component under test (ui). - // It defaults to the first path in initialEntries or '/'. - const testComponentRoute = new Route({ - getParentRoute: () => rootRoute, - path: initialEntries[0] || "/", - component: () => ui, // The component passed to render will be the element for this route - }); - - const routeTree = rootRoute.addChildren([testComponentRoute]); - - const router = createRouter({ - history: createMemoryHistory({ initialEntries }), - routeTree, - // You can add default error components or other router options if needed for tests. - // defaultErrorComponent: ({ error }) =>
Test Error: {error.message}
, - }); - - currentRouter = router; // Store the router instance for access in tests - - const Wrapper: FunctionComponent<{ children?: ReactNode }> = ( - { children }, - ) => { - return ( - <> - - {children} - - ); - }; - - const renderResult = rtlRender(ui, { wrapper: Wrapper, ...renderOptions }); - - return { - ...renderResult, - router, - }; -}; - -export * from "@testing-library/react"; -export { customRender as render }; -export const getTestRouter = () => currentRouter; diff --git a/src/i18n/locales/en/dialog.json b/src/i18n/locales/en/dialog.json index 23393156..024219b2 100644 --- a/src/i18n/locales/en/dialog.json +++ b/src/i18n/locales/en/dialog.json @@ -79,6 +79,7 @@ "channelUtilization": "Channel utilization", "details": "Details:", "deviceMetrics": "Device Metrics:", + "elevation": "Elevation:", "hardware": "Hardware: ", "lastHeard": "Last Heard: ", "nodeHexPrefix": "Node Hex: !", diff --git a/src/pages/Messages.tsx b/src/pages/Messages.tsx index 95d167b9..3c9555d2 100644 --- a/src/pages/Messages.tsx +++ b/src/pages/Messages.tsx @@ -28,9 +28,19 @@ import { Input } from "@components/UI/Input.tsx"; import { randId } from "@core/utils/randId.ts"; import { useTranslation } from "react-i18next"; import { useNavigate, useParams } from "@tanstack/react-router"; +import { messagesWithParamsRoute } from "@app/routes.tsx"; type NodeInfoWithUnread = Protobuf.Mesh.NodeInfo & { unreadCount: number }; +function SelectMessageChat() { + const { t } = useTranslation("messages"); + return ( +
+ {t("selectChatPrompt.text", { ns: "messages" })} +
+ ); +} + export const MessagesPage = () => { const { channels, @@ -46,7 +56,9 @@ export const MessagesPage = () => { getMessages, setMessageState, } = useMessageStore(); - const params = useParams({ from: "", shouldThrow: false }); + + const { type, chatId } = useParams({ from: messagesWithParamsRoute.id }); + const navigate = useNavigate(); const { toast } = useToast(); const { isCollapsed } = useSidebar(); @@ -54,34 +66,33 @@ export const MessagesPage = () => { const { t } = useTranslation(["messages", "channels", "ui"]); const deferredSearch = useDeferredValue(searchTerm); - const chatType = params.type === "direct" + const navigateToChat = useCallback((type: MessageType, id: string) => { + const typeParam = type === MessageType.Direct ? "direct" : "broadcast"; + navigate({ to: `/messages/${typeParam}/${id}` }); + }, [navigate]); + + const chatType = type === "direct" ? MessageType.Direct - : params.type === "broadcast" - ? MessageType.Broadcast - : undefined; - const activeChat = params.chatId ? Number(params.chatId) : undefined; + : MessageType.Broadcast; + const numericChatId = Number(chatId); const allChannels = Array.from(channels.values()); const filteredChannels = allChannels.filter( (ch) => ch.role !== Protobuf.Channel.Channel_Role.DISABLED, ); - const currentChannel = channels.get(activeChat); - const otherNode = getNode(activeChat); - - const isDirect = chatType === MessageType.Direct; - const isBroadcast = chatType === MessageType.Broadcast; - - const navigateToChat = useCallback((type: MessageType, chatId: number) => { - const typeParam = type === MessageType.Direct ? "direct" : "broadcast"; - navigate({ to: `/messages/${typeParam}/${chatId}` }); - }, [navigate]); useEffect(() => { - if (!params.type && !params.chatId && filteredChannels.length > 0) { + if (!type && !chatId && filteredChannels.length > 0) { const defaultChannel = filteredChannels[0]; - navigateToChat(MessageType.Broadcast, defaultChannel.index); + navigateToChat(MessageType.Broadcast, defaultChannel.index.toString()); } - }, [params.type, params.chatId, filteredChannels, navigateToChat]); + }, [type, chatId, filteredChannels, navigateToChat]); + + const currentChannel = channels.get(numericChatId); + const otherNode = getNode(numericChatId); + + const isDirect = chatType === MessageType.Direct; + const isBroadcast = chatType === MessageType.Broadcast; const filteredNodes = (): NodeInfoWithUnread[] => { const lowerCaseSearchTerm = deferredSearch.toLowerCase(); @@ -104,15 +115,26 @@ export const MessagesPage = () => { }; const sendText = useCallback(async (message: string) => { - const isDirect = chatType === MessageType.Direct; - const toValue = isDirect ? activeChat : MessageType.Broadcast; - - const channelValue = isDirect - ? Types.ChannelNumber.Primary - : activeChat ?? 0; + const toValue = isDirect ? numericChatId : MessageType.Broadcast; + const channelValue = isDirect ? Types.ChannelNumber.Primary : numericChatId; let messageId: number | undefined; + // type SetMessageStateParams = + // | { + // type: MessageType.Direct; + // nodeA: NodeNum; + // nodeB: NodeNum; + // messageId: MessageId; // ID of the message within that chat + // newState?: MessageState; // Optional new state, defaults to Ack + // } + // | { + // type: MessageType.Broadcast; + // channelId: ChannelId; + // messageId: MessageId; + // newState?: MessageState; // Optional new state, defaults to Ack + // }; + try { messageId = await connection?.sendText( message, @@ -123,16 +145,16 @@ export const MessagesPage = () => { if (messageId !== undefined) { if (chatType === MessageType.Broadcast) { setMessageState({ - type: chatType, + type: MessageType.Broadcast, channelId: channelValue, messageId, newState: MessageState.Ack, }); } else { setMessageState({ - type: chatType, + type: MessageType.Direct, nodeA: getMyNodeNum(), - nodeB: activeChat, + nodeB: numericChatId, messageId, newState: MessageState.Ack, }); @@ -140,28 +162,34 @@ export const MessagesPage = () => { } else { console.warn("sendText completed but messageId is undefined"); } - } catch (e: any) { + } catch (e) { console.error("Failed to send message:", e); const failedId = messageId ?? randId(); if (chatType === MessageType.Broadcast) { setMessageState({ - type: chatType, + type: MessageType.Broadcast, channelId: channelValue, messageId: failedId, newState: MessageState.Failed, }); - } else { // MessageType.Direct - const failedId = messageId ?? randId(); + } else { setMessageState({ - type: chatType, + type: MessageType.Direct, nodeA: getMyNodeNum(), - nodeB: activeChat, + nodeB: numericChatId, messageId: failedId, newState: MessageState.Failed, }); } } - }, [activeChat, chatType, connection, getMyNodeNum, setMessageState]); + }, [ + numericChatId, + chatId, + chatType, + connection, + getMyNodeNum, + setMessageState, + ]); const renderChatContent = () => { switch (chatType) { @@ -170,7 +198,7 @@ export const MessagesPage = () => { ); @@ -180,16 +208,12 @@ export const MessagesPage = () => { messages={getMessages({ type: MessageType.Direct, nodeA: getMyNodeNum(), - nodeB: activeChat, + nodeB: numericChatId, }).reverse()} /> ); default: - return ( -
- {t("selectChatPrompt.text", { ns: "messages" })} -
- ); + return ; } }; @@ -210,10 +234,10 @@ export const MessagesPage = () => { index: channel.index, ns: "channels", }))} - active={activeChat === channel.index && + active={numericChatId === channel.index && chatType === MessageType.Broadcast} onClick={() => { - navigateToChat(MessageType.Broadcast, channel.index); + navigateToChat(MessageType.Broadcast, channel.index.toString()); resetUnread(channel.index); }} > @@ -228,11 +252,12 @@ export const MessagesPage = () => { ), [ filteredChannels, unreadCounts, - activeChat, + numericChatId, chatType, isCollapsed, navigateToChat, resetUnread, + t, ]); const rightSidebar = useMemo( @@ -262,10 +287,10 @@ export const MessagesPage = () => { label={node.user?.longName ?? t("unknown.shortName")} count={node.unreadCount > 0 ? node.unreadCount : undefined} - active={activeChat === node.num && + active={numericChatId === node.num && chatType === MessageType.Direct} onClick={() => { - navigateToChat(MessageType.Direct, node.num); + navigateToChat(MessageType.Direct, node.num.toString()); resetUnread(node.num); }} > @@ -285,11 +310,12 @@ export const MessagesPage = () => { [ filteredNodes, searchTerm, - activeChat, + numericChatId, chatType, navigateToChat, resetUnread, hasNodeError, + t, ], ); @@ -330,7 +356,7 @@ export const MessagesPage = () => { {(isBroadcast || isDirect) ? ( diff --git a/src/routes.tsx b/src/routes.tsx index f936fd12..6cdbb7da 100644 --- a/src/routes.tsx +++ b/src/routes.tsx @@ -4,10 +4,11 @@ import MessagesPage from "@pages/Messages.tsx"; import MapPage from "@pages/Map/index.tsx"; import ConfigPage from "@pages/Config/index.tsx"; import ChannelsPage from "@pages/Channels.tsx"; -import NodesPage from "@pages/Nodes.tsx"; +import NodesPage from "@pages/Nodes/index.tsx"; import { createRootRoute } from "@tanstack/react-router"; import { App } from "./App.tsx"; import { DialogManager } from "@components/Dialog/DialogManager.tsx"; +import { z } from "zod"; const rootRoute = createRootRoute({ component: App, @@ -27,12 +28,42 @@ const messagesRoute = createRoute({ getParentRoute: () => rootRoute, path: "/messages", component: MessagesPage, + beforeLoad: ({ params }) => { + const DEFAULT_CHANNEL = 0; + + if (Object.values(params).length === 0) { + throw redirect({ + to: `/messages/broadcast/${DEFAULT_CHANNEL}`, + replace: true, + }); + } + }, +}); + +const chatIdSchema = z.string().refine((val) => { + const num = Number(val); + if (isNaN(num) || !Number.isInteger(num)) { + return false; + } + + const isChannelId = num >= 0 && num <= 10; + const isNodeId = num >= 1000000000 && num <= 9999999999; + + return isChannelId || isNodeId; +}, { + message: "Chat ID must be a channel (0-10) or a valid node ID.", }); -const messagesWithParamsRoute = createRoute({ +export const messagesWithParamsRoute = createRoute({ getParentRoute: () => rootRoute, path: "/messages/$type/$chatId", component: MessagesPage, + parseParams: (params) => ({ + type: z.enum(["direct", "broadcast"], { + errorMap: () => ({ message: 'Type must be "direct" or "broadcast".' }), + }).parse(params.type), + chatId: chatIdSchema.parse(params.chatId), + }), }); const mapRoute = createRoute({ diff --git a/src/tests/setupTests.ts b/src/tests/setup.ts similarity index 100% rename from src/tests/setupTests.ts rename to src/tests/setup.ts diff --git a/src/tests/test-utils.tsx b/src/tests/test-utils.tsx new file mode 100644 index 00000000..e28d5a11 --- /dev/null +++ b/src/tests/test-utils.tsx @@ -0,0 +1,37 @@ +import { ReactElement } from "react"; +import { render, RenderOptions } from "@testing-library/react"; +import { + createMemoryHistory, + createRouter, + RouterProvider, +} from "@tanstack/react-router"; +import "../i18n/config.ts"; +import { routeTree } from "../routeTree.gen.ts"; + +import { DeviceWrapper } from "@app/DeviceWrapper.tsx"; + +const Providers = () => { + const memoryHistory = createMemoryHistory({ + initialEntries: ["/"], + }); + + const router = createRouter({ + routeTree, + history: memoryHistory, + }); + + return ( + + + + ); +}; + +const renderWithProviders = ( + ui: ReactElement, + options?: Omit, +) => render(ui, { wrapper: Providers, ...options }); + +export * from "@testing-library/react"; + +export { renderWithProviders as render }; diff --git a/src/validation/config/security.test.ts b/src/validation/config/security.test.ts index 653baab4..d79445ed 100644 --- a/src/validation/config/security.test.ts +++ b/src/validation/config/security.test.ts @@ -86,7 +86,6 @@ describe("ParsedSecuritySchema", () => { publicKey: validKey, adminKey: [validKey, new Uint8Array(), new Uint8Array()], }); - console.log(result); expect(result.success).toBe(true); }); diff --git a/vitest.config.ts b/vitest.config.ts index 537096e0..ec6d3d71 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -3,6 +3,8 @@ import react from "@vitejs/plugin-react"; import { defineConfig } from "vitest/config"; import { enableMapSet } from "immer"; +import process from "node:process"; + enableMapSet(); export default defineConfig({ plugins: [ @@ -25,6 +27,6 @@ export default defineConfig({ restoreMocks: true, root: path.resolve(process.cwd(), "./src"), include: ["**/*.{test,spec}.{ts,tsx}"], - setupFiles: ["./src/tests/setupTests.ts", "./src/core/utils/test.tsx"], + setupFiles: ["./src/tests/setup.ts"], }, });