From 61ec7e44cf8be64e0f3a443eae39c928626c9a6a Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 18:50:51 +0200 Subject: [PATCH 01/43] docs: add PWA design spec for apps/main Covers installable PWA with vite-plugin-pwa, icon generation, custom install prompt, mobile polish, and deployment strategy. Co-Authored-By: Claude Sonnet 4.6 (1M context) --- .../specs/2026-04-02-pwa-design.md | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 docs/superpowers/specs/2026-04-02-pwa-design.md diff --git a/docs/superpowers/specs/2026-04-02-pwa-design.md b/docs/superpowers/specs/2026-04-02-pwa-design.md new file mode 100644 index 0000000..4577d22 --- /dev/null +++ b/docs/superpowers/specs/2026-04-02-pwa-design.md @@ -0,0 +1,180 @@ +# PWA Design Spec: apps/main + +**Date**: 2026-04-02 +**Goal**: Make apps/main installable as a native-feeling PWA with fast repeat loads, focused on mobile experience polish. No offline data, no push notifications. +**Approach**: `vite-plugin-pwa` (Workbox-based) integrated into the existing Vite build. + +--- + +## 1. Web App Manifest & Icons + +### Manifest + +Generated by `vite-plugin-pwa` from config in `vite.config.ts`. Key properties: + +| Property | Value | +|----------|-------| +| `name` | XTablo | +| `short_name` | XTablo | +| `start_url` | `/` | +| `display` | `standalone` | +| `theme_color` | Matched to app header (from Tailwind config) | +| `background_color` | Matched to app background | +| `orientation` | `any` | +| `scope` | `/` | + +### Icons + +Generated from existing `icon.jpg` (production) and `staging_icon.jpg` (staging) using a one-time script (e.g., `sharp`). Output committed to `apps/main/public/pwa-icons/`. + +Required sizes: +- `16x16`, `32x32` — favicons +- `180x180` — Apple touch icon +- `192x192` — Android standard +- `512x512` — Android standard +- `512x512 maskable` — Android adaptive icon + +### HTML Meta Tags + +Added to `apps/main/index.html`: + +```html + + + + +``` + +Note: The manifest `` is injected automatically by `vite-plugin-pwa`. + +--- + +## 2. Service Worker & Caching Strategy + +### Plugin Configuration + +`vite-plugin-pwa` in `vite.config.ts` with: +- `registerType: 'autoUpdate'` — silent background updates, no user prompt +- `workbox.globPatterns` — precache all build outputs (JS, CSS, fonts, images) + +### Caching Rules + +| Resource | Strategy | Notes | +|----------|----------|-------| +| App shell (HTML, JS, CSS) | Precache | Auto-generated by Workbox from build manifest | +| Static assets (icons, logos) | Precache | Included in build output | +| API calls (`/api/v1/*`) | Network only | Not cached; errors handled by React Query | +| Supabase calls | Network only | Not cached; errors handled by React Query | + +### SW Registration + +In `main.tsx`, using `registerSW` from `virtual:pwa-register`. Handles registration lifecycle and auto-update. + +### Update Flow + +1. User opens/refreshes the app +2. SW detects new precache manifest in background +3. New assets downloaded silently +4. New version activates on next navigation/refresh + +No "update available" toast — the app always requires connectivity, so silent updates are sufficient. + +--- + +## 3. Install Prompt UX + +### Custom Install Prompt + +A React hook `useInstallPrompt` that: +- Listens for the `beforeinstallprompt` event +- Stores the deferred prompt event +- Exposes `canInstall: boolean` and `promptInstall(): void` + +### UI + +- Dismissible banner shown to authenticated users on the dashboard +- Dismissal persisted in `localStorage` (key: `pwa-install-dismissed`) +- Hidden when app is already running in standalone mode (detected via `window.matchMedia('(display-mode: standalone)')`) + +### iOS Fallback + +Safari does not support `beforeinstallprompt`. For iOS Safari users: +- Detect via user agent +- Show manual instruction: "Tap Share > Add to Home Screen" +- Same dismissal logic applies + +--- + +## 4. Mobile Polish & Standalone Experience + +### Viewport & Safe Areas + +Update viewport meta tag: +```html + +``` + +Add CSS safe area padding on the app shell: +```css +padding-top: env(safe-area-inset-top); +padding-bottom: env(safe-area-inset-bottom); +padding-left: env(safe-area-inset-left); +padding-right: env(safe-area-inset-right); +``` + +### Splash Screens + +Simple approach — no custom splash images. Use `theme_color` + `background_color` in the manifest for Android. iOS uses `apple-mobile-web-app-status-bar-style` for a clean launch. + +### Status Bar + +- Android: Controlled by `theme_color` in manifest +- iOS: `apple-mobile-web-app-status-bar-style: default` + +### Navigation + +Standalone mode has no browser back button. The existing React Router navigation with in-app back buttons handles this. Verify no dead-end flows exist. + +--- + +## 5. Environment & Deployment + +### Environment Differences + +| Aspect | Staging | Production | +|--------|---------|------------| +| Icon source | `staging_icon.jpg` | `icon.jpg` | +| Manifest name | XTablo (Staging) | XTablo | +| All other config | Same | Same | + +### Cloudflare Workers + +No changes to `wrangler.toml`. The SW file and manifest are static assets in `dist/`, served by Cloudflare like any other file. SPA routing (`not_found_handling = "single-page-application"`) is unaffected. + +### Build Pipeline + +- `vite-plugin-pwa` runs as part of normal `pnpm build` — no separate step +- Icon generation is a one-time script, output committed to repo + +### Local Testing + +- `pnpm dev`: SW disabled (standard behavior for vite-plugin-pwa) +- `pnpm build && pnpm preview`: Full PWA experience with active SW + +### Impact + +Fully additive. Users who don't install the PWA see no changes. The app works identically in a regular browser tab. + +--- + +## Out of Scope + +- Offline data access (all data requires connectivity) +- Push notifications (deferred to future work) +- Background sync +- Custom splash screen images (using color-based approach instead) + +## Dependencies + +- `vite-plugin-pwa` — Vite PWA integration +- `sharp` (dev dependency) — icon generation script From 795378e1f83ffea77dbc433891be74e0836a32ce Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 18:56:41 +0200 Subject: [PATCH 02/43] docs: add PWA implementation plan 10-task plan covering dependencies, icon generation, vite-plugin-pwa config, meta tags, SW registration, safe areas, install prompt hook, banner component, and end-to-end verification. Co-Authored-By: Claude Sonnet 4.6 (1M context) --- docs/superpowers/plans/2026-04-02-pwa.md | 891 +++++++++++++++++++++++ 1 file changed, 891 insertions(+) create mode 100644 docs/superpowers/plans/2026-04-02-pwa.md diff --git a/docs/superpowers/plans/2026-04-02-pwa.md b/docs/superpowers/plans/2026-04-02-pwa.md new file mode 100644 index 0000000..1b3c044 --- /dev/null +++ b/docs/superpowers/plans/2026-04-02-pwa.md @@ -0,0 +1,891 @@ +# PWA Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Make apps/main installable as a native-feeling PWA with fast repeat loads and mobile polish. + +**Architecture:** Add `vite-plugin-pwa` to the existing Vite build. The plugin auto-generates a service worker (Workbox) and web app manifest. A custom install prompt hook + banner component handles the "Add to Home Screen" UX. Safe area CSS and viewport meta tags polish the standalone experience. + +**Tech Stack:** vite-plugin-pwa, Workbox (auto-generated), sharp (icon generation), React hooks + +--- + +## File Map + +| Action | File | Responsibility | +|--------|------|---------------| +| Create | `apps/main/scripts/generate-pwa-icons.ts` | One-time script to generate PWA icon set from source images | +| Create | `apps/main/public/pwa-icons/` | Generated icon files (committed to repo) | +| Create | `apps/main/src/hooks/useInstallPrompt.ts` | React hook capturing `beforeinstallprompt` event | +| Create | `apps/main/src/hooks/useInstallPrompt.test.ts` | Tests for install prompt hook | +| Create | `apps/main/src/components/InstallBanner.tsx` | Dismissible install prompt banner | +| Create | `apps/main/src/components/InstallBanner.test.tsx` | Tests for install banner | +| Modify | `apps/main/package.json` | Add `vite-plugin-pwa` and `sharp` dependencies | +| Modify | `apps/main/vite.config.ts` | Add VitePWA plugin config | +| Modify | `apps/main/index.html` | Add PWA meta tags, update viewport | +| Modify | `apps/main/src/main.tsx` | Register service worker | +| Modify | `apps/main/src/main.css` | Add safe area CSS for standalone mode | +| Modify | `apps/main/src/App.tsx` | Add InstallBanner to app shell | + +--- + +### Task 1: Install dependencies + +**Files:** +- Modify: `apps/main/package.json` + +- [ ] **Step 1: Install vite-plugin-pwa** + +```bash +cd apps/main && pnpm add -D vite-plugin-pwa +``` + +- [ ] **Step 2: Install sharp for icon generation** + +```bash +cd apps/main && pnpm add -D sharp @types/sharp +``` + +- [ ] **Step 3: Verify installation** + +```bash +cd apps/main && pnpm list vite-plugin-pwa sharp +``` + +Expected: Both packages listed with versions. + +- [ ] **Step 4: Commit** + +```bash +git add apps/main/package.json pnpm-lock.yaml +git commit -m "feat(pwa): add vite-plugin-pwa and sharp dependencies" +``` + +--- + +### Task 2: Generate PWA icon set + +**Files:** +- Create: `apps/main/scripts/generate-pwa-icons.ts` +- Create: `apps/main/public/pwa-icons/*.png` + +- [ ] **Step 1: Create the icon generation script** + +Create `apps/main/scripts/generate-pwa-icons.ts`: + +```typescript +import sharp from "sharp"; +import path from "node:path"; +import fs from "node:fs"; + +const PUBLIC_DIR = path.resolve(import.meta.dirname, "../public"); +const OUTPUT_DIR = path.join(PUBLIC_DIR, "pwa-icons"); + +const ICON_SIZES = [ + { size: 16, name: "favicon-16x16.png" }, + { size: 32, name: "favicon-32x32.png" }, + { size: 180, name: "apple-touch-icon-180x180.png" }, + { size: 192, name: "pwa-192x192.png" }, + { size: 512, name: "pwa-512x512.png" }, + { size: 512, name: "pwa-512x512-maskable.png", maskable: true }, +]; + +// Maskable icons need 10% safe zone padding (per spec). +// We add a colored background and shrink the source to 80% to stay within the safe zone. +const MASKABLE_PADDING_RATIO = 0.1; +const MASKABLE_BG_COLOR = "#ffffff"; + +async function generateIcons(sourceFile: string) { + if (!fs.existsSync(OUTPUT_DIR)) { + fs.mkdirSync(OUTPUT_DIR, { recursive: true }); + } + + for (const icon of ICON_SIZES) { + const outputPath = path.join(OUTPUT_DIR, icon.name); + + if (icon.maskable) { + // Create maskable icon with padding and background + const innerSize = Math.round(icon.size * (1 - MASKABLE_PADDING_RATIO * 2)); + const offset = Math.round(icon.size * MASKABLE_PADDING_RATIO); + + const resizedIcon = await sharp(sourceFile) + .resize(innerSize, innerSize, { fit: "contain" }) + .toBuffer(); + + await sharp({ + create: { + width: icon.size, + height: icon.size, + channels: 4, + background: MASKABLE_BG_COLOR, + }, + }) + .composite([{ input: resizedIcon, left: offset, top: offset }]) + .png() + .toFile(outputPath); + } else { + await sharp(sourceFile) + .resize(icon.size, icon.size, { fit: "contain" }) + .png() + .toFile(outputPath); + } + + console.log(`Generated: ${icon.name} (${icon.size}x${icon.size})`); + } +} + +// Determine source: pass "staging" as first arg for staging icons +const variant = process.argv[2]; +const sourceFile = + variant === "staging" + ? path.join(PUBLIC_DIR, "staging_icon.jpg") + : path.join(PUBLIC_DIR, "icon.jpg"); + +if (!fs.existsSync(sourceFile)) { + console.error(`Source icon not found: ${sourceFile}`); + process.exit(1); +} + +console.log(`Generating PWA icons from: ${sourceFile}`); +generateIcons(sourceFile).then(() => console.log("Done!")); +``` + +- [ ] **Step 2: Run the script for production icons** + +```bash +cd apps/main && npx tsx scripts/generate-pwa-icons.ts +``` + +Expected: 6 PNG files created in `apps/main/public/pwa-icons/`. + +- [ ] **Step 3: Verify the generated icons exist and have reasonable sizes** + +```bash +ls -la apps/main/public/pwa-icons/ +``` + +Expected: 6 files — favicon-16x16.png, favicon-32x32.png, apple-touch-icon-180x180.png, pwa-192x192.png, pwa-512x512.png, pwa-512x512-maskable.png. + +- [ ] **Step 4: Commit** + +```bash +git add apps/main/scripts/generate-pwa-icons.ts apps/main/public/pwa-icons/ +git commit -m "feat(pwa): add icon generation script and generated PWA icons" +``` + +--- + +### Task 3: Configure vite-plugin-pwa + +**Files:** +- Modify: `apps/main/vite.config.ts` + +- [ ] **Step 1: Add VitePWA plugin to vite config** + +In `apps/main/vite.config.ts`, add the import at the top: + +```typescript +import { VitePWA } from "vite-plugin-pwa"; +``` + +Then add the plugin to the `plugins` array (before the cloudflare conditional). Note that `mode` is already available from the `defineConfig` callback parameter: + +```typescript +VitePWA({ + registerType: "autoUpdate", + includeAssets: [ + "public/icon.jpg", + "public/logo_dark.png", + "public/logo_white.png", + ], + manifest: { + name: mode === "staging" ? "XTablo (Staging)" : "XTablo", + short_name: "XTablo", + description: "Collaborative project management for construction teams", + start_url: "/", + display: "standalone", + orientation: "any", + theme_color: "#1e1b2e", + background_color: "#1e1b2e", + icons: [ + { + src: "pwa-icons/pwa-192x192.png", + sizes: "192x192", + type: "image/png", + }, + { + src: "pwa-icons/pwa-512x512.png", + sizes: "512x512", + type: "image/png", + }, + { + src: "pwa-icons/pwa-512x512-maskable.png", + sizes: "512x512", + type: "image/png", + purpose: "maskable", + }, + ], + }, + workbox: { + globPatterns: ["**/*.{js,css,html,ico,png,jpg,svg,woff,woff2}"], + // Do not precache source maps + globIgnores: ["**/*.map"], + }, +}), +``` + +Note: `theme_color` and `background_color` are set to `#1e1b2e` which is the dark navbar background color from the CSS. This provides a consistent splash screen feel on Android. Pick dark because standalone apps typically launch in the user's last-used theme, and dark provides a cleaner splash. + +- [ ] **Step 2: Build to verify the plugin works** + +```bash +cd apps/main && pnpm build +``` + +Expected: Build succeeds. The `dist/` folder should now contain `manifest.webmanifest`, `sw.js`, and `workbox-*.js`. + +- [ ] **Step 3: Verify manifest was generated** + +```bash +cat apps/main/dist/manifest.webmanifest | head -30 +``` + +Expected: JSON with name "XTablo", icons array, display "standalone". + +- [ ] **Step 4: Commit** + +```bash +git add apps/main/vite.config.ts +git commit -m "feat(pwa): configure vite-plugin-pwa with manifest and workbox precaching" +``` + +--- + +### Task 4: Update HTML meta tags and viewport + +**Files:** +- Modify: `apps/main/index.html` + +- [ ] **Step 1: Update index.html with PWA meta tags** + +Replace the current `` content in `apps/main/index.html`: + +```html + + + + + + + + + + + + XTablo + + +
+ + + +``` + +Changes from original: +- Favicon now points to generated PNG icons instead of `icon.jpg` +- Added `viewport-fit=cover` for notched devices +- Added `theme-color` meta tag +- Added Apple PWA meta tags +- The `` tag is injected automatically by vite-plugin-pwa — do NOT add it manually + +- [ ] **Step 2: Build and verify meta tags in output** + +```bash +cd apps/main && pnpm build && head -20 dist/index.html +``` + +Expected: The built HTML includes all meta tags plus an auto-injected ``. + +- [ ] **Step 3: Commit** + +```bash +git add apps/main/index.html +git commit -m "feat(pwa): add PWA meta tags and update viewport for standalone mode" +``` + +--- + +### Task 5: Register service worker in main.tsx + +**Files:** +- Modify: `apps/main/src/main.tsx` + +- [ ] **Step 1: Add SW registration** + +Add the following import and call at the end of `apps/main/src/main.tsx`, after the `createRoot().render()` call: + +```typescript +import { registerSW } from "virtual:pwa-register"; + +// Auto-update service worker — checks for updates on page load +registerSW({ immediate: true }); +``` + +- [ ] **Step 2: Add type declaration for the virtual module** + +The `virtual:pwa-register` module needs a type declaration. `vite-plugin-pwa` ships its own types. Add to `apps/main/tsconfig.json` (or `tsconfig.app.json`, whichever controls the app source) in `compilerOptions.types`: + +```json +"types": ["vite-plugin-pwa/client"] +``` + +If there's no `types` array yet, check the existing tsconfig structure and add it appropriately. + +- [ ] **Step 3: Verify typecheck passes** + +```bash +cd apps/main && pnpm typecheck +``` + +Expected: No errors related to `virtual:pwa-register`. + +- [ ] **Step 4: Commit** + +```bash +git add apps/main/src/main.tsx apps/main/tsconfig.json apps/main/tsconfig.app.json +git commit -m "feat(pwa): register service worker with auto-update" +``` + +--- + +### Task 6: Add safe area CSS for standalone mode + +**Files:** +- Modify: `apps/main/src/main.css` + +- [ ] **Step 1: Add safe area styles** + +Add the following at the end of the `@layer base` block in `apps/main/src/main.css` (after the existing `body` rule, still inside `@layer base`): + +```css +@media (display-mode: standalone) { + body { + padding-top: env(safe-area-inset-top); + padding-bottom: env(safe-area-inset-bottom); + padding-left: env(safe-area-inset-left); + padding-right: env(safe-area-inset-right); + } +} +``` + +This only applies when the app is running in standalone (installed PWA) mode, not in a regular browser tab. + +- [ ] **Step 2: Build to verify no CSS errors** + +```bash +cd apps/main && pnpm build +``` + +Expected: Build succeeds with no CSS errors. + +- [ ] **Step 3: Commit** + +```bash +git add apps/main/src/main.css +git commit -m "feat(pwa): add safe area insets for standalone mode" +``` + +--- + +### Task 7: Create useInstallPrompt hook + +**Files:** +- Create: `apps/main/src/hooks/useInstallPrompt.ts` +- Create: `apps/main/src/hooks/useInstallPrompt.test.ts` + +- [ ] **Step 1: Write the test file** + +Create `apps/main/src/hooks/useInstallPrompt.test.ts`: + +```typescript +import { act, renderHook } from "@testing-library/react"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { useInstallPrompt } from "./useInstallPrompt"; + +const DISMISSED_KEY = "pwa-install-dismissed"; + +describe("useInstallPrompt", () => { + beforeEach(() => { + localStorage.clear(); + }); + + afterEach(() => { + vi.restoreAllMocks(); + }); + + it("starts with canInstall false and isStandalone false", () => { + const { result } = renderHook(() => useInstallPrompt()); + expect(result.current.canInstall).toBe(false); + expect(result.current.isStandalone).toBe(false); + expect(result.current.isDismissed).toBe(false); + }); + + it("captures beforeinstallprompt event and sets canInstall to true", () => { + const { result } = renderHook(() => useInstallPrompt()); + + const event = new Event("beforeinstallprompt"); + Object.assign(event, { preventDefault: vi.fn(), prompt: vi.fn() }); + + act(() => { + window.dispatchEvent(event); + }); + + expect(result.current.canInstall).toBe(true); + }); + + it("dismiss persists to localStorage and sets isDismissed", () => { + const { result } = renderHook(() => useInstallPrompt()); + + act(() => { + result.current.dismiss(); + }); + + expect(result.current.isDismissed).toBe(true); + expect(localStorage.getItem(DISMISSED_KEY)).toBe("true"); + }); + + it("reads dismissed state from localStorage on mount", () => { + localStorage.setItem(DISMISSED_KEY, "true"); + const { result } = renderHook(() => useInstallPrompt()); + expect(result.current.isDismissed).toBe(true); + }); + + it("detects iOS Safari", () => { + // Mock iOS Safari user agent + vi.spyOn(navigator, "userAgent", "get").mockReturnValue( + "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1" + ); + const { result } = renderHook(() => useInstallPrompt()); + expect(result.current.isIOS).toBe(true); + }); +}); +``` + +- [ ] **Step 2: Run the tests to verify they fail** + +```bash +cd apps/main && pnpm vitest run src/hooks/useInstallPrompt.test.ts +``` + +Expected: FAIL — module `./useInstallPrompt` not found. + +- [ ] **Step 3: Implement the hook** + +Create `apps/main/src/hooks/useInstallPrompt.ts`: + +```typescript +import { useCallback, useEffect, useRef, useState } from "react"; + +const DISMISSED_KEY = "pwa-install-dismissed"; + +interface BeforeInstallPromptEvent extends Event { + prompt(): Promise<{ outcome: "accepted" | "dismissed" }>; +} + +export function useInstallPrompt() { + const deferredPrompt = useRef(null); + const [canInstall, setCanInstall] = useState(false); + const [isDismissed, setIsDismissed] = useState( + () => localStorage.getItem(DISMISSED_KEY) === "true" + ); + + const isStandalone = + typeof window !== "undefined" && + window.matchMedia("(display-mode: standalone)").matches; + + const isIOS = + typeof navigator !== "undefined" && + /iPad|iPhone|iPod/.test(navigator.userAgent); + + useEffect(() => { + const handler = (e: Event) => { + e.preventDefault(); + deferredPrompt.current = e as BeforeInstallPromptEvent; + setCanInstall(true); + }; + window.addEventListener("beforeinstallprompt", handler); + return () => window.removeEventListener("beforeinstallprompt", handler); + }, []); + + const promptInstall = useCallback(async () => { + if (!deferredPrompt.current) return; + const result = await deferredPrompt.current.prompt(); + if (result.outcome === "accepted") { + deferredPrompt.current = null; + setCanInstall(false); + } + }, []); + + const dismiss = useCallback(() => { + setIsDismissed(true); + localStorage.setItem(DISMISSED_KEY, "true"); + }, []); + + return { canInstall, isStandalone, isIOS, isDismissed, promptInstall, dismiss }; +} +``` + +- [ ] **Step 4: Run the tests to verify they pass** + +```bash +cd apps/main && pnpm vitest run src/hooks/useInstallPrompt.test.ts +``` + +Expected: All 5 tests pass. + +- [ ] **Step 5: Commit** + +```bash +git add apps/main/src/hooks/useInstallPrompt.ts apps/main/src/hooks/useInstallPrompt.test.ts +git commit -m "feat(pwa): add useInstallPrompt hook with tests" +``` + +--- + +### Task 8: Create InstallBanner component + +**Files:** +- Create: `apps/main/src/components/InstallBanner.tsx` +- Create: `apps/main/src/components/InstallBanner.test.tsx` + +- [ ] **Step 1: Write the test file** + +Create `apps/main/src/components/InstallBanner.test.tsx`: + +```tsx +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; + +// Mock the hook so we can control its return values +const mockPromptInstall = vi.fn(); +const mockDismiss = vi.fn(); + +vi.mock("../hooks/useInstallPrompt", () => ({ + useInstallPrompt: vi.fn(() => ({ + canInstall: false, + isStandalone: false, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + })), +})); + +import { useInstallPrompt } from "../hooks/useInstallPrompt"; +import { InstallBanner } from "./InstallBanner"; + +const mockUseInstallPrompt = vi.mocked(useInstallPrompt); + +describe("InstallBanner", () => { + beforeEach(() => { + mockPromptInstall.mockClear(); + mockDismiss.mockClear(); + }); + + afterEach(() => { + vi.restoreAllMocks(); + }); + + it("renders nothing when canInstall is false and not iOS", () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: false, + isStandalone: false, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + const { container } = render(); + expect(container.firstChild).toBeNull(); + }); + + it("renders nothing when already in standalone mode", () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: true, + isStandalone: true, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + const { container } = render(); + expect(container.firstChild).toBeNull(); + }); + + it("renders nothing when dismissed", () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: true, + isStandalone: false, + isIOS: false, + isDismissed: true, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + const { container } = render(); + expect(container.firstChild).toBeNull(); + }); + + it("renders install banner when canInstall is true", () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: true, + isStandalone: false, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + render(); + expect(screen.getByText(/install/i)).toBeInTheDocument(); + }); + + it("calls promptInstall when install button is clicked", async () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: true, + isStandalone: false, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + render(); + await userEvent.click(screen.getByRole("button", { name: /install/i })); + expect(mockPromptInstall).toHaveBeenCalledOnce(); + }); + + it("calls dismiss when close button is clicked", async () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: true, + isStandalone: false, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + render(); + await userEvent.click(screen.getByRole("button", { name: /dismiss|close/i })); + expect(mockDismiss).toHaveBeenCalledOnce(); + }); + + it("renders iOS instructions when isIOS is true and not dismissed", () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: false, + isStandalone: false, + isIOS: true, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + render(); + expect(screen.getByText(/share/i)).toBeInTheDocument(); + expect(screen.getByText(/add to home screen/i)).toBeInTheDocument(); + }); +}); +``` + +- [ ] **Step 2: Run the tests to verify they fail** + +```bash +cd apps/main && pnpm vitest run src/components/InstallBanner.test.tsx +``` + +Expected: FAIL — module `./InstallBanner` not found. + +- [ ] **Step 3: Implement the component** + +Create `apps/main/src/components/InstallBanner.tsx`: + +```tsx +import { X, Download, Share } from "lucide-react"; +import { useInstallPrompt } from "../hooks/useInstallPrompt"; + +export function InstallBanner() { + const { canInstall, isStandalone, isIOS, isDismissed, promptInstall, dismiss } = + useInstallPrompt(); + + // Don't show if already installed, dismissed, or no install option available + if (isStandalone || isDismissed) return null; + if (!canInstall && !isIOS) return null; + + return ( +
+ {isIOS ? ( + <> + +

+ Install XTablo: tap{" "} + Share then{" "} + Add to Home Screen +

+ + ) : ( + <> + +

+ Install XTablo for a faster, native experience +

+ + + )} + +
+ ); +} +``` + +The banner renders as a slim top bar using existing design tokens (bg-card, border-border, text-foreground, etc.) so it matches the app's theme automatically. + +- [ ] **Step 4: Run the tests to verify they pass** + +```bash +cd apps/main && pnpm vitest run src/components/InstallBanner.test.tsx +``` + +Expected: All 7 tests pass. + +- [ ] **Step 5: Commit** + +```bash +git add apps/main/src/components/InstallBanner.tsx apps/main/src/components/InstallBanner.test.tsx +git commit -m "feat(pwa): add InstallBanner component with tests" +``` + +--- + +### Task 9: Wire InstallBanner into the app shell + +**Files:** +- Modify: `apps/main/src/App.tsx` + +- [ ] **Step 1: Add InstallBanner to the App component** + +In `apps/main/src/App.tsx`, import the component: + +```typescript +import { InstallBanner } from "./components/InstallBanner"; +``` + +Then add `` as the first child inside the main `
`, before ``: + +```tsx +
+ + + {showBanner && ( + + )} +
+``` + +The banner appears at the very top of the page, above all content including the sidebar and top bar. It self-hides based on the hook state (dismissed, standalone, no install available). + +- [ ] **Step 2: Build and typecheck** + +```bash +cd apps/main && pnpm typecheck && pnpm build +``` + +Expected: Both pass with no errors. + +- [ ] **Step 3: Commit** + +```bash +git add apps/main/src/App.tsx +git commit -m "feat(pwa): wire InstallBanner into app shell" +``` + +--- + +### Task 10: Verify full PWA build end-to-end + +**Files:** None (verification only) + +- [ ] **Step 1: Clean build** + +```bash +cd apps/main && pnpm clean && pnpm build +``` + +Expected: Build succeeds. + +- [ ] **Step 2: Verify all PWA assets in dist/** + +```bash +ls apps/main/dist/manifest.webmanifest apps/main/dist/sw.js apps/main/dist/pwa-icons/ +``` + +Expected: `manifest.webmanifest` and `sw.js` exist. `pwa-icons/` folder contains all 6 generated icons. + +- [ ] **Step 3: Verify manifest content** + +```bash +cat apps/main/dist/manifest.webmanifest +``` + +Expected: JSON with `name: "XTablo"`, `display: "standalone"`, `theme_color: "#1e1b2e"`, 3 icons (192, 512, 512 maskable). + +- [ ] **Step 4: Run all tests** + +```bash +cd apps/main && pnpm test +``` + +Expected: All tests pass, including the new useInstallPrompt and InstallBanner tests. + +- [ ] **Step 5: Run linter** + +```bash +cd apps/main && pnpm lint +``` + +Expected: No new linting errors. Fix any issues before proceeding. + +- [ ] **Step 6: Preview locally (manual verification)** + +```bash +cd apps/main && pnpm preview +``` + +Open `http://localhost:4173` in Chrome. Open DevTools → Application tab: +- **Manifest** section should show "XTablo" with correct icons +- **Service Workers** section should show an active SW +- **Lighthouse** PWA audit should pass core checks (installable, has manifest, has SW) + +This step is manual — verify visually, then stop the preview server. + +- [ ] **Step 7: Final commit if any lint fixes were needed** + +```bash +git add -A +git commit -m "fix(pwa): lint fixes" +``` + +Only run this if Step 5 required fixes. Skip if lint was clean. From ab38e8115bb8777baea2d3cacf94d3f36a0855d1 Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 18:58:54 +0200 Subject: [PATCH 03/43] feat(pwa): add vite-plugin-pwa and sharp dependencies --- apps/main/package.json | 3 + pnpm-lock.yaml | 2273 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 2233 insertions(+), 43 deletions(-) diff --git a/apps/main/package.json b/apps/main/package.json index 19ac56c..06ec90a 100644 --- a/apps/main/package.json +++ b/apps/main/package.json @@ -39,6 +39,7 @@ "@types/node": "^22.13.10", "@types/react": "19.0.10", "@types/react-dom": "19.0.4", + "@types/sharp": "^0.32.0", "@typescript-eslint/eslint-plugin": "^7.0.2", "@typescript-eslint/parser": "^7.0.2", "@vitejs/plugin-react": "^4.3.4", @@ -56,6 +57,7 @@ "react-aria-components": "^1.7.0", "react-dom": "19.0.0", "rollup-plugin-visualizer": "^5.14.0", + "sharp": "^0.34.5", "tailwind-merge": "^3.0.2", "tailwindcss": "^4.1.15", "tailwindcss-animate": "^1.0.7", @@ -63,6 +65,7 @@ "typescript": "^5.7.0", "typescript-eslint": "^8.26.1", "vite": "^6.2.2", + "vite-plugin-pwa": "^1.2.0", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.2.4", "wrangler": "^4.24.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 566edfb..31b63e9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -117,7 +117,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.8 - version: 4.0.8(@types/debug@4.1.12)(@types/node@20.19.23)(@vitest/ui@4.0.8)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@20.0.3)(lightningcss@1.30.2)(tsx@4.20.6) + version: 4.0.8(@types/debug@4.1.12)(@types/node@20.19.23)(@vitest/ui@4.0.8)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@20.0.3)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) apps/external: dependencies: @@ -169,10 +169,10 @@ importers: version: 2.2.5 '@cloudflare/vite-plugin': specifier: ^1.9.4 - version: 1.13.14(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6))(workerd@1.20251011.0)(wrangler@4.44.0) + version: 1.13.14(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6))(workerd@1.20251011.0)(wrangler@4.44.0) '@tailwindcss/vite': specifier: ^4.0.14 - version: 4.1.15(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)) + version: 4.1.15(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)) '@types/react': specifier: 19.0.10 version: 19.0.10 @@ -181,7 +181,7 @@ importers: version: 19.0.4(@types/react@19.0.10) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)) + version: 4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)) tailwindcss: specifier: ^4.0.14 version: 4.1.15 @@ -193,10 +193,10 @@ importers: version: 5.9.3 vite: specifier: ^6.2.2 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)) + version: 5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)) wrangler: specifier: ^4.24.3 version: 4.44.0 @@ -274,7 +274,7 @@ importers: version: 2.76.1 '@tailwindcss/vite': specifier: ^4.1.5 - version: 4.1.15(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)) + version: 4.1.15(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)) '@tanstack/react-query': specifier: ^5.69.0 version: 5.90.5(react@19.0.0) @@ -368,7 +368,7 @@ importers: version: 2.2.5 '@cloudflare/vite-plugin': specifier: ^1.9.4 - version: 1.13.14(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6))(workerd@1.20251011.0)(wrangler@4.44.0) + version: 1.13.14(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6))(workerd@1.20251011.0)(wrangler@4.44.0) '@esbuild-plugins/node-globals-polyfill': specifier: ^0.2.3 version: 0.2.3(esbuild@0.25.11) @@ -414,6 +414,9 @@ importers: '@types/react-dom': specifier: 19.0.4 version: 19.0.4(@types/react@19.0.10) + '@types/sharp': + specifier: ^0.32.0 + version: 0.32.0 '@typescript-eslint/eslint-plugin': specifier: ^7.0.2 version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) @@ -422,7 +425,7 @@ importers: version: 7.18.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)) + version: 4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)) chromatic: specifier: ^11.5.0 version: 11.29.0 @@ -464,7 +467,10 @@ importers: version: 19.0.0(react@19.0.0) rollup-plugin-visualizer: specifier: ^5.14.0 - version: 5.14.0(rollup@4.52.5) + version: 5.14.0(rollup@2.80.0) + sharp: + specifier: ^0.34.5 + version: 0.34.5 tailwind-merge: specifier: ^3.0.2 version: 3.3.1 @@ -485,13 +491,16 @@ importers: version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^6.2.2 - version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) + version: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) + vite-plugin-pwa: + specifier: ^1.2.0 + version: 1.2.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)) + version: 5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@20.0.3)(lightningcss@1.30.2)(tsx@4.20.6) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@20.0.3)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) wrangler: specifier: ^4.24.3 version: 4.44.0 @@ -710,6 +719,12 @@ packages: '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + '@apideck/better-ajv-errors@0.3.7': + resolution: {integrity: sha512-TajUJwGWbDwkCx/CZi7tRE8PVB7simCvKJfHUsSdvps+aTM/PDPP4gkLmKnc+x3CE//y9i/nj74GqdL/hwk7Iw==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + '@aws-crypto/crc32@5.2.0': resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} @@ -873,10 +888,18 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.28.4': resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.28.4': resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} engines: {node: '>=6.9.0'} @@ -885,28 +908,95 @@ packages: resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.27.2': resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.28.6': + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.28.5': + resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.8': + resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.27.1': resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.28.3': resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.27.1': resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -915,10 +1005,18 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.28.6': + resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} + engines: {node: '>=6.9.0'} + '@babel/helpers@7.28.4': resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} @@ -928,6 +1026,47 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': + resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6': + resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -949,12 +1088,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-assertions@7.28.6': + resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-attributes@7.27.1': resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-attributes@7.28.6': + resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-meta@7.10.4': resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: @@ -1019,6 +1170,246 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.29.0': + resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.28.6': + resolution: {integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.28.6': + resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.28.6': + resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.28.6': + resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.28.6': + resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.28.6': + resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.28.5': + resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.28.6': + resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-explicit-resource-management@7.28.6': + resolution: {integrity: sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.28.6': + resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.28.6': + resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.28.6': + resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.28.6': + resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.29.0': + resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0': + resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6': + resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.28.6': + resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.28.6': + resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.28.6': + resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.28.6': + resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.27.7': + resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.28.6': + resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.28.6': + resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.27.1': resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} @@ -1031,6 +1422,89 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-regenerator@7.29.0': + resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.28.6': + resolution: {integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.28.6': + resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.28.6': + resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.28.6': + resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.29.2': + resolution: {integrity: sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@babel/runtime@7.28.4': resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} @@ -1039,14 +1513,26 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.28.4': resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.28.4': resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1298,6 +1784,9 @@ packages: '@emnapi/runtime@1.6.0': resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + '@emoji-mart/data@1.2.1': resolution: {integrity: sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw==} @@ -1755,111 +2244,248 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + '@img/sharp-darwin-x64@0.33.5': resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + '@img/sharp-libvips-darwin-arm64@1.0.4': resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} cpu: [arm64] os: [darwin] + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + '@img/sharp-libvips-darwin-x64@1.0.4': resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} cpu: [x64] os: [darwin] + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + '@img/sharp-libvips-linux-arm64@1.0.4': resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + '@img/sharp-libvips-linux-arm@1.0.5': resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + '@img/sharp-libvips-linux-s390x@1.0.4': resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + '@img/sharp-libvips-linux-x64@1.0.4': resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + '@img/sharp-libvips-linuxmusl-x64@1.0.4': resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + '@img/sharp-linux-arm64@0.33.5': resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + '@img/sharp-linux-arm@0.33.5': resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + '@img/sharp-linux-s390x@0.33.5': resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + '@img/sharp-linux-x64@0.33.5': resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + '@img/sharp-linuxmusl-arm64@0.33.5': resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + '@img/sharp-linuxmusl-x64@0.33.5': resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + '@img/sharp-wasm32@0.33.5': resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + '@img/sharp-win32-ia32@0.33.5': resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + '@img/sharp-win32-x64@0.33.5': resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@inquirer/external-editor@1.0.2': resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} engines: {node: '>=18'} @@ -1993,6 +2619,9 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -3293,6 +3922,55 @@ packages: '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + '@rollup/plugin-babel@5.3.1': + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + 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 + + '@rollup/plugin-node-resolve@15.3.1': + resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-replace@2.4.2': + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + + '@rollup/plugin-terser@0.4.4': + resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/rollup-android-arm-eabi@4.52.5': resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} cpu: [arm] @@ -3725,6 +4403,9 @@ packages: '@supabase/supabase-js@2.76.1': resolution: {integrity: sha512-dYMh9EsTVXZ6WbQ0QmMGIhbXct5+x636tXXaaxUmwjj3kY1jyBTQU8QehxAIfjyRu1mWGV07hoYmTYakkxdSGQ==} + '@surma/rollup-plugin-off-main-thread@2.2.3': + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} @@ -4010,6 +4691,9 @@ packages: '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -4099,6 +4783,13 @@ packages: '@types/request@2.48.13': resolution: {integrity: sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==} + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + + '@types/sharp@0.32.0': + resolution: {integrity: sha512-OOi3kL+FZDnPhVzsfD37J88FNeZh6gQsGcLc95NbeURRGvmSjeXiDcyWzF2o3yh/gQAUn2uhh/e+CPCa5nwAxw==} + deprecated: This is a stub types definition. sharp provides its own type definitions, so you do not need this installed. + '@types/sinon@17.0.4': resolution: {integrity: sha512-RHnIrhfPO3+tJT0s7cFaXGZvsL4bbR3/k7z3P312qMS4JaS2Tk+KiwiLx1S0rQ56ERj00u1/BtdyVd0FY+Pdew==} @@ -4434,6 +5125,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -4536,9 +5230,16 @@ packages: async-retry@1.3.1: resolution: {integrity: sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} @@ -4571,6 +5272,21 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-polyfill-corejs2@0.4.17: + resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.14.2: + resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.8: + resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-preset-current-node-syntax@1.2.0: resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} peerDependencies: @@ -4595,6 +5311,11 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.10.13: + resolution: {integrity: sha512-BL2sTuHOdy0YT1lYieUxTw/QMtPBC3pmlJC6xk8BBYVv6vcw3SGdKemQ+Xsx9ik2F/lYDO9tqsFQH1r9PFuHKw==} + engines: {node: '>=6.0.0'} + hasBin: true + baseline-browser-mapping@2.8.19: resolution: {integrity: sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==} hasBin: true @@ -4630,6 +5351,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -4677,6 +5403,9 @@ packages: caniuse-lite@1.0.30001751: resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} + caniuse-lite@1.0.30001784: + resolution: {integrity: sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==} + canvg@3.0.11: resolution: {integrity: sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==} engines: {node: '>=10.0.0'} @@ -4805,6 +5534,13 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -4819,6 +5555,9 @@ packages: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} + core-js@3.46.0: resolution: {integrity: sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==} @@ -4844,6 +5583,10 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + crypto-randomuuid@1.0.0: resolution: {integrity: sha512-/RC5F4l1SCqD/jazwUF6+t34Cd8zTSAGZ7rvvZu1whZUhD2a5MOGKjSGowoGcpj/cbVZk1ZODIooJEQQq3nNAA==} @@ -5071,9 +5814,17 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + electron-to-chromium@1.5.237: resolution: {integrity: sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==} + electron-to-chromium@1.5.331: + resolution: {integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==} + emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} @@ -5230,6 +5981,12 @@ packages: estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -5290,6 +6047,9 @@ packages: fast-png@6.4.0: resolution: {integrity: sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-xml-parser@4.5.3: resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} hasBin: true @@ -5332,6 +6092,9 @@ packages: resolution: {integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==} engines: {node: '>= 12'} + filelist@1.0.6: + resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -5379,6 +6142,10 @@ packages: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -5433,6 +6200,9 @@ packages: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -5473,16 +6243,18 @@ packages: glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@11.0.3: resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} @@ -5710,6 +6482,9 @@ packages: resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} engines: {node: '>=0.10.0'} + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -5870,6 +6645,9 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -5882,6 +6660,10 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + is-obj@2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} @@ -5897,6 +6679,10 @@ packages: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} @@ -5993,6 +6779,11 @@ packages: resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} engines: {node: 20 || >=22} + jake@10.9.4: + resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} + engines: {node: '>=10'} + hasBin: true + jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6183,6 +6974,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -6191,11 +6985,18 @@ packages: engines: {node: '>=6'} hasBin: true + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonpath-plus@10.3.0: resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} engines: {node: '>=18.0.0'} hasBin: true + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + jsonwebtoken@9.0.2: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} engines: {node: '>=12', npm: '>=6'} @@ -6444,6 +7245,9 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + magic-string@0.30.19: resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} @@ -6654,6 +7458,10 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} + engines: {node: '>=10'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -6749,6 +7557,9 @@ packages: node-releases@2.0.26: resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} + node-releases@2.0.37: + resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + nodemailer@7.0.10: resolution: {integrity: sha512-Us/Se1WtT0ylXgNFfyFSx4LElllVLJXQjWi2Xz17xWw7amDKO2MLtFnVp1WACy7GkVGs+oBlRopVNUzlrGSw1w==} engines: {node: '>=6.0.0'} @@ -7109,6 +7920,14 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -7288,6 +8107,9 @@ packages: raf@3.4.1: resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -7487,6 +8309,13 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} @@ -7494,6 +8323,17 @@ packages: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} + regexpu-core@6.4.0: + resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.13.0: + resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} + hasBin: true + rehype-format@5.0.1: resolution: {integrity: sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==} @@ -7525,6 +8365,10 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -7604,6 +8448,11 @@ packages: rollup: optional: true + rollup@2.80.0: + resolution: {integrity: sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==} + engines: {node: '>=10.0.0'} + hasBin: true + rollup@4.52.5: resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -7670,6 +8519,9 @@ packages: engines: {node: '>=10'} hasBin: true + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} @@ -7692,6 +8544,10 @@ packages: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -7754,6 +8610,10 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + smob@1.6.1: + resolution: {integrity: sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==} + engines: {node: '>=20.0.0'} + socks-proxy-agent@8.0.5: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} @@ -7778,6 +8638,9 @@ packages: source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -7786,6 +8649,15 @@ packages: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -7899,6 +8771,10 @@ packages: stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -7911,6 +8787,10 @@ packages: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} + strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -8007,10 +8887,23 @@ packages: resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==} engines: {node: '>=14'} + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + terminal-link@2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} + terser@5.46.1: + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} + engines: {node: '>=10'} + hasBin: true + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -8078,6 +8971,9 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} @@ -8196,6 +9092,10 @@ packages: resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} engines: {node: '>=4'} + type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -8259,9 +9159,29 @@ packages: unenv@2.0.0-rc.21: resolution: {integrity: sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==} + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.2.0: + resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} + engines: {node: '>=4'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + unist-builder@4.0.0: resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==} @@ -8287,6 +9207,14 @@ packages: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + upath@2.0.1: resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} engines: {node: '>=4'} @@ -8297,6 +9225,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -8401,6 +9335,18 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + vite-plugin-pwa@1.2.0: + resolution: {integrity: sha512-a2xld+SJshT9Lgcv8Ji4+srFJL4k/1bVbd1x06JIkvecpQkwkvCncD1+gSzcdm3s+owWLpMJerG3aN5jupJEVw==} + engines: {node: '>=16.0.0'} + 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 + vite-tsconfig-paths@5.1.4: resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: @@ -8541,6 +9487,9 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -8548,6 +9497,7 @@ packages: whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} @@ -8560,6 +9510,9 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -8590,6 +9543,55 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + workbox-background-sync@7.4.0: + resolution: {integrity: sha512-8CB9OxKAgKZKyNMwfGZ1XESx89GryWTfI+V5yEj8sHjFH8MFelUwYXEyldEK6M6oKMmn807GoJFUEA1sC4XS9w==} + + workbox-broadcast-update@7.4.0: + resolution: {integrity: sha512-+eZQwoktlvo62cI0b+QBr40v5XjighxPq3Fzo9AWMiAosmpG5gxRHgTbGGhaJv/q/MFVxwFNGh/UwHZ/8K88lA==} + + workbox-build@7.4.0: + resolution: {integrity: sha512-Ntk1pWb0caOFIvwz/hfgrov/OJ45wPEhI5PbTywQcYjyZiVhT3UrwwUPl6TRYbTm4moaFYithYnl1lvZ8UjxcA==} + engines: {node: '>=20.0.0'} + + workbox-cacheable-response@7.4.0: + resolution: {integrity: sha512-0Fb8795zg/x23ISFkAc7lbWes6vbw34DGFIMw31cwuHPgDEC/5EYm6m/ZkylLX0EnEbbOyOCLjKgFS/Z5g0HeQ==} + + workbox-core@7.4.0: + resolution: {integrity: sha512-6BMfd8tYEnN4baG4emG9U0hdXM4gGuDU3ectXuVHnj71vwxTFI7WOpQJC4siTOlVtGqCUtj0ZQNsrvi6kZZTAQ==} + + workbox-expiration@7.4.0: + resolution: {integrity: sha512-V50p4BxYhtA80eOvulu8xVfPBgZbkxJ1Jr8UUn0rvqjGhLDqKNtfrDfjJKnLz2U8fO2xGQJTx/SKXNTzHOjnHw==} + + workbox-google-analytics@7.4.0: + resolution: {integrity: sha512-MVPXQslRF6YHkzGoFw1A4GIB8GrKym/A5+jYDUSL+AeJw4ytQGrozYdiZqUW1TPQHW8isBCBtyFJergUXyNoWQ==} + + workbox-navigation-preload@7.4.0: + resolution: {integrity: sha512-etzftSgdQfjMcfPgbfaZCfM2QuR1P+4o8uCA2s4rf3chtKTq/Om7g/qvEOcZkG6v7JZOSOxVYQiOu6PbAZgU6w==} + + workbox-precaching@7.4.0: + resolution: {integrity: sha512-VQs37T6jDqf1rTxUJZXRl3yjZMf5JX/vDPhmx2CPgDDKXATzEoqyRqhYnRoxl6Kr0rqaQlp32i9rtG5zTzIlNg==} + + workbox-range-requests@7.4.0: + resolution: {integrity: sha512-3Vq854ZNuP6Y0KZOQWLaLC9FfM7ZaE+iuQl4VhADXybwzr4z/sMmnLgTeUZLq5PaDlcJBxYXQ3U91V7dwAIfvw==} + + workbox-recipes@7.4.0: + resolution: {integrity: sha512-kOkWvsAn4H8GvAkwfJTbwINdv4voFoiE9hbezgB1sb/0NLyTG4rE7l6LvS8lLk5QIRIto+DjXLuAuG3Vmt3cxQ==} + + workbox-routing@7.4.0: + resolution: {integrity: sha512-C/ooj5uBWYAhAqwmU8HYQJdOjjDKBp9MzTQ+otpMmd+q0eF59K+NuXUek34wbL0RFrIXe/KKT+tUWcZcBqxbHQ==} + + workbox-strategies@7.4.0: + resolution: {integrity: sha512-T4hVqIi5A4mHi92+5EppMX3cLaVywDp8nsyUgJhOZxcfSV/eQofcOA6/EMo5rnTNmNTpw0rUgjAI6LaVullPpg==} + + workbox-streams@7.4.0: + resolution: {integrity: sha512-QHPBQrey7hQbnTs5GrEVoWz7RhHJXnPT+12qqWM378orDMo5VMJLCkCM1cnCk+8Eq92lccx/VgRZ7WAzZWbSLg==} + + workbox-sw@7.4.0: + resolution: {integrity: sha512-ltU+Kr3qWR6BtbdlMnCjobZKzeV1hN+S6UvDywBrwM19TTyqA03X66dzw1tEIdJvQ4lYKkBFox6IAEhoSEZ8Xw==} + + workbox-window@7.4.0: + resolution: {integrity: sha512-/bIYdBLAVsNR3v7gYGaV4pQW3M3kEPx5E8vDxGvxo6khTrGtSSCS7QiFKv9ogzBgZiy0OXLP9zO28U/1nF1mfw==} + workerd@1.20251011.0: resolution: {integrity: sha512-Dq35TLPEJAw7BuYQMkN3p9rge34zWMU2Gnd4DSJFeVqld4+DAO2aPG7+We2dNIAyM97S8Y9BmHulbQ00E0HC7Q==} engines: {node: '>=16'} @@ -8747,6 +9749,12 @@ snapshots: package-manager-detector: 1.5.0 tinyexec: 1.0.2 + '@apideck/better-ajv-errors@0.3.7(ajv@8.18.0)': + dependencies: + ajv: 8.18.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 @@ -9265,8 +10273,16 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.28.4': {} + '@babel/compat-data@7.29.0': {} + '@babel/core@7.28.4': dependencies: '@babel/code-frame': 7.27.1 @@ -9295,6 +10311,18 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.29.0 + '@babel/helper-compilation-targets@7.27.2': dependencies: '@babel/compat-data': 7.28.4 @@ -9303,8 +10331,54 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@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.28.6(@babel/core@7.28.4) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.29.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.4.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + debug: 4.4.3 + lodash.debounce: 4.0.8 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + '@babel/helper-globals@7.28.0': {} + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.28.4 @@ -9312,6 +10386,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -9321,14 +10402,64 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.29.0 + '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-wrap-function@7.28.6': + dependencies: + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 @@ -9338,6 +10469,49 @@ snapshots: dependencies: '@babel/types': 7.28.4 + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -9358,11 +10532,21 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -9423,6 +10607,278 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.4) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/template': 7.28.6 + + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -9433,6 +10889,156 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.4) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/preset-env@7.29.2(@babel/core@7.28.4)': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/core': 7.28.4 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.4) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.28.4) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.4) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.28.4) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.28.4) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.28.4) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.28.4) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.28.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.4) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.28.4) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.28.4) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.28.4) + core-js-compat: 3.49.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/types': 7.29.0 + esutils: 2.0.3 + '@babel/runtime@7.28.4': {} '@babel/template@7.27.2': @@ -9441,6 +11047,12 @@ snapshots: '@babel/parser': 7.28.4 '@babel/types': 7.28.4 + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@babel/traverse@7.28.4': dependencies: '@babel/code-frame': 7.27.1 @@ -9453,11 +11065,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@bcoe/v8-coverage@0.2.3': {} '@biomejs/biome@2.2.5': @@ -9606,7 +11235,7 @@ snapshots: optionalDependencies: workerd: 1.20251011.0 - '@cloudflare/vite-plugin@1.13.14(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6))(workerd@1.20251011.0)(wrangler@4.44.0)': + '@cloudflare/vite-plugin@1.13.14(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6))(workerd@1.20251011.0)(wrangler@4.44.0)': dependencies: '@cloudflare/unenv-preset': 2.7.8(unenv@2.0.0-rc.21)(workerd@1.20251011.0) '@remix-run/node-fetch-server': 0.8.1 @@ -9615,7 +11244,7 @@ snapshots: picocolors: 1.1.1 tinyglobby: 0.2.15 unenv: 2.0.0-rc.21 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) wrangler: 4.44.0 ws: 8.18.0 transitivePeerDependencies: @@ -9760,6 +11389,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.9.2': + dependencies: + tslib: 2.8.1 + optional: true + '@emoji-mart/data@1.2.1': {} '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.25.11)': @@ -10113,81 +11747,177 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@img/colour@1.1.0': {} + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 optional: true + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + '@img/sharp-darwin-x64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.0.4 optional: true + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + '@img/sharp-libvips-darwin-arm64@1.0.4': optional: true + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + '@img/sharp-libvips-darwin-x64@1.0.4': optional: true + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + '@img/sharp-libvips-linux-arm64@1.0.4': optional: true + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + '@img/sharp-libvips-linux-arm@1.0.5': optional: true + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + '@img/sharp-libvips-linux-s390x@1.0.4': optional: true + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + '@img/sharp-libvips-linux-x64@1.0.4': optional: true + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': optional: true + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + '@img/sharp-libvips-linuxmusl-x64@1.0.4': optional: true + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + '@img/sharp-linux-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.0.4 optional: true + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + '@img/sharp-linux-arm@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.0.5 optional: true + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + '@img/sharp-linux-s390x@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.0.4 optional: true + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + '@img/sharp-linux-x64@0.33.5': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.0.4 optional: true + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + '@img/sharp-linuxmusl-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 optional: true + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + '@img/sharp-linuxmusl-x64@0.33.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.0.4 optional: true + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + '@img/sharp-wasm32@0.33.5': dependencies: '@emnapi/runtime': 1.6.0 optional: true + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.9.2 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + '@img/sharp-win32-ia32@0.33.5': optional: true + '@img/sharp-win32-ia32@0.34.5': + optional: true + '@img/sharp-win32-x64@0.33.5': optional: true + '@img/sharp-win32-x64@0.34.5': + optional: true + '@inquirer/external-editor@1.0.2(@types/node@20.19.23)': dependencies: chardet: 2.1.1 @@ -10421,6 +12151,11 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.31': @@ -12157,6 +13892,56 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.27': {} + '@rollup/plugin-babel@5.3.1(@babel/core@7.28.4)(@types/babel__core@7.20.5)(rollup@2.80.0)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.28.6 + '@rollup/pluginutils': 3.1.0(rollup@2.80.0) + rollup: 2.80.0 + optionalDependencies: + '@types/babel__core': 7.20.5 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-node-resolve@15.3.1(rollup@2.80.0)': + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@2.80.0) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.11 + optionalDependencies: + rollup: 2.80.0 + + '@rollup/plugin-replace@2.4.2(rollup@2.80.0)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.80.0) + magic-string: 0.25.9 + rollup: 2.80.0 + + '@rollup/plugin-terser@0.4.4(rollup@2.80.0)': + dependencies: + serialize-javascript: 6.0.2 + smob: 1.6.1 + terser: 5.46.1 + optionalDependencies: + rollup: 2.80.0 + + '@rollup/pluginutils@3.1.0(rollup@2.80.0)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.80.0 + + '@rollup/pluginutils@5.3.0(rollup@2.80.0)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 2.80.0 + '@rollup/rollup-android-arm-eabi@4.52.5': optional: true @@ -12706,6 +14491,13 @@ snapshots: - bufferutil - utf-8-validate + '@surma/rollup-plugin-off-main-thread@2.2.3': + dependencies: + ejs: 3.1.10 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.12 + '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 @@ -12785,12 +14577,12 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.15 '@tailwindcss/oxide-win32-x64-msvc': 4.1.15 - '@tailwindcss/vite@4.1.15(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6))': + '@tailwindcss/vite@4.1.15(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6))': dependencies: '@tailwindcss/node': 4.1.15 '@tailwindcss/oxide': 4.1.15 tailwindcss: 4.1.15 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) '@tanstack/query-core@5.90.5': {} @@ -12801,7 +14593,7 @@ snapshots: '@testing-library/dom@10.4.1': dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 '@babel/runtime': 7.28.4 '@types/aria-query': 5.0.4 aria-query: 5.3.0 @@ -12995,6 +14787,8 @@ snapshots: dependencies: '@types/estree': 1.0.8 + '@types/estree@0.0.39': {} + '@types/estree@1.0.8': {} '@types/graceful-fs@4.1.9': @@ -13102,6 +14896,12 @@ snapshots: '@types/tough-cookie': 4.0.5 form-data: 4.0.4 + '@types/resolve@1.20.2': {} + + '@types/sharp@0.32.0': + dependencies: + sharp: 0.34.5 + '@types/sinon@17.0.4': dependencies: '@types/sinonjs__fake-timers': 15.0.1 @@ -13112,8 +14912,7 @@ snapshots: '@types/tough-cookie@4.0.5': {} - '@types/trusted-types@2.0.7': - optional: true + '@types/trusted-types@2.0.7': {} '@types/unist@2.0.11': {} @@ -13347,7 +15146,7 @@ snapshots: '@virtuoso.dev/urx@0.2.13': {} - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6))': + '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) @@ -13355,7 +15154,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) transitivePeerDependencies: - supports-color @@ -13376,21 +15175,21 @@ snapshots: chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6))': + '@vitest/mocker@3.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) - '@vitest/mocker@4.0.8(vite@6.4.1(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6))': + '@vitest/mocker@4.0.8(vite@6.4.1(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6))': dependencies: '@vitest/spy': 4.0.8 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 6.4.1(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) + vite: 6.4.1(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) '@vitest/pretty-format@3.2.4': dependencies: @@ -13438,7 +15237,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.8(@types/debug@4.1.12)(@types/node@20.19.23)(@vitest/ui@4.0.8)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@20.0.3)(lightningcss@1.30.2)(tsx@4.20.6) + vitest: 4.0.8(@types/debug@4.1.12)(@types/node@20.19.23)(@vitest/ui@4.0.8)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@20.0.3)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) '@vitest/utils@3.2.4': dependencies: @@ -13508,6 +15307,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -13622,8 +15428,12 @@ snapshots: dependencies: retry: 0.12.0 + async@3.2.6: {} + asynckit@0.4.0: {} + at-least-node@1.0.0: {} + atomic-sleep@1.0.0: {} attr-accept@2.2.5: {} @@ -13676,6 +15486,30 @@ snapshots: '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.28.4): + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.28.4) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.28.4) + core-js-compat: 3.49.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color + babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.4): dependencies: '@babel/core': 7.28.4 @@ -13710,6 +15544,8 @@ snapshots: base64-js@1.5.1: {} + baseline-browser-mapping@2.10.13: {} + baseline-browser-mapping@2.8.19: {} basic-ftp@5.0.5: {} @@ -13747,6 +15583,14 @@ snapshots: node-releases: 2.0.26 update-browserslist-db: 1.1.3(browserslist@4.26.3) + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.13 + caniuse-lite: 1.0.30001784 + electron-to-chromium: 1.5.331 + node-releases: 2.0.37 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -13791,6 +15635,8 @@ snapshots: caniuse-lite@1.0.30001751: {} + caniuse-lite@1.0.30001784: {} + canvg@3.0.11: dependencies: '@babel/runtime': 7.28.4 @@ -13899,6 +15745,10 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@2.20.3: {} + + common-tags@1.8.2: {} + concat-map@0.0.1: {} concat-stream@2.0.0: @@ -13912,6 +15762,10 @@ snapshots: cookie@1.0.2: {} + core-js-compat@3.49.0: + dependencies: + browserslist: 4.28.2 + core-js@3.46.0: optional: true @@ -13947,6 +15801,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + crypto-random-string@2.0.0: {} + crypto-randomuuid@1.0.0: {} css-line-break@2.1.0: @@ -14182,8 +16038,14 @@ snapshots: ee-first@1.1.1: {} + ejs@3.1.10: + dependencies: + jake: 10.9.4 + electron-to-chromium@1.5.237: {} + electron-to-chromium@1.5.331: {} + emittery@0.13.1: {} emoji-mart@5.6.0: {} @@ -14481,6 +16343,10 @@ snapshots: estree-util-is-identifier-name@3.0.0: {} + estree-walker@1.0.1: {} + + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 @@ -14545,6 +16411,8 @@ snapshots: iobuffer: 5.4.0 pako: 2.1.0 + fast-uri@3.1.0: {} + fast-xml-parser@4.5.3: dependencies: strnum: 1.1.2 @@ -14584,6 +16452,10 @@ snapshots: dependencies: tslib: 2.8.1 + filelist@1.0.6: + dependencies: + minimatch: 5.1.9 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -14632,6 +16504,13 @@ snapshots: dependencies: fetch-blob: 3.2.0 + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -14708,6 +16587,8 @@ snapshots: get-nonce@1.0.1: {} + get-own-enumerable-property-symbols@3.0.2: {} + get-package-type@0.1.0: {} get-port@7.1.0: {} @@ -15152,6 +17033,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + idb@7.1.1: {} + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -15323,6 +17206,8 @@ snapshots: is-map@2.0.3: {} + is-module@1.0.0: {} + is-negative-zero@2.0.3: {} is-number-object@1.1.1: @@ -15332,6 +17217,8 @@ snapshots: is-number@7.0.0: {} + is-obj@1.0.1: {} + is-obj@2.0.0: {} is-plain-obj@4.1.0: {} @@ -15345,6 +17232,8 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + is-regexp@1.0.0: {} + is-set@2.0.3: {} is-shared-array-buffer@1.0.4: @@ -15457,6 +17346,12 @@ snapshots: dependencies: '@isaacs/cliui': 8.0.2 + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.6 + picocolors: 1.1.1 + jest-changed-files@29.7.0: dependencies: execa: 5.1.1 @@ -15850,16 +17745,26 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsonpath-plus@10.3.0: dependencies: '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) jsep: 1.4.0 + jsonpointer@5.0.1: {} + jsonwebtoken@9.0.2: dependencies: jws: 3.2.2 @@ -16084,6 +17989,10 @@ snapshots: lz-string@1.5.0: {} + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -16512,6 +18421,10 @@ snapshots: dependencies: brace-expansion: 1.1.12 + minimatch@5.1.9: + dependencies: + brace-expansion: 2.0.2 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 @@ -16588,6 +18501,8 @@ snapshots: node-releases@2.0.26: {} + node-releases@2.0.37: {} + nodemailer@7.0.10: {} normalize-path@3.0.0: {} @@ -16897,6 +18812,10 @@ snapshots: prettier@3.6.2: {} + pretty-bytes@5.6.0: {} + + pretty-bytes@6.1.1: {} + pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 @@ -17120,6 +19039,10 @@ snapshots: performance-now: 2.1.0 optional: true + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -17430,6 +19353,12 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 + regenerate-unicode-properties@10.2.2: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + regenerator-runtime@0.13.11: optional: true @@ -17442,6 +19371,21 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 + regexpu-core@6.4.0: + 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 + + regjsgen@0.8.0: {} + + regjsparser@0.13.0: + dependencies: + jsesc: 3.1.0 + rehype-format@5.0.1: dependencies: '@types/hast': 3.0.4 @@ -17508,6 +19452,8 @@ snapshots: require-directory@2.1.1: {} + require-from-string@2.0.2: {} + requires-port@1.0.0: {} resolve-cwd@3.0.0: @@ -17570,14 +19516,18 @@ snapshots: dependencies: glob: 10.4.5 - rollup-plugin-visualizer@5.14.0(rollup@4.52.5): + rollup-plugin-visualizer@5.14.0(rollup@2.80.0): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rollup: 4.52.5 + rollup: 2.80.0 + + rollup@2.80.0: + optionalDependencies: + fsevents: 2.3.3 rollup@4.52.5: dependencies: @@ -17662,6 +19612,10 @@ snapshots: semver@7.7.3: {} + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + set-cookie-parser@2.7.1: {} set-function-length@1.2.2: @@ -17714,6 +19668,37 @@ snapshots: '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 + sharp@0.34.5: + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -17789,6 +19774,8 @@ snapshots: smart-buffer@4.2.0: {} + smob@1.6.1: {} + socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.4 @@ -17818,10 +19805,21 @@ snapshots: buffer-from: 1.1.2 source-map: 0.6.1 + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map@0.6.1: {} source-map@0.7.6: {} + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + sourcemap-codec@1.4.8: {} + space-separated-tokens@2.0.2: {} spark-md5@3.0.2: {} @@ -17991,6 +19989,12 @@ snapshots: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -18001,6 +20005,8 @@ snapshots: strip-bom@4.0.0: {} + strip-comments@2.0.1: {} + strip-final-newline@2.0.0: {} strip-indent@3.0.0: @@ -18089,11 +20095,27 @@ snapshots: - encoding - supports-color + temp-dir@2.0.0: {} + + tempy@0.6.0: + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + terminal-link@2.1.1: dependencies: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 + terser@5.46.1: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.15.0 + commander: 2.20.3 + source-map-support: 0.5.21 + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -18151,6 +20173,10 @@ snapshots: tr46@0.0.3: {} + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + tr46@3.0.0: dependencies: punycode: 2.3.1 @@ -18266,6 +20292,8 @@ snapshots: type-detect@4.1.0: {} + type-fest@0.16.0: {} + type-fest@0.21.3: {} type-fest@4.41.0: {} @@ -18346,6 +20374,17 @@ snapshots: pathe: 2.0.3 ufo: 1.6.1 + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.2.0 + + unicode-match-property-value-ecmascript@2.2.1: {} + + unicode-property-aliases-ecmascript@2.2.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -18356,6 +20395,10 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 + unist-builder@4.0.0: dependencies: '@types/unist': 3.0.3 @@ -18390,6 +20433,10 @@ snapshots: universalify@0.2.0: {} + universalify@2.0.1: {} + + upath@1.2.0: {} + upath@2.0.1: {} update-browserslist-db@1.1.3(browserslist@4.26.3): @@ -18398,6 +20445,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -18485,13 +20538,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@3.2.4(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6): + vite-node@3.2.4(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) transitivePeerDependencies: - '@types/node' - jiti @@ -18506,18 +20559,29 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)): + vite-plugin-pwa@1.2.0(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0): + dependencies: + debug: 4.4.3 + pretty-bytes: 6.1.1 + tinyglobby: 0.2.15 + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) + workbox-build: 7.4.0(@types/babel__core@7.20.5) + workbox-window: 7.4.0 + transitivePeerDependencies: + - supports-color + + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) transitivePeerDependencies: - supports-color - typescript - vite@6.4.1(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6): + vite@6.4.1(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -18530,9 +20594,10 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 + terser: 5.46.1 tsx: 4.20.6 - vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6): + vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -18545,13 +20610,14 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.30.2 + terser: 5.46.1 tsx: 4.20.6 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@20.0.3)(lightningcss@1.30.2)(tsx@4.20.6): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@20.0.3)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)) + '@vitest/mocker': 3.2.4(vite@6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -18569,8 +20635,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) - vite-node: 3.2.4(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) + vite: 6.4.1(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) + vite-node: 3.2.4(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -18591,10 +20657,10 @@ snapshots: - tsx - yaml - vitest@4.0.8(@types/debug@4.1.12)(@types/node@20.19.23)(@vitest/ui@4.0.8)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@20.0.3)(lightningcss@1.30.2)(tsx@4.20.6): + vitest@4.0.8(@types/debug@4.1.12)(@types/node@20.19.23)(@vitest/ui@4.0.8)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@20.0.3)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6): dependencies: '@vitest/expect': 4.0.8 - '@vitest/mocker': 4.0.8(vite@6.4.1(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6)) + '@vitest/mocker': 4.0.8(vite@6.4.1(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6)) '@vitest/pretty-format': 4.0.8 '@vitest/runner': 4.0.8 '@vitest/snapshot': 4.0.8 @@ -18611,7 +20677,7 @@ snapshots: tinyexec: 0.3.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 6.4.1(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.6) + vite: 6.4.1(@types/node@20.19.23)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -18659,6 +20725,8 @@ snapshots: webidl-conversions@3.0.1: {} + webidl-conversions@4.0.2: {} + webidl-conversions@7.0.0: {} whatwg-encoding@2.0.0: @@ -18677,6 +20745,12 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -18729,6 +20803,119 @@ snapshots: word-wrap@1.2.5: {} + workbox-background-sync@7.4.0: + dependencies: + idb: 7.1.1 + workbox-core: 7.4.0 + + workbox-broadcast-update@7.4.0: + dependencies: + workbox-core: 7.4.0 + + workbox-build@7.4.0(@types/babel__core@7.20.5): + dependencies: + '@apideck/better-ajv-errors': 0.3.7(ajv@8.18.0) + '@babel/core': 7.28.4 + '@babel/preset-env': 7.29.2(@babel/core@7.28.4) + '@babel/runtime': 7.28.4 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.4)(@types/babel__core@7.20.5)(rollup@2.80.0) + '@rollup/plugin-node-resolve': 15.3.1(rollup@2.80.0) + '@rollup/plugin-replace': 2.4.2(rollup@2.80.0) + '@rollup/plugin-terser': 0.4.4(rollup@2.80.0) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.18.0 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 11.0.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.80.0 + 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 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + + workbox-cacheable-response@7.4.0: + dependencies: + workbox-core: 7.4.0 + + workbox-core@7.4.0: {} + + workbox-expiration@7.4.0: + dependencies: + idb: 7.1.1 + workbox-core: 7.4.0 + + workbox-google-analytics@7.4.0: + dependencies: + workbox-background-sync: 7.4.0 + workbox-core: 7.4.0 + workbox-routing: 7.4.0 + workbox-strategies: 7.4.0 + + workbox-navigation-preload@7.4.0: + dependencies: + workbox-core: 7.4.0 + + workbox-precaching@7.4.0: + dependencies: + workbox-core: 7.4.0 + workbox-routing: 7.4.0 + workbox-strategies: 7.4.0 + + workbox-range-requests@7.4.0: + dependencies: + workbox-core: 7.4.0 + + workbox-recipes@7.4.0: + 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 + + workbox-routing@7.4.0: + dependencies: + workbox-core: 7.4.0 + + workbox-strategies@7.4.0: + dependencies: + workbox-core: 7.4.0 + + workbox-streams@7.4.0: + dependencies: + workbox-core: 7.4.0 + workbox-routing: 7.4.0 + + workbox-sw@7.4.0: {} + + workbox-window@7.4.0: + dependencies: + '@types/trusted-types': 2.0.7 + workbox-core: 7.4.0 + workerd@1.20251011.0: optionalDependencies: '@cloudflare/workerd-darwin-64': 1.20251011.0 From 6d5f78aecf499390a93d68e5773cf599cb803d98 Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 19:01:21 +0200 Subject: [PATCH 04/43] feat(pwa): add icon generation script and generated PWA icons --- .../pwa-icons/apple-touch-icon-180x180.png | Bin 0 -> 12129 bytes apps/main/public/pwa-icons/favicon-16x16.png | Bin 0 -> 600 bytes apps/main/public/pwa-icons/favicon-32x32.png | Bin 0 -> 1498 bytes apps/main/public/pwa-icons/pwa-192x192.png | Bin 0 -> 14062 bytes .../public/pwa-icons/pwa-512x512-maskable.png | Bin 0 -> 68132 bytes apps/main/public/pwa-icons/pwa-512x512.png | Bin 0 -> 72004 bytes apps/main/scripts/generate-pwa-icons.ts | 74 ++++++++++++++++++ 7 files changed, 74 insertions(+) create mode 100644 apps/main/public/pwa-icons/apple-touch-icon-180x180.png create mode 100644 apps/main/public/pwa-icons/favicon-16x16.png create mode 100644 apps/main/public/pwa-icons/favicon-32x32.png create mode 100644 apps/main/public/pwa-icons/pwa-192x192.png create mode 100644 apps/main/public/pwa-icons/pwa-512x512-maskable.png create mode 100644 apps/main/public/pwa-icons/pwa-512x512.png create mode 100644 apps/main/scripts/generate-pwa-icons.ts diff --git a/apps/main/public/pwa-icons/apple-touch-icon-180x180.png b/apps/main/public/pwa-icons/apple-touch-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..78da98fd5613202f0c6b0192c93ec2f1824261f7 GIT binary patch literal 12129 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 b9$uD*0*27-=(1il^9Ud0)#a*X%!2<1+mk6} literal 0 HcmV?d00001 diff --git a/apps/main/public/pwa-icons/favicon-16x16.png b/apps/main/public/pwa-icons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..2f3428da3e189821e899382d34394e07d02b1fbe GIT binary patch literal 600 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

-r974d$9<5>=B`2WYWmlw(!te`%P{E`bS?9_ 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 H4FmoM8sb{* literal 0 HcmV?d00001 diff --git a/apps/main/public/pwa-icons/pwa-512x512-maskable.png b/apps/main/public/pwa-icons/pwa-512x512-maskable.png new file mode 100644 index 0000000000000000000000000000000000000000..72b0e393cf9d729c729b4a54ba2a97446553c67c GIT binary patch literal 68132 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 literal 0 HcmV?d00001 diff --git a/apps/main/public/pwa-icons/pwa-512x512.png b/apps/main/public/pwa-icons/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..b618acf711a600bb43b66daad5e14f1f6e66be33 GIT binary patch literal 72004 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

    f|n+=pEjm}a$8k!ISI2H+HJtA5v4)cq2 z%>{~t(V&Z+&!6HoVSziM1&r|S2AdGHoY#S&Lvn-G^u>r_;B`E@kLh8N_aUcgyZ)a~8>v^TF@m<@Ufhp`g3H-EpT0N7>q3#O`CseRV9Kfr z)~FTgPpna-slAwH;{8EEm`T0(a<+*@95dhYj?hyBypY4HyoTj7q_KI0lL{t+95W|s zHYI=w6?8q5Kxj@nrV%2TOVh%a__Ym`%w!k=UnH<^Fr<*(2uQuQF zc2$_$G}@WFo9wwDuD=8Ai^LL&Dw)tT3cu%M8SZh35uDGXD^WrzJyy28CH_58E>srm zqj58I&PoZm4afBPf|3^Cn=Gb!B)dL8O*MNA$JLDqY9|F{;`e3sioZk~!U07@GJJqy zsA(8=p)=1H?o!touB{~NSR#?f%K;FqwZF#HJz2w-gd@=f7`1#Ad#7>#i`Vew#`Bfu zvsAvdhv9y-agi3+S&Fki`vhWdP)FYt*FMjx_MNTaaY45;mw_BEm**Jq7nxq_HjBTe z3MOA7Vwhrxl2%|?=dAan&cJ|4C!SIwucanAMLUzITNdJvK~6zi6+D$dV<8KF;bS!U zC167VTQf3D!Y_>#9yCCjz0kQ-elia&eob<)yoeX>Yq+ov6-||+i04P^VGJ`%r!*_! z4=ULO6l`DRFzRan!E<}X%G$w+gItFNU{h`**m3m1bX`2SQyq=_C`b&5W<;H zB~{b^%^bz@Iba(Kz#AUK^OitHyo#k1#a; zaOt@0i%!`0tJ}W#=E0(>5)E)n4K8(oD@H$u=$b-NI8GjM}1SlgmK$9 zy6Sp*`b5X^g$=)s(cWOebWd#4zDhN0b*BPqs>G-{OSrU#;G_EtjH65k+a9Ms^OamOW=%2%@ zDi14czY$}>y<}DpSS-CO&7JGgYa5Gk^C3GRuRi=KW8&9@i6=UTmbB~_0*SxZ9kzeXaAO$&;MK< z<>q?-d$hP0c@B8n=Hpv^4n8+?V7Nv}~4Lnnjo?f;sIj5E=C6Yx|> zK}4pqxDr8_<|9G5;DY|UD$dwsn_^aO2jYa({5i2)+`zbti6eV1mFPK~B+|Lj6rQ|+z3!(!8*KA5>I(KA;KWfe%{ z3AoSRSN*CooM+zgg#mz@#E^4n3iJ5Glzl%ce@}rHNapNNZ1hJjh`1&>I9j{smZ2N zVJQbKFjm8o!kHEZGL~h)8Pj{A->J6A$r3Fwhz0P{GgXsyse)rUij4wZ6zet08Z=fB zHhcbCG)_n$ro}+E*7L+QKZJJ$Ho9`E=ysO!q2*vi?E^_=IN&il!1K$8ci64T17LvB zg9&Kb8MNYS=lT4MnyBk7(}!1J?*7DG*1Xw8GJvnbpHm?}Q>&JQiwcK5Z`j(D&c1)G z((69-2TIE5^A+7EPIU6NIzDk@gM14|r?Xg~<`hxv=ytMSRdHHjf~ukhU2OHg(LDfR zAR%5$OG0|9lV{X5!xg`5K{PYS0m2=A9%o!#-*V+lx#hL>so0jaqxQaJcz&siTrBg$ z0U`HT4zJU=k&44#O9yJb+!eFcDXI?58^DBNCH3b+KYlJ9fGw(n8-c9#TGULGv`K3U3Lta2m4uU>& z!u>pGq{}uziBg8Kmf13Ql5)CHs<3s%#R`S9JdCjT7&?`KV7pFR4>cZIPV5R*+axm+ zaM9#^;1SIC7cx&cZ2bngzj4gc(=gzIYe$+2WKHD*t&dtk1LQteSx&Ebb{$_5%cgGk z{yS|u-Fnmsr|=;aX%cB0De+b0!d`I6)R$YzZUk0h0$fkwn1;( zJ{;l>lu-K=>n;WW0K=mRx27yFFNQZq+v1Xk=Tr5J}(HQy4P2WasX?w)Fg-$tESSr@NUs~)k`&=~s)!4OOCxMmlV4)l} z-9~?!h6c?#hR)%&am)>4AdfbDn$3tM?OJMo!DqY;o+yTC#qY|Y=A^jy~3 z!yWF%SCs6G!(CRWNDY?H5zY|HdF>w|Ib;!N-E2~2=A zi@=lpq8NZ>=LyPSw2hHZ!g_xo{66t%;b zQ;vMTQgb}QoktEX$S+Ugy3rEk$LUfHwcI}QCk6+=)X;4GO@NSPL;YbE%9#HN&<)9M z!30Pwatl7R60tss>9-BHKKaM9UXh0)p}rso8?H>Etpu@JRLh*Ydl zW5Km<+bi!ob+~v;6xEuCTzrGaF4uHteq*mPnhHA$Q76JJ8f4;Q{`1)KvXYn|`a&WN3CiukW>2XtZi}W+V~ocwzY4`j z$yL4&&)0tuB09eXZlAt?{fa=551ePe6CIG4vc9b*lE?s20*! z`d}LnL0J?`3?7-n{(L(&5hP$b6?J@XZ&}&`DA4V5F5&kCgTRRL;7!9n-~(;_|Ku?{ z>8BHOA2B%=$sFexH5l54{`|+Svbqhgiawj^fe{Rk*?+yuWcak^n}I*b=j$W#W$=vx z%*v2R{EJ1jS#SecqW5ZcX$ay-Ex*3`mm)i@{c#vOc?V~CAegXA$Fwsi`z(mw8Mn;` z++q$|rrRQ9xb)XUr2&=Fr?I{{2RR&Kt_Wh4$NdPbJYq_rMJI9mHGTk>>+S zc`WtbYWTkKBZfoO`Ou_4GeT?R_yDFh_7A5IxmS01qw<`zL`YH%4DM&hw_RN znSIgpI8jr?2fH<8dt(f=K5`YkpmF*kEDras<~T*Ln<})r|}1a^hGJQ+1TVmeuTScFG@Y;Z&6eo&2Dw4EEC` zmMu8)Hb~V6Q|koE{925DE2eVW8#N2B?hF5uc5!W;j~?ZGQoaJ|Jr?*j$E z4;s-QLSogwyXX|BA*z$*FboZ%N`^bx@t}c)P{PTe=GN}6o_@I6wAsD@0B+j61eL)q ziRBiH`>*@{8JuK(?uJAFW6hWAc}elmkirVHVPAPQ!d_(XCBMQgpC)pa^v;qUe&cC) zKX}0P*K$(jti|Vt{SO_jr+>bt4ViXMY$`Ij!inR0Tch>lSVn*v8tRU2-M6+)fKKo* z2nKK`jD=Q0Cksp!}bWAb3JZ{N^BI2uWKQXglJ0;CcSQ-VZj z+s0Z>DzcyY<@Kt6S&6L4>j6+$cXlxQCk|XD>%J`je~b z>-*1Mqcofi#HTdVp2L4xTEcO@zLxr%^`xzCUr2580@#>ae;2Aoehk78`{TONxmjRM zES;VH)eF{ogOst^%G&k@YUV))@PpAdz?I6pUMholwM2|L=WETLcLD?)#rg;*uPRrw z)$J%PFyy|9NgBs0^|U1J&N2`Km1Itbt{}RndvPIIQ5oCKyqk#^05bZSW1TC*zFA|f z-GR?mCOS2AMTKt5{YR6W`GZly(v`R1rRq5{?Xi3mXm&xK%QA*Y=&`J%^eAhffc;0_ za4b2LPdjFax^u5GfYktLOvCC7xc1ojg*wiYv3nKsvU`;xkBbymUN6whR=f_W_E6Zy+eKdp<9I_|*%j(dL z?mFVKnRvGJd;g?vA35mr!32rD25mX>bu28zSf;k8x=$&liIPwvEY5pN?%1C{7YuO_ACR7mk>HI8p$>oB=kp9O z#cKM8aSMXH2Hc-~eH%`DDWuITU%{^LTq1a*QbRi)xjXC!nSOIWM|hIZl&e7b2mev& zLyL2lA{2F8pFC#g-?RRz4CLw1Hg*Uj?_<$?z20-!|LzlswCi4bCZ7*Y$a`!to+z3A zsoM|ISgT*!7BkqOd?AE7L@X_Nj30lRookB%t$LJZg#h<@+7Bh&ac^+Sw|7MMVnN<%34ofd;NNdnqPH_{8g}kCaB_4LbIfdfUOd8p2K;Zs9aY}agui)EO45J|ACE~UWyZ0s zRGx=)WdNiD1f++$dcFSslwB)xxd8$MqVHfIFM8tH-kzLH8nssdD!Hl2IwwFAqc>P4 z-_B)P0aC`|Y-3uyXnRl@hW-U9nqW;@rrMtE6Uz7SAJ=Y01+R$C%H&WznZWg@eXe54 zpWT)S7o^&Plh`%&DYb|4A((i$IHw8vJj_7F_04|{J8c@HzG;|k zM@MM#>(+0u&-ELVDn}(C#%5(0|L16fw!J+8fMsquyk%s=;-EA}awwQl&Y)rv#Udvg z+-BSUsJC6R2msg1U+8A!63pu!NliQb?nQ*n2X#~dBg~7HiZ#DN06-eA?aVOFd?!+s ziw>le1fCvVV6OR`7drV}%S+g)&PG@i8~AJd-VSe+K=e~=0wuiR#$9;Kvq3{0lB4Ks zAEl$|Y@d!eTEqnX5eC#j4X7tLYagucq$Z5Q<4!3F?EW}6-w(v z&i)&@Z*fMAcSQ5?_}@m@jwy^A*QM4nv4C>_y`p{BW*9Pm3h##+@nC6`AUWMVJtLJK zpi_<^M|xEmksV&V^-YH2>}`&(ql6KpTD{SM!0P&8HvA{3?JbBOcQI9K4syxFmL6bM zOjhp~@hG2^-A=dOtY^Ze?72K=ST`<^%PAhJ8&39F6id@#Pn8|sJi`XQ%1%|Bqdzw5 zY9x%HbeV(zydSy?)Q)Q|fu%)k!~tQ%>3!_uLNv z3%oZWv>}!XV*cD8U@7vjeohy5sdc^jIY7&FSxuNQ1Z*e4lR8y-_a%5BfJgRQ7G65$ z0jC@aOY^4Ik|sA)>;XI7KWl#XdBP&P797X#{B?e;tmXM@Of_H*~~E zUOsp@n!v9CZczHkFpyd@`8SBhL&D$A))LYSz+PH>Hfa$)h_2>@B+L5>ceJ zF(L4#UniGFF#Io}SK2efMd0*6r`XhlX)#fj*jw1$7d3Cnv+tD+2Uc6(X_VlHjBmcw z>OP?8H=YQe{~3ns;zDh5641vG&@+psNHTsrXqesM&!SJTN!8d*FPD_+A{P2WeEH%6 zTSK>IK**TXOoIrKjxptw!T*jS(&T!PS5tt=6|2QHHut-THcWhS-sSG%Z)B7AfwzHb zH*}}{jxE{LlW#@yN)rmI4{=wy4#i*m2nF_aY9AUPL}`5q`JlsZH!rPk*M&p+1@gPB zDCjNV$UsL2b>%WHq&Q+d4U>OcQtRuD7+wT7ysh7Nt``f{LP~H~pwIB{+)pt5wAL+Q zsI-_4cy#4vs`9FOw!GV5-0^Fs`HR9=z2a@$2LY0XQ2y)}C_T{uDu3cf8JA^uj5+}E zL6kA5(OXbscZcV1j``$qdx{fNLpWUhr#Co$Jls$sbbkRWMZm*cuCKWe%znI#LRl8U zlVaja8f_5TlI>HV@7M{WIM9>CWqmh7W|oOPJF)lUspF&6E}D?PoFfupuJlKQ@K|%o ziSjbl{$x77m9RFlsyo;FI$<#%4bcy4@EbDFXrk{TPrm)>%rf9=t;oDGB5aAv5OL-H z*_dnJx!VaW?wfk*fz1mmuuno6gCr-1e|L;kE|kMQw7GlzWv*sGMjZf5fqJK%>%I@} z?k)Q{GT!&()YT@P1-L3JH5su_Zr~~D*eKJD3gZ|2Ow&EGb1HdIifePWot!wrx!B9! z4n0eaM9S-6tAOe+fy5AktWQ=cd@=>ImV>3XlJkY{_SmUzB| z+$gcvNp`bIqjFR=v2xO`N(z68Au%HW@;*rGYXfCt1@)Qj=jj;MKd*Z)Ps`Ept%0zk zDdmr^X!VprUrhI1;hAmzT#uzfL1GrUE-)qhAmVMhM);#vMP%=Ql`jmLHV>VD*J__E zv#s@35s}?|;4k*Itj|_?DE`d?1xx^>nsl1}#?=A#CY;Iqu><~f_3$*mB)LGkb4QQis;+*M71BfD#d1hM=*yoo&RD2zjhhp2r|-qO*jnt z6EGSCm(Me?18M(*-+u%D&Jo(2pbQ{*=X~Me`n!@34H=k_h0Bo=;4tZQu$V5ctm~AC z5my=ya)%R1ID(a#-QL=+&IR|4RMd@>RMEk8Wea-jxs7-1xcZ-v`;_ML{)NvI06H&4 zLs(SuRXXh>9YUTqB!+$NiCCgQM=>5!j6&mtK3;WP;>EEuf*vAlNLp{NJ#WW+o@Y+5 z-tXbdza=+1E?)i)c(#&=W>zCqe#yH=m9uj9K-8CMLUVuGA1MDt!!Djh7O`_+vWTDB zw~<8R7)rNqFoOx3_h&P4st2nbgqbvn7i+l+jRqeRyf)}}$CEsRk{f1bv=CvP$z6>m zK9AQE1En-K(o<1MxWpp1TVb)|+h@6~DS7^3Pp}gK31A(^Fl%bS8R{+TMuo;cljTgD!wPJA zUhj5aE+Gnx6S{}_o2h0VM0tD1mRJFDOC~OF9Lbg zmthJWxG0^p?h`=@QKlv%3uVdo;ih_`(b!H6eP(r}uURMny7_^)U-!LOwduk{O^mKH zopwPK?ySqv%$`*n9FRVAHqhz)yF3iuQZ|VwwxKx5Pl3B&P+Ytkm+nNPVfB6W03RWC zcRkC(DlQSnUoL$-0ep^WD1Gj36Y+^k#ME=#yW;ALdEx6k6D}oID(;v#Y{-iGcD32ehl*_AuK@j#rG+VG$h~Qw>MVA z>&{jcmo3Lz5;(E$=wYpqlr&e^VH8C+5KOX$#D)A6Fk!yYk1bS#xWt-Sn4)p79~A}+ zb78^C(Sn&S8a6B-b|iI74AE-gRY8>`mSK6dx+e9!Ygm9*gES>~P*oS@Tey&iM*aou zVsX!%cu3UIJ~5d@VcDO7#byd5(DIyOMeU&4ZZL+DmEi&7)W51f9^B z8H;;75cCsq<+`&okOq>MZ`QAJjRCk9g=a|*aZUAF6f05?^7g)$$p(KqR^lUMN6^#) z`@^!asSZc6w!H4y;}a9O3LK<(D7FucVjZv`sk3E;8iiNte;E_qhf!me>{EFn-hc65 zdH^7=#S?C9a&rqV>T{J0vC8~zxDNf|4rBk#PmG$?D8DVAhw$9y2e8a!IJv+3-~?wa zX}6%QOuWiC2*|V{V^SB~(Ei~K22(6AnwH)mdq{}^5I-`I$WBOsPUnOD@Xj@~V5eKl zEP0Sl5|lQX?m}ajQd77_lUb;$gt~b{^46Swy;3v`>5n!mYC_$avITG5 zNI1{q9aS9$$Cv@`Y9xJej6Yw=4R}V;^7OiwCu7|7;j-av&c*N7-(=tXdvJMC^_l6_ z+&7N8&Q1r7PetPFkURCT5PTWWfRkx#tI_}hww>TisuedrA<@buG-=v$sbP+QkS z6iyU2Z!9kD{luqEznP1jwlkH>b%;%TM~!EIxi7*%Y)0)S(a2L_Z;8YxGY;RpW9dFH zv9p;j3d^+uWk!@~i1jO!>I8)e@gSxrxJKp$6;i-&3&uN|_y!GSWx9s0k)|{<5}!km z>sb0&>l(}Jb)?;?_Fh&UpAZ z>hh0?(9dNWaaXOuz_qdPIzl$>Nc}oCfA**Iei=#rt*o+F5~=5l!Iim>aB(P}VSPmg zhuU=94%PHWm=1zdkR(dBzpz%+9wH9;7Te#-mykLTR$CDvWWT^_RZz>Ya({UV%Hld* zv@eDv;pORefjZ%VLHN()C(wgKI*Ow~BwU;hX9z7#(;xN8!+}@@PIhn9mGG%%Z9#!P$k(P(c>hoD=_ncK? z*quCcB6l{NvA~0bf+>uoa&hRPW8gZ-i#^9kCKrBwn0rqI+zI1I01w9r<^C~ zlZSD5f&#+gBisIDz+L47g4kl8ad)-UXU-%y6*J)SQb%<`Z`&`lpX9pg4OsRn{+VTc z5pRK3dK7GF@Biejw%%pK-vUzes=UOsC;CF}9ti=EeVoqLNf)$o`Jfo3#LKd{Tn>kx z{{8F`j6-K&vQYMFMVNyh(120Y*bt0U?{&mwOdIZa>zSIH^N+%YA@a0l63*+^u;3XT z()hdaqn1)V3Uz#dYZ~TVNYG#SYpU~jc??=z6lSO2FvyCnl2YH_(u{H5Vo5~s1;R?6;L?(#g@JY@3n=aK4PL%&jPsy_5Z!mYNgJ+>X zgjs&~W4i$hj3S}uTlRLnrqP#mi3JAx!0+E^Y9Q@O?Nc$=mKK6PEY-#+#Yql|xNDAD z-?mYiMLN&oHSsTMHu)ee07MzVu3LpNP;~RZS5p-I4o{3xDZ!3yzv^zCjb1i&lW*Cq$xhx`WE9$7n+Uvr<5s0%O+yk73z7F|L0cohO-A_|9_ zb%?Uko|rKb(R}G1&~2RIarYQg)&+KwiaXY0pW+Rs$D0Yh@`v$axC-8S?F|ppLY|i8 z>dF*6UD(eFSp2-WN0!2eo8>?s^d^pg2x$>-)eI~`Q5h#|DF5+^Lbe29&~=cfb5tU! zJ9Uvc66-A@%)5pw&^9(AU1OHN{Ew6d9oO3uUGIZr{%s4;nN}#Yc$8;WrZHj;K6`q( z7ZpB^`MN=a@SIvyOpA;B?IX(IdtO#RMXGn=G#_?*npDL5sy~)p!Z6)R$0svvEoTRvh8NTXjVD>)yq>2;58h{-L zuAoE+)^dIQ&4>3+MJ3;O60?R4xH#ZnFVDrW9NA!USo^cx{f>=57n7-Bf`~G>hQs>k z>+6xo9}w7qlx-`IlP)3<8OKsM)bgvdi3F5y6Id(7ryq__Z)WP z2(kjR_spDgU2g)24Dp_?4Ua1V1f0cXw)~iYCY}Ae2o=>>DGiApu5*oA8%M$9Y*%S zbWxir)o~Gw)&Mp{1K3(m+BK`wqc8aU7!3S?Z;NI2Hf_wRpcf0Q2I!l;sF{Y*F+`Y!U^X)5$tA8x^;R$@qo>- zh%IJvXpKdiJU5#z-OT2bs?*<2L!1*f$YZeOs@$*wrzJV>c1SEq#Cfihlhc0I(`V>v zkw8~)>1-3u4X*1Kxfjk>!bqYsF&|c=HEAH$Q^O|7$vZuxWV}L!y(gwL*w$sShgWOC z$AP!oyiIsyf<%yOecIR<|0-&Tov_ibdk;mh|B8XnAY%tVOMuwjZeihT?X&t zGY}YEbhS`;LdLeEnszbY!tMT#S4EGoU`~ayE zW^1Qr-21fQdo~~Ijl9GH6J}dNM$QDPLl*5RFJOa3RwZ9GCAmCdTX>J?CN(tL$<`^{ z73ueCUX_R}@dXK38_wc4boi4~vhPiygOKdf;H^fPn1wsqm>+2@zh7W1gd)gXqN7EW z>FOn;zMDVN$ZClu>l0hL?%yOZ(4j8ty_|!V*ZlkT9zHu^qEo-#Fg4M>g^z&tTr@w- z?b8Jg4Sce;)l-*^Mu0LVc&SnPgC6;INUKUJuEIv|Nr4vT2=pDDjP9QG28a0*w=pXP zsQA$a9Ecm6SH_Ly&_`^UIayj~exZaj@TY^*Z4a5f{f6P_)+0iV?jl{{A9=h48gvlk zvJ8}|GWwqSrC;-kE6Z}O`v2C2%sWTW7pH9vmkDxE$f>o z6iXlGlwdg1bLgo)2X*pnzPH|}O-}v6?;owxDbEhYE_`$1o+az|n4MOM zc$J01UqR5zPSEp=j!Ok23E@Hen>1Ae3T$-${Pc(}e2OAPnW&9n@FC(1EGrunq*ssA zZAHI&ee?x^fRMGO{vIn-XeS;8xOxeL11`}P39kT6(1tEym)+Sz}Eh&wLead+Mzg-_$4K$Y&QM;#naP6~($0V-3l z^cJGI>m40v943c7eov@)aM3eKHQagL_f7x+Ou)z^n+IA`d{)q}eL(DkNy57Bvrh%$ zEB<`N{s5TQ=_>Sg#jG@V+-JM7nJUze(5ikc^XZw-bh&i|N?G2C@r}Zn?ah=82)~hP z__+x%HU~D+>;wpw{c!>KZ#Dqu165_sDBm_tR((bjo0~?@l@$3~#8Li>jrw$EglY}qBUl(CN`WM^#AShAET3{jRM zk|p~vwk%o3GALV<2AM+k?2#?IQnH&E+t?-Bd-}fr;r;3T`8?-5=bY!<_jB&$x-LF7 z64@o!SGcarn&3S5B)w*U7NQ712gXvgTp#MM#VqA{OX#`Tw=mx_X{DK>2bH8f#fs0f! zBb77QWhVuqN7}lHV+m?4>IS(T@ekHkZH^ zsh5tcv(5N;dHv7YBzZ@$6K)-;Z#cwOpOqRy1qg1t!3M2l!WD(QbQDGj5A-sBdD$p3 zycBS>_mZ&}Fz9HP&cp<^fD(_3eNAQ=5hAyqT>mUy;C2NGs^*^Ef&KviIF>QWUEEjK zRMy!TC+pNMKeLMa8o?`xaPhGN`%&t}xafZvi|9U2ZCDR=Xh9D}unZ^S-*v)-OP1-r zZcriKSFD;W-38K>77`;pZMQHX0xkr6N(><*U}m<4fTL3zCXq~Xs$Yhkyh$KOLr|$a zX-@$vt-kgEG7-hHtm(U-EWEnihJ}(32VMpYR}M5T^f0jPj;y#$IAN%?tZ3Zk&Egc3 z_R&y*z>l8I_Yy!!NK1>?CAn$Z6+W>4j05=Z=1?NP6Qe z)$KQ#sMbjV5mW)-?i5P3R6hd@R#iy38Zn73G5&@AIyej(G?L42)et0pzwYnb>}*S~ z7wR>`rygCODiz05Oa3j8{F5*6Q}Uc)E)}}D-Gix@lU`+_i^p^@$gkP|+!9T3G%L-T zD_mSfGt7>YjNXNaPM}0p^ z-?+I!VFE;Lr1J*m=zbERwq7R>;;8M!#mdoV!Ys3&7=&i?MfT*ZtVzeUUNGP@Qbk-R zM7PO2u_4!>5EK01e|Nns;o)5|^kZcCS#gf8{*2z<^`Kh&=9GVBl#i9PT5TP-n@a?> zGv67@Z5M_KJM3EG@dZ^64Ruo53LPeE7ruoY{v6zeCmnk%MKa!@8NYL}g3mr#lQ9R> zeAx2&-QsVMY63oA72P2ftk;+~u(Skku6T~1?JD#XpZM<4=>0V(CKJyzc+>@=Q{^S6 zZ%ENs`i9IO_S@a47A#vrIRSK@Vm%n!`uL)6>(#v!?asF-#(nvpVW(g-!z_usUgENuD@VDjMQ{w3qvBM{sA%@X=jH6Jd6}SYkc3Pd5`F4awi) zvK*_0WF|!xf8mlj(!?jklN_7O;0s38!(7wHypqeYmBSh@{!&eaQQ8C05H9B_Yy}5o zUsa=^gf$29>j41Dm^eyL8>dEq_=(dw2F2;T&kvAy;^U8eOhF@#_R4vyg=oEfv&H6s zLb3hE{7k#(9{O=ZQKy*r=o=-#n+aB6XBW?Vw{P?{!~5pqvNAsU*eu(+Tm3GV$OHbT zoe8R2!Q(LZN{JfJiJ&2xFd6!c0t_m7;%uSs6#(7&HbX&SrhrG^HUk49@1m^i1Nh>M zRU8k~wgU!-z1P3mlFE8PTdtuUtBQN$Ep3y(@Vl{>fBAbD4i06KCyKGQ@6D{~0Qo`s zf`bfWmxU6LO44;zjZ!x7H1Dk7I%|oAEx$aCq+B*V1APM|&KIl$e%gqTkr!DZ+%6SM z7ug_E0lG2s%|v0Hg4>;=17RmSR;UAps{<~T)i1cL0#<&5rWB%WOUpKn>8cU)PoVm`I^Qtt`O?{*9^J z{ef3OtWK#!%r^6S|EBZ}NI_#H8%TPlIbUmq3c>`2@I8k*7%f)NsFCecCgvnO?YKeP zx$4em@+aMP^wKWfE_!>f9M(jugLllbEh5}0M}<0 z5NBlJ`gh0a^p70jQ+Q|WYpLt~!{a^{>-eos7bhzkDB#)lYCp>HQhbk;5hZ|N-^^Ob z0<+^NGzM(W-Q0r~ntw<5jh&&5^I+YVrm21bVpQ^HA8oc#C==g*|7uu!cqvr*M&nYr zc_|5+tW}r4J0Lg}kPsX&|xr*z#I@`H4=IAg0%MA`VeMiibW^&hQp9W>UCsWnwVa! zz>ynZ7IxRd4U)#62KIWJ&;C%|8^3vaw5Y`Af4-1sdqYkccy_@-EMbbP!$Jic4%$Pg zzrDoO*m5+H$^`3rxRcY~f0{hbmG4as*aY-93mgiVK0 zUe`U9=D^YH1YdwB8 zg#t-b9lQ`axgWt?Bb&{K#}z&+g651kXHZXTw8q!kTaxhp5$wJS;}nW;M&R6j-Dao2 zZ#0`VEG2Jm&#&*uD=|joc~3(TkwfAPxS<^$ZOdRuAfbdjww^yzuLAqdoKgK*nFM{`vT?c35kukynG84Vr!&?&cQ?7Yoh0Ss-_TFc1>`ii0^U?QH zF%F|^9Q$8L28nKXQXuxT1R9v1?w+|@{ znnSmruePmc^CSi`COMPY{TA%*E!T-AIhOm(C)S+fmQA~YyxAVjue6H?b=+~D;!JNZ zFbX4|nqucw#SB}ghrnpO0HkQ;I9C&TykfQbtM2@Sy{+~gHZGq4FZEAgd~~9o&G~bp z72&YmFcIo=I3QxGs-M!fB$jnH=C8GW&oH(qL$(Se$6>NfjLw!D#Y=pF3vtR?L~~i; zli_!DV-lMFme7C{nwEWg3&{*9tGPtViAmXcJ$6BCH)pxT2k(yMUg_h9@Zlbu2z|x_ zSj26fij;>s7!ySJw$uYxq>+)0{?EZVS*b)ktop3Z2jRh$czc}h_sRV#?WXdy?)zH@ z@Dp|bP#;;!n*nCp7vOr=;t^JXD`85L!SidN%F9TatdnsHRZ;Hf7_L|pF7#j-$pew+ z`(RPXjh6g`-=iq~L+ds^X=nH>)8p)YYh4WhHe9QhWFZdrMQ!jmzY)()+d(yflX*mN zLs;`H2*T=)8)cKdS2T-aW;eBRqP?g$SHi(c9e+hA{i4s*r}yv%e^TzG0L#~ez>x03 zeCMW3KXw6XC@}DP^qyIsY>}&=ywR3+*U0$6h`{NJN@YKlEA$W z>+{MwC_bKDVf57)2hk#`23 zBtrlH)|_ag{etfzy0U@#qDqkh$D>YO&#ACe-P7F_wa~vL1;_BCymVQxOe4O19s9E$2}zrIr2(=7j8 z+(4xHP&Q4xTs_(Y)#-B_c;hIZ`8n2b(o)5 zUL7;hH=5ihJyR%heyQfR#Pjo823hL|e4+Q6>%Di+Z8dYcKa#e81oIO#_sBHtM(L+8 za>Ea#=oH=R6E9#xU6s>eGt`(-C8j8gYMuHgY?e-I&8Wn2CuX)b@ajkreMGB0ILBn=wLPrIOvj|Ag(agk9K~s7*lFhrE<@IDM z--_Alk`Z=^kR#d|a5C3eWrw0EjjDjn;%5qOwUz4tdy-W;kBBm`G1H1Mz=Hl8MB{9@ z4$lBB7$`Hp3C~5~8F=V55<>-mlI-9~UH~`}nj``yd%%%1L- console.log("Done!")); From 4e01b8cab46bfe37f4d7cf92f4ffaa7c21b00bcf Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 19:32:14 +0200 Subject: [PATCH 05/43] feat(pwa): configure vite-plugin-pwa with manifest and workbox precaching Co-Authored-By: Claude Sonnet 4.6 (1M context) --- apps/main/vite.config.ts | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/apps/main/vite.config.ts b/apps/main/vite.config.ts index a13487b..3960322 100644 --- a/apps/main/vite.config.ts +++ b/apps/main/vite.config.ts @@ -5,6 +5,7 @@ import tailwindcss from "@tailwindcss/vite"; import react from "@vitejs/plugin-react"; import { visualizer } from "rollup-plugin-visualizer"; import { defineConfig, type PluginOption } from "vite"; +import { VitePWA } from "vite-plugin-pwa"; import tsconfigPaths from "vite-tsconfig-paths"; // https://vitejs.dev/config/ @@ -16,6 +17,49 @@ export default defineConfig(({ mode }) => { tsconfigPaths(), ]; + plugins.push( + VitePWA({ + registerType: "autoUpdate", + includeAssets: [ + "public/icon.jpg", + "public/logo_dark.png", + "public/logo_white.png", + ], + manifest: { + name: mode === "staging" ? "XTablo (Staging)" : "XTablo", + short_name: "XTablo", + description: "Collaborative project management for construction teams", + start_url: "/", + display: "standalone", + orientation: "any", + theme_color: "#1e1b2e", + background_color: "#1e1b2e", + icons: [ + { + src: "pwa-icons/pwa-192x192.png", + sizes: "192x192", + type: "image/png", + }, + { + src: "pwa-icons/pwa-512x512.png", + sizes: "512x512", + type: "image/png", + }, + { + src: "pwa-icons/pwa-512x512-maskable.png", + sizes: "512x512", + type: "image/png", + purpose: "maskable", + }, + ], + }, + workbox: { + globPatterns: ["**/*.{js,css,html,ico,png,jpg,svg,woff,woff2}"], + globIgnores: ["**/*.map"], + }, + }) + ); + // Only include cloudflare plugin when not in test mode if (mode !== "test" && process.env.VITEST !== "true") { plugins.push(cloudflare({ inspectorPort: 9230 })); From a467e2c167f0a1bc72ade96fc67531913abcec7b Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 19:32:31 +0200 Subject: [PATCH 06/43] feat(pwa): add PWA meta tags and update viewport for standalone mode Co-Authored-By: Claude Sonnet 4.6 (1M context) --- apps/main/index.html | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/main/index.html b/apps/main/index.html index 598566b..45b070d 100644 --- a/apps/main/index.html +++ b/apps/main/index.html @@ -2,8 +2,13 @@ - - + + + + + + + XTablo From 9dc4ad95c5737b0164f889e8970c7f816fc9775c Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 19:34:38 +0200 Subject: [PATCH 07/43] feat(pwa): register service worker with auto-update Co-Authored-By: Claude Sonnet 4.6 (1M context) --- apps/main/src/main.tsx | 5 +++++ apps/main/tsconfig.app.json | 1 + 2 files changed, 6 insertions(+) diff --git a/apps/main/src/main.tsx b/apps/main/src/main.tsx index afc3b6f..01d1eed 100644 --- a/apps/main/src/main.tsx +++ b/apps/main/src/main.tsx @@ -18,3 +18,8 @@ createRoot(document.getElementById("root")!).render( ); + +import { registerSW } from "virtual:pwa-register"; + +// Auto-update service worker — checks for updates on page load +registerSW({ immediate: true }); diff --git a/apps/main/tsconfig.app.json b/apps/main/tsconfig.app.json index 74c1b87..b633f54 100644 --- a/apps/main/tsconfig.app.json +++ b/apps/main/tsconfig.app.json @@ -4,6 +4,7 @@ "target": "ES2020", "useDefineForClassFields": true, "lib": ["ES2020", "DOM", "DOM.Iterable"], + "types": ["vite-plugin-pwa/client"], "module": "ESNext", "skipLibCheck": true, From d199e9e3a872887aef2afe5d7cad278d54020b34 Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 19:35:08 +0200 Subject: [PATCH 08/43] feat(pwa): add safe area insets for standalone mode Co-Authored-By: Claude Sonnet 4.6 (1M context) --- apps/main/src/main.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/main/src/main.css b/apps/main/src/main.css index 58ea181..c3291cd 100644 --- a/apps/main/src/main.css +++ b/apps/main/src/main.css @@ -126,6 +126,14 @@ body { @apply bg-background text-foreground; } + @media (display-mode: standalone) { + body { + padding-top: env(safe-area-inset-top); + padding-bottom: env(safe-area-inset-bottom); + padding-left: env(safe-area-inset-left); + padding-right: env(safe-area-inset-right); + } + } } .str-chat { From c80a6fa94b3ed72671d2f4821a4d9fe855af782d Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 19:42:10 +0200 Subject: [PATCH 09/43] fix(pwa): resolve workbox-window build error with Cloudflare plugin Add workbox-window as direct dependency and set injectRegister: false to prevent conflict between vite-plugin-pwa and @cloudflare/vite-plugin. Co-Authored-By: Claude Sonnet 4.6 (1M context) --- apps/main/package.json | 1 + apps/main/vite.config.ts | 1 + pnpm-lock.yaml | 3 +++ 3 files changed, 5 insertions(+) diff --git a/apps/main/package.json b/apps/main/package.json index 06ec90a..3775a5c 100644 --- a/apps/main/package.json +++ b/apps/main/package.json @@ -68,6 +68,7 @@ "vite-plugin-pwa": "^1.2.0", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.2.4", + "workbox-window": "^7.4.0", "wrangler": "^4.24.3" }, "dependencies": { diff --git a/apps/main/vite.config.ts b/apps/main/vite.config.ts index 3960322..e108772 100644 --- a/apps/main/vite.config.ts +++ b/apps/main/vite.config.ts @@ -20,6 +20,7 @@ export default defineConfig(({ mode }) => { plugins.push( VitePWA({ registerType: "autoUpdate", + injectRegister: false, includeAssets: [ "public/icon.jpg", "public/logo_dark.png", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 31b63e9..6b482d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -501,6 +501,9 @@ importers: vitest: specifier: ^3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@20.0.3)(lightningcss@1.30.2)(terser@5.46.1)(tsx@4.20.6) + workbox-window: + specifier: ^7.4.0 + version: 7.4.0 wrangler: specifier: ^4.24.3 version: 4.44.0 From e23013b0af60075e7ec598910223a1d91b5461be Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 19:48:13 +0200 Subject: [PATCH 10/43] feat(pwa): add useInstallPrompt hook with tests Co-Authored-By: Claude Sonnet 4.6 (1M context) --- apps/main/src/hooks/useInstallPrompt.test.ts | 60 ++++++++++++++++++++ apps/main/src/hooks/useInstallPrompt.ts | 50 ++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 apps/main/src/hooks/useInstallPrompt.test.ts create mode 100644 apps/main/src/hooks/useInstallPrompt.ts diff --git a/apps/main/src/hooks/useInstallPrompt.test.ts b/apps/main/src/hooks/useInstallPrompt.test.ts new file mode 100644 index 0000000..b7f39b0 --- /dev/null +++ b/apps/main/src/hooks/useInstallPrompt.test.ts @@ -0,0 +1,60 @@ +import { act, renderHook } from "@testing-library/react"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { useInstallPrompt } from "./useInstallPrompt"; + +const DISMISSED_KEY = "pwa-install-dismissed"; + +describe("useInstallPrompt", () => { + beforeEach(() => { + localStorage.clear(); + }); + + afterEach(() => { + vi.restoreAllMocks(); + }); + + it("starts with canInstall false and isStandalone false", () => { + const { result } = renderHook(() => useInstallPrompt()); + expect(result.current.canInstall).toBe(false); + expect(result.current.isStandalone).toBe(false); + expect(result.current.isDismissed).toBe(false); + }); + + it("captures beforeinstallprompt event and sets canInstall to true", () => { + const { result } = renderHook(() => useInstallPrompt()); + + const event = new Event("beforeinstallprompt"); + Object.assign(event, { preventDefault: vi.fn(), prompt: vi.fn() }); + + act(() => { + window.dispatchEvent(event); + }); + + expect(result.current.canInstall).toBe(true); + }); + + it("dismiss persists to localStorage and sets isDismissed", () => { + const { result } = renderHook(() => useInstallPrompt()); + + act(() => { + result.current.dismiss(); + }); + + expect(result.current.isDismissed).toBe(true); + expect(localStorage.getItem(DISMISSED_KEY)).toBe("true"); + }); + + it("reads dismissed state from localStorage on mount", () => { + localStorage.setItem(DISMISSED_KEY, "true"); + const { result } = renderHook(() => useInstallPrompt()); + expect(result.current.isDismissed).toBe(true); + }); + + it("detects iOS Safari", () => { + vi.spyOn(navigator, "userAgent", "get").mockReturnValue( + "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1" + ); + const { result } = renderHook(() => useInstallPrompt()); + expect(result.current.isIOS).toBe(true); + }); +}); diff --git a/apps/main/src/hooks/useInstallPrompt.ts b/apps/main/src/hooks/useInstallPrompt.ts new file mode 100644 index 0000000..15b3e2a --- /dev/null +++ b/apps/main/src/hooks/useInstallPrompt.ts @@ -0,0 +1,50 @@ +import { useCallback, useEffect, useRef, useState } from "react"; + +const DISMISSED_KEY = "pwa-install-dismissed"; + +interface BeforeInstallPromptEvent extends Event { + prompt(): Promise<{ outcome: "accepted" | "dismissed" }>; +} + +export function useInstallPrompt() { + const deferredPrompt = useRef(null); + const [canInstall, setCanInstall] = useState(false); + const [isDismissed, setIsDismissed] = useState( + () => localStorage.getItem(DISMISSED_KEY) === "true" + ); + + const isStandalone = + typeof window !== "undefined" && + typeof window.matchMedia === "function" && + (window.matchMedia("(display-mode: standalone)")?.matches ?? false); + + const isIOS = + typeof navigator !== "undefined" && + /iPad|iPhone|iPod/.test(navigator.userAgent); + + useEffect(() => { + const handler = (e: Event) => { + e.preventDefault(); + deferredPrompt.current = e as BeforeInstallPromptEvent; + setCanInstall(true); + }; + window.addEventListener("beforeinstallprompt", handler); + return () => window.removeEventListener("beforeinstallprompt", handler); + }, []); + + const promptInstall = useCallback(async () => { + if (!deferredPrompt.current) return; + const result = await deferredPrompt.current.prompt(); + if (result.outcome === "accepted") { + deferredPrompt.current = null; + setCanInstall(false); + } + }, []); + + const dismiss = useCallback(() => { + setIsDismissed(true); + localStorage.setItem(DISMISSED_KEY, "true"); + }, []); + + return { canInstall, isStandalone, isIOS, isDismissed, promptInstall, dismiss }; +} From 8e41b031aaa7ebce5e96b9cbf8ecca28a8f59c14 Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 19:51:38 +0200 Subject: [PATCH 11/43] feat(pwa): add InstallBanner component with tests Co-Authored-By: Claude Sonnet 4.6 (1M context) --- .../src/components/InstallBanner.test.tsx | 128 ++++++++++++++++++ apps/main/src/components/InstallBanner.tsx | 49 +++++++ 2 files changed, 177 insertions(+) create mode 100644 apps/main/src/components/InstallBanner.test.tsx create mode 100644 apps/main/src/components/InstallBanner.tsx diff --git a/apps/main/src/components/InstallBanner.test.tsx b/apps/main/src/components/InstallBanner.test.tsx new file mode 100644 index 0000000..8aaed34 --- /dev/null +++ b/apps/main/src/components/InstallBanner.test.tsx @@ -0,0 +1,128 @@ +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; + +// Mock the hook so we can control its return values +const mockPromptInstall = vi.fn(); +const mockDismiss = vi.fn(); + +vi.mock("../hooks/useInstallPrompt", () => ({ + useInstallPrompt: vi.fn(() => ({ + canInstall: false, + isStandalone: false, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + })), +})); + +import { useInstallPrompt } from "../hooks/useInstallPrompt"; +import { InstallBanner } from "./InstallBanner"; + +const mockUseInstallPrompt = vi.mocked(useInstallPrompt); + +describe("InstallBanner", () => { + beforeEach(() => { + mockPromptInstall.mockClear(); + mockDismiss.mockClear(); + }); + + afterEach(() => { + vi.restoreAllMocks(); + }); + + it("renders nothing when canInstall is false and not iOS", () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: false, + isStandalone: false, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + const { container } = render(); + expect(container.firstChild).toBeNull(); + }); + + it("renders nothing when already in standalone mode", () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: true, + isStandalone: true, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + const { container } = render(); + expect(container.firstChild).toBeNull(); + }); + + it("renders nothing when dismissed", () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: true, + isStandalone: false, + isIOS: false, + isDismissed: true, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + const { container } = render(); + expect(container.firstChild).toBeNull(); + }); + + it("renders install banner when canInstall is true", () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: true, + isStandalone: false, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + render(); + expect(screen.getByText(/install/i)).toBeInTheDocument(); + }); + + it("calls promptInstall when install button is clicked", async () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: true, + isStandalone: false, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + render(); + await userEvent.click(screen.getByRole("button", { name: /install/i })); + expect(mockPromptInstall).toHaveBeenCalledOnce(); + }); + + it("calls dismiss when close button is clicked", async () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: true, + isStandalone: false, + isIOS: false, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + render(); + await userEvent.click(screen.getByRole("button", { name: /dismiss|close/i })); + expect(mockDismiss).toHaveBeenCalledOnce(); + }); + + it("renders iOS instructions when isIOS is true and not dismissed", () => { + mockUseInstallPrompt.mockReturnValue({ + canInstall: false, + isStandalone: false, + isIOS: true, + isDismissed: false, + promptInstall: mockPromptInstall, + dismiss: mockDismiss, + }); + render(); + expect(screen.getByText(/share/i)).toBeInTheDocument(); + expect(screen.getByText(/add to home screen/i)).toBeInTheDocument(); + }); +}); diff --git a/apps/main/src/components/InstallBanner.tsx b/apps/main/src/components/InstallBanner.tsx new file mode 100644 index 0000000..e9ff517 --- /dev/null +++ b/apps/main/src/components/InstallBanner.tsx @@ -0,0 +1,49 @@ +import { Download, Share, X } from "lucide-react"; +import { useInstallPrompt } from "../hooks/useInstallPrompt"; + +export function InstallBanner() { + const { canInstall, isStandalone, isIOS, isDismissed, promptInstall, dismiss } = + useInstallPrompt(); + + // Don't show if already installed, dismissed, or no install option available + if (isStandalone || isDismissed) return null; + if (!canInstall && !isIOS) return null; + + return ( +
    + {isIOS ? ( + <> + +

    + Install XTablo: tap{" "} + Share then{" "} + Add to Home Screen +

    + + ) : ( + <> + +

    + Get the app for a faster, native experience +

    + + + )} + +
    + ); +} From 2ffe4b1b4106eebd39237a2bfb617b9deab1b6ee Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Thu, 2 Apr 2026 19:52:29 +0200 Subject: [PATCH 12/43] feat(pwa): wire InstallBanner into app shell Co-Authored-By: Claude Sonnet 4.6 (1M context) --- apps/main/src/App.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/main/src/App.tsx b/apps/main/src/App.tsx index a41987e..2abcf96 100644 --- a/apps/main/src/App.tsx +++ b/apps/main/src/App.tsx @@ -3,6 +3,7 @@ import { ThemeProvider } from "@xtablo/shared/contexts/ThemeContext"; import { Toaster } from "@xtablo/ui/components/sonner"; import { BrowserRouter as Router, useRoutes } from "react-router-dom"; import { CookieBanner } from "./components/CookieBanner"; +import { InstallBanner } from "./components/InstallBanner"; import { PendingSignupCheckout } from "./components/PendingSignupCheckout"; import { PlanAnnouncement } from "./components/PlanAnnouncement"; import { TrialUpsellModal } from "./components/TrialUpsellModal"; @@ -54,6 +55,7 @@ export const App = () => {
    + {showBanner && ( Date: Thu, 2 Apr 2026 19:54:46 +0200 Subject: [PATCH 13/43] style(pwa): fix biome formatting in hook and banner Co-Authored-By: Claude Sonnet 4.6 (1M context) --- apps/main/src/components/InstallBanner.tsx | 7 ++----- apps/main/src/hooks/useInstallPrompt.ts | 4 +--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/apps/main/src/components/InstallBanner.tsx b/apps/main/src/components/InstallBanner.tsx index e9ff517..7cab6eb 100644 --- a/apps/main/src/components/InstallBanner.tsx +++ b/apps/main/src/components/InstallBanner.tsx @@ -15,17 +15,14 @@ export function InstallBanner() { <>

    - Install XTablo: tap{" "} - Share then{" "} + Install XTablo: tap Share then{" "} Add to Home Screen

    ) : ( <> -

    - Get the app for a faster, native experience -

    +

    Get the app for a faster, native experience

    + {/* Mobile backdrop overlay */}