From 934b3484935c98ae73c65b41f64a7adbf17d2f1c Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 24 Jul 2026 01:00:04 +0530 Subject: [PATCH 01/36] scaffold vite react typescript console workspace --- .gitignore | 8 +++++++ console/biome.json | 27 +++++++++++++++++++++++ console/index.html | 35 ++++++++++++++++++++++++++++++ console/package.json | 42 ++++++++++++++++++++++++++++++++++++ console/playwright.config.ts | 20 +++++++++++++++++ console/src/main.tsx | 18 ++++++++++++++++ console/src/vite-env.d.ts | 1 + console/tsconfig.json | 32 +++++++++++++++++++++++++++ console/vite.config.ts | 38 ++++++++++++++++++++++++++++++++ console/vitest.config.ts | 16 ++++++++++++++ 10 files changed, 237 insertions(+) create mode 100644 console/biome.json create mode 100644 console/index.html create mode 100644 console/package.json create mode 100644 console/playwright.config.ts create mode 100644 console/src/main.tsx create mode 100644 console/src/vite-env.d.ts create mode 100644 console/tsconfig.json create mode 100644 console/vite.config.ts create mode 100644 console/vitest.config.ts diff --git a/.gitignore b/.gitignore index dc3c20e..de25ed5 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,11 @@ dist/ .pytest_cache/ .ruff_cache/ claude.md + +# Frontend +console/node_modules/ +console/dist/ +console/.vite/ +console/coverage/ +console/playwright-report/ +console/test-results/ diff --git a/console/biome.json b/console/biome.json new file mode 100644 index 0000000..5440e13 --- /dev/null +++ b/console/biome.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.6.1/schema.json", + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "style": { + "useConst": "error" + } + } + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 100 + }, + "javascript": { + "formatter": { + "quoteStyle": "double", + "semicolons": "always" + } + } +} diff --git a/console/index.html b/console/index.html new file mode 100644 index 0000000..843496f --- /dev/null +++ b/console/index.html @@ -0,0 +1,35 @@ + + + + + + Vitals Console + + + + + + + +
+ + + diff --git a/console/package.json b/console/package.json new file mode 100644 index 0000000..8ceae72 --- /dev/null +++ b/console/package.json @@ -0,0 +1,42 @@ +{ + "name": "vitals-console", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "lint": "biome check .", + "format": "biome format --write .", + "test": "vitest run", + "test:watch": "vitest", + "test:e2e": "playwright test", + "lint:tokens": "node scripts/lint-tokens.js" + }, + "dependencies": { + "@tanstack/react-query": "^5.28.0", + "lucide-react": "^0.359.0", + "motion": "^11.0.8", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.22.3" + }, + "devDependencies": { + "@biomejs/biome": "^1.6.1", + "@playwright/test": "^1.42.1", + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/react": "^14.2.2", + "@testing-library/user-event": "^14.5.2", + "@types/node": "^20.11.30", + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@vitejs/plugin-react": "^4.2.1", + "axe-core": "^4.9.0", + "jsdom": "^24.0.0", + "msw": "^2.2.8", + "typescript": "^5.4.3", + "vite": "^5.1.6", + "vitest": "^1.4.0" + } +} diff --git a/console/playwright.config.ts b/console/playwright.config.ts new file mode 100644 index 0000000..f52cf6b --- /dev/null +++ b/console/playwright.config.ts @@ -0,0 +1,20 @@ +import { defineConfig, devices } from "@playwright/test"; + +export default defineConfig({ + testDir: "./e2e", + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: "html", + use: { + baseURL: "http://localhost:8787", + trace: "on-first-retry", + }, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + ], +}); diff --git a/console/src/main.tsx b/console/src/main.tsx new file mode 100644 index 0000000..fca6169 --- /dev/null +++ b/console/src/main.tsx @@ -0,0 +1,18 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App"; +import "./styles/tokens.css"; +import "./styles/reset.css"; +import "./styles/typography.css"; +import "./styles/breakpoints.css"; +import "./styles/utilities.css"; +import "./styles/global.css"; + +const rootElement = document.getElementById("root"); +if (rootElement) { + ReactDOM.createRoot(rootElement).render( + + + + ); +} diff --git a/console/src/vite-env.d.ts b/console/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/console/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/console/tsconfig.json b/console/tsconfig.json new file mode 100644 index 0000000..a25fafd --- /dev/null +++ b/console/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Strictness */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + + /* Path alias */ + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src"] +} diff --git a/console/vite.config.ts b/console/vite.config.ts new file mode 100644 index 0000000..6463d7a --- /dev/null +++ b/console/vite.config.ts @@ -0,0 +1,38 @@ +import path from "node:path"; +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, + build: { + outDir: path.resolve(__dirname, "../vitals/console/static"), + emptyOutDir: true, + assetsDir: "assets", + sourcemap: false, + rollupOptions: { + output: { + manualChunks: { + vendor: ["react", "react-dom", "react-router-dom"], + query: ["@tanstack/react-query"], + motion: ["motion"], + icons: ["lucide-react"], + }, + }, + }, + }, + server: { + port: 5173, + proxy: { + "/api": { + target: "http://localhost:8787", + changeOrigin: true, + }, + }, + }, +}); diff --git a/console/vitest.config.ts b/console/vitest.config.ts new file mode 100644 index 0000000..21f4238 --- /dev/null +++ b/console/vitest.config.ts @@ -0,0 +1,16 @@ +import path from "node:path"; +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + globals: true, + environment: "jsdom", + setupFiles: ["./src/test/setup.ts"], + include: ["src/**/*.{test,spec}.{ts,tsx}"], + }, + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}); From 384a4cc7c6ecae8466abe3f1750a860a612ed011 Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 24 Jul 2026 01:00:08 +0530 Subject: [PATCH 02/36] add design tokens and global styles --- console/src/styles/breakpoints.css | 5 ++ console/src/styles/global.css | 18 +++++ console/src/styles/reset.css | 48 +++++++++++++ console/src/styles/tokens.css | 108 +++++++++++++++++++++++++++++ 4 files changed, 179 insertions(+) create mode 100644 console/src/styles/breakpoints.css create mode 100644 console/src/styles/global.css create mode 100644 console/src/styles/reset.css create mode 100644 console/src/styles/tokens.css diff --git a/console/src/styles/breakpoints.css b/console/src/styles/breakpoints.css new file mode 100644 index 0000000..7f414f6 --- /dev/null +++ b/console/src/styles/breakpoints.css @@ -0,0 +1,5 @@ +/* Custom Media Breakpoints (§10) */ +/* Mobile: < 768px */ +/* Tablet: 768px - 1023px */ +/* Laptop: 1024px - 1279px */ +/* Desktop: >= 1280px */ diff --git a/console/src/styles/global.css b/console/src/styles/global.css new file mode 100644 index 0000000..a6f2a64 --- /dev/null +++ b/console/src/styles/global.css @@ -0,0 +1,18 @@ +:focus-visible { + outline: none; + box-shadow: var(--focus-ring); +} + +body { + background-color: var(--color-canvas); + color: var(--color-text); + min-height: 100vh; + display: flex; + flex-direction: column; +} + +#root { + display: flex; + flex-direction: column; + min-height: 100vh; +} diff --git a/console/src/styles/reset.css b/console/src/styles/reset.css new file mode 100644 index 0000000..7e7ec5f --- /dev/null +++ b/console/src/styles/reset.css @@ -0,0 +1,48 @@ +/* Modern CSS Reset */ +*, *::before, *::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +html, body { + height: 100%; +} + +body { + line-height: 1.5; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background-color: var(--color-canvas); + color: var(--color-text); + font-family: var(--font-sans); +} + +img, picture, video, canvas, svg { + display: block; + max-width: 100%; +} + +input, button, textarea, select { + font: inherit; + color: inherit; +} + +p, h1, h2, h3, h4, h5, h6 { + overflow-wrap: break-word; +} + +button { + cursor: pointer; + background: none; + border: none; +} + +a { + color: inherit; + text-decoration: none; +} + +ul, ol { + list-style: none; +} diff --git a/console/src/styles/tokens.css b/console/src/styles/tokens.css new file mode 100644 index 0000000..3b8a2f9 --- /dev/null +++ b/console/src/styles/tokens.css @@ -0,0 +1,108 @@ +:root { + /* 2.1 Color — Neutrals */ + --color-canvas: #FBFBFA; + --color-surface: #FFFFFF; + --color-surface-subtle: #F7F7F6; + --color-surface-inset: #F1F1EF; + --color-surface-raised: #FFFFFF; + --color-border-subtle: #EDEDEA; + --color-border: #E2E2DE; + --color-border-strong: #CBCBC5; + --color-text: #18181B; + --color-text-secondary: #57575F; + --color-text-tertiary: #8A8A92; + --color-text-disabled: #B6B6BC; + --color-overlay: rgba(24, 24, 27, 0.32); + + /* 2.2 Color — Accent */ + --color-accent: #1A56DB; + --color-accent-hover: #1546B4; + --color-accent-active: #113A96; + --color-accent-subtle: #EBF1FE; + --color-accent-border: #C3D6FB; + --color-accent-text: #1546B4; + + /* 2.3 Color — Status (1:1 VerdictState) */ + --color-steady-dot: #16A34A; + --color-steady-text: #146C33; + --color-steady-bg: #F1FDF4; + --color-steady-border: #BBF0CC; + + --color-changed-dot: #F59E0B; + --color-changed-text: #96590C; + --color-changed-bg: #FFFAEB; + --color-changed-border: #FBE3A6; + + --color-inconclusive-dot: #3B82F6; + --color-inconclusive-text: #1D4ED8; + --color-inconclusive-bg: #EFF5FF; + --color-inconclusive-border: #C2D8FC; + + --color-warming-dot: #8A8A92; + --color-warming-text: #57575F; + --color-warming-bg: #F5F5F3; + --color-warming-border: #E2E2DE; + + --color-error-dot: #DC2626; + --color-error-text: #A81E1E; + --color-error-bg: #FEF2F2; + --color-error-border: #F8CFCF; + + /* 2.4 Color — Chart Palette */ + --chart-1: #1A56DB; + --chart-2: #0E9F6E; + --chart-3: #F59E0B; + --chart-4: #0891B2; + --chart-5: #C2410C; + --chart-6: #64748B; + + /* 2.5 Spacing */ + --space-0: 0; + --space-1: 4px; + --space-2: 8px; + --space-3: 12px; + --space-4: 16px; + --space-5: 20px; + --space-6: 24px; + --space-8: 32px; + --space-10: 40px; + --space-12: 48px; + --space-16: 64px; + --space-20: 80px; + + /* 2.6 Radius */ + --radius-sm: 4px; + --radius-md: 6px; + --radius-lg: 10px; + --radius-xl: 14px; + --radius-full: 9999px; + + /* 2.7 Shadows */ + --shadow-xs: 0 1px 2px rgba(24, 24, 27, 0.04); + --shadow-sm: 0 1px 3px rgba(24, 24, 27, 0.06), 0 1px 2px rgba(24, 24, 27, 0.04); + --shadow-md: 0 4px 12px rgba(24, 24, 27, 0.07), 0 1px 3px rgba(24, 24, 27, 0.05); + --shadow-lg: 0 12px 28px rgba(24, 24, 27, 0.10), 0 2px 6px rgba(24, 24, 27, 0.05); + --shadow-xl: 0 24px 56px rgba(24, 24, 27, 0.14), 0 4px 10px rgba(24, 24, 27, 0.06); + + /* 2.8 Typography Families */ + --font-sans: "Inter var", -apple-system, "Segoe UI", sans-serif; + --font-mono: "JetBrains Mono", ui-monospace, "SF Mono", monospace; + + /* 3.1 Motion Durations & Easings */ + --dur-instant: 80ms; + --dur-fast: 140ms; + --dur-base: 200ms; + --dur-slow: 300ms; + --dur-slower: 460ms; + + --ease-out: cubic-bezier(0.22, 1, 0.36, 1); + --ease-in: cubic-bezier(0.5, 0, 0.75, 0); + --ease-inout: cubic-bezier(0.65, 0, 0.35, 1); + + /* 2.10 Layout Constants */ + --layout-max: 1120px; + --layout-gutter: 24px; + --header-height: 56px; + --drawer-width: 560px; + --focus-ring: 0 0 0 2px #FFFFFF, 0 0 0 4px var(--color-accent); +} From bcbdfdf4dc19b563a84d494172191c769e7902b3 Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 24 Jul 2026 01:00:11 +0530 Subject: [PATCH 03/36] add self-hosted fonts and typography scale --- console/public/favicon.svg | 4 + console/public/fonts/InterVariable.woff2 | 1 + .../public/fonts/JetBrainsMono-Medium.woff2 | 1 + .../public/fonts/JetBrainsMono-Regular.woff2 | 1 + console/src/styles/typography.css | 125 ++++++++++++++++++ console/src/styles/utilities.css | 22 +++ 6 files changed, 154 insertions(+) create mode 100644 console/public/favicon.svg create mode 100644 console/public/fonts/InterVariable.woff2 create mode 100644 console/public/fonts/JetBrainsMono-Medium.woff2 create mode 100644 console/public/fonts/JetBrainsMono-Regular.woff2 create mode 100644 console/src/styles/typography.css create mode 100644 console/src/styles/utilities.css diff --git a/console/public/favicon.svg b/console/public/favicon.svg new file mode 100644 index 0000000..eb57fd4 --- /dev/null +++ b/console/public/favicon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/console/public/fonts/InterVariable.woff2 b/console/public/fonts/InterVariable.woff2 new file mode 100644 index 0000000..9c1a33c --- /dev/null +++ b/console/public/fonts/InterVariable.woff2 @@ -0,0 +1 @@ +wOF2 font placeholder diff --git a/console/public/fonts/JetBrainsMono-Medium.woff2 b/console/public/fonts/JetBrainsMono-Medium.woff2 new file mode 100644 index 0000000..9c1a33c --- /dev/null +++ b/console/public/fonts/JetBrainsMono-Medium.woff2 @@ -0,0 +1 @@ +wOF2 font placeholder diff --git a/console/public/fonts/JetBrainsMono-Regular.woff2 b/console/public/fonts/JetBrainsMono-Regular.woff2 new file mode 100644 index 0000000..9c1a33c --- /dev/null +++ b/console/public/fonts/JetBrainsMono-Regular.woff2 @@ -0,0 +1 @@ +wOF2 font placeholder diff --git a/console/src/styles/typography.css b/console/src/styles/typography.css new file mode 100644 index 0000000..6fd2ba2 --- /dev/null +++ b/console/src/styles/typography.css @@ -0,0 +1,125 @@ +@font-face { + font-family: "Inter var"; + font-weight: 100 900; + font-display: swap; + font-style: normal; + src: url("/fonts/InterVariable.woff2") format("woff2"); +} + +@font-face { + font-family: "JetBrains Mono"; + font-weight: 400; + font-display: swap; + font-style: normal; + src: url("/fonts/JetBrainsMono-Regular.woff2") format("woff2"); +} + +@font-face { + font-family: "JetBrains Mono"; + font-weight: 500 600; + font-display: swap; + font-style: normal; + src: url("/fonts/JetBrainsMono-Medium.woff2") format("woff2"); +} + +/* Typography Utility Classes */ +.text-display { + font-family: var(--font-sans); + font-size: 32px; + line-height: 40px; + font-weight: 600; + letter-spacing: -0.02em; +} + +.text-h1 { + font-family: var(--font-sans); + font-size: 24px; + line-height: 32px; + font-weight: 600; + letter-spacing: -0.015em; +} + +.text-h2 { + font-family: var(--font-sans); + font-size: 18px; + line-height: 26px; + font-weight: 600; + letter-spacing: -0.01em; +} + +.text-h3 { + font-family: var(--font-sans); + font-size: 15px; + line-height: 22px; + font-weight: 600; + letter-spacing: -0.005em; +} + +.text-body { + font-family: var(--font-sans); + font-size: 14px; + line-height: 22px; + font-weight: 400; + letter-spacing: 0; +} + +.text-body-md { + font-family: var(--font-sans); + font-size: 14px; + line-height: 22px; + font-weight: 500; + letter-spacing: 0; +} + +.text-sm { + font-family: var(--font-sans); + font-size: 13px; + line-height: 20px; + font-weight: 400; + letter-spacing: 0; +} + +.text-xs { + font-family: var(--font-sans); + font-size: 12px; + line-height: 18px; + font-weight: 500; + letter-spacing: 0.005em; +} + +.text-micro { + font-family: var(--font-sans); + font-size: 11px; + line-height: 16px; + font-weight: 500; + letter-spacing: 0.02em; + text-transform: uppercase; + color: var(--color-text-tertiary); +} + +.text-mono-lg { + font-family: var(--font-mono); + font-size: 20px; + line-height: 28px; + font-weight: 600; + letter-spacing: -0.01em; + font-variant-numeric: tabular-nums; +} + +.text-mono { + font-family: var(--font-mono); + font-size: 13px; + line-height: 20px; + font-weight: 400; + letter-spacing: 0; + font-variant-numeric: tabular-nums; +} + +.text-mono-sm { + font-family: var(--font-mono); + font-size: 12px; + line-height: 18px; + font-weight: 400; + letter-spacing: 0; + font-variant-numeric: tabular-nums; +} diff --git a/console/src/styles/utilities.css b/console/src/styles/utilities.css new file mode 100644 index 0000000..2e883d4 --- /dev/null +++ b/console/src/styles/utilities.css @@ -0,0 +1,22 @@ +/* Visually Hidden Utility for Screen Readers */ +.visually-hidden { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +/* Reduced Motion Backstop (§3.3) */ +@media (prefers-reduced-motion: reduce) { + *, ::before, ::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + scroll-behavior: auto !important; + } +} From b2d927abab8b5800eef00be5eadcbed602f9f123 Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 24 Jul 2026 01:00:16 +0530 Subject: [PATCH 04/36] add spa history fallback to console server --- vitals/console/server.py | 65 +++++++++++++++---- .../console/static/assets/icons-OlrHjD2C.js | 1 + .../console/static/assets/index-BnLN_dPT.js | 1 + .../console/static/assets/index-D9UYdNvw.css | 1 + .../console/static/assets/motion-l0sNRNKZ.js | 1 + .../console/static/assets/query--gEBzra4.js | 9 +++ .../console/static/assets/vendor-e46xhu4s.js | 60 +++++++++++++++++ vitals/console/static/favicon.svg | 4 ++ .../console/static/fonts/InterVariable.woff2 | 1 + .../static/fonts/JetBrainsMono-Medium.woff2 | 1 + .../static/fonts/JetBrainsMono-Regular.woff2 | 1 + vitals/console/static/index.html | 38 +++++++++++ 12 files changed, 171 insertions(+), 12 deletions(-) create mode 100644 vitals/console/static/assets/icons-OlrHjD2C.js create mode 100644 vitals/console/static/assets/index-BnLN_dPT.js create mode 100644 vitals/console/static/assets/index-D9UYdNvw.css create mode 100644 vitals/console/static/assets/motion-l0sNRNKZ.js create mode 100644 vitals/console/static/assets/query--gEBzra4.js create mode 100644 vitals/console/static/assets/vendor-e46xhu4s.js create mode 100644 vitals/console/static/favicon.svg create mode 100644 vitals/console/static/fonts/InterVariable.woff2 create mode 100644 vitals/console/static/fonts/JetBrainsMono-Medium.woff2 create mode 100644 vitals/console/static/fonts/JetBrainsMono-Regular.woff2 create mode 100644 vitals/console/static/index.html diff --git a/vitals/console/server.py b/vitals/console/server.py index 0384b5a..6f4ba37 100644 --- a/vitals/console/server.py +++ b/vitals/console/server.py @@ -56,17 +56,7 @@ def do_GET(self) -> None: # noqa: N802 try: path = self.path.split("?")[0] - if path == "/": - verdicts = self.store.list(limit=50) - latest = verdicts[0] if verdicts else None - scope_list = [s for s in self.scopes.values()] - snapshot = self.health.snapshot() - html = render_console_html( - latest, verdicts, scope_list, snapshot, self.start_time - ) - self._send_html(html) - return - + # API endpoints if path == "/api/verdicts": verdicts = self.store.list(limit=50) self._send_json({"verdicts": [v.to_dict() for v in verdicts]}) @@ -106,12 +96,63 @@ def do_GET(self) -> None: # noqa: N802 self._send_json(snapshot) return - self._send_json({"error": "Not Found"}, status=404) + if path.startswith("/api/"): + self._send_json({"error": "Not Found"}, status=404) + return + + # Static asset & SPA serving (§0.2) + import mimetypes + from pathlib import Path + + static_dir = Path(__file__).parent / "static" + requested_file = static_dir / path.lstrip("/") + + # Serve asset files from static/assets/ or other static assets (fonts, favicon) + if requested_file.is_file() and not requested_file.name.endswith(".html"): + mime_type, _ = mimetypes.guess_type(str(requested_file)) + if not mime_type: + mime_type = "application/octet-stream" + body = requested_file.read_bytes() + self.send_response(200) + self.send_header("Content-Type", mime_type) + self.send_header("Content-Length", str(len(body))) + if path.startswith("/assets/"): + self.send_header( + "Cache-Control", "public, max-age=31536000, immutable" + ) + else: + self.send_header("Cache-Control", "public, max-age=3600") + self.end_headers() + self.wfile.write(body) + return + + # SPA History Fallback: return index.html for all non-API paths + index_html_file = static_dir / "index.html" + if index_html_file.is_file(): + body = index_html_file.read_bytes() + self.send_response(200) + self.send_header("Content-Type", "text/html; charset=utf-8") + self.send_header("Content-Length", str(len(body))) + self.send_header("Cache-Control", "no-cache") + self.end_headers() + self.wfile.write(body) + return + + # Fallback if static/index.html not built yet + verdicts = self.store.list(limit=50) + latest = verdicts[0] if verdicts else None + scope_list = [s for s in self.scopes.values()] + snapshot = self.health.snapshot() + html = render_console_html( + latest, verdicts, scope_list, snapshot, self.start_time + ) + self._send_html(html) except Exception as exc: logger.exception("Console error servicing %s", self.path) self._send_json({"error": str(exc)}, status=500) + def create_console_server( host: str, port: int, diff --git a/vitals/console/static/assets/icons-OlrHjD2C.js b/vitals/console/static/assets/icons-OlrHjD2C.js new file mode 100644 index 0000000..bd984f8 --- /dev/null +++ b/vitals/console/static/assets/icons-OlrHjD2C.js @@ -0,0 +1 @@ +import"./vendor-e46xhu4s.js"; diff --git a/vitals/console/static/assets/index-BnLN_dPT.js b/vitals/console/static/assets/index-BnLN_dPT.js new file mode 100644 index 0000000..810dcc4 --- /dev/null +++ b/vitals/console/static/assets/index-BnLN_dPT.js @@ -0,0 +1 @@ +import{Q as m,j as e,a as x}from"./query--gEBzra4.js";import{a as v,u as f,L as o,c as j,O as y,R as g,b as _}from"./vendor-e46xhu4s.js";(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))d(t);new MutationObserver(t=>{for(const r of t)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&d(i)}).observe(document,{childList:!0,subtree:!0});function c(t){const r={};return t.integrity&&(r.integrity=t.integrity),t.referrerPolicy&&(r.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?r.credentials="include":t.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function d(t){if(t.ep)return;t.ep=!0;const r=c(t);fetch(t.href,r)}})();var l={},h=v;l.createRoot=h.createRoot,l.hydrateRoot=h.hydrateRoot;function b(){return new m({defaultOptions:{queries:{retry:3,retryDelay:s=>Math.min(1e3*2**s,8e3),refetchOnWindowFocus:!0,refetchIntervalInBackground:!1,structuralSharing:!0}}})}const N=b(),L=({children:s})=>e.jsx(x,{client:N,children:s}),S="_header_an53m_1",k="_left_an53m_15",R="_brand_an53m_21",O="_nav_an53m_32",A="_navLink_an53m_38",C="_activeNavLink_an53m_52",I="_right_an53m_57",w="_searchInput_an53m_63",P="_kbdHint_an53m_75",n={header:S,left:k,brand:R,nav:O,navLink:A,activeNavLink:C,right:I,searchInput:w,kbdHint:P},E=()=>{const s=f(),a=s.pathname==="/"||s.pathname.startsWith("/v/"),c=s.pathname==="/scopes";return e.jsxs("header",{className:n.header,children:[e.jsx("div",{className:n.left,children:e.jsxs(o,{to:"/",className:n.brand,children:[e.jsx("span",{style:{width:8,height:8,borderRadius:"50%",backgroundColor:"var(--color-steady-dot)",display:"inline-block"},"aria-label":"Scope state STEADY"}),"vitals"]})}),e.jsxs("nav",{className:n.nav,"aria-label":"Main Navigation",children:[e.jsx(o,{to:"/",className:`${n.navLink} ${a?n.activeNavLink:""}`,children:"Console"}),e.jsx(o,{to:"/scopes",className:`${n.navLink} ${c?n.activeNavLink:""}`,children:"Scopes"})]}),e.jsxs("div",{className:n.right,children:[e.jsxs("div",{className:n.searchInput,children:[e.jsx("span",{children:"Search..."}),e.jsx("kbd",{className:n.kbdHint,children:"⌘K"})]}),e.jsx(o,{to:"/about",className:n.navLink,children:"About"})]})]})},H=()=>e.jsx("div",{className:"about-screen",style:{padding:"32px 24px",maxWidth:"720px",margin:"0 auto",width:"100%"},children:e.jsx("h2",{children:"About Screen Shell"})}),u=()=>e.jsx("div",{className:"console-screen",style:{padding:"32px 24px",maxWidth:"1120px",margin:"0 auto",width:"100%"},children:e.jsx("h2",{children:"Console Screen Shell"})}),Q=()=>e.jsxs("div",{className:"not-found-screen",style:{padding:"64px 24px",textAlign:"center"},children:[e.jsx("h2",{children:"404 — Page not found"}),e.jsx("p",{style:{marginTop:"16px"},children:e.jsx(o,{to:"/",style:{color:"var(--color-accent)"},children:"Back to console"})})]}),W=()=>e.jsx("div",{className:"scopes-screen",style:{padding:"32px 24px",maxWidth:"1120px",margin:"0 auto",width:"100%"},children:e.jsx("h2",{children:"Scopes Screen Shell"})}),B=()=>e.jsxs(e.Fragment,{children:[e.jsx(E,{}),e.jsx("main",{style:{flex:1},children:e.jsx(y,{})})]}),F=j([{path:"/",element:e.jsx(B,{}),children:[{index:!0,element:e.jsx(u,{})},{path:"v/:verdictId",element:e.jsx(u,{})},{path:"scopes",element:e.jsx(W,{})},{path:"about",element:e.jsx(H,{})},{path:"*",element:e.jsx(Q,{})}]}]),M=()=>e.jsx(L,{children:e.jsx(g,{router:F})}),p=document.getElementById("root");p&&l.createRoot(p).render(e.jsx(_.StrictMode,{children:e.jsx(M,{})})); diff --git a/vitals/console/static/assets/index-D9UYdNvw.css b/vitals/console/static/assets/index-D9UYdNvw.css new file mode 100644 index 0000000..b4b44a5 --- /dev/null +++ b/vitals/console/static/assets/index-D9UYdNvw.css @@ -0,0 +1 @@ +._header_an53m_1{position:sticky;top:0;z-index:40;height:var(--header-height);background-color:var(--color-surface);box-shadow:var(--shadow-xs);border-bottom:1px solid var(--color-border-subtle);display:flex;align-items:center;justify-content:space-between;padding:0 var(--layout-gutter)}._left_an53m_15{display:flex;align-items:center;gap:var(--space-2)}._brand_an53m_21{font-family:var(--font-mono);font-size:18px;font-weight:600;color:var(--color-text);letter-spacing:-.01em;display:flex;align-items:center;gap:var(--space-2)}._nav_an53m_32{display:flex;align-items:center;gap:var(--space-6)}._navLink_an53m_38{font-family:var(--font-sans);font-size:14px;font-weight:500;color:var(--color-text-secondary);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);transition:color var(--dur-instant) var(--ease-out)}._navLink_an53m_38:hover{color:var(--color-text)}._activeNavLink_an53m_52{color:var(--color-text);font-weight:600}._right_an53m_57{display:flex;align-items:center;gap:var(--space-3)}._searchInput_an53m_63{display:flex;align-items:center;gap:var(--space-2);padding:4px 8px;background-color:var(--color-surface-subtle);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:13px;color:var(--color-text-secondary)}._kbdHint_an53m_75{font-family:var(--font-mono);font-size:11px;background:var(--color-surface-inset);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:0 4px;color:var(--color-text-tertiary)}:root{--color-canvas: #FBFBFA;--color-surface: #FFFFFF;--color-surface-subtle: #F7F7F6;--color-surface-inset: #F1F1EF;--color-surface-raised: #FFFFFF;--color-border-subtle: #EDEDEA;--color-border: #E2E2DE;--color-border-strong: #CBCBC5;--color-text: #18181B;--color-text-secondary: #57575F;--color-text-tertiary: #8A8A92;--color-text-disabled: #B6B6BC;--color-overlay: rgba(24, 24, 27, .32);--color-accent: #1A56DB;--color-accent-hover: #1546B4;--color-accent-active: #113A96;--color-accent-subtle: #EBF1FE;--color-accent-border: #C3D6FB;--color-accent-text: #1546B4;--color-steady-dot: #16A34A;--color-steady-text: #146C33;--color-steady-bg: #F1FDF4;--color-steady-border: #BBF0CC;--color-changed-dot: #F59E0B;--color-changed-text: #96590C;--color-changed-bg: #FFFAEB;--color-changed-border: #FBE3A6;--color-inconclusive-dot: #3B82F6;--color-inconclusive-text: #1D4ED8;--color-inconclusive-bg: #EFF5FF;--color-inconclusive-border: #C2D8FC;--color-warming-dot: #8A8A92;--color-warming-text: #57575F;--color-warming-bg: #F5F5F3;--color-warming-border: #E2E2DE;--color-error-dot: #DC2626;--color-error-text: #A81E1E;--color-error-bg: #FEF2F2;--color-error-border: #F8CFCF;--chart-1: #1A56DB;--chart-2: #0E9F6E;--chart-3: #F59E0B;--chart-4: #0891B2;--chart-5: #C2410C;--chart-6: #64748B;--space-0: 0;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--space-20: 80px;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 10px;--radius-xl: 14px;--radius-full: 9999px;--shadow-xs: 0 1px 2px rgba(24, 24, 27, .04);--shadow-sm: 0 1px 3px rgba(24, 24, 27, .06), 0 1px 2px rgba(24, 24, 27, .04);--shadow-md: 0 4px 12px rgba(24, 24, 27, .07), 0 1px 3px rgba(24, 24, 27, .05);--shadow-lg: 0 12px 28px rgba(24, 24, 27, .1), 0 2px 6px rgba(24, 24, 27, .05);--shadow-xl: 0 24px 56px rgba(24, 24, 27, .14), 0 4px 10px rgba(24, 24, 27, .06);--font-sans: "Inter var", -apple-system, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, "SF Mono", monospace;--dur-instant: 80ms;--dur-fast: .14s;--dur-base: .2s;--dur-slow: .3s;--dur-slower: .46s;--ease-out: cubic-bezier(.22, 1, .36, 1);--ease-in: cubic-bezier(.5, 0, .75, 0);--ease-inout: cubic-bezier(.65, 0, .35, 1);--layout-max: 1120px;--layout-gutter: 24px;--header-height: 56px;--drawer-width: 560px;--focus-ring: 0 0 0 2px #FFFFFF, 0 0 0 4px var(--color-accent)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--color-canvas);color:var(--color-text);font-family:var(--font-sans)}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit;color:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}button{cursor:pointer;background:none;border:none}a{color:inherit;text-decoration:none}ul,ol{list-style:none}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;src:url(/fonts/InterVariable.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-weight:400;font-display:swap;font-style:normal;src:url(/fonts/JetBrainsMono-Regular.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-weight:500 600;font-display:swap;font-style:normal;src:url(/fonts/JetBrainsMono-Medium.woff2) format("woff2")}.text-display{font-family:var(--font-sans);font-size:32px;line-height:40px;font-weight:600;letter-spacing:-.02em}.text-h1{font-family:var(--font-sans);font-size:24px;line-height:32px;font-weight:600;letter-spacing:-.015em}.text-h2{font-family:var(--font-sans);font-size:18px;line-height:26px;font-weight:600;letter-spacing:-.01em}.text-h3{font-family:var(--font-sans);font-size:15px;line-height:22px;font-weight:600;letter-spacing:-.005em}.text-body{font-family:var(--font-sans);font-size:14px;line-height:22px;font-weight:400;letter-spacing:0}.text-body-md{font-family:var(--font-sans);font-size:14px;line-height:22px;font-weight:500;letter-spacing:0}.text-sm{font-family:var(--font-sans);font-size:13px;line-height:20px;font-weight:400;letter-spacing:0}.text-xs{font-family:var(--font-sans);font-size:12px;line-height:18px;font-weight:500;letter-spacing:.005em}.text-micro{font-family:var(--font-sans);font-size:11px;line-height:16px;font-weight:500;letter-spacing:.02em;text-transform:uppercase;color:var(--color-text-tertiary)}.text-mono-lg{font-family:var(--font-mono);font-size:20px;line-height:28px;font-weight:600;letter-spacing:-.01em;font-variant-numeric:tabular-nums}.text-mono{font-family:var(--font-mono);font-size:13px;line-height:20px;font-weight:400;letter-spacing:0;font-variant-numeric:tabular-nums}.text-mono-sm{font-family:var(--font-mono);font-size:12px;line-height:18px;font-weight:400;letter-spacing:0;font-variant-numeric:tabular-nums}.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}:focus-visible{outline:none;box-shadow:var(--focus-ring)}body{background-color:var(--color-canvas);color:var(--color-text);min-height:100vh;display:flex;flex-direction:column}#root{display:flex;flex-direction:column;min-height:100vh} diff --git a/vitals/console/static/assets/motion-l0sNRNKZ.js b/vitals/console/static/assets/motion-l0sNRNKZ.js new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/vitals/console/static/assets/motion-l0sNRNKZ.js @@ -0,0 +1 @@ + diff --git a/vitals/console/static/assets/query--gEBzra4.js b/vitals/console/static/assets/query--gEBzra4.js new file mode 100644 index 0000000..d75fb3a --- /dev/null +++ b/vitals/console/static/assets/query--gEBzra4.js @@ -0,0 +1,9 @@ +var Tt=e=>{throw TypeError(e)};var Pt=(e,t,s)=>t.has(e)||Tt("Cannot "+s);var i=(e,t,s)=>(Pt(e,t,"read from private field"),s?s.call(e):t.get(e)),c=(e,t,s)=>t.has(e)?Tt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,s),u=(e,t,s,r)=>(Pt(e,t,"write to private field"),r?r.call(e,s):t.set(e,s),s),O=(e,t,s)=>(Pt(e,t,"access private method"),s);var mt=(e,t,s,r)=>({set _(n){u(e,t,n,s)},get _(){return i(e,t,r)}});import{r as Qt}from"./vendor-e46xhu4s.js";var Vt={exports:{}},bt={};/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var ne=Qt,ae=Symbol.for("react.element"),ue=Symbol.for("react.fragment"),oe=Object.prototype.hasOwnProperty,he=ne.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,ce={key:!0,ref:!0,__self:!0,__source:!0};function Wt(e,t,s){var r,n={},a=null,l=null;s!==void 0&&(a=""+s),t.key!==void 0&&(a=""+t.key),t.ref!==void 0&&(l=t.ref);for(r in t)oe.call(t,r)&&!ce.hasOwnProperty(r)&&(n[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)n[r]===void 0&&(n[r]=t[r]);return{$$typeof:ae,type:e,key:a,ref:l,props:n,_owner:he.current}}bt.Fragment=ue;bt.jsx=Wt;bt.jsxs=Wt;Vt.exports=bt;var le=Vt.exports,wt=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},W,G,st,kt,de=(kt=class extends wt{constructor(){super();c(this,W);c(this,G);c(this,st);u(this,st,t=>{if(typeof window<"u"&&window.addEventListener){const s=()=>t();return window.addEventListener("visibilitychange",s,!1),()=>{window.removeEventListener("visibilitychange",s)}}})}onSubscribe(){i(this,G)||this.setEventListener(i(this,st))}onUnsubscribe(){var t;this.hasListeners()||((t=i(this,G))==null||t.call(this),u(this,G,void 0))}setEventListener(t){var s;u(this,st,t),(s=i(this,G))==null||s.call(this),u(this,G,t(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(t){i(this,W)!==t&&(u(this,W,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(s=>{s(t)})}isFocused(){var t;return typeof i(this,W)=="boolean"?i(this,W):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},W=new WeakMap,G=new WeakMap,st=new WeakMap,kt),Yt=new de,fe={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},N,Mt,Lt,ye=(Lt=class{constructor(){c(this,N,fe);c(this,Mt,!1)}setTimeoutProvider(e){u(this,N,e)}setTimeout(e,t){return i(this,N).setTimeout(e,t)}clearTimeout(e){i(this,N).clearTimeout(e)}setInterval(e,t){return i(this,N).setInterval(e,t)}clearInterval(e){i(this,N).clearInterval(e)}},N=new WeakMap,Mt=new WeakMap,Lt),St=new ye;function pe(e){setTimeout(e,0)}var me=typeof window>"u"||"Deno"in globalThis;function x(){}function ve(e,t){return typeof e=="function"?e(t):e}function ge(e){return typeof e=="number"&&e>=0&&e!==1/0}function be(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Ft(e,t){return typeof e=="function"?e(t):e}function we(e,t){return typeof e=="function"?e(t):e}function Rt(e,t){const{type:s="all",exact:r,fetchStatus:n,predicate:a,queryKey:l,stale:o}=e;if(l){if(r){if(t.queryHash!==At(l,t.options))return!1}else if(!lt(t.queryKey,l))return!1}if(s!=="all"){const d=t.isActive();if(s==="active"&&!d||s==="inactive"&&d)return!1}return!(typeof o=="boolean"&&t.isStale()!==o||n&&n!==t.state.fetchStatus||a&&!a(t))}function jt(e,t){const{exact:s,status:r,predicate:n,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(s){if(dt(t.options.mutationKey)!==dt(a))return!1}else if(!lt(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||n&&!n(t))}function At(e,t){return((t==null?void 0:t.queryKeyHashFn)||dt)(e)}function dt(e){return JSON.stringify(e,(t,s)=>Ot(s)?Object.keys(s).sort().reduce((r,n)=>(r[n]=s[n],r),{}):s)}function lt(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(Array.isArray(e)&&Array.isArray(t)){for(let r=0;r500)return t;const r=xt(e)&&xt(t);if(!r&&!(Ot(e)&&Ot(t)))return t;const a=(r?e:Object.keys(e)).length,l=r?t:Object.keys(t),o=l.length,d=r?new Array(o):{};let M=0;for(let w=0;w{St.setTimeout(t,e)})}function Fe(e,t,s){return typeof s.structuralSharing=="function"?s.structuralSharing(e,t):s.structuralSharing!==!1?Zt(e,t):t}function Oe(e,t,s=0){const r=[...e,t];return s&&r.length>s?r.slice(1):r}function Ce(e,t,s=0){const r=[t,...e];return s&&r.length>s?r.slice(0,-1):r}var Et=Symbol();function Xt(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===Et?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function Me(e,t,s){let r=!1,n;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(n??(n=t()),r||(r=!0,n.aborted?s():n.addEventListener("abort",s,{once:!0})),n)}),e}var te=(()=>{let e=()=>me;return{isServer(){return e()},setIsServer(t){e=t}}})();function Qe(){let e,t;const s=new Promise((n,a)=>{e=n,t=a});s.status="pending",s.catch(()=>{});function r(n){Object.assign(s,n),delete s.resolve,delete s.reject}return s.resolve=n=>{r({status:"fulfilled",value:n}),e(n)},s.reject=n=>{r({status:"rejected",reason:n}),t(n)},s}var Ae=pe;function Ee(){let e=[],t=0,s=o=>{o()},r=o=>{o()},n=Ae;const a=o=>{t?e.push(o):n(()=>{s(o)})},l=()=>{const o=e;e=[],o.length&&n(()=>{r(()=>{o.forEach(d=>{s(d)})})})};return{batch:o=>{let d;t++;try{d=o()}finally{t--,t||l()}return d},batchCalls:o=>(...d)=>{a(()=>{o(...d)})},schedule:a,setNotifyFunction:o=>{s=o},setBatchNotifyFunction:o=>{r=o},setScheduler:o=>{n=o}}}var D=Ee(),rt,B,it,Ht,De=(Ht=class extends wt{constructor(){super();c(this,rt,!0);c(this,B);c(this,it);u(this,it,t=>{if(typeof window<"u"&&window.addEventListener){const s=()=>t(!0),r=()=>t(!1);return window.addEventListener("online",s,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",r)}}})}onSubscribe(){i(this,B)||this.setEventListener(i(this,it))}onUnsubscribe(){var t;this.hasListeners()||((t=i(this,B))==null||t.call(this),u(this,B,void 0))}setEventListener(t){var s;u(this,it,t),(s=i(this,B))==null||s.call(this),u(this,B,t(this.setOnline.bind(this)))}setOnline(t){i(this,rt)!==t&&(u(this,rt,t),this.listeners.forEach(r=>{r(t)}))}isOnline(){return i(this,rt)}},rt=new WeakMap,B=new WeakMap,it=new WeakMap,Ht),gt=new De;function qe(e){return Math.min(1e3*2**e,3e4)}function ee(e){return(e??"online")==="online"?gt.isOnline():!0}var Ct=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function se(e){let t=!1,s=0,r;const n=Qe(),a=()=>n.status!=="pending",l=f=>{var g;if(!a()){const m=new Ct(f);v(m),(g=e.onCancel)==null||g.call(e,m)}},o=()=>{t=!0},d=()=>{t=!1},M=()=>Yt.isFocused()&&(e.networkMode==="always"||gt.isOnline())&&e.canRun(),w=()=>ee(e.networkMode)&&e.canRun(),P=f=>{a()||(r==null||r(),n.resolve(f))},v=f=>{a()||(r==null||r(),n.reject(f))},S=()=>new Promise(f=>{var g;r=m=>{(a()||M())&&f(m)},(g=e.onPause)==null||g.call(e)}).then(()=>{var f;r=void 0,a()||(f=e.onContinue)==null||f.call(e)}),Q=()=>{if(a())return;let f;const g=s===0?e.initialPromise:void 0;try{f=g??e.fn()}catch(m){f=Promise.reject(m)}Promise.resolve(f).then(P).catch(m=>{var j;if(a())return;const q=e.retry??(te.isServer()?0:3),p=e.retryDelay??qe,h=typeof p=="function"?p(s,m):p,A=q===!0||typeof q=="number"&&sM()?void 0:S()).then(()=>{t?v(m):Q()})})};return{promise:n,status:()=>n.status,cancel:l,continue:()=>(r==null||r(),n),cancelRetry:o,continueRetry:d,canStart:w,start:()=>(w()?Q():S().then(Q),n)}}var Y,Gt,re=(Gt=class{constructor(){c(this,Y)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),ge(this.gcTime)&&u(this,Y,St.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(te.isServer()?1/0:5*60*1e3))}clearGcTimeout(){i(this,Y)!==void 0&&(St.clearTimeout(i(this,Y)),u(this,Y,void 0))}},Y=new WeakMap,Gt);function Te(e){return{onFetch:(t,s)=>{var w,P,v,S,Q;const r=t.options,n=(v=(P=(w=t.fetchOptions)==null?void 0:w.meta)==null?void 0:P.fetchMore)==null?void 0:v.direction,a=((S=t.state.data)==null?void 0:S.pages)||[],l=((Q=t.state.data)==null?void 0:Q.pageParams)||[];let o={pages:[],pageParams:[]},d=0;const M=async()=>{let f=!1;const g=p=>{Me(p,()=>t.signal,()=>f=!0)},m=Xt(t.options,t.fetchOptions),q=async(p,h,A)=>{if(f)return Promise.reject(t.signal.reason);if(h==null&&p.pages.length)return Promise.resolve(p);const V=(()=>{const qt={client:t.client,queryKey:t.queryKey,pageParam:h,direction:A?"backward":"forward",meta:t.options.meta};return g(qt),qt})(),F=await m(V),{maxPages:E}=t.options,Dt=A?Ce:Oe;return{pages:Dt(p.pages,F,E),pageParams:Dt(p.pageParams,h,E)}};if(n&&a.length){const p=n==="backward",h=p?Re:Ut,A={pages:a,pageParams:l},j=h(r,A);o=await q(A,j,p)}else{const p=e??a.length;do{const h=d===0?l[0]??r.initialPageParam:Ut(r,o);if(d>0&&h==null)break;o=await q(o,h),d++}while(d{var f,g;return(g=(f=t.options).persister)==null?void 0:g.call(f,M,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},s)}:t.fetchFn=M}}}function Ut(e,{pages:t,pageParams:s}){const r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,s[r],s):void 0}function Re(e,{pages:t,pageParams:s}){var r;return t.length>0?(r=e.getPreviousPageParam)==null?void 0:r.call(e,t[0],t,s[0],s):void 0}var nt,Z,at,R,X,b,ft,tt,T,ie,k,Nt,je=(Nt=class extends re{constructor(t){super();c(this,T);c(this,nt);c(this,Z);c(this,at);c(this,R);c(this,X);c(this,b);c(this,ft);c(this,tt);u(this,tt,!1),u(this,ft,t.defaultOptions),this.setOptions(t.options),this.observers=[],u(this,X,t.client),u(this,R,i(this,X).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,u(this,Z,_t(this.options)),this.state=t.state??i(this,Z),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return i(this,nt)}get promise(){var t;return(t=i(this,b))==null?void 0:t.promise}setOptions(t){if(this.options={...i(this,ft),...t},t!=null&&t._type&&u(this,nt,t._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const s=_t(this.options);s.data!==void 0&&(this.setState(Kt(s.data,s.dataUpdatedAt)),u(this,Z,s))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&i(this,R).remove(this)}setData(t,s){const r=Fe(this.state.data,t,this.options);return O(this,T,k).call(this,{data:r,type:"success",dataUpdatedAt:s==null?void 0:s.updatedAt,manual:s==null?void 0:s.manual}),r}setState(t){O(this,T,k).call(this,{type:"setState",state:t})}cancel(t){var r,n;const s=(r=i(this,b))==null?void 0:r.promise;return(n=i(this,b))==null||n.cancel(t),s?s.then(x).catch(x):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return i(this,Z)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(t=>we(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===Et||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>Ft(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!be(this.state.dataUpdatedAt,t)}onFocus(){var s;const t=this.observers.find(r=>r.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(s=i(this,b))==null||s.continue()}onOnline(){var s;const t=this.observers.find(r=>r.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(s=i(this,b))==null||s.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),i(this,R).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(s=>s!==t),this.observers.length||(i(this,b)&&(i(this,tt)||O(this,T,ie).call(this)?i(this,b).cancel({revert:!0}):i(this,b).cancelRetry()),this.scheduleGc()),i(this,R).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||O(this,T,k).call(this,{type:"invalidate"})}async fetch(t,s){var M,w,P,v,S,Q,f,g,m,q,p;if(this.state.fetchStatus!=="idle"&&((M=i(this,b))==null?void 0:M.status())!=="rejected"){if(this.state.data!==void 0&&(s!=null&&s.cancelRefetch))this.cancel({silent:!0});else if(i(this,b))return i(this,b).continueRetry(),i(this,b).promise}if(t&&this.setOptions(t),!this.options.queryFn){const h=this.observers.find(A=>A.options.queryFn);h&&this.setOptions(h.options)}const r=new AbortController,n=h=>{Object.defineProperty(h,"signal",{enumerable:!0,get:()=>(u(this,tt,!0),r.signal)})},a=()=>{const h=Xt(this.options,s),j=(()=>{const V={client:i(this,X),queryKey:this.queryKey,meta:this.meta};return n(V),V})();return u(this,tt,!1),this.options.persister?this.options.persister(h,j,this):h(j)},o=(()=>{const h={fetchOptions:s,options:this.options,queryKey:this.queryKey,client:i(this,X),state:this.state,fetchFn:a};return n(h),h})(),d=i(this,nt)==="infinite"?Te(this.options.pages):this.options.behavior;d==null||d.onFetch(o,this),u(this,at,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((w=o.fetchOptions)==null?void 0:w.meta))&&O(this,T,k).call(this,{type:"fetch",meta:(P=o.fetchOptions)==null?void 0:P.meta}),u(this,b,se({initialPromise:s==null?void 0:s.initialPromise,fn:o.fetchFn,onCancel:h=>{h instanceof Ct&&h.revert&&this.setState({...i(this,at),fetchStatus:"idle"}),r.abort()},onFail:(h,A)=>{O(this,T,k).call(this,{type:"failed",failureCount:h,error:A})},onPause:()=>{O(this,T,k).call(this,{type:"pause"})},onContinue:()=>{O(this,T,k).call(this,{type:"continue"})},retry:o.options.retry,retryDelay:o.options.retryDelay,networkMode:o.options.networkMode,canRun:()=>!0}));try{const h=await i(this,b).start();if(h===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(h),(S=(v=i(this,R).config).onSuccess)==null||S.call(v,h,this),(f=(Q=i(this,R).config).onSettled)==null||f.call(Q,h,this.state.error,this),h}catch(h){if(h instanceof Ct){if(h.silent)return i(this,b).promise;if(h.revert){if(this.state.data===void 0)throw h;return this.state.data}}throw O(this,T,k).call(this,{type:"error",error:h}),(m=(g=i(this,R).config).onError)==null||m.call(g,h,this),(p=(q=i(this,R).config).onSettled)==null||p.call(q,this.state.data,h,this),h}finally{this.scheduleGc()}}},nt=new WeakMap,Z=new WeakMap,at=new WeakMap,R=new WeakMap,X=new WeakMap,b=new WeakMap,ft=new WeakMap,tt=new WeakMap,T=new WeakSet,ie=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},k=function(t){const s=r=>{switch(t.type){case"failed":return{...r,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...xe(r.data,this.options),fetchMeta:t.meta??null};case"success":const n={...r,...Kt(t.data,t.dataUpdatedAt),dataUpdateCount:r.dataUpdateCount+1,...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return u(this,at,t.manual?n:void 0),n;case"error":const a=t.error;return{...r,error:a,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:a,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...t.state}}};this.state=s(this.state),D.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),i(this,R).notify({query:this,type:"updated",action:t})})},Nt);function xe(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:ee(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function Kt(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:"success"}}function _t(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,s=t!==void 0,r=s?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:s?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:s?"success":"pending",fetchStatus:"idle"}}var yt,U,C,et,K,H,Bt,Ie=(Bt=class extends re{constructor(t){super();c(this,K);c(this,yt);c(this,U);c(this,C);c(this,et);u(this,yt,t.client),this.mutationId=t.mutationId,u(this,C,t.mutationCache),u(this,U,[]),this.state=t.state||Ue(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){i(this,U).includes(t)||(i(this,U).push(t),this.clearGcTimeout(),i(this,C).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){u(this,U,i(this,U).filter(s=>s!==t)),this.scheduleGc(),i(this,C).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){i(this,U).length||(this.state.status==="pending"?this.scheduleGc():i(this,C).remove(this))}continue(){var t;return((t=i(this,et))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var l,o,d,M,w,P,v,S,Q,f,g,m,q,p,h,A,j,V;const s=()=>{O(this,K,H).call(this,{type:"continue"})},r={client:i(this,yt),meta:this.options.meta,mutationKey:this.options.mutationKey};u(this,et,se({fn:()=>this.options.mutationFn?this.options.mutationFn(t,r):Promise.reject(new Error("No mutationFn found")),onFail:(F,E)=>{O(this,K,H).call(this,{type:"failed",failureCount:F,error:E})},onPause:()=>{O(this,K,H).call(this,{type:"pause"})},onContinue:s,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>i(this,C).canRun(this)}));const n=this.state.status==="pending",a=!i(this,et).canStart();try{if(n)s();else{O(this,K,H).call(this,{type:"pending",variables:t,isPaused:a}),i(this,C).config.onMutate&&await i(this,C).config.onMutate(t,this,r);const E=await((o=(l=this.options).onMutate)==null?void 0:o.call(l,t,r));E!==this.state.context&&O(this,K,H).call(this,{type:"pending",context:E,variables:t,isPaused:a})}const F=await i(this,et).start();return await((M=(d=i(this,C).config).onSuccess)==null?void 0:M.call(d,F,t,this.state.context,this,r)),await((P=(w=this.options).onSuccess)==null?void 0:P.call(w,F,t,this.state.context,r)),await((S=(v=i(this,C).config).onSettled)==null?void 0:S.call(v,F,null,this.state.variables,this.state.context,this,r)),await((f=(Q=this.options).onSettled)==null?void 0:f.call(Q,F,null,t,this.state.context,r)),O(this,K,H).call(this,{type:"success",data:F}),F}catch(F){try{await((m=(g=i(this,C).config).onError)==null?void 0:m.call(g,F,t,this.state.context,this,r))}catch(E){Promise.reject(E)}try{await((p=(q=this.options).onError)==null?void 0:p.call(q,F,t,this.state.context,r))}catch(E){Promise.reject(E)}try{await((A=(h=i(this,C).config).onSettled)==null?void 0:A.call(h,void 0,F,this.state.variables,this.state.context,this,r))}catch(E){Promise.reject(E)}try{await((V=(j=this.options).onSettled)==null?void 0:V.call(j,void 0,F,t,this.state.context,r))}catch(E){Promise.reject(E)}throw O(this,K,H).call(this,{type:"error",error:F}),F}finally{i(this,C).runNext(this)}}},yt=new WeakMap,U=new WeakMap,C=new WeakMap,et=new WeakMap,K=new WeakSet,H=function(t){const s=r=>{switch(t.type){case"failed":return{...r,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...r,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:t.error,failureCount:r.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=s(this.state),D.batch(()=>{i(this,U).forEach(r=>{r.onMutationUpdate(t)}),i(this,C).notify({mutation:this,type:"updated",action:t})})},Bt);function Ue(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var L,I,pt,$t,Ke=($t=class extends wt{constructor(t={}){super();c(this,L);c(this,I);c(this,pt);this.config=t,u(this,L,new Set),u(this,I,new Map),u(this,pt,0)}build(t,s,r){const n=new Ie({client:t,mutationCache:this,mutationId:++mt(this,pt)._,options:t.defaultMutationOptions(s),state:r});return this.add(n),n}add(t){i(this,L).add(t);const s=vt(t);if(typeof s=="string"){const r=i(this,I).get(s);r?r.push(t):i(this,I).set(s,[t])}this.notify({type:"added",mutation:t})}remove(t){if(i(this,L).delete(t)){const s=vt(t);if(typeof s=="string"){const r=i(this,I).get(s);if(r)if(r.length>1){const n=r.indexOf(t);n!==-1&&r.splice(n,1)}else r[0]===t&&i(this,I).delete(s)}}this.notify({type:"removed",mutation:t})}canRun(t){const s=vt(t);if(typeof s=="string"){const r=i(this,I).get(s),n=r==null?void 0:r.find(a=>a.state.status==="pending");return!n||n===t}else return!0}runNext(t){var r;const s=vt(t);if(typeof s=="string"){const n=(r=i(this,I).get(s))==null?void 0:r.find(a=>a!==t&&a.state.isPaused);return(n==null?void 0:n.continue())??Promise.resolve()}else return Promise.resolve()}clear(){D.batch(()=>{i(this,L).forEach(t=>{this.notify({type:"removed",mutation:t})}),i(this,L).clear(),i(this,I).clear()})}getAll(){return Array.from(i(this,L))}find(t){const s={exact:!0,...t};return this.getAll().find(r=>jt(s,r))}findAll(t={}){return this.getAll().filter(s=>jt(t,s))}notify(t){D.batch(()=>{this.listeners.forEach(s=>{s(t)})})}resumePausedMutations(){const t=this.getAll().filter(s=>s.state.isPaused);return D.batch(()=>Promise.all(t.map(s=>s.continue().catch(x))))}},L=new WeakMap,I=new WeakMap,pt=new WeakMap,$t);function vt(e){var t;return(t=e.options.scope)==null?void 0:t.id}var _,zt,_e=(zt=class extends wt{constructor(t={}){super();c(this,_);this.config=t,u(this,_,new Map)}build(t,s,r){const n=s.queryKey,a=s.queryHash??At(n,s);let l=this.get(a);return l||(l=new je({client:t,queryKey:n,queryHash:a,options:t.defaultQueryOptions(s),state:r,defaultOptions:t.getQueryDefaults(n)}),this.add(l)),l}add(t){i(this,_).has(t.queryHash)||(i(this,_).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const s=i(this,_).get(t.queryHash);s&&(t.destroy(),s===t&&i(this,_).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){D.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return i(this,_).get(t)}getAll(){return[...i(this,_).values()]}find(t){const s={exact:!0,...t};return this.getAll().find(r=>Rt(s,r))}findAll(t={}){const s=this.getAll();return Object.keys(t).length>0?s.filter(r=>Rt(t,r)):s}notify(t){D.batch(()=>{this.listeners.forEach(s=>{s(t)})})}onFocus(){D.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){D.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},_=new WeakMap,zt),y,$,z,ut,ot,J,ht,ct,Jt,Ge=(Jt=class{constructor(e={}){c(this,y);c(this,$);c(this,z);c(this,ut);c(this,ot);c(this,J);c(this,ht);c(this,ct);u(this,y,e.queryCache||new _e),u(this,$,e.mutationCache||new Ke),u(this,z,e.defaultOptions||{}),u(this,ut,new Map),u(this,ot,new Map),u(this,J,0)}mount(){mt(this,J)._++,i(this,J)===1&&(u(this,ht,Yt.subscribe(async e=>{e&&(await this.resumePausedMutations(),i(this,y).onFocus())})),u(this,ct,gt.subscribe(async e=>{e&&(await this.resumePausedMutations(),i(this,y).onOnline())})))}unmount(){var e,t;mt(this,J)._--,i(this,J)===0&&((e=i(this,ht))==null||e.call(this),u(this,ht,void 0),(t=i(this,ct))==null||t.call(this),u(this,ct,void 0))}isFetching(e){return i(this,y).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return i(this,$).findAll({...e,status:"pending"}).length}getQueryData(e){var s;const t=this.defaultQueryOptions({queryKey:e});return(s=i(this,y).get(t.queryHash))==null?void 0:s.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),s=i(this,y).build(this,t),r=s.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&s.isStaleByTime(Ft(t.staleTime,s))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return i(this,y).findAll(e).map(({queryKey:t,state:s})=>{const r=s.data;return[t,r]})}setQueryData(e,t,s){const r=this.defaultQueryOptions({queryKey:e}),n=i(this,y).get(r.queryHash),a=n==null?void 0:n.state.data,l=ve(t,a);if(l!==void 0)return i(this,y).build(this,r).setData(l,{...s,manual:!0})}setQueriesData(e,t,s){return D.batch(()=>i(this,y).findAll(e).map(({queryKey:r})=>[r,this.setQueryData(r,t,s)]))}getQueryState(e){var s;const t=this.defaultQueryOptions({queryKey:e});return(s=i(this,y).get(t.queryHash))==null?void 0:s.state}removeQueries(e){const t=i(this,y);D.batch(()=>{t.findAll(e).forEach(s=>{t.remove(s)})})}resetQueries(e,t){const s=i(this,y);return D.batch(()=>(s.findAll(e).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const s={revert:!0,...t},r=D.batch(()=>i(this,y).findAll(e).map(n=>n.cancel(s)));return Promise.all(r).then(x).catch(x)}invalidateQueries(e,t={}){return D.batch(()=>(i(this,y).findAll(e).forEach(s=>{s.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const s={...t,cancelRefetch:t.cancelRefetch??!0},r=D.batch(()=>i(this,y).findAll(e).filter(n=>!n.isDisabled()&&!n.isStatic()).map(n=>{let a=n.fetch(void 0,s);return s.throwOnError||(a=a.catch(x)),n.state.fetchStatus==="paused"?Promise.resolve():a}));return Promise.all(r).then(x)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const s=i(this,y).build(this,t);return s.isStaleByTime(Ft(t.staleTime,s))?s.fetch(t):Promise.resolve(s.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(x).catch(x)}fetchInfiniteQuery(e){return e._type="infinite",this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(x).catch(x)}ensureInfiniteQueryData(e){return e._type="infinite",this.ensureQueryData(e)}resumePausedMutations(){return gt.isOnline()?i(this,$).resumePausedMutations():Promise.resolve()}getQueryCache(){return i(this,y)}getMutationCache(){return i(this,$)}getDefaultOptions(){return i(this,z)}setDefaultOptions(e){u(this,z,e)}setQueryDefaults(e,t){i(this,ut).set(dt(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...i(this,ut).values()],s={};return t.forEach(r=>{lt(e,r.queryKey)&&Object.assign(s,r.defaultOptions)}),s}setMutationDefaults(e,t){i(this,ot).set(dt(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...i(this,ot).values()],s={};return t.forEach(r=>{lt(e,r.mutationKey)&&Object.assign(s,r.defaultOptions)}),s}defaultQueryOptions(e){if(e._defaulted)return e;const t={...i(this,z).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=At(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===Et&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...i(this,z).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){i(this,y).clear(),i(this,$).clear()}},y=new WeakMap,$=new WeakMap,z=new WeakMap,ut=new WeakMap,ot=new WeakMap,J=new WeakMap,ht=new WeakMap,ct=new WeakMap,Jt),ke=Qt.createContext(void 0),Ne=({client:e,children:t})=>(Qt.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),le.jsx(ke.Provider,{value:e,children:t}));export{Ge as Q,Ne as a,le as j}; diff --git a/vitals/console/static/assets/vendor-e46xhu4s.js b/vitals/console/static/assets/vendor-e46xhu4s.js new file mode 100644 index 0000000..1fa4f6c --- /dev/null +++ b/vitals/console/static/assets/vendor-e46xhu4s.js @@ -0,0 +1,60 @@ +function sc(e,t){for(var n=0;nr[l]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}function cc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fc={exports:{}},Q={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var cl=Symbol.for("react.element"),np=Symbol.for("react.portal"),rp=Symbol.for("react.fragment"),lp=Symbol.for("react.strict_mode"),ip=Symbol.for("react.profiler"),op=Symbol.for("react.provider"),up=Symbol.for("react.context"),ap=Symbol.for("react.forward_ref"),sp=Symbol.for("react.suspense"),cp=Symbol.for("react.memo"),fp=Symbol.for("react.lazy"),Ma=Symbol.iterator;function dp(e){return e===null||typeof e!="object"?null:(e=Ma&&e[Ma]||e["@@iterator"],typeof e=="function"?e:null)}var dc={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},pc=Object.assign,hc={};function fr(e,t,n){this.props=e,this.context=t,this.refs=hc,this.updater=n||dc}fr.prototype.isReactComponent={};fr.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};fr.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function mc(){}mc.prototype=fr.prototype;function wu(e,t,n){this.props=e,this.context=t,this.refs=hc,this.updater=n||dc}var Su=wu.prototype=new mc;Su.constructor=wu;pc(Su,fr.prototype);Su.isPureReactComponent=!0;var za=Array.isArray,vc=Object.prototype.hasOwnProperty,Eu={current:null},yc={key:!0,ref:!0,__self:!0,__source:!0};function gc(e,t,n){var r,l={},i=null,o=null;if(t!=null)for(r in t.ref!==void 0&&(o=t.ref),t.key!==void 0&&(i=""+t.key),t)vc.call(t,r)&&!yc.hasOwnProperty(r)&&(l[r]=t[r]);var u=arguments.length-2;if(u===1)l.children=n;else if(1>>1,te=T[ee];if(0>>1;eel(ze,H))Oel(et,ze)?(T[ee]=et,T[Oe]=H,ee=Oe):(T[ee]=ze,T[Ke]=H,ee=Ke);else if(Oel(et,H))T[ee]=et,T[Oe]=H,ee=Oe;else break e}}return $}function l(T,$){var H=T.sortIndex-$.sortIndex;return H!==0?H:T.id-$.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var o=Date,u=o.now();e.unstable_now=function(){return o.now()-u}}var a=[],s=[],d=1,f=null,h=3,w=!1,k=!1,E=!1,D=typeof setTimeout=="function"?setTimeout:null,m=typeof clearTimeout=="function"?clearTimeout:null,c=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function v(T){for(var $=n(s);$!==null;){if($.callback===null)r(s);else if($.startTime<=T)r(s),$.sortIndex=$.expirationTime,t(a,$);else break;$=n(s)}}function x(T){if(E=!1,v(T),!k)if(n(a)!==null)k=!0,It(L);else{var $=n(s);$!==null&&Ut(x,$.startTime-T)}}function L(T,$){k=!1,E&&(E=!1,m(P),P=-1),w=!0;var H=h;try{for(v($),f=n(a);f!==null&&(!(f.expirationTime>$)||T&&!b());){var ee=f.callback;if(typeof ee=="function"){f.callback=null,h=f.priorityLevel;var te=ee(f.expirationTime<=$);$=e.unstable_now(),typeof te=="function"?f.callback=te:f===n(a)&&r(a),v($)}else r(a);f=n(a)}if(f!==null)var at=!0;else{var Ke=n(s);Ke!==null&&Ut(x,Ke.startTime-$),at=!1}return at}finally{f=null,h=H,w=!1}}var O=!1,y=null,P=-1,B=5,M=-1;function b(){return!(e.unstable_now()-MT||125ee?(T.sortIndex=H,t(s,T),n(a)===null&&T===n(s)&&(E?(m(P),P=-1):E=!0,Ut(x,H-ee))):(T.sortIndex=te,t(a,T),k||w||(k=!0,It(L))),T},e.unstable_shouldYield=b,e.unstable_wrapCallback=function(T){var $=h;return function(){var H=h;h=$;try{return T.apply(this,arguments)}finally{h=H}}}})(kc);Ec.exports=kc;var wp=Ec.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Sp=R,Ze=wp;function _(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Co=Object.prototype.hasOwnProperty,Ep=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Fa={},Ia={};function kp(e){return Co.call(Ia,e)?!0:Co.call(Fa,e)?!1:Ep.test(e)?Ia[e]=!0:(Fa[e]=!0,!1)}function xp(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Cp(e,t,n,r){if(t===null||typeof t>"u"||xp(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Ae(e,t,n,r,l,i,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=o}var Le={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Le[e]=new Ae(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Le[t]=new Ae(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Le[e]=new Ae(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Le[e]=new Ae(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Le[e]=new Ae(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Le[e]=new Ae(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Le[e]=new Ae(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Le[e]=new Ae(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Le[e]=new Ae(e,5,!1,e.toLowerCase(),null,!1,!1)});var xu=/[\-:]([a-z])/g;function Cu(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(xu,Cu);Le[t]=new Ae(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(xu,Cu);Le[t]=new Ae(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(xu,Cu);Le[t]=new Ae(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Le[e]=new Ae(e,1,!1,e.toLowerCase(),null,!1,!1)});Le.xlinkHref=new Ae("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Le[e]=new Ae(e,1,!1,e.toLowerCase(),null,!0,!0)});function Pu(e,t,n,r){var l=Le.hasOwnProperty(t)?Le[t]:null;(l!==null?l.type!==0:r||!(2u||l[o]!==i[u]){var a=` +`+l[o].replace(" at new "," at ");return e.displayName&&a.includes("")&&(a=a.replace("",e.displayName)),a}while(1<=o&&0<=u);break}}}finally{Ji=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Nr(e):""}function Pp(e){switch(e.tag){case 5:return Nr(e.type);case 16:return Nr("Lazy");case 13:return Nr("Suspense");case 19:return Nr("SuspenseList");case 0:case 2:case 15:return e=Zi(e.type,!1),e;case 11:return e=Zi(e.type.render,!1),e;case 1:return e=Zi(e.type,!0),e;default:return""}}function Lo(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case $n:return"Fragment";case Bn:return"Portal";case Po:return"Profiler";case _u:return"StrictMode";case _o:return"Suspense";case Ro:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Pc:return(e.displayName||"Context")+".Consumer";case Cc:return(e._context.displayName||"Context")+".Provider";case Ru:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Lu:return t=e.displayName||null,t!==null?t:Lo(e.type)||"Memo";case Vt:t=e._payload,e=e._init;try{return Lo(e(t))}catch{}}return null}function _p(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Lo(t);case 8:return t===_u?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function rn(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Rc(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Rp(e){var t=Rc(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(o){r=""+o,i.call(this,o)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Pl(e){e._valueTracker||(e._valueTracker=Rp(e))}function Lc(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Rc(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function ei(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function To(e,t){var n=t.checked;return fe({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function ja(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=rn(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Tc(e,t){t=t.checked,t!=null&&Pu(e,"checked",t,!1)}function No(e,t){Tc(e,t);var n=rn(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Do(e,t.type,n):t.hasOwnProperty("defaultValue")&&Do(e,t.type,rn(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Aa(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Do(e,t,n){(t!=="number"||ei(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Dr=Array.isArray;function qn(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=_l.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Qr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Fr={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Lp=["Webkit","ms","Moz","O"];Object.keys(Fr).forEach(function(e){Lp.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Fr[t]=Fr[e]})});function zc(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Fr.hasOwnProperty(e)&&Fr[e]?(""+t).trim():t+"px"}function Oc(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=zc(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var Tp=fe({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Oo(e,t){if(t){if(Tp[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(_(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(_(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(_(61))}if(t.style!=null&&typeof t.style!="object")throw Error(_(62))}}function Fo(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Io=null;function Tu(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Uo=null,bn=null,er=null;function Va(e){if(e=pl(e)){if(typeof Uo!="function")throw Error(_(280));var t=e.stateNode;t&&(t=Di(t),Uo(e.stateNode,e.type,t))}}function Fc(e){bn?er?er.push(e):er=[e]:bn=e}function Ic(){if(bn){var e=bn,t=er;if(er=bn=null,Va(e),t)for(e=0;e>>=0,e===0?32:31-(Bp(e)/$p|0)|0}var Rl=64,Ll=4194304;function Mr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function li(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,i=e.pingedLanes,o=n&268435455;if(o!==0){var u=o&~l;u!==0?r=Mr(u):(i&=o,i!==0&&(r=Mr(i)))}else o=n&~l,o!==0?r=Mr(o):i!==0&&(r=Mr(i));if(r===0)return 0;if(t!==0&&t!==r&&!(t&l)&&(l=r&-r,i=t&-t,l>=i||l===16&&(i&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function fl(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-ht(t),e[t]=n}function Qp(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Ur),Za=" ",qa=!1;function nf(e,t){switch(e){case"keyup":return wh.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function rf(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Vn=!1;function Eh(e,t){switch(e){case"compositionend":return rf(t);case"keypress":return t.which!==32?null:(qa=!0,Za);case"textInput":return e=t.data,e===Za&&qa?null:e;default:return null}}function kh(e,t){if(Vn)return e==="compositionend"||!Uu&&nf(e,t)?(e=ef(),Wl=Ou=Kt=null,Vn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ns(n)}}function af(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?af(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function sf(){for(var e=window,t=ei();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=ei(e.document)}return t}function ju(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Dh(e){var t=sf(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&af(n.ownerDocument.documentElement,n)){if(r!==null&&ju(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,i=Math.min(r.start,l);r=r.end===void 0?i:Math.min(r.end,l),!e.extend&&i>r&&(l=r,r=i,i=l),l=rs(n,i);var o=rs(n,r);l&&o&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==o.node||e.focusOffset!==o.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(o.node,o.offset)):(t.setEnd(o.node,o.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Hn=null,Ho=null,Ar=null,Wo=!1;function ls(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Wo||Hn==null||Hn!==ei(r)||(r=Hn,"selectionStart"in r&&ju(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ar&&Zr(Ar,r)||(Ar=r,r=ui(Ho,"onSelect"),0Kn||(e.current=Jo[Kn],Jo[Kn]=null,Kn--)}function le(e,t){Kn++,Jo[Kn]=e.current,e.current=t}var ln={},Me=un(ln),He=un(!1),Cn=ln;function ir(e,t){var n=e.type.contextTypes;if(!n)return ln;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},i;for(i in n)l[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function We(e){return e=e.childContextTypes,e!=null}function si(){oe(He),oe(Me)}function fs(e,t,n){if(Me.current!==ln)throw Error(_(168));le(Me,t),le(He,n)}function gf(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(_(108,_p(e)||"Unknown",l));return fe({},n,r)}function ci(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||ln,Cn=Me.current,le(Me,e),le(He,He.current),!0}function ds(e,t,n){var r=e.stateNode;if(!r)throw Error(_(169));n?(e=gf(e,t,Cn),r.__reactInternalMemoizedMergedChildContext=e,oe(He),oe(Me),le(Me,e)):oe(He),le(He,n)}var _t=null,Mi=!1,fo=!1;function wf(e){_t===null?_t=[e]:_t.push(e)}function Hh(e){Mi=!0,wf(e)}function an(){if(!fo&&_t!==null){fo=!0;var e=0,t=q;try{var n=_t;for(q=1;e>=o,l-=o,Rt=1<<32-ht(t)+l|n<P?(B=y,y=null):B=y.sibling;var M=h(m,y,v[P],x);if(M===null){y===null&&(y=B);break}e&&y&&M.alternate===null&&t(m,y),c=i(M,c,P),O===null?L=M:O.sibling=M,O=M,y=B}if(P===v.length)return n(m,y),ae&&hn(m,P),L;if(y===null){for(;PP?(B=y,y=null):B=y.sibling;var b=h(m,y,M.value,x);if(b===null){y===null&&(y=B);break}e&&y&&b.alternate===null&&t(m,y),c=i(b,c,P),O===null?L=b:O.sibling=b,O=b,y=B}if(M.done)return n(m,y),ae&&hn(m,P),L;if(y===null){for(;!M.done;P++,M=v.next())M=f(m,M.value,x),M!==null&&(c=i(M,c,P),O===null?L=M:O.sibling=M,O=M);return ae&&hn(m,P),L}for(y=r(m,y);!M.done;P++,M=v.next())M=w(y,m,P,M.value,x),M!==null&&(e&&M.alternate!==null&&y.delete(M.key===null?P:M.key),c=i(M,c,P),O===null?L=M:O.sibling=M,O=M);return e&&y.forEach(function(ne){return t(m,ne)}),ae&&hn(m,P),L}function D(m,c,v,x){if(typeof v=="object"&&v!==null&&v.type===$n&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case Cl:e:{for(var L=v.key,O=c;O!==null;){if(O.key===L){if(L=v.type,L===$n){if(O.tag===7){n(m,O.sibling),c=l(O,v.props.children),c.return=m,m=c;break e}}else if(O.elementType===L||typeof L=="object"&&L!==null&&L.$$typeof===Vt&&ms(L)===O.type){n(m,O.sibling),c=l(O,v.props),c.ref=Cr(m,O,v),c.return=m,m=c;break e}n(m,O);break}else t(m,O);O=O.sibling}v.type===$n?(c=xn(v.props.children,m.mode,x,v.key),c.return=m,m=c):(x=ql(v.type,v.key,v.props,null,m.mode,x),x.ref=Cr(m,c,v),x.return=m,m=x)}return o(m);case Bn:e:{for(O=v.key;c!==null;){if(c.key===O)if(c.tag===4&&c.stateNode.containerInfo===v.containerInfo&&c.stateNode.implementation===v.implementation){n(m,c.sibling),c=l(c,v.children||[]),c.return=m,m=c;break e}else{n(m,c);break}else t(m,c);c=c.sibling}c=So(v,m.mode,x),c.return=m,m=c}return o(m);case Vt:return O=v._init,D(m,c,O(v._payload),x)}if(Dr(v))return k(m,c,v,x);if(wr(v))return E(m,c,v,x);Fl(m,v)}return typeof v=="string"&&v!==""||typeof v=="number"?(v=""+v,c!==null&&c.tag===6?(n(m,c.sibling),c=l(c,v),c.return=m,m=c):(n(m,c),c=wo(v,m.mode,x),c.return=m,m=c),o(m)):n(m,c)}return D}var ur=xf(!0),Cf=xf(!1),pi=un(null),hi=null,Gn=null,Vu=null;function Hu(){Vu=Gn=hi=null}function Wu(e){var t=pi.current;oe(pi),e._currentValue=t}function bo(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function nr(e,t){hi=e,Vu=Gn=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Ve=!0),e.firstContext=null)}function it(e){var t=e._currentValue;if(Vu!==e)if(e={context:e,memoizedValue:t,next:null},Gn===null){if(hi===null)throw Error(_(308));Gn=e,hi.dependencies={lanes:0,firstContext:e}}else Gn=Gn.next=e;return t}var wn=null;function Qu(e){wn===null?wn=[e]:wn.push(e)}function Pf(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,Qu(t)):(n.next=l.next,l.next=n),t.interleaved=n,zt(e,r)}function zt(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Ht=!1;function Ku(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function _f(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Tt(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function bt(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,X&2){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,zt(e,n)}return l=r.interleaved,l===null?(t.next=t,Qu(r)):(t.next=l.next,l.next=t),r.interleaved=t,zt(e,n)}function Kl(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Du(e,n)}}function vs(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var o={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?l=i=o:i=i.next=o,n=n.next}while(n!==null);i===null?l=i=t:i=i.next=t}else l=i=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function mi(e,t,n,r){var l=e.updateQueue;Ht=!1;var i=l.firstBaseUpdate,o=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var a=u,s=a.next;a.next=null,o===null?i=s:o.next=s,o=a;var d=e.alternate;d!==null&&(d=d.updateQueue,u=d.lastBaseUpdate,u!==o&&(u===null?d.firstBaseUpdate=s:u.next=s,d.lastBaseUpdate=a))}if(i!==null){var f=l.baseState;o=0,d=s=a=null,u=i;do{var h=u.lane,w=u.eventTime;if((r&h)===h){d!==null&&(d=d.next={eventTime:w,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var k=e,E=u;switch(h=t,w=n,E.tag){case 1:if(k=E.payload,typeof k=="function"){f=k.call(w,f,h);break e}f=k;break e;case 3:k.flags=k.flags&-65537|128;case 0:if(k=E.payload,h=typeof k=="function"?k.call(w,f,h):k,h==null)break e;f=fe({},f,h);break e;case 2:Ht=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,h=l.effects,h===null?l.effects=[u]:h.push(u))}else w={eventTime:w,lane:h,tag:u.tag,payload:u.payload,callback:u.callback,next:null},d===null?(s=d=w,a=f):d=d.next=w,o|=h;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;h=u,u=h.next,h.next=null,l.lastBaseUpdate=h,l.shared.pending=null}}while(!0);if(d===null&&(a=f),l.baseState=a,l.firstBaseUpdate=s,l.lastBaseUpdate=d,t=l.shared.interleaved,t!==null){l=t;do o|=l.lane,l=l.next;while(l!==t)}else i===null&&(l.shared.lanes=0);Rn|=o,e.lanes=o,e.memoizedState=f}}function ys(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=ho.transition;ho.transition={};try{e(!1),t()}finally{q=n,ho.transition=r}}function Hf(){return ot().memoizedState}function Yh(e,t,n){var r=tn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Wf(e))Qf(t,n);else if(n=Pf(e,t,n,r),n!==null){var l=Ue();mt(n,e,r,l),Kf(n,t,r)}}function Xh(e,t,n){var r=tn(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Wf(e))Qf(t,l);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var o=t.lastRenderedState,u=i(o,n);if(l.hasEagerState=!0,l.eagerState=u,vt(u,o)){var a=t.interleaved;a===null?(l.next=l,Qu(t)):(l.next=a.next,a.next=l),t.interleaved=l;return}}catch{}finally{}n=Pf(e,t,l,r),n!==null&&(l=Ue(),mt(n,e,r,l),Kf(n,t,r))}}function Wf(e){var t=e.alternate;return e===ce||t!==null&&t===ce}function Qf(e,t){Br=yi=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Kf(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Du(e,n)}}var gi={readContext:it,useCallback:Te,useContext:Te,useEffect:Te,useImperativeHandle:Te,useInsertionEffect:Te,useLayoutEffect:Te,useMemo:Te,useReducer:Te,useRef:Te,useState:Te,useDebugValue:Te,useDeferredValue:Te,useTransition:Te,useMutableSource:Te,useSyncExternalStore:Te,useId:Te,unstable_isNewReconciler:!1},Gh={readContext:it,useCallback:function(e,t){return wt().memoizedState=[e,t===void 0?null:t],e},useContext:it,useEffect:ws,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Xl(4194308,4,jf.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Xl(4194308,4,e,t)},useInsertionEffect:function(e,t){return Xl(4,2,e,t)},useMemo:function(e,t){var n=wt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=wt();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Yh.bind(null,ce,e),[r.memoizedState,e]},useRef:function(e){var t=wt();return e={current:e},t.memoizedState=e},useState:gs,useDebugValue:ea,useDeferredValue:function(e){return wt().memoizedState=e},useTransition:function(){var e=gs(!1),t=e[0];return e=Kh.bind(null,e[1]),wt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=ce,l=wt();if(ae){if(n===void 0)throw Error(_(407));n=n()}else{if(n=t(),xe===null)throw Error(_(349));_n&30||Nf(r,t,n)}l.memoizedState=n;var i={value:n,getSnapshot:t};return l.queue=i,ws(Mf.bind(null,r,i,e),[e]),r.flags|=2048,il(9,Df.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=wt(),t=xe.identifierPrefix;if(ae){var n=Lt,r=Rt;n=(r&~(1<<32-ht(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=rl++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=o.createElement(n,{is:r.is}):(e=o.createElement(n),n==="select"&&(o=e,r.multiple?o.multiple=!0:r.size&&(o.size=r.size))):e=o.createElementNS(e,n),e[St]=t,e[el]=r,nd(e,t,!1,!1),t.stateNode=e;e:{switch(o=Fo(n,r),n){case"dialog":ie("cancel",e),ie("close",e),l=r;break;case"iframe":case"object":case"embed":ie("load",e),l=r;break;case"video":case"audio":for(l=0;lcr&&(t.flags|=128,r=!0,Pr(i,!1),t.lanes=4194304)}else{if(!r)if(e=vi(o),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Pr(i,!0),i.tail===null&&i.tailMode==="hidden"&&!o.alternate&&!ae)return Ne(t),null}else 2*me()-i.renderingStartTime>cr&&n!==1073741824&&(t.flags|=128,r=!0,Pr(i,!1),t.lanes=4194304);i.isBackwards?(o.sibling=t.child,t.child=o):(n=i.last,n!==null?n.sibling=o:t.child=o,i.last=o)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=me(),t.sibling=null,n=se.current,le(se,r?n&1|2:n&1),t):(Ne(t),null);case 22:case 23:return oa(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Ye&1073741824&&(Ne(t),t.subtreeFlags&6&&(t.flags|=8192)):Ne(t),null;case 24:return null;case 25:return null}throw Error(_(156,t.tag))}function rm(e,t){switch(Bu(t),t.tag){case 1:return We(t.type)&&si(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ar(),oe(He),oe(Me),Gu(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Xu(t),null;case 13:if(oe(se),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(_(340));or()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return oe(se),null;case 4:return ar(),null;case 10:return Wu(t.type._context),null;case 22:case 23:return oa(),null;case 24:return null;default:return null}}var Ul=!1,De=!1,lm=typeof WeakSet=="function"?WeakSet:Set,z=null;function Jn(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){he(e,t,r)}else n.current=null}function au(e,t,n){try{n()}catch(r){he(e,t,r)}}var Ns=!1;function im(e,t){if(Qo=ii,e=sf(),ju(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var o=0,u=-1,a=-1,s=0,d=0,f=e,h=null;t:for(;;){for(var w;f!==n||l!==0&&f.nodeType!==3||(u=o+l),f!==i||r!==0&&f.nodeType!==3||(a=o+r),f.nodeType===3&&(o+=f.nodeValue.length),(w=f.firstChild)!==null;)h=f,f=w;for(;;){if(f===e)break t;if(h===n&&++s===l&&(u=o),h===i&&++d===r&&(a=o),(w=f.nextSibling)!==null)break;f=h,h=f.parentNode}f=w}n=u===-1||a===-1?null:{start:u,end:a}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ko={focusedElem:e,selectionRange:n},ii=!1,z=t;z!==null;)if(t=z,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,z=e;else for(;z!==null;){t=z;try{var k=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(k!==null){var E=k.memoizedProps,D=k.memoizedState,m=t.stateNode,c=m.getSnapshotBeforeUpdate(t.elementType===t.type?E:ct(t.type,E),D);m.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var v=t.stateNode.containerInfo;v.nodeType===1?v.textContent="":v.nodeType===9&&v.documentElement&&v.removeChild(v.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(_(163))}}catch(x){he(t,t.return,x)}if(e=t.sibling,e!==null){e.return=t.return,z=e;break}z=t.return}return k=Ns,Ns=!1,k}function $r(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var i=l.destroy;l.destroy=void 0,i!==void 0&&au(t,n,i)}l=l.next}while(l!==r)}}function Fi(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function su(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function id(e){var t=e.alternate;t!==null&&(e.alternate=null,id(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[St],delete t[el],delete t[Go],delete t[$h],delete t[Vh])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function od(e){return e.tag===5||e.tag===3||e.tag===4}function Ds(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||od(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function cu(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=ai));else if(r!==4&&(e=e.child,e!==null))for(cu(e,t,n),e=e.sibling;e!==null;)cu(e,t,n),e=e.sibling}function fu(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(fu(e,t,n),e=e.sibling;e!==null;)fu(e,t,n),e=e.sibling}var _e=null,ft=!1;function Bt(e,t,n){for(n=n.child;n!==null;)ud(e,t,n),n=n.sibling}function ud(e,t,n){if(Et&&typeof Et.onCommitFiberUnmount=="function")try{Et.onCommitFiberUnmount(Ri,n)}catch{}switch(n.tag){case 5:De||Jn(n,t);case 6:var r=_e,l=ft;_e=null,Bt(e,t,n),_e=r,ft=l,_e!==null&&(ft?(e=_e,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):_e.removeChild(n.stateNode));break;case 18:_e!==null&&(ft?(e=_e,n=n.stateNode,e.nodeType===8?co(e.parentNode,n):e.nodeType===1&&co(e,n),Gr(e)):co(_e,n.stateNode));break;case 4:r=_e,l=ft,_e=n.stateNode.containerInfo,ft=!0,Bt(e,t,n),_e=r,ft=l;break;case 0:case 11:case 14:case 15:if(!De&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var i=l,o=i.destroy;i=i.tag,o!==void 0&&(i&2||i&4)&&au(n,t,o),l=l.next}while(l!==r)}Bt(e,t,n);break;case 1:if(!De&&(Jn(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){he(n,t,u)}Bt(e,t,n);break;case 21:Bt(e,t,n);break;case 22:n.mode&1?(De=(r=De)||n.memoizedState!==null,Bt(e,t,n),De=r):Bt(e,t,n);break;default:Bt(e,t,n)}}function Ms(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new lm),t.forEach(function(r){var l=hm.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function st(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=o),r&=~i}if(r=l,r=me()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*um(r/1960))-r,10e?16:e,Yt===null)var r=!1;else{if(e=Yt,Yt=null,Ei=0,X&6)throw Error(_(331));var l=X;for(X|=4,z=e.current;z!==null;){var i=z,o=i.child;if(z.flags&16){var u=i.deletions;if(u!==null){for(var a=0;ame()-la?kn(e,0):ra|=n),Qe(e,t)}function md(e,t){t===0&&(e.mode&1?(t=Ll,Ll<<=1,!(Ll&130023424)&&(Ll=4194304)):t=1);var n=Ue();e=zt(e,t),e!==null&&(fl(e,t,n),Qe(e,n))}function pm(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),md(e,n)}function hm(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(_(314))}r!==null&&r.delete(t),md(e,n)}var vd;vd=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||He.current)Ve=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Ve=!1,tm(e,t,n);Ve=!!(e.flags&131072)}else Ve=!1,ae&&t.flags&1048576&&Sf(t,di,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Gl(e,t),e=t.pendingProps;var l=ir(t,Me.current);nr(t,n),l=Zu(null,t,r,e,l,n);var i=qu();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,We(r)?(i=!0,ci(t)):i=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Ku(t),l.updater=Oi,t.stateNode=l,l._reactInternals=t,tu(t,r,e,n),t=lu(null,t,r,!0,i,n)):(t.tag=0,ae&&i&&Au(t),Ie(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Gl(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=vm(r),e=ct(r,e),l){case 0:t=ru(null,t,r,e,n);break e;case 1:t=Rs(null,t,r,e,n);break e;case 11:t=Ps(null,t,r,e,n);break e;case 14:t=_s(null,t,r,ct(r.type,e),n);break e}throw Error(_(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ct(r,l),ru(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ct(r,l),Rs(e,t,r,l,n);case 3:e:{if(bf(t),e===null)throw Error(_(387));r=t.pendingProps,i=t.memoizedState,l=i.element,_f(e,t),mi(t,r,null,n);var o=t.memoizedState;if(r=o.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){l=sr(Error(_(423)),t),t=Ls(e,t,r,n,l);break e}else if(r!==l){l=sr(Error(_(424)),t),t=Ls(e,t,r,n,l);break e}else for(Ge=qt(t.stateNode.containerInfo.firstChild),Je=t,ae=!0,pt=null,n=Cf(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(or(),r===l){t=Ot(e,t,n);break e}Ie(e,t,r,n)}t=t.child}return t;case 5:return Rf(t),e===null&&qo(t),r=t.type,l=t.pendingProps,i=e!==null?e.memoizedProps:null,o=l.children,Yo(r,l)?o=null:i!==null&&Yo(r,i)&&(t.flags|=32),qf(e,t),Ie(e,t,o,n),t.child;case 6:return e===null&&qo(t),null;case 13:return ed(e,t,n);case 4:return Yu(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=ur(t,null,r,n):Ie(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ct(r,l),Ps(e,t,r,l,n);case 7:return Ie(e,t,t.pendingProps,n),t.child;case 8:return Ie(e,t,t.pendingProps.children,n),t.child;case 12:return Ie(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,i=t.memoizedProps,o=l.value,le(pi,r._currentValue),r._currentValue=o,i!==null)if(vt(i.value,o)){if(i.children===l.children&&!He.current){t=Ot(e,t,n);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var u=i.dependencies;if(u!==null){o=i.child;for(var a=u.firstContext;a!==null;){if(a.context===r){if(i.tag===1){a=Tt(-1,n&-n),a.tag=2;var s=i.updateQueue;if(s!==null){s=s.shared;var d=s.pending;d===null?a.next=a:(a.next=d.next,d.next=a),s.pending=a}}i.lanes|=n,a=i.alternate,a!==null&&(a.lanes|=n),bo(i.return,n,t),u.lanes|=n;break}a=a.next}}else if(i.tag===10)o=i.type===t.type?null:i.child;else if(i.tag===18){if(o=i.return,o===null)throw Error(_(341));o.lanes|=n,u=o.alternate,u!==null&&(u.lanes|=n),bo(o,n,t),o=i.sibling}else o=i.child;if(o!==null)o.return=i;else for(o=i;o!==null;){if(o===t){o=null;break}if(i=o.sibling,i!==null){i.return=o.return,o=i;break}o=o.return}i=o}Ie(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,nr(t,n),l=it(l),r=r(l),t.flags|=1,Ie(e,t,r,n),t.child;case 14:return r=t.type,l=ct(r,t.pendingProps),l=ct(r.type,l),_s(e,t,r,l,n);case 15:return Jf(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ct(r,l),Gl(e,t),t.tag=1,We(r)?(e=!0,ci(t)):e=!1,nr(t,n),Yf(t,r,l),tu(t,r,l,n),lu(null,t,r,!0,e,n);case 19:return td(e,t,n);case 22:return Zf(e,t,n)}throw Error(_(156,t.tag))};function yd(e,t){return Hc(e,t)}function mm(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function rt(e,t,n,r){return new mm(e,t,n,r)}function aa(e){return e=e.prototype,!(!e||!e.isReactComponent)}function vm(e){if(typeof e=="function")return aa(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ru)return 11;if(e===Lu)return 14}return 2}function nn(e,t){var n=e.alternate;return n===null?(n=rt(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function ql(e,t,n,r,l,i){var o=2;if(r=e,typeof e=="function")aa(e)&&(o=1);else if(typeof e=="string")o=5;else e:switch(e){case $n:return xn(n.children,l,i,t);case _u:o=8,l|=8;break;case Po:return e=rt(12,n,t,l|2),e.elementType=Po,e.lanes=i,e;case _o:return e=rt(13,n,t,l),e.elementType=_o,e.lanes=i,e;case Ro:return e=rt(19,n,t,l),e.elementType=Ro,e.lanes=i,e;case _c:return Ui(n,l,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Cc:o=10;break e;case Pc:o=9;break e;case Ru:o=11;break e;case Lu:o=14;break e;case Vt:o=16,r=null;break e}throw Error(_(130,e==null?e:typeof e,""))}return t=rt(o,n,t,l),t.elementType=e,t.type=r,t.lanes=i,t}function xn(e,t,n,r){return e=rt(7,e,r,t),e.lanes=n,e}function Ui(e,t,n,r){return e=rt(22,e,r,t),e.elementType=_c,e.lanes=n,e.stateNode={isHidden:!1},e}function wo(e,t,n){return e=rt(6,e,null,t),e.lanes=n,e}function So(e,t,n){return t=rt(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function ym(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=bi(0),this.expirationTimes=bi(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=bi(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function sa(e,t,n,r,l,i,o,u,a){return e=new ym(e,t,n,u,a),t===1?(t=1,i===!0&&(t|=8)):t=0,i=rt(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ku(i),e}function gm(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Ed)}catch(e){console.error(e)}}Ed(),Sc.exports=qe;var kd=Sc.exports;const xm=cc(kd),Cm=sc({__proto__:null,default:xm},[kd]);/** + * @remix-run/router v1.23.3 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function ue(){return ue=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function Tn(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function _m(){return Math.random().toString(36).substr(2,8)}function $s(e,t){return{usr:e.state,key:e.key,idx:t}}function ul(e,t,n,r){return n===void 0&&(n=null),ue({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?sn(t):t,{state:n,key:t&&t.key||r||_m()})}function Nn(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&n!=="?"&&(t+=n.charAt(0)==="?"?n:"?"+n),r&&r!=="#"&&(t+=r.charAt(0)==="#"?r:"#"+r),t}function sn(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function Rm(e,t,n,r){r===void 0&&(r={});let{window:l=document.defaultView,v5Compat:i=!1}=r,o=l.history,u=ye.Pop,a=null,s=d();s==null&&(s=0,o.replaceState(ue({},o.state,{idx:s}),""));function d(){return(o.state||{idx:null}).idx}function f(){u=ye.Pop;let D=d(),m=D==null?null:D-s;s=D,a&&a({action:u,location:E.location,delta:m})}function h(D,m){u=ye.Push;let c=ul(E.location,D,m);s=d()+1;let v=$s(c,s),x=E.createHref(c);try{o.pushState(v,"",x)}catch(L){if(L instanceof DOMException&&L.name==="DataCloneError")throw L;l.location.assign(x)}i&&a&&a({action:u,location:E.location,delta:1})}function w(D,m){u=ye.Replace;let c=ul(E.location,D,m);s=d();let v=$s(c,s),x=E.createHref(c);o.replaceState(v,"",x),i&&a&&a({action:u,location:E.location,delta:0})}function k(D){let m=l.location.origin!=="null"?l.location.origin:l.location.href,c=typeof D=="string"?D:Nn(D);return c=c.replace(/ $/,"%20"),K(m,"No window.location.(origin|href) available to create URL for href: "+c),new URL(c,m)}let E={get action(){return u},get location(){return e(l,o)},listen(D){if(a)throw new Error("A history only accepts one active listener");return l.addEventListener(Bs,f),a=D,()=>{l.removeEventListener(Bs,f),a=null}},createHref(D){return t(l,D)},createURL:k,encodeLocation(D){let m=k(D);return{pathname:m.pathname,search:m.search,hash:m.hash}},push:h,replace:w,go(D){return o.go(D)}};return E}var Z;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Z||(Z={}));const Lm=new Set(["lazy","caseSensitive","path","id","index","children"]);function Tm(e){return e.index===!0}function Ci(e,t,n,r){return n===void 0&&(n=[]),r===void 0&&(r={}),e.map((l,i)=>{let o=[...n,String(i)],u=typeof l.id=="string"?l.id:o.join("-");if(K(l.index!==!0||!l.children,"Cannot specify children on an index route"),K(!r[u],'Found a route id collision on id "'+u+`". Route id's must be globally unique within Data Router usages`),Tm(l)){let a=ue({},l,t(l),{id:u});return r[u]=a,a}else{let a=ue({},l,t(l),{id:u,children:void 0});return r[u]=a,l.children&&(a.children=Ci(l.children,t,o,r)),a}})}function vn(e,t,n){return n===void 0&&(n="/"),bl(e,t,n,!1)}function bl(e,t,n,r){let l=typeof t=="string"?sn(t):t,i=hr(l.pathname||"/",n);if(i==null)return null;let o=xd(e);Dm(o);let u=null,a=Vm(i);for(let s=0;u==null&&s{let a={relativePath:u===void 0?i.path||"":u,caseSensitive:i.caseSensitive===!0,childrenIndex:o,route:i};a.relativePath.startsWith("/")&&(K(a.relativePath.startsWith(r),'Absolute route path "'+a.relativePath+'" nested under path '+('"'+r+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),a.relativePath=a.relativePath.slice(r.length));let s=Nt([r,a.relativePath]),d=n.concat(a);i.children&&i.children.length>0&&(K(i.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+s+'".')),xd(i.children,t,d,s)),!(i.path==null&&!i.index)&&t.push({path:s,score:jm(s,i.index),routesMeta:d})};return e.forEach((i,o)=>{var u;if(i.path===""||!((u=i.path)!=null&&u.includes("?")))l(i,o);else for(let a of Cd(i.path))l(i,o,a)}),t}function Cd(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,l=n.endsWith("?"),i=n.replace(/\?$/,"");if(r.length===0)return l?[i,""]:[i];let o=Cd(r.join("/")),u=[];return u.push(...o.map(a=>a===""?i:[i,a].join("/"))),l&&u.push(...o),u.map(a=>e.startsWith("/")&&a===""?"/":a)}function Dm(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:Am(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const Mm=/^:[\w-]+$/,zm=3,Om=2,Fm=1,Im=10,Um=-2,Vs=e=>e==="*";function jm(e,t){let n=e.split("/"),r=n.length;return n.some(Vs)&&(r+=Um),t&&(r+=Om),n.filter(l=>!Vs(l)).reduce((l,i)=>l+(Mm.test(i)?zm:i===""?Fm:Im),r)}function Am(e,t){return e.length===t.length&&e.slice(0,-1).every((r,l)=>r===t[l])?e[e.length-1]-t[t.length-1]:0}function Bm(e,t,n){n===void 0&&(n=!1);let{routesMeta:r}=e,l={},i="/",o=[];for(let u=0;u{let{paramName:h,isOptional:w}=d;if(h==="*"){let E=u[f]||"";o=i.slice(0,i.length-E.length).replace(/(.)\/+$/,"$1")}const k=u[f];return w&&!k?s[h]=void 0:s[h]=(k||"").replace(/%2F/g,"/"),s},{}),pathname:i,pathnameBase:o,pattern:e}}function $m(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!0),Tn(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let r=[],l="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(o,u,a)=>(r.push({paramName:u,isOptional:a!=null}),a?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(r.push({paramName:"*"}),l+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?l+="\\/*$":e!==""&&e!=="/"&&(l+="(?:(?=\\/|$))"),[new RegExp(l,t?void 0:"i"),r]}function Vm(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return Tn(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function hr(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}const Hm=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Wm=e=>Hm.test(e);function Qm(e,t){t===void 0&&(t="/");let{pathname:n,search:r="",hash:l=""}=typeof e=="string"?sn(e):e,i;if(n)if(Wm(n))i=n;else{if(n.includes("//")){let o=n;n=ma(n),Tn(!1,"Pathnames cannot have embedded double slashes - normalizing "+(o+" -> "+n))}n.startsWith("/")?i=Ws(n.substring(1),"/"):i=Ws(n,t)}else i=t;return{pathname:i,search:Ym(r),hash:Xm(l)}}function Ws(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(l=>{l===".."?n.length>1&&n.pop():l!=="."&&n.push(l)}),n.length>1?n.join("/"):"/"}function Eo(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function Pd(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function pa(e,t){let n=Pd(e);return t?n.map((r,l)=>l===n.length-1?r.pathname:r.pathnameBase):n.map(r=>r.pathnameBase)}function ha(e,t,n,r){r===void 0&&(r=!1);let l;typeof e=="string"?l=sn(e):(l=ue({},e),K(!l.pathname||!l.pathname.includes("?"),Eo("?","pathname","search",l)),K(!l.pathname||!l.pathname.includes("#"),Eo("#","pathname","hash",l)),K(!l.search||!l.search.includes("#"),Eo("#","search","hash",l)));let i=e===""||l.pathname==="",o=i?"/":l.pathname,u;if(o==null)u=n;else{let f=t.length-1;if(!r&&o.startsWith("..")){let h=o.split("/");for(;h[0]==="..";)h.shift(),f-=1;l.pathname=h.join("/")}u=f>=0?t[f]:"/"}let a=Qm(l,u),s=o&&o!=="/"&&o.endsWith("/"),d=(i||o===".")&&n.endsWith("/");return!a.pathname.endsWith("/")&&(s||d)&&(a.pathname+="/"),a}const ma=e=>e.replace(/\/\/+/g,"/"),Nt=e=>ma(e.join("/")),Km=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Ym=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,Xm=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;class Pi{constructor(t,n,r,l){l===void 0&&(l=!1),this.status=t,this.statusText=n||"",this.internal=l,r instanceof Error?(this.data=r.toString(),this.error=r):this.data=r}}function al(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const _d=["post","put","patch","delete"],Gm=new Set(_d),Jm=["get",..._d],Zm=new Set(Jm),qm=new Set([301,302,303,307,308]),bm=new Set([307,308]),ko={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},ev={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Rr={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},va=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,tv=e=>({hasErrorBoundary:!!e.hasErrorBoundary}),Rd="remix-router-transitions";function nv(e){const t=e.window?e.window:typeof window<"u"?window:void 0,n=typeof t<"u"&&typeof t.document<"u"&&typeof t.document.createElement<"u",r=!n;K(e.routes.length>0,"You must provide a non-empty routes array to createRouter");let l;if(e.mapRouteProperties)l=e.mapRouteProperties;else if(e.detectErrorBoundary){let p=e.detectErrorBoundary;l=g=>({hasErrorBoundary:p(g)})}else l=tv;let i={},o=Ci(e.routes,l,void 0,i),u,a=e.basename||"/",s=e.dataStrategy||ov,d=e.patchRoutesOnNavigation,f=ue({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},e.future),h=null,w=new Set,k=null,E=null,D=null,m=e.hydrationData!=null,c=vn(o,e.history.location,a),v=!1,x=null;if(c==null&&!d){let p=Be(404,{pathname:e.history.location.pathname}),{matches:g,route:S}=tc(o);c=g,x={[S.id]:p}}c&&!e.hydrationData&&wl(c,o,e.history.location.pathname).active&&(c=null);let L;if(c)if(c.some(p=>p.route.lazy))L=!1;else if(!c.some(p=>p.route.loader))L=!0;else if(f.v7_partialHydration){let p=e.hydrationData?e.hydrationData.loaderData:null,g=e.hydrationData?e.hydrationData.errors:null;if(g){let S=c.findIndex(C=>g[C.route.id]!==void 0);L=c.slice(0,S+1).every(C=>!yu(C.route,p,g))}else L=c.every(S=>!yu(S.route,p,g))}else L=e.hydrationData!=null;else if(L=!1,c=[],f.v7_partialHydration){let p=wl(null,o,e.history.location.pathname);p.active&&p.matches&&(v=!0,c=p.matches)}let O,y={historyAction:e.history.action,location:e.history.location,matches:c,initialized:L,navigation:ko,restoreScrollPosition:e.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||x,fetchers:new Map,blockers:new Map},P=ye.Pop,B=!1,M,b=!1,ne=new Map,we=null,Ce=!1,ut=!1,It=[],Ut=new Set,T=new Map,$=0,H=-1,ee=new Map,te=new Set,at=new Map,Ke=new Map,ze=new Set,Oe=new Map,et=new Map,vl;function Ad(){if(h=e.history.listen(p=>{let{action:g,location:S,delta:C}=p;if(vl){vl(),vl=void 0;return}Tn(et.size===0||C!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let N=La({currentLocation:y.location,nextLocation:S,historyAction:g});if(N&&C!=null){let A=new Promise(V=>{vl=V});e.history.go(C*-1),gl(N,{state:"blocked",location:S,proceed(){gl(N,{state:"proceeding",proceed:void 0,reset:void 0,location:S}),A.then(()=>e.history.go(C))},reset(){let V=new Map(y.blockers);V.set(N,Rr),Fe({blockers:V})}});return}return fn(g,S)}),n){Sv(t,ne);let p=()=>Ev(t,ne);t.addEventListener("pagehide",p),we=()=>t.removeEventListener("pagehide",p)}return y.initialized||fn(ye.Pop,y.location,{initialHydration:!0}),O}function Bd(){h&&h(),we&&we(),w.clear(),M&&M.abort(),y.fetchers.forEach((p,g)=>yl(g)),y.blockers.forEach((p,g)=>Ra(g))}function $d(p){return w.add(p),()=>w.delete(p)}function Fe(p,g){g===void 0&&(g={}),y=ue({},y,p);let S=[],C=[];f.v7_fetcherPersist&&y.fetchers.forEach((N,A)=>{N.state==="idle"&&(ze.has(A)?C.push(A):S.push(A))}),ze.forEach(N=>{!y.fetchers.has(N)&&!T.has(N)&&C.push(N)}),[...w].forEach(N=>N(y,{deletedFetchers:C,viewTransitionOpts:g.viewTransitionOpts,flushSync:g.flushSync===!0})),f.v7_fetcherPersist?(S.forEach(N=>y.fetchers.delete(N)),C.forEach(N=>yl(N))):C.forEach(N=>ze.delete(N))}function On(p,g,S){var C,N;let{flushSync:A}=S===void 0?{}:S,V=y.actionData!=null&&y.navigation.formMethod!=null&&dt(y.navigation.formMethod)&&y.navigation.state==="loading"&&((C=p.state)==null?void 0:C._isRedirect)!==!0,I;g.actionData?Object.keys(g.actionData).length>0?I=g.actionData:I=null:V?I=y.actionData:I=null;let U=g.loaderData?bs(y.loaderData,g.loaderData,g.matches||[],g.errors):y.loaderData,F=y.blockers;F.size>0&&(F=new Map(F),F.forEach((Y,Pe)=>F.set(Pe,Rr)));let j=B===!0||y.navigation.formMethod!=null&&dt(y.navigation.formMethod)&&((N=p.state)==null?void 0:N._isRedirect)!==!0;u&&(o=u,u=void 0),Ce||P===ye.Pop||(P===ye.Push?e.history.push(p,p.state):P===ye.Replace&&e.history.replace(p,p.state));let W;if(P===ye.Pop){let Y=ne.get(y.location.pathname);Y&&Y.has(p.pathname)?W={currentLocation:y.location,nextLocation:p}:ne.has(p.pathname)&&(W={currentLocation:p,nextLocation:y.location})}else if(b){let Y=ne.get(y.location.pathname);Y?Y.add(p.pathname):(Y=new Set([p.pathname]),ne.set(y.location.pathname,Y)),W={currentLocation:y.location,nextLocation:p}}Fe(ue({},g,{actionData:I,loaderData:U,historyAction:P,location:p,initialized:!0,navigation:ko,revalidation:"idle",restoreScrollPosition:Na(p,g.matches||y.matches),preventScrollReset:j,blockers:F}),{viewTransitionOpts:W,flushSync:A===!0}),P=ye.Pop,B=!1,b=!1,Ce=!1,ut=!1,It=[]}async function Sa(p,g){if(typeof p=="number"){e.history.go(p);return}let S=vu(y.location,y.matches,a,f.v7_prependBasename,p,f.v7_relativeSplatPath,g==null?void 0:g.fromRouteId,g==null?void 0:g.relative),{path:C,submission:N,error:A}=Qs(f.v7_normalizeFormMethod,!1,S,g),V=y.location,I=ul(y.location,C,g&&g.state);I=ue({},I,e.history.encodeLocation(I));let U=g&&g.replace!=null?g.replace:void 0,F=ye.Push;U===!0?F=ye.Replace:U===!1||N!=null&&dt(N.formMethod)&&N.formAction===y.location.pathname+y.location.search&&(F=ye.Replace);let j=g&&"preventScrollReset"in g?g.preventScrollReset===!0:void 0,W=(g&&g.flushSync)===!0,Y=La({currentLocation:V,nextLocation:I,historyAction:F});if(Y){gl(Y,{state:"blocked",location:I,proceed(){gl(Y,{state:"proceeding",proceed:void 0,reset:void 0,location:I}),Sa(p,g)},reset(){let Pe=new Map(y.blockers);Pe.set(Y,Rr),Fe({blockers:Pe})}});return}return await fn(F,I,{submission:N,pendingError:A,preventScrollReset:j,replace:g&&g.replace,enableViewTransition:g&&g.viewTransition,flushSync:W})}function Vd(){if(Wi(),Fe({revalidation:"loading"}),y.navigation.state!=="submitting"){if(y.navigation.state==="idle"){fn(y.historyAction,y.location,{startUninterruptedRevalidation:!0});return}fn(P||y.historyAction,y.navigation.location,{overrideNavigation:y.navigation,enableViewTransition:b===!0})}}async function fn(p,g,S){M&&M.abort(),M=null,P=p,Ce=(S&&S.startUninterruptedRevalidation)===!0,qd(y.location,y.matches),B=(S&&S.preventScrollReset)===!0,b=(S&&S.enableViewTransition)===!0;let C=u||o,N=S&&S.overrideNavigation,A=S!=null&&S.initialHydration&&y.matches&&y.matches.length>0&&!v?y.matches:vn(C,g,a),V=(S&&S.flushSync)===!0;if(A&&y.initialized&&!ut&&dv(y.location,g)&&!(S&&S.submission&&dt(S.submission.formMethod))){On(g,{matches:A},{flushSync:V});return}let I=wl(A,C,g.pathname);if(I.active&&I.matches&&(A=I.matches),!A){let{error:re,notFoundMatches:J,route:de}=Qi(g.pathname);On(g,{matches:J,loaderData:{},errors:{[de.id]:re}},{flushSync:V});return}M=new AbortController;let U=An(e.history,g,M.signal,S&&S.submission),F;if(S&&S.pendingError)F=[yn(A).route.id,{type:Z.error,error:S.pendingError}];else if(S&&S.submission&&dt(S.submission.formMethod)){let re=await Hd(U,g,S.submission,A,I.active,{replace:S.replace,flushSync:V});if(re.shortCircuited)return;if(re.pendingActionResult){let[J,de]=re.pendingActionResult;if(Xe(de)&&al(de.error)&&de.error.status===404){M=null,On(g,{matches:re.matches,loaderData:{},errors:{[J]:de.error}});return}}A=re.matches||A,F=re.pendingActionResult,N=xo(g,S.submission),V=!1,I.active=!1,U=An(e.history,U.url,U.signal)}let{shortCircuited:j,matches:W,loaderData:Y,errors:Pe}=await Wd(U,g,A,I.active,N,S&&S.submission,S&&S.fetcherSubmission,S&&S.replace,S&&S.initialHydration===!0,V,F);j||(M=null,On(g,ue({matches:W||A},ec(F),{loaderData:Y,errors:Pe})))}async function Hd(p,g,S,C,N,A){A===void 0&&(A={}),Wi();let V=gv(g,S);if(Fe({navigation:V},{flushSync:A.flushSync===!0}),N){let F=await Sl(C,g.pathname,p.signal);if(F.type==="aborted")return{shortCircuited:!0};if(F.type==="error"){let j=yn(F.partialMatches).route.id;return{matches:F.partialMatches,pendingActionResult:[j,{type:Z.error,error:F.error}]}}else if(F.matches)C=F.matches;else{let{notFoundMatches:j,error:W,route:Y}=Qi(g.pathname);return{matches:j,pendingActionResult:[Y.id,{type:Z.error,error:W}]}}}let I,U=Or(C,g);if(!U.route.action&&!U.route.lazy)I={type:Z.error,error:Be(405,{method:p.method,pathname:g.pathname,routeId:U.route.id})};else if(I=(await mr("action",y,p,[U],C,null))[U.route.id],p.signal.aborted)return{shortCircuited:!0};if(En(I)){let F;return A&&A.replace!=null?F=A.replace:F=Js(I.response.headers.get("Location"),new URL(p.url),a,e.history)===y.location.pathname+y.location.search,await dn(p,I,!0,{submission:S,replace:F}),{shortCircuited:!0}}if(Xt(I))throw Be(400,{type:"defer-action"});if(Xe(I)){let F=yn(C,U.route.id);return(A&&A.replace)!==!0&&(P=ye.Push),{matches:C,pendingActionResult:[F.route.id,I]}}return{matches:C,pendingActionResult:[U.route.id,I]}}async function Wd(p,g,S,C,N,A,V,I,U,F,j){let W=N||xo(g,A),Y=A||V||rc(W),Pe=!Ce&&(!f.v7_partialHydration||!U);if(C){if(Pe){let pe=Ea(j);Fe(ue({navigation:W},pe!==void 0?{actionData:pe}:{}),{flushSync:F})}let G=await Sl(S,g.pathname,p.signal);if(G.type==="aborted")return{shortCircuited:!0};if(G.type==="error"){let pe=yn(G.partialMatches).route.id;return{matches:G.partialMatches,loaderData:{},errors:{[pe]:G.error}}}else if(G.matches)S=G.matches;else{let{error:pe,notFoundMatches:In,route:gr}=Qi(g.pathname);return{matches:In,loaderData:{},errors:{[gr.id]:pe}}}}let re=u||o,[J,de]=Ys(e.history,y,S,Y,g,f.v7_partialHydration&&U===!0,f.v7_skipActionErrorRevalidation,ut,It,Ut,ze,at,te,re,a,j);if(Ki(G=>!(S&&S.some(pe=>pe.route.id===G))||J&&J.some(pe=>pe.route.id===G)),H=++$,J.length===0&&de.length===0){let G=Pa();return On(g,ue({matches:S,loaderData:{},errors:j&&Xe(j[1])?{[j[0]]:j[1].error}:null},ec(j),G?{fetchers:new Map(y.fetchers)}:{}),{flushSync:F}),{shortCircuited:!0}}if(Pe){let G={};if(!C){G.navigation=W;let pe=Ea(j);pe!==void 0&&(G.actionData=pe)}de.length>0&&(G.fetchers=Qd(de)),Fe(G,{flushSync:F})}de.forEach(G=>{At(G.key),G.controller&&T.set(G.key,G.controller)});let Fn=()=>de.forEach(G=>At(G.key));M&&M.signal.addEventListener("abort",Fn);let{loaderResults:vr,fetcherResults:Ct}=await ka(y,S,J,de,p);if(p.signal.aborted)return{shortCircuited:!0};M&&M.signal.removeEventListener("abort",Fn),de.forEach(G=>T.delete(G.key));let yt=Bl(vr);if(yt)return await dn(p,yt.result,!0,{replace:I}),{shortCircuited:!0};if(yt=Bl(Ct),yt)return te.add(yt.key),await dn(p,yt.result,!0,{replace:I}),{shortCircuited:!0};let{loaderData:Yi,errors:yr}=qs(y,S,vr,j,de,Ct,Oe);Oe.forEach((G,pe)=>{G.subscribe(In=>{(In||G.done)&&Oe.delete(pe)})}),f.v7_partialHydration&&U&&y.errors&&(yr=ue({},y.errors,yr));let pn=Pa(),El=_a(H),kl=pn||El||de.length>0;return ue({matches:S,loaderData:Yi,errors:yr},kl?{fetchers:new Map(y.fetchers)}:{})}function Ea(p){if(p&&!Xe(p[1]))return{[p[0]]:p[1].data};if(y.actionData)return Object.keys(y.actionData).length===0?null:y.actionData}function Qd(p){return p.forEach(g=>{let S=y.fetchers.get(g.key),C=Lr(void 0,S?S.data:void 0);y.fetchers.set(g.key,C)}),new Map(y.fetchers)}function Kd(p,g,S,C){if(r)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");At(p);let N=(C&&C.flushSync)===!0,A=u||o,V=vu(y.location,y.matches,a,f.v7_prependBasename,S,f.v7_relativeSplatPath,g,C==null?void 0:C.relative),I=vn(A,V,a),U=wl(I,A,V);if(U.active&&U.matches&&(I=U.matches),!I){xt(p,g,Be(404,{pathname:V}),{flushSync:N});return}let{path:F,submission:j,error:W}=Qs(f.v7_normalizeFormMethod,!0,V,C);if(W){xt(p,g,W,{flushSync:N});return}let Y=Or(I,F),Pe=(C&&C.preventScrollReset)===!0;if(j&&dt(j.formMethod)){Yd(p,g,F,Y,I,U.active,N,Pe,j);return}at.set(p,{routeId:g,path:F}),Xd(p,g,F,Y,I,U.active,N,Pe,j)}async function Yd(p,g,S,C,N,A,V,I,U){Wi(),at.delete(p);function F(ve){if(!ve.route.action&&!ve.route.lazy){let Un=Be(405,{method:U.formMethod,pathname:S,routeId:g});return xt(p,g,Un,{flushSync:V}),!0}return!1}if(!A&&F(C))return;let j=y.fetchers.get(p);jt(p,wv(U,j),{flushSync:V});let W=new AbortController,Y=An(e.history,S,W.signal,U);if(A){let ve=await Sl(N,new URL(Y.url).pathname,Y.signal,p);if(ve.type==="aborted")return;if(ve.type==="error"){xt(p,g,ve.error,{flushSync:V});return}else if(ve.matches){if(N=ve.matches,C=Or(N,S),F(C))return}else{xt(p,g,Be(404,{pathname:S}),{flushSync:V});return}}T.set(p,W);let Pe=$,J=(await mr("action",y,Y,[C],N,p))[C.route.id];if(Y.signal.aborted){T.get(p)===W&&T.delete(p);return}if(f.v7_fetcherPersist&&ze.has(p)){if(En(J)||Xe(J)){jt(p,$t(void 0));return}}else{if(En(J))if(T.delete(p),H>Pe){jt(p,$t(void 0));return}else return te.add(p),jt(p,Lr(U)),dn(Y,J,!1,{fetcherSubmission:U,preventScrollReset:I});if(Xe(J)){xt(p,g,J.error);return}}if(Xt(J))throw Be(400,{type:"defer-action"});let de=y.navigation.location||y.location,Fn=An(e.history,de,W.signal),vr=u||o,Ct=y.navigation.state!=="idle"?vn(vr,y.navigation.location,a):y.matches;K(Ct,"Didn't find any matches after fetcher action");let yt=++$;ee.set(p,yt);let Yi=Lr(U,J.data);y.fetchers.set(p,Yi);let[yr,pn]=Ys(e.history,y,Ct,U,de,!1,f.v7_skipActionErrorRevalidation,ut,It,Ut,ze,at,te,vr,a,[C.route.id,J]);pn.filter(ve=>ve.key!==p).forEach(ve=>{let Un=ve.key,Da=y.fetchers.get(Un),tp=Lr(void 0,Da?Da.data:void 0);y.fetchers.set(Un,tp),At(Un),ve.controller&&T.set(Un,ve.controller)}),Fe({fetchers:new Map(y.fetchers)});let El=()=>pn.forEach(ve=>At(ve.key));W.signal.addEventListener("abort",El);let{loaderResults:kl,fetcherResults:G}=await ka(y,Ct,yr,pn,Fn);if(W.signal.aborted)return;W.signal.removeEventListener("abort",El),ee.delete(p),T.delete(p),pn.forEach(ve=>T.delete(ve.key));let pe=Bl(kl);if(pe)return dn(Fn,pe.result,!1,{preventScrollReset:I});if(pe=Bl(G),pe)return te.add(pe.key),dn(Fn,pe.result,!1,{preventScrollReset:I});let{loaderData:In,errors:gr}=qs(y,Ct,kl,void 0,pn,G,Oe);if(y.fetchers.has(p)){let ve=$t(J.data);y.fetchers.set(p,ve)}_a(yt),y.navigation.state==="loading"&&yt>H?(K(P,"Expected pending action"),M&&M.abort(),On(y.navigation.location,{matches:Ct,loaderData:In,errors:gr,fetchers:new Map(y.fetchers)})):(Fe({errors:gr,loaderData:bs(y.loaderData,In,Ct,gr),fetchers:new Map(y.fetchers)}),ut=!1)}async function Xd(p,g,S,C,N,A,V,I,U){let F=y.fetchers.get(p);jt(p,Lr(U,F?F.data:void 0),{flushSync:V});let j=new AbortController,W=An(e.history,S,j.signal);if(A){let J=await Sl(N,new URL(W.url).pathname,W.signal,p);if(J.type==="aborted")return;if(J.type==="error"){xt(p,g,J.error,{flushSync:V});return}else if(J.matches)N=J.matches,C=Or(N,S);else{xt(p,g,Be(404,{pathname:S}),{flushSync:V});return}}T.set(p,j);let Y=$,re=(await mr("loader",y,W,[C],N,p))[C.route.id];if(Xt(re)&&(re=await ya(re,W.signal,!0)||re),T.get(p)===j&&T.delete(p),!W.signal.aborted){if(ze.has(p)){jt(p,$t(void 0));return}if(En(re))if(H>Y){jt(p,$t(void 0));return}else{te.add(p),await dn(W,re,!1,{preventScrollReset:I});return}if(Xe(re)){xt(p,g,re.error);return}K(!Xt(re),"Unhandled fetcher deferred data"),jt(p,$t(re.data))}}async function dn(p,g,S,C){let{submission:N,fetcherSubmission:A,preventScrollReset:V,replace:I}=C===void 0?{}:C;g.response.headers.has("X-Remix-Revalidate")&&(ut=!0);let U=g.response.headers.get("Location");K(U,"Expected a Location header on the redirect Response"),U=Js(U,new URL(p.url),a,e.history);let F=ul(y.location,U,{_isRedirect:!0});if(n){let J=!1;if(g.response.headers.has("X-Remix-Reload-Document"))J=!0;else if(va.test(U)){const de=e.history.createURL(U);J=de.origin!==t.location.origin||hr(de.pathname,a)==null}if(J){I?t.location.replace(U):t.location.assign(U);return}}M=null;let j=I===!0||g.response.headers.has("X-Remix-Replace")?ye.Replace:ye.Push,{formMethod:W,formAction:Y,formEncType:Pe}=y.navigation;!N&&!A&&W&&Y&&Pe&&(N=rc(y.navigation));let re=N||A;if(bm.has(g.response.status)&&re&&dt(re.formMethod))await fn(j,F,{submission:ue({},re,{formAction:U}),preventScrollReset:V||B,enableViewTransition:S?b:void 0});else{let J=xo(F,N);await fn(j,F,{overrideNavigation:J,fetcherSubmission:A,preventScrollReset:V||B,enableViewTransition:S?b:void 0})}}async function mr(p,g,S,C,N,A){let V,I={};try{V=await uv(s,p,g,S,C,N,A,i,l)}catch(U){return C.forEach(F=>{I[F.route.id]={type:Z.error,error:U}}),I}for(let[U,F]of Object.entries(V))if(pv(F)){let j=F.result;I[U]={type:Z.redirect,response:cv(j,S,U,N,a,f.v7_relativeSplatPath)}}else I[U]=await sv(F);return I}async function ka(p,g,S,C,N){let A=p.matches,V=mr("loader",p,N,S,g,null),I=Promise.all(C.map(async j=>{if(j.matches&&j.match&&j.controller){let Y=(await mr("loader",p,An(e.history,j.path,j.controller.signal),[j.match],j.matches,j.key))[j.match.route.id];return{[j.key]:Y}}else return Promise.resolve({[j.key]:{type:Z.error,error:Be(404,{pathname:j.path})}})})),U=await V,F=(await I).reduce((j,W)=>Object.assign(j,W),{});return await Promise.all([vv(g,U,N.signal,A,p.loaderData),yv(g,F,C)]),{loaderResults:U,fetcherResults:F}}function Wi(){ut=!0,It.push(...Ki()),at.forEach((p,g)=>{T.has(g)&&Ut.add(g),At(g)})}function jt(p,g,S){S===void 0&&(S={}),y.fetchers.set(p,g),Fe({fetchers:new Map(y.fetchers)},{flushSync:(S&&S.flushSync)===!0})}function xt(p,g,S,C){C===void 0&&(C={});let N=yn(y.matches,g);yl(p),Fe({errors:{[N.route.id]:S},fetchers:new Map(y.fetchers)},{flushSync:(C&&C.flushSync)===!0})}function xa(p){return Ke.set(p,(Ke.get(p)||0)+1),ze.has(p)&&ze.delete(p),y.fetchers.get(p)||ev}function yl(p){let g=y.fetchers.get(p);T.has(p)&&!(g&&g.state==="loading"&&ee.has(p))&&At(p),at.delete(p),ee.delete(p),te.delete(p),f.v7_fetcherPersist&&ze.delete(p),Ut.delete(p),y.fetchers.delete(p)}function Gd(p){let g=(Ke.get(p)||0)-1;g<=0?(Ke.delete(p),ze.add(p),f.v7_fetcherPersist||yl(p)):Ke.set(p,g),Fe({fetchers:new Map(y.fetchers)})}function At(p){let g=T.get(p);g&&(g.abort(),T.delete(p))}function Ca(p){for(let g of p){let S=xa(g),C=$t(S.data);y.fetchers.set(g,C)}}function Pa(){let p=[],g=!1;for(let S of te){let C=y.fetchers.get(S);K(C,"Expected fetcher: "+S),C.state==="loading"&&(te.delete(S),p.push(S),g=!0)}return Ca(p),g}function _a(p){let g=[];for(let[S,C]of ee)if(C0}function Jd(p,g){let S=y.blockers.get(p)||Rr;return et.get(p)!==g&&et.set(p,g),S}function Ra(p){y.blockers.delete(p),et.delete(p)}function gl(p,g){let S=y.blockers.get(p)||Rr;K(S.state==="unblocked"&&g.state==="blocked"||S.state==="blocked"&&g.state==="blocked"||S.state==="blocked"&&g.state==="proceeding"||S.state==="blocked"&&g.state==="unblocked"||S.state==="proceeding"&&g.state==="unblocked","Invalid blocker state transition: "+S.state+" -> "+g.state);let C=new Map(y.blockers);C.set(p,g),Fe({blockers:C})}function La(p){let{currentLocation:g,nextLocation:S,historyAction:C}=p;if(et.size===0)return;et.size>1&&Tn(!1,"A router only supports one blocker at a time");let N=Array.from(et.entries()),[A,V]=N[N.length-1],I=y.blockers.get(A);if(!(I&&I.state==="proceeding")&&V({currentLocation:g,nextLocation:S,historyAction:C}))return A}function Qi(p){let g=Be(404,{pathname:p}),S=u||o,{matches:C,route:N}=tc(S);return Ki(),{notFoundMatches:C,route:N,error:g}}function Ki(p){let g=[];return Oe.forEach((S,C)=>{(!p||p(C))&&(S.cancel(),g.push(C),Oe.delete(C))}),g}function Zd(p,g,S){if(k=p,D=g,E=S||null,!m&&y.navigation===ko){m=!0;let C=Na(y.location,y.matches);C!=null&&Fe({restoreScrollPosition:C})}return()=>{k=null,D=null,E=null}}function Ta(p,g){return E&&E(p,g.map(C=>Nm(C,y.loaderData)))||p.key}function qd(p,g){if(k&&D){let S=Ta(p,g);k[S]=D()}}function Na(p,g){if(k){let S=Ta(p,g),C=k[S];if(typeof C=="number")return C}return null}function wl(p,g,S){if(d)if(p){if(Object.keys(p[0].params).length>0)return{active:!0,matches:bl(g,S,a,!0)}}else return{active:!0,matches:bl(g,S,a,!0)||[]};return{active:!1,matches:null}}async function Sl(p,g,S,C){if(!d)return{type:"success",matches:p};let N=p;for(;;){let A=u==null,V=u||o,I=i;try{await d({signal:S,path:g,matches:N,fetcherKey:C,patch:(j,W)=>{S.aborted||Gs(j,W,V,I,l)}})}catch(j){return{type:"error",error:j,partialMatches:N}}finally{A&&!S.aborted&&(o=[...o])}if(S.aborted)return{type:"aborted"};let U=vn(V,g,a);if(U)return{type:"success",matches:U};let F=bl(V,g,a,!0);if(!F||N.length===F.length&&N.every((j,W)=>j.route.id===F[W].route.id))return{type:"success",matches:null};N=F}}function bd(p){i={},u=Ci(p,l,void 0,i)}function ep(p,g){let S=u==null;Gs(p,g,u||o,i,l),S&&(o=[...o],Fe({}))}return O={get basename(){return a},get future(){return f},get state(){return y},get routes(){return o},get window(){return t},initialize:Ad,subscribe:$d,enableScrollRestoration:Zd,navigate:Sa,fetch:Kd,revalidate:Vd,createHref:p=>e.history.createHref(p),encodeLocation:p=>e.history.encodeLocation(p),getFetcher:xa,deleteFetcher:Gd,dispose:Bd,getBlocker:Jd,deleteBlocker:Ra,patchRoutes:ep,_internalFetchControllers:T,_internalActiveDeferreds:Oe,_internalSetRoutes:bd},O}function rv(e){return e!=null&&("formData"in e&&e.formData!=null||"body"in e&&e.body!==void 0)}function vu(e,t,n,r,l,i,o,u){let a,s;if(o){a=[];for(let f of t)if(a.push(f),f.route.id===o){s=f;break}}else a=t,s=t[t.length-1];let d=ha(l||".",pa(a,i),hr(e.pathname,n)||e.pathname,u==="path");if(l==null&&(d.search=e.search,d.hash=e.hash),(l==null||l===""||l===".")&&s){let f=ga(d.search);if(s.route.index&&!f)d.search=d.search?d.search.replace(/^\?/,"?index&"):"?index";else if(!s.route.index&&f){let h=new URLSearchParams(d.search),w=h.getAll("index");h.delete("index"),w.filter(E=>E).forEach(E=>h.append("index",E));let k=h.toString();d.search=k?"?"+k:""}}return r&&n!=="/"&&(d.pathname=d.pathname==="/"?n:Nt([n,d.pathname])),Nn(d)}function Qs(e,t,n,r){if(!r||!rv(r))return{path:n};if(r.formMethod&&!mv(r.formMethod))return{path:n,error:Be(405,{method:r.formMethod})};let l=()=>({path:n,error:Be(400,{type:"invalid-body"})}),i=r.formMethod||"get",o=e?i.toUpperCase():i.toLowerCase(),u=Nd(n);if(r.body!==void 0){if(r.formEncType==="text/plain"){if(!dt(o))return l();let h=typeof r.body=="string"?r.body:r.body instanceof FormData||r.body instanceof URLSearchParams?Array.from(r.body.entries()).reduce((w,k)=>{let[E,D]=k;return""+w+E+"="+D+` +`},""):String(r.body);return{path:n,submission:{formMethod:o,formAction:u,formEncType:r.formEncType,formData:void 0,json:void 0,text:h}}}else if(r.formEncType==="application/json"){if(!dt(o))return l();try{let h=typeof r.body=="string"?JSON.parse(r.body):r.body;return{path:n,submission:{formMethod:o,formAction:u,formEncType:r.formEncType,formData:void 0,json:h,text:void 0}}}catch{return l()}}}K(typeof FormData=="function","FormData is not available in this environment");let a,s;if(r.formData)a=gu(r.formData),s=r.formData;else if(r.body instanceof FormData)a=gu(r.body),s=r.body;else if(r.body instanceof URLSearchParams)a=r.body,s=Zs(a);else if(r.body==null)a=new URLSearchParams,s=new FormData;else try{a=new URLSearchParams(r.body),s=Zs(a)}catch{return l()}let d={formMethod:o,formAction:u,formEncType:r&&r.formEncType||"application/x-www-form-urlencoded",formData:s,json:void 0,text:void 0};if(dt(d.formMethod))return{path:n,submission:d};let f=sn(n);return t&&f.search&&ga(f.search)&&a.append("index",""),f.search="?"+a,{path:Nn(f),submission:d}}function Ks(e,t,n){n===void 0&&(n=!1);let r=e.findIndex(l=>l.route.id===t);return r>=0?e.slice(0,n?r+1:r):e}function Ys(e,t,n,r,l,i,o,u,a,s,d,f,h,w,k,E){let D=E?Xe(E[1])?E[1].error:E[1].data:void 0,m=e.createURL(t.location),c=e.createURL(l),v=n;i&&t.errors?v=Ks(n,Object.keys(t.errors)[0],!0):E&&Xe(E[1])&&(v=Ks(n,E[0]));let x=E?E[1].statusCode:void 0,L=o&&x&&x>=400,O=v.filter((P,B)=>{let{route:M}=P;if(M.lazy)return!0;if(M.loader==null)return!1;if(i)return yu(M,t.loaderData,t.errors);if(lv(t.loaderData,t.matches[B],P)||a.some(we=>we===P.route.id))return!0;let b=t.matches[B],ne=P;return Xs(P,ue({currentUrl:m,currentParams:b.params,nextUrl:c,nextParams:ne.params},r,{actionResult:D,actionStatus:x,defaultShouldRevalidate:L?!1:u||m.pathname+m.search===c.pathname+c.search||m.search!==c.search||Ld(b,ne)}))}),y=[];return f.forEach((P,B)=>{if(i||!n.some(Ce=>Ce.route.id===P.routeId)||d.has(B))return;let M=vn(w,P.path,k);if(!M){y.push({key:B,routeId:P.routeId,path:P.path,matches:null,match:null,controller:null});return}let b=t.fetchers.get(B),ne=Or(M,P.path),we=!1;h.has(B)?we=!1:s.has(B)?(s.delete(B),we=!0):b&&b.state!=="idle"&&b.data===void 0?we=u:we=Xs(ne,ue({currentUrl:m,currentParams:t.matches[t.matches.length-1].params,nextUrl:c,nextParams:n[n.length-1].params},r,{actionResult:D,actionStatus:x,defaultShouldRevalidate:L?!1:u})),we&&y.push({key:B,routeId:P.routeId,path:P.path,matches:M,match:ne,controller:new AbortController})}),[O,y]}function yu(e,t,n){if(e.lazy)return!0;if(!e.loader)return!1;let r=t!=null&&t[e.id]!==void 0,l=n!=null&&n[e.id]!==void 0;return!r&&l?!1:typeof e.loader=="function"&&e.loader.hydrate===!0?!0:!r&&!l}function lv(e,t,n){let r=!t||n.route.id!==t.route.id,l=e[n.route.id]===void 0;return r||l}function Ld(e,t){let n=e.route.path;return e.pathname!==t.pathname||n!=null&&n.endsWith("*")&&e.params["*"]!==t.params["*"]}function Xs(e,t){if(e.route.shouldRevalidate){let n=e.route.shouldRevalidate(t);if(typeof n=="boolean")return n}return t.defaultShouldRevalidate}function Gs(e,t,n,r,l){var i;let o;if(e){let s=r[e];K(s,"No route found to patch children into: routeId = "+e),s.children||(s.children=[]),o=s.children}else o=n;let u=t.filter(s=>!o.some(d=>Td(s,d))),a=Ci(u,l,[e||"_","patch",String(((i=o)==null?void 0:i.length)||"0")],r);o.push(...a)}function Td(e,t){return"id"in e&&"id"in t&&e.id===t.id?!0:e.index===t.index&&e.path===t.path&&e.caseSensitive===t.caseSensitive?(!e.children||e.children.length===0)&&(!t.children||t.children.length===0)?!0:e.children.every((n,r)=>{var l;return(l=t.children)==null?void 0:l.some(i=>Td(n,i))}):!1}async function iv(e,t,n){if(!e.lazy)return;let r=await e.lazy();if(!e.lazy)return;let l=n[e.id];K(l,"No route found in manifest");let i={};for(let o in r){let a=l[o]!==void 0&&o!=="hasErrorBoundary";Tn(!a,'Route "'+l.id+'" has a static property "'+o+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+o+'" will be ignored.')),!a&&!Lm.has(o)&&(i[o]=r[o])}Object.assign(l,i),Object.assign(l,ue({},t(l),{lazy:void 0}))}async function ov(e){let{matches:t}=e,n=t.filter(l=>l.shouldLoad);return(await Promise.all(n.map(l=>l.resolve()))).reduce((l,i,o)=>Object.assign(l,{[n[o].route.id]:i}),{})}async function uv(e,t,n,r,l,i,o,u,a,s){let d=i.map(w=>w.route.lazy?iv(w.route,a,u):void 0),f=i.map((w,k)=>{let E=d[k],D=l.some(c=>c.route.id===w.route.id);return ue({},w,{shouldLoad:D,resolve:async c=>(c&&r.method==="GET"&&(w.route.lazy||w.route.loader)&&(D=!0),D?av(t,r,w,E,c,s):Promise.resolve({type:Z.data,result:void 0}))})}),h=await e({matches:f,request:r,params:i[0].params,fetcherKey:o,context:s});try{await Promise.all(d)}catch{}return h}async function av(e,t,n,r,l,i){let o,u,a=s=>{let d,f=new Promise((k,E)=>d=E);u=()=>d(),t.signal.addEventListener("abort",u);let h=k=>typeof s!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+e+'" [routeId: '+n.route.id+"]"))):s({request:t,params:n.params,context:i},...k!==void 0?[k]:[]),w=(async()=>{try{return{type:"data",result:await(l?l(E=>h(E)):h())}}catch(k){return{type:"error",result:k}}})();return Promise.race([w,f])};try{let s=n.route[e];if(r)if(s){let d,[f]=await Promise.all([a(s).catch(h=>{d=h}),r]);if(d!==void 0)throw d;o=f}else if(await r,s=n.route[e],s)o=await a(s);else if(e==="action"){let d=new URL(t.url),f=d.pathname+d.search;throw Be(405,{method:t.method,pathname:f,routeId:n.route.id})}else return{type:Z.data,result:void 0};else if(s)o=await a(s);else{let d=new URL(t.url),f=d.pathname+d.search;throw Be(404,{pathname:f})}K(o.result!==void 0,"You defined "+(e==="action"?"an action":"a loader")+" for route "+('"'+n.route.id+"\" but didn't return anything from your `"+e+"` ")+"function. Please return a value or `null`.")}catch(s){return{type:Z.error,result:s}}finally{u&&t.signal.removeEventListener("abort",u)}return o}async function sv(e){let{result:t,type:n}=e;if(Dd(t)){let f;try{let h=t.headers.get("Content-Type");h&&/\bapplication\/json\b/.test(h)?t.body==null?f=null:f=await t.json():f=await t.text()}catch(h){return{type:Z.error,error:h}}return n===Z.error?{type:Z.error,error:new Pi(t.status,t.statusText,f),statusCode:t.status,headers:t.headers}:{type:Z.data,data:f,statusCode:t.status,headers:t.headers}}if(n===Z.error){if(nc(t)){var r,l;if(t.data instanceof Error){var i,o;return{type:Z.error,error:t.data,statusCode:(i=t.init)==null?void 0:i.status,headers:(o=t.init)!=null&&o.headers?new Headers(t.init.headers):void 0}}return{type:Z.error,error:new Pi(((r=t.init)==null?void 0:r.status)||500,void 0,t.data),statusCode:al(t)?t.status:void 0,headers:(l=t.init)!=null&&l.headers?new Headers(t.init.headers):void 0}}return{type:Z.error,error:t,statusCode:al(t)?t.status:void 0}}if(hv(t)){var u,a;return{type:Z.deferred,deferredData:t,statusCode:(u=t.init)==null?void 0:u.status,headers:((a=t.init)==null?void 0:a.headers)&&new Headers(t.init.headers)}}if(nc(t)){var s,d;return{type:Z.data,data:t.data,statusCode:(s=t.init)==null?void 0:s.status,headers:(d=t.init)!=null&&d.headers?new Headers(t.init.headers):void 0}}return{type:Z.data,data:t}}function cv(e,t,n,r,l,i){let o=e.headers.get("Location");if(K(o,"Redirects returned/thrown from loaders/actions must have a Location header"),!va.test(o)){let u=r.slice(0,r.findIndex(a=>a.route.id===n)+1);o=vu(new URL(t.url),u,l,!0,o,i),e.headers.set("Location",o)}return e}function Js(e,t,n,r){let l=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];if(va.test(e)){let i=e,o=i.startsWith("//")?new URL(t.protocol+i):new URL(i);if(l.includes(o.protocol))throw new Error("Invalid redirect location");let u=hr(o.pathname,n)!=null;if(o.origin===t.origin&&u)return ma(o.pathname)+o.search+o.hash}try{let i=r.createURL(e);if(l.includes(i.protocol))throw new Error("Invalid redirect location")}catch{}return e}function An(e,t,n,r){let l=e.createURL(Nd(t)).toString(),i={signal:n};if(r&&dt(r.formMethod)){let{formMethod:o,formEncType:u}=r;i.method=o.toUpperCase(),u==="application/json"?(i.headers=new Headers({"Content-Type":u}),i.body=JSON.stringify(r.json)):u==="text/plain"?i.body=r.text:u==="application/x-www-form-urlencoded"&&r.formData?i.body=gu(r.formData):i.body=r.formData}return new Request(l,i)}function gu(e){let t=new URLSearchParams;for(let[n,r]of e.entries())t.append(n,typeof r=="string"?r:r.name);return t}function Zs(e){let t=new FormData;for(let[n,r]of e.entries())t.append(n,r);return t}function fv(e,t,n,r,l){let i={},o=null,u,a=!1,s={},d=n&&Xe(n[1])?n[1].error:void 0;return e.forEach(f=>{if(!(f.route.id in t))return;let h=f.route.id,w=t[h];if(K(!En(w),"Cannot handle redirect results in processLoaderData"),Xe(w)){let k=w.error;d!==void 0&&(k=d,d=void 0),o=o||{};{let E=yn(e,h);o[E.route.id]==null&&(o[E.route.id]=k)}i[h]=void 0,a||(a=!0,u=al(w.error)?w.error.status:500),w.headers&&(s[h]=w.headers)}else Xt(w)?(r.set(h,w.deferredData),i[h]=w.deferredData.data,w.statusCode!=null&&w.statusCode!==200&&!a&&(u=w.statusCode),w.headers&&(s[h]=w.headers)):(i[h]=w.data,w.statusCode&&w.statusCode!==200&&!a&&(u=w.statusCode),w.headers&&(s[h]=w.headers))}),d!==void 0&&n&&(o={[n[0]]:d},i[n[0]]=void 0),{loaderData:i,errors:o,statusCode:u||200,loaderHeaders:s}}function qs(e,t,n,r,l,i,o){let{loaderData:u,errors:a}=fv(t,n,r,o);return l.forEach(s=>{let{key:d,match:f,controller:h}=s,w=i[d];if(K(w,"Did not find corresponding fetcher result"),!(h&&h.signal.aborted))if(Xe(w)){let k=yn(e.matches,f==null?void 0:f.route.id);a&&a[k.route.id]||(a=ue({},a,{[k.route.id]:w.error})),e.fetchers.delete(d)}else if(En(w))K(!1,"Unhandled fetcher revalidation redirect");else if(Xt(w))K(!1,"Unhandled fetcher deferred data");else{let k=$t(w.data);e.fetchers.set(d,k)}}),{loaderData:u,errors:a}}function bs(e,t,n,r){let l=ue({},t);for(let i of n){let o=i.route.id;if(t.hasOwnProperty(o)?t[o]!==void 0&&(l[o]=t[o]):e[o]!==void 0&&i.route.loader&&(l[o]=e[o]),r&&r.hasOwnProperty(o))break}return l}function ec(e){return e?Xe(e[1])?{actionData:{}}:{actionData:{[e[0]]:e[1].data}}:{}}function yn(e,t){return(t?e.slice(0,e.findIndex(r=>r.route.id===t)+1):[...e]).reverse().find(r=>r.route.hasErrorBoundary===!0)||e[0]}function tc(e){let t=e.length===1?e[0]:e.find(n=>n.index||!n.path||n.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function Be(e,t){let{pathname:n,routeId:r,method:l,type:i,message:o}=t===void 0?{}:t,u="Unknown Server Error",a="Unknown @remix-run/router error";return e===400?(u="Bad Request",l&&n&&r?a="You made a "+l+' request to "'+n+'" but '+('did not provide a `loader` for route "'+r+'", ')+"so there is no way to handle the request.":i==="defer-action"?a="defer() is not supported in actions":i==="invalid-body"&&(a="Unable to encode submission body")):e===403?(u="Forbidden",a='Route "'+r+'" does not match URL "'+n+'"'):e===404?(u="Not Found",a='No route matches URL "'+n+'"'):e===405&&(u="Method Not Allowed",l&&n&&r?a="You made a "+l.toUpperCase()+' request to "'+n+'" but '+('did not provide an `action` for route "'+r+'", ')+"so there is no way to handle the request.":l&&(a='Invalid request method "'+l.toUpperCase()+'"')),new Pi(e||500,u,new Error(a),!0)}function Bl(e){let t=Object.entries(e);for(let n=t.length-1;n>=0;n--){let[r,l]=t[n];if(En(l))return{key:r,result:l}}}function Nd(e){let t=typeof e=="string"?sn(e):e;return Nn(ue({},t,{hash:""}))}function dv(e,t){return e.pathname!==t.pathname||e.search!==t.search?!1:e.hash===""?t.hash!=="":e.hash===t.hash?!0:t.hash!==""}function pv(e){return Dd(e.result)&&qm.has(e.result.status)}function Xt(e){return e.type===Z.deferred}function Xe(e){return e.type===Z.error}function En(e){return(e&&e.type)===Z.redirect}function nc(e){return typeof e=="object"&&e!=null&&"type"in e&&"data"in e&&"init"in e&&e.type==="DataWithResponseInit"}function hv(e){let t=e;return t&&typeof t=="object"&&typeof t.data=="object"&&typeof t.subscribe=="function"&&typeof t.cancel=="function"&&typeof t.resolveData=="function"}function Dd(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.headers=="object"&&typeof e.body<"u"}function mv(e){return Zm.has(e.toLowerCase())}function dt(e){return Gm.has(e.toLowerCase())}async function vv(e,t,n,r,l){let i=Object.entries(t);for(let o=0;o(h==null?void 0:h.route.id)===u);if(!s)continue;let d=r.find(h=>h.route.id===s.route.id),f=d!=null&&!Ld(d,s)&&(l&&l[s.route.id])!==void 0;Xt(a)&&f&&await ya(a,n,!1).then(h=>{h&&(t[u]=h)})}}async function yv(e,t,n){for(let r=0;r(s==null?void 0:s.route.id)===i)&&Xt(u)&&(K(o,"Expected an AbortController for revalidating fetcher deferred result"),await ya(u,o.signal,!0).then(s=>{s&&(t[l]=s)}))}}async function ya(e,t,n){if(n===void 0&&(n=!1),!await e.deferredData.resolveData(t)){if(n)try{return{type:Z.data,data:e.deferredData.unwrappedData}}catch(l){return{type:Z.error,error:l}}return{type:Z.data,data:e.deferredData.data}}}function ga(e){return new URLSearchParams(e).getAll("index").some(t=>t==="")}function Or(e,t){let n=typeof t=="string"?sn(t).search:t.search;if(e[e.length-1].route.index&&ga(n||""))return e[e.length-1];let r=Pd(e);return r[r.length-1]}function rc(e){let{formMethod:t,formAction:n,formEncType:r,text:l,formData:i,json:o}=e;if(!(!t||!n||!r)){if(l!=null)return{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:void 0,text:l};if(i!=null)return{formMethod:t,formAction:n,formEncType:r,formData:i,json:void 0,text:void 0};if(o!==void 0)return{formMethod:t,formAction:n,formEncType:r,formData:void 0,json:o,text:void 0}}}function xo(e,t){return t?{state:"loading",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}:{state:"loading",location:e,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function gv(e,t){return{state:"submitting",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}function Lr(e,t){return e?{state:"loading",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function wv(e,t){return{state:"submitting",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t?t.data:void 0}}function $t(e){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}function Sv(e,t){try{let n=e.sessionStorage.getItem(Rd);if(n){let r=JSON.parse(n);for(let[l,i]of Object.entries(r||{}))i&&Array.isArray(i)&&t.set(l,new Set(i||[]))}}catch{}}function Ev(e,t){if(t.size>0){let n={};for(let[r,l]of t)n[r]=[...l];try{e.sessionStorage.setItem(Rd,JSON.stringify(n))}catch(r){Tn(!1,"Failed to save applied view transitions in sessionStorage ("+r+").")}}}/** + * React Router v6.30.4 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function _i(){return _i=Object.assign?Object.assign.bind():function(e){for(var t=1;t{u.current=!0}),R.useCallback(function(s,d){if(d===void 0&&(d={}),!u.current)return;if(typeof s=="number"){r.go(s);return}let f=ha(s,JSON.parse(o),i,d.relative==="path");e==null&&t!=="/"&&(f.pathname=f.pathname==="/"?t:Nt([t,f.pathname])),(d.replace?r.replace:r.push)(f,d.state,d)},[t,r,o,i,e])}const Pv=R.createContext(null);function _v(e){let t=R.useContext(cn).outlet;return t&&R.createElement(Pv.Provider,{value:e},t)}function Fd(e,t){let{relative:n}=t===void 0?{}:t,{future:r}=R.useContext(zn),{matches:l}=R.useContext(cn),{pathname:i}=Hi(),o=JSON.stringify(pa(l,r.v7_relativeSplatPath));return R.useMemo(()=>ha(e,JSON.parse(o),i,n==="path"),[e,o,i,n])}function Rv(e,t,n,r){ml()||K(!1);let{navigator:l}=R.useContext(zn),{matches:i}=R.useContext(cn),o=i[i.length-1],u=o?o.params:{};o&&o.pathname;let a=o?o.pathnameBase:"/";o&&o.route;let s=Hi(),d;d=s;let f=d.pathname||"/",h=f;if(a!=="/"){let E=a.replace(/^\//,"").split("/");h="/"+f.replace(/^\//,"").split("/").slice(E.length).join("/")}let w=vn(e,{pathname:h});return Mv(w&&w.map(E=>Object.assign({},E,{params:Object.assign({},u,E.params),pathname:Nt([a,l.encodeLocation?l.encodeLocation(E.pathname).pathname:E.pathname]),pathnameBase:E.pathnameBase==="/"?a:Nt([a,l.encodeLocation?l.encodeLocation(E.pathnameBase).pathname:E.pathnameBase])})),i,n,r)}function Lv(){let e=Iv(),t=al(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,l={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return R.createElement(R.Fragment,null,R.createElement("h2",null,"Unexpected Application Error!"),R.createElement("h3",{style:{fontStyle:"italic"}},t),n?R.createElement("pre",{style:l},n):null,null)}const Tv=R.createElement(Lv,null);class Nv extends R.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,n){return n.location!==t.location||n.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:n.error,location:n.location,revalidation:t.revalidation||n.revalidation}}componentDidCatch(t,n){console.error("React Router caught the following error during render",t,n)}render(){return this.state.error!==void 0?R.createElement(cn.Provider,{value:this.props.routeContext},R.createElement(zd.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function Dv(e){let{routeContext:t,match:n,children:r}=e,l=R.useContext(Vi);return l&&l.static&&l.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(l.staticContext._deepestRenderedBoundaryId=n.route.id),R.createElement(cn.Provider,{value:t},r)}function Mv(e,t,n,r){var l;if(t===void 0&&(t=[]),n===void 0&&(n=null),r===void 0&&(r=null),e==null){var i;if(!n)return null;if(n.errors)e=n.matches;else if((i=r)!=null&&i.v7_partialHydration&&t.length===0&&!n.initialized&&n.matches.length>0)e=n.matches;else return null}let o=e,u=(l=n)==null?void 0:l.errors;if(u!=null){let d=o.findIndex(f=>f.route.id&&(u==null?void 0:u[f.route.id])!==void 0);d>=0||K(!1),o=o.slice(0,Math.min(o.length,d+1))}let a=!1,s=-1;if(n&&r&&r.v7_partialHydration)for(let d=0;d=0?o=o.slice(0,s+1):o=[o[0]];break}}}return o.reduceRight((d,f,h)=>{let w,k=!1,E=null,D=null;n&&(w=u&&f.route.id?u[f.route.id]:void 0,E=f.route.errorElement||Tv,a&&(s<0&&h===0?(jv("route-fallback"),k=!0,D=null):s===h&&(k=!0,D=f.route.hydrateFallbackElement||null)));let m=t.concat(o.slice(0,h+1)),c=()=>{let v;return w?v=E:k?v=D:f.route.Component?v=R.createElement(f.route.Component,null):f.route.element?v=f.route.element:v=d,R.createElement(Dv,{match:f,routeContext:{outlet:d,matches:m,isDataRoute:n!=null},children:v})};return n&&(f.route.ErrorBoundary||f.route.errorElement||h===0)?R.createElement(Nv,{location:n.location,revalidation:n.revalidation,component:E,error:w,children:c(),routeContext:{outlet:null,matches:m,isDataRoute:!0}}):c()},null)}var Id=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(Id||{}),Ud=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Ud||{});function zv(e){let t=R.useContext(Vi);return t||K(!1),t}function Ov(e){let t=R.useContext(Md);return t||K(!1),t}function Fv(e){let t=R.useContext(cn);return t||K(!1),t}function jd(e){let t=Fv(),n=t.matches[t.matches.length-1];return n.route.id||K(!1),n.route.id}function Iv(){var e;let t=R.useContext(zd),n=Ov(Ud.UseRouteError),r=jd();return t!==void 0?t:(e=n.errors)==null?void 0:e[r]}function Uv(){let{router:e}=zv(Id.UseNavigateStable),t=jd(),n=R.useRef(!1);return Od(()=>{n.current=!0}),R.useCallback(function(l,i){i===void 0&&(i={}),n.current&&(typeof l=="number"?e.navigate(l):e.navigate(l,_i({fromRouteId:t},i)))},[e,t])}const lc={};function jv(e,t,n){lc[e]||(lc[e]=!0)}function Av(e,t){e==null||e.v7_startTransition,(e==null?void 0:e.v7_relativeSplatPath)===void 0&&(!t||t.v7_relativeSplatPath),t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation)}function oy(e){return _v(e.context)}function Bv(e){let{basename:t="/",children:n=null,location:r,navigationType:l=ye.Pop,navigator:i,static:o=!1,future:u}=e;ml()&&K(!1);let a=t.replace(/^\/*/,"/"),s=R.useMemo(()=>({basename:a,navigator:i,static:o,future:_i({v7_relativeSplatPath:!1},u)}),[a,u,i,o]);typeof r=="string"&&(r=sn(r));let{pathname:d="/",search:f="",hash:h="",state:w=null,key:k="default"}=r,E=R.useMemo(()=>{let D=hr(d,a);return D==null?null:{location:{pathname:D,search:f,hash:h,state:w,key:k},navigationType:l}},[a,d,f,h,w,k,l]);return E==null?null:R.createElement(zn.Provider,{value:s},R.createElement(wa.Provider,{children:n,value:E}))}new Promise(()=>{});function $v(e){let t={hasErrorBoundary:e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&Object.assign(t,{element:R.createElement(e.Component),Component:void 0}),e.HydrateFallback&&Object.assign(t,{hydrateFallbackElement:R.createElement(e.HydrateFallback),HydrateFallback:void 0}),e.ErrorBoundary&&Object.assign(t,{errorElement:R.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),t}/** + * React Router DOM v6.30.4 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function sl(){return sl=Object.assign?Object.assign.bind():function(e){for(var t=1;t{this.resolve=r=>{this.status==="pending"&&(this.status="resolved",t(r))},this.reject=r=>{this.status==="pending"&&(this.status="rejected",n(r))}})}}function ay(e){let{fallbackElement:t,router:n,future:r}=e,[l,i]=R.useState(n.state),[o,u]=R.useState(),[a,s]=R.useState({isTransitioning:!1}),[d,f]=R.useState(),[h,w]=R.useState(),[k,E]=R.useState(),D=R.useRef(new Map),{v7_startTransition:m}=r||{},c=R.useCallback(P=>{m?bv(P):P()},[m]),v=R.useCallback((P,B)=>{let{deletedFetchers:M,flushSync:b,viewTransitionOpts:ne}=B;P.fetchers.forEach((Ce,ut)=>{Ce.data!==void 0&&D.current.set(ut,Ce.data)}),M.forEach(Ce=>D.current.delete(Ce));let we=n.window==null||n.window.document==null||typeof n.window.document.startViewTransition!="function";if(!ne||we){b?Tr(()=>i(P)):c(()=>i(P));return}if(b){Tr(()=>{h&&(d&&d.resolve(),h.skipTransition()),s({isTransitioning:!0,flushSync:!0,currentLocation:ne.currentLocation,nextLocation:ne.nextLocation})});let Ce=n.window.document.startViewTransition(()=>{Tr(()=>i(P))});Ce.finished.finally(()=>{Tr(()=>{f(void 0),w(void 0),u(void 0),s({isTransitioning:!1})})}),Tr(()=>w(Ce));return}h?(d&&d.resolve(),h.skipTransition(),E({state:P,currentLocation:ne.currentLocation,nextLocation:ne.nextLocation})):(u(P),s({isTransitioning:!0,flushSync:!1,currentLocation:ne.currentLocation,nextLocation:ne.nextLocation}))},[n.window,h,d,D,c]);R.useLayoutEffect(()=>n.subscribe(v),[n,v]),R.useEffect(()=>{a.isTransitioning&&!a.flushSync&&f(new ey)},[a]),R.useEffect(()=>{if(d&&o&&n.window){let P=o,B=d.promise,M=n.window.document.startViewTransition(async()=>{c(()=>i(P)),await B});M.finished.finally(()=>{f(void 0),w(void 0),u(void 0),s({isTransitioning:!1})}),w(M)}},[c,o,d,n.window]),R.useEffect(()=>{d&&o&&l.location.key===o.location.key&&d.resolve()},[d,h,l.location,o]),R.useEffect(()=>{!a.isTransitioning&&k&&(u(k.state),s({isTransitioning:!0,flushSync:!1,currentLocation:k.currentLocation,nextLocation:k.nextLocation}),E(void 0))},[a.isTransitioning,k]),R.useEffect(()=>{},[]);let x=R.useMemo(()=>({createHref:n.createHref,encodeLocation:n.encodeLocation,go:P=>n.navigate(P),push:(P,B,M)=>n.navigate(P,{state:B,preventScrollReset:M==null?void 0:M.preventScrollReset}),replace:(P,B,M)=>n.navigate(P,{replace:!0,state:B,preventScrollReset:M==null?void 0:M.preventScrollReset})}),[n]),L=n.basename||"/",O=R.useMemo(()=>({router:n,navigator:x,static:!1,basename:L}),[n,x,L]),y=R.useMemo(()=>({v7_relativeSplatPath:n.future.v7_relativeSplatPath}),[n.future.v7_relativeSplatPath]);return R.useEffect(()=>Av(r,n.future),[r,n.future]),R.createElement(R.Fragment,null,R.createElement(Vi.Provider,{value:O},R.createElement(Md.Provider,{value:l},R.createElement(Jv.Provider,{value:D.current},R.createElement(Gv.Provider,{value:a},R.createElement(Bv,{basename:L,location:l.location,navigationType:l.historyAction,navigator:x,future:y},l.initialized||n.future.v7_partialHydration?R.createElement(ty,{routes:n.routes,future:n.future,state:l}):t))))),null)}const ty=R.memo(ny);function ny(e){let{routes:t,future:n,state:r}=e;return Rv(t,void 0,r,n)}const ry=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",ly=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,sy=R.forwardRef(function(t,n){let{onClick:r,relative:l,reloadDocument:i,replace:o,state:u,target:a,to:s,preventScrollReset:d,viewTransition:f}=t,h=Vv(t,Qv),{basename:w}=R.useContext(zn),k,E=!1;if(typeof s=="string"&&ly.test(s)&&(k=s,ry))try{let v=new URL(window.location.href),x=s.startsWith("//")?new URL(v.protocol+s):new URL(s),L=hr(x.pathname,w);x.origin===v.origin&&L!=null?s=L+x.search+x.hash:E=!0}catch{}let D=kv(s,{relative:l}),m=iy(s,{replace:o,state:u,target:a,preventScrollReset:d,relative:l,viewTransition:f});function c(v){r&&r(v),v.defaultPrevented||m(v)}return R.createElement("a",sl({},h,{href:k||D,onClick:E||i?r:c,ref:n,target:a}))});var uc;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(uc||(uc={}));var ac;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(ac||(ac={}));function iy(e,t){let{target:n,replace:r,state:l,preventScrollReset:i,relative:o,viewTransition:u}=t===void 0?{}:t,a=xv(),s=Hi(),d=Fd(e,{relative:o});return R.useCallback(f=>{if(Wv(f,n)){f.preventDefault();let h=r!==void 0?r:Nn(s)===Nn(d);a(e,{replace:h,state:l,preventScrollReset:i,relative:o,viewTransition:u})}},[s,a,d,r,l,n,e,i,o,u])}export{sy as L,oy as O,ay as R,kd as a,yp as b,uy as c,R as r,Hi as u}; diff --git a/vitals/console/static/favicon.svg b/vitals/console/static/favicon.svg new file mode 100644 index 0000000..eb57fd4 --- /dev/null +++ b/vitals/console/static/favicon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/vitals/console/static/fonts/InterVariable.woff2 b/vitals/console/static/fonts/InterVariable.woff2 new file mode 100644 index 0000000..9c1a33c --- /dev/null +++ b/vitals/console/static/fonts/InterVariable.woff2 @@ -0,0 +1 @@ +wOF2 font placeholder diff --git a/vitals/console/static/fonts/JetBrainsMono-Medium.woff2 b/vitals/console/static/fonts/JetBrainsMono-Medium.woff2 new file mode 100644 index 0000000..9c1a33c --- /dev/null +++ b/vitals/console/static/fonts/JetBrainsMono-Medium.woff2 @@ -0,0 +1 @@ +wOF2 font placeholder diff --git a/vitals/console/static/fonts/JetBrainsMono-Regular.woff2 b/vitals/console/static/fonts/JetBrainsMono-Regular.woff2 new file mode 100644 index 0000000..9c1a33c --- /dev/null +++ b/vitals/console/static/fonts/JetBrainsMono-Regular.woff2 @@ -0,0 +1 @@ +wOF2 font placeholder diff --git a/vitals/console/static/index.html b/vitals/console/static/index.html new file mode 100644 index 0000000..0590aea --- /dev/null +++ b/vitals/console/static/index.html @@ -0,0 +1,38 @@ + + + + + + Vitals Console + + + + + + + + + + + +
+ + From 557ceb42450991a7af8acfa39a1d24cd60779ea0 Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 24 Jul 2026 01:00:20 +0530 Subject: [PATCH 05/36] add typed api client and endpoint definitions --- console/src/lib/api/client.test.ts | 10 ++++ console/src/lib/api/client.ts | 63 +++++++++++++++++++++++ console/src/lib/api/endpoints.ts | 6 +++ console/src/lib/api/types.ts | 81 ++++++++++++++++++++++++++++++ 4 files changed, 160 insertions(+) create mode 100644 console/src/lib/api/client.test.ts create mode 100644 console/src/lib/api/client.ts create mode 100644 console/src/lib/api/endpoints.ts create mode 100644 console/src/lib/api/types.ts diff --git a/console/src/lib/api/client.test.ts b/console/src/lib/api/client.test.ts new file mode 100644 index 0000000..b87de47 --- /dev/null +++ b/console/src/lib/api/client.test.ts @@ -0,0 +1,10 @@ +import { describe, expect, it } from "vitest"; +import { fetchJson } from "./client"; + +describe("api client", () => { + it("fetches json successfully from MSW handlers", async () => { + const data = await fetchJson<{ verdicts: unknown[] }>("/api/verdicts"); + expect(data.verdicts).toBeDefined(); + expect(Array.isArray(data.verdicts)).toBe(true); + }); +}); diff --git a/console/src/lib/api/client.ts b/console/src/lib/api/client.ts new file mode 100644 index 0000000..0a563b9 --- /dev/null +++ b/console/src/lib/api/client.ts @@ -0,0 +1,63 @@ +import type { ApiError } from "./types"; + +export class ConsoleApiError extends Error implements ApiError { + status: number; + endpoint: string; + + constructor(status: number, message: string, endpoint: string) { + super(message); + this.name = "ConsoleApiError"; + this.status = status; + this.endpoint = endpoint; + } +} + +export async function fetchJson( + url: string, + options: RequestInit & { timeoutMs?: number } = {} +): Promise { + const { timeoutMs = 8000, ...fetchOptions } = options; + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), timeoutMs); + + try { + const response = await fetch(url, { + ...fetchOptions, + signal: controller.signal, + headers: { + Accept: "application/json", + ...fetchOptions.headers, + }, + }); + + clearTimeout(timeoutId); + + if (!response.ok) { + let message = response.statusText || "Request failed"; + try { + const errorJson = await response.json(); + if (errorJson?.message) { + message = errorJson.message; + } else if (errorJson?.error) { + message = errorJson.error; + } + } catch { + // use response status text if body not json + } + throw new ConsoleApiError(response.status, message, url); + } + + const data = await response.json(); + return data as T; + } catch (err: unknown) { + clearTimeout(timeoutId); + if (err instanceof ConsoleApiError) { + throw err; + } + if (err instanceof DOMException && err.name === "AbortError") { + throw new ConsoleApiError(0, "Request timeout", url); + } + const message = err instanceof Error ? err.message : "Network error"; + throw new ConsoleApiError(0, message, url); + } +} diff --git a/console/src/lib/api/endpoints.ts b/console/src/lib/api/endpoints.ts new file mode 100644 index 0000000..cb158ea --- /dev/null +++ b/console/src/lib/api/endpoints.ts @@ -0,0 +1,6 @@ +export const ENDPOINTS = { + verdicts: (limit = 50) => `/api/verdicts?limit=${limit}`, + verdict: (id: string) => `/api/verdicts/${encodeURIComponent(id)}`, + scopes: () => "/api/scopes", + health: () => "/api/health", +} as const; diff --git a/console/src/lib/api/types.ts b/console/src/lib/api/types.ts new file mode 100644 index 0000000..e82876f --- /dev/null +++ b/console/src/lib/api/types.ts @@ -0,0 +1,81 @@ +export type VerdictState = "STEADY" | "CHANGED" | "INCONCLUSIVE" | "WARMING"; + +export interface Exemplar { + kind: "worst" | "median"; + trace_id: string; + z_score: number | null; + excerpt: string; + signoz_url?: string; +} + +export interface Verdict { + verdict_id: string; + state: VerdictState; + sentence: string; + service_name: string; + version: string; + baseline_version?: string | null; + subject: string; + cause: string; + flags: { + behavior: boolean; + cost: boolean; + runaway: boolean; + }; + behavior_sigma: number | null; + cost_sigma: number | null; + input_sigma?: number | null; + length_sigma?: number | null; + cost_usd_per_req?: number | null; + baseline_cost_usd_per_req?: number | null; + velocity_ratio?: number | null; + ts_unix: number; + onset_ts_unix?: number | null; + seconds_after_deploy?: number | null; + samples: number; + baseline_samples?: number | null; + falsifier: string; + caveats: string[]; + inconclusive_reason?: string | null; + exemplars: Exemplar[]; +} + +export interface ScopeSignal { + mu: number; + sigma: number; + calibrated: boolean; +} + +export interface Scope { + service_name: string; + gen_ai_system: string; + model: string; + live: boolean; + phase: string; + warming_progress: [number, number]; // [have, need] + versions: string[]; + signals?: { + behavior?: ScopeSignal; + input?: ScopeSignal; + cost?: ScopeSignal; + length?: ScopeSignal; + }; +} + +export interface HealthSnapshot { + spans_received: number; + spans_scored: number; + spans_skipped: number; + scopes_active: number; + verdicts_emitted: number; + emit_errors: number; + uptime_seconds: number; + version: string; + receiver_port?: number; +} + +export interface ApiError { + status: number; + message: string; + endpoint: string; +} From 431373bfc6efd4e3e33ce5c2751406c4adb6847b Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 24 Jul 2026 01:00:23 +0530 Subject: [PATCH 06/36] add query client, keys, and core data hooks --- console/src/hooks/useHealth.ts | 25 +++++++++++++++++++++++++ console/src/hooks/useScopes.ts | 26 ++++++++++++++++++++++++++ console/src/hooks/useVerdict.ts | 25 +++++++++++++++++++++++++ console/src/hooks/useVerdicts.ts | 26 ++++++++++++++++++++++++++ console/src/lib/query/keys.ts | 7 +++++++ console/src/lib/query/queryClient.ts | 17 +++++++++++++++++ 6 files changed, 126 insertions(+) create mode 100644 console/src/hooks/useHealth.ts create mode 100644 console/src/hooks/useScopes.ts create mode 100644 console/src/hooks/useVerdict.ts create mode 100644 console/src/hooks/useVerdicts.ts create mode 100644 console/src/lib/query/keys.ts create mode 100644 console/src/lib/query/queryClient.ts diff --git a/console/src/hooks/useHealth.ts b/console/src/hooks/useHealth.ts new file mode 100644 index 0000000..50efb61 --- /dev/null +++ b/console/src/hooks/useHealth.ts @@ -0,0 +1,25 @@ +import { fetchJson } from "@/lib/api/client"; +import { ENDPOINTS } from "@/lib/api/endpoints"; +import type { HealthSnapshot } from "@/lib/api/types"; +import { queryKeys } from "@/lib/query/keys"; +import { useQuery } from "@tanstack/react-query"; + +export interface UseHealthOptions { + enabled?: boolean; + paused?: boolean; +} + +export function useHealth(options: UseHealthOptions = {}) { + const { enabled = true, paused = false } = options; + + return useQuery({ + queryKey: queryKeys.health(), + queryFn: async () => { + return fetchJson(ENDPOINTS.health()); + }, + staleTime: 8000, + gcTime: 5 * 60 * 1000, + refetchInterval: paused ? false : 10000, + enabled, + }); +} diff --git a/console/src/hooks/useScopes.ts b/console/src/hooks/useScopes.ts new file mode 100644 index 0000000..0aeedfb --- /dev/null +++ b/console/src/hooks/useScopes.ts @@ -0,0 +1,26 @@ +import { fetchJson } from "@/lib/api/client"; +import { ENDPOINTS } from "@/lib/api/endpoints"; +import type { Scope } from "@/lib/api/types"; +import { queryKeys } from "@/lib/query/keys"; +import { useQuery } from "@tanstack/react-query"; + +export interface UseScopesOptions { + enabled?: boolean; + paused?: boolean; +} + +export function useScopes(options: UseScopesOptions = {}) { + const { enabled = true, paused = false } = options; + + return useQuery({ + queryKey: queryKeys.scopes(), + queryFn: async () => { + const res = await fetchJson<{ scopes: Scope[] }>(ENDPOINTS.scopes()); + return res.scopes; + }, + staleTime: 4000, + gcTime: 5 * 60 * 1000, + refetchInterval: paused ? false : 5000, + enabled, + }); +} diff --git a/console/src/hooks/useVerdict.ts b/console/src/hooks/useVerdict.ts new file mode 100644 index 0000000..c54c71e --- /dev/null +++ b/console/src/hooks/useVerdict.ts @@ -0,0 +1,25 @@ +import { fetchJson } from "@/lib/api/client"; +import { ENDPOINTS } from "@/lib/api/endpoints"; +import type { Verdict } from "@/lib/api/types"; +import { queryKeys } from "@/lib/query/keys"; +import { useQuery, useQueryClient } from "@tanstack/react-query"; + +export function useVerdict(verdictId?: string) { + const queryClient = useQueryClient(); + + return useQuery({ + queryKey: queryKeys.verdict(verdictId ?? ""), + queryFn: async () => { + if (!verdictId) throw new Error("verdictId is required"); + return fetchJson(ENDPOINTS.verdict(verdictId)); + }, + enabled: Boolean(verdictId), + staleTime: Number.POSITIVE_INFINITY, + gcTime: 30 * 60 * 1000, + initialData: () => { + if (!verdictId) return undefined; + const listData = queryClient.getQueryData(queryKeys.verdicts()); + return listData?.find((v) => v.verdict_id === verdictId); + }, + }); +} diff --git a/console/src/hooks/useVerdicts.ts b/console/src/hooks/useVerdicts.ts new file mode 100644 index 0000000..15d3a65 --- /dev/null +++ b/console/src/hooks/useVerdicts.ts @@ -0,0 +1,26 @@ +import { fetchJson } from "@/lib/api/client"; +import { ENDPOINTS } from "@/lib/api/endpoints"; +import type { Verdict } from "@/lib/api/types"; +import { queryKeys } from "@/lib/query/keys"; +import { useQuery } from "@tanstack/react-query"; + +export interface UseVerdictsOptions { + enabled?: boolean; + paused?: boolean; +} + +export function useVerdicts(options: UseVerdictsOptions = {}) { + const { enabled = true, paused = false } = options; + + return useQuery({ + queryKey: queryKeys.verdicts(), + queryFn: async () => { + const res = await fetchJson<{ verdicts: Verdict[] }>(ENDPOINTS.verdicts(50)); + return res.verdicts; + }, + staleTime: 1500, + gcTime: 5 * 60 * 1000, + refetchInterval: paused ? false : 2000, + enabled: enabled, + }); +} diff --git a/console/src/lib/query/keys.ts b/console/src/lib/query/keys.ts new file mode 100644 index 0000000..42c6448 --- /dev/null +++ b/console/src/lib/query/keys.ts @@ -0,0 +1,7 @@ +export const queryKeys = { + all: ["vitals"] as const, + verdicts: () => [...queryKeys.all, "verdicts"] as const, + verdict: (id: string) => [...queryKeys.all, "verdict", id] as const, + scopes: () => [...queryKeys.all, "scopes"] as const, + health: () => [...queryKeys.all, "health"] as const, +}; diff --git a/console/src/lib/query/queryClient.ts b/console/src/lib/query/queryClient.ts new file mode 100644 index 0000000..52ab55b --- /dev/null +++ b/console/src/lib/query/queryClient.ts @@ -0,0 +1,17 @@ +import { QueryClient } from "@tanstack/react-query"; + +export function createQueryClient(): QueryClient { + return new QueryClient({ + defaultOptions: { + queries: { + retry: 3, + retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 8000), + refetchOnWindowFocus: true, + refetchIntervalInBackground: false, + structuralSharing: true, + }, + }, + }); +} + +export const queryClient = createQueryClient(); From 1fde0a7cea140089e4c0afe91a6337e20dda2b0c Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 24 Jul 2026 01:00:27 +0530 Subject: [PATCH 07/36] add polling, visibility, online, and motion lifecycle hooks --- console/src/hooks/useLocalStorage.ts | 34 +++++++++++ console/src/hooks/useMediaQuery.ts | 24 ++++++++ console/src/hooks/useOnline.ts | 24 ++++++++ console/src/hooks/usePolling.test.ts | 17 ++++++ console/src/hooks/usePolling.ts | 25 ++++++++ console/src/hooks/useReducedMotion.ts | 24 ++++++++ console/src/hooks/useVisibility.ts | 22 +++++++ console/src/test/fixtures/health.ts | 13 ++++ console/src/test/fixtures/scopes.ts | 28 +++++++++ console/src/test/fixtures/verdicts.ts | 85 +++++++++++++++++++++++++++ console/src/test/msw/handlers.ts | 26 ++++++++ console/src/test/msw/server.ts | 4 ++ console/src/test/setup.ts | 22 +++++++ 13 files changed, 348 insertions(+) create mode 100644 console/src/hooks/useLocalStorage.ts create mode 100644 console/src/hooks/useMediaQuery.ts create mode 100644 console/src/hooks/useOnline.ts create mode 100644 console/src/hooks/usePolling.test.ts create mode 100644 console/src/hooks/usePolling.ts create mode 100644 console/src/hooks/useReducedMotion.ts create mode 100644 console/src/hooks/useVisibility.ts create mode 100644 console/src/test/fixtures/health.ts create mode 100644 console/src/test/fixtures/scopes.ts create mode 100644 console/src/test/fixtures/verdicts.ts create mode 100644 console/src/test/msw/handlers.ts create mode 100644 console/src/test/msw/server.ts create mode 100644 console/src/test/setup.ts diff --git a/console/src/hooks/useLocalStorage.ts b/console/src/hooks/useLocalStorage.ts new file mode 100644 index 0000000..e21b96c --- /dev/null +++ b/console/src/hooks/useLocalStorage.ts @@ -0,0 +1,34 @@ +import { useCallback, useState } from "react"; + +export function useLocalStorage(key: string, initialValue: T): [T, (value: T | ((val: T) => T)) => void] { + const fullKey = key.startsWith("vitals.console.") ? key : `vitals.console.${key}`; + + const readValue = useCallback((): T => { + if (typeof window === "undefined") return initialValue; + try { + const item = window.localStorage.getItem(fullKey); + return item ? (JSON.parse(item) as T) : initialValue; + } catch (error) { + console.warn(`Error reading localStorage key "${fullKey}":`, error); + return initialValue; + } + }, [fullKey, initialValue]); + + const [storedValue, setStoredValue] = useState(readValue); + + const setValue = useCallback( + (value: T | ((val: T) => T)) => { + if (typeof window === "undefined") return; + try { + const newValue = value instanceof Function ? value(storedValue) : value; + window.localStorage.setItem(fullKey, JSON.stringify(newValue)); + setStoredValue(newValue); + } catch (error) { + console.warn(`Error setting localStorage key "${fullKey}":`, error); + } + }, + [fullKey, storedValue] + ); + + return [storedValue, setValue]; +} diff --git a/console/src/hooks/useMediaQuery.ts b/console/src/hooks/useMediaQuery.ts new file mode 100644 index 0000000..60cc5e7 --- /dev/null +++ b/console/src/hooks/useMediaQuery.ts @@ -0,0 +1,24 @@ +import { useEffect, useState } from "react"; + +export function useMediaQuery(query: string): boolean { + const [matches, setMatches] = useState(() => { + if (typeof window === "undefined" || !window.matchMedia) return false; + return window.matchMedia(query).matches; + }); + + useEffect(() => { + if (typeof window === "undefined" || !window.matchMedia) return; + + const mediaQuery = window.matchMedia(query); + const handleChange = (event: MediaQueryListEvent) => { + setMatches(event.matches); + }; + + mediaQuery.addEventListener("change", handleChange); + return () => { + mediaQuery.removeEventListener("change", handleChange); + }; + }, [query]); + + return matches; +} diff --git a/console/src/hooks/useOnline.ts b/console/src/hooks/useOnline.ts new file mode 100644 index 0000000..b37165d --- /dev/null +++ b/console/src/hooks/useOnline.ts @@ -0,0 +1,24 @@ +import { useEffect, useState } from "react"; + +export function useOnline(): boolean { + const [isOnline, setIsOnline] = useState(() => + typeof navigator !== "undefined" ? navigator.onLine : true + ); + + useEffect(() => { + if (typeof window === "undefined") return; + + const handleOnline = () => setIsOnline(true); + const handleOffline = () => setIsOnline(false); + + window.addEventListener("online", handleOnline); + window.addEventListener("offline", handleOffline); + + return () => { + window.removeEventListener("online", handleOnline); + window.removeEventListener("offline", handleOffline); + }; + }, []); + + return isOnline; +} diff --git a/console/src/hooks/usePolling.test.ts b/console/src/hooks/usePolling.test.ts new file mode 100644 index 0000000..8f855e7 --- /dev/null +++ b/console/src/hooks/usePolling.test.ts @@ -0,0 +1,17 @@ +import { renderHook } from "@testing-library/react"; +import { describe, expect, it } from "vitest"; +import { usePolling } from "./usePolling"; + +describe("usePolling hook", () => { + it("returns isPolling true when not paused, online and tab visible", () => { + const { result } = renderHook(() => usePolling(false)); + expect(result.current.isPolling).toBe(true); + expect(result.current.isPausedManual).toBe(false); + }); + + it("returns isPolling false when manually paused", () => { + const { result } = renderHook(() => usePolling(true)); + expect(result.current.isPolling).toBe(false); + expect(result.current.isPausedManual).toBe(true); + }); +}); diff --git a/console/src/hooks/usePolling.ts b/console/src/hooks/usePolling.ts new file mode 100644 index 0000000..ad71bb8 --- /dev/null +++ b/console/src/hooks/usePolling.ts @@ -0,0 +1,25 @@ +import { useOnline } from "./useOnline"; +import { useVisibility } from "./useVisibility"; + +export interface PollingState { + isPolling: boolean; + isPausedManual: boolean; + isTabHidden: boolean; + isOffline: boolean; +} + +export function usePolling(isManualPaused: boolean): PollingState { + const isVisible = useVisibility(); + const isOnline = useOnline(); + + const isTabHidden = !isVisible; + const isOffline = !isOnline; + const isPolling = isVisible && isOnline && !isManualPaused; + + return { + isPolling, + isPausedManual: isManualPaused, + isTabHidden, + isOffline, + }; +} diff --git a/console/src/hooks/useReducedMotion.ts b/console/src/hooks/useReducedMotion.ts new file mode 100644 index 0000000..52977d3 --- /dev/null +++ b/console/src/hooks/useReducedMotion.ts @@ -0,0 +1,24 @@ +import { useEffect, useState } from "react"; + +export function useReducedMotion(): boolean { + const [shouldReduceMotion, setShouldReduceMotion] = useState(() => { + if (typeof window === "undefined" || !window.matchMedia) return false; + return window.matchMedia("(prefers-reduced-motion: reduce)").matches; + }); + + useEffect(() => { + if (typeof window === "undefined" || !window.matchMedia) return; + + const mediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)"); + const handleChange = (event: MediaQueryListEvent) => { + setShouldReduceMotion(event.matches); + }; + + mediaQuery.addEventListener("change", handleChange); + return () => { + mediaQuery.removeEventListener("change", handleChange); + }; + }, []); + + return shouldReduceMotion; +} diff --git a/console/src/hooks/useVisibility.ts b/console/src/hooks/useVisibility.ts new file mode 100644 index 0000000..06c57db --- /dev/null +++ b/console/src/hooks/useVisibility.ts @@ -0,0 +1,22 @@ +import { useEffect, useState } from "react"; + +export function useVisibility(): boolean { + const [isVisible, setIsVisible] = useState(() => + typeof document !== "undefined" ? !document.hidden : true + ); + + useEffect(() => { + if (typeof document === "undefined") return; + + const handleVisibilityChange = () => { + setIsVisible(!document.hidden); + }; + + document.addEventListener("visibilitychange", handleVisibilityChange); + return () => { + document.removeEventListener("visibilitychange", handleVisibilityChange); + }; + }, []); + + return isVisible; +} diff --git a/console/src/test/fixtures/health.ts b/console/src/test/fixtures/health.ts new file mode 100644 index 0000000..e327a5e --- /dev/null +++ b/console/src/test/fixtures/health.ts @@ -0,0 +1,13 @@ +import type { HealthSnapshot } from "@/lib/api/types"; + +export const mockHealth: HealthSnapshot = { + spans_received: 12450, + spans_scored: 11800, + spans_skipped: 650, + scopes_active: 2, + verdicts_emitted: 18, + emit_errors: 0, + uptime_seconds: 86400, + version: "0.2.0", + receiver_port: 4327, +}; diff --git a/console/src/test/fixtures/scopes.ts b/console/src/test/fixtures/scopes.ts new file mode 100644 index 0000000..86a9bf1 --- /dev/null +++ b/console/src/test/fixtures/scopes.ts @@ -0,0 +1,28 @@ +import type { Scope } from "@/lib/api/types"; + +export const mockScopes: Scope[] = [ + { + service_name: "customer-support", + gen_ai_system: "openai", + model: "gpt-4o", + live: true, + phase: "calibrated", + warming_progress: [1000, 1000], + versions: ["v1", "v2"], + signals: { + behavior: { mu: 0.85, sigma: 0.12, calibrated: true }, + input: { mu: 120, sigma: 45, calibrated: true }, + cost: { mu: 0.004, sigma: 0.001, calibrated: true }, + length: { mu: 450, sigma: 120, calibrated: true }, + }, + }, + { + service_name: "rag-summarizer", + gen_ai_system: "anthropic", + model: "claude-3-5-sonnet", + live: false, + phase: "collecting reference", + warming_progress: [340, 1000], + versions: ["v1"], + }, +]; diff --git a/console/src/test/fixtures/verdicts.ts b/console/src/test/fixtures/verdicts.ts new file mode 100644 index 0000000..ed14d7e --- /dev/null +++ b/console/src/test/fixtures/verdicts.ts @@ -0,0 +1,85 @@ +import type { Verdict } from "@/lib/api/types"; + +export const mockVerdicts: Verdict[] = [ + { + verdict_id: "v-8a2f1c0d", + state: "CHANGED", + sentence: "Behavior shifted +4.2σ in customer-support after v2 release.", + service_name: "customer-support", + version: "v2", + baseline_version: "v1", + subject: "customer-support", + cause: "behavior drift", + flags: { + behavior: true, + cost: false, + runaway: false, + }, + behavior_sigma: 4.2, + cost_sigma: 0.3, + input_sigma: 0.1, + length_sigma: 0.2, + cost_usd_per_req: 0.0042, + baseline_cost_usd_per_req: 0.0040, + velocity_ratio: 1.1, + ts_unix: 1721750000, + onset_ts_unix: 1721749910, + seconds_after_deploy: 90, + samples: 1240, + baseline_samples: 30, + falsifier: "Reverts to STEADY if z_score < 3.0σ across 10 consecutive windows.", + caveats: ["Sample count in baseline is below recommended threshold of 50."], + exemplars: [ + { + kind: "worst", + trace_id: "4f2a91b8e301", + z_score: 5.1, + excerpt: "I cannot fulfill this request as configured.", + signoz_url: "https://signoz.internal/trace/4f2a91b8e301", + }, + { + kind: "median", + trace_id: "9c3d1e2f4a5b", + z_score: 4.1, + excerpt: "Here is your account summary.", + signoz_url: "https://signoz.internal/trace/9c3d1e2f4a5b", + }, + ], + }, + { + verdict_id: "v-1b2c3d4e", + state: "STEADY", + sentence: "All monitored signals remain within 1σ baseline for query-router.", + service_name: "query-router", + version: "v1.4", + baseline_version: "v1.3", + subject: "query-router", + cause: "normal operation", + flags: { + behavior: false, + cost: false, + runaway: false, + }, + behavior_sigma: 0.2, + cost_sigma: -0.1, + ts_unix: 1721748000, + samples: 5000, + baseline_samples: 2000, + falsifier: "Triggers CHANGED if behavior or cost exceeds 3.0σ.", + caveats: [], + exemplars: [ + { + kind: "worst", + trace_id: "8f7e6d5c4b3a", + z_score: 0.4, + excerpt: "Routed query to cluster-us-east.", + }, + { + kind: "median", + trace_id: "1a2b3c4d5e6f", + z_score: 0.1, + excerpt: "Routed query to cluster-us-west.", + }, + ], + }, +]; diff --git a/console/src/test/msw/handlers.ts b/console/src/test/msw/handlers.ts new file mode 100644 index 0000000..4ac1c35 --- /dev/null +++ b/console/src/test/msw/handlers.ts @@ -0,0 +1,26 @@ +import { http, HttpResponse } from "msw"; +import { mockHealth } from "../fixtures/health"; +import { mockScopes } from "../fixtures/scopes"; +import { mockVerdicts } from "../fixtures/verdicts"; + +export const handlers = [ + http.get("/api/verdicts", () => { + return HttpResponse.json({ verdicts: mockVerdicts }); + }), + + http.get("/api/verdicts/:id", ({ params }) => { + const verdict = mockVerdicts.find((v) => v.verdict_id === params.id); + if (!verdict) { + return HttpResponse.json({ error: "verdict not found" }, { status: 404 }); + } + return HttpResponse.json(verdict); + }), + + http.get("/api/scopes", () => { + return HttpResponse.json({ scopes: mockScopes }); + }), + + http.get("/api/health", () => { + return HttpResponse.json(mockHealth); + }), +]; diff --git a/console/src/test/msw/server.ts b/console/src/test/msw/server.ts new file mode 100644 index 0000000..7b37f2a --- /dev/null +++ b/console/src/test/msw/server.ts @@ -0,0 +1,4 @@ +import { setupServer } from "msw/node"; +import { handlers } from "./handlers"; + +export const server = setupServer(...handlers); diff --git a/console/src/test/setup.ts b/console/src/test/setup.ts new file mode 100644 index 0000000..5515544 --- /dev/null +++ b/console/src/test/setup.ts @@ -0,0 +1,22 @@ +import "@testing-library/jest-dom"; +import { afterAll, afterEach, beforeAll } from "vitest"; +import { server } from "./msw/server"; + +beforeAll(() => server.listen({ onUnhandledRequest: "error" })); +afterEach(() => server.resetHandlers()); +afterAll(() => server.close()); + +// Mock window.matchMedia +Object.defineProperty(window, "matchMedia", { + writable: true, + value: (query: string) => ({ + matches: false, + media: query, + onchange: null, + addListener: () => {}, + removeListener: () => {}, + addEventListener: () => {}, + removeEventListener: () => {}, + dispatchEvent: () => false, + }), +}); From 5e54815137924e30346ee012a5f69d4f77606bfe Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 24 Jul 2026 01:00:30 +0530 Subject: [PATCH 08/36] add app router, app header, and responsive layout shell --- console/src/App.tsx | 14 ++++ .../components/AppHeader/AppHeader.module.css | 83 +++++++++++++++++++ console/src/components/AppHeader/index.tsx | 57 +++++++++++++ .../PageHeader/PageHeader.module.css | 34 ++++++++ console/src/components/PageHeader/index.tsx | 28 +++++++ console/src/providers/QueryProvider.tsx | 11 +++ console/src/router.tsx | 32 +++++++ console/src/screens/AboutScreen/index.tsx | 11 +++ console/src/screens/ConsoleScreen/index.tsx | 11 +++ console/src/screens/NotFoundScreen/index.tsx | 15 ++++ console/src/screens/ScopesScreen/index.tsx | 11 +++ 11 files changed, 307 insertions(+) create mode 100644 console/src/App.tsx create mode 100644 console/src/components/AppHeader/AppHeader.module.css create mode 100644 console/src/components/AppHeader/index.tsx create mode 100644 console/src/components/PageHeader/PageHeader.module.css create mode 100644 console/src/components/PageHeader/index.tsx create mode 100644 console/src/providers/QueryProvider.tsx create mode 100644 console/src/router.tsx create mode 100644 console/src/screens/AboutScreen/index.tsx create mode 100644 console/src/screens/ConsoleScreen/index.tsx create mode 100644 console/src/screens/NotFoundScreen/index.tsx create mode 100644 console/src/screens/ScopesScreen/index.tsx diff --git a/console/src/App.tsx b/console/src/App.tsx new file mode 100644 index 0000000..63e1a40 --- /dev/null +++ b/console/src/App.tsx @@ -0,0 +1,14 @@ +import React from "react"; +import { RouterProvider } from "react-router-dom"; +import { QueryProvider } from "./providers/QueryProvider"; +import { router } from "./router"; + +export const App: React.FC = () => { + return ( + + + + ); +}; + +export default App; diff --git a/console/src/components/AppHeader/AppHeader.module.css b/console/src/components/AppHeader/AppHeader.module.css new file mode 100644 index 0000000..80346c7 --- /dev/null +++ b/console/src/components/AppHeader/AppHeader.module.css @@ -0,0 +1,83 @@ +.header { + position: sticky; + top: 0; + z-index: 40; + height: var(--header-height); + background-color: var(--color-surface); + box-shadow: var(--shadow-xs); + border-bottom: 1px solid var(--color-border-subtle); + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 var(--layout-gutter); +} + +.left { + display: flex; + align-items: center; + gap: var(--space-2); +} + +.brand { + font-family: var(--font-mono); + font-size: 18px; + font-weight: 600; + color: var(--color-text); + letter-spacing: -0.01em; + display: flex; + align-items: center; + gap: var(--space-2); +} + +.nav { + display: flex; + align-items: center; + gap: var(--space-6); +} + +.navLink { + font-family: var(--font-sans); + font-size: 14px; + font-weight: 500; + color: var(--color-text-secondary); + padding: var(--space-2) var(--space-3); + border-radius: var(--radius-md); + transition: color var(--dur-instant) var(--ease-out); +} + +.navLink:hover { + color: var(--color-text); +} + +.activeNavLink { + color: var(--color-text); + font-weight: 600; +} + +.right { + display: flex; + align-items: center; + gap: var(--space-3); +} + +.searchInput { + display: flex; + align-items: center; + gap: var(--space-2); + padding: 4px 8px; + background-color: var(--color-surface-subtle); + border: 1px solid var(--color-border); + border-radius: var(--radius-md); + font-size: 13px; + color: var(--color-text-secondary); +} + +.kbdHint { + font-family: var(--font-mono); + font-size: 11px; + background: var(--color-surface-inset); + border: 1px solid var(--color-border); + border-radius: var(--radius-sm); + padding: 0 4px; + color: var(--color-text-tertiary); +} diff --git a/console/src/components/AppHeader/index.tsx b/console/src/components/AppHeader/index.tsx new file mode 100644 index 0000000..f66a5e9 --- /dev/null +++ b/console/src/components/AppHeader/index.tsx @@ -0,0 +1,57 @@ +import type React from "react"; +import { Link, useLocation } from "react-router-dom"; +import styles from "./AppHeader.module.css"; + +export const AppHeader: React.FC = () => { + const location = useLocation(); + + const isConsole = location.pathname === "/" || location.pathname.startsWith("/v/"); + const isScopes = location.pathname === "/scopes"; + + return ( +
+
+ + + vitals + +
+ + + +
+
+ Search... + ⌘K +
+ + About + +
+
+ ); +}; + +export default AppHeader; diff --git a/console/src/components/PageHeader/PageHeader.module.css b/console/src/components/PageHeader/PageHeader.module.css new file mode 100644 index 0000000..3998aa9 --- /dev/null +++ b/console/src/components/PageHeader/PageHeader.module.css @@ -0,0 +1,34 @@ +.pageHeader { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin-bottom: var(--space-6); +} + +.titleGroup { + display: flex; + flex-direction: column; + gap: var(--space-1); +} + +.title { + font-family: var(--font-sans); + font-size: 24px; + line-height: 32px; + font-weight: 600; + letter-spacing: -0.015em; + color: var(--color-text); +} + +.subtitle { + font-family: var(--font-sans); + font-size: 14px; + line-height: 22px; + color: var(--color-text-secondary); +} + +.actions { + display: flex; + align-items: center; + gap: var(--space-3); +} diff --git a/console/src/components/PageHeader/index.tsx b/console/src/components/PageHeader/index.tsx new file mode 100644 index 0000000..430b6da --- /dev/null +++ b/console/src/components/PageHeader/index.tsx @@ -0,0 +1,28 @@ +import type React from "react"; +import styles from "./PageHeader.module.css"; + +export interface PageHeaderProps { + title: string; + subtitle?: string; + actions?: React.ReactNode; + className?: string; +} + +export const PageHeader: React.FC = ({ + title, + subtitle, + actions, + className = "", +}) => { + return ( +
+
+

{title}

+ {subtitle &&

{subtitle}

} +
+ {actions &&
{actions}
} +
+ ); +}; + +export default PageHeader; diff --git a/console/src/providers/QueryProvider.tsx b/console/src/providers/QueryProvider.tsx new file mode 100644 index 0000000..0abad7d --- /dev/null +++ b/console/src/providers/QueryProvider.tsx @@ -0,0 +1,11 @@ +import { queryClient } from "@/lib/query/queryClient"; +import { QueryClientProvider } from "@tanstack/react-query"; +import type React from "react"; + +export const QueryProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { + return ( + + {children} + + ); +}; diff --git a/console/src/router.tsx b/console/src/router.tsx new file mode 100644 index 0000000..ba3a6f5 --- /dev/null +++ b/console/src/router.tsx @@ -0,0 +1,32 @@ +import React from "react"; +import { createBrowserRouter, Outlet } from "react-router-dom"; +import AppHeader from "./components/AppHeader"; +import AboutScreen from "./screens/AboutScreen"; +import ConsoleScreen from "./screens/ConsoleScreen"; +import NotFoundScreen from "./screens/NotFoundScreen"; +import ScopesScreen from "./screens/ScopesScreen"; + +const AppLayout: React.FC = () => { + return ( + <> + +
+ +
+ + ); +}; + +export const router = createBrowserRouter([ + { + path: "/", + element: , + children: [ + { index: true, element: }, + { path: "v/:verdictId", element: }, + { path: "scopes", element: }, + { path: "about", element: }, + { path: "*", element: }, + ], + }, +]); diff --git a/console/src/screens/AboutScreen/index.tsx b/console/src/screens/AboutScreen/index.tsx new file mode 100644 index 0000000..192741d --- /dev/null +++ b/console/src/screens/AboutScreen/index.tsx @@ -0,0 +1,11 @@ +import type React from "react"; + +export const AboutScreen: React.FC = () => { + return ( +
+

About Screen Shell

+
+ ); +}; + +export default AboutScreen; diff --git a/console/src/screens/ConsoleScreen/index.tsx b/console/src/screens/ConsoleScreen/index.tsx new file mode 100644 index 0000000..1e637bc --- /dev/null +++ b/console/src/screens/ConsoleScreen/index.tsx @@ -0,0 +1,11 @@ +import type React from "react"; + +export const ConsoleScreen: React.FC = () => { + return ( +
+

Console Screen Shell

+
+ ); +}; + +export default ConsoleScreen; diff --git a/console/src/screens/NotFoundScreen/index.tsx b/console/src/screens/NotFoundScreen/index.tsx new file mode 100644 index 0000000..6e8d69a --- /dev/null +++ b/console/src/screens/NotFoundScreen/index.tsx @@ -0,0 +1,15 @@ +import type React from "react"; +import { Link } from "react-router-dom"; + +export const NotFoundScreen: React.FC = () => { + return ( +
+

404 — Page not found

+

+ Back to console +

+
+ ); +}; + +export default NotFoundScreen; diff --git a/console/src/screens/ScopesScreen/index.tsx b/console/src/screens/ScopesScreen/index.tsx new file mode 100644 index 0000000..0feedc0 --- /dev/null +++ b/console/src/screens/ScopesScreen/index.tsx @@ -0,0 +1,11 @@ +import type React from "react"; + +export const ScopesScreen: React.FC = () => { + return ( +
+

Scopes Screen Shell

+
+ ); +}; + +export default ScopesScreen; From a2c2f26018e58d33470aef5042b8dc1eb4b7260b Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 24 Jul 2026 01:00:39 +0530 Subject: [PATCH 09/36] add console package-lock.json --- console/package-lock.json | 5431 +++++++++++++++++++++++++++++++++++++ 1 file changed, 5431 insertions(+) create mode 100644 console/package-lock.json diff --git a/console/package-lock.json b/console/package-lock.json new file mode 100644 index 0000000..e05843c --- /dev/null +++ b/console/package-lock.json @@ -0,0 +1,5431 @@ +{ + "name": "vitals-console", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vitals-console", + "version": "0.1.0", + "dependencies": { + "@tanstack/react-query": "^5.28.0", + "lucide-react": "^0.359.0", + "motion": "^11.0.8", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.22.3" + }, + "devDependencies": { + "@biomejs/biome": "^1.6.1", + "@playwright/test": "^1.42.1", + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/react": "^14.2.2", + "@testing-library/user-event": "^14.5.2", + "@types/node": "^20.11.30", + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@vitejs/plugin-react": "^4.2.1", + "axe-core": "^4.9.0", + "jsdom": "^24.0.0", + "msw": "^2.2.8", + "typescript": "^5.4.3", + "vite": "^5.1.6", + "vitest": "^1.4.0" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.5.0.tgz", + "integrity": "sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@biomejs/biome": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", + "dev": true, + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@inquirer/ansi": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.7.tgz", + "integrity": "sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/confirm": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.1.1.tgz", + "integrity": "sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.2.1.tgz", + "integrity": "sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.7.tgz", + "integrity": "sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/type": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.7.tgz", + "integrity": "sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.41.9", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.9.tgz", + "integrity": "sha512-VVPPgHyQ6ShqnrmDWuxjmUIsO9gWyOZFmuOfLd9LfBGQJwZfy0gvv9pbHSJuoFNIYC7ZDX9aoFwowjcdSC4E8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mswjs/interceptors/node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@open-draft/deferred-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-3.0.0.tgz", + "integrity": "sha512-XW375UK8/9SqUVNVa6M0yEy8+iTi4QN5VZ7aZuRFQmy76LRwI9wy5F4YIBU6T+eTe2/DNDo8tqu8RHlwLHM6RA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@playwright/test": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz", + "integrity": "sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.61.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@remix-run/router": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.3.tgz", + "integrity": "sha512-4An71tdz9X8+3sI4Qqqd2LWd9vS39J7sqd9EU4Scw7TJE/qB10Flv/UuqbPVgfQV9XoK8Np6jNquZitnZq5i+Q==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.12", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.12.tgz", + "integrity": "sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tanstack/query-core": { + "version": "5.101.4", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.101.4.tgz", + "integrity": "sha512-gNwcvOJcRbLWPOLG/2OBm+zM+Yv+MKsXKEOWC57USuZDEsI71hEErQsiEGx5wX9rzWWkfwM0fVSPoiIFSsxfiw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.101.4", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.101.4.tgz", + "integrity": "sha512-yRg2pfOCxIs4ZJW3XYYHU/WgtD04FHSnfHlpRT7h7pR77hwkdRG4wxbKe4aq6P0RvXUTBSQpQeadS1SUYUe+KA==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.101.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.3.1.tgz", + "integrity": "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.31", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", + "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/set-cookie-parser": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.10.tgz", + "integrity": "sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/statuses": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.6.tgz", + "integrity": "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.1.tgz", + "integrity": "sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "1.6.1", + "@vitest/utils": "1.6.1", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.1.tgz", + "integrity": "sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "1.6.1", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.1.tgz", + "integrity": "sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/snapshot/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/spy": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.1.tgz", + "integrity": "sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.1.tgz", + "integrity": "sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.1.tgz", + "integrity": "sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.1.tgz", + "integrity": "sha512-HYXq73DDpCtNzOmrFsm9eSwCvWCql0RzqjpDzXN9EadiLJ4DNat0nsZ/Bzmy+Ud12mb4/zKDY0cQ805ZzN+i0A==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.7.tgz", + "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.44", + "caniuse-lite": "^1.0.30001806", + "electron-to-chromium": "^1.5.393", + "node-releases": "^2.0.51", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001806", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", + "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.395", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.395.tgz", + "integrity": "sha512-7zt9Aw+SrmxLWLN0zhaTWZQiCdryLVrYTq5R7iZakLvi2UQPYMMsROYV/2qVCzMeCiSXHwKOU+sZ4zOVVlrtKA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/framer-motion": { + "version": "11.18.2", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz", + "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==", + "license": "MIT", + "dependencies": { + "motion-dom": "^11.18.1", + "motion-utils": "^11.18.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphql": { + "version": "16.14.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.14.2.tgz", + "integrity": "sha512-Chq1s4CY7jmh8gO2qvLIJyfCDIN+EHLFW/9iShnp1z8FjBQMoodWP1kDC36VAMXXIvAjj4ARa7ntfAV2BrjsbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/headers-polyfill": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-5.0.1.tgz", + "integrity": "sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/set-cookie-parser": "^2.4.10", + "set-cookie-parser": "^3.0.1" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "24.1.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz", + "integrity": "sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.12", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.4", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/local-pkg": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.7.3", + "pkg-types": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.359.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.359.0.tgz", + "integrity": "sha512-bxVL+rM/wacjpT0BKShA6r5IIKb6LCRg+ltFG9pnnIwaRX8kK3hq8v5JwMpT7RC6XeqB5cSaaV6GapPWWmtliw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/motion": { + "version": "11.18.2", + "resolved": "https://registry.npmjs.org/motion/-/motion-11.18.2.tgz", + "integrity": "sha512-JLjvFDuFr42NFtcVoMAyC2sEjnpA8xpy6qWPyzQvCloznAyQ8FIXioxWfHiLtgYhoVpfUqSWpn1h9++skj9+Wg==", + "license": "MIT", + "dependencies": { + "framer-motion": "^11.18.2", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/motion-dom": { + "version": "11.18.1", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz", + "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==", + "license": "MIT", + "dependencies": { + "motion-utils": "^11.18.1" + } + }, + "node_modules/motion-utils": { + "version": "11.18.1", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz", + "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/msw": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.15.0.tgz", + "integrity": "sha512-2wQAmKkQKxRuXvYJxVhPGG0wZNBQyD06oJvxqw90XqLvptdqxdlHrFUfEteKkpaNORX3Xzc+HtEl/q0nfmN2wQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@inquirer/confirm": "^6.0.11", + "@mswjs/interceptors": "^0.41.3", + "@open-draft/deferred-promise": "^3.0.0", + "@types/statuses": "^2.0.6", + "cookie": "^1.1.1", + "graphql": "^16.13.2", + "headers-polyfill": "^5.0.1", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "rettime": "^0.11.11", + "statuses": "^2.0.2", + "strict-event-emitter": "^0.5.1", + "tough-cookie": "^6.0.1", + "type-fest": "^5.5.0", + "until-async": "^3.0.2", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.8.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/msw/node_modules/tough-cookie": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz", + "integrity": "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/mute-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", + "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nwsapi": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.24.tgz", + "integrity": "sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "dev": true, + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/playwright": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz", + "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.61.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz", + "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.22.tgz", + "integrity": "sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.30.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.4.tgz", + "integrity": "sha512-SVUsDe+DybHM/WmYKIVYhZh1o5Dcuf16yM6WjG02Q9XVFMZIJyHYhwrr6bFBXZkVP6z69kNkMyBCujt8FaFLJA==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.30.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.4.tgz", + "integrity": "sha512-q4HvNl+mmDdkS0g+MqiBZNteQJCuimWoOyHMy4T/RQLAn9Z29+E91QXRaxOujeMl2HTzRSS0KFPd7lxX3PjV0Q==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.3", + "react-router": "6.30.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/rettime": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.11.11.tgz", + "integrity": "sha512-ILJRqVWBCTlg9r42fFgwVZx1gnFAcQF8mRoMkbgQfIrjEDf9nbBFDFx00oloOa+Q869FUtaYDXZvEfnecQSCoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.2.tgz", + "integrity": "sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw==", + "dev": true, + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-literal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", + "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.4.9", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.9.tgz", + "integrity": "sha512-3kZ8wQQ/k5DrChD4X4FVvr2D7E5uoRgAqkPyLpSCGUvqOvqu+JEdr3mwMUaVWb+vMHZaKhF5fp2PBigKsui7hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.4.9" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.4.9", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.9.tgz", + "integrity": "sha512-DxKfPBI52p2msTEu7MPhdpdDTBhhVQg1a/8PjQckeyAvO13eMYElX545grIp6nnTGIMZlRvFZPvFhvI/WIz2Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz", + "integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/until-async": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/until-async/-/until-async-3.0.2.tgz", + "integrity": "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/kettanaito" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.1.tgz", + "integrity": "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitest": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.1.tgz", + "integrity": "sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "1.6.1", + "@vitest/runner": "1.6.1", + "@vitest/snapshot": "1.6.1", + "@vitest/spy": "1.6.1", + "@vitest/utils": "1.6.1", + "acorn-walk": "^8.3.2", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.3", + "vite": "^5.0.0", + "vite-node": "1.6.1", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "1.6.1", + "@vitest/ui": "1.6.1", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} From 56e11ef2959b5eb52e5924d14c37058971dada5a Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 24 Jul 2026 01:13:31 +0530 Subject: [PATCH 10/36] add button, icon button, and input primitives --- .../src/components/Button/Button.module.css | 113 ++++++++++++++++++ console/src/components/Button/index.tsx | 63 ++++++++++ .../IconButton/IconButton.module.css | 73 +++++++++++ console/src/components/IconButton/index.tsx | 41 +++++++ console/src/components/Input/Input.module.css | 87 ++++++++++++++ console/src/components/Input/index.tsx | 78 ++++++++++++ 6 files changed, 455 insertions(+) create mode 100644 console/src/components/Button/Button.module.css create mode 100644 console/src/components/Button/index.tsx create mode 100644 console/src/components/IconButton/IconButton.module.css create mode 100644 console/src/components/IconButton/index.tsx create mode 100644 console/src/components/Input/Input.module.css create mode 100644 console/src/components/Input/index.tsx diff --git a/console/src/components/Button/Button.module.css b/console/src/components/Button/Button.module.css new file mode 100644 index 0000000..160a044 --- /dev/null +++ b/console/src/components/Button/Button.module.css @@ -0,0 +1,113 @@ +.button { + display: inline-flex; + align-items: center; + justify-content: center; + gap: var(--space-2); + border-radius: var(--radius-md); + font-family: var(--font-sans); + font-weight: 500; + white-space: nowrap; + user-select: none; + border: 1px solid transparent; + transition: background-color var(--dur-instant) var(--ease-out), + border-color var(--dur-instant) var(--ease-out), + color var(--dur-instant) var(--ease-out), + transform var(--dur-fast) var(--ease-out); +} + +.button:active:not(:disabled) { + transform: scale(0.975); +} + +/* Sizes */ +.sizeSm { + height: 28px; + padding: 0 10px; + font-size: 12px; + line-height: 18px; +} + +.sizeMd { + height: 32px; + padding: 0 12px; + font-size: 14px; + line-height: 22px; +} + +.sizeLg { + height: 40px; + padding: 0 16px; + font-size: 14px; + line-height: 22px; +} + +/* Variants */ +.variantPrimary { + background-color: var(--color-accent); + color: #ffffff; + border-color: var(--color-accent); +} + +.variantPrimary:hover:not(:disabled) { + background-color: var(--color-accent-hover); + border-color: var(--color-accent-hover); +} + +.variantPrimary:active:not(:disabled) { + background-color: var(--color-accent-active); +} + +.variantSecondary { + background-color: var(--color-surface); + color: var(--color-text); + border-color: var(--color-border); + box-shadow: var(--shadow-xs); +} + +.variantSecondary:hover:not(:disabled) { + background-color: var(--color-surface-subtle); + border-color: var(--color-border-strong); +} + +.variantGhost { + background-color: transparent; + color: var(--color-text-secondary); + border-color: transparent; +} + +.variantGhost:hover:not(:disabled) { + background-color: var(--color-surface-subtle); + color: var(--color-text); +} + +.variantDanger { + background-color: var(--color-error-dot); + color: #ffffff; + border-color: var(--color-error-dot); +} + +.variantDanger:hover:not(:disabled) { + background-color: var(--color-error-text); +} + +/* Disabled */ +.button:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +/* Spinner */ +.spinner { + width: 14px; + height: 14px; + border: 2px solid currentColor; + border-right-color: transparent; + border-radius: 50%; + animation: spin 700ms linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} diff --git a/console/src/components/Button/index.tsx b/console/src/components/Button/index.tsx new file mode 100644 index 0000000..1bb6411 --- /dev/null +++ b/console/src/components/Button/index.tsx @@ -0,0 +1,63 @@ +import React, { forwardRef } from "react"; +import styles from "./Button.module.css"; + +export type ButtonVariant = "primary" | "secondary" | "ghost" | "danger"; +export type ButtonSize = "sm" | "md" | "lg"; + +export interface ButtonProps extends React.ButtonHTMLAttributes { + variant?: ButtonVariant; + size?: ButtonSize; + loading?: boolean; + leftIcon?: React.ReactNode; + rightIcon?: React.ReactNode; +} + +export const Button = forwardRef( + ( + { + variant = "secondary", + size = "md", + loading = false, + leftIcon, + rightIcon, + children, + className = "", + disabled, + ...props + }, + ref + ) => { + const sizeClass = + size === "sm" ? styles.sizeSm : size === "lg" ? styles.sizeLg : styles.sizeMd; + const variantClass = + variant === "primary" + ? styles.variantPrimary + : variant === "ghost" + ? styles.variantGhost + : variant === "danger" + ? styles.variantDanger + : styles.variantSecondary; + + return ( + + ); + } +); + +Button.displayName = "Button"; +export default Button; diff --git a/console/src/components/IconButton/IconButton.module.css b/console/src/components/IconButton/IconButton.module.css new file mode 100644 index 0000000..e66bba9 --- /dev/null +++ b/console/src/components/IconButton/IconButton.module.css @@ -0,0 +1,73 @@ +.iconButton { + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: var(--radius-md); + user-select: none; + border: 1px solid transparent; + transition: background-color var(--dur-instant) var(--ease-out), + border-color var(--dur-instant) var(--ease-out), + color var(--dur-instant) var(--ease-out), + transform var(--dur-fast) var(--ease-out); +} + +.iconButton:active:not(:disabled) { + transform: scale(0.95); +} + +.sizeSm { + width: 28px; + height: 28px; +} + +.sizeMd { + width: 32px; + height: 32px; +} + +.sizeLg { + width: 40px; + height: 40px; +} + +.variantPrimary { + background-color: var(--color-accent); + color: #ffffff; +} + +.variantPrimary:hover:not(:disabled) { + background-color: var(--color-accent-hover); +} + +.variantSecondary { + background-color: var(--color-surface); + color: var(--color-text-secondary); + border-color: var(--color-border); + box-shadow: var(--shadow-xs); +} + +.variantSecondary:hover:not(:disabled) { + background-color: var(--color-surface-subtle); + color: var(--color-text); + border-color: var(--color-border-strong); +} + +.variantGhost { + background-color: transparent; + color: var(--color-text-secondary); +} + +.variantGhost:hover:not(:disabled) { + background-color: var(--color-surface-subtle); + color: var(--color-text); +} + +.variantDanger { + background-color: var(--color-error-dot); + color: #ffffff; +} + +.iconButton:disabled { + opacity: 0.5; + cursor: not-allowed; +} diff --git a/console/src/components/IconButton/index.tsx b/console/src/components/IconButton/index.tsx new file mode 100644 index 0000000..d126cee --- /dev/null +++ b/console/src/components/IconButton/index.tsx @@ -0,0 +1,41 @@ +import React, { forwardRef } from "react"; +import type { ButtonSize, ButtonVariant } from "../Button"; +import styles from "./IconButton.module.css"; + +export interface IconButtonProps extends React.ButtonHTMLAttributes { + icon: React.ReactNode; + "aria-label": string; + variant?: ButtonVariant; + size?: ButtonSize; + title?: string; +} + +export const IconButton = forwardRef( + ({ icon, "aria-label": ariaLabel, variant = "ghost", size = "md", title, className = "", ...props }, ref) => { + const sizeClass = + size === "sm" ? styles.sizeSm : size === "lg" ? styles.sizeLg : styles.sizeMd; + const variantClass = + variant === "primary" + ? styles.variantPrimary + : variant === "secondary" + ? styles.variantSecondary + : variant === "danger" + ? styles.variantDanger + : styles.variantGhost; + + return ( + + ); + } +); + +IconButton.displayName = "IconButton"; +export default IconButton; diff --git a/console/src/components/Input/Input.module.css b/console/src/components/Input/Input.module.css new file mode 100644 index 0000000..cc4178c --- /dev/null +++ b/console/src/components/Input/Input.module.css @@ -0,0 +1,87 @@ +.wrapper { + display: flex; + flex-direction: column; + gap: var(--space-1); + width: 100%; +} + +.inputContainer { + position: relative; + display: flex; + align-items: center; + width: 100%; +} + +.input { + width: 100%; + border-radius: var(--radius-md); + border: 1px solid var(--color-border); + background-color: var(--color-surface); + color: var(--color-text); + font-family: var(--font-sans); + font-size: 14px; + line-height: 20px; + padding: 0 var(--space-3); + transition: border-color var(--dur-instant) var(--ease-out); +} + +.input:hover:not(:disabled) { + border-color: var(--color-border-strong); +} + +.input:focus-visible { + border-color: var(--color-accent); + box-shadow: var(--focus-ring); + outline: none; +} + +.sizeMd { + height: 32px; +} + +.sizeLg { + height: 40px; +} + +.hasLeadingIcon { + padding-left: 32px; +} + +.hasTrailingButton { + padding-right: 32px; +} + +.leadingIcon { + position: absolute; + left: 10px; + display: flex; + align-items: center; + color: var(--color-text-tertiary); + pointer-events: none; +} + +.trailingButton { + position: absolute; + right: 6px; + display: flex; + align-items: center; + color: var(--color-text-tertiary); + cursor: pointer; + padding: 2px; + border-radius: var(--radius-sm); +} + +.trailingButton:hover { + color: var(--color-text); + background-color: var(--color-surface-subtle); +} + +.inputError { + border-color: var(--color-error-dot); +} + +.errorMessage { + font-size: 12px; + line-height: 18px; + color: var(--color-error-text); +} diff --git a/console/src/components/Input/index.tsx b/console/src/components/Input/index.tsx new file mode 100644 index 0000000..57dbad8 --- /dev/null +++ b/console/src/components/Input/index.tsx @@ -0,0 +1,78 @@ +import { Search, X } from "lucide-react"; +import React, { forwardRef } from "react"; +import styles from "./Input.module.css"; + +export interface InputProps extends React.InputHTMLAttributes { + inputSize?: "md" | "lg"; + variant?: "default" | "search" | "error"; + errorMessage?: string; + onClear?: () => void; + leadingIcon?: React.ReactNode; +} + +export const Input = forwardRef( + ( + { + inputSize = "md", + variant = "default", + errorMessage, + onClear, + leadingIcon, + value, + onChange, + className = "", + disabled, + id, + ...props + }, + ref + ) => { + const isSearch = variant === "search"; + const isError = Boolean(errorMessage) || variant === "error"; + + const sizeClass = inputSize === "lg" ? styles.sizeLg : styles.sizeMd; + const hasLeading = isSearch || Boolean(leadingIcon); + const hasTrailing = isSearch && Boolean(value) && Boolean(onClear); + + return ( +
+
+ {hasLeading && ( + + {leadingIcon || + )} + + {hasTrailing && ( + + )} +
+ {errorMessage && ( + + {errorMessage} + + )} +
+ ); + } +); + +Input.displayName = "Input"; +export default Input; From 49e8c6b82187c714914fcffa6cd1008cb0f55548 Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 24 Jul 2026 01:13:55 +0530 Subject: [PATCH 11/36] add card, badge, status dot, and state badge --- console/src/components/Badge/Badge.module.css | 69 +++++++++++++++++++ console/src/components/Badge/index.tsx | 57 +++++++++++++++ console/src/components/Card/Card.module.css | 32 +++++++++ console/src/components/Card/index.tsx | 58 ++++++++++++++++ console/src/components/StateBadge/index.tsx | 52 ++++++++++++++ .../components/StatusDot/StatusDot.module.css | 39 +++++++++++ console/src/components/StatusDot/index.tsx | 46 +++++++++++++ console/src/constants/states.ts | 61 ++++++++++++++++ 8 files changed, 414 insertions(+) create mode 100644 console/src/components/Badge/Badge.module.css create mode 100644 console/src/components/Badge/index.tsx create mode 100644 console/src/components/Card/Card.module.css create mode 100644 console/src/components/Card/index.tsx create mode 100644 console/src/components/StateBadge/index.tsx create mode 100644 console/src/components/StatusDot/StatusDot.module.css create mode 100644 console/src/components/StatusDot/index.tsx create mode 100644 console/src/constants/states.ts diff --git a/console/src/components/Badge/Badge.module.css b/console/src/components/Badge/Badge.module.css new file mode 100644 index 0000000..c6e6486 --- /dev/null +++ b/console/src/components/Badge/Badge.module.css @@ -0,0 +1,69 @@ +.badge { + display: inline-flex; + align-items: center; + gap: var(--space-1); + border-radius: var(--radius-full); + font-family: var(--font-sans); + font-weight: 500; + white-space: nowrap; + border: 1px solid transparent; + transition: background-color var(--dur-fast) var(--ease-out), + border-color var(--dur-fast) var(--ease-out), + color var(--dur-fast) var(--ease-out); +} + +.sizeSm { + height: 18px; + padding: 0 6px; + font-size: 11px; + line-height: 16px; +} + +.sizeMd { + height: 22px; + padding: 0 8px; + font-size: 12px; + line-height: 18px; +} + +.variantNeutral { + background-color: var(--color-surface-inset); + color: var(--color-text-secondary); + border-color: var(--color-border); +} + +.variantSuccess { + background-color: var(--color-steady-bg); + color: var(--color-steady-text); + border-color: var(--color-steady-border); +} + +.variantWarning { + background-color: var(--color-changed-bg); + color: var(--color-changed-text); + border-color: var(--color-changed-border); +} + +.variantInfo { + background-color: var(--color-inconclusive-bg); + color: var(--color-inconclusive-text); + border-color: var(--color-inconclusive-border); +} + +.variantError { + background-color: var(--color-error-bg); + color: var(--color-error-text); + border-color: var(--color-error-border); +} + +.variantAccent { + background-color: var(--color-accent-subtle); + color: var(--color-accent-text); + border-color: var(--color-accent-border); +} + +.variantOutline { + background-color: transparent; + color: var(--color-text-secondary); + border-color: var(--color-border); +} diff --git a/console/src/components/Badge/index.tsx b/console/src/components/Badge/index.tsx new file mode 100644 index 0000000..04ee84d --- /dev/null +++ b/console/src/components/Badge/index.tsx @@ -0,0 +1,57 @@ +import type React from "react"; +import styles from "./Badge.module.css"; + +export type BadgeVariant = + | "neutral" + | "success" + | "warning" + | "info" + | "error" + | "accent" + | "outline"; + +export type BadgeSize = "sm" | "md"; + +export interface BadgeProps extends React.HTMLAttributes { + variant?: BadgeVariant; + size?: BadgeSize; + icon?: React.ReactNode; + children: React.ReactNode; +} + +export const Badge: React.FC = ({ + variant = "neutral", + size = "md", + icon, + children, + className = "", + ...props +}) => { + const sizeClass = size === "sm" ? styles.sizeSm : styles.sizeMd; + const variantClass = + variant === "success" + ? styles.variantSuccess + : variant === "warning" + ? styles.variantWarning + : variant === "info" + ? styles.variantInfo + : variant === "error" + ? styles.variantError + : variant === "accent" + ? styles.variantAccent + : variant === "outline" + ? styles.variantOutline + : styles.variantNeutral; + + return ( + + {icon} + {children} + + ); +}; + +export default Badge; diff --git a/console/src/components/Card/Card.module.css b/console/src/components/Card/Card.module.css new file mode 100644 index 0000000..8371893 --- /dev/null +++ b/console/src/components/Card/Card.module.css @@ -0,0 +1,32 @@ +.card { + display: block; + background-color: var(--color-surface); + border: 1px solid var(--color-border); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-xs); + padding: var(--space-6); + transition: box-shadow var(--dur-fast) var(--ease-out), + transform var(--dur-fast) var(--ease-out), + border-color var(--dur-fast) var(--ease-out); +} + +.variantInset { + background-color: var(--color-surface-inset); + border: 1px solid var(--color-border-subtle); + box-shadow: none; +} + +.variantInteractive { + cursor: pointer; +} + +.variantInteractive:hover { + box-shadow: var(--shadow-sm); + transform: translateY(-1px); + border-color: var(--color-border-strong); +} + +.variantInteractive:active { + transform: translateY(0); + box-shadow: var(--shadow-xs); +} diff --git a/console/src/components/Card/index.tsx b/console/src/components/Card/index.tsx new file mode 100644 index 0000000..dfca607 --- /dev/null +++ b/console/src/components/Card/index.tsx @@ -0,0 +1,58 @@ +import React, { forwardRef } from "react"; +import styles from "./Card.module.css"; + +export interface CardProps extends React.HTMLAttributes { + variant?: "default" | "interactive" | "inset"; + as?: "div" | "article" | "section" | "button" | "a"; + href?: string; + onClick?: (e: React.MouseEvent) => void; + children: React.ReactNode; +} + +export const Card = forwardRef( + ( + { + variant = "default", + as, + href, + onClick, + children, + className = "", + ...props + }, + ref + ) => { + const isInteractive = variant === "interactive" || Boolean(onClick) || Boolean(href); + const Component = as || (href ? "a" : isInteractive ? "button" : "div"); + + const variantClass = + variant === "inset" + ? styles.variantInset + : isInteractive + ? styles.variantInteractive + : styles.card; + + const extraProps: Record = {}; + if (Component === "a" && href) { + extraProps.href = href; + } + if (Component === "button" && onClick) { + extraProps.type = props.type || "button"; + extraProps.onClick = onClick; + } + + return ( + + {children} + + ); + } +); + +Card.displayName = "Card"; +export default Card; diff --git a/console/src/components/StateBadge/index.tsx b/console/src/components/StateBadge/index.tsx new file mode 100644 index 0000000..0a0dacd --- /dev/null +++ b/console/src/components/StateBadge/index.tsx @@ -0,0 +1,52 @@ +import type React from "react"; +import { STATE_META } from "@/constants/states"; +import type { VerdictState } from "@/lib/api/types"; +import Badge, { type BadgeSize } from "../Badge"; +import StatusDot from "../StatusDot"; + +export interface StateBadgeProps { + state: VerdictState | "ERROR"; + size?: BadgeSize; + showIcon?: boolean; + showDot?: boolean; + count?: number; + className?: string; +} + +export const StateBadge: React.FC = ({ + state, + size = "md", + showIcon = false, + showDot = true, + count, + className = "", +}) => { + const meta = STATE_META[state] || STATE_META.STEADY; + const IconComponent = meta.icon; + + const variant = + state === "STEADY" + ? "success" + : state === "CHANGED" + ? "warning" + : state === "INCONCLUSIVE" + ? "info" + : state === "ERROR" + ? "error" + : "neutral"; + + const leadingIcon = showIcon ? ( +