From 843011cdc73357111e0c6a9aea90d9f85f64c598 Mon Sep 17 00:00:00 2001 From: George Kargiotakis Date: Fri, 2 Jan 2026 18:56:20 +0200 Subject: [PATCH] Implement PWA and Optimize Performance/Accessibility - **PWA Integration:** - Added `vite-plugin-pwa` for service worker generation and manifest management. - Implemented `PWAUpdater` component for handling app updates. - Configured `vite.config.js` with PWA settings. - Removed manual `manifest.json` reference from `index.html`. - **Performance Optimization (LCP):** - Created a resized version of the hero image (`divemap_logo_domain_top4_extend_small.jpg`) for mobile devices. - Updated `HeroSection.js` to use `srcset` for responsive image loading. - Added `fetchPriority="high"` to the hero image to prioritize its loading. - **Accessibility Improvements:** - **Color Contrast:** Adjusted colors in `Home.js` (buttons and text) to meet WCAG contrast ratio requirements. - **ARIA Labels:** Added accessible names to: - Global Search button (`GlobalSearchBar.js`). - Mobile menu toggle button (`Navbar.js`). - Report Issue button (`ReportIssueButton.js`). - **Heading Hierarchy:** Promoted section headings in `Home.js` from `h3` to `h2` for correct document structure. - **Other Changes:** - Updated `package.json` with new dependencies. - Added `BackgroundLogo.js` component (refactor). --- .gitignore | 1 + .../done/pwa_implementation_plan.md | 183 ++ frontend/eslint.config.js | 5 + frontend/index.html | 1 - frontend/package-lock.json | 2659 ++++++++++++++++- frontend/package.json | 5 +- .../divemap_logo_domain_top4_extend_small.jpg | Bin 0 -> 79896 bytes frontend/public/manifest.json | 25 - frontend/src/App.js | 2 + frontend/src/components/BackgroundLogo.js | 2 +- frontend/src/components/GlobalSearchBar.js | 1 + frontend/src/components/HeroSection.js | 3 + frontend/src/components/Navbar.js | 1 + frontend/src/components/PWAUpdater.jsx | 53 + frontend/src/components/ReportIssueButton.js | 1 + frontend/src/pages/Home.js | 24 +- frontend/vite.config.js | 54 + 17 files changed, 2948 insertions(+), 72 deletions(-) create mode 100644 docs/development/done/pwa_implementation_plan.md create mode 100644 frontend/public/divemap_logo_domain_top4_extend_small.jpg delete mode 100644 frontend/public/manifest.json create mode 100644 frontend/src/components/PWAUpdater.jsx diff --git a/.gitignore b/.gitignore index e23bc15..1243ca0 100644 --- a/.gitignore +++ b/.gitignore @@ -173,3 +173,4 @@ terraform.tfvars terraform/lambda_email_processor.zip PR-description.txt commit-message.txt +frontend/dev-dist/ diff --git a/docs/development/done/pwa_implementation_plan.md b/docs/development/done/pwa_implementation_plan.md new file mode 100644 index 0000000..5873642 --- /dev/null +++ b/docs/development/done/pwa_implementation_plan.md @@ -0,0 +1,183 @@ +# PWA Implementation Plan for Divemap (Android Focus) + +## Executive Summary + +The Divemap application currently possesses a basic `manifest.json` but lacks the critical **Service +Worker** infrastructure required to function as a Progressive Web Application (PWA). To enable Android +installation (Add to Home Screen), offline capabilities, and a native-app-like experience, we must +integrate the `vite-plugin-pwa` library. + +**Current Status:** +* ✅ Basic Manifest (Name, Icons, Colors). +* ✅ HTTPS (Production environment). +* ❌ Service Worker (Crucial for installability and offline support). +* ❌ Rich Install UI (Screenshots and detailed description missing from manifest). +* ❌ Offline Fallback. + +--- + +## 1. Technical Requirements & Dependencies + +We will utilize **`vite-plugin-pwa`**. This plugin abstracts the complexity of Workbox (Google's PWA library) and integrates seamlessly with the Vite build process. + +### New Dependencies +* `vite-plugin-pwa`: Main plugin for PWA generation and manifest management. +* `workbox-window`: Helper library for handling Service Worker updates and lifecycle events within +the React application. + +--- + +## 2. Implementation Strategy + +### Phase 1: Configuration (`frontend/vite.config.js`) + +We will integrate the PWA plugin into the Vite configuration. This plugin will take over the +management of the `manifest.json`, ensuring better asset cache-busting and automatic generation of the +Service Worker. + +**Key Configurations:** +* **Strategy:** `generateSW` - Automatically caches all build assets (JS, CSS, HTML). +* **RegisterType:** `prompt` - Notifies the user when a new version of the app is available, +allowing them to reload when convenient. This prevents data loss if a user is in the middle of a task. +* **Manifest Injection:** The plugin will generate the manifest dynamically. Content will be +migrated from the static `public/manifest.json`. + +### Phase 2: Manifest Enhancement (Android Specifics) + +To trigger the **Rich Install UI** on Android (Play Store style installation dialog), the manifest +needs specific enhancements. + +**Required Additions:** +1. **`id`**: A stable identifier for the application (e.g., `/`). +2. **`screenshots`**: Utilization of existing images in `public/help-screenshots/`. + * *Requirement:* At least one mobile (narrow) and one desktop (wide) screenshot. +3. **`categories`**: Defined as `["travel", "sports", "navigation"]`. +4. **`description`**: A descriptive summary for the installation dialog. +5. **`purpose: "any maskable"`**: Added to icon definitions to support Android adaptive icons, +preventing white borders. + +### Phase 3: Service Worker Registration +The Service Worker must be registered in the application entry point to enable PWA features. + +**Logic Flow:** +1. Import registration logic from the PWA plugin. +2. Implement a UI component (Toast/Modal) to handle the "New Content Available" state. +3. Call the registration function in `src/index.js`. + +--- + +## 3. Detailed Specifications + +### A. Dependency Installation +```bash +docker exec divemap_frontend npm install vite-plugin-pwa workbox-window -D +``` + +### B. Updated `vite.config.js` Snippet +```javascript +import { VitePWA } from 'vite-plugin-pwa'; + +// Add to plugins array: +VitePWA({ + registerType: 'prompt', + includeAssets: ['favicons/*.ico', 'favicons/*.png', 'help-screenshots/*.png'], + manifest: { + name: 'Divemap - Scuba Dive Site Review Platform', + short_name: 'Divemap', + description: 'Discover, rate and review dive sites and diving centers.', + theme_color: '#2563eb', + background_color: '#ffffff', + display: 'standalone', + id: '/', + icons: [ + { + src: '/favicons/android-chrome-192x192.png', + sizes: '192x192', + type: 'image/png', + purpose: 'any maskable' + }, + { + src: '/favicons/android-chrome-512x512.png', + sizes: '512x512', + type: 'image/png', + purpose: 'any maskable' + } + ], + screenshots: [ + { + src: "/help-screenshots/dive-sites-map-view.png", + sizes: "1280x720", // Confirm actual dimensions + type: "image/png", + form_factor: "wide", + label: "Explore Dive Sites" + }, + { + src: "/help-screenshots/dives-logging-interface.png", + sizes: "1280x720", + type: "image/png", + label: "Log Your Dives" + } + ] + } +}) +``` + +### C. Registration Component (`src/components/PWAUpdater.jsx`) +A small component to handle the update logic and provide user feedback. + +--- + +## 4. Verification Plan + +1. **Lighthouse Audit:** + * Execute Chrome DevTools -> Lighthouse -> "Progressive Web App". + * Target: 100% PWA score. +2. **Manifest Validation:** + * Verify through Chrome DevTools -> Application -> Manifest. + * Ensure no warnings for icons or screenshots. +3. **Service Worker Test:** + * Check Status: "Activated and is running". + * **Offline Mode:** Enable offline in the Network tab and reload the page. The app must load from cache. +4. **Android Device Testing:** + * Access the site via Chrome on Android. + * Verify the installation prompt appears. + * Confirm the app functions without the browser UI (address bar). + +## 5. Deployment Considerations +* **SW Updates:** Ensure `sw.js` is served with `Cache-Control: no-cache`. +* **Static Manifest:** Delete the existing `frontend/public/manifest.json` once the PWA plugin is fully configured to avoid conflicts. + +## 6. User Verification Guide + +To manually verify the PWA functionality, you must serve the **production build**, as the Service Worker and Manifest are generated during the build process (unless `devOptions` is enabled). + +### Step 1: Build and Serve +Run the following commands from the project root: + +```bash +# 1. Build the frontend +docker exec divemap_frontend npm run build + +# 2. Serve the 'dist' folder locally (using Python for simplicity) +# This serves the application on http://localhost:4173 +python3 -m http.server 4173 --directory frontend/dist +``` + +### Step 2: Verify in Chrome +1. Open Chrome and navigate to `http://localhost:4173`. +2. **Manifest Check:** + * Open DevTools (`F12`). + * Go to **Application** tab > **Manifest**. + * Verify the App Name, Icons, and Screenshots ("Wide" and "Mobile") are present. + * Ensure there are no errors/warnings. +3. **Service Worker Check:** + * Go to **Application** tab > **Service Workers**. + * Verify you see a worker for `http://localhost:4173`. + * Status should be **"Activated and is running"**. +4. **Installability:** + * Look for the "Install" icon in the right side of the URL bar (Omnibox). + * Click it to see the "Rich Install UI" with the screenshots we configured. + +### Step 3: Cleanup +Press `Ctrl+C` in your terminal to stop the Python server. + diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js index c6bb22a..ea09a2b 100644 --- a/frontend/eslint.config.js +++ b/frontend/eslint.config.js @@ -1,4 +1,5 @@ const js = require('@eslint/js'); +const path = require('path'); const react = require('eslint-plugin-react'); const reactHooks = require('eslint-plugin-react-hooks'); const jsxA11y = require('eslint-plugin-jsx-a11y'); @@ -141,10 +142,14 @@ module.exports = [ 'jsx-a11y/no-noninteractive-element-to-interactive-role': 'warn', }, settings: { + 'import/core-modules': ['virtual:pwa-register'], react: { version: 'detect', }, 'import/resolver': { + vite: { + viteConfig: path.resolve(__dirname, 'vite.config.js'), + }, node: { extensions: ['.js', '.jsx'], }, diff --git a/frontend/index.html b/frontend/index.html index 479d810..1f249e1 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -10,7 +10,6 @@ content="Divemap - Discover, rate and review dive sites and diving centers." /> - Divemap diff --git a/frontend/package-lock.json b/frontend/package-lock.json index a3ed5a8..a8da125 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -52,6 +52,7 @@ "eslint": "^9.33.0", "eslint-config-prettier": "^10.1.8", "eslint-import-resolver-exports": "^1.0.0-beta.5", + "eslint-import-resolver-vite": "^2.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-prettier": "^5.1.3", @@ -64,8 +65,10 @@ "puppeteer": "^24.15.0", "tailwindcss": "^3.4.17", "vite": "^7.3.0", + "vite-plugin-pwa": "^1.2.0", "vite-plugin-svgr": "^4.5.0", - "vitest": "^3.2.4" + "vitest": "^3.2.4", + "workbox-window": "^7.4.0" } }, "node_modules/@adobe/css-tools": { @@ -319,6 +322,19 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", @@ -356,6 +372,83 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", @@ -366,6 +459,20 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", @@ -398,6 +505,19 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", @@ -408,6 +528,56 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -438,6 +608,21 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helpers": { "version": "7.28.4", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", @@ -468,10 +653,27 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, "license": "MIT", "dependencies": { @@ -480,14 +682,127 @@ "engines": { "node": ">=6.9.0" }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-source": { + "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, "license": "MIT", "dependencies": { @@ -497,7 +812,989 @@ "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", + "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz", + "integrity": "sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.5", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.4", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.28.5", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.4", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.28.5", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.4", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/runtime": { @@ -1393,6 +2690,29 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -1521,6 +2841,17 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -3089,6 +4420,54 @@ "dev": true, "license": "MIT" }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@rollup/pluginutils": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", @@ -3452,6 +4831,29 @@ "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", "license": "MIT" }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", @@ -4015,12 +5417,19 @@ "license": "MIT", "optional": true }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/@types/use-sync-external-store": { "version": "0.0.6", @@ -4572,6 +5981,13 @@ "dev": true, "license": "MIT" }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -4588,6 +6004,16 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.21", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", @@ -4680,6 +6106,58 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4772,6 +6250,16 @@ "node": ">= 0.6.0" } }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", + "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/basic-ftp": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", @@ -4854,9 +6342,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -4874,10 +6362,11 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -4896,6 +6385,13 @@ "node": "*" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -5191,6 +6687,23 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/compute-scroll-into-view": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", @@ -5222,6 +6735,20 @@ "url": "https://opencollective.com/core-js" } }, + "node_modules/core-js-compat": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", + "integrity": "sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -5264,6 +6791,16 @@ "node": ">= 8" } }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/css-line-break": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", @@ -5588,6 +7125,16 @@ "dev": true, "license": "MIT" }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -5742,10 +7289,26 @@ "dev": true, "license": "MIT" }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { - "version": "1.5.191", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.191.tgz", - "integrity": "sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==", + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "dev": true, "license": "ISC" }, @@ -6188,6 +7751,23 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-vite": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-vite/-/eslint-import-resolver-vite-2.1.0.tgz", + "integrity": "sha512-n8JycJFvMqw4GeAPsl4JujpxBQzDrNpHYK1NK2aD1nsZJhNfH9WLhmuCPtafMj+RBxtXcXHgY5yDlQdJcXn5Ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "eslint-plugin-import": "^2" + } + }, "node_modules/eslint-module-utils": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", @@ -6744,6 +8324,23 @@ "pako": "^2.1.0" } }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -6783,6 +8380,39 @@ "node": ">=16.0.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -6913,6 +8543,22 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -7036,6 +8682,13 @@ "node": ">=6" } }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true, + "license": "ISC" + }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -7183,6 +8836,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -7341,6 +9001,13 @@ "node": ">=0.10.0" } }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true, + "license": "ISC" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -7710,6 +9377,13 @@ "integrity": "sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ==", "license": "MIT" }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -7750,6 +9424,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -7776,6 +9460,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-set": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", @@ -7795,14 +9489,27 @@ "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { @@ -7950,6 +9657,24 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jiti": { "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", @@ -8059,6 +9784,13 @@ "dev": true, "license": "MIT" }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -8095,6 +9827,29 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jspdf": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-3.0.3.tgz", @@ -8179,6 +9934,16 @@ "leaflet": "^1.3.1" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -8206,6 +9971,13 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -8213,6 +9985,13 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true, + "license": "MIT" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -8484,9 +10263,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, @@ -9198,6 +10977,19 @@ "node": ">=6.0.0" } }, + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -9400,6 +11192,16 @@ "performance-now": "^2.1.0" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -9813,6 +11615,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -9841,6 +11663,44 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, "node_modules/remove-accents": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", @@ -10034,6 +11894,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", @@ -10120,6 +12001,16 @@ "node": ">=10" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/set-cookie-parser": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", @@ -10298,6 +12189,13 @@ "npm": ">= 3.0.0" } }, + "node_modules/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", + "dev": true, + "license": "MIT" + }, "node_modules/snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -10345,7 +12243,6 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", - "optional": true, "engines": { "node": ">=0.10.0" } @@ -10360,6 +12257,25 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "name": "@jridgewell/sourcemap-codec", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -10583,6 +12499,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -10610,6 +12541,16 @@ "node": ">=8" } }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -10886,6 +12827,54 @@ "streamx": "^2.15.0" } }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.44.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", + "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/text-decoder": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", @@ -11156,6 +13145,19 @@ "node": ">= 0.8.0" } }, + "node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -11283,6 +13285,73 @@ "dev": true, "license": "MIT" }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unload": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", @@ -11293,10 +13362,21 @@ "detect-node": "^2.0.4" } }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -11522,6 +13602,37 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/vite-plugin-pwa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-1.2.0.tgz", + "integrity": "sha512-a2xld+SJshT9Lgcv8Ji4+srFJL4k/1bVbd1x06JIkvecpQkwkvCncD1+gSzcdm3s+owWLpMJerG3aN5jupJEVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.6", + "pretty-bytes": "^6.1.1", + "tinyglobby": "^0.2.10", + "workbox-build": "^7.4.0", + "workbox-window": "^7.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vite-pwa/assets-generator": "^1.0.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "workbox-build": "^7.4.0", + "workbox-window": "^7.4.0" + }, + "peerDependenciesMeta": { + "@vite-pwa/assets-generator": { + "optional": true + } + } + }, "node_modules/vite-plugin-svgr": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.5.0.tgz", @@ -11847,6 +13958,490 @@ "node": ">=0.10.0" } }, + "node_modules/workbox-background-sync": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.4.0.tgz", + "integrity": "sha512-8CB9OxKAgKZKyNMwfGZ1XESx89GryWTfI+V5yEj8sHjFH8MFelUwYXEyldEK6M6oKMmn807GoJFUEA1sC4XS9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.4.0.tgz", + "integrity": "sha512-+eZQwoktlvo62cI0b+QBr40v5XjighxPq3Fzo9AWMiAosmpG5gxRHgTbGGhaJv/q/MFVxwFNGh/UwHZ/8K88lA==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-build": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.4.0.tgz", + "integrity": "sha512-Ntk1pWb0caOFIvwz/hfgrov/OJ45wPEhI5PbTywQcYjyZiVhT3UrwwUPl6TRYbTm4moaFYithYnl1lvZ8UjxcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.24.4", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-replace": "^2.4.1", + "@rollup/plugin-terser": "^0.4.3", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^11.0.1", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.79.2", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.4.0", + "workbox-broadcast-update": "7.4.0", + "workbox-cacheable-response": "7.4.0", + "workbox-core": "7.4.0", + "workbox-expiration": "7.4.0", + "workbox-google-analytics": "7.4.0", + "workbox-navigation-preload": "7.4.0", + "workbox-precaching": "7.4.0", + "workbox-range-requests": "7.4.0", + "workbox-recipes": "7.4.0", + "workbox-routing": "7.4.0", + "workbox-strategies": "7.4.0", + "workbox-streams": "7.4.0", + "workbox-sw": "7.4.0", + "workbox-window": "7.4.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-build/node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/workbox-build/node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-build/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/workbox-build/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/workbox-build/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/workbox-build/node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/workbox-build/node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-build/node_modules/rollup": { + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "deprecated": "The work that was done in this beta branch won't be included in future versions", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.4.0.tgz", + "integrity": "sha512-0Fb8795zg/x23ISFkAc7lbWes6vbw34DGFIMw31cwuHPgDEC/5EYm6m/ZkylLX0EnEbbOyOCLjKgFS/Z5g0HeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-core": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.4.0.tgz", + "integrity": "sha512-6BMfd8tYEnN4baG4emG9U0hdXM4gGuDU3ectXuVHnj71vwxTFI7WOpQJC4siTOlVtGqCUtj0ZQNsrvi6kZZTAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.4.0.tgz", + "integrity": "sha512-V50p4BxYhtA80eOvulu8xVfPBgZbkxJ1Jr8UUn0rvqjGhLDqKNtfrDfjJKnLz2U8fO2xGQJTx/SKXNTzHOjnHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.4.0.tgz", + "integrity": "sha512-MVPXQslRF6YHkzGoFw1A4GIB8GrKym/A5+jYDUSL+AeJw4ytQGrozYdiZqUW1TPQHW8isBCBtyFJergUXyNoWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-background-sync": "7.4.0", + "workbox-core": "7.4.0", + "workbox-routing": "7.4.0", + "workbox-strategies": "7.4.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.4.0.tgz", + "integrity": "sha512-etzftSgdQfjMcfPgbfaZCfM2QuR1P+4o8uCA2s4rf3chtKTq/Om7g/qvEOcZkG6v7JZOSOxVYQiOu6PbAZgU6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-precaching": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.4.0.tgz", + "integrity": "sha512-VQs37T6jDqf1rTxUJZXRl3yjZMf5JX/vDPhmx2CPgDDKXATzEoqyRqhYnRoxl6Kr0rqaQlp32i9rtG5zTzIlNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0", + "workbox-routing": "7.4.0", + "workbox-strategies": "7.4.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.4.0.tgz", + "integrity": "sha512-3Vq854ZNuP6Y0KZOQWLaLC9FfM7ZaE+iuQl4VhADXybwzr4z/sMmnLgTeUZLq5PaDlcJBxYXQ3U91V7dwAIfvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-recipes": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.4.0.tgz", + "integrity": "sha512-kOkWvsAn4H8GvAkwfJTbwINdv4voFoiE9hbezgB1sb/0NLyTG4rE7l6LvS8lLk5QIRIto+DjXLuAuG3Vmt3cxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-cacheable-response": "7.4.0", + "workbox-core": "7.4.0", + "workbox-expiration": "7.4.0", + "workbox-precaching": "7.4.0", + "workbox-routing": "7.4.0", + "workbox-strategies": "7.4.0" + } + }, + "node_modules/workbox-routing": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.4.0.tgz", + "integrity": "sha512-C/ooj5uBWYAhAqwmU8HYQJdOjjDKBp9MzTQ+otpMmd+q0eF59K+NuXUek34wbL0RFrIXe/KKT+tUWcZcBqxbHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-strategies": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.4.0.tgz", + "integrity": "sha512-T4hVqIi5A4mHi92+5EppMX3cLaVywDp8nsyUgJhOZxcfSV/eQofcOA6/EMo5rnTNmNTpw0rUgjAI6LaVullPpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0" + } + }, + "node_modules/workbox-streams": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.4.0.tgz", + "integrity": "sha512-QHPBQrey7hQbnTs5GrEVoWz7RhHJXnPT+12qqWM378orDMo5VMJLCkCM1cnCk+8Eq92lccx/VgRZ7WAzZWbSLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.4.0", + "workbox-routing": "7.4.0" + } + }, + "node_modules/workbox-sw": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.4.0.tgz", + "integrity": "sha512-ltU+Kr3qWR6BtbdlMnCjobZKzeV1hN+S6UvDywBrwM19TTyqA03X66dzw1tEIdJvQ4lYKkBFox6IAEhoSEZ8Xw==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-window": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.4.0.tgz", + "integrity": "sha512-/bIYdBLAVsNR3v7gYGaV4pQW3M3kEPx5E8vDxGvxo6khTrGtSSCS7QiFKv9ogzBgZiy0OXLP9zO28U/1nF1mfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.4.0" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index b29e357..da19d6d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -46,6 +46,7 @@ "eslint": "^9.33.0", "eslint-config-prettier": "^10.1.8", "eslint-import-resolver-exports": "^1.0.0-beta.5", + "eslint-import-resolver-vite": "^2.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-prettier": "^5.1.3", @@ -58,8 +59,10 @@ "puppeteer": "^24.15.0", "tailwindcss": "^3.4.17", "vite": "^7.3.0", + "vite-plugin-pwa": "^1.2.0", "vite-plugin-svgr": "^4.5.0", - "vitest": "^3.2.4" + "vitest": "^3.2.4", + "workbox-window": "^7.4.0" }, "scripts": { "postinstall": "npx update-browserslist-db@latest || true", diff --git a/frontend/public/divemap_logo_domain_top4_extend_small.jpg b/frontend/public/divemap_logo_domain_top4_extend_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65940133941000f87050aa5406b510815d5fda29 GIT binary patch literal 79896 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 MbH87{xG1mx*`lolL;wH) literal 0 HcmV?d00001 diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json deleted file mode 100644 index 617de56..0000000 --- a/frontend/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "Divemap", - "name": "Divemap - Scuba Dive Site Review Platform", - "icons": [ - { - "src": "/favicons/favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "/favicons/android-chrome-192x192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "/favicons/android-chrome-512x512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#2563eb", - "background_color": "#ffffff" -} diff --git a/frontend/src/App.js b/frontend/src/App.js index 0023274..122653d 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -6,6 +6,7 @@ import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-d import EmailVerificationBanner from './components/EmailVerificationBanner'; import Navbar from './components/Navbar'; +import PWAUpdater from './components/PWAUpdater'; import ReportIssueButton from './components/ReportIssueButton'; import { SessionManager } from './components/SessionManager'; import { AuthProvider, useAuth } from './contexts/AuthContext'; @@ -161,6 +162,7 @@ function App() {
+
diff --git a/frontend/src/components/BackgroundLogo.js b/frontend/src/components/BackgroundLogo.js index 6ae05eb..5da7dfa 100644 --- a/frontend/src/components/BackgroundLogo.js +++ b/frontend/src/components/BackgroundLogo.js @@ -15,7 +15,7 @@ const BackgroundLogo = ({ opacity = 0.03, size = 'large', className = '' }) => {
diff --git a/frontend/src/components/GlobalSearchBar.js b/frontend/src/components/GlobalSearchBar.js index 8aa3a86..80a7b50 100644 --- a/frontend/src/components/GlobalSearchBar.js +++ b/frontend/src/components/GlobalSearchBar.js @@ -130,6 +130,7 @@ const GlobalSearchBar = ({ } error={error} popoverClassName={popoverClassName} + aria-label='Global Search' /> ); }; diff --git a/frontend/src/components/HeroSection.js b/frontend/src/components/HeroSection.js index 4393515..907c833 100644 --- a/frontend/src/components/HeroSection.js +++ b/frontend/src/components/HeroSection.js @@ -70,8 +70,11 @@ const HeroSection = ({
)} diff --git a/frontend/src/components/Navbar.js b/frontend/src/components/Navbar.js index d410bd4..54c9713 100644 --- a/frontend/src/components/Navbar.js +++ b/frontend/src/components/Navbar.js @@ -430,6 +430,7 @@ const Navbar = () => { diff --git a/frontend/src/components/PWAUpdater.jsx b/frontend/src/components/PWAUpdater.jsx new file mode 100644 index 0000000..dee8eab --- /dev/null +++ b/frontend/src/components/PWAUpdater.jsx @@ -0,0 +1,53 @@ +import { registerSW } from 'virtual:pwa-register'; + +import { useEffect } from 'react'; +import { toast } from 'react-hot-toast'; + +const PWAUpdater = () => { + useEffect(() => { + const updateSW = registerSW({ + onNeedRefresh() { + toast( + t => ( +
+ New content available! +
+ + +
+
+ ), + { + duration: Infinity, + position: 'bottom-right', + className: 'shadow-lg border border-gray-100', + } + ); + }, + onOfflineReady() { + toast.success('App is ready to work offline!', { + duration: 4000, + position: 'bottom-right', + className: 'shadow-md', + }); + }, + }); + }, []); + + return null; +}; + +export default PWAUpdater; diff --git a/frontend/src/components/ReportIssueButton.js b/frontend/src/components/ReportIssueButton.js index 072d5c5..9c4593f 100644 --- a/frontend/src/components/ReportIssueButton.js +++ b/frontend/src/components/ReportIssueButton.js @@ -22,6 +22,7 @@ const ReportIssueButton = () => { opacity-40 hover:opacity-100 hover:bg-white hover:text-black hover:shadow-md transition-all duration-300 z-50 border border-gray-200' title='Report an issue' + aria-label='Report an issue' > diff --git a/frontend/src/pages/Home.js b/frontend/src/pages/Home.js index b489478..60f62ac 100644 --- a/frontend/src/pages/Home.js +++ b/frontend/src/pages/Home.js @@ -147,7 +147,7 @@ const Home = () => { Browse Dive Trips @@ -161,7 +161,7 @@ const Home = () => { className='text-center p-4 sm:p-6 bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow cursor-pointer' > -

Discover Sites

+

Discover Sites

Browse through our comprehensive database of dive sites with detailed information, difficulty levels, and access instructions. @@ -173,7 +173,7 @@ const Home = () => { className='text-center p-4 sm:p-6 bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow cursor-pointer' > -

Log Your Dives

+

Log Your Dives

Record your diving experiences, track your progress, and share your adventures with the diving community. @@ -182,7 +182,7 @@ const Home = () => {

-

Rate & Review

+

Rate & Review

Share your experiences by rating dive sites and leaving detailed reviews to help other divers make informed decisions. @@ -194,7 +194,7 @@ const Home = () => { className='text-center p-4 sm:p-6 bg-white rounded-lg shadow-md hover:shadow-lg transition-shadow cursor-pointer' > -

Find Centers

+

Find Centers

Connect with professional diving centers, view their services, and get in touch for your next diving adventure. @@ -210,40 +210,40 @@ const Home = () => { {animatedDives.toLocaleString()} {!isBackendAvailable && +}

-
Dives
+
Dives
{animatedDiveSites.toLocaleString()} {!isBackendAvailable && +}
-
Dive Sites
+
Dive Sites
{animatedReviews.toLocaleString()} {!isBackendAvailable && +}
-
Reviews
+
Reviews
{animatedDivingCenters.toLocaleString()} {!isBackendAvailable && +}
-
Diving Centers
+
Diving Centers
{animatedDiveTrips.toLocaleString()} {!isBackendAvailable && +}
-
Dive Trips
+
Dive Trips
{!isBackendAvailable && (
-
+
✨ Live data loading... Our community is growing!
@@ -273,7 +273,7 @@ const Home = () => { Browse Dives diff --git a/frontend/vite.config.js b/frontend/vite.config.js index 36160a5..90583ea 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -1,6 +1,7 @@ import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import svgr from 'vite-plugin-svgr'; +import { VitePWA } from 'vite-plugin-pwa'; import path from 'path'; export default defineConfig({ @@ -15,6 +16,59 @@ export default defineConfig({ }, include: '**/*.svg', }), + VitePWA({ + registerType: 'prompt', + includeAssets: ['favicons/*.ico', 'favicons/*.png', 'help-screenshots/*.png'], + manifest: { + name: 'Divemap - Scuba Dive Site Review Platform', + short_name: 'Divemap', + description: 'Discover, rate and review dive sites and diving centers.', + theme_color: '#2563eb', + background_color: '#ffffff', + display: 'standalone', + scope: '/', + start_url: '/', + id: '/', + icons: [ + { + src: '/favicons/android-chrome-192x192.png', + sizes: '192x192', + type: 'image/png', + purpose: 'any maskable' + }, + { + src: '/favicons/android-chrome-512x512.png', + sizes: '512x512', + type: 'image/png', + purpose: 'any maskable' + } + ], + screenshots: [ + { + src: "/help-screenshots/dive-sites-map-view.png", + sizes: "2038x2388", + type: "image/png", + label: "Explore Dive Sites" + }, + { + src: "/help-screenshots/dives-logging-interface.png", + sizes: "2036x2108", + type: "image/png", + label: "Log Your Dives" + }, + { + src: "/help-screenshots/dedicated-map-view.png", + sizes: "2038x1053", + type: "image/png", + form_factor: "wide", + label: "Map View" + } + ] + }, + workbox: { + maximumFileSizeToCacheInBytes: 4 * 1024 * 1024, // 4MB to match the large vendor chunk + } + }) ], server: { host: true, // Needed for Docker