diff --git a/.dockerignore b/.dockerignore
index ff00f86..e9a45b4 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,6 +1,8 @@
.git
-.astro
-.DS_Store
+.github
+.forgejo
dist
node_modules
npm-debug.log*
+Dockerfile*
+README.md
diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml
deleted file mode 100644
index 4900fda..0000000
--- a/.forgejo/workflows/ci.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-name: CI
-
-on:
- push:
- branches: [main]
- pull_request:
-
-jobs:
- validate:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-node@v4
- with:
- node-version: 22
- cache: npm
- - run: npm ci
- - run: npm run ci
diff --git a/.gitignore b/.gitignore
index a6dbdef..a547bf3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,33 +1,24 @@
-# Dependencies
-node_modules/
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
-# Build output
-dist/
+node_modules
+dist
+dist-ssr
+*.local
-# Astro
-.astro/
-
-# Vite
-node_modules/.vite/
-
-# Environment
-.env
-.env.*
-
-# OS
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
.DS_Store
-Thumbs.db
-
-# IDE
-.vscode/
-.idea/
-*.swp
-*.swo
-
-# Lock files (keep package-lock.json, ignore others)
-bun.lockb
-yarn.lock
-pnpm-lock.yaml
-
-# Local Netlify folder
-.netlify
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/CLAUDE.md b/CLAUDE.md
deleted file mode 100644
index 588afd0..0000000
--- a/CLAUDE.md
+++ /dev/null
@@ -1,123 +0,0 @@
-# CLAUDE.md
-
-This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
-
-## Commands
-
-```bash
-npm run dev # astro dev (local dev server)
-npm run build # astro build → dist/ (static output)
-npm run preview # serve built site
-npm run lint # ESLint over .js/.jsx/.ts/.tsx/.astro
-npm run lint:fix # auto-fix lint issues
-npm run format # prettier --write .
-npm run format:check # prettier --check .
-```
-
-No test suite is configured. Requires Node >= 22.12.0.
-
-`src/components/ui/**` is ignored by ESLint (shadcn-generated code).
-
-## Architecture
-
-Astro 6 + React 19 + Tailwind 4 + shadcn/ui. Output is `static` (`astro.config.mjs`). The site is deployed to Netlify; a single serverless function (`netlify/functions/admin.mts`, routed at `/api/admin`) backs the admin UI. The root README and `components.json` still reference the Hatch template this was forked from — marketing/sections components (`src/components/sections/hatch-*`) and the work/services MDX collections are leftover from that template.
-
-### The interactives system (core content)
-
-Each interactive is a self-contained React component in `src/components/interactives/.tsx` — they freely import shadcn UI, framer-motion, katex, recharts, canvas-confetti, three/@react-three/fiber, etc. Many are 500–2000+ LOC single-file components with their own state machines.
-
-Three registrations must be kept in sync when adding or renaming an interactive:
-
-1. **`src/lib/interactives.ts`** — the canonical registry. Exports `allInteractives` (with `slug`, `title`, `description`, `tags`, `themes`, optional `subcategory`, `dateAdded`, `hasGreenScreen`, `status: "published" | "draft" | "idea"`) and `allThemes`. `publishedInteractives` filters out drafts/ideas; this is what public pages use. `getStaticPaths()` here drives the `/i/[slug]` and `/embed/[slug]` routes and excludes `idea` entries.
-2. **`src/components/InteractiveRenderer.tsx`** — a `componentMap` of `slug → () => import(...)` that lazy-loads the component. ` ` is the single entry point used by both the full page and embed routes.
-3. **`src/lib/interactive-components.ts`** — a second near-duplicate componentMap. Both must be updated together (the duplication is historical; grep for the slug before editing).
-
-The admin API (`applyStatusChange` / `applyDelete` in `netlify/functions/admin.mts`) parses `src/lib/interactives.ts` with string matching against `slug: "..."` and `status: "..." as const,`. Preserve that exact formatting when editing entries — otherwise admin-driven status commits and deletes will silently fail.
-
-### Routing
-
-- `/` → `HomepageHero` (`src/pages/index.astro`)
-- `/i/[slug]` → full interactive page with navbar, breadcrumb, admin bar, share bar (`InteractiveLayout`)
-- `/embed/[slug]` → same interactive in a bare shell (`EmbedLayout`) for iframe embedding; generated for every non-idea interactive
-- `/themes` and `/themes/[theme]` → theme landing pages. "Discrete Math" is the one theme with subcategories (rendered via `ThemeContent` and `/themes/discrete-math/[sub]`); other themes list interactives directly and show an `AddIdeaForm` when the admin is logged in.
-- `/admin` → unlinked dashboard (` `)
-- Blog (`/blog`, `/blog/[...slug]`) reads from the `blog` content collection (`src/content.config.ts`). `scripts/sync-blog.sh` copies posts from a hardcoded Obsidian vault path — it only works on the author's machine.
-
-### Admin system
-
-Client code in `src/lib/admin.ts` keeps state in `localStorage` (auth flag, notes, status overrides, ideas, todos) and mirrors every write to `POST /api/admin`. The admin password is hard-coded in `src/lib/admin.ts` and echoed in the Netlify function (override via the `ADMIN_PASSWORD` env var in production) — this is a personal tool, not a real auth boundary. Don't add secrets here.
-
-The Netlify function persists state by committing to this same repo via the GitHub Contents API:
-- `src/data/admin-data.json` — notes, status overrides, ideas, todos. Bundled at build time and imported as a fallback when the API is unreachable (e.g. under `astro dev`).
-- `src/lib/interactives.ts` — for `commitStatus` and `deleteInteractive`, the function text-edits this source file and commits the result. Commits from the admin UI use descriptive messages like `admin: set to `.
-
-Requires `GITHUB_TOKEN` env var on Netlify; without it, writes silently no-op.
-
-### Todo & idea workflow (Fizzy kanban mirror)
-
-The admin UI lets the author create **todos** (per-interactive, stored in `src/data/admin-data.json` under `todos[slug]`) and **ideas** (proposals for new interactives, under `ideas[]`). When an agent is asked to review or work on these, mirror the work to the author's Fizzy kanban board.
-
-**Board**
-- URL: `https://fizzy.neeldhara.cloud/7/boards/03fziwyb6y5amnepbensjq0sv/`
-- Account: `7`
-- Auth: Fizzy personal access token. **Do not commit it to this repo.** Read it from the `FIZZY_PAT` env var (or whatever secret store the author provides). If the token is unavailable, skip the mirror step and flag it to the user — never hardcode a fallback.
-
-**Card conventions**
-- One card per todo (title = the todo text) or per idea (title = idea title).
-- The interactive **slug** (e.g. `parity-bits-game`, `three-bank-accounts`) becomes a **tag** on the card, grouping cards by interactive. For ideas not yet tied to a slug, use the idea's working title as a tag.
-- **Column placement:**
- - Todo the agent has made progress on → **Review** column.
- - Idea the agent has implemented → **Review** column, with an implementation overview in the card body (what was built, files touched, trade-offs).
- - Todos/ideas without progress → whatever the board's inbox/backlog column is. Confirm with the user if unclear.
-- **Card description must include a review link** — the GitHub URL for the staging branch (compare view vs. main) or, if a PR exists, the PR URL.
-
-**Commit flow**
-- Progress on todos/ideas goes to a **staging branch**, not directly to `main` and not to a per-session `claude/*` branch (unless the user explicitly says so).
-- Prefer a stable branch name (e.g. `staging`) so card links stay valid as more work lands, rather than a new branch per todo.
-
-### Green screen mode
-
-Interactives marked `hasGreenScreen: true` can be wrapped in `GreenScreenWrapper` to render on a pure `#00ff00` background with forced black/white foreground colors (for chroma-keying into videos). The wrapper injects `!important` CSS overrides; be aware when debugging styling inside one.
-
-### Aliases and conventions
-
-TS path aliases from `tsconfig.json`: `@/*` → `src/*`, plus `@components/*`, `@layouts/*`, `@lib/*`. shadcn aliases in `components.json` point components to `@/components`, utils to `@/lib/utils` (the `cn()` helper). Tailwind 4 is wired via `@tailwindcss/vite` (no tailwind.config.js); design tokens live in `src/styles/global.css`. Icon library is `lucide-react`.
-
-ESLint enforces `simple-import-sort` — imports and exports get auto-sorted on `lint:fix`.
-
-## Design & aesthetics
-
-The site has a distinctive editorial-meets-playful feel: serif display type over restrained neutrals, one warm red-orange accent, and generous whitespace. Interactives are the payoff — they should feel polished and a little delightful, not enterprise-CRUD.
-
-**Reach for shadcn before hand-rolling.** `Card` / `CardHeader` / `CardTitle` / `CardContent` is the canonical container for an interactive's sections. `Button`, `Badge`, `Alert`, `Tabs`, `Dialog`, `Slider`, `Switch`, `Tooltip`, `Input`, `Label` are already themed and wired up — use them. Edit `src/components/ui/*` only with deliberate reason (ESLint ignores this dir because it's shadcn-generated).
-
-**Always use design tokens, never raw hex.** Colors live as CSS variables in `src/styles/global.css` and are exposed as Tailwind utilities:
-- Surfaces: `bg-background`, `bg-card`, `bg-muted`, `bg-accent`
-- Text: `text-foreground`, `text-muted-foreground`
-- Brand accent: `bg-primary` / `text-primary` / `text-primary-foreground` — use sparingly, for true calls-to-action
-- Borders: `border-border`
-- Status: `text-destructive`, `text-success`, chart colors `chart-1`..`chart-5`
-
-Colors are authored in OKLCH. If you need a shade that isn't in the palette, add a token rather than inlining.
-
-**Dark mode is mandatory.** The `.dark` class on `` flips the tokens. Any literal tailwind color (`bg-green-100`, `text-amber-700`, etc.) *must* come with a `dark:` counterpart — see `ThreeBankAccounts.tsx`'s `RANK_COLORS` for the pattern. Better yet, lean on design tokens so dark mode is automatic.
-
-**Typography.** Castoro (serif) for `h1`/`h2` via `.font-display`; Imprima/Geist (sans) for body and `h3+`. This pairing is load-bearing for the editorial feel — don't swap `h1` to sans on a whim. The `container` utility caps at 1200px; `container-sm` caps at 960px for denser reading layouts.
-
-**Radii.** Base `--radius` is `0.625rem`, exposed as `rounded-sm` → `rounded-4xl` on the Tailwind scale. Cards and panels are typically `rounded-xl`; pill buttons/badges are `rounded-full`; small chips are `rounded-md`.
-
-**Motion and delight.** `framer-motion` for layout/presence animations, `canvas-confetti` for win states and discovery moments, `katex` for math (`katex/dist/katex.min.css` must be imported where used). `prefers-reduced-motion` is honored globally in `global.css` — you don't need to guard individual transitions, but don't gate critical state changes behind animation either.
-
-**Interactive layout patterns.** Looking across the folder, published interactives tend to:
-- Open with a short framing `Alert` or intro card explaining the premise
-- Put the play area center stage, controls below or to the side
-- Use `Tabs` to separate modes (e.g. *Play / Explore / Solution* in `ThreeBankAccounts`)
-- Use `Badge` for status, tags, and hint chips
-- Reset with a `RotateCcw` icon button; celebrate wins with confetti + a toast (`sonner` is wired up)
-- Stay responsive — test at mobile widths, since these embed into blog posts and videos
-
-**Taste defaults.** Prefer fewer, cleaner controls over exhaustive settings. If a new feature needs an options panel, that's a signal to reconsider the UX. When in doubt, match the visual weight and density of an existing, well-regarded interactive in the same theme rather than inventing a new idiom.
-
-### Build gotchas
-
-`astro.config.mjs` sanitizes Rollup chunk filenames (`[^\w./-]` → `_`) and pins esbuild to `es2022` / `utf8` — these work around Netlify's esbuild choking on `!` and `~` in chunk names. Don't revert without retesting on Netlify. `netlify.toml` also disables Netlify's own JS/CSS bundling so Vite's output is shipped as-is.
diff --git a/Dockerfile b/Dockerfile
index 0bfb4ee..3a4cfee 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -8,22 +8,12 @@ RUN npm ci
COPY . .
RUN npm run ci
-FROM node:22-alpine AS runtime
+FROM nginx:1.27-alpine AS runtime
-WORKDIR /app
-
-ENV NODE_ENV=production
-ENV PORT=80
-
-COPY package.json package-lock.json ./
-RUN npm ci --omit=dev && npm cache clean --force
-
-COPY --from=build /app/dist ./dist
-COPY server ./server
+COPY nginx.conf /etc/nginx/conf.d/default.conf
+COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
- CMD wget -q --spider http://127.0.0.1/api/health || exit 1
-
-CMD ["node", "server/index.mjs"]
+ CMD wget -q --spider http://127.0.0.1/ || exit 1
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 85bd88d..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-Shadcnblocks.com License
-
-Copyright (c) 2024 Shadcnblocks.com
-
-This license grants you, the purchaser, a non-exclusive, worldwide, and perpetual right to use the Shadcnblocks.com template under the following terms:
-
-✅ What You Can Do
-
-- Use the template to build unlimited custom websites or digital products for yourself, your company or your clients.
-- Use the template in both personal and commercial projects.
-- Sell or transfer finished end products to clients. An “end product” must be a customized implementation requiring your own skill and effort (e.g., a launched website or app), not the template in its original or minimally modified form.
-
-❌ What You Can’t Do
-
-- You may not use any part of this template in a resellable template, UI kit, design system, competing product, derivative work, or similar offering.
-- You may not redistribute or publicly share the source code of this template, including uploading it to any public or open-source code repository.
-- You may not offer or provide this template through any website builder, online platform, or tool where it could be accessed or resold to end users or third parties.
-- You may not use this template as input or training data for large language models (LLMs) or AI tools to generate derivate templates and works that may resold, redistributed, or made publicly available.
\ No newline at end of file
diff --git a/README.md b/README.md
index 069d831..41d9e97 100644
--- a/README.md
+++ b/README.md
@@ -1,36 +1,79 @@
-# Hatch Astro Template
+# Welcome to your Lovable project
-Hatch Astro Template is a premium template built by https://www.shadcnblocks.com
+## Project info
-- [Demo](https://hatch-astro-template.vercel.app/)
-- [Documentation](https://docs.shadcnblocks.com/templates/getting-started)
+**URL**: https://lovable.dev/projects/5ee9d1e7-af25-47e9-ab4c-bdbca4554e32
-## Screenshot
+## How can I edit this code?
-
+There are several ways of editing your application.
-## Getting Started
+**Use Lovable**
-```bash
-npm install
-```
+Simply visit the [Lovable Project](https://lovable.dev/projects/5ee9d1e7-af25-47e9-ab4c-bdbca4554e32) and start prompting.
-```bash
+Changes made via Lovable will be committed automatically to this repo.
+
+**Use your preferred IDE**
+
+If you want to work locally using your own IDE, you can clone this repo and push changes. Pushed changes will also be reflected in Lovable.
+
+The only requirement is having Node.js & npm installed - [install with nvm](https://github.com/nvm-sh/nvm#installing-and-updating)
+
+Follow these steps:
+
+```sh
+# Step 1: Clone the repository using the project's Git URL.
+git clone
+
+# Step 2: Navigate to the project directory.
+cd
+
+# Step 3: Install the necessary dependencies.
+npm i
+
+# Step 4: Start the development server with auto-reloading and an instant preview.
npm run dev
```
-Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+**Edit a file directly in GitHub**
-## Forgejo and Dokploy
+- Navigate to the desired file(s).
+- Click the "Edit" button (pencil icon) at the top right of the file view.
+- Make your changes and commit the changes.
-The `forgejo` remote points to `Websites/interactives`. Forgejo Actions runs lint, the classroom synchronization test, and the Astro production build on every push to `main`. Dokploy builds the checked-in `Dockerfile`; the container serves the static Astro site and the `/sync` WebSocket endpoint on port 80.
+**Use GitHub Codespaces**
-## Tech Stack
+- Navigate to the main page of your repository.
+- Click on the "Code" button (green button) near the top right.
+- Select the "Codespaces" tab.
+- Click on "New codespace" to launch a new Codespace environment.
+- Edit files directly within the Codespace and commit and push your changes once you're done.
-- Astro
-- Tailwind 4
-- shadcn/ui
+## What technologies are used for this project?
-## Deploy on Vercel
+This project is built with:
-The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com)
+- Vite
+- TypeScript
+- React
+- shadcn-ui
+- Tailwind CSS
+
+## How can I deploy this project?
+
+Simply open [Lovable](https://lovable.dev/projects/5ee9d1e7-af25-47e9-ab4c-bdbca4554e32) and click on Share -> Publish.
+
+### Forgejo and Dokploy
+
+The production container is built from `Dockerfile` and serves the Vite output with NGINX, including React Router fallback handling. During the image build, `npm ci` installs the locked dependencies and `npm run ci` runs lint plus the production Vite build.
+
+Dokploy is connected to the `Websites/interactives` Forgejo repository through a push webhook with autodeploy enabled. A push to `main` triggers the Dockerfile CI checks and replaces the running service only after every build step succeeds.
+
+## Can I connect a custom domain to my Lovable project?
+
+Yes, you can!
+
+To connect a domain, navigate to Project > Settings > Domains and click Connect Domain.
+
+Read more here: [Setting up a custom domain](https://docs.lovable.dev/tips-tricks/custom-domain#step-by-step-guide)
diff --git a/astro.config.mjs b/astro.config.mjs
deleted file mode 100644
index 0936466..0000000
--- a/astro.config.mjs
+++ /dev/null
@@ -1,59 +0,0 @@
-// @ts-check
-import { defineConfig, fontProviders } from "astro/config";
-import mdx from "@astrojs/mdx";
-import sitemap from "@astrojs/sitemap";
-
-import react from "@astrojs/react";
-import tailwindcss from "@tailwindcss/vite";
-import { attachDiceSyncServer } from "./server/dice-sync.mjs";
-// Admin API runs as a standalone Netlify Function (see netlify/functions/admin.mts)
-
-const attachedServers = new WeakSet();
-const classroomSync = () => ({
- name: "classroom-dice-sync",
- configureServer(server) {
- if (server.httpServer && !attachedServers.has(server.httpServer)) {
- attachDiceSyncServer(server.httpServer);
- attachedServers.add(server.httpServer);
- }
- },
- configurePreviewServer(server) {
- if (server.httpServer && !attachedServers.has(server.httpServer)) {
- attachDiceSyncServer(server.httpServer);
- attachedServers.add(server.httpServer);
- }
- },
-});
-
-// https://astro.build/config
-export default defineConfig({
- site: "https://interactives.neeldhara.com",
- integrations: [mdx(), sitemap(), react()],
- output: "static",
-
- fonts: [
- {
- provider: fontProviders.fontsource(),
- name: "Imprima",
- cssVariable: "--font-imprima",
- },
- ],
-
- vite: {
- plugins: [tailwindcss(), classroomSync()],
- build: {
- target: "es2022",
- minify: "esbuild",
- // Sanitize chunk filenames — Netlify esbuild chokes on ! and ~ in names
- rollupOptions: {
- output: {
- sanitizeFileName: (name) => name.replace(/[^\w./-]/g, "_"),
- },
- },
- },
- esbuild: {
- target: "es2022",
- charset: "utf8",
- },
- },
-});
diff --git a/bun.lockb b/bun.lockb
new file mode 100644
index 0000000..160304d
Binary files /dev/null and b/bun.lockb differ
diff --git a/components.json b/components.json
index d469103..f29e3f1 100644
--- a/components.json
+++ b/components.json
@@ -1,28 +1,20 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
- "style": "radix-nova",
+ "style": "default",
"rsc": false,
"tsx": true,
"tailwind": {
- "config": "",
- "css": "src/styles/global.css",
- "baseColor": "neutral",
+ "config": "tailwind.config.ts",
+ "css": "src/index.css",
+ "baseColor": "slate",
"cssVariables": true,
"prefix": ""
},
- "iconLibrary": "lucide",
- "rtl": false,
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
- },
- "menuColor": "default",
- "menuAccent": "subtle",
- "registries": {
- "@magicui": "https://magicui.design/r/{name}",
- "@aceternity": "https://ui.aceternity.com/registry/{name}.json"
}
-}
+}
\ No newline at end of file
diff --git a/components.json.bak b/components.json.bak
deleted file mode 100644
index 7c0f6c5..0000000
--- a/components.json.bak
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "$schema": "https://ui.shadcn.com/schema.json",
- "style": "radix-nova",
- "rsc": false,
- "tsx": true,
- "tailwind": {
- "config": "",
- "css": "src/styles/global.css",
- "baseColor": "neutral",
- "cssVariables": true,
- "prefix": ""
- },
- "iconLibrary": "lucide",
- "rtl": false,
- "menuColor": "default",
- "menuAccent": "subtle",
- "aliases": {
- "components": "@/components",
- "utils": "@/lib/utils",
- "ui": "@/components/ui",
- "lib": "@/lib",
- "hooks": "@/hooks"
- },
- "registries": {
- "@magicui": "https://magicui.design/r/{name}",
- "@aceternity": "https://ui.aceternity.com/registry/{name}.json"
- }
-}
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000..e67846f
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,29 @@
+import js from "@eslint/js";
+import globals from "globals";
+import reactHooks from "eslint-plugin-react-hooks";
+import reactRefresh from "eslint-plugin-react-refresh";
+import tseslint from "typescript-eslint";
+
+export default tseslint.config(
+ { ignores: ["dist"] },
+ {
+ extends: [js.configs.recommended, ...tseslint.configs.recommended],
+ files: ["**/*.{ts,tsx}"],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ plugins: {
+ "react-hooks": reactHooks,
+ "react-refresh": reactRefresh,
+ },
+ rules: {
+ ...reactHooks.configs.recommended.rules,
+ "react-refresh/only-export-components": [
+ "warn",
+ { allowConstantExport: true },
+ ],
+ "@typescript-eslint/no-unused-vars": "off",
+ },
+ }
+);
diff --git a/eslint.config.mjs b/eslint.config.mjs
deleted file mode 100644
index 253b2fd..0000000
--- a/eslint.config.mjs
+++ /dev/null
@@ -1,62 +0,0 @@
-import astroPlugin from "eslint-plugin-astro";
-import astroParser from "astro-eslint-parser";
-import tsPlugin from "@typescript-eslint/eslint-plugin";
-import tsParser from "@typescript-eslint/parser";
-import simpleImportSort from "eslint-plugin-simple-import-sort";
-
-export default [
- {
- ignores: [
- "node_modules/**",
- "dist/**",
- ".astro/**",
- "src/components/ui/**",
- ],
- },
-
- // Lint .astro files
- {
- files: ["**/*.astro"],
- languageOptions: {
- parser: astroParser,
- parserOptions: {
- parser: tsParser,
- ecmaVersion: "latest",
- sourceType: "module",
- },
- },
- plugins: { astro: astroPlugin, "simple-import-sort": simpleImportSort },
- rules: {
- ...astroPlugin.configs.recommended.rules,
- "simple-import-sort/imports": "error",
- "simple-import-sort/exports": "error",
- },
- },
-
- // Lint TS/JS/React files
- {
- files: ["**/*.{ts,tsx,js,jsx}"],
- languageOptions: {
- parser: tsParser,
- parserOptions: {
- ecmaVersion: "latest",
- sourceType: "module",
- ecmaFeatures: { jsx: true },
- },
- },
- plugins: {
- "@typescript-eslint": tsPlugin,
- "simple-import-sort": simpleImportSort,
- },
- rules: {
- ...tsPlugin.configs.recommended.rules,
- "simple-import-sort/imports": "error",
- "simple-import-sort/exports": "error",
- // Optional: relax some noisy rules if needed
- "@typescript-eslint/no-unused-vars": [
- "warn",
- { argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
- ],
- },
- },
-];
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..ee10e1c
--- /dev/null
+++ b/index.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+ interactive-intellectual-vault
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/netlify.toml b/netlify.toml
deleted file mode 100644
index 3322a7a..0000000
--- a/netlify.toml
+++ /dev/null
@@ -1,18 +0,0 @@
-[build]
- command = "npm run build"
- publish = "dist"
- functions = "netlify/functions"
-
-[build.environment]
- NODE_VERSION = "22"
-
-# Disable Netlify's asset post-processing — Astro/Vite handles bundling
-[build.processing]
- skip_processing = false
-[build.processing.js]
- bundle = false
- minify = false
-[build.processing.css]
- bundle = false
- minify = false
-
diff --git a/netlify/functions/admin.mts b/netlify/functions/admin.mts
deleted file mode 100644
index 5c8c372..0000000
--- a/netlify/functions/admin.mts
+++ /dev/null
@@ -1,274 +0,0 @@
-import type { Context } from "@netlify/functions";
-
-const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD || "yukti2025";
-const GITHUB_TOKEN = process.env.GITHUB_TOKEN || "";
-const GITHUB_REPO = "nm-static/interactives";
-const GITHUB_BRANCH = "main";
-
-const DEFAULT_DATA = { statusOverrides: {}, notes: {}, ideas: [], todos: {} };
-
-// --- GitHub API helpers ---
-
-async function githubGetFile(path: string): Promise<{ content: string; sha: string } | null> {
- if (!GITHUB_TOKEN) return null;
- try {
- const res = await fetch(
- `https://api.github.com/repos/${GITHUB_REPO}/contents/${path}?ref=${GITHUB_BRANCH}`,
- { headers: { Authorization: `Bearer ${GITHUB_TOKEN}`, Accept: "application/vnd.github.v3+json" } }
- );
- if (!res.ok) return null;
- const data = await res.json();
- const content = Buffer.from(data.content, "base64").toString("utf-8");
- return { content, sha: data.sha };
- } catch { return null; }
-}
-
-async function githubPutFile(path: string, content: string, message: string, sha?: string): Promise {
- if (!GITHUB_TOKEN) return false;
- try {
- const body: any = {
- message,
- content: Buffer.from(content).toString("base64"),
- branch: GITHUB_BRANCH,
- };
- if (sha) body.sha = sha;
- const res = await fetch(
- `https://api.github.com/repos/${GITHUB_REPO}/contents/${path}`,
- {
- method: "PUT",
- headers: { Authorization: `Bearer ${GITHUB_TOKEN}`, Accept: "application/vnd.github.v3+json", "Content-Type": "application/json" },
- body: JSON.stringify(body),
- }
- );
- return res.ok;
- } catch { return false; }
-}
-
-// --- Data helpers ---
-
-async function readData() {
- const file = await githubGetFile("src/data/admin-data.json");
- if (file) return { ...DEFAULT_DATA, ...JSON.parse(file.content), _sha: file.sha };
- return { ...DEFAULT_DATA };
-}
-
-async function writeData(data: any, message = "admin: update admin data") {
- const { _sha, ...cleanData } = data;
- const content = JSON.stringify(cleanData, null, 2) + "\n";
- await githubPutFile("src/data/admin-data.json", content, message, _sha);
-}
-
-type TodoLike = { id: string; refId?: string; done?: boolean; remark?: string };
-
-/** Describe what changed between two whole-todos snapshots. */
-function describeTodoChanges(
- oldTodos: Record = {},
- newTodos: Record = {}
-): string | null {
- const perSlug: string[] = [];
- const slugs = new Set([...Object.keys(oldTodos), ...Object.keys(newTodos)]);
- for (const slug of slugs) {
- const oldList = oldTodos[slug] || [];
- const newList = newTodos[slug] || [];
- const oldById = new Map(oldList.map((t) => [t.id, t]));
- const newById = new Map(newList.map((t) => [t.id, t]));
-
- const added: TodoLike[] = [];
- const removed: TodoLike[] = [];
- const markedDone: TodoLike[] = [];
- const reopened: TodoLike[] = [];
- const remarkChanged: TodoLike[] = [];
-
- for (const [id, t] of newById) {
- if (!oldById.has(id)) added.push(t);
- }
- for (const [id, t] of oldById) {
- if (!newById.has(id)) removed.push(t);
- }
- for (const [id, newT] of newById) {
- const oldT = oldById.get(id);
- if (!oldT) continue;
- if ((oldT.done ?? false) !== (newT.done ?? false)) {
- (newT.done ? markedDone : reopened).push(newT);
- } else if ((oldT.remark || "") !== (newT.remark || "")) {
- remarkChanged.push(newT);
- }
- }
-
- const refs = (list: TodoLike[]) =>
- list.map((t) => t.refId || t.id.slice(0, 8)).join(", ");
- const parts: string[] = [];
- if (added.length) parts.push(`add ${refs(added)}`);
- if (removed.length) parts.push(`remove ${refs(removed)}`);
- if (markedDone.length) parts.push(`mark ${refs(markedDone)} done`);
- if (reopened.length) parts.push(`reopen ${refs(reopened)}`);
- if (remarkChanged.length) parts.push(`remark on ${refs(remarkChanged)}`);
- if (parts.length) perSlug.push(`${slug}: ${parts.join(", ")}`);
- }
- return perSlug.length ? perSlug.join("; ") : null;
-}
-
-// --- Source file helpers ---
-
-function applyStatusChange(source: string, slug: string, newStatus: string): string | null {
- const slugPattern = `slug: "${slug}"`;
- const slugIndex = source.indexOf(slugPattern);
- if (slugIndex === -1) return null;
- const closingIndex = source.indexOf("\n },", slugIndex);
- if (closingIndex === -1) return null;
- const block = source.substring(slugIndex, closingIndex);
- const statusMatch = block.match(/status: "(\w+)" as const,/);
- if (!statusMatch) return null;
- const oldStatusStr = `status: "${statusMatch[1]}" as const,`;
- const newStatusStr = `status: "${newStatus}" as const,`;
- const statusOffset = block.indexOf(oldStatusStr);
- if (statusOffset === -1) return null;
- const absOffset = slugIndex + statusOffset;
- return source.substring(0, absOffset) + newStatusStr + source.substring(absOffset + oldStatusStr.length);
-}
-
-function applyDelete(source: string, slug: string): string | null {
- const slugPattern = `slug: "${slug}"`;
- const slugIndex = source.indexOf(slugPattern);
- if (slugIndex === -1) return null;
- let braceStart = source.lastIndexOf(" {", slugIndex);
- if (braceStart === -1) return null;
- const closingPattern = "\n },";
- let braceEnd = source.indexOf(closingPattern, slugIndex);
- if (braceEnd === -1) return null;
- braceEnd += closingPattern.length;
- const beforeBrace = source.substring(0, braceStart);
- const lastNewline = beforeBrace.lastIndexOf("\n");
- const lineBefore = beforeBrace.substring(lastNewline + 1).trim();
- const deleteFrom = lineBefore.startsWith("//") ? lastNewline + 1 : braceStart;
- return source.substring(0, deleteFrom) + source.substring(braceEnd).replace(/\n{3,}/g, "\n\n");
-}
-
-async function updateInteractivesSource(slug: string, newStatus: string): Promise {
- const file = await githubGetFile("src/lib/interactives.ts");
- if (!file) return false;
- const updated = applyStatusChange(file.content, slug, newStatus);
- if (!updated) return false;
- return await githubPutFile("src/lib/interactives.ts", updated, `admin: set ${slug} to ${newStatus}`, file.sha);
-}
-
-async function deleteInteractiveFromSource(slug: string): Promise {
- const file = await githubGetFile("src/lib/interactives.ts");
- if (!file) return false;
- const updated = applyDelete(file.content, slug);
- if (!updated) return false;
- return await githubPutFile("src/lib/interactives.ts", updated, `admin: delete ${slug}`, file.sha);
-}
-
-// --- Auth ---
-
-function checkAuth(request: Request): boolean {
- const auth = request.headers.get("x-admin-password");
- return auth === ADMIN_PASSWORD;
-}
-
-function json(data: any, status = 200) {
- return new Response(JSON.stringify(data), {
- status,
- headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" },
- });
-}
-
-// --- Handler ---
-
-export default async (request: Request, context: Context) => {
- // Handle CORS preflight
- if (request.method === "OPTIONS") {
- return new Response(null, {
- headers: {
- "Access-Control-Allow-Origin": "*",
- "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
- "Access-Control-Allow-Headers": "Content-Type, x-admin-password",
- },
- });
- }
-
- if (!checkAuth(request)) {
- return json({ error: "Unauthorized" }, 401);
- }
-
- if (request.method === "GET") {
- const data = await readData();
- const { _sha, ...cleanData } = data;
- return json(cleanData);
- }
-
- if (request.method === "POST") {
- const body = await request.json();
- const data = await readData();
- let message = "admin: update admin data";
-
- if (body.action === "setStatus") {
- data.statusOverrides[body.slug] = body.status;
- message = `admin: override ${body.slug} status to ${body.status}`;
- } else if (body.action === "clearStatus") {
- delete data.statusOverrides[body.slug];
- message = `admin: clear status override on ${body.slug}`;
- } else if (body.action === "commitStatus") {
- const success = await updateInteractivesSource(body.slug, body.status);
- if (success) {
- delete data.statusOverrides[body.slug];
- await writeData(data, `admin: clear override after committing ${body.slug} status`);
- return json({ ok: true, committed: true });
- }
- return json({ ok: false, error: "Failed to update source file" }, 500);
- } else if (body.action === "setNote") {
- if (body.note?.trim()) {
- data.notes[body.slug] = body.note;
- message = `admin: update note on ${body.slug}`;
- } else {
- delete data.notes[body.slug];
- message = `admin: clear note on ${body.slug}`;
- }
- } else if (body.action === "addIdea") {
- const idea = body.idea;
- data.ideas.push({
- ...idea,
- id: idea.id || crypto.randomUUID(),
- createdAt: idea.createdAt || new Date().toISOString().split("T")[0],
- });
- message = `admin: add idea "${idea.title || idea.id?.slice(0, 8) || ""}"`.trim();
- } else if (body.action === "removeIdea") {
- const removed = data.ideas.find((i: any) => i.id === body.id);
- data.ideas = data.ideas.filter((i: any) => i.id !== body.id);
- message = `admin: remove idea${removed?.title ? ` "${removed.title}"` : ""}`;
- } else if (body.action === "updateIdea") {
- const existing = data.ideas.find((i: any) => i.id === body.id);
- data.ideas = data.ideas.map((i: any) =>
- i.id === body.id ? { ...i, ...body.updates } : i
- );
- message = `admin: update idea${existing?.title ? ` "${existing.title}"` : ""}`;
- } else if (body.action === "deleteInteractive") {
- const success = await deleteInteractiveFromSource(body.slug);
- delete data.statusOverrides[body.slug];
- delete data.notes[body.slug];
- delete data.todos?.[body.slug];
- await writeData(data, `admin: clean up admin data for deleted ${body.slug}`);
- return json({ ok: success, deleted: success });
- } else if (body.action === "setTodos") {
- const desc = describeTodoChanges(data.todos, body.todos);
- data.todos = body.todos;
- if (desc) message = `admin: ${desc}`;
- } else if (body.action === "saveAll") {
- if (body.statusOverrides) data.statusOverrides = body.statusOverrides;
- if (body.notes) data.notes = body.notes;
- if (body.ideas) data.ideas = body.ideas;
- if (body.todos) data.todos = body.todos;
- message = "admin: bulk sync (saveAll)";
- }
-
- await writeData(data, message);
- return json({ ok: true });
- }
-
- return json({ error: "Method not allowed" }, 405);
-};
-
-export const config = {
- path: "/api/admin",
-};
diff --git a/nginx.conf b/nginx.conf
new file mode 100644
index 0000000..aca9d71
--- /dev/null
+++ b/nginx.conf
@@ -0,0 +1,22 @@
+server {
+ listen 80;
+ listen [::]:80;
+ server_name _;
+
+ root /usr/share/nginx/html;
+ index index.html;
+
+ location / {
+ try_files $uri $uri/ /index.html;
+ }
+
+ location = /index.html {
+ add_header Cache-Control "no-cache";
+ }
+
+ location ~* \.(?:css|js|mjs|jpg|jpeg|png|gif|ico|svg|webp|woff|woff2)$ {
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+ try_files $uri =404;
+ }
+}
diff --git a/package-lock.json b/package-lock.json
index 556e5b7..6c7ec7f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,551 +1,129 @@
{
- "name": "hatch-astro-template",
- "version": "1.0.0",
+ "name": "vite_react_shadcn_ts",
+ "version": "0.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "hatch-astro-template",
- "version": "1.0.0",
+ "name": "vite_react_shadcn_ts",
+ "version": "0.0.0",
"dependencies": {
- "@astrojs/netlify": "^7.0.7",
- "@astrojs/react": "^5.0.2",
- "@astrojs/rss": "^4.0.18",
- "@fontsource-variable/geist": "^5.2.8",
- "@fontsource/castoro": "^5.2.7",
- "@fontsource/imprima": "^5.2.8",
- "@fontsource/inter": "^5.2.8",
- "@react-three/drei": "^10.7.7",
- "@react-three/fiber": "^9.5.0",
- "@tailwindcss/typography": "^0.5.16",
- "@types/katex": "^0.16.8",
- "@types/qrcode": "^1.5.6",
- "@types/three": "^0.183.1",
- "astro": "^6.1.7",
- "canvas-confetti": "^1.9.4",
+ "@hookform/resolvers": "^3.9.0",
+ "@radix-ui/react-accordion": "^1.2.0",
+ "@radix-ui/react-alert-dialog": "^1.1.1",
+ "@radix-ui/react-aspect-ratio": "^1.1.0",
+ "@radix-ui/react-avatar": "^1.1.0",
+ "@radix-ui/react-checkbox": "^1.1.1",
+ "@radix-ui/react-collapsible": "^1.1.0",
+ "@radix-ui/react-context-menu": "^2.2.1",
+ "@radix-ui/react-dialog": "^1.1.2",
+ "@radix-ui/react-dropdown-menu": "^2.1.1",
+ "@radix-ui/react-hover-card": "^1.1.1",
+ "@radix-ui/react-label": "^2.1.0",
+ "@radix-ui/react-menubar": "^1.1.1",
+ "@radix-ui/react-navigation-menu": "^1.2.0",
+ "@radix-ui/react-popover": "^1.1.1",
+ "@radix-ui/react-progress": "^1.1.0",
+ "@radix-ui/react-radio-group": "^1.2.0",
+ "@radix-ui/react-scroll-area": "^1.1.0",
+ "@radix-ui/react-select": "^2.1.1",
+ "@radix-ui/react-separator": "^1.1.0",
+ "@radix-ui/react-slider": "^1.2.0",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-switch": "^1.1.0",
+ "@radix-ui/react-tabs": "^1.1.0",
+ "@radix-ui/react-toast": "^1.2.1",
+ "@radix-ui/react-toggle": "^1.1.0",
+ "@radix-ui/react-toggle-group": "^1.1.0",
+ "@radix-ui/react-tooltip": "^1.1.4",
+ "@react-three/drei": "^9.122.0",
+ "@react-three/fiber": "^8.18.0",
+ "@tanstack/react-query": "^5.56.2",
+ "@types/qrcode": "^1.5.5",
+ "canvas-confetti": "^1.9.3",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
- "cmdk": "^1.1.1",
- "embla-carousel-autoplay": "^8.5.2",
- "embla-carousel-react": "^8.6.0",
- "framer-motion": "^11.18.2",
- "gifenc": "^1.0.3",
- "gray-matter": "^4.0.3",
- "input-otp": "^1.4.2",
- "katex": "^0.16.45",
- "lucide-react": "^0.479.0",
- "next-themes": "^0.4.6",
+ "cmdk": "^1.0.0",
+ "date-fns": "^3.6.0",
+ "embla-carousel-react": "^8.3.0",
+ "input-otp": "^1.2.4",
+ "lucide-react": "^0.462.0",
+ "next-themes": "^0.3.0",
"qrcode": "^1.5.4",
- "radix-ui": "^1.4.3",
- "react": "^19.2.4",
- "react-day-picker": "^9.14.0",
- "react-dom": "^19.2.4",
- "react-resizable-panels": "^4.8.0",
- "recharts": "^3.8.0",
- "shadcn": "^4.1.1",
- "sonner": "^2.0.7",
- "tailwind-merge": "^3.5.0",
- "three": "^0.183.2",
- "tw-animate-css": "^1.4.0",
- "vaul": "^1.1.2",
- "ws": "^8.21.1"
+ "react": "^18.3.1",
+ "react-day-picker": "^8.10.1",
+ "react-dom": "^18.3.1",
+ "react-hook-form": "^7.53.0",
+ "react-resizable-panels": "^2.1.3",
+ "react-router-dom": "^6.26.2",
+ "recharts": "^2.12.7",
+ "sonner": "^1.5.0",
+ "tailwind-merge": "^2.5.2",
+ "tailwindcss-animate": "^1.0.7",
+ "three": "^0.160.1",
+ "vaul": "^0.9.3",
+ "zod": "^3.23.8"
},
"devDependencies": {
- "@astrojs/mdx": "^5.0.3",
- "@astrojs/sitemap": "^3.7.2",
- "@tailwindcss/vite": "^4.1.18",
- "@types/react": "^19.2.14",
- "@types/react-dom": "^19.2.3",
- "@typescript-eslint/eslint-plugin": "^8.39.0",
- "@typescript-eslint/parser": "^8.39.0",
- "astro-eslint-parser": "^1.2.2",
- "autoprefixer": "^10.4.21",
- "eslint": "^9.32.0",
- "eslint-config-prettier": "^10.1.8",
- "eslint-plugin-astro": "^1.3.1",
- "eslint-plugin-simple-import-sort": "^12.1.1",
- "postcss": "^8.5.6",
- "prettier": "^3.6.2",
- "prettier-plugin-astro": "^0.14.1",
- "prettier-plugin-tailwindcss": "^0.6.11",
- "tailwindcss": "^4.1.11"
- },
+ "@eslint/js": "^9.9.0",
+ "@tailwindcss/typography": "^0.5.15",
+ "@types/node": "^22.5.5",
+ "@types/react": "^18.3.3",
+ "@types/react-dom": "^18.3.0",
+ "@vitejs/plugin-react-swc": "^3.5.0",
+ "autoprefixer": "^10.4.20",
+ "eslint": "^9.9.0",
+ "eslint-plugin-react-hooks": "^5.1.0-rc.0",
+ "eslint-plugin-react-refresh": "^0.4.9",
+ "globals": "^15.9.0",
+ "lovable-tagger": "^1.1.7",
+ "postcss": "^8.4.47",
+ "tailwindcss": "^3.4.11",
+ "typescript": "^5.5.3",
+ "typescript-eslint": "^8.0.1",
+ "vite": "^5.4.1"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "license": "MIT",
"engines": {
- "node": ">=22.12.0"
- }
- },
- "node_modules/@astrojs/compiler": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz",
- "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==",
- "dev": true
- },
- "node_modules/@astrojs/internal-helpers": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.8.0.tgz",
- "integrity": "sha512-J56GrhEiV+4dmrGLPNOl2pZjpHXAndWVyiVDYGDuw6MWKpBSEMLdFxHzeM/6sqaknw9M+HFfHZAcvi3OfT3D/w==",
- "license": "MIT",
- "dependencies": {
- "picomatch": "^4.0.3"
- }
- },
- "node_modules/@astrojs/markdown-remark": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.1.0.tgz",
- "integrity": "sha512-P+HnCsu2js3BoTc8kFmu+E9gOcFeMdPris75g+Zl4sY8+bBRbSQV6xzcBDbZ27eE7yBGEGQoqjpChx+KJYIPYQ==",
- "license": "MIT",
- "dependencies": {
- "@astrojs/internal-helpers": "0.8.0",
- "@astrojs/prism": "4.0.1",
- "github-slugger": "^2.0.0",
- "hast-util-from-html": "^2.0.3",
- "hast-util-to-text": "^4.0.2",
- "js-yaml": "^4.1.1",
- "mdast-util-definitions": "^6.0.0",
- "rehype-raw": "^7.0.0",
- "rehype-stringify": "^10.0.1",
- "remark-gfm": "^4.0.1",
- "remark-parse": "^11.0.0",
- "remark-rehype": "^11.1.2",
- "remark-smartypants": "^3.0.2",
- "retext-smartypants": "^6.2.0",
- "shiki": "^4.0.0",
- "smol-toml": "^1.6.0",
- "unified": "^11.0.5",
- "unist-util-remove-position": "^5.0.0",
- "unist-util-visit": "^5.1.0",
- "unist-util-visit-parents": "^6.0.2",
- "vfile": "^6.0.3"
- }
- },
- "node_modules/@astrojs/mdx": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-5.0.3.tgz",
- "integrity": "sha512-zv/OlM5sZZvyjHqJjR3FjJvoCgbxdqj3t4jO/gSEUNcck3BjdtMgNQw8UgPfAGe4yySdG4vjZ3OC5wUxhu7ckg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@astrojs/markdown-remark": "7.1.0",
- "@mdx-js/mdx": "^3.1.1",
- "acorn": "^8.16.0",
- "es-module-lexer": "^2.0.0",
- "estree-util-visit": "^2.0.0",
- "hast-util-to-html": "^9.0.5",
- "piccolore": "^0.1.3",
- "rehype-raw": "^7.0.0",
- "remark-gfm": "^4.0.1",
- "remark-smartypants": "^3.0.2",
- "source-map": "^0.7.6",
- "unist-util-visit": "^5.1.0",
- "vfile": "^6.0.3"
- },
- "engines": {
- "node": ">=22.12.0"
- },
- "peerDependencies": {
- "astro": "^6.0.0"
- }
- },
- "node_modules/@astrojs/netlify": {
- "version": "7.0.7",
- "resolved": "https://registry.npmjs.org/@astrojs/netlify/-/netlify-7.0.7.tgz",
- "integrity": "sha512-B6dz6IJ96Dtv4+Bz/wTBqVwms2f+bjzNDnrnoapqy78O1mb9IRjEcuqgZsIpxxL5C1O0bQ6rawaL0jspjJKLGQ==",
- "license": "MIT",
- "dependencies": {
- "@astrojs/internal-helpers": "0.8.0",
- "@astrojs/underscore-redirects": "1.0.3",
- "@netlify/blobs": "^10.7.0",
- "@netlify/functions": "^5.1.2",
- "@netlify/vite-plugin": "^2.10.3",
- "@vercel/nft": "^1.3.2",
- "esbuild": "^0.27.3",
- "tinyglobby": "^0.2.15",
- "vite": "^7.3.1"
- },
- "peerDependencies": {
- "astro": "^6.0.0"
- }
- },
- "node_modules/@astrojs/prism": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.1.tgz",
- "integrity": "sha512-nksZQVjlferuWzhPsBpQ1JE5XuKAf1id1/9Hj4a9KG4+ofrlzxUUwX4YGQF/SuDiuiGKEnzopGOt38F3AnVWsQ==",
- "license": "MIT",
- "dependencies": {
- "prismjs": "^1.30.0"
- },
- "engines": {
- "node": ">=22.12.0"
- }
- },
- "node_modules/@astrojs/react": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-5.0.2.tgz",
- "integrity": "sha512-BDpPrapV3Wgp9sD7aTMvP+ORH0jFEue9OmkBu98KcBbTlsQCnvisDW3m7PQrMptXwEDlX5HGfP/CHmkEVY2tZA==",
- "license": "MIT",
- "dependencies": {
- "@astrojs/internal-helpers": "0.8.0",
- "@vitejs/plugin-react": "^5.2.0",
- "devalue": "^5.6.4",
- "ultrahtml": "^1.6.0",
- "vite": "^7.3.1"
- },
- "engines": {
- "node": ">=22.12.0"
- },
- "peerDependencies": {
- "@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0",
- "@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0",
- "react": "^17.0.2 || ^18.0.0 || ^19.0.0",
- "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/@astrojs/rss": {
- "version": "4.0.18",
- "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.18.tgz",
- "integrity": "sha512-wc5DwKlbTEdgVAWnHy8krFTeQ42t1v/DJqeq5HtulYK3FYHE4krtRGjoyhS3eXXgfdV6Raoz2RU3wrMTFAitRg==",
- "license": "MIT",
- "dependencies": {
- "fast-xml-parser": "^5.5.7",
- "piccolore": "^0.1.3",
- "zod": "^4.3.6"
- }
- },
- "node_modules/@astrojs/rss/node_modules/zod": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
- "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
- "node_modules/@astrojs/sitemap": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.2.tgz",
- "integrity": "sha512-PqkzkcZTb5ICiyIR8VoKbIAP/laNRXi5tw616N1Ckk+40oNB8Can1AzVV56lrbC5GKSZFCyJYUVYqVivMisvpA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "sitemap": "^9.0.0",
- "stream-replace-string": "^2.0.0",
- "zod": "^4.3.6"
- }
- },
- "node_modules/@astrojs/sitemap/node_modules/zod": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
- "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
- "node_modules/@astrojs/telemetry": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz",
- "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==",
- "license": "MIT",
- "dependencies": {
- "ci-info": "^4.2.0",
- "debug": "^4.4.0",
- "dlv": "^1.1.3",
- "dset": "^3.1.4",
- "is-docker": "^3.0.0",
- "is-wsl": "^3.1.0",
- "which-pm-runs": "^1.1.0"
- },
- "engines": {
- "node": "18.20.8 || ^20.3.0 || >=22.0.0"
- }
- },
- "node_modules/@astrojs/underscore-redirects": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@astrojs/underscore-redirects/-/underscore-redirects-1.0.3.tgz",
- "integrity": "sha512-cxnGSw+sJigBLdX4TMSZKkzV6C3gMLJMucDk2W+n281Xhie68T2/9f1+1NMNDCZsc5i0FED7Qt5I10g2O9wtZg==",
- "license": "MIT"
- },
- "node_modules/@babel/code-frame": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
- "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.28.5",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.1.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
- "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
- "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
- "dependencies": {
- "@babel/code-frame": "^7.29.0",
- "@babel/generator": "^7.29.0",
- "@babel/helper-compilation-targets": "^7.28.6",
- "@babel/helper-module-transforms": "^7.28.6",
- "@babel/helpers": "^7.28.6",
- "@babel/parser": "^7.29.0",
- "@babel/template": "^7.28.6",
- "@babel/traverse": "^7.29.0",
- "@babel/types": "^7.29.0",
- "@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"
+ "node": ">=10"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.29.1",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
- "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
- "dependencies": {
- "@babel/parser": "^7.29.0",
- "@babel/types": "^7.29.0",
- "@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-annotate-as-pure": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
- "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.27.3"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
- "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
- "dependencies": {
- "@babel/compat-data": "^7.28.6",
- "@babel/helper-validator-option": "^7.27.1",
- "browserslist": "^4.24.0",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz",
- "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-member-expression-to-functions": "^7.28.5",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/helper-replace-supers": "^7.28.6",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/traverse": "^7.28.6",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-globals": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz",
- "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==",
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.28.5",
- "@babel/types": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
- "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
- "dependencies": {
- "@babel/traverse": "^7.28.6",
- "@babel/types": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
- "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
- "dependencies": {
- "@babel/helper-module-imports": "^7.28.6",
- "@babel/helper-validator-identifier": "^7.28.5",
- "@babel/traverse": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
- "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
- "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-replace-supers": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz",
- "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.28.5",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/traverse": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
- "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
- "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
- "dependencies": {
- "@babel/template": "^7.28.6",
- "@babel/types": "^7.28.6"
- },
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.29.2",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz",
- "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.9.tgz",
+ "integrity": "sha512-aI3jjAAO1fh7vY/pBGsn1i9LDbRP43+asrRlkPuTXW5yHXtd1NgTEMudbBoDDxrf1daEEfPJqR+JBMakzrR4Dg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.29.0"
+ "@babel/types": "^7.25.9"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -554,723 +132,332 @@
"node": ">=6.0.0"
}
},
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
- "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
- "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz",
- "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-transforms": "^7.28.6",
- "@babel/helper-plugin-utils": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-react-jsx-self": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
- "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-react-jsx-source": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
- "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-typescript": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz",
- "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-create-class-features-plugin": "^7.28.6",
- "@babel/helper-plugin-utils": "^7.28.6",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/plugin-syntax-typescript": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/preset-typescript": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz",
- "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-validator-option": "^7.27.1",
- "@babel/plugin-syntax-jsx": "^7.27.1",
- "@babel/plugin-transform-modules-commonjs": "^7.27.1",
- "@babel/plugin-transform-typescript": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
"node_modules/@babel/runtime": {
- "version": "7.29.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz",
- "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
+ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/template": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
- "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
- "dependencies": {
- "@babel/code-frame": "^7.28.6",
- "@babel/parser": "^7.28.6",
- "@babel/types": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
- "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
- "dependencies": {
- "@babel/code-frame": "^7.29.0",
- "@babel/generator": "^7.29.0",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.29.0",
- "@babel/template": "^7.28.6",
- "@babel/types": "^7.29.0",
- "debug": "^4.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/types": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
- "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.9.tgz",
+ "integrity": "sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@capsizecss/unpack": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-4.0.0.tgz",
- "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==",
- "license": "MIT",
- "dependencies": {
- "fontkitten": "^1.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@clack/core": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.1.0.tgz",
- "integrity": "sha512-SVcm4Dqm2ukn64/8Gub2wnlA5nS2iWJyCkdNHcvNHPIeBTGojpdJ+9cZKwLfmqy7irD4N5qLteSilJlE0WLAtA==",
- "license": "MIT",
- "dependencies": {
- "sisteransi": "^1.0.5"
- }
- },
- "node_modules/@clack/prompts": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.1.0.tgz",
- "integrity": "sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g==",
- "license": "MIT",
- "dependencies": {
- "@clack/core": "1.1.0",
- "sisteransi": "^1.0.5"
- }
- },
- "node_modules/@colors/colors": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz",
- "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.1.90"
- }
- },
- "node_modules/@dabh/diagnostics": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz",
- "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==",
- "license": "MIT",
- "dependencies": {
- "@so-ric/colorspace": "^1.1.6",
- "enabled": "2.0.x",
- "kuler": "^2.0.0"
- }
- },
- "node_modules/@date-fns/tz": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz",
- "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==",
- "license": "MIT"
- },
- "node_modules/@dependents/detective-less": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz",
- "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==",
- "license": "MIT",
- "dependencies": {
- "gonzales-pe": "^4.3.0",
- "node-source-walk": "^7.0.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/@dimforge/rapier3d-compat": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@dimforge/rapier3d-compat/-/rapier3d-compat-0.12.0.tgz",
"integrity": "sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==",
"license": "Apache-2.0"
},
- "node_modules/@dotenvx/dotenvx": {
- "version": "1.59.1",
- "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.59.1.tgz",
- "integrity": "sha512-Qg+meC+XFxliuVSDlEPkKnaUjdaJKK6FNx/Wwl2UxhQR8pyPIuLhMavsF7ePdB9qFZUWV1jEK3ckbJir/WmF4w==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "commander": "^11.1.0",
- "dotenv": "^17.2.1",
- "eciesjs": "^0.4.10",
- "execa": "^5.1.1",
- "fdir": "^6.2.0",
- "ignore": "^5.3.0",
- "object-treeify": "1.1.33",
- "picomatch": "^4.0.2",
- "which": "^4.0.0"
- },
- "bin": {
- "dotenvx": "src/cli/dotenvx.js"
- },
- "funding": {
- "url": "https://dotenvx.com"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/isexe": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz",
- "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "license": "ISC"
- },
- "node_modules/@dotenvx/dotenvx/node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/which": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
- "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
- "license": "ISC",
- "dependencies": {
- "isexe": "^3.1.1"
- },
- "bin": {
- "node-which": "bin/which.js"
- },
- "engines": {
- "node": "^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/@ecies/ciphers": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.5.tgz",
- "integrity": "sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A==",
- "license": "MIT",
- "engines": {
- "bun": ">=1",
- "deno": ">=2",
- "node": ">=16"
- },
- "peerDependencies": {
- "@noble/ciphers": "^1.0.0"
- }
- },
- "node_modules/@electric-sql/pglite": {
- "version": "0.3.16",
- "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.3.16.tgz",
- "integrity": "sha512-mZkZfOd9OqTMHsK+1cje8OSzfAQcpD7JmILXTl5ahdempjUDdmg4euf1biDex5/LfQIDJ3gvCu6qDgdnDxfJmA==",
- "license": "Apache-2.0"
- },
- "node_modules/@emnapi/runtime": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz",
- "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@envelop/instrumentation": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@envelop/instrumentation/-/instrumentation-1.0.0.tgz",
- "integrity": "sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==",
- "license": "MIT",
- "dependencies": {
- "@whatwg-node/promise-helpers": "^1.2.1",
- "tslib": "^2.5.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz",
- "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz",
- "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz",
- "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz",
- "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz",
- "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz",
- "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz",
- "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz",
- "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz",
- "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz",
- "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz",
- "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz",
- "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz",
- "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz",
- "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz",
- "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz",
- "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz",
- "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz",
- "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==",
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz",
+ "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -1281,28 +468,30 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz",
- "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz",
- "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==",
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz",
+ "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -1313,134 +502,137 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz",
- "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==",
+ "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": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz",
- "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz",
- "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz",
- "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz",
- "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz",
- "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==",
+ "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": ">=18"
+ "node": ">=12"
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
- "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "eslint-visitor-keys": "^3.4.3"
+ "eslint-visitor-keys": "^3.3.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
- "funding": {
- "url": "https://opencollective.com/eslint"
- },
"peerDependencies": {
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
}
},
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
- "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.11.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz",
+ "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
"node_modules/@eslint/config-array": {
- "version": "0.21.1",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
- "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
+ "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@eslint/object-schema": "^2.1.7",
+ "@eslint/object-schema": "^2.1.4",
"debug": "^4.3.1",
"minimatch": "^3.1.2"
},
@@ -1448,57 +640,22 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@eslint/config-array/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/@eslint/config-array/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/@eslint/config-helpers": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
- "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
- "dev": true,
- "dependencies": {
- "@eslint/core": "^0.17.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
"node_modules/@eslint/core": {
- "version": "0.17.0",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
- "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
+ "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
"dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
+ "license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/eslintrc": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
- "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+ "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
@@ -1506,7 +663,7 @@
"globals": "^14.0.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
- "js-yaml": "^4.1.1",
+ "js-yaml": "^4.1.0",
"minimatch": "^3.1.2",
"strip-json-comments": "^3.1.1"
},
@@ -1517,119 +674,77 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 4"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
+ "node": ">=18"
},
- "engines": {
- "node": "*"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@eslint/js": {
- "version": "9.39.2",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
- "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
+ "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
}
},
"node_modules/@eslint/object-schema": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
- "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
+ "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
- "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz",
+ "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==",
"dev": true,
"dependencies": {
- "@eslint/core": "^0.17.0",
"levn": "^0.4.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@fastify/accept-negotiator": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz",
- "integrity": "sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fastify"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fastify"
- }
- ],
- "license": "MIT"
- },
- "node_modules/@fastify/busboy": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz",
- "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==",
- "license": "MIT"
- },
"node_modules/@floating-ui/core": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz",
- "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==",
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
+ "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
"license": "MIT",
"dependencies": {
- "@floating-ui/utils": "^0.2.11"
+ "@floating-ui/utils": "^0.2.8"
}
},
"node_modules/@floating-ui/dom": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz",
- "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==",
+ "version": "1.6.11",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz",
+ "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==",
"license": "MIT",
"dependencies": {
- "@floating-ui/core": "^1.7.5",
- "@floating-ui/utils": "^0.2.11"
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.8"
}
},
"node_modules/@floating-ui/react-dom": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz",
- "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
+ "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
"license": "MIT",
"dependencies": {
- "@floating-ui/dom": "^1.7.6"
+ "@floating-ui/dom": "^1.0.0"
},
"peerDependencies": {
"react": ">=16.8.0",
@@ -1637,74 +752,39 @@
}
},
"node_modules/@floating-ui/utils": {
- "version": "0.2.11",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz",
- "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==",
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
+ "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==",
"license": "MIT"
},
- "node_modules/@fontsource-variable/geist": {
- "version": "5.2.8",
- "resolved": "https://registry.npmjs.org/@fontsource-variable/geist/-/geist-5.2.8.tgz",
- "integrity": "sha512-cJ6m9e+8MQ5dCYJsLylfZrgBh6KkG4bOLckB35Tr9J/EqdkEM6QllH5PxqP1dhTvFup+HtMRPuz9xOjxXJggxw==",
- "license": "OFL-1.1",
- "funding": {
- "url": "https://github.com/sponsors/ayuhito"
- }
- },
- "node_modules/@fontsource/castoro": {
- "version": "5.2.7",
- "resolved": "https://registry.npmjs.org/@fontsource/castoro/-/castoro-5.2.7.tgz",
- "integrity": "sha512-KntyAd+5Hq2CAqNVILDEu6B64DzeAxqTXRpzMJuWfsVnN/QeChCqN2bjWA1nwqVPjle3DQuJOiu+F99ZGYE6Hw==",
- "funding": {
- "url": "https://github.com/sponsors/ayuhito"
- }
- },
- "node_modules/@fontsource/imprima": {
- "version": "5.2.8",
- "resolved": "https://registry.npmjs.org/@fontsource/imprima/-/imprima-5.2.8.tgz",
- "integrity": "sha512-BdZ+OBW9Wc/P1qYLIbCKNxNgjKE1rn8d4pc0LdGs6uhph7z9nDAp9jtizhuhJgRGDBfxfC7w2jOsiEJ+xP77Xg==",
- "license": "OFL-1.1",
- "funding": {
- "url": "https://github.com/sponsors/ayuhito"
- }
- },
- "node_modules/@fontsource/inter": {
- "version": "5.2.8",
- "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz",
- "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==",
- "funding": {
- "url": "https://github.com/sponsors/ayuhito"
- }
- },
- "node_modules/@hono/node-server": {
- "version": "1.19.12",
- "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.12.tgz",
- "integrity": "sha512-txsUW4SQ1iilgE0l9/e9VQWmELXifEFvmdA1j6WFh/aFPj99hIntrSsq/if0UWyGVkmrRPKA1wCeP+UCr1B9Uw==",
+ "node_modules/@hookform/resolvers": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.0.tgz",
+ "integrity": "sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==",
"license": "MIT",
- "engines": {
- "node": ">=18.14.1"
- },
"peerDependencies": {
- "hono": "^4"
+ "react-hook-form": "^7.0.0"
}
},
"node_modules/@humanfs/core": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
- "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz",
+ "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=18.18.0"
}
},
"node_modules/@humanfs/node": {
- "version": "0.16.7",
- "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
- "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
+ "version": "0.16.5",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz",
+ "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@humanfs/core": "^0.19.1",
- "@humanwhocodes/retry": "^0.4.0"
+ "@humanfs/core": "^0.19.0",
+ "@humanwhocodes/retry": "^0.3.0"
},
"engines": {
"node": ">=18.18.0"
@@ -1715,6 +795,7 @@
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=12.22"
},
@@ -1723,20 +804,12 @@
"url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@humanwhocodes/momoa": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-2.0.4.tgz",
- "integrity": "sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=10.10.0"
- }
- },
"node_modules/@humanwhocodes/retry": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
- "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=18.18"
},
@@ -1745,566 +818,6 @@
"url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@iarna/toml": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
- "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==",
- "license": "ISC"
- },
- "node_modules/@img/colour": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
- "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@img/sharp-darwin-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz",
- "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-darwin-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz",
- "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz",
- "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz",
- "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz",
- "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==",
- "cpu": [
- "arm"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz",
- "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-ppc64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz",
- "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==",
- "cpu": [
- "ppc64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-riscv64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz",
- "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==",
- "cpu": [
- "riscv64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz",
- "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==",
- "cpu": [
- "s390x"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz",
- "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz",
- "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz",
- "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-linux-arm": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz",
- "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==",
- "cpu": [
- "arm"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz",
- "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-ppc64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz",
- "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==",
- "cpu": [
- "ppc64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-ppc64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-riscv64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz",
- "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==",
- "cpu": [
- "riscv64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-riscv64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-s390x": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz",
- "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==",
- "cpu": [
- "s390x"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linux-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz",
- "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz",
- "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz",
- "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.2.4"
- }
- },
- "node_modules/@img/sharp-wasm32": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz",
- "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==",
- "cpu": [
- "wasm32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/runtime": "^1.7.0"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz",
- "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-ia32": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz",
- "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==",
- "cpu": [
- "ia32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
- "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@import-maps/resolve": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@import-maps/resolve/-/resolve-2.0.0.tgz",
- "integrity": "sha512-RwzRTpmrrS6Q1ZhQExwuxJGK1Wqhv4stt+OF2JzS+uawewpwNyU7EJL1WpBex7aDiiGLs4FsXGkfUBdYuX7xiQ==",
- "license": "MIT"
- },
- "node_modules/@inquirer/ansi": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz",
- "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@inquirer/confirm": {
- "version": "5.1.21",
- "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz",
- "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==",
- "license": "MIT",
- "dependencies": {
- "@inquirer/core": "^10.3.2",
- "@inquirer/type": "^3.0.10"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@types/node": ">=18"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- }
- }
- },
- "node_modules/@inquirer/core": {
- "version": "10.3.2",
- "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz",
- "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==",
- "license": "MIT",
- "dependencies": {
- "@inquirer/ansi": "^1.0.2",
- "@inquirer/figures": "^1.0.15",
- "@inquirer/type": "^3.0.10",
- "cli-width": "^4.1.0",
- "mute-stream": "^2.0.0",
- "signal-exit": "^4.1.0",
- "wrap-ansi": "^6.2.0",
- "yoctocolors-cjs": "^2.1.3"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@types/node": ">=18"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- }
- }
- },
- "node_modules/@inquirer/figures": {
- "version": "1.0.15",
- "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz",
- "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@inquirer/type": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz",
- "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@types/node": ">=18"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- }
- }
- },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -2322,260 +835,64 @@
"node": ">=12"
}
},
- "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
- "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "license": "MIT"
- },
- "node_modules/@isaacs/cliui/node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/@isaacs/fs-minipass": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
- "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
- "license": "ISC",
- "dependencies": {
- "minipass": "^7.0.4"
- },
- "engines": {
- "node": ">=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==",
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "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==",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
"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==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "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=="
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "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==",
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@mapbox/node-pre-gyp": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.3.tgz",
- "integrity": "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "consola": "^3.2.3",
- "detect-libc": "^2.0.0",
- "https-proxy-agent": "^7.0.5",
- "node-fetch": "^2.6.7",
- "nopt": "^8.0.0",
- "semver": "^7.5.3",
- "tar": "^7.4.0"
- },
- "bin": {
- "node-pre-gyp": "bin/node-pre-gyp"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@mapbox/node-pre-gyp/node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "license": "MIT",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/@mdx-js/mdx": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz",
- "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/mdx": "^2.0.0",
- "acorn": "^8.0.0",
- "collapse-white-space": "^2.0.0",
- "devlop": "^1.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "estree-util-scope": "^1.0.0",
- "estree-walker": "^3.0.0",
- "hast-util-to-jsx-runtime": "^2.0.0",
- "markdown-extensions": "^2.0.0",
- "recma-build-jsx": "^1.0.0",
- "recma-jsx": "^1.0.0",
- "recma-stringify": "^1.0.0",
- "rehype-recma": "^1.0.0",
- "remark-mdx": "^3.0.0",
- "remark-parse": "^11.0.0",
- "remark-rehype": "^11.0.0",
- "source-map": "^0.7.0",
- "unified": "^11.0.0",
- "unist-util-position-from-estree": "^2.0.0",
- "unist-util-stringify-position": "^4.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/@mediapipe/tasks-vision": {
"version": "0.10.17",
"resolved": "https://registry.npmjs.org/@mediapipe/tasks-vision/-/tasks-vision-0.10.17.tgz",
"integrity": "sha512-CZWV/q6TTe8ta61cZXjfnnHsfWIdFhms03M9T7Cnd5y2mdpylJM0rF1qRq+wsQVRMLz1OYPVEBU9ph2Bx8cxrg==",
"license": "Apache-2.0"
},
- "node_modules/@modelcontextprotocol/sdk": {
- "version": "1.28.0",
- "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.28.0.tgz",
- "integrity": "sha512-gmloF+i+flI8ouQK7MWW4mOwuMh4RePBuPFAEPC6+pdqyWOUMDOixb6qZ69owLJpz6XmyllCouc4t8YWO+E2Nw==",
- "license": "MIT",
- "dependencies": {
- "@hono/node-server": "^1.19.9",
- "ajv": "^8.17.1",
- "ajv-formats": "^3.0.1",
- "content-type": "^1.0.5",
- "cors": "^2.8.5",
- "cross-spawn": "^7.0.5",
- "eventsource": "^3.0.2",
- "eventsource-parser": "^3.0.0",
- "express": "^5.2.1",
- "express-rate-limit": "^8.2.1",
- "hono": "^4.11.4",
- "jose": "^6.1.3",
- "json-schema-typed": "^8.0.2",
- "pkce-challenge": "^5.0.0",
- "raw-body": "^3.0.0",
- "zod": "^3.25 || ^4.0",
- "zod-to-json-schema": "^3.25.1"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@cfworker/json-schema": "^4.1.1",
- "zod": "^3.25 || ^4.0"
- },
- "peerDependenciesMeta": {
- "@cfworker/json-schema": {
- "optional": true
- },
- "zod": {
- "optional": false
- }
- }
- },
- "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
- "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT"
- },
"node_modules/@monogrid/gainmap-js": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@monogrid/gainmap-js/-/gainmap-js-3.4.0.tgz",
- "integrity": "sha512-2Z0FATFHaoYJ8b+Y4y4Hgfn3FRFwuU5zRrk+9dFWp4uGAdHGqVEdP7HP+gLA3X469KXHmfupJaUbKo1b/aDKIg==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@monogrid/gainmap-js/-/gainmap-js-3.1.0.tgz",
+ "integrity": "sha512-Obb0/gEd/HReTlg8ttaYk+0m62gQJmCblMOjHSMHRrBP2zdfKMHLCRbh/6ex9fSUJMKdjjIEiohwkbGD3wj2Nw==",
"license": "MIT",
"dependencies": {
"promise-worker-transferable": "^1.0.4"
@@ -2584,1447 +901,11 @@
"three": ">= 0.159.0"
}
},
- "node_modules/@mswjs/interceptors": {
- "version": "0.41.3",
- "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.3.tgz",
- "integrity": "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==",
- "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/@netlify/ai": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@netlify/ai/-/ai-0.4.1.tgz",
- "integrity": "sha512-ETLtV/9taYrcGhszwO+BLFgFJJ2MCnJp8BwxfwV6Z/+z3SsaUG4ExC8x4xzNCdB2GPWxXrXkvR2LFNsPFSLcRA==",
- "dependencies": {
- "@netlify/api": "^14.0.18"
- },
- "engines": {
- "node": ">=20.6.1"
- }
- },
- "node_modules/@netlify/api": {
- "version": "14.0.18",
- "resolved": "https://registry.npmjs.org/@netlify/api/-/api-14.0.18.tgz",
- "integrity": "sha512-4STtNybPXALobjTHEIU48Huv9Si1sNxgHbtYslNBPvQu9/aTpxhRHDZuUOkE/QuhHSbaCNCWJSYFGIRxpCdXxg==",
- "license": "MIT",
- "dependencies": {
- "@netlify/open-api": "^2.51.0",
- "node-fetch": "^3.0.0",
- "p-wait-for": "^5.0.0",
- "picoquery": "^2.5.0"
- },
- "engines": {
- "node": ">=18.14.0"
- }
- },
- "node_modules/@netlify/binary-info": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@netlify/binary-info/-/binary-info-1.0.0.tgz",
- "integrity": "sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==",
- "license": "Apache 2"
- },
- "node_modules/@netlify/blobs": {
- "version": "10.7.4",
- "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-10.7.4.tgz",
- "integrity": "sha512-03lXstB4xxDKeYs2RTTZrUGRC0ea2nVZvkdGlw2A42AdK7KA6N0ocVmkIn9x91oqFsqK3dWJTAv2bzaLjsehXg==",
- "license": "MIT",
- "dependencies": {
- "@netlify/dev-utils": "4.4.3",
- "@netlify/otel": "^5.1.5",
- "@netlify/runtime-utils": "2.3.0"
- },
- "engines": {
- "node": "^14.16.0 || >=16.0.0"
- }
- },
- "node_modules/@netlify/cache": {
- "version": "3.4.4",
- "resolved": "https://registry.npmjs.org/@netlify/cache/-/cache-3.4.4.tgz",
- "integrity": "sha512-CL9WZjbxe9/Gkcpfkl6h1F0BkBxUg9b4HHleGjmo0rs/PDUJ2NDQVKtEospllH2+KDUdB6EsPhiJN+v9Jcdv1g==",
- "license": "MIT",
- "dependencies": {
- "@netlify/runtime-utils": "2.3.0"
- },
- "engines": {
- "node": ">=20.6.1"
- }
- },
- "node_modules/@netlify/config": {
- "version": "24.5.0",
- "resolved": "https://registry.npmjs.org/@netlify/config/-/config-24.5.0.tgz",
- "integrity": "sha512-d9M/H9ouQUlu6OnEYa9z4Sa+RZUn7OioS6bw6kKRtalllkQiSAtbgzjXz/2umgABsJGmxYXyjSOk7P8QcKluJg==",
- "license": "MIT",
- "dependencies": {
- "@iarna/toml": "^2.2.5",
- "@netlify/api": "^14.0.18",
- "@netlify/headers-parser": "^9.0.3",
- "@netlify/redirect-parser": "^15.0.4",
- "chalk": "^5.0.0",
- "cron-parser": "^4.1.0",
- "deepmerge": "^4.2.2",
- "dot-prop": "^9.0.0",
- "execa": "^8.0.0",
- "fast-safe-stringify": "^2.0.7",
- "figures": "^6.0.0",
- "filter-obj": "^6.0.0",
- "find-up": "^7.0.0",
- "indent-string": "^5.0.0",
- "is-plain-obj": "^4.0.0",
- "map-obj": "^5.0.0",
- "omit.js": "^2.0.2",
- "p-locate": "^6.0.0",
- "path-type": "^6.0.0",
- "read-package-up": "^11.0.0",
- "tomlify-j0.4": "^3.0.0",
- "validate-npm-package-name": "^5.0.0",
- "yaml": "^2.8.0",
- "yargs": "^17.6.0",
- "zod": "^4.0.5"
- },
- "bin": {
- "netlify-config": "bin.js"
- },
- "engines": {
- "node": ">=18.14.0"
- }
- },
- "node_modules/@netlify/config/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==",
- "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/@netlify/config/node_modules/find-up": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
- "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^7.2.0",
- "path-exists": "^5.0.0",
- "unicorn-magic": "^0.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/config/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==",
- "license": "MIT",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/config/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==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=16.17.0"
- }
- },
- "node_modules/@netlify/config/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==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/config/node_modules/locate-path": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
- "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^6.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/config/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==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/config/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==",
- "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/@netlify/config/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==",
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/config/node_modules/p-limit": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
- "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^1.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/config/node_modules/p-locate": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
- "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/config/node_modules/path-exists": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
- "node_modules/@netlify/config/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==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/config/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==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/config/node_modules/unicorn-magic": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
- "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/config/node_modules/validate-npm-package-name": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
- "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
- "license": "ISC",
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/@netlify/config/node_modules/zod": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
- "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
- "node_modules/@netlify/database-dev": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@netlify/database-dev/-/database-dev-0.8.0.tgz",
- "integrity": "sha512-q53dx7QgLMMN3vKRFvX/guDOPXscYaF4qtHoG0JYZorC0vcJagw6s3nV8cNob9sCjA3Tj/BNf7MnWwOSF0E1Cw==",
- "license": "MIT",
- "dependencies": {
- "@electric-sql/pglite": "^0.3.15",
- "pg-gateway": "0.3.0-beta.4"
- },
- "engines": {
- "node": ">=20.6.1"
- }
- },
- "node_modules/@netlify/dev": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/@netlify/dev/-/dev-4.17.1.tgz",
- "integrity": "sha512-+VRNcqPcFFHDbT5d4FOiu3uZAB+dQniFNezD3hTO6LpoKqS2zwNNa0kZHMRFybAUHxYJk30m3QDrdHwzy9Jd0Q==",
- "license": "MIT",
- "dependencies": {
- "@netlify/ai": "^0.4.1",
- "@netlify/blobs": "10.7.4",
- "@netlify/config": "^24.4.3",
- "@netlify/database-dev": "0.8.0",
- "@netlify/dev-utils": "4.4.3",
- "@netlify/edge-functions-dev": "1.0.16",
- "@netlify/functions-dev": "1.2.6",
- "@netlify/headers": "2.1.8",
- "@netlify/images": "1.3.7",
- "@netlify/redirects": "3.1.10",
- "@netlify/runtime": "4.1.20",
- "@netlify/static": "3.1.7",
- "ulid": "^3.0.0"
- },
- "engines": {
- "node": ">=20.6.1"
- }
- },
- "node_modules/@netlify/dev-utils": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/@netlify/dev-utils/-/dev-utils-4.4.3.tgz",
- "integrity": "sha512-VkMD8YACshR6pHgoub6nikkI+SQVdhjVvLsOK2ZSpN2wMlDHdsD8uRjESfzv/yYfq5jlsGskfx1cf1FUurWt9A==",
- "license": "MIT",
- "dependencies": {
- "@whatwg-node/server": "^0.10.0",
- "ansis": "^4.1.0",
- "chokidar": "^4.0.1",
- "decache": "^4.6.2",
- "dettle": "^1.0.5",
- "dot-prop": "9.0.0",
- "empathic": "^2.0.0",
- "env-paths": "^3.0.0",
- "image-size": "^2.0.2",
- "js-image-generator": "^1.0.4",
- "parse-gitignore": "^2.0.0",
- "semver": "^7.7.2",
- "tmp-promise": "^3.0.3",
- "uuid": "^13.0.0",
- "write-file-atomic": "^5.0.1"
- },
- "engines": {
- "node": "^18.14.0 || >=20"
- }
- },
- "node_modules/@netlify/dev-utils/node_modules/chokidar": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
- "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
- "license": "MIT",
- "dependencies": {
- "readdirp": "^4.0.1"
- },
- "engines": {
- "node": ">= 14.16.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@netlify/dev-utils/node_modules/env-paths": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz",
- "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/dev-utils/node_modules/readdirp": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
- "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
- "license": "MIT",
- "engines": {
- "node": ">= 14.18.0"
- },
- "funding": {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@netlify/edge-bundler": {
- "version": "14.10.0",
- "resolved": "https://registry.npmjs.org/@netlify/edge-bundler/-/edge-bundler-14.10.0.tgz",
- "integrity": "sha512-6gWUoPfBuPHATaJScFheyHqLtjYXAa1OSCFPMi7Hyw0p9bJtqj7dmxUlSKen2QRdHLfNF5zZAH060wa2WsZx2Q==",
- "license": "MIT",
- "dependencies": {
- "@import-maps/resolve": "^2.0.0",
- "@sveltejs/acorn-typescript": "^1.0.9",
- "acorn": "^8.15.0",
- "ajv": "^8.11.2",
- "ajv-errors": "^3.0.0",
- "better-ajv-errors": "^1.2.0",
- "common-path-prefix": "^3.0.0",
- "env-paths": "^3.0.0",
- "esbuild": "0.27.3",
- "execa": "^8.0.0",
- "find-up": "^7.0.0",
- "get-port": "^7.0.0",
- "node-stream-zip": "^1.15.0",
- "p-retry": "^6.0.0",
- "p-wait-for": "^5.0.0",
- "parse-imports": "^2.2.1",
- "path-key": "^4.0.0",
- "semver": "^7.3.8",
- "tar": "^7.5.12",
- "tmp-promise": "^3.0.3",
- "urlpattern-polyfill": "8.0.2",
- "uuid": "^11.0.0"
- },
- "engines": {
- "node": ">=18.14.0"
- }
- },
- "node_modules/@netlify/edge-bundler/node_modules/ajv": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
- "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/@netlify/edge-bundler/node_modules/ajv-errors": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz",
- "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==",
- "license": "MIT",
- "peerDependencies": {
- "ajv": "^8.0.1"
- }
- },
- "node_modules/@netlify/edge-bundler/node_modules/env-paths": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz",
- "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/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==",
- "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/@netlify/edge-bundler/node_modules/find-up": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
- "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^7.2.0",
- "path-exists": "^5.0.0",
- "unicorn-magic": "^0.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/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==",
- "license": "MIT",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/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==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=16.17.0"
- }
- },
- "node_modules/@netlify/edge-bundler/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==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT"
- },
- "node_modules/@netlify/edge-bundler/node_modules/locate-path": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
- "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^6.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/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==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/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==",
- "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/@netlify/edge-bundler/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==",
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/node_modules/p-limit": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
- "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^1.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/node_modules/p-locate": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
- "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/node_modules/path-exists": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
- "node_modules/@netlify/edge-bundler/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==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/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==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/node_modules/unicorn-magic": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
- "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/edge-bundler/node_modules/uuid": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
- "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/esm/bin/uuid"
- }
- },
- "node_modules/@netlify/edge-functions": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@netlify/edge-functions/-/edge-functions-3.0.6.tgz",
- "integrity": "sha512-xkVcTcpAuQKAY5GXKOjPTIct5Mz53NPHXOasggA+LTAxDDV4ohqSM8BIaXh1SgbcniHZyFhBqhc5hxZ+fFz5bQ==",
- "license": "MIT",
- "dependencies": {
- "@netlify/types": "2.6.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@netlify/edge-functions-bootstrap": {
- "version": "2.16.0",
- "resolved": "https://registry.npmjs.org/@netlify/edge-functions-bootstrap/-/edge-functions-bootstrap-2.16.0.tgz",
- "integrity": "sha512-v8QQihSbBHj3JxtJsHoepXALpNumD9M7egHoc8z62FYl5it34dWczkaJoFFopEyhiBVKi4K/n0ZYpdzwfujd6g==",
- "license": "MIT"
- },
- "node_modules/@netlify/edge-functions-dev": {
- "version": "1.0.16",
- "resolved": "https://registry.npmjs.org/@netlify/edge-functions-dev/-/edge-functions-dev-1.0.16.tgz",
- "integrity": "sha512-QQGUNPRvynKg4NJ7iiR0mYcsdA/QwIdUB/Fb4SGhhqBPicTcW4V5bEZ/JaMvEBMd2ZY8EKuWQ63Ryl4TVHI+QQ==",
- "license": "MIT",
- "dependencies": {
- "@netlify/dev-utils": "4.4.3",
- "@netlify/edge-bundler": "^14.9.15",
- "@netlify/edge-functions": "3.0.6",
- "@netlify/edge-functions-bootstrap": "2.16.0",
- "@netlify/runtime-utils": "2.3.0",
- "get-port": "^7.1.0"
- },
- "engines": {
- "node": ">=20.6.1"
- }
- },
- "node_modules/@netlify/functions": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-5.2.0.tgz",
- "integrity": "sha512-Pj93qeQd1tkQ5xm9gWJZmBf/1riLYqYHc0OzFukrJomrj82Ott53Rr/Q88H1ms5cF+P5QXRKWmA2JSxSybKfjA==",
- "license": "MIT",
- "dependencies": {
- "@netlify/types": "2.6.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@netlify/functions-dev": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@netlify/functions-dev/-/functions-dev-1.2.6.tgz",
- "integrity": "sha512-hhfgKGZ2mQAv85jb3o4hYZ7s8Ad/+99qz51AoxhE26KkU1IKuRuKwEowWZUtvih0KPmvmGcVHbd49KYVIlf0tA==",
- "license": "MIT",
- "dependencies": {
- "@netlify/blobs": "10.7.4",
- "@netlify/dev-utils": "4.4.3",
- "@netlify/functions": "5.2.0",
- "@netlify/zip-it-and-ship-it": "^14.5.0",
- "cron-parser": "^4.9.0",
- "decache": "^4.6.2",
- "extract-zip": "^2.0.1",
- "is-stream": "^4.0.1",
- "jwt-decode": "^4.0.0",
- "lambda-local": "^2.2.0",
- "read-package-up": "^11.0.0",
- "semver": "^7.6.3",
- "source-map-support": "^0.5.21"
- },
- "engines": {
- "node": ">=20.6.1"
- }
- },
- "node_modules/@netlify/headers": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/@netlify/headers/-/headers-2.1.8.tgz",
- "integrity": "sha512-OhHT8nq84tSvXWaOMCLgcaGKnUccbIYg7/Ink4NyVHNwJ7L2fFGb6Mi4lPWluHhncYJE9p0eK7JMiKKj49Q0Qw==",
- "license": "MIT",
- "dependencies": {
- "@netlify/headers-parser": "^9.0.3"
- },
- "engines": {
- "node": ">=20.6.1"
- }
- },
- "node_modules/@netlify/headers-parser": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/@netlify/headers-parser/-/headers-parser-9.0.3.tgz",
- "integrity": "sha512-KNzC9RaKDwJVS44iTK6JxNA6LeXH0PUw0pLktWpmMVI/0FR98bvxaHcAisjHqbThAjxL9QjL1UZh0KzHCkxpNQ==",
- "license": "MIT",
- "dependencies": {
- "@iarna/toml": "^2.2.5",
- "escape-string-regexp": "^5.0.0",
- "fast-safe-stringify": "^2.0.7",
- "is-plain-obj": "^4.0.0",
- "map-obj": "^5.0.0",
- "path-exists": "^5.0.0"
- },
- "engines": {
- "node": ">=18.14.0"
- }
- },
- "node_modules/@netlify/headers-parser/node_modules/escape-string-regexp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/headers-parser/node_modules/path-exists": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
- "node_modules/@netlify/images": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/@netlify/images/-/images-1.3.7.tgz",
- "integrity": "sha512-qWKCbtYQbyHtzVjLcaAxZsxrd8qpIVnLWwvn2635E8zQSO7L0wb2oPTUhMEOOIxIurWuY3JSRGevpve6ifataQ==",
- "license": "MIT",
- "dependencies": {
- "ipx": "^3.1.1"
- },
- "engines": {
- "node": ">=20.6.1"
- }
- },
- "node_modules/@netlify/open-api": {
- "version": "2.52.0",
- "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.52.0.tgz",
- "integrity": "sha512-QkWQu0vz3uBcxjSslA0N6Njo0x1ndkhEIVEmdwcmxfufX8wA0d9WjiU2sWuHYw11Mrf5pkMUQHvZy+6V4A9TYQ==",
- "license": "MIT",
- "engines": {
- "node": ">=14.8.0"
- }
- },
- "node_modules/@netlify/otel": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/@netlify/otel/-/otel-5.1.5.tgz",
- "integrity": "sha512-RORbePN1ghdHp4pIkG3ccFMqmx5hwMfSyLGKp7bKVf1F5rSe1QjrCBp5xihEWI3xuh3fAqQroTlNYnoOud8RTQ==",
- "license": "MIT",
- "dependencies": {
- "@opentelemetry/api": "1.9.0",
- "@opentelemetry/core": "1.30.1",
- "@opentelemetry/instrumentation": "^0.203.0",
- "@opentelemetry/resources": "1.30.1",
- "@opentelemetry/sdk-trace-node": "1.30.1"
- },
- "engines": {
- "node": "^18.14.0 || >=20.6.1"
- }
- },
- "node_modules/@netlify/redirect-parser": {
- "version": "15.0.4",
- "resolved": "https://registry.npmjs.org/@netlify/redirect-parser/-/redirect-parser-15.0.4.tgz",
- "integrity": "sha512-UYHRCO4HZI6WMpf8RheaCWnGafeJeFTsp/5yK887fyGqohDmFbc26NuFUvRl7J6sNu+di/1lLmRXP+yJ1X9TDA==",
- "license": "MIT",
- "dependencies": {
- "@iarna/toml": "^2.2.5",
- "fast-safe-stringify": "^2.1.1",
- "is-plain-obj": "^4.0.0",
- "path-exists": "^5.0.0"
- },
- "engines": {
- "node": ">=18.14.0"
- }
- },
- "node_modules/@netlify/redirect-parser/node_modules/path-exists": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
- "node_modules/@netlify/redirects": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/@netlify/redirects/-/redirects-3.1.10.tgz",
- "integrity": "sha512-q4PbtkeNDxKqfOemsrG5F/vkpNfLwjVQpx69+sS2Qg/PYOOneayKJOlCKhVc6QQUtDuhFV6WZ8JHielYMj1pVw==",
- "license": "MIT",
- "dependencies": {
- "@netlify/dev-utils": "4.4.3",
- "@netlify/redirect-parser": "^15.0.4",
- "cookie": "^1.0.2",
- "jsonwebtoken": "9.0.3",
- "netlify-redirector": "^0.5.0"
- },
- "engines": {
- "node": ">=20.6.1"
- }
- },
- "node_modules/@netlify/runtime": {
- "version": "4.1.20",
- "resolved": "https://registry.npmjs.org/@netlify/runtime/-/runtime-4.1.20.tgz",
- "integrity": "sha512-maPRSTG+q9rTkeP+hj5X8PN6OkUShp1E62+GBtZrVRVrkTYLiF3mz2JGUw32lCbw2OqqvlUab85N4OMPSdP5HA==",
- "license": "MIT",
- "dependencies": {
- "@netlify/blobs": "^10.7.4",
- "@netlify/cache": "3.4.4",
- "@netlify/runtime-utils": "2.3.0",
- "@netlify/types": "2.6.0"
- },
- "engines": {
- "node": ">=20.6.1"
- }
- },
- "node_modules/@netlify/runtime-utils": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@netlify/runtime-utils/-/runtime-utils-2.3.0.tgz",
- "integrity": "sha512-cW8weDvsKV7zfia2m5EcBy6KILGoPD+eYZ3qWNGnIo05DGF28goPES0xKSDkNYgAF/2rRSIhie2qcBhbGVgSRg==",
- "license": "MIT",
- "engines": {
- "node": "^18.14.0 || >=20"
- }
- },
- "node_modules/@netlify/serverless-functions-api": {
- "version": "2.15.0",
- "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-2.15.0.tgz",
- "integrity": "sha512-FDZwRBWq6zgmuYkszHGcN1qYliTOY7/ZzuWWxJy1WoB4cZt6gdzgN5Gx9zuIKfiL9KelL0iAnd/bZrrfLZZ5ig==",
- "license": "MIT",
- "dependencies": {
- "@netlify/types": "^2.6.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@netlify/static": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/@netlify/static/-/static-3.1.7.tgz",
- "integrity": "sha512-7gfDmUJKIFiVvqoqAoN7wkZkQx8KgVw5+ancu4v+QFU/hLt+gWqNH+ngxaCKCA0hmDE4oD1xNbClxlh9bNOetw==",
- "license": "MIT",
- "dependencies": {
- "mime-types": "^3.0.0"
- },
- "engines": {
- "node": ">=20.6.1"
- }
- },
- "node_modules/@netlify/types": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/@netlify/types/-/types-2.6.0.tgz",
- "integrity": "sha512-yD20EizHJDQxajJ66Vo8RTwLwR2jMNVxufPG8MHd2AScX8jW4z0VPnnJHArq2GYPFTFZRHmiAhDrXr5m8zof6w==",
- "license": "MIT",
- "engines": {
- "node": "^18.14.0 || >=20"
- }
- },
- "node_modules/@netlify/vite-plugin": {
- "version": "2.11.5",
- "resolved": "https://registry.npmjs.org/@netlify/vite-plugin/-/vite-plugin-2.11.5.tgz",
- "integrity": "sha512-z/llgtXI1u4L11Ds21RsLGjiGavKPCsJBKTAN4FzAllGqvZUzMdfRT/uVsZVjpOwp2qcain1+lPIrtljB8u2/A==",
- "license": "MIT",
- "dependencies": {
- "@netlify/dev": "4.17.1",
- "@netlify/dev-utils": "^4.4.3",
- "dedent": "^1.7.0"
- },
- "engines": {
- "node": "^20.6.1 || >=22"
- },
- "peerDependencies": {
- "vite": "^5 || ^6 || ^7 || ^8"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it": {
- "version": "14.5.4",
- "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-14.5.4.tgz",
- "integrity": "sha512-kaX/03YsBy/9ZOTNF/EtbBkof/Uukul5mnxs/SHD8LPY9Co6TcdMz61ZfDNyAYeIdfTMDIs4EFNBQPvzHexEMg==",
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.22.5",
- "@babel/types": "^7.28.5",
- "@netlify/binary-info": "^1.0.0",
- "@netlify/serverless-functions-api": "2.15.0",
- "@vercel/nft": "0.29.4",
- "archiver": "^7.0.0",
- "common-path-prefix": "^3.0.0",
- "copy-file": "^11.0.0",
- "es-module-lexer": "^1.0.0",
- "esbuild": "0.27.3",
- "execa": "^8.0.0",
- "fast-glob": "^3.3.3",
- "filter-obj": "^6.0.0",
- "find-up": "^7.0.0",
- "is-path-inside": "^4.0.0",
- "junk": "^4.0.0",
- "locate-path": "^7.0.0",
- "merge-options": "^3.0.4",
- "minimatch": "^10.2.4",
- "normalize-path": "^3.0.0",
- "p-map": "^7.0.0",
- "path-exists": "^5.0.0",
- "precinct": "^12.0.0",
- "require-package-name": "^2.0.1",
- "resolve": "^2.0.0-next.1",
- "semver": "^7.3.8",
- "tmp-promise": "^3.0.2",
- "toml": "^3.0.0",
- "unixify": "^1.0.0",
- "urlpattern-polyfill": "8.0.2",
- "yargs": "^17.0.0",
- "zod": "^3.23.8"
- },
- "bin": {
- "zip-it-and-ship-it": "bin.js"
- },
- "engines": {
- "node": ">=18.14.0"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/@vercel/nft": {
- "version": "0.29.4",
- "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.4.tgz",
- "integrity": "sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==",
- "license": "MIT",
- "dependencies": {
- "@mapbox/node-pre-gyp": "^2.0.0",
- "@rollup/pluginutils": "^5.1.3",
- "acorn": "^8.6.0",
- "acorn-import-attributes": "^1.9.5",
- "async-sema": "^3.1.1",
- "bindings": "^1.4.0",
- "estree-walker": "2.0.2",
- "glob": "^10.4.5",
- "graceful-fs": "^4.2.9",
- "node-gyp-build": "^4.2.2",
- "picomatch": "^4.0.2",
- "resolve-from": "^5.0.0"
- },
- "bin": {
- "nft": "out/cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/es-module-lexer": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
- "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
- "license": "MIT"
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "license": "MIT"
- },
- "node_modules/@netlify/zip-it-and-ship-it/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==",
- "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/@netlify/zip-it-and-ship-it/node_modules/find-up": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
- "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^7.2.0",
- "path-exists": "^5.0.0",
- "unicorn-magic": "^0.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/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==",
- "license": "MIT",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/glob": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
- "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
- "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/glob/node_modules/minimatch": {
- "version": "9.0.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
- "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.2"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/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==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=16.17.0"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/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==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/locate-path": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
- "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^6.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/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==",
- "license": "ISC"
- },
- "node_modules/@netlify/zip-it-and-ship-it/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==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/minimatch": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
- "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "brace-expansion": "^5.0.5"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/minimatch/node_modules/brace-expansion": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
- "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/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==",
- "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/@netlify/zip-it-and-ship-it/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==",
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/p-limit": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
- "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^1.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/p-locate": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
- "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/path-exists": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/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==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/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==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@netlify/zip-it-and-ship-it/node_modules/unicorn-magic": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
- "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@noble/ciphers": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz",
- "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==",
- "license": "MIT",
- "engines": {
- "node": "^14.21.3 || >=16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@noble/curves": {
- "version": "1.9.7",
- "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz",
- "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==",
- "license": "MIT",
- "dependencies": {
- "@noble/hashes": "1.8.0"
- },
- "engines": {
- "node": "^14.21.3 || >=16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@noble/hashes": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
- "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
- "license": "MIT",
- "engines": {
- "node": "^14.21.3 || >=16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -4037,6 +918,7 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -4045,6 +927,7 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -4053,512 +936,6 @@
"node": ">= 8"
}
},
- "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==",
- "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==",
- "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==",
- "license": "MIT"
- },
- "node_modules/@opentelemetry/api": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
- "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@opentelemetry/api-logs": {
- "version": "0.203.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz",
- "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/api": "^1.3.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@opentelemetry/context-async-hooks": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz",
- "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.10.0"
- }
- },
- "node_modules/@opentelemetry/core": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz",
- "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/semantic-conventions": "1.28.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.10.0"
- }
- },
- "node_modules/@opentelemetry/instrumentation": {
- "version": "0.203.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.203.0.tgz",
- "integrity": "sha512-ke1qyM+3AK2zPuBPb6Hk/GCsc5ewbLvPNkEuELx/JmANeEp6ZjnZ+wypPAJSucTw0wvCGrUaibDSdcrGFoWxKQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/api-logs": "0.203.0",
- "import-in-the-middle": "^1.8.1",
- "require-in-the-middle": "^7.1.1"
- },
- "engines": {
- "node": "^18.19.0 || >=20.6.0"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.3.0"
- }
- },
- "node_modules/@opentelemetry/propagator-b3": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.30.1.tgz",
- "integrity": "sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "1.30.1"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.10.0"
- }
- },
- "node_modules/@opentelemetry/propagator-jaeger": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.30.1.tgz",
- "integrity": "sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "1.30.1"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.10.0"
- }
- },
- "node_modules/@opentelemetry/resources": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz",
- "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "1.30.1",
- "@opentelemetry/semantic-conventions": "1.28.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.10.0"
- }
- },
- "node_modules/@opentelemetry/sdk-trace-base": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz",
- "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/core": "1.30.1",
- "@opentelemetry/resources": "1.30.1",
- "@opentelemetry/semantic-conventions": "1.28.0"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.10.0"
- }
- },
- "node_modules/@opentelemetry/sdk-trace-node": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.30.1.tgz",
- "integrity": "sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@opentelemetry/context-async-hooks": "1.30.1",
- "@opentelemetry/core": "1.30.1",
- "@opentelemetry/propagator-b3": "1.30.1",
- "@opentelemetry/propagator-jaeger": "1.30.1",
- "@opentelemetry/sdk-trace-base": "1.30.1",
- "semver": "^7.5.2"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.10.0"
- }
- },
- "node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.28.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz",
- "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@oslojs/encoding": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz",
- "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
- "license": "MIT"
- },
- "node_modules/@parcel/watcher": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz",
- "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==",
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "detect-libc": "^2.0.3",
- "is-glob": "^4.0.3",
- "node-addon-api": "^7.0.0",
- "picomatch": "^4.0.3"
- },
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "@parcel/watcher-android-arm64": "2.5.6",
- "@parcel/watcher-darwin-arm64": "2.5.6",
- "@parcel/watcher-darwin-x64": "2.5.6",
- "@parcel/watcher-freebsd-x64": "2.5.6",
- "@parcel/watcher-linux-arm-glibc": "2.5.6",
- "@parcel/watcher-linux-arm-musl": "2.5.6",
- "@parcel/watcher-linux-arm64-glibc": "2.5.6",
- "@parcel/watcher-linux-arm64-musl": "2.5.6",
- "@parcel/watcher-linux-x64-glibc": "2.5.6",
- "@parcel/watcher-linux-x64-musl": "2.5.6",
- "@parcel/watcher-win32-arm64": "2.5.6",
- "@parcel/watcher-win32-ia32": "2.5.6",
- "@parcel/watcher-win32-x64": "2.5.6"
- }
- },
- "node_modules/@parcel/watcher-android-arm64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz",
- "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-arm64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz",
- "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-x64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz",
- "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-freebsd-x64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz",
- "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-glibc": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz",
- "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-musl": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz",
- "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-glibc": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz",
- "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-musl": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz",
- "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-glibc": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz",
- "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-musl": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz",
- "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-wasm": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.5.6.tgz",
- "integrity": "sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==",
- "bundleDependencies": [
- "napi-wasm"
- ],
- "license": "MIT",
- "dependencies": {
- "is-glob": "^4.0.3",
- "napi-wasm": "^1.1.0",
- "picomatch": "^4.0.3"
- },
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": {
- "version": "1.1.0",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/@parcel/watcher-win32-arm64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz",
- "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-ia32": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz",
- "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==",
- "cpu": [
- "ia32"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-x64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz",
- "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -4569,65 +946,33 @@
"node": ">=14"
}
},
- "node_modules/@pkgr/core": {
- "version": "0.2.9",
- "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
- "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
- "dev": true,
- "engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/pkgr"
- }
- },
"node_modules/@radix-ui/number": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz",
- "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz",
+ "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==",
+ "license": "MIT"
},
"node_modules/@radix-ui/primitive": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz",
- "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="
- },
- "node_modules/@radix-ui/react-accessible-icon": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.7.tgz",
- "integrity": "sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-visually-hidden": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz",
+ "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==",
+ "license": "MIT"
},
"node_modules/@radix-ui/react-accordion": {
- "version": "1.2.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz",
- "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.1.tgz",
+ "integrity": "sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collapsible": "1.1.12",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collapsible": "1.1.1",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -4645,17 +990,17 @@
}
},
"node_modules/@radix-ui/react-alert-dialog": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz",
- "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.2.tgz",
+ "integrity": "sha512-eGSlLzPhKO+TErxkiGcCZGuvbVMnLA1MTnyBksGOeGRGkxHiiJUujsjmNTdWTm4iHVSRaUao9/4Ur671auMghQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dialog": "1.1.15",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dialog": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -4672,30 +1017,13 @@
}
}
},
- "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "node_modules/@radix-ui/react-arrow": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz",
+ "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-arrow": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz",
- "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
+ "@radix-ui/react-primitive": "2.0.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -4713,12 +1041,38 @@
}
},
"node_modules/@radix-ui/react-aspect-ratio": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz",
- "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.0.tgz",
+ "integrity": "sha512-dP87DM/Y7jFlPgUZTlhx6FF5CEzOiaxp2rBCKlaXlpH5Ip/9Fg5zZ9lDOQ5o/MOfUlf36eak14zoWYpgcgGoOg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
+ "@radix-ui/react-primitive": "2.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-avatar": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.1.tgz",
+ "integrity": "sha512-eoOtThOmxeoizxpX6RiEsQZ2wj5r4+zoeqAwO0cBaFQGjJwIH3dIX0OCxNrCyrrdxG+vBweMETh3VziQG7c1kw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -4736,18 +1090,19 @@
}
},
"node_modules/@radix-ui/react-checkbox": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz",
- "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.2.tgz",
+ "integrity": "sha512-/i0fl686zaJbDQLNKrkCbMyDm6FQMt4jg323k7HuqitoANm9sE23Ql8yOK3Wusk34HSLKDChhMux05FnP6KUkw==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -4765,18 +1120,19 @@
}
},
"node_modules/@radix-ui/react-collapsible": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz",
- "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz",
+ "integrity": "sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-layout-effect": "1.1.1"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -4794,14 +1150,15 @@
}
},
"node_modules/@radix-ui/react-collection": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz",
- "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz",
+ "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3"
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -4818,13 +1175,11 @@
}
}
},
- "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
+ "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
+ "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
+ "license": "MIT",
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -4836,9 +1191,10 @@
}
},
"node_modules/@radix-ui/react-compose-refs": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz",
- "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz",
+ "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==",
+ "license": "MIT",
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -4850,9 +1206,10 @@
}
},
"node_modules/@radix-ui/react-context": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz",
- "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz",
+ "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==",
+ "license": "MIT",
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -4864,17 +1221,17 @@
}
},
"node_modules/@radix-ui/react-context-menu": {
- "version": "2.2.16",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz",
- "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.2.tgz",
+ "integrity": "sha512-99EatSTpW+hRYHt7m8wdDlLtkmTovEe8Z/hnxUPV+SKuuNL5HWNhQI4QSdjZqNSgXHay2z4M3Dym73j9p2Gx5Q==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-menu": "2.1.16",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-menu": "2.1.2",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -4892,25 +1249,25 @@
}
},
"node_modules/@radix-ui/react-dialog": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz",
- "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz",
+ "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-focus-guards": "1.1.3",
- "@radix-ui/react-focus-scope": "1.1.7",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "aria-hidden": "^1.2.4",
- "react-remove-scroll": "^2.6.3"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -4927,28 +1284,11 @@
}
}
},
- "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-direction": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz",
- "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz",
+ "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==",
+ "license": "MIT",
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -4960,15 +1300,16 @@
}
},
"node_modules/@radix-ui/react-dismissable-layer": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz",
- "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz",
+ "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-escape-keydown": "1.1.1"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-escape-keydown": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -4986,18 +1327,18 @@
}
},
"node_modules/@radix-ui/react-dropdown-menu": {
- "version": "2.1.16",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz",
- "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz",
+ "integrity": "sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-menu": "2.1.16",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-menu": "2.1.2",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5015,9 +1356,10 @@
}
},
"node_modules/@radix-ui/react-focus-guards": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz",
- "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz",
+ "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==",
+ "license": "MIT",
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -5029,64 +1371,14 @@
}
},
"node_modules/@radix-ui/react-focus-scope": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz",
- "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-form": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.8.tgz",
- "integrity": "sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz",
+ "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-label": "2.1.7",
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-form/node_modules/@radix-ui/react-label": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz",
- "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5104,20 +1396,20 @@
}
},
"node_modules/@radix-ui/react-hover-card": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz",
- "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.2.tgz",
+ "integrity": "sha512-Y5w0qGhysvmqsIy6nQxaPa6mXNKznfoGjOfBgzOjocLxr2XlSjqBMYQQL+FfyogsMuX+m8cZyQGYhJxvxUzO4w==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-popper": "1.2.0",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5135,11 +1427,12 @@
}
},
"node_modules/@radix-ui/react-id": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz",
- "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz",
+ "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.1"
+ "@radix-ui/react-use-layout-effect": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5151,30 +1444,13 @@
}
}
},
- "node_modules/@radix-ui/react-menu": {
- "version": "2.1.16",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz",
- "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==",
+ "node_modules/@radix-ui/react-label": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz",
+ "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-focus-guards": "1.1.3",
- "@radix-ui/react-focus-scope": "1.1.7",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "aria-hidden": "^1.2.4",
- "react-remove-scroll": "^2.6.3"
+ "@radix-ui/react-primitive": "2.0.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5191,40 +1467,62 @@
}
}
},
- "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "node_modules/@radix-ui/react-menu": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.2.tgz",
+ "integrity": "sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.0",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-roving-focus": "1.1.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
},
"peerDependencies": {
"@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
}
}
},
"node_modules/@radix-ui/react-menubar": {
- "version": "1.1.16",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz",
- "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.2.tgz",
+ "integrity": "sha512-cKmj5Gte7LVyuz+8gXinxZAZECQU+N7aq5pw7kUPpx3xjnDXDbsdzHtCCD2W72bwzy74AvrqdYnKYS42ueskUQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-menu": "2.1.16",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-use-controllable-state": "1.2.2"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-menu": "2.1.2",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-roving-focus": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5242,88 +1540,25 @@
}
},
"node_modules/@radix-ui/react-navigation-menu": {
- "version": "1.2.14",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz",
- "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-visually-hidden": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-one-time-password-field": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.8.tgz",
- "integrity": "sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.1.tgz",
+ "integrity": "sha512-egDo0yJD2IK8L17gC82vptkvW1jLeni1VuqCyzY727dSJdk5cDjINomouLoNk8RVF7g2aNIfENKWL4UzeU9c8Q==",
"license": "MIT",
"dependencies": {
- "@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-effect-event": "0.0.2",
- "@radix-ui/react-use-is-hydrated": "0.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-password-toggle-field": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.3.tgz",
- "integrity": "sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-effect-event": "0.0.2",
- "@radix-ui/react-use-is-hydrated": "0.1.0"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5341,26 +1576,26 @@
}
},
"node_modules/@radix-ui/react-popover": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz",
- "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.2.tgz",
+ "integrity": "sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-focus-guards": "1.1.3",
- "@radix-ui/react-focus-scope": "1.1.7",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "aria-hidden": "^1.2.4",
- "react-remove-scroll": "^2.6.3"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.0",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5377,14 +1612,43 @@
}
}
},
- "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "node_modules/@radix-ui/react-popper": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz",
+ "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
+ "@floating-ui/react-dom": "^2.0.0",
+ "@radix-ui/react-arrow": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-rect": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0",
+ "@radix-ui/rect": "1.1.0"
},
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
+ "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
+ "license": "MIT",
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -5395,44 +1659,14 @@
}
}
},
- "node_modules/@radix-ui/react-popper": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz",
- "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==",
- "dependencies": {
- "@floating-ui/react-dom": "^2.0.0",
- "@radix-ui/react-arrow": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-rect": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1",
- "@radix-ui/rect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-portal": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz",
- "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz",
+ "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-layout-effect": "1.1.1"
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5450,12 +1684,13 @@
}
},
"node_modules/@radix-ui/react-presence": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz",
- "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz",
+ "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-use-layout-effect": "1.1.1"
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5473,11 +1708,12 @@
}
},
"node_modules/@radix-ui/react-primitive": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz",
- "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz",
+ "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/react-slot": "1.2.3"
+ "@radix-ui/react-slot": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5494,13 +1730,35 @@
}
}
},
- "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "node_modules/@radix-ui/react-progress": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.0.tgz",
+ "integrity": "sha512-aSzvnYpP725CROcxAOEBVZZSIQVQdHgBr2QQFKySsaD14u8dNT0batuXI+AAGDdAHfXH8rbnHmjYFqVJ21KkRg==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0"
},
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
+ "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
+ "license": "MIT",
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -5511,46 +1769,22 @@
}
}
},
- "node_modules/@radix-ui/react-progress": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz",
- "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
"node_modules/@radix-ui/react-radio-group": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz",
- "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.1.tgz",
+ "integrity": "sha512-kdbv54g4vfRjja9DNWPMxKvXblzqbpEC8kspEkZ6dVP7kQksGCn+iZHkcCz2nb00+lPdRvxrqy4WrvvV1cNqrQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-roving-focus": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5568,19 +1802,20 @@
}
},
"node_modules/@radix-ui/react-roving-focus": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz",
- "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz",
+ "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5597,21 +1832,36 @@
}
}
},
+ "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
+ "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@radix-ui/react-scroll-area": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz",
- "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.0.tgz",
+ "integrity": "sha512-q2jMBdsJ9zB7QG6ngQNzNwlvxLQqONyL58QbEGwuyRZZb/ARQwk3uQVbCF7GvQVOtV6EU/pDxAw3zRzJZI3rpQ==",
"license": "MIT",
"dependencies": {
- "@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-layout-effect": "1.1.1"
+ "@radix-ui/number": "1.1.0",
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5629,31 +1879,32 @@
}
},
"node_modules/@radix-ui/react-select": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz",
- "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.2.tgz",
+ "integrity": "sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-focus-guards": "1.1.3",
- "@radix-ui/react-focus-scope": "1.1.7",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-visually-hidden": "1.2.3",
- "aria-hidden": "^1.2.4",
- "react-remove-scroll": "^2.6.3"
+ "@radix-ui/number": "1.1.0",
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.0",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5670,12 +1921,69 @@
}
}
},
- "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "node_modules/@radix-ui/react-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.0.tgz",
+ "integrity": "sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
+ "@radix-ui/react-primitive": "2.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-slider": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.2.1.tgz",
+ "integrity": "sha512-bEzQoDW0XP+h/oGbutF5VMWJPAl/UU8IJjr7h02SOHDIIIxq+cep8nItVNoBV+OMmahCdqdF38FTpmXoqQUGvw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/number": "1.1.0",
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-slot": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz",
+ "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5687,51 +1995,19 @@
}
}
},
- "node_modules/@radix-ui/react-slider": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz",
- "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==",
+ "node_modules/@radix-ui/react-switch": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.1.tgz",
+ "integrity": "sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==",
"license": "MIT",
"dependencies": {
- "@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-switch": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz",
- "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5749,18 +2025,19 @@
}
},
"node_modules/@radix-ui/react-tabs": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz",
- "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz",
+ "integrity": "sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-use-controllable-state": "1.2.2"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-roving-focus": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5778,23 +2055,23 @@
}
},
"node_modules/@radix-ui/react-toast": {
- "version": "1.2.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz",
- "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.2.tgz",
+ "integrity": "sha512-Z6pqSzmAP/bFJoqMAston4eSNa+ud44NSZTiZUmUen+IOZ5nBY8kzuU5WDBVyFXPtcW6yUalOHsxM/BP6Sv8ww==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-visually-hidden": "1.2.3"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5812,14 +2089,14 @@
}
},
"node_modules/@radix-ui/react-toggle": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz",
- "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.0.tgz",
+ "integrity": "sha512-gwoxaKZ0oJ4vIgzsfESBuSgJNdc0rv12VhHgcqN0TEJmmZixXG/2XpsLK8kzNWYcnaoRIEEQc0bEi3dIvdUpjw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5837,18 +2114,18 @@
}
},
"node_modules/@radix-ui/react-toggle-group": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz",
- "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.0.tgz",
+ "integrity": "sha512-PpTJV68dZU2oqqgq75Uzto5o/XfOVgkrJ9rulVmfTKxWp3HfUjHE6CP/WLRR4AzPX9HWxw7vFow2me85Yu+Naw==",
"license": "MIT",
"dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-toggle": "1.1.10",
- "@radix-ui/react-use-controllable-state": "1.2.2"
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-roving-focus": "1.1.0",
+ "@radix-ui/react-toggle": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -5865,100 +2142,11 @@
}
}
},
- "node_modules/@radix-ui/react-toolbar": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.11.tgz",
- "integrity": "sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==",
+ "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
+ "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
"license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-separator": "1.1.7",
- "@radix-ui/react-toggle-group": "1.1.11"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-toolbar/node_modules/@radix-ui/react-separator": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz",
- "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-tooltip": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz",
- "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-visually-hidden": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -5969,10 +2157,44 @@
}
}
},
+ "node_modules/@radix-ui/react-tooltip": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.4.tgz",
+ "integrity": "sha512-QpObUH/ZlpaO4YgHSaYzrLO2VuO+ZBFFgGzjMUPwtiYnAzzNNDPJeEGRrT7qNOrWm/Jr08M1vlp+vTHtnSQ0Uw==",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.0",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@radix-ui/react-use-callback-ref": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz",
- "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
+ "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
+ "license": "MIT",
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -5984,29 +2206,12 @@
}
},
"node_modules/@radix-ui/react-use-controllable-state": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz",
- "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz",
+ "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/react-use-effect-event": "0.0.2",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-effect-event": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz",
- "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==",
- "dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.1"
+ "@radix-ui/react-use-callback-ref": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -6019,28 +2224,12 @@
}
},
"node_modules/@radix-ui/react-use-escape-keydown": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz",
- "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz",
+ "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/react-use-callback-ref": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-is-hydrated": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz",
- "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==",
- "dependencies": {
- "use-sync-external-store": "^1.5.0"
+ "@radix-ui/react-use-callback-ref": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -6053,9 +2242,10 @@
}
},
"node_modules/@radix-ui/react-use-layout-effect": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz",
- "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz",
+ "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
+ "license": "MIT",
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -6067,9 +2257,10 @@
}
},
"node_modules/@radix-ui/react-use-previous": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz",
- "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz",
+ "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==",
+ "license": "MIT",
"peerDependencies": {
"@types/react": "*",
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
@@ -6081,11 +2272,12 @@
}
},
"node_modules/@radix-ui/react-use-rect": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz",
- "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz",
+ "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/rect": "1.1.1"
+ "@radix-ui/rect": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -6098,11 +2290,12 @@
}
},
"node_modules/@radix-ui/react-use-size": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz",
- "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz",
+ "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.1"
+ "@radix-ui/react-use-layout-effect": "1.1.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -6115,11 +2308,12 @@
}
},
"node_modules/@radix-ui/react-visually-hidden": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz",
- "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz",
+ "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==",
+ "license": "MIT",
"dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
+ "@radix-ui/react-primitive": "2.0.0"
},
"peerDependencies": {
"@types/react": "*",
@@ -6137,43 +2331,118 @@
}
},
"node_modules/@radix-ui/rect": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz",
- "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz",
+ "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==",
+ "license": "MIT"
+ },
+ "node_modules/@react-spring/animated": {
+ "version": "9.7.5",
+ "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.5.tgz",
+ "integrity": "sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==",
+ "license": "MIT",
+ "dependencies": {
+ "@react-spring/shared": "~9.7.5",
+ "@react-spring/types": "~9.7.5"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-spring/core": {
+ "version": "9.7.5",
+ "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.5.tgz",
+ "integrity": "sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==",
+ "license": "MIT",
+ "dependencies": {
+ "@react-spring/animated": "~9.7.5",
+ "@react-spring/shared": "~9.7.5",
+ "@react-spring/types": "~9.7.5"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/react-spring/donate"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-spring/rafz": {
+ "version": "9.7.5",
+ "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.7.5.tgz",
+ "integrity": "sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==",
+ "license": "MIT"
+ },
+ "node_modules/@react-spring/shared": {
+ "version": "9.7.5",
+ "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.5.tgz",
+ "integrity": "sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==",
+ "license": "MIT",
+ "dependencies": {
+ "@react-spring/rafz": "~9.7.5",
+ "@react-spring/types": "~9.7.5"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-spring/three": {
+ "version": "9.7.5",
+ "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-9.7.5.tgz",
+ "integrity": "sha512-RxIsCoQfUqOS3POmhVHa1wdWS0wyHAUway73uRLp3GAL5U2iYVNdnzQsep6M2NZ994BlW8TcKuMtQHUqOsy6WA==",
+ "license": "MIT",
+ "dependencies": {
+ "@react-spring/animated": "~9.7.5",
+ "@react-spring/core": "~9.7.5",
+ "@react-spring/shared": "~9.7.5",
+ "@react-spring/types": "~9.7.5"
+ },
+ "peerDependencies": {
+ "@react-three/fiber": ">=6.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "three": ">=0.126"
+ }
+ },
+ "node_modules/@react-spring/types": {
+ "version": "9.7.5",
+ "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.5.tgz",
+ "integrity": "sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==",
+ "license": "MIT"
},
"node_modules/@react-three/drei": {
- "version": "10.7.7",
- "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-10.7.7.tgz",
- "integrity": "sha512-ff+J5iloR0k4tC++QtD/j9u3w5fzfgFAWDtAGQah9pF2B1YgOq/5JxqY0/aVoQG5r3xSZz0cv5tk2YuBob4xEQ==",
+ "version": "9.122.0",
+ "resolved": "https://registry.npmjs.org/@react-three/drei/-/drei-9.122.0.tgz",
+ "integrity": "sha512-SEO/F/rBCTjlLez7WAlpys+iGe9hty4rNgjZvgkQeXFSiwqD4Hbk/wNHMAbdd8vprO2Aj81mihv4dF5bC7D0CA==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.26.0",
"@mediapipe/tasks-vision": "0.10.17",
"@monogrid/gainmap-js": "^3.0.6",
+ "@react-spring/three": "~9.7.5",
"@use-gesture/react": "^10.3.1",
- "camera-controls": "^3.1.0",
+ "camera-controls": "^2.9.0",
"cross-env": "^7.0.3",
"detect-gpu": "^5.0.56",
"glsl-noise": "^0.0.0",
"hls.js": "^1.5.17",
"maath": "^0.10.8",
"meshline": "^3.3.1",
+ "react-composer": "^5.0.3",
"stats-gl": "^2.2.8",
"stats.js": "^0.17.0",
"suspend-react": "^0.1.3",
- "three-mesh-bvh": "^0.8.3",
+ "three-mesh-bvh": "^0.7.8",
"three-stdlib": "^2.35.6",
- "troika-three-text": "^0.52.4",
+ "troika-three-text": "^0.52.0",
"tunnel-rat": "^0.1.2",
- "use-sync-external-store": "^1.4.0",
"utility-types": "^3.11.0",
"zustand": "^5.0.1"
},
"peerDependencies": {
- "@react-three/fiber": "^9.0.0",
- "react": "^19",
- "react-dom": "^19",
- "three": ">=0.159"
+ "@react-three/fiber": "^8",
+ "react": "^18",
+ "react-dom": "^18",
+ "three": ">=0.137"
},
"peerDependenciesMeta": {
"react-dom": {
@@ -6181,32 +2450,62 @@
}
}
},
+ "node_modules/@react-three/drei/node_modules/zustand": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.8.tgz",
+ "integrity": "sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20.0"
+ },
+ "peerDependencies": {
+ "@types/react": ">=18.0.0",
+ "immer": ">=9.0.6",
+ "react": ">=18.0.0",
+ "use-sync-external-store": ">=1.2.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "immer": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "use-sync-external-store": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@react-three/fiber": {
- "version": "9.5.0",
- "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-9.5.0.tgz",
- "integrity": "sha512-FiUzfYW4wB1+PpmsE47UM+mCads7j2+giRBltfwH7SNhah95rqJs3ltEs9V3pP8rYdS0QlNne+9Aj8dS/SiaIA==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-8.18.0.tgz",
+ "integrity": "sha512-FYZZqD0UUHUswKz3LQl2Z7H24AhD14XGTsIRw3SJaXUxyfVMi+1yiZGmqTcPt/CkPpdU7rrxqcyQ1zJE5DjvIQ==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.17.8",
+ "@types/react-reconciler": "^0.26.7",
"@types/webxr": "*",
"base64-js": "^1.5.1",
"buffer": "^6.0.3",
- "its-fine": "^2.0.0",
+ "its-fine": "^1.0.6",
+ "react-reconciler": "^0.27.0",
"react-use-measure": "^2.1.7",
- "scheduler": "^0.27.0",
+ "scheduler": "^0.21.0",
"suspend-react": "^0.1.3",
- "use-sync-external-store": "^1.4.0",
- "zustand": "^5.0.3"
+ "zustand": "^3.7.1"
},
"peerDependencies": {
"expo": ">=43.0",
"expo-asset": ">=8.4",
"expo-file-system": ">=11.0",
"expo-gl": ">=11.0",
- "react": ">=19 <19.3",
- "react-dom": ">=19 <19.3",
- "react-native": ">=0.78",
- "three": ">=0.156"
+ "react": ">=18 <19",
+ "react-dom": ">=18 <19",
+ "react-native": ">=0.64",
+ "three": ">=0.133"
},
"peerDependenciesMeta": {
"expo": {
@@ -6229,83 +2528,32 @@
}
}
},
- "node_modules/@reduxjs/toolkit": {
- "version": "2.11.2",
- "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.2.tgz",
- "integrity": "sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==",
+ "node_modules/@react-three/fiber/node_modules/scheduler": {
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz",
+ "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==",
"license": "MIT",
"dependencies": {
- "@standard-schema/spec": "^1.0.0",
- "@standard-schema/utils": "^0.3.0",
- "immer": "^11.0.0",
- "redux": "^5.0.1",
- "redux-thunk": "^3.1.0",
- "reselect": "^5.1.0"
- },
- "peerDependencies": {
- "react": "^16.9.0 || ^17.0.0 || ^18 || ^19",
- "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0"
- },
- "peerDependenciesMeta": {
- "react": {
- "optional": true
- },
- "react-redux": {
- "optional": true
- }
+ "loose-envify": "^1.1.0"
}
},
- "node_modules/@reduxjs/toolkit/node_modules/immer": {
- "version": "11.1.4",
- "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.4.tgz",
- "integrity": "sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==",
+ "node_modules/@remix-run/router": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz",
+ "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==",
"license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/immer"
- }
- },
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-rc.3",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz",
- "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==",
- "license": "MIT"
- },
- "node_modules/@rollup/pluginutils": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
- "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^2.0.2",
- "picomatch": "^4.0.2"
- },
"engines": {
"node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
}
},
- "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "license": "MIT"
- },
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz",
- "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz",
+ "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==",
"cpu": [
"arm"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6313,12 +2561,13 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz",
- "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz",
+ "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6326,12 +2575,13 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz",
- "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz",
+ "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6339,51 +2589,27 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz",
- "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz",
+ "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==",
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
]
},
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz",
- "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz",
- "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz",
- "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz",
+ "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==",
"cpu": [
"arm"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6391,12 +2617,13 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz",
- "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz",
+ "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==",
"cpu": [
"arm"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6404,12 +2631,13 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz",
- "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz",
+ "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6417,64 +2645,27 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz",
- "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz",
+ "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
- "node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz",
- "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==",
- "cpu": [
- "loong64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loong64-musl": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz",
- "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==",
- "cpu": [
- "loong64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz",
- "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==",
- "cpu": [
- "ppc64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-ppc64-musl": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz",
- "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==",
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz",
+ "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==",
"cpu": [
"ppc64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6482,25 +2673,13 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz",
- "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==",
- "cpu": [
- "riscv64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz",
- "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz",
+ "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==",
"cpu": [
"riscv64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6508,12 +2687,13 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz",
- "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz",
+ "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==",
"cpu": [
"s390x"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6521,12 +2701,13 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz",
- "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz",
+ "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==",
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6534,51 +2715,27 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz",
- "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz",
+ "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==",
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
- "node_modules/@rollup/rollup-openbsd-x64": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz",
- "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ]
- },
- "node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz",
- "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ]
- },
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz",
- "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz",
+ "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==",
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6586,524 +2743,311 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz",
- "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz",
+ "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==",
"cpu": [
"ia32"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
- "node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz",
- "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ]
- },
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz",
- "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz",
+ "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==",
"cpu": [
"x64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
]
},
- "node_modules/@sec-ant/readable-stream": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
- "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
- "license": "MIT"
- },
- "node_modules/@shikijs/core": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.0.2.tgz",
- "integrity": "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==",
- "license": "MIT",
+ "node_modules/@swc/core": {
+ "version": "1.7.39",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.39.tgz",
+ "integrity": "sha512-jns6VFeOT49uoTKLWIEfiQqJAlyqldNAt80kAr8f7a5YjX0zgnG3RBiLMpksx4Ka4SlK4O6TJ/lumIM3Trp82g==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@shikijs/primitive": "4.0.2",
- "@shikijs/types": "4.0.2",
- "@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4",
- "hast-util-to-html": "^9.0.5"
+ "@swc/counter": "^0.1.3",
+ "@swc/types": "^0.1.13"
},
"engines": {
- "node": ">=20"
- }
- },
- "node_modules/@shikijs/engine-javascript": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.0.2.tgz",
- "integrity": "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "4.0.2",
- "@shikijs/vscode-textmate": "^10.0.2",
- "oniguruma-to-es": "^4.3.4"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/@shikijs/engine-oniguruma": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.0.2.tgz",
- "integrity": "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "4.0.2",
- "@shikijs/vscode-textmate": "^10.0.2"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/@shikijs/langs": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.0.2.tgz",
- "integrity": "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "4.0.2"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/@shikijs/primitive": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.0.2.tgz",
- "integrity": "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "4.0.2",
- "@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/@shikijs/themes": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.0.2.tgz",
- "integrity": "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "4.0.2"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/@shikijs/types": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.0.2.tgz",
- "integrity": "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/@shikijs/vscode-textmate": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
- "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
- "license": "MIT"
- },
- "node_modules/@sindresorhus/merge-streams": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
- "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
+ "node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@so-ric/colorspace": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz",
- "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==",
- "license": "MIT",
- "dependencies": {
- "color": "^5.0.2",
- "text-hex": "1.0.x"
- }
- },
- "node_modules/@standard-schema/spec": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
- "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
- "license": "MIT"
- },
- "node_modules/@standard-schema/utils": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz",
- "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==",
- "license": "MIT"
- },
- "node_modules/@sveltejs/acorn-typescript": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz",
- "integrity": "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==",
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^8.9.0"
- }
- },
- "node_modules/@tabby_ai/hijri-converter": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@tabby_ai/hijri-converter/-/hijri-converter-1.0.5.tgz",
- "integrity": "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==",
- "license": "MIT",
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@tailwindcss/node": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz",
- "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/remapping": "^2.3.4",
- "enhanced-resolve": "^5.18.3",
- "jiti": "^2.6.1",
- "lightningcss": "1.30.2",
- "magic-string": "^0.30.21",
- "source-map-js": "^1.2.1",
- "tailwindcss": "4.1.18"
- }
- },
- "node_modules/@tailwindcss/oxide": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz",
- "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==",
- "dev": true,
- "engines": {
- "node": ">= 10"
+ "type": "opencollective",
+ "url": "https://opencollective.com/swc"
},
"optionalDependencies": {
- "@tailwindcss/oxide-android-arm64": "4.1.18",
- "@tailwindcss/oxide-darwin-arm64": "4.1.18",
- "@tailwindcss/oxide-darwin-x64": "4.1.18",
- "@tailwindcss/oxide-freebsd-x64": "4.1.18",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18",
- "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18",
- "@tailwindcss/oxide-linux-arm64-musl": "4.1.18",
- "@tailwindcss/oxide-linux-x64-gnu": "4.1.18",
- "@tailwindcss/oxide-linux-x64-musl": "4.1.18",
- "@tailwindcss/oxide-wasm32-wasi": "4.1.18",
- "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18",
- "@tailwindcss/oxide-win32-x64-msvc": "4.1.18"
+ "@swc/core-darwin-arm64": "1.7.39",
+ "@swc/core-darwin-x64": "1.7.39",
+ "@swc/core-linux-arm-gnueabihf": "1.7.39",
+ "@swc/core-linux-arm64-gnu": "1.7.39",
+ "@swc/core-linux-arm64-musl": "1.7.39",
+ "@swc/core-linux-x64-gnu": "1.7.39",
+ "@swc/core-linux-x64-musl": "1.7.39",
+ "@swc/core-win32-arm64-msvc": "1.7.39",
+ "@swc/core-win32-ia32-msvc": "1.7.39",
+ "@swc/core-win32-x64-msvc": "1.7.39"
+ },
+ "peerDependencies": {
+ "@swc/helpers": "*"
+ },
+ "peerDependenciesMeta": {
+ "@swc/helpers": {
+ "optional": true
+ }
}
},
- "node_modules/@tailwindcss/oxide-android-arm64": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz",
- "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==",
+ "node_modules/@swc/core-darwin-arm64": {
+ "version": "1.7.39",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.39.tgz",
+ "integrity": "sha512-o2nbEL6scMBMCTvY9OnbyVXtepLuNbdblV9oNJEFia5v5eGj9WMrnRQiylH3Wp/G2NYkW7V1/ZVW+kfvIeYe9A==",
"cpu": [
"arm64"
],
"dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-darwin-arm64": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz",
- "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": ">= 10"
+ "node": ">=10"
}
},
- "node_modules/@tailwindcss/oxide-darwin-x64": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz",
- "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==",
+ "node_modules/@swc/core-darwin-x64": {
+ "version": "1.7.39",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.39.tgz",
+ "integrity": "sha512-qMlv3XPgtPi/Fe11VhiPDHSLiYYk2dFYl747oGsHZPq+6tIdDQjIhijXPcsUHIXYDyG7lNpODPL8cP/X1sc9MA==",
"cpu": [
"x64"
],
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": ">= 10"
+ "node": ">=10"
}
},
- "node_modules/@tailwindcss/oxide-freebsd-x64": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz",
- "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz",
- "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==",
+ "node_modules/@swc/core-linux-arm-gnueabihf": {
+ "version": "1.7.39",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.39.tgz",
+ "integrity": "sha512-NP+JIkBs1ZKnpa3Lk2W1kBJMwHfNOxCUJXuTa2ckjFsuZ8OUu2gwdeLFkTHbR43dxGwH5UzSmuGocXeMowra/Q==",
"cpu": [
"arm"
],
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 10"
+ "node": ">=10"
}
},
- "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz",
- "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==",
+ "node_modules/@swc/core-linux-arm64-gnu": {
+ "version": "1.7.39",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.39.tgz",
+ "integrity": "sha512-cPc+/HehyHyHcvAsk3ML/9wYcpWVIWax3YBaA+ScecJpSE04l/oBHPfdqKUPslqZ+Gcw0OWnIBGJT/fBZW2ayw==",
"cpu": [
"arm64"
],
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 10"
+ "node": ">=10"
}
},
- "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz",
- "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==",
+ "node_modules/@swc/core-linux-arm64-musl": {
+ "version": "1.7.39",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.39.tgz",
+ "integrity": "sha512-8RxgBC6ubFem66bk9XJ0vclu3exJ6eD7x7CwDhp5AD/tulZslTYXM7oNPjEtje3xxabXuj/bEUMNvHZhQRFdqA==",
"cpu": [
"arm64"
],
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 10"
+ "node": ">=10"
}
},
- "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz",
- "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==",
+ "node_modules/@swc/core-linux-x64-gnu": {
+ "version": "1.7.39",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.39.tgz",
+ "integrity": "sha512-3gtCPEJuXLQEolo9xsXtuPDocmXQx12vewEyFFSMSjOfakuPOBmOQMa0sVL8Wwius8C1eZVeD1fgk0omMqeC+Q==",
"cpu": [
"x64"
],
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 10"
+ "node": ">=10"
}
},
- "node_modules/@tailwindcss/oxide-linux-x64-musl": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz",
- "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==",
+ "node_modules/@swc/core-linux-x64-musl": {
+ "version": "1.7.39",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.39.tgz",
+ "integrity": "sha512-mg39pW5x/eqqpZDdtjZJxrUvQNSvJF4O8wCl37fbuFUqOtXs4TxsjZ0aolt876HXxxhsQl7rS+N4KioEMSgTZw==",
"cpu": [
"x64"
],
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 10"
+ "node": ">=10"
}
},
- "node_modules/@tailwindcss/oxide-wasm32-wasi": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz",
- "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==",
- "bundleDependencies": [
- "@napi-rs/wasm-runtime",
- "@emnapi/core",
- "@emnapi/runtime",
- "@tybys/wasm-util",
- "@emnapi/wasi-threads",
- "tslib"
- ],
+ "node_modules/@swc/core-win32-arm64-msvc": {
+ "version": "1.7.39",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.39.tgz",
+ "integrity": "sha512-NZwuS0mNJowH3e9bMttr7B1fB8bW5svW/yyySigv9qmV5VcQRNz1kMlCvrCLYRsa93JnARuiaBI6FazSeG8mpA==",
"cpu": [
- "wasm32"
+ "arm64"
],
"dev": true,
- "license": "MIT",
+ "license": "Apache-2.0 AND MIT",
"optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-ia32-msvc": {
+ "version": "1.7.39",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.39.tgz",
+ "integrity": "sha512-qFmvv5UExbJPXhhvCVDBnjK5Duqxr048dlVB6ZCgGzbRxuarOlawCzzLK4N172230pzlAWGLgn9CWl3+N6zfHA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/core-win32-x64-msvc": {
+ "version": "1.7.39",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.39.tgz",
+ "integrity": "sha512-o+5IMqgOtj9+BEOp16atTfBgCogVak9svhBpwsbcJQp67bQbxGYhAPPDW/hZ2rpSSF7UdzbY9wudoX9G4trcuQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0 AND MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/@swc/types": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.13.tgz",
+ "integrity": "sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@emnapi/core": "^1.7.1",
- "@emnapi/runtime": "^1.7.1",
- "@emnapi/wasi-threads": "^1.1.0",
- "@napi-rs/wasm-runtime": "^1.1.0",
- "@tybys/wasm-util": "^0.10.1",
- "tslib": "^2.4.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz",
- "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz",
- "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
+ "@swc/counter": "^0.1.3"
}
},
"node_modules/@tailwindcss/typography": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz",
- "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==",
+ "version": "0.5.15",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz",
+ "integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==",
+ "dev": true,
"dependencies": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
"postcss-selector-parser": "6.0.10"
},
"peerDependencies": {
- "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
+ "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20"
}
},
- "node_modules/@tailwindcss/vite": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.18.tgz",
- "integrity": "sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==",
+ "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
"dev": true,
"dependencies": {
- "@tailwindcss/node": "4.1.18",
- "@tailwindcss/oxide": "4.1.18",
- "tailwindcss": "4.1.18"
- },
- "peerDependencies": {
- "vite": "^5.2.0 || ^6 || ^7"
- }
- },
- "node_modules/@ts-morph/common": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.27.0.tgz",
- "integrity": "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==",
- "license": "MIT",
- "dependencies": {
- "fast-glob": "^3.3.3",
- "minimatch": "^10.0.1",
- "path-browserify": "^1.0.1"
- }
- },
- "node_modules/@ts-morph/common/node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/@ts-morph/common/node_modules/brace-expansion": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
- "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^4.0.2"
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
},
"engines": {
- "node": "18 || 20 || >=22"
+ "node": ">=4"
}
},
- "node_modules/@ts-morph/common/node_modules/minimatch": {
- "version": "10.2.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
- "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
- "license": "BlueOak-1.0.0",
+ "node_modules/@tanstack/query-core": {
+ "version": "5.59.16",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.59.16.tgz",
+ "integrity": "sha512-crHn+G3ltqb5JG0oUv6q+PMz1m1YkjpASrXTU+sYWW9pLk0t2GybUHNRqYPZWhxgjPaVGC4yp92gSFEJgYEsPw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/react-query": {
+ "version": "5.59.16",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.59.16.tgz",
+ "integrity": "sha512-MuyWheG47h6ERd4PKQ6V8gDyBu3ThNG22e1fRVwvq6ap3EqsFhyuxCAwhNP/03m/mLg+DAb0upgbPaX6VB+CkQ==",
+ "license": "MIT",
"dependencies": {
- "brace-expansion": "^5.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
+ "@tanstack/query-core": "5.59.16"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19"
}
},
"node_modules/@tweenjs/tween.js": {
@@ -7112,51 +3056,10 @@
"integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==",
"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==",
- "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==",
- "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==",
- "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==",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.28.2"
- }
- },
"node_modules/@types/d3-array": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
- "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
+ "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==",
"license": "MIT"
},
"node_modules/@types/d3-color": {
@@ -7181,33 +3084,33 @@
}
},
"node_modules/@types/d3-path": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
- "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==",
"license": "MIT"
},
"node_modules/@types/d3-scale": {
- "version": "4.0.9",
- "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
- "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz",
+ "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==",
"license": "MIT",
"dependencies": {
"@types/d3-time": "*"
}
},
"node_modules/@types/d3-shape": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz",
- "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz",
+ "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==",
"license": "MIT",
"dependencies": {
"@types/d3-path": "*"
}
},
"node_modules/@types/d3-time": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
- "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz",
+ "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==",
"license": "MIT"
},
"node_modules/@types/d3-timer": {
@@ -7216,14 +3119,6 @@
"integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
"license": "MIT"
},
- "node_modules/@types/debug": {
- "version": "4.1.12",
- "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
- "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
- "dependencies": {
- "@types/ms": "*"
- }
- },
"node_modules/@types/draco3d": {
"version": "1.4.10",
"resolved": "https://registry.npmjs.org/@types/draco3d/-/draco3d-1.4.10.tgz",
@@ -7231,135 +3126,76 @@
"license": "MIT"
},
"node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="
- },
- "node_modules/@types/estree-jsx": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
- "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
"dev": true,
- "dependencies": {
- "@types/estree": "*"
- }
- },
- "node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
- "dependencies": {
- "@types/unist": "*"
- }
+ "license": "MIT"
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
- "node_modules/@types/katex": {
- "version": "0.16.8",
- "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz",
- "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==",
+ "dev": true,
"license": "MIT"
},
- "node_modules/@types/mdast": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
- "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
- "dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/@types/mdx": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
- "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==",
- "dev": true
- },
- "node_modules/@types/ms": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
- "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="
- },
- "node_modules/@types/nlcst": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
- "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "*"
- }
- },
"node_modules/@types/node": {
- "version": "25.2.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz",
- "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==",
+ "version": "22.7.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.9.tgz",
+ "integrity": "sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg==",
+ "license": "MIT",
"dependencies": {
- "undici-types": "~7.16.0"
+ "undici-types": "~6.19.2"
}
},
- "node_modules/@types/normalize-package-data": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
- "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
- "license": "MIT"
- },
"node_modules/@types/offscreencanvas": {
"version": "2019.7.3",
"resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz",
"integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==",
"license": "MIT"
},
+ "node_modules/@types/prop-types": {
+ "version": "15.7.13",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz",
+ "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==",
+ "license": "MIT"
+ },
"node_modules/@types/qrcode": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.6.tgz",
- "integrity": "sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.5.tgz",
+ "integrity": "sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/react": {
- "version": "19.2.14",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz",
- "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==",
+ "version": "18.3.12",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz",
+ "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==",
+ "license": "MIT",
"dependencies": {
- "csstype": "^3.2.2"
+ "@types/prop-types": "*",
+ "csstype": "^3.0.2"
}
},
"node_modules/@types/react-dom": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
- "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
- "peerDependencies": {
- "@types/react": "^19.2.0"
- }
- },
- "node_modules/@types/react-reconciler": {
- "version": "0.28.9",
- "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz",
- "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==",
+ "devOptional": true,
"license": "MIT",
- "peerDependencies": {
+ "dependencies": {
"@types/react": "*"
}
},
- "node_modules/@types/retry": {
- "version": "0.12.2",
- "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz",
- "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==",
- "license": "MIT"
- },
- "node_modules/@types/sax": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
- "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
- "dev": true,
+ "node_modules/@types/react-reconciler": {
+ "version": "0.26.7",
+ "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz",
+ "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==",
"license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@types/react": "*"
}
},
"node_modules/@types/stats.js": {
@@ -7368,80 +3204,43 @@
"integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==",
"license": "MIT"
},
- "node_modules/@types/statuses": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.6.tgz",
- "integrity": "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==",
- "license": "MIT"
- },
"node_modules/@types/three": {
- "version": "0.183.1",
- "resolved": "https://registry.npmjs.org/@types/three/-/three-0.183.1.tgz",
- "integrity": "sha512-f2Pu5Hrepfgavttdye3PsH5RWyY/AvdZQwIVhrc4uNtvF7nOWJacQKcoVJn0S4f0yYbmAE6AR+ve7xDcuYtMGw==",
+ "version": "0.180.0",
+ "resolved": "https://registry.npmjs.org/@types/three/-/three-0.180.0.tgz",
+ "integrity": "sha512-ykFtgCqNnY0IPvDro7h+9ZeLY+qjgUWv+qEvUt84grhenO60Hqd4hScHE7VTB9nOQ/3QM8lkbNE+4vKjEpUxKg==",
"license": "MIT",
"dependencies": {
"@dimforge/rapier3d-compat": "~0.12.0",
"@tweenjs/tween.js": "~23.1.3",
"@types/stats.js": "*",
- "@types/webxr": ">=0.5.17",
+ "@types/webxr": "*",
"@webgpu/types": "*",
"fflate": "~0.8.2",
- "meshoptimizer": "~1.0.1"
+ "meshoptimizer": "~0.22.0"
}
},
- "node_modules/@types/triple-beam": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz",
- "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==",
- "license": "MIT"
- },
- "node_modules/@types/unist": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
- "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="
- },
- "node_modules/@types/use-sync-external-store": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
- "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
- "license": "MIT"
- },
- "node_modules/@types/validate-npm-package-name": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/validate-npm-package-name/-/validate-npm-package-name-4.0.2.tgz",
- "integrity": "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==",
- "license": "MIT"
- },
"node_modules/@types/webxr": {
"version": "0.5.24",
"resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz",
"integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==",
"license": "MIT"
},
- "node_modules/@types/yauzl": {
- "version": "2.10.3",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
- "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.55.0.tgz",
- "integrity": "sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz",
+ "integrity": "sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.55.0",
- "@typescript-eslint/type-utils": "8.55.0",
- "@typescript-eslint/utils": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0",
- "ignore": "^7.0.5",
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.11.0",
+ "@typescript-eslint/type-utils": "8.11.0",
+ "@typescript-eslint/utils": "8.11.0",
+ "@typescript-eslint/visitor-keys": "8.11.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
"natural-compare": "^1.4.0",
- "ts-api-utils": "^2.4.0"
+ "ts-api-utils": "^1.3.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -7451,22 +3250,27 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.55.0",
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.55.0.tgz",
- "integrity": "sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz",
+ "integrity": "sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.55.0",
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/typescript-estree": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0",
- "debug": "^4.4.3"
+ "@typescript-eslint/scope-manager": "8.11.0",
+ "@typescript-eslint/types": "8.11.0",
+ "@typescript-eslint/typescript-estree": "8.11.0",
+ "@typescript-eslint/visitor-keys": "8.11.0",
+ "debug": "^4.3.4"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -7476,38 +3280,23 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <6.0.0"
- }
- },
- "node_modules/@typescript-eslint/project-service": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.55.0.tgz",
- "integrity": "sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==",
- "dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.55.0",
- "@typescript-eslint/types": "^8.55.0",
- "debug": "^4.4.3"
+ "eslint": "^8.57.0 || ^9.0.0"
},
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.55.0.tgz",
- "integrity": "sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz",
+ "integrity": "sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0"
+ "@typescript-eslint/types": "8.11.0",
+ "@typescript-eslint/visitor-keys": "8.11.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -7517,32 +3306,17 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.55.0.tgz",
- "integrity": "sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
- }
- },
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.55.0.tgz",
- "integrity": "sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz",
+ "integrity": "sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/typescript-estree": "8.55.0",
- "@typescript-eslint/utils": "8.55.0",
- "debug": "^4.4.3",
- "ts-api-utils": "^2.4.0"
+ "@typescript-eslint/typescript-estree": "8.11.0",
+ "@typescript-eslint/utils": "8.11.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.3.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -7551,15 +3325,18 @@
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.55.0.tgz",
- "integrity": "sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz",
+ "integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -7569,19 +3346,20 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.55.0.tgz",
- "integrity": "sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz",
+ "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/project-service": "8.55.0",
- "@typescript-eslint/tsconfig-utils": "8.55.0",
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0",
- "debug": "^4.4.3",
- "minimatch": "^9.0.5",
- "semver": "^7.7.3",
- "tinyglobby": "^0.2.15",
- "ts-api-utils": "^2.4.0"
+ "@typescript-eslint/types": "8.11.0",
+ "@typescript-eslint/visitor-keys": "8.11.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -7590,20 +3368,49 @@
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
- "peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.55.0.tgz",
- "integrity": "sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz",
+ "integrity": "sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.55.0",
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/typescript-estree": "8.55.0"
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.11.0",
+ "@typescript-eslint/types": "8.11.0",
+ "@typescript-eslint/typescript-estree": "8.11.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -7613,17 +3420,18 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <6.0.0"
+ "eslint": "^8.57.0 || ^9.0.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.55.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.55.0.tgz",
- "integrity": "sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz",
+ "integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.55.0",
- "eslint-visitor-keys": "^4.2.1"
+ "@typescript-eslint/types": "8.11.0",
+ "eslint-visitor-keys": "^3.4.3"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -7634,21 +3442,18 @@
}
},
"node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/@ungap/structured-clone": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
- "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="
- },
"node_modules/@use-gesture/core": {
"version": "10.3.1",
"resolved": "https://registry.npmjs.org/@use-gesture/core/-/core-10.3.1.tgz",
@@ -7667,266 +3472,30 @@
"react": ">= 16.8.0"
}
},
- "node_modules/@vercel/nft": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-1.5.0.tgz",
- "integrity": "sha512-IWTDeIoWhQ7ZtRO/JRKH+jhmeQvZYhtGPmzw/QGDY+wDCQqfm25P9yIdoAFagu4fWsK4IwZXDFIjrmp5rRm/sA==",
+ "node_modules/@vitejs/plugin-react-swc": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.1.tgz",
+ "integrity": "sha512-vgWOY0i1EROUK0Ctg1hwhtC3SdcDjZcdit4Ups4aPkDcB1jYhmo+RMYWY87cmXMhvtD5uf8lV89j2w16vkdSVg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@mapbox/node-pre-gyp": "^2.0.0",
- "@rollup/pluginutils": "^5.1.3",
- "acorn": "^8.6.0",
- "acorn-import-attributes": "^1.9.5",
- "async-sema": "^3.1.1",
- "bindings": "^1.4.0",
- "estree-walker": "2.0.2",
- "glob": "^13.0.0",
- "graceful-fs": "^4.2.9",
- "node-gyp-build": "^4.2.2",
- "picomatch": "^4.0.2",
- "resolve-from": "^5.0.0"
- },
- "bin": {
- "nft": "out/cli.js"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/@vercel/nft/node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "license": "MIT"
- },
- "node_modules/@vercel/nft/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@vitejs/plugin-react": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz",
- "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==",
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.29.0",
- "@babel/plugin-transform-react-jsx-self": "^7.27.1",
- "@babel/plugin-transform-react-jsx-source": "^7.27.1",
- "@rolldown/pluginutils": "1.0.0-rc.3",
- "@types/babel__core": "^7.20.5",
- "react-refresh": "^0.18.0"
- },
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
+ "@swc/core": "^1.7.26"
},
"peerDependencies": {
- "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
+ "vite": "^4 || ^5"
}
},
- "node_modules/@vue/compiler-core": {
- "version": "3.5.32",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.32.tgz",
- "integrity": "sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.29.2",
- "@vue/shared": "3.5.32",
- "entities": "^7.0.1",
- "estree-walker": "^2.0.2",
- "source-map-js": "^1.2.1"
- }
- },
- "node_modules/@vue/compiler-core/node_modules/entities": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
- "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/@vue/compiler-core/node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "license": "MIT"
- },
- "node_modules/@vue/compiler-dom": {
- "version": "3.5.32",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.32.tgz",
- "integrity": "sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==",
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-core": "3.5.32",
- "@vue/shared": "3.5.32"
- }
- },
- "node_modules/@vue/compiler-sfc": {
- "version": "3.5.32",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.32.tgz",
- "integrity": "sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==",
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.29.2",
- "@vue/compiler-core": "3.5.32",
- "@vue/compiler-dom": "3.5.32",
- "@vue/compiler-ssr": "3.5.32",
- "@vue/shared": "3.5.32",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.21",
- "postcss": "^8.5.8",
- "source-map-js": "^1.2.1"
- }
- },
- "node_modules/@vue/compiler-sfc/node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "license": "MIT"
- },
- "node_modules/@vue/compiler-ssr": {
- "version": "3.5.32",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.32.tgz",
- "integrity": "sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==",
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-dom": "3.5.32",
- "@vue/shared": "3.5.32"
- }
- },
- "node_modules/@vue/shared": {
- "version": "3.5.32",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.32.tgz",
- "integrity": "sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==",
- "license": "MIT"
- },
"node_modules/@webgpu/types": {
- "version": "0.1.69",
- "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.69.tgz",
- "integrity": "sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==",
+ "version": "0.1.66",
+ "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.66.tgz",
+ "integrity": "sha512-YA2hLrwLpDsRueNDXIMqN9NTzD6bCDkuXbOSe0heS+f8YE8usA6Gbv1prj81pzVHrbaAma7zObnIC+I6/sXJgA==",
"license": "BSD-3-Clause"
},
- "node_modules/@whatwg-node/disposablestack": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz",
- "integrity": "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==",
- "license": "MIT",
- "dependencies": {
- "@whatwg-node/promise-helpers": "^1.0.0",
- "tslib": "^2.6.3"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@whatwg-node/fetch": {
- "version": "0.10.13",
- "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.13.tgz",
- "integrity": "sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==",
- "license": "MIT",
- "dependencies": {
- "@whatwg-node/node-fetch": "^0.8.3",
- "urlpattern-polyfill": "^10.0.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@whatwg-node/fetch/node_modules/urlpattern-polyfill": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz",
- "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==",
- "license": "MIT"
- },
- "node_modules/@whatwg-node/node-fetch": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.8.5.tgz",
- "integrity": "sha512-4xzCl/zphPqlp9tASLVeUhB5+WJHbuWGYpfoC2q1qh5dw0AqZBW7L27V5roxYWijPxj4sspRAAoOH3d2ztaHUQ==",
- "license": "MIT",
- "dependencies": {
- "@fastify/busboy": "^3.1.1",
- "@whatwg-node/disposablestack": "^0.0.6",
- "@whatwg-node/promise-helpers": "^1.3.2",
- "tslib": "^2.6.3"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@whatwg-node/promise-helpers": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz",
- "integrity": "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.6.3"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@whatwg-node/server": {
- "version": "0.10.18",
- "resolved": "https://registry.npmjs.org/@whatwg-node/server/-/server-0.10.18.tgz",
- "integrity": "sha512-kMwLlxUbduttIgaPdSkmEarFpP+mSY8FEm+QWMBRJwxOHWkri+cxd8KZHO9EMrB9vgUuz+5WEaCawaL5wGVoXg==",
- "license": "MIT",
- "dependencies": {
- "@envelop/instrumentation": "^1.0.0",
- "@whatwg-node/disposablestack": "^0.0.6",
- "@whatwg-node/fetch": "^0.10.13",
- "@whatwg-node/promise-helpers": "^1.3.2",
- "tslib": "^2.6.3"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/abbrev": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz",
- "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==",
- "license": "ISC",
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "license": "MIT",
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
- },
- "node_modules/accepts": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
- "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
- "license": "MIT",
- "dependencies": {
- "mime-types": "^3.0.0",
- "negotiator": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/acorn": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
- "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz",
+ "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==",
+ "dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -7935,37 +3504,22 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-import-attributes": {
- "version": "1.9.5",
- "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
- "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^8"
- }
- },
"node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.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==",
- "license": "MIT",
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -7977,49 +3531,11 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/ajv-formats": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
- "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
- "license": "MIT",
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
- "node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
- "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-formats/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT"
- },
"node_modules/ansi-regex": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
- "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -8042,14 +3558,11 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/ansis": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz",
- "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==",
- "license": "ISC",
- "engines": {
- "node": ">=14"
- }
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "license": "MIT"
},
"node_modules/anymatch": {
"version": "3.1.3",
@@ -8064,125 +3577,24 @@
"node": ">= 8"
}
},
- "node_modules/anymatch/node_modules/picomatch": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
- "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/archiver": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz",
- "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==",
- "license": "MIT",
- "dependencies": {
- "archiver-utils": "^5.0.2",
- "async": "^3.2.4",
- "buffer-crc32": "^1.0.0",
- "readable-stream": "^4.0.0",
- "readdir-glob": "^1.1.2",
- "tar-stream": "^3.0.0",
- "zip-stream": "^6.0.1"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/archiver-utils": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz",
- "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==",
- "license": "MIT",
- "dependencies": {
- "glob": "^10.0.0",
- "graceful-fs": "^4.2.0",
- "is-stream": "^2.0.1",
- "lazystream": "^1.0.0",
- "lodash": "^4.17.15",
- "normalize-path": "^3.0.0",
- "readable-stream": "^4.0.0"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/archiver-utils/node_modules/glob": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
- "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
- "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/archiver-utils/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/archiver-utils/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==",
- "license": "ISC"
- },
- "node_modules/archiver-utils/node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
- "dev": true,
"license": "MIT"
},
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
},
"node_modules/aria-hidden": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz",
- "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
+ "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
+ "license": "MIT",
"dependencies": {
"tslib": "^2.0.0"
},
@@ -8190,292 +3602,10 @@
"node": ">=10"
}
},
- "node_modules/aria-query": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
- "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "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==",
- "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/array-iterate": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz",
- "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
- "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
- "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "is-array-buffer": "^3.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ast-module-types": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-6.0.1.tgz",
- "integrity": "sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/ast-types": {
- "version": "0.16.1",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
- "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/astring": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz",
- "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==",
- "dev": true,
- "bin": {
- "astring": "bin/astring"
- }
- },
- "node_modules/astro": {
- "version": "6.1.7",
- "resolved": "https://registry.npmjs.org/astro/-/astro-6.1.7.tgz",
- "integrity": "sha512-pvZysIUV2C2nRv8N7cXAkCLcfDQz/axAxF09SqiTz1B+xnvbhy6KzL2I6J15ZBXk8k0TfMD75dJ151QyQmAqZA==",
- "license": "MIT",
- "dependencies": {
- "@astrojs/compiler": "^3.0.1",
- "@astrojs/internal-helpers": "0.8.0",
- "@astrojs/markdown-remark": "7.1.0",
- "@astrojs/telemetry": "3.3.0",
- "@capsizecss/unpack": "^4.0.0",
- "@clack/prompts": "^1.1.0",
- "@oslojs/encoding": "^1.1.0",
- "@rollup/pluginutils": "^5.3.0",
- "aria-query": "^5.3.2",
- "axobject-query": "^4.1.0",
- "ci-info": "^4.4.0",
- "clsx": "^2.1.1",
- "common-ancestor-path": "^2.0.0",
- "cookie": "^1.1.1",
- "devalue": "^5.6.3",
- "diff": "^8.0.3",
- "dset": "^3.1.4",
- "es-module-lexer": "^2.0.0",
- "esbuild": "^0.27.3",
- "flattie": "^1.1.1",
- "fontace": "~0.4.1",
- "github-slugger": "^2.0.0",
- "html-escaper": "3.0.3",
- "http-cache-semantics": "^4.2.0",
- "js-yaml": "^4.1.1",
- "magic-string": "^0.30.21",
- "magicast": "^0.5.2",
- "mrmime": "^2.0.1",
- "neotraverse": "^0.6.18",
- "obug": "^2.1.1",
- "p-limit": "^7.3.0",
- "p-queue": "^9.1.0",
- "package-manager-detector": "^1.6.0",
- "piccolore": "^0.1.3",
- "picomatch": "^4.0.3",
- "rehype": "^13.0.2",
- "semver": "^7.7.4",
- "shiki": "^4.0.2",
- "smol-toml": "^1.6.0",
- "svgo": "^4.0.1",
- "tinyclip": "^0.1.12",
- "tinyexec": "^1.0.4",
- "tinyglobby": "^0.2.15",
- "tsconfck": "^3.1.6",
- "ultrahtml": "^1.6.0",
- "unifont": "~0.7.4",
- "unist-util-visit": "^5.1.0",
- "unstorage": "^1.17.4",
- "vfile": "^6.0.3",
- "vite": "^7.3.1",
- "vitefu": "^1.1.2",
- "xxhash-wasm": "^1.1.0",
- "yargs-parser": "^22.0.0",
- "zod": "^4.3.6"
- },
- "bin": {
- "astro": "bin/astro.mjs"
- },
- "engines": {
- "node": ">=22.12.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/astrodotbuild"
- },
- "optionalDependencies": {
- "sharp": "^0.34.0"
- }
- },
- "node_modules/astro-eslint-parser": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/astro-eslint-parser/-/astro-eslint-parser-1.2.2.tgz",
- "integrity": "sha512-JepyLROIad6f44uyqMF6HKE2QbunNzp3mYKRcPoDGt0QkxXmH222FAFC64WTyQu2Kg8NNEXHTN/sWuUId9sSxw==",
- "dev": true,
- "dependencies": {
- "@astrojs/compiler": "^2.0.0",
- "@typescript-eslint/scope-manager": "^7.0.0 || ^8.0.0",
- "@typescript-eslint/types": "^7.0.0 || ^8.0.0",
- "astrojs-compiler-sync": "^1.0.0",
- "debug": "^4.3.4",
- "entities": "^6.0.0",
- "eslint-scope": "^8.0.1",
- "eslint-visitor-keys": "^4.0.0",
- "espree": "^10.0.0",
- "fast-glob": "^3.3.3",
- "is-glob": "^4.0.3",
- "semver": "^7.3.8"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ota-meshi"
- }
- },
- "node_modules/astro-eslint-parser/node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/astro/node_modules/@astrojs/compiler": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-3.0.1.tgz",
- "integrity": "sha512-z97oYbdebO5aoWzuJ/8q5hLK232+17KcLZ7cJ8BCWk6+qNzVxn/gftC0KzMBUTD8WAaBkPpNSQK6PXLnNrZ0CA==",
- "license": "MIT"
- },
- "node_modules/astro/node_modules/yargs-parser": {
- "version": "22.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz",
- "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==",
- "license": "ISC",
- "engines": {
- "node": "^20.19.0 || ^22.12.0 || >=23"
- }
- },
- "node_modules/astro/node_modules/zod": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
- "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
- "node_modules/astrojs-compiler-sync": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/astrojs-compiler-sync/-/astrojs-compiler-sync-1.1.1.tgz",
- "integrity": "sha512-0mKvB9sDQRIZPsEJadw6OaFbGJ92cJPPR++ICca9XEyiUAZqgVuk25jNmzHPT0KF80rI94trSZrUR5iHFXGGOQ==",
- "dev": true,
- "dependencies": {
- "synckit": "^0.11.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.9.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ota-meshi"
- },
- "peerDependencies": {
- "@astrojs/compiler": ">=0.27.0"
- }
- },
- "node_modules/async": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
- "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
- "license": "MIT"
- },
- "node_modules/async-function": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
- "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/async-sema": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz",
- "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==",
- "license": "MIT"
- },
"node_modules/autoprefixer": {
- "version": "10.4.24",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz",
- "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==",
+ "version": "10.4.20",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
+ "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
"dev": true,
"funding": [
{
@@ -8491,11 +3621,13 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "browserslist": "^4.28.1",
- "caniuse-lite": "^1.0.30001766",
- "fraction.js": "^5.3.4",
- "picocolors": "^1.1.1",
+ "browserslist": "^4.23.3",
+ "caniuse-lite": "^1.0.30001646",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.1",
"postcss-value-parser": "^4.2.0"
},
"bin": {
@@ -8508,148 +3640,11 @@
"postcss": "^8.1.0"
}
},
- "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==",
- "license": "MIT",
- "dependencies": {
- "possible-typed-array-names": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/axobject-query": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
- "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/b4a": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz",
- "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==",
- "license": "Apache-2.0",
- "peerDependencies": {
- "react-native-b4a": "*"
- },
- "peerDependenciesMeta": {
- "react-native-b4a": {
- "optional": true
- }
- }
- },
- "node_modules/bail": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
- "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "node_modules/bare-events": {
- "version": "2.8.2",
- "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
- "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
- "license": "Apache-2.0",
- "peerDependencies": {
- "bare-abort-controller": "*"
- },
- "peerDependenciesMeta": {
- "bare-abort-controller": {
- "optional": true
- }
- }
- },
- "node_modules/bare-fs": {
- "version": "4.7.1",
- "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz",
- "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==",
- "license": "Apache-2.0",
- "dependencies": {
- "bare-events": "^2.5.4",
- "bare-path": "^3.0.0",
- "bare-stream": "^2.6.4",
- "bare-url": "^2.2.2",
- "fast-fifo": "^1.3.2"
- },
- "engines": {
- "bare": ">=1.16.0"
- },
- "peerDependencies": {
- "bare-buffer": "*"
- },
- "peerDependenciesMeta": {
- "bare-buffer": {
- "optional": true
- }
- }
- },
- "node_modules/bare-os": {
- "version": "3.8.7",
- "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.8.7.tgz",
- "integrity": "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==",
- "license": "Apache-2.0",
- "engines": {
- "bare": ">=1.14.0"
- }
- },
- "node_modules/bare-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz",
- "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==",
- "license": "Apache-2.0",
- "dependencies": {
- "bare-os": "^3.0.1"
- }
- },
- "node_modules/bare-stream": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.0.tgz",
- "integrity": "sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==",
- "license": "Apache-2.0",
- "dependencies": {
- "streamx": "^2.25.0",
- "teex": "^1.0.1"
- },
- "peerDependencies": {
- "bare-abort-controller": "*",
- "bare-buffer": "*",
- "bare-events": "*"
- },
- "peerDependenciesMeta": {
- "bare-abort-controller": {
- "optional": true
- },
- "bare-buffer": {
- "optional": true
- },
- "bare-events": {
- "optional": true
- }
- }
- },
- "node_modules/bare-url": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.0.tgz",
- "integrity": "sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==",
- "license": "Apache-2.0",
- "dependencies": {
- "bare-path": "^3.0.0"
- }
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
},
"node_modules/base64-js": {
"version": "1.5.1",
@@ -8671,49 +3666,6 @@
],
"license": "MIT"
},
- "node_modules/baseline-browser-mapping": {
- "version": "2.9.19",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
- "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
- "bin": {
- "baseline-browser-mapping": "dist/cli.js"
- }
- },
- "node_modules/better-ajv-errors": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/better-ajv-errors/-/better-ajv-errors-1.2.0.tgz",
- "integrity": "sha512-UW+IsFycygIo7bclP9h5ugkNH8EjCSgqyFB/yQ4Hqqa1OEYDtb0uFIkYE0b6+CjkgJYVM5UKI/pJPxjYe9EZlA==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/code-frame": "^7.16.0",
- "@humanwhocodes/momoa": "^2.0.2",
- "chalk": "^4.1.2",
- "jsonpointer": "^5.0.0",
- "leven": "^3.1.0 < 4"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "peerDependencies": {
- "ajv": "4.11.8 - 8"
- }
- },
- "node_modules/better-ajv-errors/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "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/bidi-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz",
@@ -8723,57 +3675,34 @@
"require-from-string": "^2.0.2"
}
},
- "node_modules/bindings": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"license": "MIT",
- "dependencies": {
- "file-uri-to-path": "1.0.0"
- }
- },
- "node_modules/body-parser": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
- "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
- "license": "MIT",
- "dependencies": {
- "bytes": "^3.1.2",
- "content-type": "^1.0.5",
- "debug": "^4.4.3",
- "http-errors": "^2.0.0",
- "iconv-lite": "^0.7.0",
- "on-finished": "^2.4.1",
- "qs": "^6.14.1",
- "raw-body": "^3.0.1",
- "type-is": "^2.0.1"
- },
"engines": {
- "node": ">=18"
+ "node": ">=8"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "license": "ISC"
- },
"node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
"node_modules/braces": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
"dependencies": {
"fill-range": "^7.1.1"
},
@@ -8782,9 +3711,10 @@
}
},
"node_modules/browserslist": {
- "version": "4.28.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
- "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "version": "4.24.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
+ "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
+ "dev": true,
"funding": [
{
"type": "opencollective",
@@ -8799,12 +3729,12 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "baseline-browser-mapping": "^2.9.0",
- "caniuse-lite": "^1.0.30001759",
- "electron-to-chromium": "^1.5.263",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.2.0"
+ "caniuse-lite": "^1.0.30001669",
+ "electron-to-chromium": "^1.5.41",
+ "node-releases": "^2.0.18",
+ "update-browserslist-db": "^1.1.1"
},
"bin": {
"browserslist": "cli.js"
@@ -8837,110 +3767,12 @@
"ieee754": "^1.2.1"
}
},
- "node_modules/buffer-crc32": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz",
- "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==",
- "license": "MIT",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
- "license": "BSD-3-Clause"
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "license": "MIT"
- },
- "node_modules/bundle-name": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
- "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
- "license": "MIT",
- "dependencies": {
- "run-applescript": "^7.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.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==",
- "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==",
- "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==",
- "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/callsite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
- "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==",
- "engines": {
- "node": "*"
- }
- },
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -8954,23 +3786,29 @@
"node": ">=6"
}
},
- "node_modules/camera-controls": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/camera-controls/-/camera-controls-3.1.2.tgz",
- "integrity": "sha512-xkxfpG2ECZ6Ww5/9+kf4mfg1VEYAoe9aDSY+IwF0UEs7qEzwy0aVRfs2grImIECs/PoBtWFrh7RXsQkwG922JA==",
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
"license": "MIT",
"engines": {
- "node": ">=22.0.0",
- "npm": ">=10.5.1"
- },
+ "node": ">= 6"
+ }
+ },
+ "node_modules/camera-controls": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/camera-controls/-/camera-controls-2.10.1.tgz",
+ "integrity": "sha512-KnaKdcvkBJ1Irbrzl8XD6WtZltkRjp869Jx8c0ujs9K+9WD+1D7ryBsCiVqJYUqt6i/HR5FxT7RLASieUD+Q5w==",
+ "license": "MIT",
"peerDependencies": {
"three": ">=0.126.1"
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001769",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz",
- "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==",
+ "version": "1.0.30001669",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz",
+ "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==",
+ "dev": true,
"funding": [
{
"type": "opencollective",
@@ -8984,134 +3822,76 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ]
+ ],
+ "license": "CC-BY-4.0"
},
"node_modules/canvas-confetti": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/canvas-confetti/-/canvas-confetti-1.9.4.tgz",
- "integrity": "sha512-yxQbJkAVrFXWNbTUjPqjF7G+g6pDotOUHGbkZq2NELZUMDpiJ85rIEazVb8GTaAptNW2miJAXbs1BtioA251Pw==",
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/canvas-confetti/-/canvas-confetti-1.9.3.tgz",
+ "integrity": "sha512-rFfTURMvmVEX1gyXFgn5QMn81bYk70qa0HLzcIOSVEyl57n6o9ItHeBtUSWdvKAPY0xlvBHno4/v3QPrT83q9g==",
"license": "ISC",
"funding": {
"type": "donate",
"url": "https://www.paypal.me/kirilvatev"
}
},
- "node_modules/ccount": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
- "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/chalk": {
- "version": "5.6.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
- "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "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": "^12.17.0 || ^14.13 || >=16.0.0"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/character-entities": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
- "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-entities-html4": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
- "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-entities-legacy": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
- "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-reference-invalid": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
- "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/chokidar": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz",
- "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"license": "MIT",
"dependencies": {
- "readdirp": "^5.0.0"
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
},
"engines": {
- "node": ">= 20.19.0"
+ "node": ">= 8.10.0"
},
"funding": {
"url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
}
},
- "node_modules/chownr": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
- "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/ci-info": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz",
- "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/citty": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz",
- "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==",
- "license": "MIT",
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
"dependencies": {
- "consola": "^3.2.3"
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "node_modules/cjs-module-lexer": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
- "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==",
- "license": "MIT"
- },
"node_modules/class-variance-authority": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
"integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
- "license": "Apache-2.0",
"dependencies": {
"clsx": "^2.1.1"
},
@@ -9119,54 +3899,15 @@
"url": "https://polar.sh/cva"
}
},
- "node_modules/cli-cursor": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
- "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
- "license": "MIT",
- "dependencies": {
- "restore-cursor": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cli-spinners": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
- "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "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==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
}
},
"node_modules/cliui/node_modules/ansi-regex": {
@@ -9211,9 +3952,9 @@
}
},
"node_modules/cliui/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==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
@@ -9221,10 +3962,7 @@
"strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "node": ">=8"
}
},
"node_modules/clsx": {
@@ -9237,54 +3975,388 @@
}
},
"node_modules/cmdk": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz",
- "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.0.0.tgz",
+ "integrity": "sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==",
"license": "MIT",
"dependencies": {
- "@radix-ui/react-compose-refs": "^1.1.1",
- "@radix-ui/react-dialog": "^1.1.6",
- "@radix-ui/react-id": "^1.1.0",
- "@radix-ui/react-primitive": "^2.0.2"
+ "@radix-ui/react-dialog": "1.0.5",
+ "@radix-ui/react-primitive": "1.0.3"
},
"peerDependencies": {
- "react": "^18 || ^19 || ^19.0.0-rc",
- "react-dom": "^18 || ^19 || ^19.0.0-rc"
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
}
},
- "node_modules/code-block-writer": {
- "version": "13.0.3",
- "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz",
- "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==",
- "license": "MIT"
- },
- "node_modules/collapse-white-space": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
- "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/color": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz",
- "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==",
+ "node_modules/cmdk/node_modules/@radix-ui/primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz",
+ "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==",
"license": "MIT",
"dependencies": {
- "color-convert": "^3.1.3",
- "color-string": "^2.1.3"
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
+ "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-context": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz",
+ "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-dialog": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz",
+ "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-dismissable-layer": "1.0.5",
+ "@radix-ui/react-focus-guards": "1.0.1",
+ "@radix-ui/react-focus-scope": "1.0.4",
+ "@radix-ui/react-id": "1.0.1",
+ "@radix-ui/react-portal": "1.0.4",
+ "@radix-ui/react-presence": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-slot": "1.0.2",
+ "@radix-ui/react-use-controllable-state": "1.0.1",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.5.5"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-dismissable-layer": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz",
+ "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-escape-keydown": "1.0.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-focus-guards": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz",
+ "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-focus-scope": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz",
+ "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-id": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz",
+ "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-layout-effect": "1.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-portal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz",
+ "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-presence": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz",
+ "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-use-layout-effect": "1.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-primitive": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz",
+ "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-slot": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
+ "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-use-callback-ref": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz",
+ "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-use-controllable-state": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz",
+ "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-use-escape-keydown": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz",
+ "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/@radix-ui/react-use-layout-effect": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz",
+ "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cmdk/node_modules/react-remove-scroll": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz",
+ "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==",
+ "license": "MIT",
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.3",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.0",
+ "use-sidecar": "^1.1.2"
},
"engines": {
- "node": ">=18"
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
"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==",
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -9295,287 +4367,25 @@
"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=="
- },
- "node_modules/color-string": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz",
- "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==",
- "license": "MIT",
- "dependencies": {
- "color-name": "^2.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/color-string/node_modules/color-name": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz",
- "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==",
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- }
- },
- "node_modules/color/node_modules/color-convert": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz",
- "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==",
- "license": "MIT",
- "dependencies": {
- "color-name": "^2.0.0"
- },
- "engines": {
- "node": ">=14.6"
- }
- },
- "node_modules/color/node_modules/color-name": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz",
- "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==",
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- }
- },
- "node_modules/comma-separated-tokens": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
- "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
},
"node_modules/commander": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
- "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/common-ancestor-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz",
- "integrity": "sha512-dnN3ibLeoRf2HNC+OlCiNc5d2zxbLJXOtiZUudNFSXZrNSydxcCsSpRzXwfu7BBWCIfHPw+xTayeBvJCP/D8Ng==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/common-path-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
- "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
- "license": "ISC"
- },
- "node_modules/compress-commons": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz",
- "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==",
- "license": "MIT",
- "dependencies": {
- "crc-32": "^1.2.0",
- "crc32-stream": "^6.0.0",
- "is-stream": "^2.0.1",
- "normalize-path": "^3.0.0",
- "readable-stream": "^4.0.0"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/compress-commons/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
"license": "MIT",
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 6"
}
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "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/consola": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
- "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
- "license": "MIT",
- "engines": {
- "node": "^14.18.0 || >=16.10.0"
- }
- },
- "node_modules/content-disposition": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz",
- "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "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=="
- },
- "node_modules/cookie": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
- "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/cookie-es": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz",
- "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==",
- "license": "MIT"
- },
- "node_modules/cookie-signature": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
- "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
- "license": "MIT",
- "engines": {
- "node": ">=6.6.0"
- }
- },
- "node_modules/copy-file": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/copy-file/-/copy-file-11.1.0.tgz",
- "integrity": "sha512-X8XDzyvYaA6msMyAM575CUoygY5b44QzLcGRKsK3MFmXcOvQa518dNPLsKYwkYsn72g3EiW+LE0ytd/FlqWmyw==",
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.11",
- "p-event": "^6.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "license": "MIT"
- },
- "node_modules/cors": {
- "version": "2.8.6",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz",
- "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==",
- "license": "MIT",
- "dependencies": {
- "object-assign": "^4",
- "vary": "^1"
- },
- "engines": {
- "node": ">= 0.10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/cosmiconfig": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz",
- "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==",
- "license": "MIT",
- "dependencies": {
- "env-paths": "^2.2.1",
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/d-fischer"
- },
- "peerDependencies": {
- "typescript": ">=4.9.5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/crc-32": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
- "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
- "license": "Apache-2.0",
- "bin": {
- "crc32": "bin/crc32.njs"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/crc32-stream": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz",
- "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==",
- "license": "MIT",
- "dependencies": {
- "crc-32": "^1.2.0",
- "readable-stream": "^4.0.0"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/cron-parser": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz",
- "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==",
- "license": "MIT",
- "dependencies": {
- "luxon": "^3.2.1"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
"node_modules/cross-env": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
@@ -9607,60 +4417,11 @@
"node": ">= 8"
}
},
- "node_modules/crossws": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz",
- "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==",
- "license": "MIT",
- "dependencies": {
- "uncrypto": "^0.1.3"
- }
- },
- "node_modules/css-select": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
- "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.1.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/css-tree": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz",
- "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
- "license": "MIT",
- "dependencies": {
- "mdn-data": "2.27.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
- }
- },
- "node_modules/css-what": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
- "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "license": "MIT",
"bin": {
"cssesc": "bin/cssesc"
},
@@ -9668,49 +4429,11 @@
"node": ">=4"
}
},
- "node_modules/cssfilter": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
- "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==",
- "license": "MIT"
- },
- "node_modules/csso": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
- "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
- "license": "MIT",
- "dependencies": {
- "css-tree": "~2.2.0"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/csso/node_modules/css-tree": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
- "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
- "license": "MIT",
- "dependencies": {
- "mdn-data": "2.0.28",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/csso/node_modules/mdn-data": {
- "version": "2.0.28",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
- "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
- "license": "CC0-1.0"
- },
"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=="
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
},
"node_modules/d3-array": {
"version": "3.2.4",
@@ -9743,9 +4466,9 @@
}
},
"node_modules/d3-format": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
- "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -9833,86 +4556,22 @@
"node": ">=12"
}
},
- "node_modules/data-uri-to-buffer": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
- "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
- "license": "MIT",
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/data-view-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
- "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/data-view-byte-length": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
- "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/inspect-js"
- }
- },
- "node_modules/data-view-byte-offset": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
- "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/date-fns": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
- "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
+ "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/kossnocorp"
}
},
- "node_modules/date-fns-jalali": {
- "version": "4.1.0-0",
- "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz",
- "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==",
- "license": "MIT"
- },
"node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
@@ -9925,15 +4584,6 @@
}
}
},
- "node_modules/decache": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz",
- "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==",
- "license": "MIT",
- "dependencies": {
- "callsite": "^1.0.0"
- }
- },
"node_modules/decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
@@ -9949,148 +4599,11 @@
"integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
"license": "MIT"
},
- "node_modules/decode-named-character-reference": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz",
- "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==",
- "dependencies": {
- "character-entities": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/dedent": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz",
- "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==",
- "license": "MIT",
- "peerDependencies": {
- "babel-plugin-macros": "^3.1.0"
- },
- "peerDependenciesMeta": {
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/default-browser": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
- "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
- "license": "MIT",
- "dependencies": {
- "bundle-name": "^4.1.0",
- "default-browser-id": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/default-browser-id": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
- "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "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-lazy-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
- "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "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/defu": {
- "version": "6.1.7",
- "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
- "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
- "license": "MIT"
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/destr": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz",
- "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
+ "dev": true,
"license": "MIT"
},
"node_modules/detect-gpu": {
@@ -10102,182 +4615,17 @@
"webgl-constants": "^1.1.1"
}
},
- "node_modules/detect-libc": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
- "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/detect-node-es": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
- "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
- },
- "node_modules/detective-amd": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.1.tgz",
- "integrity": "sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==",
- "license": "MIT",
- "dependencies": {
- "ast-module-types": "^6.0.1",
- "escodegen": "^2.1.0",
- "get-amd-module-type": "^6.0.1",
- "node-source-walk": "^7.0.1"
- },
- "bin": {
- "detective-amd": "bin/cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/detective-cjs": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-6.1.0.tgz",
- "integrity": "sha512-Qt3S4IddVNDb+71lm+jmt5NznIsgcKlibTnrw9Zr91rT9vRwKp+73+ImqLTNrQj4YuOxnzrC7GwIAVwF7136XQ==",
- "license": "MIT",
- "dependencies": {
- "ast-module-types": "^6.0.1",
- "node-source-walk": "^7.0.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/detective-es6": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-5.0.1.tgz",
- "integrity": "sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==",
- "license": "MIT",
- "dependencies": {
- "node-source-walk": "^7.0.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/detective-postcss": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-7.0.1.tgz",
- "integrity": "sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==",
- "license": "MIT",
- "dependencies": {
- "is-url": "^1.2.4",
- "postcss-values-parser": "^6.0.2"
- },
- "engines": {
- "node": "^14.0.0 || >=16.0.0"
- },
- "peerDependencies": {
- "postcss": "^8.4.47"
- }
- },
- "node_modules/detective-sass": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-6.0.1.tgz",
- "integrity": "sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==",
- "license": "MIT",
- "dependencies": {
- "gonzales-pe": "^4.3.0",
- "node-source-walk": "^7.0.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/detective-scss": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-5.0.1.tgz",
- "integrity": "sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==",
- "license": "MIT",
- "dependencies": {
- "gonzales-pe": "^4.3.0",
- "node-source-walk": "^7.0.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/detective-stylus": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-5.0.1.tgz",
- "integrity": "sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/detective-typescript": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-14.0.0.tgz",
- "integrity": "sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==",
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "^8.23.0",
- "ast-module-types": "^6.0.1",
- "node-source-walk": "^7.0.1"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "typescript": "^5.4.4"
- }
- },
- "node_modules/detective-vue2": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/detective-vue2/-/detective-vue2-2.2.0.tgz",
- "integrity": "sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==",
- "license": "MIT",
- "dependencies": {
- "@dependents/detective-less": "^5.0.1",
- "@vue/compiler-sfc": "^3.5.13",
- "detective-es6": "^5.0.1",
- "detective-sass": "^6.0.1",
- "detective-scss": "^5.0.1",
- "detective-stylus": "^5.0.1",
- "detective-typescript": "^14.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "typescript": "^5.4.4"
- }
- },
- "node_modules/dettle": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/dettle/-/dettle-1.0.5.tgz",
- "integrity": "sha512-ZVyjhAJ7sCe1PNXEGveObOH9AC8QvMga3HJIghHawtG7mE4K5pW9nz/vDGAr/U7a3LWgdOzEE7ac9MURnyfaTA==",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
"license": "MIT"
},
- "node_modules/devalue": {
- "version": "5.6.4",
- "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz",
- "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==",
- "license": "MIT"
- },
- "node_modules/devlop": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
- "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
- "dependencies": {
- "dequal": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/diff": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz",
- "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==",
- "engines": {
- "node": ">=0.3.1"
- }
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "license": "Apache-2.0"
},
"node_modules/dijkstrajs": {
"version": "1.0.3",
@@ -10291,98 +4639,14 @@
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
"license": "MIT"
},
- "node_modules/dom-serializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
"license": "MIT",
"dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/dom-serializer/node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ],
- "license": "BSD-2-Clause"
- },
- "node_modules/domhandler": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "domelementtype": "^2.3.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/domutils": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
- "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/dot-prop": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz",
- "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==",
- "license": "MIT",
- "dependencies": {
- "type-fest": "^4.18.2"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/dotenv": {
- "version": "17.3.1",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz",
- "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://dotenvx.com"
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
}
},
"node_modules/draco3d": {
@@ -10391,435 +4655,108 @@
"integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==",
"license": "Apache-2.0"
},
- "node_modules/dset": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz",
- "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "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==",
- "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/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
"license": "MIT"
},
- "node_modules/ecdsa-sig-formatter": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/eciesjs": {
- "version": "0.4.18",
- "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.18.tgz",
- "integrity": "sha512-wG99Zcfcys9fZux7Cft8BAX/YrOJLJSZ3jyYPfhZHqN2E+Ffx+QXBDsv3gubEgPtV6dTzJMSQUwk1H98/t/0wQ==",
- "license": "MIT",
- "dependencies": {
- "@ecies/ciphers": "^0.2.5",
- "@noble/ciphers": "^1.3.0",
- "@noble/curves": "^1.9.7",
- "@noble/hashes": "^1.8.0"
- },
- "engines": {
- "bun": ">=1",
- "deno": ">=2",
- "node": ">=16"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
- "license": "MIT"
- },
"node_modules/electron-to-chromium": {
- "version": "1.5.286",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz",
- "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="
+ "version": "1.5.45",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.45.tgz",
+ "integrity": "sha512-vOzZS6uZwhhbkZbcRyiy99Wg+pYFV5hk+5YaECvx0+Z31NR3Tt5zS6dze2OepT6PCTzVzT0dIJItti+uAW5zmw==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/embla-carousel": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz",
- "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA=="
- },
- "node_modules/embla-carousel-autoplay": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/embla-carousel-autoplay/-/embla-carousel-autoplay-8.6.0.tgz",
- "integrity": "sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==",
- "peerDependencies": {
- "embla-carousel": "8.6.0"
- }
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.3.0.tgz",
+ "integrity": "sha512-Ve8dhI4w28qBqR8J+aMtv7rLK89r1ZA5HocwFz6uMB/i5EiC7bGI7y+AM80yAVUJw3qqaZYK7clmZMUR8kM3UA==",
+ "license": "MIT"
},
"node_modules/embla-carousel-react": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.6.0.tgz",
- "integrity": "sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.3.0.tgz",
+ "integrity": "sha512-P1FlinFDcIvggcErRjNuVqnUR8anyo8vLMIH8Rthgofw7Nj8qTguCa2QjFAbzxAUTQTPNNjNL7yt0BGGinVdFw==",
"license": "MIT",
"dependencies": {
- "embla-carousel": "8.6.0",
- "embla-carousel-reactive-utils": "8.6.0"
+ "embla-carousel": "8.3.0",
+ "embla-carousel-reactive-utils": "8.3.0"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ "react": "^16.8.0 || ^17.0.1 || ^18.0.0"
}
},
"node_modules/embla-carousel-reactive-utils": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.6.0.tgz",
- "integrity": "sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.3.0.tgz",
+ "integrity": "sha512-EYdhhJ302SC4Lmkx8GRsp0sjUhEN4WyFXPOk0kGu9OXZSRMmcBlRgTvHcq8eKJE1bXWBsOi1T83B+BSSVZSmwQ==",
+ "license": "MIT",
"peerDependencies": {
- "embla-carousel": "8.6.0"
+ "embla-carousel": "8.3.0"
}
},
"node_modules/emoji-regex": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
- "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="
- },
- "node_modules/empathic": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz",
- "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==",
- "license": "MIT",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/enabled": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
- "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==",
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"license": "MIT"
},
- "node_modules/encodeurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/end-of-stream": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
- "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
- "license": "MIT",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/enhanced-resolve": {
- "version": "5.19.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz",
- "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.3.0"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/entities": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
- "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
- "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
- "license": "MIT",
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.24.2",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz",
- "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==",
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.2",
- "arraybuffer.prototype.slice": "^1.0.4",
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "data-view-buffer": "^1.0.2",
- "data-view-byte-length": "^1.0.2",
- "data-view-byte-offset": "^1.0.1",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-set-tostringtag": "^2.1.0",
- "es-to-primitive": "^1.3.0",
- "function.prototype.name": "^1.1.8",
- "get-intrinsic": "^1.3.0",
- "get-proto": "^1.0.1",
- "get-symbol-description": "^1.1.0",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "internal-slot": "^1.1.0",
- "is-array-buffer": "^3.0.5",
- "is-callable": "^1.2.7",
- "is-data-view": "^1.0.2",
- "is-negative-zero": "^2.0.3",
- "is-regex": "^1.2.1",
- "is-set": "^2.0.3",
- "is-shared-array-buffer": "^1.0.4",
- "is-string": "^1.1.1",
- "is-typed-array": "^1.1.15",
- "is-weakref": "^1.1.1",
- "math-intrinsics": "^1.1.0",
- "object-inspect": "^1.13.4",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.7",
- "own-keys": "^1.0.1",
- "regexp.prototype.flags": "^1.5.4",
- "safe-array-concat": "^1.1.3",
- "safe-push-apply": "^1.0.0",
- "safe-regex-test": "^1.1.0",
- "set-proto": "^1.0.0",
- "stop-iteration-iterator": "^1.1.0",
- "string.prototype.trim": "^1.2.10",
- "string.prototype.trimend": "^1.0.9",
- "string.prototype.trimstart": "^1.0.8",
- "typed-array-buffer": "^1.0.3",
- "typed-array-byte-length": "^1.0.3",
- "typed-array-byte-offset": "^1.0.4",
- "typed-array-length": "^1.0.7",
- "unbox-primitive": "^1.1.0",
- "which-typed-array": "^1.1.19"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "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==",
- "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==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-module-lexer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
- "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==",
- "license": "MIT"
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "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==",
- "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/es-shim-unscopables": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
- "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
- "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7",
- "is-date-object": "^1.0.5",
- "is-symbol": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-toolkit": {
- "version": "1.45.1",
- "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.45.1.tgz",
- "integrity": "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==",
- "license": "MIT",
- "workspaces": [
- "docs",
- "benchmarks"
- ]
- },
- "node_modules/esast-util-from-estree": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz",
- "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==",
- "dev": true,
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "devlop": "^1.0.0",
- "estree-util-visit": "^2.0.0",
- "unist-util-position-from-estree": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/esast-util-from-js": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz",
- "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==",
- "dev": true,
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "acorn": "^8.0.0",
- "esast-util-from-estree": "^2.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/esbuild": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz",
- "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==",
+ "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": ">=18"
+ "node": ">=12"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.27.3",
- "@esbuild/android-arm": "0.27.3",
- "@esbuild/android-arm64": "0.27.3",
- "@esbuild/android-x64": "0.27.3",
- "@esbuild/darwin-arm64": "0.27.3",
- "@esbuild/darwin-x64": "0.27.3",
- "@esbuild/freebsd-arm64": "0.27.3",
- "@esbuild/freebsd-x64": "0.27.3",
- "@esbuild/linux-arm": "0.27.3",
- "@esbuild/linux-arm64": "0.27.3",
- "@esbuild/linux-ia32": "0.27.3",
- "@esbuild/linux-loong64": "0.27.3",
- "@esbuild/linux-mips64el": "0.27.3",
- "@esbuild/linux-ppc64": "0.27.3",
- "@esbuild/linux-riscv64": "0.27.3",
- "@esbuild/linux-s390x": "0.27.3",
- "@esbuild/linux-x64": "0.27.3",
- "@esbuild/netbsd-arm64": "0.27.3",
- "@esbuild/netbsd-x64": "0.27.3",
- "@esbuild/openbsd-arm64": "0.27.3",
- "@esbuild/openbsd-x64": "0.27.3",
- "@esbuild/openharmony-arm64": "0.27.3",
- "@esbuild/sunos-x64": "0.27.3",
- "@esbuild/win32-arm64": "0.27.3",
- "@esbuild/win32-ia32": "0.27.3",
- "@esbuild/win32-x64": "0.27.3"
+ "@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/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
- "license": "MIT"
- },
"node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -10827,63 +4764,33 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/escodegen": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
- "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=6.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
- }
- },
- "node_modules/escodegen/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "license": "BSD-3-Clause",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/eslint": {
- "version": "9.39.2",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz",
- "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz",
+ "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@eslint-community/eslint-utils": "^4.8.0",
- "@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.21.1",
- "@eslint/config-helpers": "^0.4.2",
- "@eslint/core": "^0.17.0",
- "@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.39.2",
- "@eslint/plugin-kit": "^0.4.1",
- "@humanfs/node": "^0.16.6",
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.11.0",
+ "@eslint/config-array": "^0.18.0",
+ "@eslint/core": "^0.7.0",
+ "@eslint/eslintrc": "^3.1.0",
+ "@eslint/js": "9.13.0",
+ "@eslint/plugin-kit": "^0.2.0",
+ "@humanfs/node": "^0.16.5",
"@humanwhocodes/module-importer": "^1.0.1",
- "@humanwhocodes/retry": "^0.4.2",
+ "@humanwhocodes/retry": "^0.3.1",
"@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
- "cross-spawn": "^7.0.6",
+ "cross-spawn": "^7.0.2",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.4.0",
- "eslint-visitor-keys": "^4.2.1",
- "espree": "^10.4.0",
+ "eslint-scope": "^8.1.0",
+ "eslint-visitor-keys": "^4.1.0",
+ "espree": "^10.2.0",
"esquery": "^1.5.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -10897,7 +4804,8 @@
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.3"
+ "optionator": "^0.9.3",
+ "text-table": "^0.2.0"
},
"bin": {
"eslint": "bin/eslint.js"
@@ -10917,100 +4825,35 @@
}
}
},
- "node_modules/eslint-compat-utils": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz",
- "integrity": "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==",
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "5.1.0-rc-fb9a90fa48-20240614",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0-rc-fb9a90fa48-20240614.tgz",
+ "integrity": "sha512-xsiRwaDNF5wWNC4ZHLut+x/YcAxksUd9Rizt7LaEn3bV8VyYRpXnRJQlLOfYaVy9esk4DFP4zPPnoNVjq5Gc0w==",
"dev": true,
- "dependencies": {
- "semver": "^7.5.4"
- },
+ "license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=10"
},
"peerDependencies": {
- "eslint": ">=6.0.0"
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
}
},
- "node_modules/eslint-config-prettier": {
- "version": "10.1.8",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
- "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
+ "node_modules/eslint-plugin-react-refresh": {
+ "version": "0.4.14",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.14.tgz",
+ "integrity": "sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==",
"dev": true,
- "bin": {
- "eslint-config-prettier": "bin/cli.js"
- },
- "funding": {
- "url": "https://opencollective.com/eslint-config-prettier"
- },
+ "license": "MIT",
"peerDependencies": {
- "eslint": ">=7.0.0"
- }
- },
- "node_modules/eslint-plugin-astro": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-astro/-/eslint-plugin-astro-1.5.0.tgz",
- "integrity": "sha512-IWy4kY3DKTJxd7g652zIWpBGFuxw7NIIt16kyqc8BlhnIKvI8yGJj+Maua0DiNYED3F/D8AmzoTTTA6A95WX9g==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@jridgewell/sourcemap-codec": "^1.4.14",
- "@typescript-eslint/types": "^7.7.1 || ^8",
- "astro-eslint-parser": "^1.0.2",
- "eslint-compat-utils": "^0.6.0",
- "globals": "^16.0.0",
- "postcss": "^8.4.14",
- "postcss-selector-parser": "^7.0.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ota-meshi"
- },
- "peerDependencies": {
- "eslint": ">=8.57.0"
- }
- },
- "node_modules/eslint-plugin-astro/node_modules/globals": {
- "version": "16.5.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz",
- "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==",
- "dev": true,
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint-plugin-astro/node_modules/postcss-selector-parser": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz",
- "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==",
- "dev": true,
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-simple-import-sort": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz",
- "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==",
- "dev": true,
- "peerDependencies": {
- "eslint": ">=5.0.0"
+ "eslint": ">=7"
}
},
"node_modules/eslint-scope": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
- "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz",
+ "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
@@ -11023,48 +4866,11 @@
}
},
"node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/eslint/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,
- "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/eslint/node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
+ "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -11072,36 +4878,16 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/eslint/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/espree": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
- "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz",
+ "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "acorn": "^8.15.0",
+ "acorn": "^8.12.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.1"
+ "eslint-visitor-keys": "^4.1.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -11110,35 +4896,12 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/espree/node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/esquery": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
- "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"estraverse": "^5.1.0"
},
@@ -11151,6 +4914,7 @@
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
},
@@ -11162,97 +4926,18 @@
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
},
- "node_modules/estree-util-attach-comments": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
- "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-util-build-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
- "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
- "dev": true,
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "devlop": "^1.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "estree-walker": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-util-is-identifier-name": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
- "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-util-scope": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz",
- "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-util-to-js": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
- "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
- "dev": true,
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "astring": "^1.8.0",
- "source-map": "^0.7.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/estree-util-visit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
- "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
- "dev": true,
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"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"
}
@@ -11261,240 +4946,45 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/eventemitter3": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
- "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/events-universal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
- "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
- "license": "Apache-2.0",
- "dependencies": {
- "bare-events": "^2.7.0"
- }
- },
- "node_modules/eventsource": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz",
- "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==",
- "license": "MIT",
- "dependencies": {
- "eventsource-parser": "^3.0.1"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/eventsource-parser": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz",
- "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==",
- "license": "MIT",
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/execa": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz",
- "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==",
- "license": "MIT",
- "dependencies": {
- "@sindresorhus/merge-streams": "^4.0.0",
- "cross-spawn": "^7.0.6",
- "figures": "^6.1.0",
- "get-stream": "^9.0.0",
- "human-signals": "^8.0.1",
- "is-plain-obj": "^4.1.0",
- "is-stream": "^4.0.1",
- "npm-run-path": "^6.0.0",
- "pretty-ms": "^9.2.0",
- "signal-exit": "^4.1.0",
- "strip-final-newline": "^4.0.0",
- "yoctocolors": "^2.1.1"
- },
- "engines": {
- "node": "^18.19.0 || >=20.5.0"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/express": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
- "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
- "license": "MIT",
- "dependencies": {
- "accepts": "^2.0.0",
- "body-parser": "^2.2.1",
- "content-disposition": "^1.0.0",
- "content-type": "^1.0.5",
- "cookie": "^0.7.1",
- "cookie-signature": "^1.2.1",
- "debug": "^4.4.0",
- "depd": "^2.0.0",
- "encodeurl": "^2.0.0",
- "escape-html": "^1.0.3",
- "etag": "^1.8.1",
- "finalhandler": "^2.1.0",
- "fresh": "^2.0.0",
- "http-errors": "^2.0.0",
- "merge-descriptors": "^2.0.0",
- "mime-types": "^3.0.0",
- "on-finished": "^2.4.1",
- "once": "^1.4.0",
- "parseurl": "^1.3.3",
- "proxy-addr": "^2.0.7",
- "qs": "^6.14.0",
- "range-parser": "^1.2.1",
- "router": "^2.2.0",
- "send": "^1.1.0",
- "serve-static": "^2.2.0",
- "statuses": "^2.0.1",
- "type-is": "^2.0.1",
- "vary": "^1.1.2"
- },
- "engines": {
- "node": ">= 18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/express-rate-limit": {
- "version": "8.3.1",
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz",
- "integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==",
- "license": "MIT",
- "dependencies": {
- "ip-address": "10.1.0"
- },
- "engines": {
- "node": ">= 16"
- },
- "funding": {
- "url": "https://github.com/sponsors/express-rate-limit"
- },
- "peerDependencies": {
- "express": ">= 4.11"
- }
- },
- "node_modules/express/node_modules/cookie": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
- "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "extract-zip": "cli.js"
- },
- "engines": {
- "node": ">= 10.17.0"
- },
- "optionalDependencies": {
- "@types/yauzl": "^2.9.1"
- }
- },
- "node_modules/extract-zip/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "license": "MIT",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "license": "MIT"
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "node_modules/fast-fifo": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
- "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
"license": "MIT"
},
+ "node_modules/fast-equals": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz",
+ "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
- "micromatch": "^4.0.8"
+ "micromatch": "^4.0.4"
},
"engines": {
"node": ">=8.6.0"
@@ -11504,6 +4994,7 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -11514,159 +5005,38 @@
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- },
- "node_modules/fast-safe-stringify": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true,
"license": "MIT"
},
- "node_modules/fast-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
- "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fastify"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fastify"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/fast-xml-builder": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz",
- "integrity": "sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/NaturalIntelligence"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "path-expression-matcher": "^1.1.3"
- }
- },
- "node_modules/fast-xml-parser": {
- "version": "5.5.9",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.9.tgz",
- "integrity": "sha512-jldvxr1MC6rtiZKgrFnDSvT8xuH+eJqxqOBThUVjYrxssYTo1avZLGql5l0a0BAERR01CadYzZ83kVEkbyDg+g==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/NaturalIntelligence"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "fast-xml-builder": "^1.1.4",
- "path-expression-matcher": "^1.2.0",
- "strnum": "^2.2.2"
- },
- "bin": {
- "fxparser": "src/cli/cli.js"
- }
- },
"node_modules/fastq": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
- "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
},
- "node_modules/fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
- "license": "MIT",
- "dependencies": {
- "pend": "~1.2.0"
- }
- },
- "node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fecha": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
- "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==",
- "license": "MIT"
- },
- "node_modules/fetch-blob": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
- "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/jimmywarting"
- },
- {
- "type": "paypal",
- "url": "https://paypal.me/jimmywarting"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "node-domexception": "^1.0.0",
- "web-streams-polyfill": "^3.0.3"
- },
- "engines": {
- "node": "^12.20 || >= 14.13"
- }
- },
"node_modules/fflate": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
"integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==",
"license": "MIT"
},
- "node_modules/figures": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz",
- "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
- "license": "MIT",
- "dependencies": {
- "is-unicode-supported": "^2.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/file-entry-cache": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
"integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flat-cache": "^4.0.0"
},
@@ -11674,16 +5044,11 @@
"node": ">=16.0.0"
}
},
- "node_modules/file-uri-to-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
- "license": "MIT"
- },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -11691,44 +5056,12 @@
"node": ">=8"
}
},
- "node_modules/filter-obj": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-6.1.0.tgz",
- "integrity": "sha512-xdMtCAODmPloU9qtmPcdBV9Kd27NtMse+4ayThxqIHUES5Z2S6bGpap5PpdmNM56ub7y3i1eyr+vJJIIgWGKmA==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/finalhandler": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",
- "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.4.0",
- "encodeurl": "^2.0.0",
- "escape-html": "^1.0.3",
- "on-finished": "^2.4.1",
- "parseurl": "^1.3.3",
- "statuses": "^2.0.1"
- },
- "engines": {
- "node": ">= 18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
@@ -11740,23 +5073,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/find-up-simple": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
- "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/flat-cache": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
"integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flatted": "^3.2.9",
"keyv": "^4.5.4"
@@ -11766,69 +5088,19 @@
}
},
"node_modules/flatted": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
- "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
- "dev": true
- },
- "node_modules/flattie": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
- "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fn.name": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
- "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==",
- "license": "MIT"
- },
- "node_modules/fontace": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz",
- "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==",
- "license": "MIT",
- "dependencies": {
- "fontkitten": "^1.0.2"
- }
- },
- "node_modules/fontkitten": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.3.tgz",
- "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==",
- "license": "MIT",
- "dependencies": {
- "tiny-inflate": "^1.0.3"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/for-each": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
- "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/foreground-child": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
- "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
"license": "ISC",
"dependencies": {
- "cross-spawn": "^7.0.6",
+ "cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
},
"engines": {
@@ -11838,90 +5110,20 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/formdata-polyfill": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
- "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
- "license": "MIT",
- "dependencies": {
- "fetch-blob": "^3.1.2"
- },
- "engines": {
- "node": ">=12.20.0"
- }
- },
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/fraction.js": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
- "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "*"
},
"funding": {
- "type": "github",
+ "type": "patreon",
"url": "https://github.com/sponsors/rawify"
}
},
- "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/fresh": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
- "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/fs-extra": {
- "version": "11.3.4",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz",
- "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==",
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -11945,71 +5147,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/function.prototype.name": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
- "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "functions-have-names": "^1.2.3",
- "hasown": "^2.0.2",
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "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==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/fuzzysort": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-3.1.0.tgz",
- "integrity": "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==",
- "license": "MIT"
- },
- "node_modules/generator-function": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz",
- "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "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==",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-amd-module-type": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-6.0.2.tgz",
- "integrity": "sha512-7zShVYAYtMnj9S65CfN+hvpBCByfuB1OY8xID01nZEzXTZbx4YyysAfi+nMl95JSR6odt4q8TCj2W63KAoyVLQ==",
- "license": "MIT",
- "dependencies": {
- "ast-module-types": "^6.0.1",
- "node-source-walk": "^7.0.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -12019,149 +5156,30 @@
"node": "6.* || 8.* || >= 10.*"
}
},
- "node_modules/get-east-asian-width": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz",
- "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "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-nonce": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
"integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
- "node_modules/get-own-enumerable-keys": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-own-enumerable-keys/-/get-own-enumerable-keys-1.0.0.tgz",
- "integrity": "sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/get-port": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.2.0.tgz",
- "integrity": "sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==",
- "license": "MIT",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/get-port-please": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz",
- "integrity": "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==",
- "license": "MIT"
- },
- "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==",
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-stream": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
- "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
- "license": "MIT",
- "dependencies": {
- "@sec-ant/readable-stream": "^0.4.1",
- "is-stream": "^4.0.1"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
- "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/gifenc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/gifenc/-/gifenc-1.0.3.tgz",
- "integrity": "sha512-xdr6AdrfGBcfzncONUOlXMBuc5wJDtOueE3c5rdG0oNgtINLD+f2iFZltrBRZYzACRbKr+mSVU/x98zv2u3jmw==",
- "license": "MIT"
- },
- "node_modules/github-slugger": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
- "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
- "license": "ISC"
- },
"node_modules/glob": {
- "version": "13.0.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz",
- "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==",
- "license": "BlueOak-1.0.0",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "license": "ISC",
"dependencies": {
- "minimatch": "^10.2.2",
- "minipass": "^7.1.3",
- "path-scurry": "^2.0.2"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
- "engines": {
- "node": "18 || 20 || >=22"
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -12171,7 +5189,7 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -12179,47 +5197,36 @@
"node": ">=10.13.0"
}
},
- "node_modules/glob/node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
"node_modules/glob/node_modules/brace-expansion": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
- "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"license": "MIT",
"dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
+ "balanced-match": "^1.0.0"
}
},
"node_modules/glob/node_modules/minimatch": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
- "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
- "license": "BlueOak-1.0.0",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "license": "ISC",
"dependencies": {
- "brace-expansion": "^5.0.5"
+ "brace-expansion": "^2.0.1"
},
"engines": {
- "node": "18 || 20 || >=22"
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/globals": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
- "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "version": "15.11.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz",
+ "integrity": "sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -12227,194 +5234,29 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/globalthis": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
- "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.2.1",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/glsl-noise": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/glsl-noise/-/glsl-noise-0.0.0.tgz",
"integrity": "sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w==",
"license": "MIT"
},
- "node_modules/gonzales-pe": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz",
- "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==",
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "gonzales": "bin/gonzales.js"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
- },
- "node_modules/graphql": {
- "version": "16.13.2",
- "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz",
- "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==",
- "license": "MIT",
- "engines": {
- "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
- }
- },
- "node_modules/gray-matter": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
- "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
- "dependencies": {
- "js-yaml": "^3.13.1",
- "kind-of": "^6.0.2",
- "section-matter": "^1.0.0",
- "strip-bom-string": "^1.0.0"
- },
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/gray-matter/node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/gray-matter/node_modules/js-yaml": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
- "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/h3": {
- "version": "1.15.11",
- "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz",
- "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==",
- "license": "MIT",
- "dependencies": {
- "cookie-es": "^1.2.3",
- "crossws": "^0.3.5",
- "defu": "^6.1.6",
- "destr": "^2.0.5",
- "iron-webcrypto": "^1.2.1",
- "node-mock-http": "^1.0.4",
- "radix3": "^1.1.2",
- "ufo": "^1.6.3",
- "uncrypto": "^0.1.3"
- }
- },
- "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==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
},
"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==",
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
- "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "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==",
- "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==",
- "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.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -12427,366 +5269,12 @@
"node": ">= 0.4"
}
},
- "node_modules/hast-util-from-html": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz",
- "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "devlop": "^1.1.0",
- "hast-util-from-parse5": "^8.0.0",
- "parse5": "^7.0.0",
- "vfile": "^6.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-from-parse5": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
- "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "devlop": "^1.0.0",
- "hastscript": "^9.0.0",
- "property-information": "^7.0.0",
- "vfile": "^6.0.0",
- "vfile-location": "^5.0.0",
- "web-namespaces": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-is-element": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
- "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-parse-selector": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
- "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-raw": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
- "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "@ungap/structured-clone": "^1.0.0",
- "hast-util-from-parse5": "^8.0.0",
- "hast-util-to-parse5": "^8.0.0",
- "html-void-elements": "^3.0.0",
- "mdast-util-to-hast": "^13.0.0",
- "parse5": "^7.0.0",
- "unist-util-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0",
- "web-namespaces": "^2.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-estree": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz",
- "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "devlop": "^1.0.0",
- "estree-util-attach-comments": "^3.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "hast-util-whitespace": "^3.0.0",
- "mdast-util-mdx-expression": "^2.0.0",
- "mdast-util-mdx-jsx": "^3.0.0",
- "mdast-util-mdxjs-esm": "^2.0.0",
- "property-information": "^7.0.0",
- "space-separated-tokens": "^2.0.0",
- "style-to-js": "^1.0.0",
- "unist-util-position": "^5.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-html": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
- "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "ccount": "^2.0.0",
- "comma-separated-tokens": "^2.0.0",
- "hast-util-whitespace": "^3.0.0",
- "html-void-elements": "^3.0.0",
- "mdast-util-to-hast": "^13.0.0",
- "property-information": "^7.0.0",
- "space-separated-tokens": "^2.0.0",
- "stringify-entities": "^4.0.0",
- "zwitch": "^2.0.4"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-jsx-runtime": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz",
- "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "devlop": "^1.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "hast-util-whitespace": "^3.0.0",
- "mdast-util-mdx-expression": "^2.0.0",
- "mdast-util-mdx-jsx": "^3.0.0",
- "mdast-util-mdxjs-esm": "^2.0.0",
- "property-information": "^7.0.0",
- "space-separated-tokens": "^2.0.0",
- "style-to-js": "^1.0.0",
- "unist-util-position": "^5.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-parse5": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz",
- "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "devlop": "^1.0.0",
- "property-information": "^7.0.0",
- "space-separated-tokens": "^2.0.0",
- "web-namespaces": "^2.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-text": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
- "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "hast-util-is-element": "^3.0.0",
- "unist-util-find-after": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-whitespace": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
- "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hastscript": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
- "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "hast-util-parse-selector": "^4.0.0",
- "property-information": "^7.0.0",
- "space-separated-tokens": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/headers-polyfill": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz",
- "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==",
- "license": "MIT"
- },
"node_modules/hls.js": {
- "version": "1.6.15",
- "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.15.tgz",
- "integrity": "sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==",
+ "version": "1.6.13",
+ "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.13.tgz",
+ "integrity": "sha512-hNEzjZNHf5bFrUNvdS4/1RjIanuJ6szpWNfTaX5I6WfGynWXGT7K/YQLYtemSvFExzeMdgdE4SsyVLJbd5PcZA==",
"license": "Apache-2.0"
},
- "node_modules/hono": {
- "version": "4.12.9",
- "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.9.tgz",
- "integrity": "sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==",
- "license": "MIT",
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/hosted-git-info": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
- "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^10.0.1"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
- }
- },
- "node_modules/hosted-git-info/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==",
- "license": "ISC"
- },
- "node_modules/html-escaper": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
- "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==",
- "license": "MIT"
- },
- "node_modules/html-void-elements": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
- "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/http-cache-semantics": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
- "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
- "license": "BSD-2-Clause"
- },
- "node_modules/http-errors": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
- "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
- "license": "MIT",
- "dependencies": {
- "depd": "~2.0.0",
- "inherits": "~2.0.4",
- "setprototypeof": "~1.2.0",
- "statuses": "~2.0.2",
- "toidentifier": "~1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/http-shutdown": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz",
- "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==",
- "license": "MIT",
- "engines": {
- "iojs": ">= 1.0.0",
- "node": ">= 0.12.0"
- }
- },
- "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==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/human-signals": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz",
- "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
- "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
"node_modules/ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
@@ -12808,52 +5296,27 @@
"license": "BSD-3-Clause"
},
"node_modules/ignore": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
- "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4"
}
},
- "node_modules/image-meta": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.2.tgz",
- "integrity": "sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA==",
- "license": "MIT"
- },
- "node_modules/image-size": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz",
- "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==",
- "license": "MIT",
- "bin": {
- "image-size": "bin/image-size.js"
- },
- "engines": {
- "node": ">=16.x"
- }
- },
"node_modules/immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
"license": "MIT"
},
- "node_modules/immer": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz",
- "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/immer"
- }
- },
"node_modules/import-fresh": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
- "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@@ -12865,84 +5328,24 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/import-in-the-middle": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz",
- "integrity": "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==",
- "license": "Apache-2.0",
- "dependencies": {
- "acorn": "^8.14.0",
- "acorn-import-attributes": "^1.9.5",
- "cjs-module-lexer": "^1.2.2",
- "module-details-from-path": "^1.0.3"
- }
- },
"node_modules/imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.8.19"
}
},
- "node_modules/indent-string": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
- "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/index-to-position": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
- "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "license": "ISC"
- },
- "node_modules/inline-style-parser": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz",
- "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==",
- "dev": true
- },
"node_modules/input-otp": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz",
- "integrity": "sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.2.4.tgz",
+ "integrity": "sha512-md6rhmD+zmMnUh5crQNSQxq3keBRYvE3odbr4Qb9g2NWzQv9azi+t1a3X4TBTbh98fsGHgEEJlzbe1q860uGCA==",
"license": "MIT",
"peerDependencies": {
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc"
- }
- },
- "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==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "hasown": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
}
},
"node_modules/internmap": {
@@ -12954,173 +5357,31 @@
"node": ">=12"
}
},
- "node_modules/ip-address": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz",
- "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==",
- "license": "MIT",
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/ipx": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/ipx/-/ipx-3.1.1.tgz",
- "integrity": "sha512-7Xnt54Dco7uYkfdAw0r2vCly3z0rSaVhEXMzPvl3FndsTVm5p26j+PO+gyinkYmcsEUvX2Rh7OGK7KzYWRu6BA==",
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"license": "MIT",
"dependencies": {
- "@fastify/accept-negotiator": "^2.0.1",
- "citty": "^0.1.6",
- "consola": "^3.4.2",
- "defu": "^6.1.4",
- "destr": "^2.0.5",
- "etag": "^1.8.1",
- "h3": "^1.15.3",
- "image-meta": "^0.2.1",
- "listhen": "^1.9.0",
- "ofetch": "^1.4.1",
- "pathe": "^2.0.3",
- "sharp": "^0.34.3",
- "svgo": "^4.0.0",
- "ufo": "^1.6.1",
- "unstorage": "^1.16.1",
- "xss": "^1.0.15"
- },
- "bin": {
- "ipx": "bin/ipx.mjs"
+ "loose-envify": "^1.0.0"
}
},
- "node_modules/iron-webcrypto": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz",
- "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/brc-dd"
- }
- },
- "node_modules/is-alphabetical": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
- "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-alphanumerical": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
- "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
- "dev": true,
- "dependencies": {
- "is-alphabetical": "^2.0.0",
- "is-decimal": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "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==",
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
+ "binary-extensions": "^2.0.0"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "license": "MIT"
- },
- "node_modules/is-async-function": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
- "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
- "license": "MIT",
- "dependencies": {
- "async-function": "^1.0.0",
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "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==",
- "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==",
- "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==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=8"
}
},
"node_modules/is-core-module": {
- "version": "2.16.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
- "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+ "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
"license": "MIT",
"dependencies": {
"hasown": "^2.0.2"
@@ -13132,125 +5393,29 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-data-view": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
- "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "is-typed-array": "^1.1.13"
- },
- "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==",
- "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-decimal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
- "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/is-finalizationregistry": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
- "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "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==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/is-generator-function": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz",
- "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.4",
- "generator-function": "^2.0.0",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -13258,389 +5423,46 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-hexadecimal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
- "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-in-ssh": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz",
- "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==",
- "license": "MIT",
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-inside-container": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
- "dependencies": {
- "is-docker": "^3.0.0"
- },
- "bin": {
- "is-inside-container": "cli.js"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-interactive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
- "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
- "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-network-error": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz",
- "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==",
- "license": "MIT",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "license": "MIT"
- },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
- "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==",
- "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-obj": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-3.0.0.tgz",
- "integrity": "sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-path-inside": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz",
- "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
- "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/is-promise": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
- "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
- "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==",
- "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-regexp": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz",
- "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "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==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-stream": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
- "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "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==",
- "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==",
- "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-typed-array": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
- "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
- "license": "MIT",
- "dependencies": {
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-unicode-supported": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
- "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-url": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
- "license": "MIT"
- },
- "node_modules/is-url-superb": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz",
- "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
- "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "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==",
- "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/is-wsl": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
- "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
- "dependencies": {
- "is-inside-container": "^1.0.0"
- },
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==",
"license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
},
"node_modules/its-fine": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-2.0.0.tgz",
- "integrity": "sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.2.5.tgz",
+ "integrity": "sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==",
"license": "MIT",
"dependencies": {
- "@types/react-reconciler": "^0.28.9"
+ "@types/react-reconciler": "^0.28.0"
},
"peerDependencies": {
- "react": "^19.0.0"
+ "react": ">=18.0"
+ }
+ },
+ "node_modules/its-fine/node_modules/@types/react-reconciler": {
+ "version": "0.28.9",
+ "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz",
+ "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*"
}
},
"node_modules/jackspeak": {
@@ -13659,46 +5481,26 @@
}
},
"node_modules/jiti": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
- "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
- "bin": {
- "jiti": "lib/jiti-cli.mjs"
- }
- },
- "node_modules/jose": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz",
- "integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==",
+ "version": "1.21.6",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
+ "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
"license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/panva"
- }
- },
- "node_modules/jpeg-js": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz",
- "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==",
- "license": "BSD-3-Clause"
- },
- "node_modules/js-image-generator": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/js-image-generator/-/js-image-generator-1.0.4.tgz",
- "integrity": "sha512-ckb7kyVojGAnArouVR+5lBIuwU1fcrn7E/YYSd0FK7oIngAkMmRvHASLro9Zt5SQdWToaI66NybG+OGxPw/HlQ==",
- "license": "ISC",
- "dependencies": {
- "jpeg-js": "^0.4.2"
+ "bin": {
+ "jiti": "bin/jiti.js"
}
},
"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=="
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
},
"node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -13706,298 +5508,43 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/jsesc": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
- "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
"license": "MIT"
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "node_modules/json-schema-typed": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz",
- "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==",
- "license": "BSD-2-Clause"
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/jsonpointer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
- "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jsonwebtoken": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz",
- "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==",
- "license": "MIT",
- "dependencies": {
- "jws": "^4.0.1",
- "lodash.includes": "^4.3.0",
- "lodash.isboolean": "^3.0.3",
- "lodash.isinteger": "^4.0.4",
- "lodash.isnumber": "^3.0.3",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.once": "^4.0.0",
- "ms": "^2.1.1",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": ">=12",
- "npm": ">=6"
- }
- },
- "node_modules/junk": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz",
- "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==",
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/jwa": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz",
- "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==",
- "license": "MIT",
- "dependencies": {
- "buffer-equal-constant-time": "^1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jws": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz",
- "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==",
- "license": "MIT",
- "dependencies": {
- "jwa": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jwt-decode": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz",
- "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/katex": {
- "version": "0.16.45",
- "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.45.tgz",
- "integrity": "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==",
- "funding": [
- "https://opencollective.com/katex",
- "https://github.com/sponsors/katex"
- ],
- "license": "MIT",
- "dependencies": {
- "commander": "^8.3.0"
- },
- "bin": {
- "katex": "cli.js"
- }
- },
- "node_modules/katex/node_modules/commander": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
- "license": "MIT",
- "engines": {
- "node": ">= 12"
- }
+ "dev": true,
+ "license": "MIT"
},
"node_modules/keyv": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"json-buffer": "3.0.1"
}
},
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/kuler": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
- "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==",
- "license": "MIT"
- },
- "node_modules/lambda-local": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/lambda-local/-/lambda-local-2.2.0.tgz",
- "integrity": "sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==",
- "license": "MIT",
- "dependencies": {
- "commander": "^10.0.1",
- "dotenv": "^16.3.1",
- "winston": "^3.10.0"
- },
- "bin": {
- "lambda-local": "build/cli.js"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lambda-local/node_modules/commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
- "license": "MIT",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/lambda-local/node_modules/dotenv": {
- "version": "16.6.1",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
- "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://dotenvx.com"
- }
- },
- "node_modules/lazystream": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
- "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
- "license": "MIT",
- "dependencies": {
- "readable-stream": "^2.0.5"
- },
- "engines": {
- "node": ">= 0.6.3"
- }
- },
- "node_modules/lazystream/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "license": "MIT"
- },
- "node_modules/lazystream/node_modules/readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "license": "MIT",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/lazystream/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "license": "MIT"
- },
- "node_modules/lazystream/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
@@ -14015,263 +5562,16 @@
"immediate": "~3.0.5"
}
},
- "node_modules/lightningcss": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz",
- "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==",
- "devOptional": true,
- "dependencies": {
- "detect-libc": "^2.0.3"
- },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "license": "MIT",
"engines": {
- "node": ">= 12.0.0"
+ "node": ">=14"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "lightningcss-android-arm64": "1.30.2",
- "lightningcss-darwin-arm64": "1.30.2",
- "lightningcss-darwin-x64": "1.30.2",
- "lightningcss-freebsd-x64": "1.30.2",
- "lightningcss-linux-arm-gnueabihf": "1.30.2",
- "lightningcss-linux-arm64-gnu": "1.30.2",
- "lightningcss-linux-arm64-musl": "1.30.2",
- "lightningcss-linux-x64-gnu": "1.30.2",
- "lightningcss-linux-x64-musl": "1.30.2",
- "lightningcss-win32-arm64-msvc": "1.30.2",
- "lightningcss-win32-x64-msvc": "1.30.2"
- }
- },
- "node_modules/lightningcss-android-arm64": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz",
- "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-darwin-arm64": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz",
- "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-darwin-x64": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz",
- "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-freebsd-x64": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz",
- "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz",
- "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz",
- "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz",
- "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz",
- "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-musl": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz",
- "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-arm64-msvc": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz",
- "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz",
- "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
+ "url": "https://github.com/sponsors/antonk52"
}
},
"node_modules/lines-and-columns": {
@@ -14280,47 +5580,12 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"license": "MIT"
},
- "node_modules/listhen": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.1.tgz",
- "integrity": "sha512-4EhoyVcXEpNlY5HJRSQpH7Rba94M8N2JmI62ePjl0lrJKXSfG0F1FAgHGxBoz/T3pe41sUEwkIRRIcaUL0/Ofw==",
- "license": "MIT",
- "dependencies": {
- "@parcel/watcher": "^2.5.6",
- "@parcel/watcher-wasm": "^2.5.6",
- "citty": "^0.2.2",
- "consola": "^3.4.2",
- "crossws": ">=0.2.0 <0.5.0",
- "defu": "^6.1.6",
- "get-port-please": "^3.2.0",
- "h3": "^1.15.11",
- "http-shutdown": "^1.2.2",
- "jiti": "^2.6.1",
- "mlly": "^1.8.2",
- "node-forge": "^1.4.0",
- "pathe": "^2.0.3",
- "std-env": "^4.0.0",
- "tinyclip": "^0.1.12",
- "ufo": "^1.6.3",
- "untun": "^0.1.3",
- "uqr": "^0.1.2"
- },
- "bin": {
- "listen": "bin/listhen.mjs",
- "listhen": "bin/listhen.mjs"
- }
- },
- "node_modules/listhen/node_modules/citty": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.2.tgz",
- "integrity": "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==",
- "license": "MIT"
- },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
},
@@ -14332,137 +5597,504 @@
}
},
"node_modules/lodash": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
- "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
- "node_modules/lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
- "license": "MIT"
- },
- "node_modules/lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
- "license": "MIT"
- },
- "node_modules/lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
- "license": "MIT"
- },
- "node_modules/lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
- "license": "MIT"
+ "node_modules/lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
+ "dev": true
},
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
- "license": "MIT"
- },
- "node_modules/lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
- "license": "MIT"
+ "dev": true
},
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "dev": true,
"license": "MIT"
},
- "node_modules/log-symbols": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
- "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==",
+ "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": {
- "chalk": "^5.3.0",
- "is-unicode-supported": "^1.3.0"
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lovable-tagger": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/lovable-tagger/-/lovable-tagger-1.1.7.tgz",
+ "integrity": "sha512-b1wwYbuxWGx+DuqviQGQXrgLAraK1RVbqTg6G8LYRID8FJTg4TuAeO0TJ7i6UXOF8gEzbgjhRbGZ+XAkWH2T8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.25.9",
+ "@babel/types": "^7.25.8",
+ "esbuild": "^0.25.0",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.12",
+ "tailwindcss": "^3.4.17"
+ },
+ "peerDependencies": {
+ "vite": "^5.0.0"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz",
+ "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/android-arm": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz",
+ "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/android-arm64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz",
+ "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/android-x64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz",
+ "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz",
+ "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz",
+ "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz",
+ "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz",
+ "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/linux-arm": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz",
+ "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz",
+ "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz",
+ "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz",
+ "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz",
+ "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz",
+ "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz",
+ "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz",
+ "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/linux-x64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz",
+ "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz",
+ "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz",
+ "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz",
+ "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz",
+ "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz",
+ "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/@esbuild/win32-x64": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz",
+ "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/lovable-tagger/node_modules/esbuild": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz",
+ "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
},
"engines": {
"node": ">=18"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-symbols/node_modules/is-unicode-supported": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
- "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/logform": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz",
- "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==",
- "license": "MIT",
- "dependencies": {
- "@colors/colors": "1.6.0",
- "@types/triple-beam": "^1.3.2",
- "fecha": "^4.2.0",
- "ms": "^2.1.1",
- "safe-stable-stringify": "^2.3.1",
- "triple-beam": "^1.3.0"
- },
- "engines": {
- "node": ">= 12.0.0"
- }
- },
- "node_modules/longest-streak": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
- "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.0",
+ "@esbuild/android-arm": "0.25.0",
+ "@esbuild/android-arm64": "0.25.0",
+ "@esbuild/android-x64": "0.25.0",
+ "@esbuild/darwin-arm64": "0.25.0",
+ "@esbuild/darwin-x64": "0.25.0",
+ "@esbuild/freebsd-arm64": "0.25.0",
+ "@esbuild/freebsd-x64": "0.25.0",
+ "@esbuild/linux-arm": "0.25.0",
+ "@esbuild/linux-arm64": "0.25.0",
+ "@esbuild/linux-ia32": "0.25.0",
+ "@esbuild/linux-loong64": "0.25.0",
+ "@esbuild/linux-mips64el": "0.25.0",
+ "@esbuild/linux-ppc64": "0.25.0",
+ "@esbuild/linux-riscv64": "0.25.0",
+ "@esbuild/linux-s390x": "0.25.0",
+ "@esbuild/linux-x64": "0.25.0",
+ "@esbuild/netbsd-arm64": "0.25.0",
+ "@esbuild/netbsd-x64": "0.25.0",
+ "@esbuild/openbsd-arm64": "0.25.0",
+ "@esbuild/openbsd-x64": "0.25.0",
+ "@esbuild/sunos-x64": "0.25.0",
+ "@esbuild/win32-arm64": "0.25.0",
+ "@esbuild/win32-ia32": "0.25.0",
+ "@esbuild/win32-x64": "0.25.0"
}
},
"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==",
- "dependencies": {
- "yallist": "^3.0.2"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
},
"node_modules/lucide-react": {
- "version": "0.479.0",
- "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.479.0.tgz",
- "integrity": "sha512-aBhNnveRhorBOK7uA4gDjgaf+YlHMdMhQ/3cupk6exM10hWlEU+2QtWYOfhXhjAsmdb6LeKR+NZnow4UxRRiTQ==",
- "license": "ISC",
+ "version": "0.462.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.462.0.tgz",
+ "integrity": "sha512-NTL7EbAao9IFtuSivSZgrAh4fZd09Lr+6MTkqIxuHaH2nnYiYIzXPo06cOxHg9wKLdj6LL8TByG4qpePqwgx/g==",
"peerDependencies": {
- "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/luxon": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz",
- "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
}
},
"node_modules/maath": {
@@ -14476,434 +6108,20 @@
}
},
"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==",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.5"
- }
- },
- "node_modules/magicast": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz",
- "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.29.0",
- "@babel/types": "^7.29.0",
- "source-map-js": "^1.2.1"
- }
- },
- "node_modules/map-obj": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-5.0.2.tgz",
- "integrity": "sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/markdown-extensions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
- "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==",
+ "version": "0.30.12",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz",
+ "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
"dev": true,
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/markdown-table": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
- "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "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==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/mdast-util-definitions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz",
- "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==",
"license": "MIT",
"dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "unist-util-visit": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "@jridgewell/sourcemap-codec": "^1.5.0"
}
},
- "node_modules/mdast-util-find-and-replace": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
- "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "escape-string-regexp": "^5.0.0",
- "unist-util-is": "^6.0.0",
- "unist-util-visit-parents": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mdast-util-from-markdown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
- "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark": "^4.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unist-util-stringify-position": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz",
- "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
- "license": "MIT",
- "dependencies": {
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-gfm-autolink-literal": "^2.0.0",
- "mdast-util-gfm-footnote": "^2.0.0",
- "mdast-util-gfm-strikethrough": "^2.0.0",
- "mdast-util-gfm-table": "^2.0.0",
- "mdast-util-gfm-task-list-item": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-autolink-literal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
- "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "ccount": "^2.0.0",
- "devlop": "^1.0.0",
- "mdast-util-find-and-replace": "^3.0.0",
- "micromark-util-character": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-footnote": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz",
- "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "devlop": "^1.1.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-strikethrough": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
- "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-table": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
- "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "devlop": "^1.0.0",
- "markdown-table": "^3.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-task-list-item": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
- "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "devlop": "^1.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-mdx": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz",
- "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==",
- "dev": true,
- "dependencies": {
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-mdx-expression": "^2.0.0",
- "mdast-util-mdx-jsx": "^3.0.0",
- "mdast-util-mdxjs-esm": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-mdx-expression": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
- "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==",
- "dev": true,
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "devlop": "^1.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-mdx-jsx": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz",
- "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==",
- "dev": true,
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "ccount": "^2.0.0",
- "devlop": "^1.1.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0",
- "parse-entities": "^4.0.0",
- "stringify-entities": "^4.0.0",
- "unist-util-stringify-position": "^4.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-mdxjs-esm": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
- "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
- "dev": true,
- "dependencies": {
- "@types/estree-jsx": "^1.0.0",
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "devlop": "^1.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-phrasing": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
- "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "unist-util-is": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-to-hast": {
- "version": "13.2.1",
- "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
- "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "@ungap/structured-clone": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "trim-lines": "^3.0.0",
- "unist-util-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-to-markdown": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
- "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "longest-streak": "^3.0.0",
- "mdast-util-phrasing": "^4.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "unist-util-visit": "^5.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-to-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
- "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
- "dependencies": {
- "@types/mdast": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdn-data": {
- "version": "2.27.1",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
- "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
- "license": "CC0-1.0"
- },
- "node_modules/media-typer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
- "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/merge-descriptors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
- "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/merge-options": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz",
- "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==",
- "license": "MIT",
- "dependencies": {
- "is-plain-obj": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/merge-options/node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "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==",
- "license": "MIT"
- },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -14918,711 +6136,16 @@
}
},
"node_modules/meshoptimizer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-1.0.1.tgz",
- "integrity": "sha512-Vix+QlA1YYT3FwmBBZ+49cE5y/b+pRrcXKqGpS5ouh33d3lSp2PoTpCw19E0cKDFWalembrHnIaZetf27a+W2g==",
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.22.0.tgz",
+ "integrity": "sha512-IebiK79sqIy+E4EgOr+CAw+Ke8hAspXKzBd0JdgEmPHiAwmvEj2S4h1rfvo+o/BnfEYd/jAOg5IeeIjzlzSnDg==",
"license": "MIT"
},
- "node_modules/micromark": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
- "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "@types/debug": "^4.0.0",
- "debug": "^4.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-core-commonmark": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-combine-extensions": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-core-commonmark": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
- "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-factory-destination": "^2.0.0",
- "micromark-factory-label": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-factory-title": "^2.0.0",
- "micromark-factory-whitespace": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-html-tag-name": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-extension-gfm": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
- "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
- "license": "MIT",
- "dependencies": {
- "micromark-extension-gfm-autolink-literal": "^2.0.0",
- "micromark-extension-gfm-footnote": "^2.0.0",
- "micromark-extension-gfm-strikethrough": "^2.0.0",
- "micromark-extension-gfm-table": "^2.0.0",
- "micromark-extension-gfm-tagfilter": "^2.0.0",
- "micromark-extension-gfm-task-list-item": "^2.0.0",
- "micromark-util-combine-extensions": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-autolink-literal": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
- "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
- "license": "MIT",
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-footnote": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
- "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
- "license": "MIT",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-core-commonmark": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-strikethrough": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
- "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
- "license": "MIT",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-table": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz",
- "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
- "license": "MIT",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-tagfilter": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
- "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
- "license": "MIT",
- "dependencies": {
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-task-list-item": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
- "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
- "license": "MIT",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-mdx-expression": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz",
- "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-factory-mdx-expression": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-events-to-acorn": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-extension-mdx-jsx": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz",
- "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0",
- "estree-util-is-identifier-name": "^3.0.0",
- "micromark-factory-mdx-expression": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-events-to-acorn": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-mdx-md": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz",
- "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==",
- "dev": true,
- "dependencies": {
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-mdxjs": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz",
- "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.0.0",
- "acorn-jsx": "^5.0.0",
- "micromark-extension-mdx-expression": "^3.0.0",
- "micromark-extension-mdx-jsx": "^3.0.0",
- "micromark-extension-mdx-md": "^2.0.0",
- "micromark-extension-mdxjs-esm": "^3.0.0",
- "micromark-util-combine-extensions": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-mdxjs-esm": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz",
- "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-core-commonmark": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-events-to-acorn": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unist-util-position-from-estree": "^2.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-factory-destination": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
- "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-label": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
- "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-mdx-expression": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz",
- "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "@types/estree": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-events-to-acorn": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unist-util-position-from-estree": "^2.0.0",
- "vfile-message": "^4.0.0"
- }
- },
- "node_modules/micromark-factory-space": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
- "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-title": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
- "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-whitespace": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
- "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-character": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
- "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-chunked": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
- "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-classify-character": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
- "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-combine-extensions": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
- "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-decode-numeric-character-reference": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
- "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-decode-string": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
- "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-encode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
- "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/micromark-util-events-to-acorn": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz",
- "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==",
- "dev": true,
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "@types/estree": "^1.0.0",
- "@types/unist": "^3.0.0",
- "devlop": "^1.0.0",
- "estree-util-visit": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "vfile-message": "^4.0.0"
- }
- },
- "node_modules/micromark-util-html-tag-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
- "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/micromark-util-normalize-identifier": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
- "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-resolve-all": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
- "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-sanitize-uri": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
- "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-subtokenize": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
- "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-symbol": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
- "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
- "node_modules/micromark-util-types": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
- "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ]
- },
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
"dependencies": {
"braces": "^3.0.3",
"picomatch": "^2.3.1"
@@ -15631,248 +6154,57 @@
"node": ">=8.6"
}
},
- "node_modules/micromatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/mime-db": {
- "version": "1.54.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
- "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
- "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
- "license": "MIT",
- "dependencies": {
- "mime-db": "^1.54.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/mimic-function": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
- "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "brace-expansion": "^1.1.7"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": "*"
}
},
"node_modules/minipass": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
- "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
- "license": "BlueOak-1.0.0",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "license": "ISC",
"engines": {
"node": ">=16 || 14 >=14.17"
}
},
- "node_modules/minizlib": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz",
- "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==",
- "license": "MIT",
- "dependencies": {
- "minipass": "^7.1.2"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/mlly": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz",
- "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==",
- "license": "MIT",
- "dependencies": {
- "acorn": "^8.16.0",
- "pathe": "^2.0.3",
- "pkg-types": "^1.3.1",
- "ufo": "^1.6.3"
- }
- },
- "node_modules/module-definition": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz",
- "integrity": "sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==",
- "license": "MIT",
- "dependencies": {
- "ast-module-types": "^6.0.1",
- "node-source-walk": "^7.0.1"
- },
- "bin": {
- "module-definition": "bin/cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/module-details-from-path": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz",
- "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==",
- "license": "MIT"
- },
- "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/mrmime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
- "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
"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=="
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/msw": {
- "version": "2.12.14",
- "resolved": "https://registry.npmjs.org/msw/-/msw-2.12.14.tgz",
- "integrity": "sha512-4KXa4nVBIBjbDbd7vfQNuQ25eFxug0aropCQFoI0JdOBuJWamkT1yLVIWReFI8SiTRc+H1hKzaNk+cLk2N9rtQ==",
- "hasInstallScript": true,
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
"license": "MIT",
"dependencies": {
- "@inquirer/confirm": "^5.0.0",
- "@mswjs/interceptors": "^0.41.2",
- "@open-draft/deferred-promise": "^2.2.0",
- "@types/statuses": "^2.0.6",
- "cookie": "^1.0.2",
- "graphql": "^16.12.0",
- "headers-polyfill": "^4.0.2",
- "is-node-process": "^1.2.0",
- "outvariant": "^1.4.3",
- "path-to-regexp": "^6.3.0",
- "picocolors": "^1.1.1",
- "rettime": "^0.10.1",
- "statuses": "^2.0.2",
- "strict-event-emitter": "^0.5.1",
- "tough-cookie": "^6.0.0",
- "type-fest": "^5.2.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/type-fest": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz",
- "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==",
- "license": "(MIT OR CC0-1.0)",
- "dependencies": {
- "tagged-tag": "^1.0.0"
- },
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mute-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz",
- "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==",
- "license": "ISC",
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
}
},
"node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -15884,216 +6216,25 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
- },
- "node_modules/negotiator": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
- "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/neotraverse": {
- "version": "0.6.18",
- "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz",
- "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/netlify-redirector": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/netlify-redirector/-/netlify-redirector-0.5.0.tgz",
- "integrity": "sha512-4zdzIP+6muqPCuE8avnrgDJ6KW/2+UpHTRcTbMXCIRxiRmyrX+IZ4WSJGZdHPWF3WmQpXpy603XxecZ9iygN7w==",
+ "dev": true,
"license": "MIT"
},
"node_modules/next-themes": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz",
- "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz",
+ "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==",
"license": "MIT",
"peerDependencies": {
- "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc"
+ "react": "^16.8 || ^17 || ^18",
+ "react-dom": "^16.8 || ^17 || ^18"
}
},
- "node_modules/nlcst-to-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
- "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/node-addon-api": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
- "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
- "license": "MIT"
- },
- "node_modules/node-domexception": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
- "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
- "deprecated": "Use your platform's native DOMException instead",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/jimmywarting"
- },
- {
- "type": "github",
- "url": "https://paypal.me/jimmywarting"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=10.5.0"
- }
- },
- "node_modules/node-exports-info": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz",
- "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==",
- "license": "MIT",
- "dependencies": {
- "array.prototype.flatmap": "^1.3.3",
- "es-errors": "^1.3.0",
- "object.entries": "^1.1.9",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/node-exports-info/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/node-fetch": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
- "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
- "license": "MIT",
- "dependencies": {
- "data-uri-to-buffer": "^4.0.0",
- "fetch-blob": "^3.1.4",
- "formdata-polyfill": "^4.0.10"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/node-fetch"
- }
- },
- "node_modules/node-fetch-native": {
- "version": "1.6.7",
- "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
- "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
- "license": "MIT"
- },
- "node_modules/node-forge": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz",
- "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==",
- "license": "(BSD-3-Clause OR GPL-2.0)",
- "engines": {
- "node": ">= 6.13.0"
- }
- },
- "node_modules/node-gyp-build": {
- "version": "4.8.4",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
- "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
- "license": "MIT",
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
- }
- },
- "node_modules/node-mock-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz",
- "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==",
- "license": "MIT"
- },
"node_modules/node-releases": {
- "version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="
- },
- "node_modules/node-source-walk": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-7.0.1.tgz",
- "integrity": "sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==",
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.26.7"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/node-stream-zip": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz",
- "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/antelle"
- }
- },
- "node_modules/nopt": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz",
- "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==",
- "license": "ISC",
- "dependencies": {
- "abbrev": "^3.0.0"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/normalize-package-data": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
- "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "hosted-git-info": "^7.0.0",
- "semver": "^7.3.5",
- "validate-npm-package-license": "^3.0.4"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
- }
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
+ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/normalize-path": {
"version": "3.0.0",
@@ -16104,44 +6245,14 @@
"node": ">=0.10.0"
}
},
- "node_modules/npm-run-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz",
- "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
- "license": "MIT",
- "dependencies": {
- "path-key": "^4.0.0",
- "unicorn-magic": "^0.3.0"
- },
- "engines": {
- "node": ">=18"
- },
- "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==",
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
+ "node": ">=0.10.0"
}
},
"node_modules/object-assign": {
@@ -16153,184 +6264,13 @@
"node": ">=0.10.0"
}
},
- "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==",
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
"license": "MIT",
"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==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object-treeify": {
- "version": "1.1.33",
- "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz",
- "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==",
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "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==",
- "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/object.entries": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
- "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/obug": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz",
- "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==",
- "funding": [
- "https://github.com/sponsors/sxzz",
- "https://opencollective.com/debug"
- ],
- "license": "MIT"
- },
- "node_modules/ofetch": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz",
- "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==",
- "license": "MIT",
- "dependencies": {
- "destr": "^2.0.5",
- "node-fetch-native": "^1.6.7",
- "ufo": "^1.6.1"
- }
- },
- "node_modules/ohash": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz",
- "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
- "license": "MIT"
- },
- "node_modules/omit.js": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz",
- "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==",
- "license": "MIT"
- },
- "node_modules/on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "license": "MIT",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/one-time": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
- "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
- "license": "MIT",
- "dependencies": {
- "fn.name": "1.x.x"
- }
- },
- "node_modules/onetime": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
- "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
- "license": "MIT",
- "dependencies": {
- "mimic-function": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/oniguruma-parser": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
- "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
- "license": "MIT"
- },
- "node_modules/oniguruma-to-es": {
- "version": "4.3.5",
- "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.5.tgz",
- "integrity": "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==",
- "license": "MIT",
- "dependencies": {
- "oniguruma-parser": "^0.12.1",
- "regex": "^6.1.0",
- "regex-recursion": "^6.0.2"
- }
- },
- "node_modules/open": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz",
- "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==",
- "license": "MIT",
- "dependencies": {
- "default-browser": "^5.4.0",
- "define-lazy-prop": "^3.0.0",
- "is-in-ssh": "^1.0.0",
- "is-inside-container": "^1.0.0",
- "powershell-utils": "^0.1.0",
- "wsl-utils": "^0.3.0"
- },
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 6"
}
},
"node_modules/optionator": {
@@ -16338,6 +6278,7 @@
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
@@ -16350,114 +6291,12 @@
"node": ">= 0.8.0"
}
},
- "node_modules/ora": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz",
- "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==",
- "license": "MIT",
- "dependencies": {
- "chalk": "^5.3.0",
- "cli-cursor": "^5.0.0",
- "cli-spinners": "^2.9.2",
- "is-interactive": "^2.0.0",
- "is-unicode-supported": "^2.0.0",
- "log-symbols": "^6.0.0",
- "stdin-discarder": "^0.2.2",
- "string-width": "^7.2.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "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==",
- "license": "MIT"
- },
- "node_modules/own-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
- "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.2.6",
- "object-keys": "^1.1.1",
- "safe-push-apply": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/p-event": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz",
- "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==",
- "license": "MIT",
- "dependencies": {
- "p-timeout": "^6.1.2"
- },
- "engines": {
- "node": ">=16.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-event/node_modules/p-timeout": {
- "version": "6.1.4",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz",
- "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==",
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/p-limit": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.0.tgz",
- "integrity": "sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==",
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^1.2.1"
- },
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate/node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
},
@@ -16468,11 +6307,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-locate/node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
"engines": {
"node": ">=10"
},
@@ -16480,63 +6323,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-map": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz",
- "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-queue": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz",
- "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==",
- "license": "MIT",
- "dependencies": {
- "eventemitter3": "^5.0.1",
- "p-timeout": "^7.0.0"
- },
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-retry": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz",
- "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==",
- "license": "MIT",
- "dependencies": {
- "@types/retry": "0.12.2",
- "is-network-error": "^1.0.0",
- "retry": "^0.13.1"
- },
- "engines": {
- "node": ">=16.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-timeout": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz",
- "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==",
- "license": "MIT",
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -16546,49 +6332,18 @@
"node": ">=6"
}
},
- "node_modules/p-wait-for": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-5.0.2.tgz",
- "integrity": "sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==",
- "license": "MIT",
- "dependencies": {
- "p-timeout": "^6.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-wait-for/node_modules/p-timeout": {
- "version": "6.1.4",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz",
- "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==",
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/package-json-from-dist": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
"license": "BlueOak-1.0.0"
},
- "node_modules/package-manager-detector": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz",
- "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==",
- "license": "MIT"
- },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
},
@@ -16596,161 +6351,20 @@
"node": ">=6"
}
},
- "node_modules/parse-entities": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
- "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "character-entities-legacy": "^3.0.0",
- "character-reference-invalid": "^2.0.0",
- "decode-named-character-reference": "^1.0.0",
- "is-alphanumerical": "^2.0.0",
- "is-decimal": "^2.0.0",
- "is-hexadecimal": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/parse-entities/node_modules/@types/unist": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
- "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
- "dev": true
- },
- "node_modules/parse-gitignore": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz",
- "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==",
- "license": "MIT",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/parse-imports": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz",
- "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==",
- "license": "Apache-2.0 AND MIT",
- "dependencies": {
- "es-module-lexer": "^1.5.3",
- "slashes": "^3.0.12"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/parse-imports/node_modules/es-module-lexer": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
- "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
- "license": "MIT"
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse-latin": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz",
- "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0",
- "@types/unist": "^3.0.0",
- "nlcst-to-string": "^4.0.0",
- "unist-util-modify-children": "^4.0.0",
- "unist-util-visit-children": "^3.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/parse-ms": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
- "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
- "license": "MIT",
- "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==",
- "license": "MIT",
- "dependencies": {
- "entities": "^6.0.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
- "license": "MIT"
- },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-expression-matcher": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.2.0.tgz",
- "integrity": "sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/NaturalIntelligence"
- }
- ],
"license": "MIT",
"engines": {
- "node": ">=14.0.0"
+ "node": ">=8"
}
},
"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==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -16762,111 +6376,55 @@
"license": "MIT"
},
"node_modules/path-scurry": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz",
- "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"license": "BlueOak-1.0.0",
"dependencies": {
- "lru-cache": "^11.0.0",
- "minipass": "^7.1.2"
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
- "node": "18 || 20 || >=22"
+ "node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/path-scurry/node_modules/lru-cache": {
- "version": "11.3.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz",
- "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": "20 || >=22"
- }
- },
- "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==",
- "license": "MIT"
- },
- "node_modules/path-type": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
- "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pathe": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
- "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
- "license": "MIT"
- },
- "node_modules/pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
- "license": "MIT"
- },
- "node_modules/pg-gateway": {
- "version": "0.3.0-beta.4",
- "resolved": "https://registry.npmjs.org/pg-gateway/-/pg-gateway-0.3.0-beta.4.tgz",
- "integrity": "sha512-CTjsM7Z+0Nx2/dyZ6r8zRsc3f9FScoD5UAOlfUx1Fdv/JOIWvRbF7gou6l6vP+uypXQVoYPgw8xZDXgMGvBa4Q==",
- "license": "MIT"
- },
- "node_modules/piccolore": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz",
- "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="
- },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
},
"node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/picoquery": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/picoquery/-/picoquery-2.5.0.tgz",
- "integrity": "sha512-j1kgOFxtaCyoFCkpoYG2Oj3OdGakadO7HZ7o5CqyRazlmBekKhbDoUnNnXASE07xSY4nDImWZkrZv7toSxMi/g==",
- "license": "MIT"
- },
- "node_modules/pkce-challenge": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz",
- "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==",
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"license": "MIT",
"engines": {
- "node": ">=16.20.0"
+ "node": ">=0.10.0"
}
},
- "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==",
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
"license": "MIT",
- "dependencies": {
- "confbox": "^0.1.8",
- "mlly": "^1.7.4",
- "pathe": "^2.0.1"
+ "engines": {
+ "node": ">= 6"
}
},
"node_modules/pngjs": {
@@ -16878,19 +6436,10 @@
"node": ">=10.13.0"
}
},
- "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==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/postcss": {
- "version": "8.5.10",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz",
- "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==",
+ "version": "8.4.47",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
+ "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
"funding": [
{
"type": "opencollective",
@@ -16907,18 +6456,115 @@
],
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.1.0",
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "license": "MIT",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
"node_modules/postcss-selector-parser": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
- "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -16931,24 +6577,7 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true
- },
- "node_modules/postcss-values-parser": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz",
- "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==",
- "license": "MPL-2.0",
- "dependencies": {
- "color-name": "^1.1.4",
- "is-url-superb": "^4.0.0",
- "quote-unquote": "^1.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "postcss": "^8.2.9"
- }
+ "license": "MIT"
},
"node_modules/potpack": {
"version": "1.0.2",
@@ -16956,219 +6585,16 @@
"integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==",
"license": "ISC"
},
- "node_modules/powershell-utils": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz",
- "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==",
- "license": "MIT",
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/precinct": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/precinct/-/precinct-12.3.0.tgz",
- "integrity": "sha512-xHjunvRKzrSOxXzMhNNkqZO4feTob3BO4A85uMpm3UWPC0+ZipVWZrSYbfKrjik8ynBjDrPtH+tdFFuKcuczrQ==",
- "license": "MIT",
- "dependencies": {
- "@dependents/detective-less": "^5.0.1",
- "commander": "^12.1.0",
- "detective-amd": "^6.0.1",
- "detective-cjs": "^6.1.0",
- "detective-es6": "^5.0.1",
- "detective-postcss": "^7.0.1",
- "detective-sass": "^6.0.1",
- "detective-scss": "^5.0.1",
- "detective-stylus": "^5.0.1",
- "detective-typescript": "^14.0.0",
- "detective-vue2": "^2.2.0",
- "module-definition": "^6.0.1",
- "node-source-walk": "^7.0.1",
- "postcss": "^8.5.9",
- "typescript": "^5.9.3"
- },
- "bin": {
- "precinct": "bin/cli.js"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/precinct/node_modules/commander": {
- "version": "12.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
- "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.8.0"
}
},
- "node_modules/prettier": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz",
- "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
- "dev": true,
- "bin": {
- "prettier": "bin/prettier.cjs"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/prettier-plugin-astro": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-0.14.1.tgz",
- "integrity": "sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw==",
- "dev": true,
- "dependencies": {
- "@astrojs/compiler": "^2.9.1",
- "prettier": "^3.0.0",
- "sass-formatter": "^0.7.6"
- },
- "engines": {
- "node": "^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/prettier-plugin-tailwindcss": {
- "version": "0.6.14",
- "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.14.tgz",
- "integrity": "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==",
- "dev": true,
- "engines": {
- "node": ">=14.21.3"
- },
- "peerDependencies": {
- "@ianvs/prettier-plugin-sort-imports": "*",
- "@prettier/plugin-hermes": "*",
- "@prettier/plugin-oxc": "*",
- "@prettier/plugin-pug": "*",
- "@shopify/prettier-plugin-liquid": "*",
- "@trivago/prettier-plugin-sort-imports": "*",
- "@zackad/prettier-plugin-twig": "*",
- "prettier": "^3.0",
- "prettier-plugin-astro": "*",
- "prettier-plugin-css-order": "*",
- "prettier-plugin-import-sort": "*",
- "prettier-plugin-jsdoc": "*",
- "prettier-plugin-marko": "*",
- "prettier-plugin-multiline-arrays": "*",
- "prettier-plugin-organize-attributes": "*",
- "prettier-plugin-organize-imports": "*",
- "prettier-plugin-sort-imports": "*",
- "prettier-plugin-style-order": "*",
- "prettier-plugin-svelte": "*"
- },
- "peerDependenciesMeta": {
- "@ianvs/prettier-plugin-sort-imports": {
- "optional": true
- },
- "@prettier/plugin-hermes": {
- "optional": true
- },
- "@prettier/plugin-oxc": {
- "optional": true
- },
- "@prettier/plugin-pug": {
- "optional": true
- },
- "@shopify/prettier-plugin-liquid": {
- "optional": true
- },
- "@trivago/prettier-plugin-sort-imports": {
- "optional": true
- },
- "@zackad/prettier-plugin-twig": {
- "optional": true
- },
- "prettier-plugin-astro": {
- "optional": true
- },
- "prettier-plugin-css-order": {
- "optional": true
- },
- "prettier-plugin-import-sort": {
- "optional": true
- },
- "prettier-plugin-jsdoc": {
- "optional": true
- },
- "prettier-plugin-marko": {
- "optional": true
- },
- "prettier-plugin-multiline-arrays": {
- "optional": true
- },
- "prettier-plugin-organize-attributes": {
- "optional": true
- },
- "prettier-plugin-organize-imports": {
- "optional": true
- },
- "prettier-plugin-sort-imports": {
- "optional": true
- },
- "prettier-plugin-style-order": {
- "optional": true
- },
- "prettier-plugin-svelte": {
- "optional": true
- }
- }
- },
- "node_modules/pretty-ms": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz",
- "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==",
- "license": "MIT",
- "dependencies": {
- "parse-ms": "^4.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/prismjs": {
- "version": "1.30.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
- "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "license": "MIT"
- },
"node_modules/promise-worker-transferable": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/promise-worker-transferable/-/promise-worker-transferable-1.0.4.tgz",
@@ -17179,60 +6605,29 @@
"lie": "^3.0.2"
}
},
- "node_modules/promise-worker-transferable/node_modules/is-promise": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
- "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==",
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
- "node_modules/prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/property-information": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
- "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "license": "MIT",
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/pump": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz",
- "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==",
- "license": "MIT",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"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"
}
@@ -17254,166 +6649,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/qrcode/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==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qrcode/node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/qrcode/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==",
- "license": "MIT"
- },
- "node_modules/qrcode/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qrcode/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qrcode/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/qrcode/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qrcode/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==",
- "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/qrcode/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==",
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qrcode/node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "license": "ISC"
- },
- "node_modules/qrcode/node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "license": "MIT",
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qrcode/node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "license": "ISC",
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.15.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
- "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -17431,309 +6666,125 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
- },
- "node_modules/quote-unquote": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz",
- "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==",
+ ],
"license": "MIT"
},
- "node_modules/radix-ui": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/radix-ui/-/radix-ui-1.4.3.tgz",
- "integrity": "sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-accessible-icon": "1.1.7",
- "@radix-ui/react-accordion": "1.2.12",
- "@radix-ui/react-alert-dialog": "1.1.15",
- "@radix-ui/react-arrow": "1.1.7",
- "@radix-ui/react-aspect-ratio": "1.1.7",
- "@radix-ui/react-avatar": "1.1.10",
- "@radix-ui/react-checkbox": "1.3.3",
- "@radix-ui/react-collapsible": "1.1.12",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-context-menu": "2.2.16",
- "@radix-ui/react-dialog": "1.1.15",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-dropdown-menu": "2.1.16",
- "@radix-ui/react-focus-guards": "1.1.3",
- "@radix-ui/react-focus-scope": "1.1.7",
- "@radix-ui/react-form": "0.1.8",
- "@radix-ui/react-hover-card": "1.1.15",
- "@radix-ui/react-label": "2.1.7",
- "@radix-ui/react-menu": "2.1.16",
- "@radix-ui/react-menubar": "1.1.16",
- "@radix-ui/react-navigation-menu": "1.2.14",
- "@radix-ui/react-one-time-password-field": "0.1.8",
- "@radix-ui/react-password-toggle-field": "0.1.3",
- "@radix-ui/react-popover": "1.1.15",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-progress": "1.1.7",
- "@radix-ui/react-radio-group": "1.3.8",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-scroll-area": "1.2.10",
- "@radix-ui/react-select": "2.2.6",
- "@radix-ui/react-separator": "1.1.7",
- "@radix-ui/react-slider": "1.3.6",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-switch": "1.2.6",
- "@radix-ui/react-tabs": "1.1.13",
- "@radix-ui/react-toast": "1.2.15",
- "@radix-ui/react-toggle": "1.1.10",
- "@radix-ui/react-toggle-group": "1.1.11",
- "@radix-ui/react-toolbar": "1.1.11",
- "@radix-ui/react-tooltip": "1.2.8",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-effect-event": "0.0.2",
- "@radix-ui/react-use-escape-keydown": "1.1.1",
- "@radix-ui/react-use-is-hydrated": "0.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1",
- "@radix-ui/react-visually-hidden": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/radix-ui/node_modules/@radix-ui/react-avatar": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz",
- "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-is-hydrated": "0.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/radix-ui/node_modules/@radix-ui/react-label": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz",
- "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/radix-ui/node_modules/@radix-ui/react-separator": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz",
- "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/radix-ui/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/radix3": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz",
- "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
- "license": "MIT"
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/raw-body": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",
- "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
- "license": "MIT",
- "dependencies": {
- "bytes": "~3.1.2",
- "http-errors": "~2.0.1",
- "iconv-lite": "~0.7.0",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/react": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
- "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
+ "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-day-picker": {
- "version": "9.14.0",
- "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.14.0.tgz",
- "integrity": "sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==",
+ "node_modules/react-composer": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/react-composer/-/react-composer-5.0.3.tgz",
+ "integrity": "sha512-1uWd07EME6XZvMfapwZmc7NgCZqDemcvicRi3wMJzXsQLvZ3L7fTHVyPy1bZdnWXM4iPjYuNE+uJ41MLKeTtnA==",
"license": "MIT",
"dependencies": {
- "@date-fns/tz": "^1.4.1",
- "@tabby_ai/hijri-converter": "1.0.5",
- "date-fns": "^4.1.0",
- "date-fns-jalali": "4.1.0-0"
- },
- "engines": {
- "node": ">=18"
+ "prop-types": "^15.6.0"
},
+ "peerDependencies": {
+ "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-day-picker": {
+ "version": "8.10.1",
+ "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz",
+ "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==",
+ "license": "MIT",
"funding": {
"type": "individual",
"url": "https://github.com/sponsors/gpbl"
},
"peerDependencies": {
- "react": ">=16.8.0"
+ "date-fns": "^2.28.0 || ^3.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/react-dom": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
- "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
+ "version": "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": {
- "scheduler": "^0.27.0"
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
},
"peerDependencies": {
- "react": "^19.2.4"
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-hook-form": {
+ "version": "7.53.1",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.1.tgz",
+ "integrity": "sha512-6aiQeBda4zjcuaugWvim9WsGqisoUk+etmFEsSUMm451/Ic8L/UAb7sRtMj3V+Hdzm6mMjU1VhiSzYUZeBm0Vg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/react-hook-form"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17 || ^18 || ^19"
}
},
"node_modules/react-is": {
- "version": "19.2.4",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.4.tgz",
- "integrity": "sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA==",
- "license": "MIT",
- "peer": true
+ "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==",
+ "license": "MIT"
},
- "node_modules/react-redux": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
- "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
+ "node_modules/react-reconciler": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.27.0.tgz",
+ "integrity": "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==",
"license": "MIT",
"dependencies": {
- "@types/use-sync-external-store": "^0.0.6",
- "use-sync-external-store": "^1.4.0"
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.21.0"
},
- "peerDependencies": {
- "@types/react": "^18.2.25 || ^19",
- "react": "^18.0 || ^19",
- "redux": "^5.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "redux": {
- "optional": true
- }
- }
- },
- "node_modules/react-refresh": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
- "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==",
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0"
+ }
+ },
+ "node_modules/react-reconciler/node_modules/scheduler": {
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz",
+ "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
}
},
"node_modules/react-remove-scroll": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz",
- "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz",
+ "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==",
+ "license": "MIT",
"dependencies": {
- "react-remove-scroll-bar": "^2.3.7",
- "react-style-singleton": "^2.2.3",
+ "react-remove-scroll-bar": "^2.3.6",
+ "react-style-singleton": "^2.2.1",
"tslib": "^2.1.0",
- "use-callback-ref": "^1.3.3",
- "use-sidecar": "^1.1.3"
+ "use-callback-ref": "^1.3.0",
+ "use-sidecar": "^1.1.2"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -17742,19 +6793,20 @@
}
},
"node_modules/react-remove-scroll-bar": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
- "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
+ "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
+ "license": "MIT",
"dependencies": {
- "react-style-singleton": "^2.2.2",
+ "react-style-singleton": "^2.2.1",
"tslib": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -17763,29 +6815,78 @@
}
},
"node_modules/react-resizable-panels": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-4.8.0.tgz",
- "integrity": "sha512-2uEABkewb3ky/ZgIlAUxWa1W/LjsK494fdV1QsXxst7CDRHCzo7h22tWWu3NNaBjmiuriOCt3CvhipnaYcpoIw==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.5.tgz",
+ "integrity": "sha512-JMSe18rYupmx+dzYcdfWYZ93ZdxqQmLum3xWDVSUMI0UVwl9bB9gUaFmPbxYoO4G+m5sqgdXQCYQxnOysytfnw==",
"license": "MIT",
"peerDependencies": {
- "react": "^18.0.0 || ^19.0.0",
- "react-dom": "^18.0.0 || ^19.0.0"
+ "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc",
+ "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/react-router": {
+ "version": "6.27.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz",
+ "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.20.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.27.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz",
+ "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.20.0",
+ "react-router": "6.27.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
+ "node_modules/react-smooth": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz",
+ "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-equals": "^5.0.1",
+ "prop-types": "^15.8.1",
+ "react-transition-group": "^4.4.5"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/react-style-singleton": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
- "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
+ "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "license": "MIT",
"dependencies": {
"get-nonce": "^1.0.0",
+ "invariant": "^2.2.4",
"tslib": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -17793,6 +6894,22 @@
}
}
},
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
"node_modules/react-use-measure": {
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.7.tgz",
@@ -17808,499 +6925,59 @@
}
}
},
- "node_modules/read-package-up": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
- "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
"license": "MIT",
"dependencies": {
- "find-up-simple": "^1.0.0",
- "read-pkg": "^9.0.0",
- "type-fest": "^4.6.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
- "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
- "license": "MIT",
- "dependencies": {
- "@types/normalize-package-data": "^2.4.3",
- "normalize-package-data": "^6.0.0",
- "parse-json": "^8.0.0",
- "type-fest": "^4.6.0",
- "unicorn-magic": "^0.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg/node_modules/parse-json": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
- "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.26.2",
- "index-to-position": "^1.1.0",
- "type-fest": "^4.39.1"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg/node_modules/unicorn-magic": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
- "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/readable-stream": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
- "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
- "license": "MIT",
- "dependencies": {
- "abort-controller": "^3.0.0",
- "buffer": "^6.0.3",
- "events": "^3.3.0",
- "process": "^0.11.10",
- "string_decoder": "^1.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/readdir-glob": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
- "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
- "license": "Apache-2.0",
- "dependencies": {
- "minimatch": "^5.1.0"
- }
- },
- "node_modules/readdir-glob/node_modules/minimatch": {
- "version": "5.1.9",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz",
- "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==",
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
+ "pify": "^2.3.0"
}
},
"node_modules/readdirp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz",
- "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 20.19.0"
- },
- "funding": {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/recast": {
- "version": "0.23.11",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz",
- "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"license": "MIT",
"dependencies": {
- "ast-types": "^0.16.1",
- "esprima": "~4.0.0",
- "source-map": "~0.6.1",
- "tiny-invariant": "^1.3.3",
- "tslib": "^2.0.1"
+ "picomatch": "^2.2.1"
},
"engines": {
- "node": ">= 4"
- }
- },
- "node_modules/recast/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
+ "node": ">=8.10.0"
}
},
"node_modules/recharts": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.8.0.tgz",
- "integrity": "sha512-Z/m38DX3L73ExO4Tpc9/iZWHmHnlzWG4njQbxsF5aSjwqmHNDDIm0rdEBArkwsBvR8U6EirlEHiQNYWCVh9sGQ==",
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.13.0.tgz",
+ "integrity": "sha512-sbfxjWQ+oLWSZEWmvbq/DFVdeRLqqA6d0CDjKx2PkxVVdoXo16jvENCE+u/x7HxOO+/fwx//nYRwb8p8X6s/lQ==",
"license": "MIT",
- "workspaces": [
- "www"
- ],
"dependencies": {
- "@reduxjs/toolkit": "^1.9.0 || 2.x.x",
- "clsx": "^2.1.1",
- "decimal.js-light": "^2.5.1",
- "es-toolkit": "^1.39.3",
- "eventemitter3": "^5.0.1",
- "immer": "^10.1.1",
- "react-redux": "8.x.x || 9.x.x",
- "reselect": "5.1.1",
- "tiny-invariant": "^1.3.3",
- "use-sync-external-store": "^1.2.2",
- "victory-vendor": "^37.0.2"
+ "clsx": "^2.0.0",
+ "eventemitter3": "^4.0.1",
+ "lodash": "^4.17.21",
+ "react-is": "^18.3.1",
+ "react-smooth": "^4.0.0",
+ "recharts-scale": "^0.4.4",
+ "tiny-invariant": "^1.3.1",
+ "victory-vendor": "^36.6.8"
},
"engines": {
- "node": ">=18"
+ "node": ">=14"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
- "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
- "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/recma-build-jsx": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz",
- "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-util-build-jsx": "^3.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/recma-jsx": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz",
- "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==",
- "dev": true,
- "dependencies": {
- "acorn-jsx": "^5.0.0",
- "estree-util-to-js": "^2.0.0",
- "recma-parse": "^1.0.0",
- "recma-stringify": "^1.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- },
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/recma-parse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz",
- "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "esast-util-from-js": "^2.0.0",
- "unified": "^11.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/recma-stringify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz",
- "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-util-to-js": "^2.0.0",
- "unified": "^11.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/redux": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
- "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
- "license": "MIT"
- },
- "node_modules/redux-thunk": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
- "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==",
- "license": "MIT",
- "peerDependencies": {
- "redux": "^5.0.0"
- }
- },
- "node_modules/reflect.getprototypeof": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
- "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
+ "node_modules/recharts-scale": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
+ "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
"license": "MIT",
"dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.7",
- "get-proto": "^1.0.1",
- "which-builtin-type": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "decimal.js-light": "^2.4.1"
}
},
- "node_modules/regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz",
- "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==",
- "license": "MIT",
- "dependencies": {
- "regex-utilities": "^2.3.0"
- }
- },
- "node_modules/regex-recursion": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
- "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
- "license": "MIT",
- "dependencies": {
- "regex-utilities": "^2.3.0"
- }
- },
- "node_modules/regex-utilities": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
- "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
- "license": "MIT"
- },
- "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==",
- "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/rehype": {
- "version": "13.0.2",
- "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz",
- "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "rehype-parse": "^9.0.0",
- "rehype-stringify": "^10.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-parse": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz",
- "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "hast-util-from-html": "^2.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-raw": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
- "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "hast-util-raw": "^9.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-recma": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz",
- "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "@types/hast": "^3.0.0",
- "hast-util-to-estree": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-stringify": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz",
- "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "hast-util-to-html": "^9.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-gfm": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz",
- "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-gfm": "^3.0.0",
- "micromark-extension-gfm": "^3.0.0",
- "remark-parse": "^11.0.0",
- "remark-stringify": "^11.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-mdx": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz",
- "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==",
- "dev": true,
- "dependencies": {
- "mdast-util-mdx": "^3.0.0",
- "micromark-extension-mdxjs": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-parse": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
- "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-rehype": {
- "version": "11.1.2",
- "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
- "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "mdast-util-to-hast": "^13.0.0",
- "unified": "^11.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-smartypants": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz",
- "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==",
- "license": "MIT",
- "dependencies": {
- "retext": "^9.0.0",
- "retext-smartypants": "^6.0.0",
- "unified": "^11.0.4",
- "unist-util-visit": "^5.0.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/remark-stringify": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
- "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-to-markdown": "^2.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
- "license": "ISC"
- },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -18319,78 +6996,25 @@
"node": ">=0.10.0"
}
},
- "node_modules/require-in-the-middle": {
- "version": "7.5.2",
- "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz",
- "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.5",
- "module-details-from-path": "^1.0.3",
- "resolve": "^1.22.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/require-in-the-middle/node_modules/resolve": {
- "version": "1.22.12",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
- "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "is-core-module": "^2.16.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"license": "ISC"
},
- "node_modules/require-package-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz",
- "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==",
- "license": "MIT"
- },
- "node_modules/reselect": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
- "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
- "license": "MIT"
- },
"node_modules/resolve": {
- "version": "2.0.0-next.6",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz",
- "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==",
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"license": "MIT",
"dependencies": {
- "es-errors": "^1.3.0",
- "is-core-module": "^2.16.1",
- "node-exports-info": "^1.6.0",
- "object-keys": "^1.1.1",
+ "is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
- "engines": {
- "node": ">= 0.4"
- },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -18399,117 +7023,30 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
- "node_modules/restore-cursor": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
- "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
- "license": "MIT",
- "dependencies": {
- "onetime": "^7.0.0",
- "signal-exit": "^4.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/retext": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz",
- "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0",
- "retext-latin": "^4.0.0",
- "retext-stringify": "^4.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/retext-latin": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz",
- "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0",
- "parse-latin": "^7.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/retext-smartypants": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz",
- "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0",
- "nlcst-to-string": "^4.0.0",
- "unist-util-visit": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/retext-stringify": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz",
- "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0",
- "nlcst-to-string": "^4.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/retry": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
- "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/rettime": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.10.1.tgz",
- "integrity": "sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==",
- "license": "MIT"
- },
"node_modules/reusify": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
- "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "license": "MIT",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
}
},
"node_modules/rollup": {
- "version": "4.57.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz",
- "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==",
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz",
+ "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/estree": "1.0.8"
+ "@types/estree": "1.0.6"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -18519,72 +7056,25 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.57.1",
- "@rollup/rollup-android-arm64": "4.57.1",
- "@rollup/rollup-darwin-arm64": "4.57.1",
- "@rollup/rollup-darwin-x64": "4.57.1",
- "@rollup/rollup-freebsd-arm64": "4.57.1",
- "@rollup/rollup-freebsd-x64": "4.57.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.57.1",
- "@rollup/rollup-linux-arm-musleabihf": "4.57.1",
- "@rollup/rollup-linux-arm64-gnu": "4.57.1",
- "@rollup/rollup-linux-arm64-musl": "4.57.1",
- "@rollup/rollup-linux-loong64-gnu": "4.57.1",
- "@rollup/rollup-linux-loong64-musl": "4.57.1",
- "@rollup/rollup-linux-ppc64-gnu": "4.57.1",
- "@rollup/rollup-linux-ppc64-musl": "4.57.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.57.1",
- "@rollup/rollup-linux-riscv64-musl": "4.57.1",
- "@rollup/rollup-linux-s390x-gnu": "4.57.1",
- "@rollup/rollup-linux-x64-gnu": "4.57.1",
- "@rollup/rollup-linux-x64-musl": "4.57.1",
- "@rollup/rollup-openbsd-x64": "4.57.1",
- "@rollup/rollup-openharmony-arm64": "4.57.1",
- "@rollup/rollup-win32-arm64-msvc": "4.57.1",
- "@rollup/rollup-win32-ia32-msvc": "4.57.1",
- "@rollup/rollup-win32-x64-gnu": "4.57.1",
- "@rollup/rollup-win32-x64-msvc": "4.57.1",
+ "@rollup/rollup-android-arm-eabi": "4.24.0",
+ "@rollup/rollup-android-arm64": "4.24.0",
+ "@rollup/rollup-darwin-arm64": "4.24.0",
+ "@rollup/rollup-darwin-x64": "4.24.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.24.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.24.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.24.0",
+ "@rollup/rollup-linux-arm64-musl": "4.24.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.24.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.24.0",
+ "@rollup/rollup-linux-x64-gnu": "4.24.0",
+ "@rollup/rollup-linux-x64-musl": "4.24.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.24.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.24.0",
+ "@rollup/rollup-win32-x64-msvc": "4.24.0",
"fsevents": "~2.3.2"
}
},
- "node_modules/router": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
- "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.4.0",
- "depd": "^2.0.0",
- "is-promise": "^4.0.0",
- "parseurl": "^1.3.3",
- "path-to-regexp": "^8.0.0"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/router/node_modules/path-to-regexp": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.0.tgz",
- "integrity": "sha512-PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYypg==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/run-applescript": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz",
- "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -18603,142 +7093,26 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
},
- "node_modules/s.color": {
- "version": "0.0.15",
- "resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz",
- "integrity": "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==",
- "dev": true
- },
- "node_modules/safe-array-concat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
- "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "has-symbols": "^1.1.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/safe-push-apply": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
- "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "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==",
- "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/safe-stable-stringify": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
- "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "license": "MIT"
- },
- "node_modules/sass-formatter": {
- "version": "0.7.9",
- "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.9.tgz",
- "integrity": "sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==",
- "dev": true,
- "dependencies": {
- "suf-log": "^2.5.3"
- }
- },
- "node_modules/sax": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz",
- "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=11.0.0"
- }
- },
"node_modules/scheduler": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
- "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="
- },
- "node_modules/section-matter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
- "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
"dependencies": {
- "extend-shallow": "^2.0.1",
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=4"
+ "loose-envify": "^1.1.0"
}
},
"node_modules/semver": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
- "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -18746,233 +7120,17 @@
"node": ">=10"
}
},
- "node_modules/send": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz",
- "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.4.3",
- "encodeurl": "^2.0.0",
- "escape-html": "^1.0.3",
- "etag": "^1.8.1",
- "fresh": "^2.0.0",
- "http-errors": "^2.0.1",
- "mime-types": "^3.0.2",
- "ms": "^2.1.3",
- "on-finished": "^2.4.1",
- "range-parser": "^1.2.1",
- "statuses": "^2.0.2"
- },
- "engines": {
- "node": ">= 18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/serve-static": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz",
- "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==",
- "license": "MIT",
- "dependencies": {
- "encodeurl": "^2.0.0",
- "escape-html": "^1.0.3",
- "parseurl": "^1.3.3",
- "send": "^1.2.0"
- },
- "engines": {
- "node": ">= 18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
"license": "ISC"
},
- "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==",
- "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==",
- "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/set-proto": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
- "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "license": "ISC"
- },
- "node_modules/shadcn": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/shadcn/-/shadcn-4.1.1.tgz",
- "integrity": "sha512-nBj+7LYC9kzV9v9QmRPpoOhfW4KctJVQejywdAt/K+K+z4RYlJOcO2a4AaF7elrRWkfCbgXeGK02liV0KB9HvQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.28.0",
- "@babel/parser": "^7.28.0",
- "@babel/plugin-transform-typescript": "^7.28.0",
- "@babel/preset-typescript": "^7.27.1",
- "@dotenvx/dotenvx": "^1.48.4",
- "@modelcontextprotocol/sdk": "^1.26.0",
- "@types/validate-npm-package-name": "^4.0.2",
- "browserslist": "^4.26.2",
- "commander": "^14.0.0",
- "cosmiconfig": "^9.0.0",
- "dedent": "^1.6.0",
- "deepmerge": "^4.3.1",
- "diff": "^8.0.2",
- "execa": "^9.6.0",
- "fast-glob": "^3.3.3",
- "fs-extra": "^11.3.1",
- "fuzzysort": "^3.1.0",
- "https-proxy-agent": "^7.0.6",
- "kleur": "^4.1.5",
- "msw": "^2.10.4",
- "node-fetch": "^3.3.2",
- "open": "^11.0.0",
- "ora": "^8.2.0",
- "postcss": "^8.5.6",
- "postcss-selector-parser": "^7.1.0",
- "prompts": "^2.4.2",
- "recast": "^0.23.11",
- "stringify-object": "^5.0.0",
- "tailwind-merge": "^3.0.1",
- "ts-morph": "^26.0.0",
- "tsconfig-paths": "^4.2.0",
- "validate-npm-package-name": "^7.0.1",
- "zod": "^3.24.1",
- "zod-to-json-schema": "^3.24.6"
- },
- "bin": {
- "shadcn": "dist/index.js"
- }
- },
- "node_modules/shadcn/node_modules/commander": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
- "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==",
- "license": "MIT",
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/shadcn/node_modules/kleur": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
- "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/shadcn/node_modules/postcss-selector-parser": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz",
- "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==",
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/sharp": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz",
- "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==",
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@img/colour": "^1.0.0",
- "detect-libc": "^2.1.2",
- "semver": "^7.7.3"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.34.5",
- "@img/sharp-darwin-x64": "0.34.5",
- "@img/sharp-libvips-darwin-arm64": "1.2.4",
- "@img/sharp-libvips-darwin-x64": "1.2.4",
- "@img/sharp-libvips-linux-arm": "1.2.4",
- "@img/sharp-libvips-linux-arm64": "1.2.4",
- "@img/sharp-libvips-linux-ppc64": "1.2.4",
- "@img/sharp-libvips-linux-riscv64": "1.2.4",
- "@img/sharp-libvips-linux-s390x": "1.2.4",
- "@img/sharp-libvips-linux-x64": "1.2.4",
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.4",
- "@img/sharp-libvips-linuxmusl-x64": "1.2.4",
- "@img/sharp-linux-arm": "0.34.5",
- "@img/sharp-linux-arm64": "0.34.5",
- "@img/sharp-linux-ppc64": "0.34.5",
- "@img/sharp-linux-riscv64": "0.34.5",
- "@img/sharp-linux-s390x": "0.34.5",
- "@img/sharp-linux-x64": "0.34.5",
- "@img/sharp-linuxmusl-arm64": "0.34.5",
- "@img/sharp-linuxmusl-x64": "0.34.5",
- "@img/sharp-wasm32": "0.34.5",
- "@img/sharp-win32-arm64": "0.34.5",
- "@img/sharp-win32-ia32": "0.34.5",
- "@img/sharp-win32-x64": "0.34.5"
- }
- },
"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==",
+ "license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -18984,101 +7142,11 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/shiki": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.0.2.tgz",
- "integrity": "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/core": "4.0.2",
- "@shikijs/engine-javascript": "4.0.2",
- "@shikijs/engine-oniguruma": "4.0.2",
- "@shikijs/langs": "4.0.2",
- "@shikijs/themes": "4.0.2",
- "@shikijs/types": "4.0.2",
- "@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
- "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "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.0",
- "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
- "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "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==",
- "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==",
- "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/signal-exit": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
@@ -19091,160 +7159,25 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
- },
- "node_modules/sitemap": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz",
- "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "^24.9.2",
- "@types/sax": "^1.2.1",
- "arg": "^5.0.0",
- "sax": "^1.4.1"
- },
- "bin": {
- "sitemap": "dist/esm/cli.js"
- },
- "engines": {
- "node": ">=20.19.5",
- "npm": ">=10.8.2"
- }
- },
- "node_modules/sitemap/node_modules/@types/node": {
- "version": "24.12.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz",
- "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~7.16.0"
- }
- },
- "node_modules/slashes": {
- "version": "3.0.12",
- "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz",
- "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==",
- "license": "ISC"
- },
- "node_modules/smol-toml": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz",
- "integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">= 18"
- },
- "funding": {
- "url": "https://github.com/sponsors/cyyynthia"
- }
- },
"node_modules/sonner": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz",
- "integrity": "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.5.0.tgz",
+ "integrity": "sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==",
"license": "MIT",
"peerDependencies": {
- "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc",
- "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- }
- },
- "node_modules/source-map": {
- "version": "0.7.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
- "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
- "dev": true,
- "engines": {
- "node": ">= 12"
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
}
},
"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==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "license": "MIT",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/source-map-support/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/space-separated-tokens": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
- "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/spdx-correct": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
- "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
- "license": "Apache-2.0",
- "dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-exceptions": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
- "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
- "license": "CC-BY-3.0"
- },
- "node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "license": "MIT",
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-license-ids": {
- "version": "3.0.23",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz",
- "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==",
- "license": "CC0-1.0"
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
- },
- "node_modules/stack-trace": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
"node_modules/stats-gl": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/stats-gl/-/stats-gl-2.4.2.tgz",
@@ -19271,89 +7204,18 @@
"integrity": "sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw==",
"license": "MIT"
},
- "node_modules/statuses": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
- "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/std-env": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz",
- "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==",
- "license": "MIT"
- },
- "node_modules/stdin-discarder": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
- "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "internal-slot": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/stream-replace-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz",
- "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==",
- "dev": true
- },
- "node_modules/streamx": {
- "version": "2.25.0",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz",
- "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==",
- "license": "MIT",
- "dependencies": {
- "events-universal": "^1.0.0",
- "fast-fifo": "^1.3.2",
- "text-decoder": "^1.1.0"
- }
- },
- "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==",
- "license": "MIT"
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
"node_modules/string-width": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
- "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "license": "MIT",
"dependencies": {
- "emoji-regex": "^10.3.0",
- "get-east-asian-width": "^1.0.0",
- "strip-ansi": "^7.1.0"
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
},
"engines": {
- "node": ">=18"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -19401,96 +7263,11 @@
"node": ">=8"
}
},
- "node_modules/string.prototype.trim": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
- "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-data-property": "^1.1.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-object-atoms": "^1.0.0",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
- "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
- "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/stringify-entities": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
- "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
- "dependencies": {
- "character-entities-html4": "^2.0.0",
- "character-entities-legacy": "^3.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/stringify-object": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-5.0.0.tgz",
- "integrity": "sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "get-own-enumerable-keys": "^1.0.0",
- "is-obj": "^3.0.0",
- "is-regexp": "^3.1.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/yeoman/stringify-object?sponsor=1"
- }
- },
"node_modules/strip-ansi": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
- "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -19523,40 +7300,12 @@
"node": ">=8"
}
},
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/strip-bom-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
- "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
- "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -19564,49 +7313,34 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/strnum": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.2.tgz",
- "integrity": "sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/NaturalIntelligence"
- }
- ],
- "license": "MIT"
- },
- "node_modules/style-to-js": {
- "version": "1.1.21",
- "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz",
- "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==",
- "dev": true,
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "license": "MIT",
"dependencies": {
- "style-to-object": "1.0.14"
- }
- },
- "node_modules/style-to-object": {
- "version": "1.0.14",
- "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz",
- "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==",
- "dev": true,
- "dependencies": {
- "inline-style-parser": "0.2.7"
- }
- },
- "node_modules/suf-log": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz",
- "integrity": "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==",
- "dev": true,
- "dependencies": {
- "s.color": "0.0.15"
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
}
},
"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"
},
@@ -19635,62 +7369,10 @@
"react": ">=17.0"
}
},
- "node_modules/svgo": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz",
- "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==",
- "license": "MIT",
- "dependencies": {
- "commander": "^11.1.0",
- "css-select": "^5.1.0",
- "css-tree": "^3.0.1",
- "css-what": "^6.1.0",
- "csso": "^5.0.5",
- "picocolors": "^1.1.1",
- "sax": "^1.5.0"
- },
- "bin": {
- "svgo": "bin/svgo.js"
- },
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/svgo"
- }
- },
- "node_modules/synckit": {
- "version": "0.11.12",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz",
- "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==",
- "dev": true,
- "dependencies": {
- "@pkgr/core": "^0.2.9"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/synckit"
- }
- },
- "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==",
- "license": "MIT",
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/tailwind-merge": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz",
- "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==",
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz",
+ "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==",
"license": "MIT",
"funding": {
"type": "github",
@@ -19698,103 +7380,99 @@
}
},
"node_modules/tailwindcss": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz",
- "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="
+ "version": "3.4.17",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
+ "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
+ "license": "MIT",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.6.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.2",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.6",
+ "lilconfig": "^3.1.3",
+ "micromatch": "^4.0.8",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.47",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.2",
+ "postcss-nested": "^6.2.0",
+ "postcss-selector-parser": "^6.1.2",
+ "resolve": "^1.22.8",
+ "sucrase": "^3.35.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
},
- "node_modules/tapable": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
- "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
+ "node_modules/tailwindcss-animate": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
+ "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/tar": {
- "version": "7.5.13",
- "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.13.tgz",
- "integrity": "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==",
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "@isaacs/fs-minipass": "^4.0.0",
- "chownr": "^3.0.0",
- "minipass": "^7.1.2",
- "minizlib": "^3.1.0",
- "yallist": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/tar-stream": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz",
- "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==",
- "license": "MIT",
- "dependencies": {
- "b4a": "^1.6.4",
- "bare-fs": "^4.5.5",
- "fast-fifo": "^1.2.0",
- "streamx": "^2.15.0"
- }
- },
- "node_modules/tar/node_modules/yallist": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
- "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/teex": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
- "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
- "license": "MIT",
- "dependencies": {
- "streamx": "^2.12.5"
- }
- },
- "node_modules/text-decoder": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz",
- "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "b4a": "^1.6.4"
- }
- },
- "node_modules/text-hex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
- "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==",
"license": "MIT"
},
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/three": {
- "version": "0.183.2",
- "resolved": "https://registry.npmjs.org/three/-/three-0.183.2.tgz",
- "integrity": "sha512-di3BsL2FEQ1PA7Hcvn4fyJOlxRRgFYBpMTcyOgkwJIaDOdJMebEFPA+t98EvjuljDx4hNulAGwF6KIjtwI5jgQ==",
+ "version": "0.160.1",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.160.1.tgz",
+ "integrity": "sha512-Bgl2wPJypDOZ1stAxwfWAcJ0WQf7QzlptsxkjYiURPz+n5k4RBDLsq+6f9Y75TYxn6aHLcWz+JNmwTOXWrQTBQ==",
"license": "MIT"
},
"node_modules/three-mesh-bvh": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/three-mesh-bvh/-/three-mesh-bvh-0.8.3.tgz",
- "integrity": "sha512-4G5lBaF+g2auKX3P0yqx+MJC6oVt6sB5k+CchS6Ob0qvH0YIhuUk1eYr7ktsIpY+albCqE80/FVQGV190PmiAg==",
+ "version": "0.7.8",
+ "resolved": "https://registry.npmjs.org/three-mesh-bvh/-/three-mesh-bvh-0.7.8.tgz",
+ "integrity": "sha512-BGEZTOIC14U0XIRw3tO4jY7IjP7n7v24nv9JXS1CyeVRWOCkcOMhRnmENUjuV39gktAw4Ofhr0OvIAiTspQrrw==",
+ "deprecated": "Deprecated due to three.js version incompatibility. Please use v0.8.0, instead.",
"license": "MIT",
"peerDependencies": {
- "three": ">= 0.159.0"
+ "three": ">= 0.151.0"
}
},
"node_modules/three-stdlib": {
- "version": "2.36.1",
- "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.36.1.tgz",
- "integrity": "sha512-XyGQrFmNQ5O/IoKm556ftwKsBg11TIb301MB5dWNicziQBEs2g3gtOYIf7pFiLa0zI2gUwhtCjv9fmjnxKZ1Cg==",
+ "version": "2.36.0",
+ "resolved": "https://registry.npmjs.org/three-stdlib/-/three-stdlib-2.36.0.tgz",
+ "integrity": "sha512-kv0Byb++AXztEGsULgMAs8U2jgUdz6HPpAB/wDJnLiLlaWQX2APHhiTJIN7rqW+Of0eRgcp7jn05U1BsCP3xBA==",
"license": "MIT",
"dependencies": {
"@types/draco3d": "^1.4.0",
@@ -19814,91 +7492,17 @@
"integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==",
"license": "MIT"
},
- "node_modules/tiny-inflate": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
- "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
- "license": "MIT"
- },
"node_modules/tiny-invariant": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
"integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
"license": "MIT"
},
- "node_modules/tinyclip": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.12.tgz",
- "integrity": "sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==",
- "license": "MIT",
- "engines": {
- "node": "^16.14.0 || >= 17.3.0"
- }
- },
- "node_modules/tinyexec": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz",
- "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
- "dependencies": {
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tldts": {
- "version": "7.0.27",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.27.tgz",
- "integrity": "sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==",
- "license": "MIT",
- "dependencies": {
- "tldts-core": "^7.0.27"
- },
- "bin": {
- "tldts": "bin/cli.js"
- }
- },
- "node_modules/tldts-core": {
- "version": "7.0.27",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.27.tgz",
- "integrity": "sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==",
- "license": "MIT"
- },
- "node_modules/tmp": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
- "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
- "license": "MIT",
- "engines": {
- "node": ">=14.14"
- }
- },
- "node_modules/tmp-promise": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz",
- "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==",
- "license": "MIT",
- "dependencies": {
- "tmp": "^0.2.0"
- }
- },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -19906,63 +7510,6 @@
"node": ">=8.0"
}
},
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/toml": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz",
- "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==",
- "license": "MIT"
- },
- "node_modules/tomlify-j0.4": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tomlify-j0.4/-/tomlify-j0.4-3.0.0.tgz",
- "integrity": "sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ==",
- "license": "MIT"
- },
- "node_modules/tough-cookie": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz",
- "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "tldts": "^7.0.5"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
- "license": "MIT"
- },
- "node_modules/trim-lines": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
- "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/triple-beam": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz",
- "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==",
- "license": "MIT",
- "engines": {
- "node": ">= 14.0.0"
- }
- },
"node_modules/troika-three-text": {
"version": "0.52.4",
"resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.52.4.tgz",
@@ -19993,74 +7540,30 @@
"integrity": "sha512-W1CpvTHykaPH5brv5VHLfQo9D1OYuo0cSBEUQFFT/nBUzM8iD6Lq2/tgG/f1OelbAS1WtaTPQzE5uM49egnngw==",
"license": "MIT"
},
- "node_modules/trough": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
- "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/ts-api-utils": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz",
- "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+ "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=18.12"
+ "node": ">=16"
},
"peerDependencies": {
- "typescript": ">=4.8.4"
+ "typescript": ">=4.2.0"
}
},
- "node_modules/ts-morph": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-26.0.0.tgz",
- "integrity": "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==",
- "license": "MIT",
- "dependencies": {
- "@ts-morph/common": "~0.27.0",
- "code-block-writer": "^13.0.3"
- }
- },
- "node_modules/tsconfck": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz",
- "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
- "license": "MIT",
- "bin": {
- "tsconfck": "bin/tsconfck.js"
- },
- "engines": {
- "node": "^18 || >=20"
- },
- "peerDependencies": {
- "typescript": "^5.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/tsconfig-paths": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz",
- "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==",
- "license": "MIT",
- "dependencies": {
- "json5": "^2.2.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "license": "Apache-2.0"
},
"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=="
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz",
+ "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==",
+ "license": "0BSD"
},
"node_modules/tunnel-rat": {
"version": "0.1.2",
@@ -20099,20 +7602,12 @@
}
}
},
- "node_modules/tw-animate-css": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz",
- "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/Wombosvideo"
- }
- },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1"
},
@@ -20120,110 +7615,12 @@
"node": ">= 0.8.0"
}
},
- "node_modules/type-fest": {
- "version": "4.41.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
- "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/type-is": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
- "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
- "license": "MIT",
- "dependencies": {
- "content-type": "^1.0.5",
- "media-typer": "^1.1.0",
- "mime-types": "^3.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
- "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
- "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
- "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.15",
- "reflect.getprototypeof": "^1.0.9"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
- "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0",
- "reflect.getprototypeof": "^1.0.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/typescript": {
- "version": "5.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
- "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+ "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+ "dev": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -20232,407 +7629,41 @@
"node": ">=14.17"
}
},
- "node_modules/ufo": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz",
- "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==",
- "license": "MIT"
- },
- "node_modules/ulid": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/ulid/-/ulid-3.0.2.tgz",
- "integrity": "sha512-yu26mwteFYzBAot7KVMqFGCVpsF6g8wXfJzQUHvu1no3+rRRSFcSV2nKeYvNPLD2J4b08jYBDhHUjeH0ygIl9w==",
- "license": "MIT",
- "bin": {
- "ulid": "dist/cli.js"
- }
- },
- "node_modules/ultrahtml": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz",
- "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="
- },
- "node_modules/unbox-primitive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
- "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.1.0",
- "which-boxed-primitive": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/uncrypto": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz",
- "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==",
- "license": "MIT"
- },
- "node_modules/undici-types": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
- "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="
- },
- "node_modules/unicorn-magic": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
- "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/unified": {
- "version": "11.0.5",
- "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
- "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "bail": "^2.0.0",
- "devlop": "^1.0.0",
- "extend": "^3.0.0",
- "is-plain-obj": "^4.0.0",
- "trough": "^2.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unifont": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz",
- "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==",
- "license": "MIT",
- "dependencies": {
- "css-tree": "^3.1.0",
- "ofetch": "^1.5.1",
- "ohash": "^2.0.11"
- }
- },
- "node_modules/unist-util-find-after": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
- "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-is": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
- "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-modify-children": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz",
- "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "array-iterate": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-position": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
- "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-position-from-estree": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz",
- "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==",
+ "node_modules/typescript-eslint": {
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.11.0.tgz",
+ "integrity": "sha512-cBRGnW3FSlxaYwU8KfAewxFK5uzeOAp0l2KebIlPDOT5olVi65KDG/yjBooPBG0kGW/HLkoz1c/iuBFehcS3IA==",
"dev": true,
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-remove-position": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
- "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
"license": "MIT",
"dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-visit": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-stringify-position": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
- "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
- "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0",
- "unist-util-visit-parents": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit-children": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz",
- "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit-parents": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
- "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/unixify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz",
- "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==",
- "license": "MIT",
- "dependencies": {
- "normalize-path": "^2.1.1"
+ "@typescript-eslint/eslint-plugin": "8.11.0",
+ "@typescript-eslint/parser": "8.11.0",
+ "@typescript-eslint/utils": "8.11.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unixify/node_modules/normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
- "license": "MIT",
- "dependencies": {
- "remove-trailing-separator": "^1.0.1"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/unstorage": {
- "version": "1.17.5",
- "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz",
- "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==",
- "license": "MIT",
- "dependencies": {
- "anymatch": "^3.1.3",
- "chokidar": "^5.0.0",
- "destr": "^2.0.5",
- "h3": "^1.15.10",
- "lru-cache": "^11.2.7",
- "node-fetch-native": "^1.6.7",
- "ofetch": "^1.5.1",
- "ufo": "^1.6.3"
- },
- "peerDependencies": {
- "@azure/app-configuration": "^1.8.0",
- "@azure/cosmos": "^4.2.0",
- "@azure/data-tables": "^13.3.0",
- "@azure/identity": "^4.6.0",
- "@azure/keyvault-secrets": "^4.9.0",
- "@azure/storage-blob": "^12.26.0",
- "@capacitor/preferences": "^6 || ^7 || ^8",
- "@deno/kv": ">=0.9.0",
- "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0",
- "@planetscale/database": "^1.19.0",
- "@upstash/redis": "^1.34.3",
- "@vercel/blob": ">=0.27.1",
- "@vercel/functions": "^2.2.12 || ^3.0.0",
- "@vercel/kv": "^1 || ^2 || ^3",
- "aws4fetch": "^1.0.20",
- "db0": ">=0.2.1",
- "idb-keyval": "^6.2.1",
- "ioredis": "^5.4.2",
- "uploadthing": "^7.4.4"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
},
"peerDependenciesMeta": {
- "@azure/app-configuration": {
- "optional": true
- },
- "@azure/cosmos": {
- "optional": true
- },
- "@azure/data-tables": {
- "optional": true
- },
- "@azure/identity": {
- "optional": true
- },
- "@azure/keyvault-secrets": {
- "optional": true
- },
- "@azure/storage-blob": {
- "optional": true
- },
- "@capacitor/preferences": {
- "optional": true
- },
- "@deno/kv": {
- "optional": true
- },
- "@netlify/blobs": {
- "optional": true
- },
- "@planetscale/database": {
- "optional": true
- },
- "@upstash/redis": {
- "optional": true
- },
- "@vercel/blob": {
- "optional": true
- },
- "@vercel/functions": {
- "optional": true
- },
- "@vercel/kv": {
- "optional": true
- },
- "aws4fetch": {
- "optional": true
- },
- "db0": {
- "optional": true
- },
- "idb-keyval": {
- "optional": true
- },
- "ioredis": {
- "optional": true
- },
- "uploadthing": {
+ "typescript": {
"optional": true
}
}
},
- "node_modules/unstorage/node_modules/lru-cache": {
- "version": "11.2.7",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz",
- "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": "20 || >=22"
- }
- },
- "node_modules/until-async": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/until-async/-/until-async-3.0.2.tgz",
- "integrity": "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/kettanaito"
- }
- },
- "node_modules/untun": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz",
- "integrity": "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==",
- "license": "MIT",
- "dependencies": {
- "citty": "^0.1.5",
- "consola": "^3.2.3",
- "pathe": "^1.1.1"
- },
- "bin": {
- "untun": "bin/untun.mjs"
- }
- },
- "node_modules/untun/node_modules/pathe": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
- "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+ "node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
"license": "MIT"
},
"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==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+ "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
+ "dev": true,
"funding": [
{
"type": "opencollective",
@@ -20647,9 +7678,10 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
"escalade": "^3.2.0",
- "picocolors": "^1.1.1"
+ "picocolors": "^1.1.0"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -20658,30 +7690,21 @@
"browserslist": ">= 4.21.0"
}
},
- "node_modules/uqr": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.3.tgz",
- "integrity": "sha512-0rjE8iEJe4YmT9TOhwsZtqCMRLc5DXZUI2UEYUUg63ikBkqqE5EYWaI0etFe/5KUcmcYwLih2RND1kq+hrUJXA==",
- "license": "MIT"
- },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}
},
- "node_modules/urlpattern-polyfill": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz",
- "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==",
- "license": "MIT"
- },
"node_modules/use-callback-ref": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
- "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
+ "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
+ "license": "MIT",
"dependencies": {
"tslib": "^2.0.0"
},
@@ -20689,8 +7712,8 @@
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -20699,9 +7722,10 @@
}
},
"node_modules/use-sidecar": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz",
- "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
+ "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "license": "MIT",
"dependencies": {
"detect-node-es": "^1.1.0",
"tslib": "^2.0.0"
@@ -20710,8 +7734,8 @@
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+ "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -20723,6 +7747,7 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
"integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
+ "license": "MIT",
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
@@ -20730,7 +7755,8 @@
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
},
"node_modules/utility-types": {
"version": "3.11.0",
@@ -20741,104 +7767,23 @@
"node": ">= 4"
}
},
- "node_modules/uuid": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz",
- "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist-node/bin/uuid"
- }
- },
- "node_modules/validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "license": "Apache-2.0",
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/validate-npm-package-name": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz",
- "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==",
- "license": "ISC",
- "engines": {
- "node": "^20.17.0 || >=22.9.0"
- }
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/vaul": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz",
- "integrity": "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==",
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/vaul/-/vaul-0.9.9.tgz",
+ "integrity": "sha512-7afKg48srluhZwIkaU+lgGtFCUsYBSGOl8vcc8N/M3YQlZFlynHD15AE+pwrYdc826o7nrIND4lL9Y6b9WWZZQ==",
"license": "MIT",
"dependencies": {
"@radix-ui/react-dialog": "^1.1.1"
},
"peerDependencies": {
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc"
- }
- },
- "node_modules/vfile": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
- "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-location": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
- "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-message": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
- "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-stringify-position": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
}
},
"node_modules/victory-vendor": {
- "version": "37.3.6",
- "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz",
- "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==",
+ "version": "36.9.2",
+ "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
+ "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==",
"license": "MIT AND ISC",
"dependencies": {
"@types/d3-array": "^3.0.3",
@@ -20858,22 +7803,21 @@
}
},
"node_modules/vite": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
- "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
+ "version": "5.4.10",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz",
+ "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "esbuild": "^0.27.0",
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3",
- "postcss": "^8.5.6",
- "rollup": "^4.43.0",
- "tinyglobby": "^0.2.15"
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^20.19.0 || >=22.12.0"
+ "node": "^18.0.0 || >=20.0.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
@@ -20882,25 +7826,19 @@
"fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": "^20.19.0 || >=22.12.0",
- "jiti": ">=1.21.0",
- "less": "^4.0.0",
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
"lightningcss": "^1.21.0",
- "sass": "^1.70.0",
- "sass-embedded": "^1.70.0",
- "stylus": ">=0.54.8",
- "sugarss": "^5.0.0",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
- "jiti": {
- "optional": true
- },
"less": {
"optional": true
},
@@ -20921,53 +7859,9 @@
},
"terser": {
"optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
}
}
},
- "node_modules/vitefu": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz",
- "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==",
- "license": "MIT",
- "workspaces": [
- "tests/deps/*",
- "tests/projects/*",
- "tests/projects/workspace/packages/*"
- ],
- "peerDependencies": {
- "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0"
- },
- "peerDependenciesMeta": {
- "vite": {
- "optional": true
- }
- }
- },
- "node_modules/web-namespaces": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
- "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/web-streams-polyfill": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
- "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/webgl-constants": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/webgl-constants/-/webgl-constants-1.1.1.tgz",
@@ -20979,26 +7873,11 @@
"integrity": "sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==",
"license": "MIT"
},
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "license": "BSD-2-Clause"
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "license": "MIT",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -21009,203 +7888,37 @@
"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==",
- "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-builtin-type": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
- "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "function.prototype.name": "^1.1.6",
- "has-tostringtag": "^1.0.2",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.1.0",
- "is-finalizationregistry": "^1.1.0",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.2.1",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.1.0",
- "which-collection": "^1.0.2",
- "which-typed-array": "^1.1.16"
- },
- "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==",
- "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-module": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
"integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
"license": "ISC"
},
- "node_modules/which-pm-runs": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz",
- "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.20",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz",
- "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==",
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "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/winston": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz",
- "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==",
- "license": "MIT",
- "dependencies": {
- "@colors/colors": "^1.6.0",
- "@dabh/diagnostics": "^2.0.8",
- "async": "^3.2.3",
- "is-stream": "^2.0.0",
- "logform": "^2.7.0",
- "one-time": "^1.0.0",
- "readable-stream": "^3.4.0",
- "safe-stable-stringify": "^2.3.1",
- "stack-trace": "0.0.x",
- "triple-beam": "^1.3.0",
- "winston-transport": "^4.9.0"
- },
- "engines": {
- "node": ">= 12.0.0"
- }
- },
- "node_modules/winston-transport": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz",
- "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==",
- "license": "MIT",
- "dependencies": {
- "logform": "^2.7.0",
- "readable-stream": "^3.6.2",
- "triple-beam": "^1.3.0"
- },
- "engines": {
- "node": ">= 12.0.0"
- }
- },
- "node_modules/winston-transport/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/winston/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/winston/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/word-wrap": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"license": "MIT",
"dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/wrap-ansi-cjs": {
@@ -21267,184 +7980,69 @@
"node": ">=8"
}
},
- "node_modules/wrap-ansi/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==",
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"license": "MIT",
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/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==",
- "license": "MIT"
- },
- "node_modules/wrap-ansi/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==",
- "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/wrap-ansi/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==",
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "license": "ISC"
- },
- "node_modules/write-file-atomic": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
- "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "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==",
- "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/wsl-utils": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz",
- "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==",
- "license": "MIT",
- "dependencies": {
- "is-wsl": "^3.1.0",
- "powershell-utils": "^0.1.0"
- },
- "engines": {
- "node": ">=20"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/xss": {
- "version": "1.0.15",
- "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz",
- "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==",
- "license": "MIT",
- "dependencies": {
- "commander": "^2.20.3",
- "cssfilter": "0.0.10"
- },
- "bin": {
- "xss": "bin/xss"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/xss/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "license": "MIT"
- },
- "node_modules/xxhash-wasm": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz",
- "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==",
- "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==",
- "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=="
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "license": "ISC"
},
"node_modules/yaml": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz",
- "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
+ "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
"license": "ISC",
"bin": {
"yaml": "bin.mjs"
},
"engines": {
- "node": ">= 14.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/eemeli"
+ "node": ">= 14"
}
},
"node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"license": "MIT",
"dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
},
"engines": {
- "node": ">=12"
+ "node": ">=8"
}
},
"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==",
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "license": "ISC",
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=6"
}
},
"node_modules/yargs/node_modules/ansi-regex": {
@@ -21462,6 +8060,58 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"license": "MIT"
},
+ "node_modules/yargs/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/yargs/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/yargs/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -21488,127 +8138,44 @@
"node": ">=8"
}
},
- "node_modules/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
- "license": "MIT",
- "dependencies": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- },
- "node_modules/yauzl/node_modules/buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
"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==",
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">=12.20"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/yoctocolors": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz",
- "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/yoctocolors-cjs": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz",
- "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/zip-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz",
- "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==",
- "license": "MIT",
- "dependencies": {
- "archiver-utils": "^5.0.0",
- "compress-commons": "^6.0.2",
- "readable-stream": "^4.0.0"
- },
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/zod": {
- "version": "3.25.76",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
- "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+ "version": "3.23.8",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
+ "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
- "node_modules/zod-to-json-schema": {
- "version": "3.25.1",
- "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz",
- "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==",
- "peerDependencies": {
- "zod": "^3.25 || ^4"
- }
- },
"node_modules/zustand": {
- "version": "5.0.12",
- "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.12.tgz",
- "integrity": "sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==",
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz",
+ "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==",
"license": "MIT",
"engines": {
- "node": ">=12.20.0"
+ "node": ">=12.7.0"
},
"peerDependencies": {
- "@types/react": ">=18.0.0",
- "immer": ">=9.0.6",
- "react": ">=18.0.0",
- "use-sync-external-store": ">=1.2.0"
+ "react": ">=16.8"
},
"peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "immer": {
- "optional": true
- },
"react": {
"optional": true
- },
- "use-sync-external-store": {
- "optional": true
}
}
- },
- "node_modules/zwitch": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
- "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
}
}
}
diff --git a/package.json b/package.json
index e58b637..9ac42cd 100644
--- a/package.json
+++ b/package.json
@@ -1,85 +1,90 @@
{
- "name": "hatch-astro-template",
+ "name": "vite_react_shadcn_ts",
+ "private": true,
+ "version": "0.0.0",
"type": "module",
- "version": "1.0.0",
- "author": "Shadcnblocks.com",
"scripts": {
- "dev": "astro dev",
- "build": "astro build",
- "ci": "npm run test:sync && npm run build",
- "preview": "astro preview",
- "astro": "astro",
- "lint": "eslint . --ext .js,.jsx,.ts,.tsx,.astro",
- "lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx,.astro --fix",
- "format": "prettier --write .",
- "format:check": "prettier --check .",
- "start": "node server/index.mjs",
- "test:sync": "node --test server/dice-sync.test.mjs"
- },
- "engines": {
- "node": ">=22.12.0"
+ "dev": "vite",
+ "build": "vite build",
+ "build:dev": "vite build --mode development",
+ "ci": "npm run lint && npm run build",
+ "lint": "eslint .",
+ "preview": "vite preview"
},
"dependencies": {
- "@astrojs/netlify": "^7.0.7",
- "@astrojs/react": "^5.0.2",
- "@astrojs/rss": "^4.0.18",
- "@fontsource-variable/geist": "^5.2.8",
- "@fontsource/castoro": "^5.2.7",
- "@fontsource/imprima": "^5.2.8",
- "@fontsource/inter": "^5.2.8",
- "@react-three/drei": "^10.7.7",
- "@react-three/fiber": "^9.5.0",
- "@tailwindcss/typography": "^0.5.16",
- "@types/katex": "^0.16.8",
- "@types/qrcode": "^1.5.6",
- "@types/three": "^0.183.1",
- "astro": "^6.1.7",
- "canvas-confetti": "^1.9.4",
+ "@hookform/resolvers": "^3.9.0",
+ "@radix-ui/react-accordion": "^1.2.0",
+ "@radix-ui/react-alert-dialog": "^1.1.1",
+ "@radix-ui/react-aspect-ratio": "^1.1.0",
+ "@radix-ui/react-avatar": "^1.1.0",
+ "@radix-ui/react-checkbox": "^1.1.1",
+ "@radix-ui/react-collapsible": "^1.1.0",
+ "@radix-ui/react-context-menu": "^2.2.1",
+ "@radix-ui/react-dialog": "^1.1.2",
+ "@radix-ui/react-dropdown-menu": "^2.1.1",
+ "@radix-ui/react-hover-card": "^1.1.1",
+ "@radix-ui/react-label": "^2.1.0",
+ "@radix-ui/react-menubar": "^1.1.1",
+ "@radix-ui/react-navigation-menu": "^1.2.0",
+ "@radix-ui/react-popover": "^1.1.1",
+ "@radix-ui/react-progress": "^1.1.0",
+ "@radix-ui/react-radio-group": "^1.2.0",
+ "@radix-ui/react-scroll-area": "^1.1.0",
+ "@radix-ui/react-select": "^2.1.1",
+ "@radix-ui/react-separator": "^1.1.0",
+ "@radix-ui/react-slider": "^1.2.0",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-switch": "^1.1.0",
+ "@radix-ui/react-tabs": "^1.1.0",
+ "@radix-ui/react-toast": "^1.2.1",
+ "@radix-ui/react-toggle": "^1.1.0",
+ "@radix-ui/react-toggle-group": "^1.1.0",
+ "@radix-ui/react-tooltip": "^1.1.4",
+ "@react-three/drei": "^9.122.0",
+ "@react-three/fiber": "^8.18.0",
+ "@tanstack/react-query": "^5.56.2",
+ "@types/qrcode": "^1.5.5",
+ "canvas-confetti": "^1.9.3",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
- "cmdk": "^1.1.1",
- "embla-carousel-autoplay": "^8.5.2",
- "embla-carousel-react": "^8.6.0",
- "framer-motion": "^11.18.2",
- "gifenc": "^1.0.3",
- "gray-matter": "^4.0.3",
- "input-otp": "^1.4.2",
- "katex": "^0.16.45",
- "lucide-react": "^0.479.0",
- "next-themes": "^0.4.6",
+ "cmdk": "^1.0.0",
+ "date-fns": "^3.6.0",
+ "embla-carousel-react": "^8.3.0",
+ "input-otp": "^1.2.4",
+ "lucide-react": "^0.462.0",
+ "next-themes": "^0.3.0",
"qrcode": "^1.5.4",
- "radix-ui": "^1.4.3",
- "react": "^19.2.4",
- "react-day-picker": "^9.14.0",
- "react-dom": "^19.2.4",
- "react-resizable-panels": "^4.8.0",
- "recharts": "^3.8.0",
- "shadcn": "^4.1.1",
- "sonner": "^2.0.7",
- "tailwind-merge": "^3.5.0",
- "three": "^0.183.2",
- "tw-animate-css": "^1.4.0",
- "vaul": "^1.1.2",
- "ws": "^8.21.1"
+ "react": "^18.3.1",
+ "react-day-picker": "^8.10.1",
+ "react-dom": "^18.3.1",
+ "react-hook-form": "^7.53.0",
+ "react-resizable-panels": "^2.1.3",
+ "react-router-dom": "^6.26.2",
+ "recharts": "^2.12.7",
+ "sonner": "^1.5.0",
+ "tailwind-merge": "^2.5.2",
+ "tailwindcss-animate": "^1.0.7",
+ "three": "^0.160.1",
+ "vaul": "^0.9.3",
+ "zod": "^3.23.8"
},
"devDependencies": {
- "@astrojs/mdx": "^5.0.3",
- "@astrojs/sitemap": "^3.7.2",
- "@tailwindcss/vite": "^4.1.18",
- "@types/react": "^19.2.14",
- "@types/react-dom": "^19.2.3",
- "@typescript-eslint/eslint-plugin": "^8.39.0",
- "@typescript-eslint/parser": "^8.39.0",
- "astro-eslint-parser": "^1.2.2",
- "autoprefixer": "^10.4.21",
- "eslint": "^9.32.0",
- "eslint-config-prettier": "^10.1.8",
- "eslint-plugin-astro": "^1.3.1",
- "eslint-plugin-simple-import-sort": "^12.1.1",
- "postcss": "^8.5.6",
- "prettier": "^3.6.2",
- "prettier-plugin-astro": "^0.14.1",
- "prettier-plugin-tailwindcss": "^0.6.11",
- "tailwindcss": "^4.1.11"
+ "@eslint/js": "^9.9.0",
+ "@tailwindcss/typography": "^0.5.15",
+ "@types/node": "^22.5.5",
+ "@types/react": "^18.3.3",
+ "@types/react-dom": "^18.3.0",
+ "@vitejs/plugin-react-swc": "^3.5.0",
+ "autoprefixer": "^10.4.20",
+ "eslint": "^9.9.0",
+ "eslint-plugin-react-hooks": "^5.1.0-rc.0",
+ "eslint-plugin-react-refresh": "^0.4.9",
+ "globals": "^15.9.0",
+ "lovable-tagger": "^1.1.7",
+ "postcss": "^8.4.47",
+ "tailwindcss": "^3.4.11",
+ "typescript": "^5.5.3",
+ "typescript-eslint": "^8.0.1",
+ "vite": "^5.4.1"
}
}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..2e7af2b
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/public/_redirects b/public/_redirects
new file mode 100644
index 0000000..c998f1e
--- /dev/null
+++ b/public/_redirects
@@ -0,0 +1,7 @@
+
+/* /index.html 200
+ X-Frame-Options: DENY
+ X-Content-Type-Options: nosniff
+ X-XSS-Protection: 1; mode=block
+ Referrer-Policy: strict-origin-when-cross-origin
+ Permissions-Policy: geolocation=(), microphone=(), camera=()
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..dd5a126
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/favicon/apple-touch-icon.png b/public/favicon/apple-touch-icon.png
deleted file mode 100644
index 3fd6277..0000000
Binary files a/public/favicon/apple-touch-icon.png and /dev/null differ
diff --git a/public/favicon/favicon-96x96.png b/public/favicon/favicon-96x96.png
deleted file mode 100644
index cd61b62..0000000
Binary files a/public/favicon/favicon-96x96.png and /dev/null differ
diff --git a/public/favicon/favicon.ico b/public/favicon/favicon.ico
deleted file mode 100644
index 6de2d18..0000000
Binary files a/public/favicon/favicon.ico and /dev/null differ
diff --git a/public/favicon/favicon.svg b/public/favicon/favicon.svg
deleted file mode 100644
index fc79874..0000000
--- a/public/favicon/favicon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/public/favicon/site.webmanifest b/public/favicon/site.webmanifest
deleted file mode 100644
index e0a9cb5..0000000
--- a/public/favicon/site.webmanifest
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "Hatch Template - Shadcnblocks.com",
- "short_name": "Hatch",
- "icons": [
- {
- "src": "/web-app-manifest-192x192.png",
- "sizes": "192x192",
- "type": "image/png",
- "purpose": "maskable"
- },
- {
- "src": "/web-app-manifest-512x512.png",
- "sizes": "512x512",
- "type": "image/png",
- "purpose": "maskable"
- }
- ],
- "theme_color": "#ffffff",
- "background_color": "#ffffff",
- "display": "standalone"
-}
diff --git a/public/favicon/web-app-manifest-192x192.png b/public/favicon/web-app-manifest-192x192.png
deleted file mode 100644
index 341b1d1..0000000
Binary files a/public/favicon/web-app-manifest-192x192.png and /dev/null differ
diff --git a/public/favicon/web-app-manifest-512x512.png b/public/favicon/web-app-manifest-512x512.png
deleted file mode 100644
index d7a65fe..0000000
Binary files a/public/favicon/web-app-manifest-512x512.png and /dev/null differ
diff --git a/public/icons/meta/role.svg b/public/icons/meta/role.svg
deleted file mode 100644
index e4956c8..0000000
--- a/public/icons/meta/role.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/public/icons/meta/services.svg b/public/icons/meta/services.svg
deleted file mode 100644
index 190afcb..0000000
--- a/public/icons/meta/services.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/public/icons/meta/timeline.svg b/public/icons/meta/timeline.svg
deleted file mode 100644
index 1ee5296..0000000
--- a/public/icons/meta/timeline.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/public/icons/pricing/project.svg b/public/icons/pricing/project.svg
deleted file mode 100644
index b634f8c..0000000
--- a/public/icons/pricing/project.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/icons/pricing/subscription.svg b/public/icons/pricing/subscription.svg
deleted file mode 100644
index 7d0a428..0000000
--- a/public/icons/pricing/subscription.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/icons/service-details/s1.svg b/public/icons/service-details/s1.svg
deleted file mode 100644
index 71abe5a..0000000
--- a/public/icons/service-details/s1.svg
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/public/icons/service-details/s2.svg b/public/icons/service-details/s2.svg
deleted file mode 100644
index 8eefd36..0000000
--- a/public/icons/service-details/s2.svg
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/public/icons/service-details/s3.svg b/public/icons/service-details/s3.svg
deleted file mode 100644
index da594ee..0000000
--- a/public/icons/service-details/s3.svg
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/public/icons/service-details/s4.svg b/public/icons/service-details/s4.svg
deleted file mode 100644
index 5c84164..0000000
--- a/public/icons/service-details/s4.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/public/icons/socials/framer.svg b/public/icons/socials/framer.svg
deleted file mode 100644
index 08cd60b..0000000
--- a/public/icons/socials/framer.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/public/icons/socials/instagram.svg b/public/icons/socials/instagram.svg
deleted file mode 100644
index 42a91f9..0000000
--- a/public/icons/socials/instagram.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/public/icons/socials/x.svg b/public/icons/socials/x.svg
deleted file mode 100644
index 609f6b0..0000000
--- a/public/icons/socials/x.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/public/images/about/portrait.jpg b/public/images/about/portrait.jpg
deleted file mode 100644
index 55f256c..0000000
Binary files a/public/images/about/portrait.jpg and /dev/null differ
diff --git a/public/images/avatars/avatar-1.webp b/public/images/avatars/avatar-1.webp
deleted file mode 100644
index 63bea9d..0000000
Binary files a/public/images/avatars/avatar-1.webp and /dev/null differ
diff --git a/public/images/avatars/avatar-2.webp b/public/images/avatars/avatar-2.webp
deleted file mode 100644
index 467ca73..0000000
Binary files a/public/images/avatars/avatar-2.webp and /dev/null differ
diff --git a/public/images/avatars/avatar-3.webp b/public/images/avatars/avatar-3.webp
deleted file mode 100644
index 1224348..0000000
Binary files a/public/images/avatars/avatar-3.webp and /dev/null differ
diff --git a/public/images/avatars/avatar-4.webp b/public/images/avatars/avatar-4.webp
deleted file mode 100644
index 924d625..0000000
Binary files a/public/images/avatars/avatar-4.webp and /dev/null differ
diff --git a/public/images/layout/logo.svg b/public/images/layout/logo.svg
deleted file mode 100644
index fc79874..0000000
--- a/public/images/layout/logo.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/public/images/logos/Frame-1.webp b/public/images/logos/Frame-1.webp
deleted file mode 100644
index 22a7d5a..0000000
Binary files a/public/images/logos/Frame-1.webp and /dev/null differ
diff --git a/public/images/logos/Frame-2.webp b/public/images/logos/Frame-2.webp
deleted file mode 100644
index fa6de66..0000000
Binary files a/public/images/logos/Frame-2.webp and /dev/null differ
diff --git a/public/images/logos/Frame-3.webp b/public/images/logos/Frame-3.webp
deleted file mode 100644
index 54ba704..0000000
Binary files a/public/images/logos/Frame-3.webp and /dev/null differ
diff --git a/public/images/logos/Frame-4.webp b/public/images/logos/Frame-4.webp
deleted file mode 100644
index dfbc5e5..0000000
Binary files a/public/images/logos/Frame-4.webp and /dev/null differ
diff --git a/public/images/logos/Frame.webp b/public/images/logos/Frame.webp
deleted file mode 100644
index 93b9b55..0000000
Binary files a/public/images/logos/Frame.webp and /dev/null differ
diff --git a/public/images/logos/Vector.webp b/public/images/logos/Vector.webp
deleted file mode 100644
index 37434ed..0000000
Binary files a/public/images/logos/Vector.webp and /dev/null differ
diff --git a/public/images/services/noun-half-circles-7745954.svg b/public/images/services/noun-half-circles-7745954.svg
deleted file mode 100644
index fca12cc..0000000
--- a/public/images/services/noun-half-circles-7745954.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/images/services/noun-semicircles-8294628.svg b/public/images/services/noun-semicircles-8294628.svg
deleted file mode 100644
index c2c48ea..0000000
--- a/public/images/services/noun-semicircles-8294628.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/images/services/noun-sparkle-7746005.svg b/public/images/services/noun-sparkle-7746005.svg
deleted file mode 100644
index 6e75945..0000000
--- a/public/images/services/noun-sparkle-7746005.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/images/services/noun-star-7745963.svg b/public/images/services/noun-star-7745963.svg
deleted file mode 100644
index 933931e..0000000
--- a/public/images/services/noun-star-7745963.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/public/images/work/cove/cover.jpg b/public/images/work/cove/cover.jpg
deleted file mode 100644
index 35f3bef..0000000
Binary files a/public/images/work/cove/cover.jpg and /dev/null differ
diff --git a/public/images/work/cove/gallery-1.jpg b/public/images/work/cove/gallery-1.jpg
deleted file mode 100644
index 90b07a1..0000000
Binary files a/public/images/work/cove/gallery-1.jpg and /dev/null differ
diff --git a/public/images/work/cove/gallery-2.jpg b/public/images/work/cove/gallery-2.jpg
deleted file mode 100644
index 645ebda..0000000
Binary files a/public/images/work/cove/gallery-2.jpg and /dev/null differ
diff --git a/public/images/work/epoch/cover.jpg b/public/images/work/epoch/cover.jpg
deleted file mode 100644
index 3fee52f..0000000
Binary files a/public/images/work/epoch/cover.jpg and /dev/null differ
diff --git a/public/images/work/epoch/gallery-1.jpg b/public/images/work/epoch/gallery-1.jpg
deleted file mode 100644
index 4f8f87e..0000000
Binary files a/public/images/work/epoch/gallery-1.jpg and /dev/null differ
diff --git a/public/images/work/epoch/gallery-2.jpg b/public/images/work/epoch/gallery-2.jpg
deleted file mode 100644
index 2da8da8..0000000
Binary files a/public/images/work/epoch/gallery-2.jpg and /dev/null differ
diff --git a/public/images/work/pace/cover.jpg b/public/images/work/pace/cover.jpg
deleted file mode 100644
index 930f64d..0000000
Binary files a/public/images/work/pace/cover.jpg and /dev/null differ
diff --git a/public/images/work/pace/gallery-1.jpg b/public/images/work/pace/gallery-1.jpg
deleted file mode 100644
index 3e94e6b..0000000
Binary files a/public/images/work/pace/gallery-1.jpg and /dev/null differ
diff --git a/public/images/work/pace/gallery-2.jpg b/public/images/work/pace/gallery-2.jpg
deleted file mode 100644
index 19fd055..0000000
Binary files a/public/images/work/pace/gallery-2.jpg and /dev/null differ
diff --git a/public/images/work/pitch/cover.jpg b/public/images/work/pitch/cover.jpg
deleted file mode 100644
index d22e25e..0000000
Binary files a/public/images/work/pitch/cover.jpg and /dev/null differ
diff --git a/public/images/work/pitch/gallery-1.jpg b/public/images/work/pitch/gallery-1.jpg
deleted file mode 100644
index 96a00d7..0000000
Binary files a/public/images/work/pitch/gallery-1.jpg and /dev/null differ
diff --git a/public/images/work/pitch/gallery-2.jpg b/public/images/work/pitch/gallery-2.jpg
deleted file mode 100644
index 309dffb..0000000
Binary files a/public/images/work/pitch/gallery-2.jpg and /dev/null differ
diff --git a/public/images/work/ripple/cover.jpg b/public/images/work/ripple/cover.jpg
deleted file mode 100644
index c4ead8e..0000000
Binary files a/public/images/work/ripple/cover.jpg and /dev/null differ
diff --git a/public/images/work/ripple/gallery-1.jpg b/public/images/work/ripple/gallery-1.jpg
deleted file mode 100644
index 743b36d..0000000
Binary files a/public/images/work/ripple/gallery-1.jpg and /dev/null differ
diff --git a/public/images/work/ripple/gallery-2.jpg b/public/images/work/ripple/gallery-2.jpg
deleted file mode 100644
index e0deef7..0000000
Binary files a/public/images/work/ripple/gallery-2.jpg and /dev/null differ
diff --git a/public/images/work/veil/cover.jpg b/public/images/work/veil/cover.jpg
deleted file mode 100644
index 1953ecd..0000000
Binary files a/public/images/work/veil/cover.jpg and /dev/null differ
diff --git a/public/images/work/veil/gallery-1.jpg b/public/images/work/veil/gallery-1.jpg
deleted file mode 100644
index 4f18fb3..0000000
Binary files a/public/images/work/veil/gallery-1.jpg and /dev/null differ
diff --git a/public/images/work/veil/gallery-2.jpg b/public/images/work/veil/gallery-2.jpg
deleted file mode 100644
index 5620b86..0000000
Binary files a/public/images/work/veil/gallery-2.jpg and /dev/null differ
diff --git a/public/og-image.png b/public/og-image.png
deleted file mode 100644
index cb0a713..0000000
Binary files a/public/og-image.png and /dev/null differ
diff --git a/public/og/kasuti.png b/public/og/kasuti.png
deleted file mode 100644
index c183ace..0000000
Binary files a/public/og/kasuti.png and /dev/null differ
diff --git a/public/placeholder.svg b/public/placeholder.svg
new file mode 100644
index 0000000..e763910
--- /dev/null
+++ b/public/placeholder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 0000000..6018e70
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,14 @@
+User-agent: Googlebot
+Allow: /
+
+User-agent: Bingbot
+Allow: /
+
+User-agent: Twitterbot
+Allow: /
+
+User-agent: facebookexternalhit
+Allow: /
+
+User-agent: *
+Allow: /
diff --git a/scripts/sync-blog.sh b/scripts/sync-blog.sh
deleted file mode 100755
index 6e36779..0000000
--- a/scripts/sync-blog.sh
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env bash
-#
-# sync-blog.sh
-#
-# Syncs blog posts from the Obsidian vault to the Astro content directory.
-#
-# Source: /Users/neeldhara/repos/nm-obsidian/public/subdomains/interactives/blog/
-# Structure: /blog.md
-#
-# Destination: src/content/blog/
-# Structure: .md
-#
-# The script:
-# 1. Scans the source directory for folders containing blog.md
-# 2. Copies each blog.md to src/content/blog/.md
-# 3. Removes any destination files whose source folder no longer exists
-# 4. Reports what changed
-#
-# Usage:
-# ./scripts/sync-blog.sh # sync
-# ./scripts/sync-blog.sh --dry-run # preview changes without writing
-
-set -euo pipefail
-
-OBSIDIAN_BLOG="/Users/neeldhara/repos/nm-obsidian/public/subdomains/interactives/blog"
-ASTRO_BLOG="src/content/blog"
-
-DRY_RUN=false
-if [[ "${1:-}" == "--dry-run" ]]; then
- DRY_RUN=true
- echo "=== DRY RUN ==="
-fi
-
-# Ensure destination exists
-mkdir -p "$ASTRO_BLOG"
-
-added=0
-updated=0
-removed=0
-unchanged=0
-
-# --- Sync from Obsidian → Astro ---
-
-if [[ ! -d "$OBSIDIAN_BLOG" ]]; then
- echo "Error: Source directory not found: $OBSIDIAN_BLOG"
- exit 1
-fi
-
-for dir in "$OBSIDIAN_BLOG"/*/; do
- # Skip if not a directory
- [[ -d "$dir" ]] || continue
-
- slug=$(basename "$dir")
- src="$dir/blog.md"
- dest="$ASTRO_BLOG/$slug.md"
-
- if [[ ! -f "$src" ]]; then
- echo " SKIP $slug (no blog.md found)"
- continue
- fi
-
- if [[ -f "$dest" ]]; then
- # Compare contents
- if diff -q "$src" "$dest" > /dev/null 2>&1; then
- unchanged=$((unchanged + 1))
- continue
- else
- echo " UPDATE $slug"
- updated=$((updated + 1))
- fi
- else
- echo " ADD $slug"
- added=$((added + 1))
- fi
-
- if [[ "$DRY_RUN" == false ]]; then
- cp "$src" "$dest"
- fi
-done
-
-# --- Remove orphaned files in Astro that no longer exist in Obsidian ---
-
-for dest in "$ASTRO_BLOG"/*.md; do
- [[ -f "$dest" ]] || continue
-
- filename=$(basename "$dest")
- # Skip .gitkeep or non-md files
- [[ "$filename" == ".gitkeep" ]] && continue
-
- slug="${filename%.md}"
- src_dir="$OBSIDIAN_BLOG/$slug"
-
- if [[ ! -d "$src_dir" ]] || [[ ! -f "$src_dir/blog.md" ]]; then
- echo " REMOVE $slug (source no longer exists)"
- removed=$((removed + 1))
- if [[ "$DRY_RUN" == false ]]; then
- rm "$dest"
- fi
- fi
-done
-
-echo ""
-echo "Done: $added added, $updated updated, $removed removed, $unchanged unchanged"
diff --git a/server/dice-sync.mjs b/server/dice-sync.mjs
deleted file mode 100644
index 2a5531d..0000000
--- a/server/dice-sync.mjs
+++ /dev/null
@@ -1,452 +0,0 @@
-import { randomInt, randomUUID } from "node:crypto";
-import { WebSocket, WebSocketServer } from "ws";
-
-const ROOM_ALPHABET = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
-const ROOM_TTL_MS = 12 * 60 * 60 * 1000;
-const MAX_ROOMS = 200;
-const MAX_ROLLS = 120;
-const MIN_ROLL_INTERVAL_MS = 350;
-const DEFAULT_LEVEL_SETTINGS = Object.freeze({
- gridSize: 5,
- undoLimit: 3,
- rerollLimit: 3,
-});
-const NAME_ADJECTIVES = [
- "Bouncy",
- "Brave",
- "Curious",
- "Dapper",
- "Dizzy",
- "Gentle",
- "Jolly",
- "Merry",
- "Mighty",
- "Nimble",
- "Peppy",
- "Quiet",
- "Silly",
- "Sunny",
- "Wiggly",
- "Wobbly",
-];
-const NAME_NOUNS = [
- "Badger",
- "Biscuit",
- "Crumpet",
- "Doodle",
- "Kettle",
- "Mango",
- "Marble",
- "Otter",
- "Pancake",
- "Penguin",
- "Pickle",
- "Puffin",
- "Rocket",
- "Teacup",
- "Turnip",
- "Wombat",
-];
-
-const makeRoomId = () =>
- Array.from(
- { length: 6 },
- () => ROOM_ALPHABET[randomInt(ROOM_ALPHABET.length)],
- ).join("");
-
-const parseLevelSettings = (candidate) => {
- const settings = candidate ?? DEFAULT_LEVEL_SETTINGS;
- if (!settings || typeof settings !== "object") return null;
- const { gridSize, undoLimit, rerollLimit } = settings;
- if (
- !Number.isInteger(gridSize) ||
- gridSize < 5 ||
- gridSize > 9 ||
- !Number.isInteger(undoLimit) ||
- undoLimit < 0 ||
- undoLimit > 9 ||
- !Number.isInteger(rerollLimit) ||
- rerollLimit < 0 ||
- rerollLimit > 9
- ) {
- return null;
- }
- return { gridSize, undoLimit, rerollLimit };
-};
-
-const makePlayerName = (room) => {
- const usedNames = new Set(
- [...room.players.values()].map((player) => player.name),
- );
- for (let attempt = 0; attempt < 100; attempt += 1) {
- const name = `${NAME_ADJECTIVES[randomInt(NAME_ADJECTIVES.length)]} ${NAME_NOUNS[randomInt(NAME_NOUNS.length)]}`;
- if (!usedNames.has(name)) return name;
- }
- return `Jolly Marble ${room.players.size + 1}`;
-};
-
-const send = (socket, message) => {
- if (socket.readyState === WebSocket.OPEN) {
- socket.send(JSON.stringify(message));
- }
-};
-
-const leaderboardFor = (room) =>
- [...room.players.values()]
- .map(({ token: _token, ...player }) => player)
- .sort(
- (left, right) =>
- right.score - left.score ||
- right.placed - left.placed ||
- left.name.localeCompare(right.name),
- );
-
-const roomSnapshot = (room, socket, hostToken) => ({
- type: "room-state",
- roomId: room.id,
- roundId: room.roundId,
- isHost: hostToken === room.hostToken,
- participants: room.clients.size,
- history: room.history,
- playerId: socket.playerToken,
- playerName: room.players.get(socket.playerToken)?.name,
- leaderboard: leaderboardFor(room),
- settings: room.settings,
- rerollsUsed: room.rerollsUsed,
-});
-
-export const attachDiceSyncServer = (httpServer) => {
- const rooms = new Map();
- const wss = new WebSocketServer({
- server: httpServer,
- path: "/sync",
- maxPayload: 2048,
- });
-
- const broadcast = (room, message) => {
- for (const client of room.clients) send(client, message);
- };
-
- const broadcastPresence = (room) => {
- broadcast(room, { type: "presence", participants: room.clients.size });
- };
-
- const broadcastLeaderboard = (room) => {
- broadcast(room, { type: "leaderboard", leaderboard: leaderboardFor(room) });
- };
-
- const leaveCurrentRoom = (socket) => {
- const roomId = socket.roomId;
- if (!roomId) return;
- const room = rooms.get(roomId);
- socket.roomId = undefined;
- socket.hostToken = undefined;
- if (!room) return;
- room.clients.delete(socket);
- const player = room.players.get(socket.playerToken);
- if (player) {
- player.connected = [...room.clients].some(
- (client) => client.playerToken === socket.playerToken,
- );
- }
- room.lastActiveAt = Date.now();
- broadcastPresence(room);
- broadcastLeaderboard(room);
- };
-
- const joinRoom = (socket, room, hostToken, requestedPlayerToken) => {
- leaveCurrentRoom(socket);
- let player = requestedPlayerToken
- ? room.players.get(requestedPlayerToken)
- : null;
- if (!player) {
- const token = randomUUID();
- player = {
- id: token,
- token,
- name: makePlayerName(room),
- score: 0,
- placed: 0,
- finished: false,
- connected: true,
- };
- room.players.set(token, player);
- }
- player.connected = true;
- socket.roomId = room.id;
- socket.hostToken = hostToken;
- socket.playerToken = player.token;
- room.clients.add(socket);
- room.lastActiveAt = Date.now();
- send(socket, roomSnapshot(room, socket, hostToken));
- send(socket, {
- type: "player-token",
- roomId: room.id,
- playerToken: player.token,
- });
- broadcastPresence(room);
- broadcastLeaderboard(room);
- };
-
- const createRoom = (socket, requestedSettings) => {
- if (rooms.size >= MAX_ROOMS) {
- send(socket, {
- type: "error",
- message: "The classroom server is full. Please try again shortly.",
- });
- return;
- }
-
- const settings = parseLevelSettings(requestedSettings);
- if (!settings) {
- send(socket, {
- type: "error",
- message: "Those level settings are not valid.",
- });
- return;
- }
-
- let id = makeRoomId();
- while (rooms.has(id)) id = makeRoomId();
- const hostToken = randomUUID();
- const room = {
- id,
- hostToken,
- roundId: randomUUID(),
- clients: new Set(),
- players: new Map(),
- history: [],
- settings,
- rerollsUsed: 0,
- createdAt: Date.now(),
- lastActiveAt: Date.now(),
- lastRollAt: 0,
- };
- rooms.set(id, room);
- joinRoom(socket, room, hostToken);
- send(socket, { type: "host-token", roomId: id, hostToken });
- };
-
- const requireHost = (socket) => {
- const room = rooms.get(socket.roomId);
- if (!room) {
- send(socket, {
- type: "error",
- message: "This classroom room is no longer available.",
- });
- return null;
- }
- if (socket.hostToken !== room.hostToken) {
- send(socket, {
- type: "error",
- message: "Only the room host can change the classroom game.",
- });
- return null;
- }
- return room;
- };
-
- wss.on("connection", (socket) => {
- socket.on("message", (raw) => {
- let message;
- try {
- message = JSON.parse(raw.toString());
- } catch {
- send(socket, {
- type: "error",
- message: "That classroom message could not be read.",
- });
- return;
- }
-
- if (message.type === "create") {
- createRoom(socket, message.settings);
- return;
- }
-
- if (message.type === "configure") {
- const room = requireHost(socket);
- if (!room) return;
- if (room.history.length > 0) {
- send(socket, {
- type: "error",
- message:
- "Level settings can only be changed before the first roll.",
- });
- return;
- }
- const settings = parseLevelSettings(message.settings);
- if (!settings) {
- send(socket, {
- type: "error",
- message: "Those level settings are not valid.",
- });
- return;
- }
- room.settings = settings;
- room.rerollsUsed = 0;
- room.lastActiveAt = Date.now();
- broadcast(room, {
- type: "settings",
- settings: room.settings,
- rerollsUsed: room.rerollsUsed,
- });
- return;
- }
-
- if (message.type === "join") {
- const roomId = String(message.roomId ?? "")
- .trim()
- .toUpperCase();
- const room = rooms.get(roomId);
- if (!room) {
- send(socket, {
- type: "error",
- message: `No active classroom game was found for ${roomId || "that ID"}.`,
- });
- return;
- }
- const hostToken =
- typeof message.hostToken === "string" ? message.hostToken : undefined;
- const playerToken =
- typeof message.playerToken === "string"
- ? message.playerToken
- : undefined;
- joinRoom(socket, room, hostToken, playerToken);
- return;
- }
-
- if (message.type === "progress") {
- const room = rooms.get(socket.roomId);
- const player = room?.players.get(socket.playerToken);
- if (!room || !player) return;
- player.score = Math.max(
- 0,
- Math.min(10000, Math.round(Number(message.score) || 0)),
- );
- player.placed = Math.max(
- 0,
- Math.min(MAX_ROLLS, Math.round(Number(message.placed) || 0)),
- );
- player.finished = Boolean(message.finished);
- room.lastActiveAt = Date.now();
- broadcastLeaderboard(room);
- return;
- }
-
- if (message.type === "roll") {
- const room = requireHost(socket);
- if (!room) return;
- const now = Date.now();
- if (now - room.lastRollAt < MIN_ROLL_INTERVAL_MS) return;
- if (room.history.length >= MAX_ROLLS) {
- send(socket, {
- type: "error",
- message:
- "This round has reached its roll limit. Start a new round to continue.",
- });
- return;
- }
- const dice = [randomInt(1, 7), randomInt(1, 7)];
- const roll = {
- id: room.history.length + 1,
- dice,
- sum: dice[0] + dice[1],
- rolledAt: now,
- };
- room.history.push(roll);
- room.lastRollAt = now;
- room.lastActiveAt = now;
- broadcast(room, { type: "rolled", roundId: room.roundId, roll });
- return;
- }
-
- if (message.type === "reroll") {
- const room = requireHost(socket);
- if (!room) return;
- if (room.history.length === 0) {
- send(socket, {
- type: "error",
- message: "Roll the dice before using a re-roll.",
- });
- return;
- }
- if (room.rerollsUsed >= room.settings.rerollLimit) {
- send(socket, {
- type: "error",
- message: "This round has no re-rolls remaining.",
- });
- return;
- }
- if (
- [...room.players.values()].some(
- (player) => player.placed >= room.history.length,
- )
- ) {
- send(socket, {
- type: "error",
- message: "That roll has already been placed by a player.",
- });
- return;
- }
- const now = Date.now();
- const dice = [randomInt(1, 7), randomInt(1, 7)];
- const previousRoll = room.history.at(-1);
- const roll = {
- id: previousRoll.id,
- dice,
- sum: dice[0] + dice[1],
- rolledAt: now,
- };
- room.history[room.history.length - 1] = roll;
- room.rerollsUsed += 1;
- room.lastActiveAt = now;
- broadcast(room, {
- type: "rerolled",
- roundId: room.roundId,
- roll,
- rerollsUsed: room.rerollsUsed,
- });
- return;
- }
-
- if (message.type === "reset") {
- const room = requireHost(socket);
- if (!room) return;
- room.roundId = randomUUID();
- room.history = [];
- room.rerollsUsed = 0;
- for (const player of room.players.values()) {
- player.score = 0;
- player.placed = 0;
- player.finished = false;
- }
- room.lastRollAt = 0;
- room.lastActiveAt = Date.now();
- broadcast(room, {
- type: "round-reset",
- roundId: room.roundId,
- rerollsUsed: room.rerollsUsed,
- });
- broadcastLeaderboard(room);
- }
- });
-
- socket.on("close", () => leaveCurrentRoom(socket));
- });
-
- const pruneTimer = setInterval(
- () => {
- const cutoff = Date.now() - ROOM_TTL_MS;
- for (const [id, room] of rooms) {
- if (room.clients.size === 0 && room.lastActiveAt < cutoff)
- rooms.delete(id);
- }
- },
- 30 * 60 * 1000,
- );
- pruneTimer.unref();
-
- wss.on("close", () => clearInterval(pruneTimer));
- return { wss, rooms };
-};
diff --git a/server/dice-sync.test.mjs b/server/dice-sync.test.mjs
deleted file mode 100644
index 071534e..0000000
--- a/server/dice-sync.test.mjs
+++ /dev/null
@@ -1,207 +0,0 @@
-import assert from "node:assert/strict";
-import { createServer } from "node:http";
-import test from "node:test";
-import { WebSocket } from "ws";
-import { attachDiceSyncServer } from "./dice-sync.mjs";
-
-const createInbox = (socket) => {
- const messages = [];
- const waiters = [];
- socket.on("message", (raw) => {
- const message = JSON.parse(raw.toString());
- const waiterIndex = waiters.findIndex(
- (waiter) => waiter.type === message.type && waiter.predicate(message),
- );
- if (waiterIndex >= 0) {
- const [waiter] = waiters.splice(waiterIndex, 1);
- clearTimeout(waiter.timeout);
- waiter.resolve(message);
- } else {
- messages.push(message);
- }
- });
- return {
- next(type, predicate = () => true) {
- const messageIndex = messages.findIndex(
- (message) => message.type === type && predicate(message),
- );
- if (messageIndex >= 0)
- return Promise.resolve(messages.splice(messageIndex, 1)[0]);
- return new Promise((resolve, reject) => {
- const timeout = setTimeout(
- () => reject(new Error(`Timed out waiting for ${type}`)),
- 2000,
- );
- waiters.push({ type, predicate, resolve, timeout });
- });
- },
- };
-};
-
-const connect = (url) =>
- new Promise((resolve, reject) => {
- const socket = new WebSocket(url);
- socket.once("open", () => resolve(socket));
- socket.once("error", reject);
- });
-
-test("a host creates a room and broadcasts one authoritative roll", async () => {
- const httpServer = createServer();
- const { wss } = attachDiceSyncServer(httpServer);
- await new Promise((resolve) => httpServer.listen(0, "127.0.0.1", resolve));
- const address = httpServer.address();
- const url = `ws://127.0.0.1:${address.port}/sync`;
- const host = await connect(url);
- const guest = await connect(url);
- const hostInbox = createInbox(host);
- const guestInbox = createInbox(guest);
-
- host.send(JSON.stringify({ type: "create" }));
- const hostState = await hostInbox.next("room-state");
- const tokenMessage = await hostInbox.next("host-token");
- assert.equal(hostState.isHost, true);
- assert.equal(tokenMessage.roomId, hostState.roomId);
-
- guest.send(JSON.stringify({ type: "join", roomId: hostState.roomId }));
- const guestState = await guestInbox.next("room-state");
- assert.equal(guestState.isHost, false);
-
- const hostRoll = hostInbox.next("rolled");
- const guestRoll = guestInbox.next("rolled");
- host.send(JSON.stringify({ type: "roll" }));
- const [hostMessage, guestMessage] = await Promise.all([hostRoll, guestRoll]);
- assert.deepEqual(guestMessage.roll, hostMessage.roll);
- assert.equal(
- hostMessage.roll.sum,
- hostMessage.roll.dice[0] + hostMessage.roll.dice[1],
- );
-
- const forbidden = guestInbox.next("error");
- guest.send(JSON.stringify({ type: "roll" }));
- assert.match((await forbidden).message, /Only the room host/);
-
- host.terminate();
- guest.terminate();
- await new Promise((resolve) => wss.close(resolve));
- await new Promise((resolve) => httpServer.close(resolve));
-});
-
-test("level settings and re-rolls stay authoritative across a classroom", async () => {
- const httpServer = createServer();
- const { wss } = attachDiceSyncServer(httpServer);
- await new Promise((resolve) => httpServer.listen(0, "127.0.0.1", resolve));
- const address = httpServer.address();
- const url = `ws://127.0.0.1:${address.port}/sync`;
- const host = await connect(url);
- const guest = await connect(url);
- const hostInbox = createInbox(host);
- const guestInbox = createInbox(guest);
-
- host.send(
- JSON.stringify({
- type: "create",
- settings: { gridSize: 9, undoLimit: 0, rerollLimit: 2 },
- }),
- );
- const hostState = await hostInbox.next("room-state");
- await hostInbox.next("host-token");
- assert.deepEqual(hostState.settings, {
- gridSize: 9,
- undoLimit: 0,
- rerollLimit: 2,
- });
- assert.equal(hostState.rerollsUsed, 0);
-
- guest.send(JSON.stringify({ type: "join", roomId: hostState.roomId }));
- const guestState = await guestInbox.next("room-state");
- assert.deepEqual(guestState.settings, hostState.settings);
-
- const configuredSettings = {
- gridSize: 8,
- undoLimit: 4,
- rerollLimit: 1,
- };
- const hostSettings = hostInbox.next("settings");
- const guestSettings = guestInbox.next("settings");
- host.send(
- JSON.stringify({ type: "configure", settings: configuredSettings }),
- );
- const [hostSettingsMessage, guestSettingsMessage] = await Promise.all([
- hostSettings,
- guestSettings,
- ]);
- assert.deepEqual(hostSettingsMessage.settings, configuredSettings);
- assert.deepEqual(guestSettingsMessage.settings, configuredSettings);
-
- const forbiddenConfiguration = guestInbox.next("error");
- guest.send(
- JSON.stringify({
- type: "configure",
- settings: { gridSize: 5, undoLimit: 3, rerollLimit: 3 },
- }),
- );
- assert.match((await forbiddenConfiguration).message, /Only the room host/);
-
- const firstHostRoll = hostInbox.next("rolled");
- const firstGuestRoll = guestInbox.next("rolled");
- host.send(JSON.stringify({ type: "roll" }));
- const [hostRollMessage] = await Promise.all([firstHostRoll, firstGuestRoll]);
-
- const hostReroll = hostInbox.next("rerolled");
- const guestReroll = guestInbox.next("rerolled");
- host.send(JSON.stringify({ type: "reroll" }));
- const [hostRerollMessage, guestRerollMessage] = await Promise.all([
- hostReroll,
- guestReroll,
- ]);
- assert.deepEqual(guestRerollMessage.roll, hostRerollMessage.roll);
- assert.equal(hostRerollMessage.roll.id, hostRollMessage.roll.id);
- assert.equal(hostRerollMessage.rerollsUsed, 1);
-
- const exhausted = hostInbox.next("error");
- host.send(JSON.stringify({ type: "reroll" }));
- assert.match((await exhausted).message, /no re-rolls remaining/);
-
- const firstHostReset = hostInbox.next("round-reset");
- const firstGuestReset = guestInbox.next("round-reset");
- host.send(JSON.stringify({ type: "reset" }));
- const [resetMessage] = await Promise.all([firstHostReset, firstGuestReset]);
- assert.equal(resetMessage.rerollsUsed, 0);
-
- const secondHostRoll = hostInbox.next("rolled");
- const secondGuestRoll = guestInbox.next("rolled");
- host.send(JSON.stringify({ type: "roll" }));
- await Promise.all([secondHostRoll, secondGuestRoll]);
-
- const placedUpdate = hostInbox.next("leaderboard", (message) =>
- message.leaderboard.some(
- (player) => player.id === guestState.playerId && player.placed === 1,
- ),
- );
- guest.send(
- JSON.stringify({ type: "progress", score: 8, placed: 1, finished: false }),
- );
- await placedUpdate;
-
- const alreadyPlaced = hostInbox.next("error");
- host.send(JSON.stringify({ type: "reroll" }));
- assert.match((await alreadyPlaced).message, /already been placed/);
-
- const secondHostReset = hostInbox.next("round-reset");
- const secondGuestReset = guestInbox.next("round-reset");
- host.send(JSON.stringify({ type: "reset" }));
- await Promise.all([secondHostReset, secondGuestReset]);
-
- const newcomer = await connect(url);
- const newcomerInbox = createInbox(newcomer);
- newcomer.send(JSON.stringify({ type: "join", roomId: hostState.roomId }));
- const newcomerState = await newcomerInbox.next("room-state");
- assert.deepEqual(newcomerState.settings, configuredSettings);
- assert.equal(newcomerState.rerollsUsed, 0);
-
- host.terminate();
- guest.terminate();
- newcomer.terminate();
- await new Promise((resolve) => wss.close(resolve));
- await new Promise((resolve) => httpServer.close(resolve));
-});
diff --git a/server/index.mjs b/server/index.mjs
deleted file mode 100644
index 443c2e9..0000000
--- a/server/index.mjs
+++ /dev/null
@@ -1,99 +0,0 @@
-import { createReadStream, existsSync } from "node:fs";
-import { stat } from "node:fs/promises";
-import { createServer } from "node:http";
-import path from "node:path";
-import { fileURLToPath } from "node:url";
-import { attachDiceSyncServer } from "./dice-sync.mjs";
-
-const serverDir = path.dirname(fileURLToPath(import.meta.url));
-const distDir = path.resolve(serverDir, "../dist");
-const port = Number(process.env.PORT || 3000);
-
-const contentTypes = {
- ".css": "text/css; charset=utf-8",
- ".html": "text/html; charset=utf-8",
- ".ico": "image/x-icon",
- ".jpeg": "image/jpeg",
- ".jpg": "image/jpeg",
- ".js": "text/javascript; charset=utf-8",
- ".json": "application/json; charset=utf-8",
- ".png": "image/png",
- ".svg": "image/svg+xml",
- ".webp": "image/webp",
- ".woff": "font/woff",
- ".woff2": "font/woff2",
-};
-
-const sendFile = async (request, response, filePath) => {
- const fileStat = await stat(filePath);
- response.writeHead(200, {
- "Content-Type":
- contentTypes[path.extname(filePath)] || "application/octet-stream",
- "Content-Length": fileStat.size,
- "Cache-Control": filePath.endsWith("index.html")
- ? "no-cache"
- : "public, max-age=31536000, immutable",
- });
- if (request.method === "HEAD") response.end();
- else createReadStream(filePath).pipe(response);
-};
-
-const httpServer = createServer(async (request, response) => {
- try {
- const requestUrl = new URL(request.url || "/", "http://localhost");
- if (requestUrl.pathname === "/api/health") {
- response.writeHead(200, {
- "Content-Type": "application/json; charset=utf-8",
- "Cache-Control": "no-store",
- });
- response.end(JSON.stringify({ ok: true }));
- return;
- }
- if (!["GET", "HEAD"].includes(request.method || "")) {
- response.writeHead(405, { Allow: "GET, HEAD" });
- response.end("Method not allowed");
- return;
- }
-
- const decodedPath = decodeURIComponent(requestUrl.pathname);
- const requestedFile = path.resolve(distDir, `.${decodedPath}`);
- const safePath = requestedFile.startsWith(`${distDir}${path.sep}`)
- ? requestedFile
- : path.join(distDir, "index.html");
- let filePath = path.join(distDir, "404.html");
- if (existsSync(safePath)) {
- const safeStat = await stat(safePath);
- if (safeStat.isFile()) filePath = safePath;
- else if (
- safeStat.isDirectory() &&
- existsSync(path.join(safePath, "index.html"))
- )
- filePath = path.join(safePath, "index.html");
- }
- await sendFile(request, response, filePath);
- } catch {
- response.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" });
- response.end("Internal server error");
- }
-});
-
-attachDiceSyncServer(httpServer);
-
-httpServer.listen(port, "0.0.0.0", () => {
- console.log(`Interactives is listening on port ${port}`);
- if (
- typeof process.getuid === "function" &&
- process.getuid() === 0 &&
- typeof process.setuid === "function"
- ) {
- try {
- process.setuid("node");
- } catch {
- // The container can still run safely with its filesystem mounted read-only by the platform.
- }
- }
-});
-
-const shutdown = () => httpServer.close(() => process.exit(0));
-process.on("SIGTERM", shutdown);
-process.on("SIGINT", shutdown);
diff --git a/src/App.css b/src/App.css
new file mode 100644
index 0000000..b9d355d
--- /dev/null
+++ b/src/App.css
@@ -0,0 +1,42 @@
+#root {
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 2rem;
+ text-align: center;
+}
+
+.logo {
+ height: 6em;
+ padding: 1.5em;
+ will-change: filter;
+ transition: filter 300ms;
+}
+.logo:hover {
+ filter: drop-shadow(0 0 2em #646cffaa);
+}
+.logo.react:hover {
+ filter: drop-shadow(0 0 2em #61dafbaa);
+}
+
+@keyframes logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ a:nth-of-type(2) .logo {
+ animation: logo-spin infinite 20s linear;
+ }
+}
+
+.card {
+ padding: 2em;
+}
+
+.read-the-docs {
+ color: #888;
+}
diff --git a/src/App.tsx b/src/App.tsx
new file mode 100644
index 0000000..f94e757
--- /dev/null
+++ b/src/App.tsx
@@ -0,0 +1,165 @@
+import { Toaster } from "@/components/ui/toaster";
+import { Toaster as Sonner } from "@/components/ui/sonner";
+import { TooltipProvider } from "@/components/ui/tooltip";
+import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
+import ErrorBoundary from "@/components/ErrorBoundary";
+import CommandSearch from "@/components/CommandSearch";
+import { BrowserRouter, Routes, Route } from "react-router-dom";
+import Index from "./pages/Index";
+import InteractiveIndex from "./components/InteractiveIndex";
+import Themes from "./pages/Themes";
+import About from "./pages/About";
+import DiscreteMath from "./pages/theme-pages/DiscreteMath";
+import SocialChoice from "./pages/theme-pages/SocialChoice";
+import AdvancedAlgorithms from "./pages/theme-pages/AdvancedAlgorithms";
+import DataStructures from "./pages/theme-pages/DataStructures";
+import Games from "./pages/theme-pages/Games";
+import CardsMath from "./pages/theme-pages/CardsMath";
+import Puzzles from "./pages/theme-pages/Puzzles";
+import Miscellany from "./pages/theme-pages/Miscellany";
+import ContestProblems from "./pages/theme-pages/ContestProblems";
+import BinaryNumberGamePage from "./pages/BinaryNumberGamePage";
+import BinaryNumberGameGreenScreen from "./pages/BinaryNumberGameGreenScreen";
+import TernaryNumberGamePage from "./pages/TernaryNumberGamePage";
+import BalancedTernaryGamePage from "./pages/BalancedTernaryGamePage";
+import BinarySearchTrickPage from "./pages/BinarySearchTrickPage";
+import BinarySearchTrickGreenScreen from "./pages/BinarySearchTrickGreenScreen";
+import GameOfSimGreenScreen from "./pages/GameOfSimGreenScreen";
+import GameOfSimPage from "./pages/GameOfSimPage";
+import TernarySearchTrickPage from "./pages/TernarySearchTrickPage";
+import TernarySearchTrickGreenScreen from "./pages/TernarySearchTrickGreenScreen";
+import NorthcottsGamePage from "./pages/NorthcottsGamePage";
+import KnightsPuzzlePage from "./pages/KnightsPuzzlePage";
+import NimGamePage from "./pages/NimGamePage";
+import AssistedNimGamePage from "./pages/AssistedNimGamePage";
+import GoldCoinGamePage from "./pages/GoldCoinGamePage";
+import PlateSwapPuzzlePage from "./pages/PlateSwapPuzzlePage";
+import ChessboardRepaintPuzzlePage from "./pages/ChessboardRepaintPuzzlePage";
+import ZeckendorfGamePage from "./pages/ZeckendorfGamePage";
+import ZeckendorfSearchTrickPage from "./pages/ZeckendorfSearchTrickPage";
+import GuessingGamePage from "./pages/GuessingGamePage";
+import Foundations from "./pages/theme-pages/discrete-math/Foundations";
+import Proofs from "./pages/theme-pages/discrete-math/Proofs";
+import Counting from "./pages/theme-pages/discrete-math/Counting";
+import Uncertainty from "./pages/theme-pages/discrete-math/Uncertainty";
+import Structures from "./pages/theme-pages/discrete-math/Structures";
+import Numbers from "./pages/theme-pages/discrete-math/Numbers";
+import Graphs from "./pages/theme-pages/discrete-math/Graphs";
+import NotFound from "./pages/NotFound";
+import GridTilingPuzzlePage from './pages/GridTilingPuzzlePage';
+import SunnyLinesPuzzlePage from './pages/SunnyLinesPuzzlePage';
+import SikiniaParliamentPuzzlePage from './pages/SikiniaParliamentPuzzlePage';
+import NQueensPuzzlePage from './pages/NQueensPuzzlePage';
+import RulesOfInferencePlaygroundPage from './pages/RulesOfInferencePlaygroundPage';
+import PebblePlacementGamePage from './pages/PebblePlacementGamePage';
+import BulgarianSolitairePage from './pages/BulgarianSolitairePage';
+import SubtractionGamePage from './pages/SubtractionGamePage';
+import StackingBlocksPage from './pages/StackingBlocksPage';
+import ParityBitsGamePage from './pages/ParityBitsGamePage';
+import CrapsGamePage from './pages/CrapsGamePage';
+import NeighborSumAvoidancePage from './pages/NeighborSumAvoidancePage';
+import BurnsidesLemmaPage from './pages/BurnsidesLemmaPage';
+import CubeColoringPage from './pages/CubeColoringPage';
+import PresentsPuzzlePage from './pages/PresentsPuzzlePage';
+import FerrersRogersRamanujanPage from './pages/FerrersRogersRamanujanPage';
+import DominoRetilingPuzzlePage from './pages/DominoRetilingPuzzlePage';
+import RentDivisionPuzzlePage from './pages/RentDivisionPuzzlePage';
+import BagchalGamePage from './pages/BagchalGamePage';
+import AscDescGridPuzzlePage from './pages/AscDescGridPuzzlePage';
+import EternalDominationGamePage from './pages/EternalDominationGamePage';
+import LadybugClockPuzzlePage from './pages/LadybugClockPuzzlePage';
+import ErdosDiscrepancyPuzzlePage from './pages/ErdosDiscrepancyPuzzlePage';
+
+const queryClient = new QueryClient();
+
+const App = () => (
+
+
+
+
+
+
+
+
+ } />
+ } />
+ } />
+ } />
+
+ {/* Theme-specific routes */}
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+
+ {/* Direct interactive routes */}
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+
+ {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */}
+ } />
+
+
+
+
+
+);
+
+export default App;
diff --git a/src/assets/fig10-reference.jpg b/src/assets/fig10-reference.jpg
new file mode 100644
index 0000000..935096a
Binary files /dev/null and b/src/assets/fig10-reference.jpg differ
diff --git a/src/components/AddIdeaForm.tsx b/src/components/AddIdeaForm.tsx
deleted file mode 100644
index d2b3445..0000000
--- a/src/components/AddIdeaForm.tsx
+++ /dev/null
@@ -1,104 +0,0 @@
-import React, { useState, useEffect } from "react";
-import { Button } from "@/components/ui/button";
-import { Input } from "@/components/ui/input";
-import { Textarea } from "@/components/ui/textarea";
-import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog";
-import { Plus } from "lucide-react";
-import { isAdminLoggedIn, addIdea } from "@/lib/admin";
-
-interface AddIdeaFormProps {
- defaultTheme?: string;
- defaultSubcategory?: string;
-}
-
-const AddIdeaForm: React.FC = ({
- defaultTheme,
- defaultSubcategory,
-}) => {
- const [isAdmin, setIsAdmin] = useState(false);
- const [open, setOpen] = useState(false);
- const [title, setTitle] = useState("");
- const [description, setDescription] = useState("");
- const [saved, setSaved] = useState(false);
-
- useEffect(() => {
- setIsAdmin(isAdminLoggedIn());
- }, []);
-
- if (!isAdmin) return null;
-
- const handleSubmit = (e: React.FormEvent) => {
- e.preventDefault();
- if (!title.trim()) return;
-
- addIdea({
- title: title.trim(),
- description: description.trim(),
- themes: defaultTheme ? [defaultTheme] : [],
- subcategory: defaultSubcategory,
- status: "idea",
- notes: "",
- });
-
- setTitle("");
- setDescription("");
- setSaved(true);
- setTimeout(() => {
- setSaved(false);
- setOpen(false);
- }, 1000);
- };
-
- return (
-
-
-
-
- Add Idea
-
-
-
-
- New Interactive Idea
-
-
-
-
- );
-};
-
-export default AddIdeaForm;
diff --git a/src/components/AdminBar.tsx b/src/components/AdminBar.tsx
deleted file mode 100644
index 8cde066..0000000
--- a/src/components/AdminBar.tsx
+++ /dev/null
@@ -1,344 +0,0 @@
-import React, { useState, useEffect } from "react";
-import { Button } from "@/components/ui/button";
-import { Badge } from "@/components/ui/badge";
-import { Input } from "@/components/ui/input";
-import { Textarea } from "@/components/ui/textarea";
-import { Checkbox } from "@/components/ui/checkbox";
-import {
- Shield, StickyNote, ChevronDown, ChevronUp, Save, Check,
- Loader2, Plus, Trash2, ListTodo, MessageSquare,
-} from "lucide-react";
-import {
- isAdminLoggedIn,
- getNote,
- setNote,
- getStatusOverride,
- setStatusOverride,
- commitStatus,
- syncFromServer,
- getTodos,
- addTodo,
- toggleTodo,
- removeTodo,
- updateTodoRemark,
- type TodoItem,
-} from "@/lib/admin";
-import type { InteractiveStatus } from "@/lib/interactives";
-
-interface AdminBarProps {
- slug: string;
- currentStatus: InteractiveStatus;
-}
-
-const statusOptions: { value: InteractiveStatus; label: string; color: string }[] = [
- { value: "published", label: "Published", color: "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200" },
- { value: "draft", label: "Draft", color: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200" },
-];
-
-const TodoRow: React.FC<{
- todo: TodoItem;
- slug: string;
- onToggle: () => void;
- onRemove: () => void;
- onRemarkChange: (remark: string) => void;
-}> = ({ todo, slug, onToggle, onRemove, onRemarkChange }) => {
- const [showRemark, setShowRemark] = useState(false);
- const [remarkText, setRemarkText] = useState(todo.remark || "");
-
- const handleRemarkBlur = () => {
- if (remarkText !== (todo.remark || "")) {
- onRemarkChange(remarkText);
- }
- };
-
- return (
-
-
-
-
-
- {todo.refId}
-
- {todo.text}
-
-
- {todo.done && todo.doneDate && (
-
Done {todo.doneDate}
- )}
- {todo.remark && !showRemark && (
-
{todo.remark}
- )}
- {showRemark && (
-
setRemarkText(e.target.value)}
- onBlur={handleRemarkBlur}
- onKeyDown={(e) => { if (e.key === "Enter") { handleRemarkBlur(); setShowRemark(false); } }}
- placeholder="Add a remark..."
- className="text-xs h-7 mt-1"
- autoFocus
- />
- )}
-
-
- setShowRemark((v) => !v)}
- className="p-1 text-muted-foreground hover:text-foreground"
- title="Add remark"
- >
-
-
-
-
-
-
-
-
- );
-};
-
-const AdminBar: React.FC = ({ slug, currentStatus }) => {
- const [isAdmin, setIsAdmin] = useState(false);
- const [expanded, setExpanded] = useState(false);
- const [status, setStatus] = useState(currentStatus);
- const [noteText, setNoteText] = useState("");
- const [hasOverride, setHasOverride] = useState(false);
- const [saving, setSaving] = useState(false);
- const [saved, setSaved] = useState(false);
- const [todos, setTodos] = useState([]);
- const [newTodo, setNewTodo] = useState("");
-
- const refreshTodos = () => setTodos(getTodos(slug));
-
- useEffect(() => {
- const admin = isAdminLoggedIn();
- setIsAdmin(admin);
- if (admin) {
- syncFromServer().finally(() => {
- const override = getStatusOverride(slug);
- if (override) {
- setStatus(override);
- setHasOverride(true);
- }
- setNoteText(getNote(slug));
- refreshTodos();
- });
- }
- }, [slug]);
-
- if (!isAdmin) return null;
-
- const handleStatusChange = (newStatus: InteractiveStatus) => {
- setStatus(newStatus);
- setStatusOverride(slug, newStatus);
- setHasOverride(true);
- setSaved(false);
- };
-
- const handleNoteChange = (value: string) => {
- setNoteText(value);
- setNote(slug, value);
- };
-
- const handleSave = async () => {
- setSaving(true);
- const success = await commitStatus(slug, status);
- setSaving(false);
- if (success) {
- setHasOverride(false);
- setSaved(true);
- setTimeout(() => setSaved(false), 2000);
- }
- };
-
- const handleAddTodo = (e: React.FormEvent) => {
- e.preventDefault();
- if (!newTodo.trim()) return;
- addTodo(slug, newTodo.trim());
- setNewTodo("");
- refreshTodos();
- };
-
- const handleToggleTodo = (todoId: string) => {
- toggleTodo(slug, todoId);
- refreshTodos();
- };
-
- const handleRemoveTodo = (todoId: string) => {
- removeTodo(slug, todoId);
- refreshTodos();
- };
-
- const handleRemarkChange = (todoId: string, remark: string) => {
- updateTodoRemark(slug, todoId, remark);
- refreshTodos();
- };
-
- const isDirty = hasOverride;
- const doneCount = todos.filter((t) => t.done).length;
- const hasTodos = todos.length > 0;
- const openTodos = todos.filter((t) => !t.done);
- const doneTodos = todos.filter((t) => t.done);
-
- return (
-
-
setExpanded((v) => !v)}
- className="w-full flex items-center justify-between px-4 py-2 text-sm"
- >
-
-
- Admin
- {isDirty && (
-
- unsaved
-
- )}
- {saved && (
-
- saved
-
- )}
- {noteText && (
-
- )}
- {hasTodos && (
-
-
- {doneCount}/{todos.length}
-
- )}
-
-
- o.value === status)?.color || ""
- }`}>
- {status}
-
- {expanded ? (
-
- ) : (
-
- )}
-
-
-
- {expanded && (
-
- {/* Status control */}
-
-
- Status
-
-
-
- {statusOptions.map((opt) => (
- handleStatusChange(opt.value)}
- className={`rounded-full px-3 py-1 text-xs font-medium transition-all ${
- status === opt.value
- ? `${opt.color} ring-2 ring-offset-1 ring-current`
- : "bg-muted text-muted-foreground hover:bg-muted/80"
- }`}
- >
- {opt.label}
-
- ))}
-
-
- {saving ? (
-
- ) : saved ? (
-
- ) : (
-
- )}
- {saving ? "Saving..." : saved ? "Saved" : "Save"}
-
-
-
-
- {/* Todos */}
-
-
- Todos {hasTodos && ({doneCount}/{todos.length} done) }
-
- {openTodos.length > 0 && (
-
- {openTodos.map((todo) => (
- handleToggleTodo(todo.id)}
- onRemove={() => handleRemoveTodo(todo.id)}
- onRemarkChange={(r) => handleRemarkChange(todo.id, r)}
- />
- ))}
-
- )}
- {doneTodos.length > 0 && (
-
-
- {doneTodos.length} completed
-
-
- {doneTodos.map((todo) => (
- handleToggleTodo(todo.id)}
- onRemove={() => handleRemoveTodo(todo.id)}
- onRemarkChange={(r) => handleRemarkChange(todo.id, r)}
- />
- ))}
-
-
- )}
-
- setNewTodo(e.target.value)}
- placeholder="Add a todo... (use T1, T2 to reference others)"
- className="text-sm h-8"
- />
-
-
-
-
-
-
- {/* Notes */}
-
-
- Notes
-
- handleNoteChange(e.target.value)}
- placeholder="Add private notes about this interactive..."
- rows={3}
- className="text-sm"
- />
-
-
- )}
-
- );
-};
-
-export default AdminBar;
diff --git a/src/components/AdminDashboard.tsx b/src/components/AdminDashboard.tsx
deleted file mode 100644
index 4de0a8b..0000000
--- a/src/components/AdminDashboard.tsx
+++ /dev/null
@@ -1,459 +0,0 @@
-import React, { useState, useEffect } from "react";
-import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
-import { Badge } from "@/components/ui/badge";
-import { Input } from "@/components/ui/input";
-import { Button } from "@/components/ui/button";
-import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
-import {
- Lock, Search, ExternalLink, LogOut, Trash2, StickyNote,
- Lightbulb, ListTodo, CheckCircle, Circle,
-} from "lucide-react";
-import {
- allInteractives,
- type InteractiveStatus,
-} from "@/lib/interactives";
-import {
- ADMIN_PASSWORD,
- isAdminLoggedIn,
- setAdminLoggedIn,
- getAllStatusOverrides,
- getAllNotes,
- getIdeas,
- removeIdea,
- syncFromServer,
- deleteInteractive,
- getTodos,
- type IdeaEntry,
- type TodoItem,
-} from "@/lib/admin";
-
-const statusColors: Record = {
- published: "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200",
- draft: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200",
- idea: "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200",
-};
-
-const AdminDashboard: React.FC = () => {
- const [authenticated, setAuthenticated] = useState(false);
- const [password, setPassword] = useState("");
- const [error, setError] = useState(false);
- const [searchTerm, setSearchTerm] = useState("");
- const [filterStatus, setFilterStatus] = useState("all");
- const [filterTheme, setFilterTheme] = useState("all");
- const [overrides, setOverrides] = useState>({});
- const [notes, setNotes] = useState>({});
- const [ideas, setIdeas] = useState([]);
- const [allTodos, setAllTodos] = useState<{ slug: string; title: string; todos: TodoItem[] }[]>([]);
- const [todoFilter, setTodoFilter] = useState<"open" | "done" | "all">("open");
- const [deleting, setDeleting] = useState(null);
- const [interactivesPage, setInteractivesPage] = useState(1);
- const [todosPage, setTodosPage] = useState(1);
- const [ideasPage, setIdeasPage] = useState(1);
- const PAGE_SIZE = 20;
-
- useEffect(() => {
- if (isAdminLoggedIn()) setAuthenticated(true);
- }, []);
-
- const refreshFromStorage = () => {
- setOverrides(getAllStatusOverrides());
- setNotes(getAllNotes());
- setIdeas(getIdeas());
- // Load todos for all interactives
- const todosData = allInteractives
- .map((i) => ({ slug: i.slug, title: i.title, todos: getTodos(i.slug) }))
- .filter((t) => t.todos.length > 0);
- setAllTodos(todosData);
- };
-
- useEffect(() => {
- if (authenticated) {
- syncFromServer().then(refreshFromStorage).catch(refreshFromStorage);
- }
- }, [authenticated]);
-
- // Reset pagination when filters change
- useEffect(() => { setInteractivesPage(1); }, [searchTerm, filterStatus, filterTheme]);
- useEffect(() => { setTodosPage(1); }, [todoFilter]);
- useEffect(() => { setIdeasPage(1); }, [searchTerm, filterStatus, filterTheme]);
-
- const handleLogin = (e: React.FormEvent) => {
- e.preventDefault();
- if (password === ADMIN_PASSWORD) {
- setAdminLoggedIn(true);
- setAuthenticated(true);
- setError(false);
- } else {
- setError(true);
- }
- };
-
- const handleLogout = () => {
- setAdminLoggedIn(false);
- setAuthenticated(false);
- setPassword("");
- };
-
- if (!authenticated) {
- return (
-
-
-
-
-
- Admin Login
-
-
-
-
- { setPassword(e.target.value); setError(false); }}
- autoFocus
- />
- {error && Incorrect password.
}
- Sign In
-
-
-
-
- );
- }
-
- const effectiveStatus = (slug: string, sourceStatus: InteractiveStatus) =>
- overrides[slug] || sourceStatus;
-
- const filteredInteractives = allInteractives.filter((i) => {
- const matchesSearch = !searchTerm || i.title.toLowerCase().includes(searchTerm.toLowerCase()) || i.slug.toLowerCase().includes(searchTerm.toLowerCase());
- const status = effectiveStatus(i.slug, i.status);
- const matchesStatus = filterStatus === "all" || status === filterStatus;
- const matchesTheme = filterTheme === "all" || i.themes.includes(filterTheme);
- return matchesSearch && matchesStatus && matchesTheme;
- });
-
- const filteredIdeas = ideas.filter((idea) => {
- const matchesSearch = !searchTerm || idea.title.toLowerCase().includes(searchTerm.toLowerCase()) || idea.description.toLowerCase().includes(searchTerm.toLowerCase());
- const matchesStatus = filterStatus === "all" || filterStatus === "idea";
- const matchesTheme = filterTheme === "all" || idea.themes.includes(filterTheme);
- return matchesSearch && matchesStatus && matchesTheme;
- });
-
- const counts = {
- published: allInteractives.filter((i) => effectiveStatus(i.slug, i.status) === "published").length,
- draft: allInteractives.filter((i) => effectiveStatus(i.slug, i.status) === "draft").length,
- idea: allInteractives.filter((i) => effectiveStatus(i.slug, i.status) === "idea").length + ideas.length,
- };
-
- const uniqueThemes = Array.from(new Set([...allInteractives.flatMap((i) => i.themes), ...ideas.flatMap((i) => i.themes)])).sort();
- const hasOverrides = Object.keys(overrides).length > 0;
-
- const handleRemoveIdea = (id: string) => { removeIdea(id); refreshFromStorage(); };
-
- const handleDeleteInteractive = async (slug: string) => {
- if (!confirm(`Delete "${slug}" permanently? This removes it from interactives.ts.`)) return;
- setDeleting(slug);
- await deleteInteractive(slug);
- setDeleting(null);
- // Page needs reload since allInteractives is static
- window.location.reload();
- };
-
- // Todos aggregation
- const totalOpenTodos = allTodos.reduce((sum, t) => sum + t.todos.filter((x) => !x.done).length, 0);
- const totalDoneTodos = allTodos.reduce((sum, t) => sum + t.todos.filter((x) => x.done).length, 0);
-
- const filteredTodos = allTodos
- .map((entry) => ({
- ...entry,
- todos: entry.todos.filter((t) => {
- if (todoFilter === "open") return !t.done;
- if (todoFilter === "done") return t.done;
- return true;
- }),
- }))
- .filter((entry) => entry.todos.length > 0);
-
- return (
-
-
-
Admin Dashboard
-
- Sign Out
-
-
-
- {/* Status summary */}
-
- {(["published", "draft", "idea"] as const).map((s) => {
- const colors = { published: "text-green-600", draft: "text-yellow-600", idea: "text-blue-600" };
- const rings = { published: "ring-green-500", draft: "ring-yellow-500", idea: "ring-blue-500" };
- return (
-
setFilterStatus(filterStatus === s ? "all" : s)}>
-
- {counts[s]}
- {s}
-
-
- );
- })}
-
-
- {hasOverrides && (
-
-
- {Object.keys(overrides).length} pending status change(s) — use the Save button on each interactive's page to commit.
-
-
- )}
-
-
-
- Interactives
-
- Todos
- {totalOpenTodos > 0 && (
- {totalOpenTodos}
- )}
-
-
- Ideas
- {ideas.length > 0 && (
- {ideas.length}
- )}
-
-
-
- {/* ─── Interactives Tab ─── */}
-
-
-
-
- setSearchTerm(e.target.value)} className="pl-10" />
-
-
setFilterStatus(e.target.value as any)} className="rounded-md border border-input bg-background px-3 py-2 text-sm">
- All statuses
- Published
- Draft
- Idea
-
-
setFilterTheme(e.target.value)} className="rounded-md border border-input bg-background px-3 py-2 text-sm">
- All themes
- {uniqueThemes.map((t) => {t} )}
-
-
-
-
- Showing {filteredInteractives.length} of {allInteractives.length}
-
-
- {filteredInteractives.length > 0 && (() => {
- const totalInteractivesPages = Math.ceil(filteredInteractives.length / PAGE_SIZE);
- const paginatedInteractives = filteredInteractives.slice((interactivesPage - 1) * PAGE_SIZE, interactivesPage * PAGE_SIZE);
- return (<>
-
-
-
-
- Interactive
- Theme
- Status
- Added
-
-
-
-
- {paginatedInteractives.map((item) => {
- const status = effectiveStatus(item.slug, item.status);
- const hasNote = notes[item.slug];
- const todoCount = getTodos(item.slug).filter((t) => !t.done).length;
- return (
-
-
-
-
-
{item.title}
-
{item.slug}
-
- {hasNote &&
}
- {todoCount > 0 && (
-
- {todoCount}
-
- )}
-
-
-
-
- {item.themes.map((t) => {t} )}
-
-
-
- {status}
-
- {item.dateAdded}
-
-
-
-
-
-
handleDeleteInteractive(item.slug)}
- disabled={deleting === item.slug}
- className="text-muted-foreground hover:text-destructive disabled:opacity-50"
- title="Delete interactive"
- >
-
-
-
-
-
- );
- })}
-
-
-
- {totalInteractivesPages > 1 && (
-
- setInteractivesPage(p => p - 1)} disabled={interactivesPage === 1}>Previous
- Page {interactivesPage} of {totalInteractivesPages}
- setInteractivesPage(p => p + 1)} disabled={interactivesPage === totalInteractivesPages}>Next
-
- )}
- >);
- })()}
-
-
- {/* ─── Todos Tab ─── */}
-
-
-
-
- {totalOpenTodos} open, {totalDoneTodos} done
-
-
-
- {(["open", "done", "all"] as const).map((f) => (
- setTodoFilter(f)}>
- {f === "open" ? "Open" : f === "done" ? "Done" : "All"}
-
- ))}
-
-
-
- {filteredTodos.length === 0 && (
-
-
- {todoFilter === "open" ? "No open todos." : todoFilter === "done" ? "No completed todos." : "No todos."}
-
-
- )}
-
- {(() => {
- const totalTodosPages = Math.ceil(filteredTodos.length / PAGE_SIZE);
- const paginatedTodos = filteredTodos.slice((todosPage - 1) * PAGE_SIZE, todosPage * PAGE_SIZE);
- return (<>
- {paginatedTodos.map((entry) => (
-
-
-
-
- {entry.title}
-
- {entry.slug}
-
-
-
-
- {entry.todos.map((todo) => (
-
- {todo.done ? (
-
- ) : (
-
- )}
-
-
- {todo.refId}
-
- {todo.text}
-
-
- {todo.remark && (
-
{todo.remark}
- )}
- {todo.done && todo.doneDate && (
-
Done {todo.doneDate}
- )}
-
-
- ))}
-
-
-
- ))}
- {totalTodosPages > 1 && (
-
- setTodosPage(p => p - 1)} disabled={todosPage === 1}>Previous
- Page {todosPage} of {totalTodosPages}
- setTodosPage(p => p + 1)} disabled={todosPage === totalTodosPages}>Next
-
- )}
- >);
- })()}
-
-
- {/* ─── Ideas Tab ─── */}
-
- {ideas.length === 0 && (
-
-
No ideas yet. Add ideas from theme or subcategory pages.
-
- )}
- {(() => {
- const totalIdeasPages = Math.ceil(filteredIdeas.length / PAGE_SIZE);
- const paginatedIdeas = filteredIdeas.slice((ideasPage - 1) * PAGE_SIZE, ideasPage * PAGE_SIZE);
- return (<>
-
- {paginatedIdeas.map((idea) => (
-
- handleRemoveIdea(idea.id)} className="absolute top-3 right-3 text-muted-foreground hover:text-destructive">
-
-
-
-
-
- {idea.title}
-
-
-
- {idea.description && {idea.description}
}
-
- {idea.themes.map((t) => {t} )}
- {idea.subcategory && {idea.subcategory} }
-
- Added {idea.createdAt}
-
-
- ))}
-
- {totalIdeasPages > 1 && (
-
- setIdeasPage(p => p - 1)} disabled={ideasPage === 1}>Previous
- Page {ideasPage} of {totalIdeasPages}
- setIdeasPage(p => p + 1)} disabled={ideasPage === totalIdeasPages}>Next
-
- )}
- >);
- })()}
-
-
-
- );
-};
-
-export default AdminDashboard;
diff --git a/src/components/AdminDraftCards.tsx b/src/components/AdminDraftCards.tsx
deleted file mode 100644
index 194c5e4..0000000
--- a/src/components/AdminDraftCards.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import React, { useState, useEffect } from "react";
-import { Badge } from "@/components/ui/badge";
-import { FileEdit } from "lucide-react";
-import { isAdminLoggedIn, syncFromServer, getAllStatusOverrides } from "@/lib/admin";
-import { allInteractives, type InteractiveStatus } from "@/lib/interactives";
-
-interface AdminDraftCardsProps {
- theme?: string;
- subcategory?: string;
-}
-
-const AdminDraftCards: React.FC = ({ theme, subcategory }) => {
- const [isAdmin, setIsAdmin] = useState(false);
- const [drafts, setDrafts] = useState([]);
-
- useEffect(() => {
- const admin = isAdminLoggedIn();
- setIsAdmin(admin);
- if (admin) {
- syncFromServer().finally(() => {
- const overrides = getAllStatusOverrides();
- const filtered = allInteractives.filter((i) => {
- const effectiveStatus: InteractiveStatus = overrides[i.slug] || i.status;
- if (effectiveStatus !== "draft") return false;
- if (theme && !i.themes.includes(theme)) return false;
- if (subcategory && i.subcategory !== subcategory) return false;
- return true;
- });
- setDrafts(filtered);
- });
- }
- }, [theme, subcategory]);
-
- if (!isAdmin || drafts.length === 0) return null;
-
- return (
- <>
- {drafts.map((item) => (
-
-
-
-
-
- {item.title}
-
-
-
- {item.description}
-
-
- draft
-
-
-
- ))}
- >
- );
-};
-
-export default AdminDraftCards;
diff --git a/src/components/AdminIdeaCards.tsx b/src/components/AdminIdeaCards.tsx
deleted file mode 100644
index 8a03a69..0000000
--- a/src/components/AdminIdeaCards.tsx
+++ /dev/null
@@ -1,183 +0,0 @@
-import React, { useState, useEffect, useRef } from "react";
-import { Badge } from "@/components/ui/badge";
-import { Button } from "@/components/ui/button";
-import { Input } from "@/components/ui/input";
-import { Textarea } from "@/components/ui/textarea";
-import { Lightbulb, Pencil, Trash2, Check, X } from "lucide-react";
-import {
- isAdminLoggedIn,
- getIdeas,
- syncFromServer,
- updateIdea,
- removeIdea,
- type IdeaEntry,
-} from "@/lib/admin";
-
-interface AdminIdeaCardsProps {
- theme?: string;
- subcategory?: string;
-}
-
-const IdeaCard: React.FC<{
- idea: IdeaEntry;
- onUpdate: (id: string, updates: Partial) => void;
- onRemove: (id: string) => void;
-}> = ({ idea, onUpdate, onRemove }) => {
- const [editing, setEditing] = useState(false);
- const [title, setTitle] = useState(idea.title);
- const [description, setDescription] = useState(idea.description);
- const [notes, setNotes] = useState(idea.notes || "");
- const titleRef = useRef(null);
-
- useEffect(() => {
- if (editing && titleRef.current) {
- titleRef.current.focus();
- }
- }, [editing]);
-
- const handleSave = () => {
- onUpdate(idea.id, { title, description, notes });
- setEditing(false);
- };
-
- const handleCancel = () => {
- setTitle(idea.title);
- setDescription(idea.description);
- setNotes(idea.notes || "");
- setEditing(false);
- };
-
- const handleKeyDown = (e: React.KeyboardEvent) => {
- if (e.key === "Escape") handleCancel();
- };
-
- if (editing) {
- return (
-
-
setTitle(e.target.value)}
- className="text-sm font-semibold"
- placeholder="Title"
- />
-
setDescription(e.target.value)}
- className="text-sm"
- placeholder="Description"
- rows={2}
- />
- setNotes(e.target.value)}
- className="text-xs"
- placeholder="Private notes..."
- rows={2}
- />
-
-
- Save
-
-
- Cancel
-
-
-
- );
- }
-
- return (
-
-
-
setEditing(true)}
- className="p-1 rounded hover:bg-blue-200 dark:hover:bg-blue-800 text-blue-500"
- >
-
-
-
onRemove(idea.id)}
- className="p-1 rounded hover:bg-red-200 dark:hover:bg-red-800 text-red-400"
- >
-
-
-
-
-
-
- {idea.title}
-
-
- {idea.description && (
-
- {idea.description}
-
- )}
- {idea.notes && (
-
- {idea.notes}
-
- )}
-
- idea
-
-
- );
-};
-
-const AdminIdeaCards: React.FC = ({ theme, subcategory }) => {
- const [isAdmin, setIsAdmin] = useState(false);
- const [ideas, setIdeas] = useState([]);
-
- const loadIdeas = () => {
- const all = getIdeas();
- const filtered = all.filter((idea) => {
- if (theme && !idea.themes.includes(theme)) return false;
- if (subcategory && idea.subcategory !== subcategory) return false;
- return true;
- });
- setIdeas(filtered);
- };
-
- useEffect(() => {
- const admin = isAdminLoggedIn();
- setIsAdmin(admin);
- if (admin) {
- syncFromServer().finally(loadIdeas);
- }
- }, [theme, subcategory]);
-
- const handleUpdate = (id: string, updates: Partial) => {
- updateIdea(id, updates);
- loadIdeas();
- };
-
- const handleRemove = (id: string) => {
- removeIdea(id);
- loadIdeas();
- };
-
- if (!isAdmin || ideas.length === 0) return null;
-
- return (
- <>
- {ideas.map((idea) => (
-
- ))}
- >
- );
-};
-
-export default AdminIdeaCards;
diff --git a/src/components/interactives/AscDescGridPuzzle.tsx b/src/components/AscDescGridPuzzle.tsx
similarity index 97%
rename from src/components/interactives/AscDescGridPuzzle.tsx
rename to src/components/AscDescGridPuzzle.tsx
index 76c5419..acb3e8b 100644
--- a/src/components/interactives/AscDescGridPuzzle.tsx
+++ b/src/components/AscDescGridPuzzle.tsx
@@ -4,13 +4,15 @@ import { Slider } from "@/components/ui/slider";
import { Badge } from "@/components/ui/badge";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { RotateCcw, Check, Shuffle, Lightbulb } from "lucide-react";
+import SocialShare from "./SocialShare";
type Label = 'A' | 'D';
interface AscDescGridPuzzleProps {
+ showSocialShare?: boolean;
}
-const AscDescGridPuzzle = ({}: AscDescGridPuzzleProps) => {
+const AscDescGridPuzzle = ({ showSocialShare = true }: AscDescGridPuzzleProps) => {
const [gridSize, setGridSize] = useState(3);
const [rowLabels, setRowLabels] = useState(['A', 'D', 'A']);
const [colLabels, setColLabels] = useState(['A', 'D', 'A']);
@@ -421,6 +423,13 @@ const AscDescGridPuzzle = ({}: AscDescGridPuzzleProps) => {
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/AssistedNimGame.tsx b/src/components/AssistedNimGame.tsx
similarity index 97%
rename from src/components/interactives/AssistedNimGame.tsx
rename to src/components/AssistedNimGame.tsx
index a30c626..d04028c 100644
--- a/src/components/interactives/AssistedNimGame.tsx
+++ b/src/components/AssistedNimGame.tsx
@@ -3,6 +3,7 @@ import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/com
import { Button } from '@/components/ui/button';
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';
import { Slider } from '@/components/ui/slider';
+import SocialShare from '@/components/SocialShare';
const SKY_BLUE = '#e0f2fe';
const MAROON = '#800000';
@@ -66,9 +67,10 @@ const getOddPowers = (heaps: number[]): Set => {
};
interface AssistedNimGameProps {
+ showSocialShare?: boolean;
}
-const AssistedNimGame: React.FC = () => {
+const AssistedNimGame: React.FC = ({ showSocialShare = true }) => {
const [mode, setMode] = useState(null);
const [showSetup, setShowSetup] = useState(false);
const [userHeapCount, setUserHeapCount] = useState(3);
@@ -385,6 +387,13 @@ const AssistedNimGame: React.FC = () => {
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/BagchalGame.tsx b/src/components/BagchalGame.tsx
similarity index 98%
rename from src/components/interactives/BagchalGame.tsx
rename to src/components/BagchalGame.tsx
index bcd4a5c..ad3635e 100644
--- a/src/components/interactives/BagchalGame.tsx
+++ b/src/components/BagchalGame.tsx
@@ -5,8 +5,10 @@ import { Slider } from '@/components/ui/slider';
import { Label } from '@/components/ui/label';
import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';
import { Badge } from '@/components/ui/badge';
+import SocialShare from '@/components/SocialShare';
interface BagchalGameProps {
+ showSocialShare?: boolean;
}
type Phase = 'setup' | 'tiger-placement' | 'goat-placement' | 'playing';
@@ -30,7 +32,7 @@ interface GameState {
selectedGoat: number | null; // index of selected goat for moving
}
-const BagchalGame: React.FC = () => {
+const BagchalGame: React.FC = ({ showSocialShare = false }) => {
// Grid parameters
const [rows, setRows] = useState(2);
const [cols, setCols] = useState(6);
@@ -751,6 +753,7 @@ const BagchalGame: React.FC = () => {
)}
+ {showSocialShare && }
);
diff --git a/src/components/interactives/BalancedTernaryGame.tsx b/src/components/BalancedTernaryGame.tsx
similarity index 96%
rename from src/components/interactives/BalancedTernaryGame.tsx
rename to src/components/BalancedTernaryGame.tsx
index f3f4bd8..beecc8c 100644
--- a/src/components/interactives/BalancedTernaryGame.tsx
+++ b/src/components/BalancedTernaryGame.tsx
@@ -5,13 +5,15 @@ import { Badge } from '@/components/ui/badge';
import { RangeSlider } from '@/components/ui/range-slider';
import { Label } from '@/components/ui/label';
import { Plus, Minus } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
const POWERS_OF_THREE = [2187, 729, 243, 81, 27, 9, 3, 1]; // 3^7 to 3^0
interface BalancedTernaryGameProps {
+ showSocialShare?: boolean;
}
-const BalancedTernaryGame: React.FC = () => {
+const BalancedTernaryGame: React.FC = ({ showSocialShare = true }) => {
const [targetNumber, setTargetNumber] = useState(0);
const [cardValues, setCardValues] = useState(new Array(8).fill(0)); // -1, 0, or 1 for each position
const [currentSum, setCurrentSum] = useState(0);
@@ -310,6 +312,14 @@ const BalancedTernaryGame: React.FC = () => {
{!hasGameStarted ? 'Start Game' : isGameWon ? 'Play Again' : 'New Game'}
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/BaseHead.astro b/src/components/BaseHead.astro
deleted file mode 100644
index 6cebbc9..0000000
--- a/src/components/BaseHead.astro
+++ /dev/null
@@ -1,123 +0,0 @@
----
-// Import the global.css file here so that it is included on
-// all pages through the use of component.
-import "../styles/global.css";
-import { Font } from "astro:assets";
-
-import { SITE_METADATA, SITE_TITLE } from "../consts";
-
-interface Props {
- title: string;
- description: string;
- image?: string;
-}
-
-const canonicalURL = new URL(Astro.url.pathname, Astro.site);
-
-const { title, description, image } = Astro.props;
-const finalTitle =
- title && title !== SITE_METADATA.title.default
- ? `${title} | Interactives`
- : title || SITE_METADATA.title.default;
-const finalDescription = description || SITE_METADATA.description;
-const finalImage = image || SITE_METADATA.openGraph.images[0].url;
-const imageURL = new URL(finalImage, Astro.site);
----
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{
- SITE_METADATA.icons.icon.map((icon) => (
-
- ))
-}
-{
- SITE_METADATA.icons.apple.map((icon) => (
-
- ))
-}
-{
- SITE_METADATA.icons.shortcut.map((icon) => (
-
- ))
-}
-
-
-
-
-
-
-
-
-
-{finalTitle}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/components/interactives/BinaryNumberGame.tsx b/src/components/BinaryNumberGame.tsx
similarity index 93%
rename from src/components/interactives/BinaryNumberGame.tsx
rename to src/components/BinaryNumberGame.tsx
index a25eff5..3156d7b 100644
--- a/src/components/interactives/BinaryNumberGame.tsx
+++ b/src/components/BinaryNumberGame.tsx
@@ -2,13 +2,15 @@ import React, { useState, useEffect, useCallback } from 'react';
import { Button } from '@/components/ui/button';
import { Card, CardContent } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
+import SocialShare from '@/components/SocialShare';
const POWERS_OF_TWO = [128, 64, 32, 16, 8, 4, 2, 1];
interface BinaryNumberGameProps {
+ showSocialShare?: boolean;
}
-const BinaryNumberGame: React.FC = () => {
+const BinaryNumberGame: React.FC = ({ showSocialShare = true }) => {
const [targetNumber, setTargetNumber] = useState(0);
const [flippedCards, setFlippedCards] = useState(new Array(8).fill(false));
const [currentSum, setCurrentSum] = useState(0);
@@ -168,6 +170,14 @@ const BinaryNumberGame: React.FC = () => {
{!hasGameStarted ? 'Start Game' : isGameWon ? 'Play Again' : 'New Game'}
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/BinarySearchTrick.tsx b/src/components/BinarySearchTrick.tsx
similarity index 95%
rename from src/components/interactives/BinarySearchTrick.tsx
rename to src/components/BinarySearchTrick.tsx
index 11b5ea0..0dd4114 100644
--- a/src/components/interactives/BinarySearchTrick.tsx
+++ b/src/components/BinarySearchTrick.tsx
@@ -5,11 +5,13 @@ import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, Di
import { Switch } from '@/components/ui/switch';
import { Label } from '@/components/ui/label';
import { HelpCircle, RefreshCw, ChevronLeft, ChevronRight } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
interface BinarySearchTrickProps {
+ showSocialShare?: boolean;
}
-const BinarySearchTrick = ({}: BinarySearchTrickProps) => {
+const BinarySearchTrick = ({ showSocialShare = true }: BinarySearchTrickProps) => {
const [cardStates, setCardStates] = useState>({});
const [result, setResult] = useState(null);
const [showResult, setShowResult] = useState(false);
@@ -137,7 +139,7 @@ const BinarySearchTrick = ({}: BinarySearchTrickProps) => {
return (
-
+
Binary Search Magic Trick
@@ -346,6 +348,16 @@ const BinarySearchTrick = ({}: BinarySearchTrickProps) => {
)}
+
+ {showSocialShare && (
+
+
+
+ )}
);
diff --git a/src/components/interactives/BulgarianSolitaire.tsx b/src/components/BulgarianSolitaire.tsx
similarity index 97%
rename from src/components/interactives/BulgarianSolitaire.tsx
rename to src/components/BulgarianSolitaire.tsx
index a7b4a8f..df2714f 100644
--- a/src/components/interactives/BulgarianSolitaire.tsx
+++ b/src/components/BulgarianSolitaire.tsx
@@ -1,9 +1,11 @@
import React, { useState, useEffect, useRef } from 'react';
import { Button } from '@/components/ui/button';
import { Slider } from '@/components/ui/slider';
+import SocialShare from '@/components/SocialShare';
import { toast } from 'sonner';
interface BulgarianSolitaireProps {
+ showSocialShare?: boolean;
}
interface Box {
@@ -11,7 +13,7 @@ interface Box {
columnIndex: number | null; // null means it's in the container
}
-const BulgarianSolitaire: React.FC = () => {
+const BulgarianSolitaire: React.FC = ({ showSocialShare }) => {
const [n, setN] = useState(15);
const [boxes, setBoxes] = useState([]);
const [columns, setColumns] = useState([]);
@@ -564,6 +566,13 @@ const BulgarianSolitaire: React.FC = () => {
.
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/BurnsidesLemma.tsx b/src/components/BurnsidesLemma.tsx
similarity index 96%
rename from src/components/interactives/BurnsidesLemma.tsx
rename to src/components/BurnsidesLemma.tsx
index cca6db3..97e8c17 100644
--- a/src/components/interactives/BurnsidesLemma.tsx
+++ b/src/components/BurnsidesLemma.tsx
@@ -3,9 +3,11 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com
import { Button } from '@/components/ui/button';
import { Slider } from '@/components/ui/slider';
import { Badge } from '@/components/ui/badge';
+import SocialShare from './SocialShare';
import { RotateCw, Palette } from 'lucide-react';
interface BurnsidesLemmaProps {
+ showSocialShare?: boolean;
shareUrl?: string;
}
@@ -14,7 +16,7 @@ interface Necklace {
id: string;
}
-const BurnsidesLemma = ({ shareUrl }: BurnsidesLemmaProps) => {
+const BurnsidesLemma = ({ showSocialShare = false, shareUrl }: BurnsidesLemmaProps) => {
const [numBeads, setNumBeads] = useState(6);
const [numColors, setNumColors] = useState(3);
const [allNecklaces, setAllNecklaces] = useState([]);
@@ -342,6 +344,14 @@ const BurnsidesLemma = ({ shareUrl }: BurnsidesLemmaProps) => {
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/ChessboardRepaintPuzzle.tsx b/src/components/ChessboardRepaintPuzzle.tsx
similarity index 92%
rename from src/components/interactives/ChessboardRepaintPuzzle.tsx
rename to src/components/ChessboardRepaintPuzzle.tsx
index dee3e71..b8fb4a5 100644
--- a/src/components/interactives/ChessboardRepaintPuzzle.tsx
+++ b/src/components/ChessboardRepaintPuzzle.tsx
@@ -3,9 +3,19 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';
-import { RefreshCw, RotateCcw, BookOpen, Trophy, CheckCircle, ExternalLink } from 'lucide-react';
+import { RefreshCw, RotateCcw, BookOpen, Trophy, CheckCircle, ArrowLeft, ExternalLink } from 'lucide-react';
+import SocialShare from './SocialShare';
+import { useSearchParams, useNavigate } from 'react-router-dom';
-const ChessboardRepaintPuzzle = () => {
+interface ChessboardRepaintPuzzleProps {
+ showSocialShare?: boolean;
+}
+
+const ChessboardRepaintPuzzle: React.FC = ({ showSocialShare = false }) => {
+ const [searchParams] = useSearchParams();
+ const navigate = useNavigate();
+ const isFromPuzzles = searchParams.get('from') === 'puzzles';
+
// Initialize 8x8 chessboard with alternating colors
const initializeBoard = (): boolean[][] => {
const board: boolean[][] = [];
@@ -225,6 +235,19 @@ const ChessboardRepaintPuzzle = () => {
return (
+ {/* Back to Puzzles button - only show when coming from puzzles */}
+ {isFromPuzzles && (
+
+
navigate('/themes/puzzles')}
+ className="text-primary hover:text-primary/80 font-medium flex items-center gap-2"
+ >
+
+ Go back to Puzzles
+
+
+ )}
+
@@ -419,6 +442,13 @@ const ChessboardRepaintPuzzle = () => {
{/* Social Share Section */}
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/ComingSoon.tsx b/src/components/ComingSoon.tsx
new file mode 100644
index 0000000..77a6a5e
--- /dev/null
+++ b/src/components/ComingSoon.tsx
@@ -0,0 +1,46 @@
+import Layout from "@/components/Layout";
+import { Link } from "react-router-dom";
+import { ArrowLeft, Wrench } from "lucide-react";
+import { Button } from "@/components/ui/button";
+
+interface ComingSoonProps {
+ title: string;
+ description?: string;
+}
+
+const ComingSoon = ({ title, description }: ComingSoonProps) => {
+ return (
+
+
+
+
+
+
+
+
+ {title}
+
+
+
+ Coming Soon
+
+
+ {description && (
+
+ {description}
+
+ )}
+
+
+
+
+ Back to Home
+
+
+
+
+
+ );
+};
+
+export default ComingSoon;
\ No newline at end of file
diff --git a/src/components/CommandSearch.tsx b/src/components/CommandSearch.tsx
new file mode 100644
index 0000000..1b5a6fb
--- /dev/null
+++ b/src/components/CommandSearch.tsx
@@ -0,0 +1,65 @@
+import { useEffect, useState } from "react";
+import { useNavigate } from "react-router-dom";
+import { allInteractives } from "@/components/InteractiveIndex";
+import {
+ CommandDialog,
+ CommandEmpty,
+ CommandGroup,
+ CommandInput,
+ CommandItem,
+ CommandList,
+} from "@/components/ui/command";
+import { Badge } from "@/components/ui/badge";
+
+const CommandSearch = () => {
+ const [open, setOpen] = useState(false);
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ const down = (e: KeyboardEvent) => {
+ if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
+ e.preventDefault();
+ setOpen((prev) => !prev);
+ }
+ };
+ document.addEventListener("keydown", down);
+ return () => document.removeEventListener("keydown", down);
+ }, []);
+
+ const handleSelect = (path: string) => {
+ setOpen(false);
+ navigate(path);
+ };
+
+ return (
+
+
+
+ No interactives found.
+
+ {allInteractives.map((interactive) => (
+ handleSelect(interactive.path)}
+ >
+
+
+ {interactive.title}
+
+ {interactive.theme}
+
+
+
+ {interactive.description}
+
+
+
+ ))}
+
+
+
+ );
+};
+
+export default CommandSearch;
diff --git a/src/components/interactives/CrapsGame.tsx b/src/components/CrapsGame.tsx
similarity index 98%
rename from src/components/interactives/CrapsGame.tsx
rename to src/components/CrapsGame.tsx
index c2bd6d9..b141b42 100644
--- a/src/components/interactives/CrapsGame.tsx
+++ b/src/components/CrapsGame.tsx
@@ -7,7 +7,9 @@ import { Checkbox } from '@/components/ui/checkbox';
import { Switch } from '@/components/ui/switch';
import { Slider } from '@/components/ui/slider';
import { Dice1, Dice2, Dice3, Dice4, Dice5, Dice6, RotateCcw, Settings, Play } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
interface CrapsGameProps {
+ showSocialShare?: boolean;
}
const getDiceIcon = (value: number) => {
switch (value) {
@@ -27,7 +29,9 @@ const getDiceIcon = (value: number) => {
return ;
}
};
-const CrapsGame: React.FC = () => {
+const CrapsGame: React.FC = ({
+ showSocialShare = false
+}) => {
const [dice1, setDice1] = useState(null);
const [dice2, setDice2] = useState(null);
const [isRolling, setIsRolling] = useState(false);
@@ -556,7 +560,9 @@ const CrapsGame: React.FC = () => {
-
+ {showSocialShare &&
+
+
}
;
};
export default CrapsGame;
\ No newline at end of file
diff --git a/src/components/interactives/CubeColoring.tsx b/src/components/CubeColoring.tsx
similarity index 97%
rename from src/components/interactives/CubeColoring.tsx
rename to src/components/CubeColoring.tsx
index 32c9ea2..f751d4b 100644
--- a/src/components/interactives/CubeColoring.tsx
+++ b/src/components/CubeColoring.tsx
@@ -5,10 +5,12 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com
import { Button } from '@/components/ui/button';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import { Badge } from '@/components/ui/badge';
+import SocialShare from './SocialShare';
import { Box, RotateCw, ArrowRightLeft } from 'lucide-react';
import * as THREE from 'three';
interface CubeColoringProps {
+ showSocialShare?: boolean;
shareUrl?: string;
}
@@ -69,7 +71,7 @@ function RotatedCube({ colors, rotation }: { colors: string[], rotation: number[
);
}
-const CubeColoring = ({ shareUrl }: CubeColoringProps) => {
+const CubeColoring = ({ showSocialShare = false, shareUrl }: CubeColoringProps) => {
const [faceColors, setFaceColors] = useState(Array(6).fill(colorPalette[0]));
const [selectedColor, setSelectedColor] = useState(colorPalette[0]);
const [selectedPermutation, setSelectedPermutation] = useState([0, 1, 2, 3, 4, 5]);
@@ -310,6 +312,14 @@ const CubeColoring = ({ shareUrl }: CubeColoringProps) => {
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/DominoRetilingPuzzle.tsx b/src/components/DominoRetilingPuzzle.tsx
similarity index 97%
rename from src/components/interactives/DominoRetilingPuzzle.tsx
rename to src/components/DominoRetilingPuzzle.tsx
index 629d7ef..68e7368 100644
--- a/src/components/interactives/DominoRetilingPuzzle.tsx
+++ b/src/components/DominoRetilingPuzzle.tsx
@@ -3,6 +3,7 @@ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { CheckCircle, ChevronDown, ChevronUp, Shuffle, Lightbulb } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
interface Domino {
id: number;
@@ -12,9 +13,10 @@ interface Domino {
}
interface DominoRetilingPuzzleProps {
+ showSocialShare?: boolean;
}
-const DominoRetilingPuzzle: React.FC = () => {
+const DominoRetilingPuzzle: React.FC = ({ showSocialShare = true }) => {
const [boardSize, setBoardSize] = useState(8);
const [dominoes, setDominoes] = useState([]);
const [selectedDomino, setSelectedDomino] = useState(null);
@@ -313,7 +315,7 @@ const DominoRetilingPuzzle: React.FC = () => {
return (
-
+
Domino Retiling Puzzle
@@ -473,6 +475,13 @@ const DominoRetilingPuzzle: React.FC = () => {
)}
{/* Social Share */}
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/ErdosDiscrepancyPuzzle.tsx b/src/components/ErdosDiscrepancyPuzzle.tsx
similarity index 98%
rename from src/components/interactives/ErdosDiscrepancyPuzzle.tsx
rename to src/components/ErdosDiscrepancyPuzzle.tsx
index 8d6ad76..8046d40 100644
--- a/src/components/interactives/ErdosDiscrepancyPuzzle.tsx
+++ b/src/components/ErdosDiscrepancyPuzzle.tsx
@@ -10,9 +10,11 @@ import {
BookOpen, Zap, Eye, Grid3X3, TrendingUp, Pause,
Volume2, VolumeX, Target, Trophy
} from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
interface ErdosDiscrepancyPuzzleProps {
+ showSocialShare?: boolean;
}
type GamePhase = 'intro' | 'writing' | 'captor-reveal' | 'walking' | 'fallen' | 'survived';
@@ -25,7 +27,7 @@ interface DiscrepancyResult {
positions: number[];
}
-const ErdosDiscrepancyPuzzle: React.FC = () => {
+const ErdosDiscrepancyPuzzle: React.FC = ({ showSocialShare = false }) => {
// Core game state
const [sequence, setSequence] = useState([]);
const [discrepancyBound, setDiscrepancyBound] = useState(1);
@@ -886,6 +888,13 @@ const ErdosDiscrepancyPuzzle: React.FC = () => {
{/* Social Share */}
+ {showSocialShare !== false && (
+
+ )}
);
};
diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx
new file mode 100644
index 0000000..d35fa41
--- /dev/null
+++ b/src/components/ErrorBoundary.tsx
@@ -0,0 +1,76 @@
+import React, { Component, ErrorInfo, ReactNode } from 'react';
+import { AlertTriangle, RotateCcw } from 'lucide-react';
+import { Button } from '@/components/ui/button';
+import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
+
+interface Props {
+ children: ReactNode;
+ fallback?: ReactNode;
+}
+
+interface State {
+ hasError: boolean;
+ error?: Error;
+}
+
+class ErrorBoundary extends Component {
+ constructor(props: Props) {
+ super(props);
+ this.state = { hasError: false };
+ }
+
+ static getDerivedStateFromError(error: Error): State {
+ // Update state so the next render will show the fallback UI
+ return { hasError: true, error };
+ }
+
+ componentDidCatch(error: Error, errorInfo: ErrorInfo) {
+ // Log error to console in development
+ if (process.env.NODE_ENV === 'development') {
+ console.error('Error caught by boundary:', error, errorInfo);
+ }
+ }
+
+ handleReset = () => {
+ this.setState({ hasError: false, error: undefined });
+ };
+
+ render() {
+ if (this.state.hasError) {
+ if (this.props.fallback) {
+ return this.props.fallback;
+ }
+
+ return (
+
+
+
+
+ Something went wrong
+
+
+
+ We encountered an unexpected error. Please try refreshing the page or contact support if the problem persists.
+
+
+
+
+ Try Again
+
+ window.location.reload()}>
+ Refresh Page
+
+
+
+
+
+ );
+ }
+
+ return this.props.children;
+ }
+}
+
+export default ErrorBoundary;
\ No newline at end of file
diff --git a/src/components/interactives/EternalDominationGame.tsx b/src/components/EternalDominationGame.tsx
similarity index 98%
rename from src/components/interactives/EternalDominationGame.tsx
rename to src/components/EternalDominationGame.tsx
index 154ce34..fd2e461 100644
--- a/src/components/interactives/EternalDominationGame.tsx
+++ b/src/components/EternalDominationGame.tsx
@@ -3,6 +3,7 @@ import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card";
import { Shield, Target, RotateCcw, Info } from "lucide-react";
+import SocialShare from '@/components/SocialShare';
// Extended good rectangle: 10 columns × 12 rows (following Fig. 10)
// Border: columns 0 and 9, rows 0/1 (top) and 10/11 (bottom)
@@ -350,9 +351,10 @@ const defendAttack = (
interface EternalDominationGameProps {
+ showSocialShare?: boolean;
}
-const EternalDominationGame: React.FC = () => {
+const EternalDominationGame: React.FC = ({ showSocialShare = true }) => {
const [guards, setGuards] = useState>(generateInitialGuards);
const [attackHistory, setAttackHistory] = useState([]);
const [message, setMessage] = useState("Click any unguarded cell to attack.");
@@ -682,6 +684,13 @@ const EternalDominationGame: React.FC = () => {
)}
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/FerrersRogersRamanujan.tsx b/src/components/FerrersRogersRamanujan.tsx
similarity index 96%
rename from src/components/interactives/FerrersRogersRamanujan.tsx
rename to src/components/FerrersRogersRamanujan.tsx
index 25286a1..a5c95ac 100644
--- a/src/components/interactives/FerrersRogersRamanujan.tsx
+++ b/src/components/FerrersRogersRamanujan.tsx
@@ -4,11 +4,13 @@ import { Button } from "@/components/ui/button";
import { Slider } from "@/components/ui/slider";
import { Input } from "@/components/ui/input";
import { toast } from "sonner";
+import SocialShare from '@/components/SocialShare';
interface FerrersRogersRamanujanProps {
+ showSocialShare?: boolean;
}
-const FerrersRogersRamanujan = ({}: FerrersRogersRamanujanProps) => {
+const FerrersRogersRamanujan = ({ showSocialShare = true }: FerrersRogersRamanujanProps) => {
const [n, setN] = useState(14);
const [partitionSliders, setPartitionSliders] = useState([]);
const [committedPartition, setCommittedPartition] = useState([]);
@@ -333,6 +335,13 @@ const FerrersRogersRamanujan = ({}: FerrersRogersRamanujanProps) => {
The hook sizes form a new partition where parts differ by at least 2.
+
+ {showSocialShare && (
+
+ )}
);
diff --git a/src/components/interactives/GameOfSim.tsx b/src/components/GameOfSim.tsx
similarity index 94%
rename from src/components/interactives/GameOfSim.tsx
rename to src/components/GameOfSim.tsx
index 7bfb9f4..45081f6 100644
--- a/src/components/interactives/GameOfSim.tsx
+++ b/src/components/GameOfSim.tsx
@@ -4,6 +4,7 @@ import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import { RotateCcw, Undo2 } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
interface Edge {
from: number;
@@ -20,9 +21,10 @@ interface GameState {
}
interface GameOfSimProps {
+ showSocialShare?: boolean;
}
-const GameOfSim: React.FC = () => {
+const GameOfSim: React.FC = ({ showSocialShare = true }) => {
const [vertices, setVertices] = useState(6);
const [gameState, setGameState] = useState(() => initializeGame(6));
@@ -270,6 +272,15 @@ const GameOfSim: React.FC = () => {
{/* Social Share */}
+ {showSocialShare && (
+
+
+
+ )}
diff --git a/src/components/GamesGallery.tsx b/src/components/GamesGallery.tsx
new file mode 100644
index 0000000..43623bf
--- /dev/null
+++ b/src/components/GamesGallery.tsx
@@ -0,0 +1,188 @@
+import React, { useState } from 'react';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import { Input } from '@/components/ui/input';
+import { Badge } from '@/components/ui/badge';
+import { Search } from 'lucide-react';
+import Layout from '@/components/Layout';
+import GameOfSim from '@/components/GameOfSim';
+import NorthcottsGame from '@/components/NorthcottsGame';
+import NimGame from '@/components/NimGame';
+import AssistedNimGame from '@/components/AssistedNimGame';
+import GoldCoinGame from '@/components/GoldCoinGame';
+import GuessingGame from '@/components/GuessingGame';
+import SubtractionGame from '@/components/SubtractionGame';
+import ParityBitsGame from '@/components/ParityBitsGame';
+import CrapsGame from '@/components/CrapsGame';
+import BagchalGame from '@/components/BagchalGame';
+
+interface Game {
+ id: string;
+ title: string;
+ description: string;
+ tags: string[];
+ component: React.ComponentType<{ showSocialShare?: boolean }>;
+}
+
+const games: Game[] = [
+ {
+ id: 'bagchal',
+ title: 'Bagchal (Tiger and Goats)',
+ description: 'A strategic board game where the tiger tries to capture goats by jumping over them, while goats try to trap the tiger so it cannot move.',
+ tags: ['strategy', 'two-player', 'board-game', 'traditional', 'nepal', 'asymmetric'],
+ component: BagchalGame
+ },
+ {
+ id: 'craps-game',
+ title: 'Craps: An Exploration',
+ description: 'Experience the classic casino dice game! Roll two dice and learn about probability as you discover the rules of the opening throw.',
+ tags: ['probability', 'dice', 'casino', 'mathematics', 'statistics', 'gambling'],
+ component: CrapsGame
+ },
+ {
+ id: 'parity-magic',
+ title: 'Parity Magic',
+ description: 'Learn how parity bits detect and correct single-bit errors! Set up a grid, add parity bits, flip a bit, and watch the magic of error detection unfold.',
+ tags: ['error-correction', 'parity', 'computer-science', 'educational', 'interactive', 'magic-trick'],
+ component: ParityBitsGame
+ },
+ {
+ id: 'subtraction-game-uid-2024',
+ title: 'The Subtraction Game',
+ description: 'A strategic two-player game where players take turns removing circles. Click on any of the last k circles to remove it and all circles to its right!',
+ tags: ['strategy', 'two-player', 'logic', 'game-theory', 'subtraction'],
+ component: SubtractionGame
+ },
+ {
+ id: 'guessing-game',
+ title: 'Number Guessing Game',
+ description: 'Experience different search algorithms through interactive gameplay. Compare random, linear, and binary search strategies!',
+ tags: ['algorithms', 'search', 'educational', 'interactive', 'binary-search', 'computer-science'],
+ component: GuessingGame
+ },
+ {
+ id: 'gold-coin',
+ title: 'The Gold Coin Game',
+ description: 'A strategic two-player game where you move coins to the left or take the leftmost coin. The player who takes the gold coin wins!',
+ tags: ['strategy', 'two-player', 'logic', 'game-theory', 'movement', 'coins'],
+ component: GoldCoinGame
+ },
+ {
+ id: 'assisted-nim',
+ title: 'Assisted Game of Nim',
+ description: 'Learn the XOR strategy! Visualize how powers of 2 determine winning moves with color-coded borders.',
+ tags: ['strategy', 'two-player', 'math', 'logic', 'game-theory', 'xor-strategy', 'educational'],
+ component: AssistedNimGame
+ },
+ {
+ id: 'nim',
+ title: 'Game of Nim',
+ description: 'A classic two-player game of strategy. Take turns removing stones from heaps. The player to take the last stone wins!',
+ tags: ['strategy', 'two-player', 'math', 'logic', 'game-theory'],
+ component: NimGame
+ },
+ {
+ id: 'sim',
+ title: 'Game of Sim',
+ description: 'A strategic two-player game where you take turns coloring edges between vertices, trying to avoid creating a triangle of your own color.',
+ tags: ['strategy', 'graph-theory', 'two-player', 'logic', 'game-theory'],
+ component: GameOfSim
+ },
+ {
+ id: 'northcotts-game',
+ title: "Northcott's Game",
+ description: 'A classic strategy game played on a grid where players move pieces horizontally toward each other, trying to be the last one able to move.',
+ tags: ['strategy', 'two-player', 'grid-game', 'logic', 'movement'],
+ component: NorthcottsGame
+ }
+];
+
+const GamesGallery = () => {
+ const [searchTerm, setSearchTerm] = useState('');
+ const [selectedGame, setSelectedGame] = useState(null);
+
+ const filteredGames = games.filter(game =>
+ game.title.toLowerCase().includes(searchTerm.toLowerCase()) ||
+ game.description.toLowerCase().includes(searchTerm.toLowerCase()) ||
+ game.tags.some(tag => tag.toLowerCase().includes(searchTerm.toLowerCase()))
+ );
+
+ if (selectedGame) {
+ const GameComponent = selectedGame.component;
+ return (
+
+
+
+ setSelectedGame(null)}
+ className="text-primary hover:text-primary/80 font-medium"
+ >
+ ← Back to Games
+
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
Games
+
+ Learn through play with interactive games that reinforce computer science and mathematical concepts.
+
+
+
+ {/* Search bar */}
+
+
+ setSearchTerm(e.target.value)}
+ className="pl-10"
+ />
+
+
+ {/* Games Gallery */}
+
+ {filteredGames.map(game => (
+
setSelectedGame(game)}
+ >
+
+ {game.title}
+
+ {game.description}
+
+
+
+
+ {game.tags.map(tag => (
+
+ {tag}
+
+ ))}
+
+
+
+ ))}
+
+
+ {filteredGames.length === 0 && (
+
+
No games found matching your search.
+
+ )}
+
+
+
+ );
+};
+
+export default GamesGallery;
\ No newline at end of file
diff --git a/src/components/interactives/GoldCoinGame.tsx b/src/components/GoldCoinGame.tsx
similarity index 97%
rename from src/components/interactives/GoldCoinGame.tsx
rename to src/components/GoldCoinGame.tsx
index b93d086..456dc17 100644
--- a/src/components/interactives/GoldCoinGame.tsx
+++ b/src/components/GoldCoinGame.tsx
@@ -4,6 +4,7 @@ import { Button } from '@/components/ui/button';
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';
import { Badge } from '@/components/ui/badge';
import { Crown, Circle, RotateCcw, BookOpen, Trophy } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
type Player = 0 | 1;
type CellState = 'empty' | 'penny' | 'gold';
@@ -18,9 +19,10 @@ interface GameState {
}
interface GoldCoinGameProps {
+ showSocialShare?: boolean;
}
-const GoldCoinGame: React.FC = () => {
+const GoldCoinGame: React.FC = ({ showSocialShare = true }) => {
const [gameState, setGameState] = useState({
track: Array(15).fill('empty'),
currentPlayer: 0,
@@ -422,6 +424,13 @@ const GoldCoinGame: React.FC = () => {
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/GridTilingPuzzle.tsx b/src/components/GridTilingPuzzle.tsx
similarity index 96%
rename from src/components/interactives/GridTilingPuzzle.tsx
rename to src/components/GridTilingPuzzle.tsx
index c630fad..38ec8f0 100644
--- a/src/components/interactives/GridTilingPuzzle.tsx
+++ b/src/components/GridTilingPuzzle.tsx
@@ -4,6 +4,7 @@ import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Alert, AlertDescription } from '@/components/ui/alert';
import { CheckCircle, XCircle, Info, ChevronDown, ChevronUp } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
interface Rectangle {
id: number;
@@ -14,9 +15,10 @@ interface Rectangle {
}
interface GridTilingPuzzleProps {
+ showSocialShare?: boolean;
}
-const GridTilingPuzzle: React.FC = () => {
+const GridTilingPuzzle: React.FC = ({ showSocialShare = true }) => {
const [gridSize, setGridSize] = useState(9);
const [rectangles, setRectangles] = useState([]);
const [isDrawing, setIsDrawing] = useState(false);
@@ -203,7 +205,7 @@ const GridTilingPuzzle: React.FC = () => {
return (
-
+
Grid Tiling Puzzle
@@ -410,6 +412,13 @@ const GridTilingPuzzle: React.FC = () => {
)}
{/* Social Share */}
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/GuessingGame.tsx b/src/components/GuessingGame.tsx
similarity index 97%
rename from src/components/interactives/GuessingGame.tsx
rename to src/components/GuessingGame.tsx
index 0ad27a9..41824e5 100644
--- a/src/components/interactives/GuessingGame.tsx
+++ b/src/components/GuessingGame.tsx
@@ -7,10 +7,12 @@ import { Badge } from '@/components/ui/badge';
import { Switch } from '@/components/ui/switch';
import { Label } from '@/components/ui/label';
import { Brain, User, Trophy, Target, HelpCircle, CheckCircle, XCircle } from 'lucide-react';
-import StandardGuessingMode from './guessing-game/StandardGuessingMode';
-import QuestionGuessingMode from './guessing-game/QuestionGuessingMode';
+import SocialShare from '@/components/SocialShare';
+import StandardGuessingMode from '@/components/guessing-game/StandardGuessingMode';
+import QuestionGuessingMode from '@/components/guessing-game/QuestionGuessingMode';
interface GuessingGameProps {
+ showSocialShare?: boolean;
}
type GameMode = 'user-guesses' | 'computer-asks';
@@ -23,7 +25,7 @@ interface Question {
isCorrect: (num: number) => boolean;
}
-const GuessingGame: React.FC = () => {
+const GuessingGame: React.FC = ({ showSocialShare = true }) => {
// Game settings
const [range, setRange] = useState([50]);
const [gameMode, setGameMode] = useState('user-guesses');
@@ -641,6 +643,13 @@ const GuessingGame: React.FC = () => {
)}
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/HomepageHero.tsx b/src/components/HomepageHero.tsx
deleted file mode 100644
index 6d53529..0000000
--- a/src/components/HomepageHero.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import React from 'react';
-import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
-import { Badge } from '@/components/ui/badge';
-import { publishedInteractives, primaryTheme } from '@/lib/interactives';
-
-const HomepageHero: React.FC = () => {
- const featured = [...publishedInteractives]
- .sort((a, b) => b.dateAdded.localeCompare(a.dateAdded))
- .slice(0, 6);
-
- return (
-
- {/* Hero */}
-
-
- Interactives
-
-
- A collection of interactive games, puzzles, and mathematical explorations
- for enhanced learning experiences and pure joy.
-
-
-
- {/* Recently Added */}
-
-
- );
-};
-
-export default HomepageHero;
diff --git a/src/components/InteractiveBreadcrumb.tsx b/src/components/InteractiveBreadcrumb.tsx
deleted file mode 100644
index 7652498..0000000
--- a/src/components/InteractiveBreadcrumb.tsx
+++ /dev/null
@@ -1,113 +0,0 @@
-import React, { useState, useEffect } from "react";
-import { allThemes, type Theme } from "@/lib/interactives";
-
-interface InteractiveBreadcrumbProps {
- title: string;
- themes: string[];
- subcategory?: string;
-}
-
-const Chevron = () => (
-
-
-
-
-
-);
-
-const InteractiveBreadcrumb: React.FC = ({
- title,
- themes,
- subcategory,
-}) => {
- const [activeTheme, setActiveTheme] = useState(undefined);
- const [activeSub, setActiveSub] = useState<
- { slug: string; title: string } | undefined
- >(undefined);
-
- useEffect(() => {
- const params = new URLSearchParams(window.location.search);
- const fromSlug = params.get("from");
-
- let theme: Theme | undefined;
- if (fromSlug) {
- // Try to match the from param to a theme the interactive belongs to
- theme = allThemes.find(
- (t) => t.slug === fromSlug && themes.includes(t.title)
- );
- }
- // Fall back to primary theme (first in array)
- if (!theme) {
- theme = allThemes.find((t) => t.title === themes[0]);
- }
- setActiveTheme(theme);
-
- // Resolve subcategory if present and theme matches
- if (subcategory && theme?.subcategories) {
- const sub = theme.subcategories.find((s) => s.slug === subcategory);
- setActiveSub(sub ? { slug: sub.slug, title: sub.title } : undefined);
- }
- }, [themes, subcategory]);
-
- return (
-
-
-
-
- Home
-
-
- {activeTheme && (
- <>
-
-
-
- {activeTheme.title}
-
-
- >
- )}
- {activeSub && activeTheme && (
- <>
-
-
-
- {activeSub.title}
-
-
- >
- )}
-
-
-
- {title}
-
-
-
-
- );
-};
-
-export default InteractiveBreadcrumb;
diff --git a/src/components/InteractiveCard.tsx b/src/components/InteractiveCard.tsx
new file mode 100644
index 0000000..941a166
--- /dev/null
+++ b/src/components/InteractiveCard.tsx
@@ -0,0 +1,104 @@
+import { Badge } from "@/components/ui/badge";
+import { ArrowRight, Clock, Users } from "lucide-react";
+import { cn } from "@/lib/utils";
+
+interface InteractiveCardProps {
+ title: string;
+ description: string;
+ tags: string[];
+ difficulty?: "Beginner" | "Intermediate" | "Advanced";
+ duration?: string;
+ participants?: string;
+ imageUrl?: string;
+ onClick?: () => void;
+ className?: string;
+}
+
+const InteractiveCard = ({
+ title,
+ description,
+ tags,
+ difficulty,
+ duration,
+ participants,
+ imageUrl,
+ onClick,
+ className
+}: InteractiveCardProps) => {
+ const difficultyColors = {
+ Beginner: "bg-green-100 text-green-800",
+ Intermediate: "bg-yellow-100 text-yellow-800",
+ Advanced: "bg-red-100 text-red-800"
+ };
+
+ return (
+
+ {imageUrl && (
+
+
+
+ )}
+
+
+
+
+
+ {description}
+
+
+
+ {duration && (
+
+
+ {duration}
+
+ )}
+ {participants && (
+
+
+ {participants}
+
+ )}
+
+
+
+ {difficulty && (
+
+ {difficulty}
+
+ )}
+ {tags.slice(0, 3).map((tag) => (
+
+ {tag}
+
+ ))}
+ {tags.length > 3 && (
+
+ +{tags.length - 3}
+
+ )}
+
+
+
+ );
+};
+
+export default InteractiveCard;
\ No newline at end of file
diff --git a/src/components/InteractiveGallery.tsx b/src/components/InteractiveGallery.tsx
index 310b837..24a3a03 100644
--- a/src/components/InteractiveGallery.tsx
+++ b/src/components/InteractiveGallery.tsx
@@ -1,237 +1,106 @@
-import React, { useState, useMemo, useEffect } from 'react';
-import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
+import React, { useState } from 'react';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import { Input } from '@/components/ui/input';
import { Badge } from '@/components/ui/badge';
-import { Button } from '@/components/ui/button';
-import { Search, SortAsc, SortDesc } from 'lucide-react';
-import { publishedInteractives, primaryTheme } from '@/lib/interactives';
+import { Search } from 'lucide-react';
+import Layout from '@/components/Layout';
+import BinarySearchTrick from '@/components/BinarySearchTrick';
+import TernarySearchTrick from '@/components/TernarySearchTrick';
+import GuessingGame from '@/components/GuessingGame';
-type SortField = 'title' | 'dateAdded';
-type SortDirection = 'asc' | 'desc';
-
-function getInitialTheme(): string {
- if (typeof window === 'undefined') return '';
- return new URLSearchParams(window.location.search).get('theme') || '';
+interface Interactive {
+ id: string;
+ title: string;
+ description: string;
+ tags: string[];
+ component: React.ComponentType<{ showSocialShare?: boolean }>;
}
-const InteractiveGallery: React.FC = () => {
+const interactives: Interactive[] = [
+ {
+ id: 'guessing-game',
+ title: 'Number Guessing Game',
+ description: 'Experience different search algorithms through interactive gameplay. Compare random, linear, and binary search strategies!',
+ tags: ['algorithms', 'search', 'educational', 'interactive', 'binary-search', 'computer-science'],
+ component: GuessingGame
+ },
+ {
+ id: 'binary-search-trick',
+ title: 'Binary Search Magic Trick',
+ description: 'Perform an amazing magic trick that reveals how binary numbers work. Think of a number and watch the magic happen!',
+ tags: ['binary', 'magic', 'numbers', 'trick', 'data-structures'],
+ component: BinarySearchTrick
+ },
+ {
+ id: 'ternary-search-trick',
+ title: 'Ternary Search Magic Trick',
+ description: 'Experience the magic of ternary search! Think of a number and watch as the cards reveal it through mathematical calculations.',
+ tags: ['ternary', 'magic', 'numbers', 'trick', 'data-structures', 'search'],
+ component: TernarySearchTrick
+ },
+];
+const InteractiveGallery = () => {
const [searchTerm, setSearchTerm] = useState('');
- const [selectedTag, setSelectedTag] = useState('');
- const [selectedTheme, setSelectedTheme] = useState(getInitialTheme);
- const [sortField, setSortField] = useState('title');
- const [sortDirection, setSortDirection] = useState('asc');
- const [showTags, setShowTags] = useState(false);
- const [page, setPage] = useState(1);
- const PAGE_SIZE = 20;
-
- const allTags = useMemo(() => {
- const tags = new Set();
- publishedInteractives.forEach((i) => i.tags.forEach((t) => tags.add(t)));
- return Array.from(tags).sort();
- }, []);
-
- const allThemes = useMemo(() => {
- const themes = new Set();
- publishedInteractives.forEach((i) => i.themes.forEach((t) => themes.add(t)));
- return Array.from(themes).sort();
- }, []);
-
- const filtered = useMemo(() => {
- let result = publishedInteractives.filter((i) => {
- const matchesSearch =
- !searchTerm ||
- i.title.toLowerCase().includes(searchTerm.toLowerCase()) ||
- i.description.toLowerCase().includes(searchTerm.toLowerCase()) ||
- i.tags.some((t) => t.toLowerCase().includes(searchTerm.toLowerCase()));
- const matchesTag = !selectedTag || i.tags.includes(selectedTag);
- const matchesTheme = !selectedTheme || i.themes.includes(selectedTheme);
- return matchesSearch && matchesTag && matchesTheme;
- });
-
- result.sort((a, b) => {
- const aVal = a[sortField].toLowerCase();
- const bVal = b[sortField].toLowerCase();
- if (aVal < bVal) return sortDirection === 'asc' ? -1 : 1;
- if (aVal > bVal) return sortDirection === 'asc' ? 1 : -1;
- return 0;
- });
-
- return result;
- }, [searchTerm, selectedTag, selectedTheme, sortField, sortDirection]);
-
- // Reset pagination when filters/sort change
- useEffect(() => { setPage(1); }, [searchTerm, selectedTag, selectedTheme, sortField, sortDirection]);
-
- const totalPages = Math.ceil(filtered.length / PAGE_SIZE);
- const paginated = filtered.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE);
-
- const handleSortChange = (field: SortField) => {
- if (sortField === field) {
- setSortDirection((d) => (d === 'asc' ? 'desc' : 'asc'));
- } else {
- setSortField(field);
- setSortDirection('asc');
- }
- };
-
- return (
-
-
- All Interactives ({publishedInteractives.length})
-
-
- {/* Search and Sort */}
-
-
-
- setSearchTerm(e.target.value)}
- className="pl-10"
- />
-
-
- handleSortChange('title')} className="gap-2">
- {sortField === 'title' ? (
- sortDirection === 'asc' ? :
- ) : (
-
- )}
- Title
-
- handleSortChange('dateAdded')} className="gap-2">
- {sortField === 'dateAdded' ? (
- sortDirection === 'asc' ? :
- ) : (
-
- )}
- Recency
-
-
-
-
- {/* Theme Filter */}
-
- setSelectedTheme('')}
- >
- All
-
- {allThemes.map((theme) => (
- setSelectedTheme(selectedTheme === theme ? '' : theme)}
- >
- {theme}
-
- ))}
-
-
- {/* Active filters */}
- {(selectedTag || selectedTheme) && (
-
- Filtered by:
- {selectedTheme && (
- setSelectedTheme('')}>
- {selectedTheme} ×
-
- )}
- {selectedTag && (
- setSelectedTag('')}>
- {selectedTag} ×
-
- )}
-
- )}
-
- {/* Tag Filter */}
-
-
- setShowTags((v) => !v)}>
- {showTags ? 'Hide Tags' : 'Filter by Tags'}
-
-
- {showTags && (
-
- {allTags.map((tag) => (
-
setSelectedTag(selectedTag === tag ? '' : tag)}
- >
- {tag}
-
- ))}
+ const [selectedInteractive, setSelectedInteractive] = useState
(null);
+ const filteredInteractives = interactives.filter(interactive => interactive.title.toLowerCase().includes(searchTerm.toLowerCase()) || interactive.description.toLowerCase().includes(searchTerm.toLowerCase()) || interactive.tags.some(tag => tag.toLowerCase().includes(searchTerm.toLowerCase())));
+ if (selectedInteractive) {
+ const InteractiveComponent = selectedInteractive.component;
+ return (
+
+
+
+ setSelectedInteractive(null)}
+ className="text-primary hover:text-primary/80 font-medium"
+ >
+ ← Back to Data Structures and Algorithms
+
- )}
+
+
+
+ );
+ }
+ return (
+
+
+
+
+
Data Structures and Algorithms
+
Interactive explorations of elementary data structures and algorithms.
- {/* Results */}
-
- Showing {filtered.length} of {publishedInteractives.length} interactives
-
+ {/* Search bar */}
+
+
+ setSearchTerm(e.target.value)} className="pl-10" />
+
-
+
);
};
-
export default InteractiveGallery;
diff --git a/src/components/InteractiveIndex.tsx b/src/components/InteractiveIndex.tsx
new file mode 100644
index 0000000..4223abe
--- /dev/null
+++ b/src/components/InteractiveIndex.tsx
@@ -0,0 +1,552 @@
+import React, { useState, useMemo } from 'react';
+import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
+import { Input } from '@/components/ui/input';
+import { Badge } from '@/components/ui/badge';
+import { Button } from '@/components/ui/button';
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
+import { Search, SortAsc, SortDesc } from 'lucide-react';
+import Layout from '@/components/Layout';
+
+interface Interactive {
+ id: string;
+ title: string;
+ description: string;
+ tags: string[];
+ path: string;
+ theme: string;
+ dateAdded?: string; // For recency sorting
+}
+
+// This would ideally be generated from the actual components, but for now we'll hardcode
+export const allInteractives: Interactive[] = [
+ {
+ id: 'binary-number-game',
+ title: 'Binary Number Representation',
+ description: 'Learn how numbers are represented in binary (base-2) format through an interactive guessing game.',
+ tags: ['binary', 'numbers', 'conversion', 'representation'],
+ path: '/binary-number-game',
+ theme: 'Discrete Math',
+ dateAdded: '2024-01-15'
+ },
+ {
+ id: 'ternary-number-game',
+ title: 'Ternary Number Representation',
+ description: 'Learn how numbers are represented in ternary (base-3) format by toggling between 0, 1, or 2 copies of powers of three.',
+ tags: ['ternary', 'numbers', 'conversion', 'representation', 'base-3'],
+ path: '/ternary-number-game',
+ theme: 'Discrete Math',
+ dateAdded: '2024-01-16'
+ },
+ {
+ id: 'balanced-ternary-game',
+ title: 'Balanced Ternary Representation',
+ description: 'Explore balanced ternary using digits T (-1), 0, and 1. Add or subtract powers of three to match the target number.',
+ tags: ['balanced-ternary', 'numbers', 'conversion', 'representation', 'base-3', 'signed-digits'],
+ path: '/balanced-ternary-game',
+ theme: 'Discrete Math',
+ dateAdded: '2024-01-17'
+ },
+ {
+ id: 'zeckendorf-game',
+ title: 'Zeckendorf Representation',
+ description: 'Learn how numbers are represented using Fibonacci numbers with the unique Zeckendorf representation (no consecutive Fibonacci numbers).',
+ tags: ['fibonacci', 'numbers', 'representation', 'zeckendorf', 'combinatorics'],
+ path: '/discrete-math/foundations/zeckendorf',
+ theme: 'Discrete Math',
+ dateAdded: '2024-12-22'
+ },
+ {
+ id: 'zeckendorf-search-trick',
+ title: 'Zeckendorf Search Magic Trick',
+ description: 'Experience the magic of Zeckendorf representation! Think of a number and watch as the cards reveal it through Fibonacci numbers.',
+ tags: ['fibonacci', 'magic', 'numbers', 'trick', 'zeckendorf', 'representation'],
+ path: '/discrete-math/foundations/zeckendorf-search',
+ theme: 'Data Structures and Algorithms',
+ dateAdded: '2024-12-22'
+ },
+ {
+ id: 'binary-search-trick',
+ title: 'Binary Search Magic Trick',
+ description: 'Perform an amazing magic trick that reveals how binary numbers work. Think of a number and watch the magic happen!',
+ tags: ['binary', 'magic', 'numbers', 'trick', 'data-structures'],
+ path: '/binary-search-trick',
+ theme: 'Data Structures',
+ dateAdded: '2024-02-20'
+ },
+ {
+ id: 'game-of-sim',
+ title: 'Game of Sim',
+ description: 'A strategic two-player game where you take turns coloring edges between vertices, trying to avoid creating a triangle of your own color.',
+ tags: ['strategy', 'graph-theory', 'two-player', 'logic', 'game-theory'],
+ path: '/game-of-sim',
+ theme: 'Games',
+ dateAdded: '2024-03-10'
+ },
+ {
+ id: 'ternary-search-trick',
+ title: 'Ternary Search Magic Trick',
+ description: 'Experience the magic of ternary search! Think of a number and watch as the cards reveal it through mathematical calculations.',
+ tags: ['ternary', 'magic', 'numbers', 'trick', 'data-structures', 'search'],
+ path: '/ternary-search-trick',
+ theme: 'Data Structures',
+ dateAdded: '2024-07-20'
+ },
+ {
+ id: 'northcotts-game',
+ title: "Northcott's Game",
+ description: 'A strategic board game where players move their pieces to outmaneuver their opponent in a tactical race.',
+ tags: ['strategy', 'board-game', 'two-player', 'logic', 'game-theory'],
+ path: '/northcotts-game',
+ theme: 'Games',
+ dateAdded: '2024-03-15'
+ },
+ {
+ id: 'plate-swap',
+ title: 'The Plate Swap Puzzle',
+ description: 'Arrange plates around a circular table so each person has their own plate. A challenging permutation puzzle!',
+ tags: ['logic', 'permutation', 'strategy', 'puzzle', 'cycles'],
+ path: '/puzzles/plate-swap',
+ theme: 'Puzzles',
+ dateAdded: '2024-12-19'
+ },
+ {
+ id: 'chessboard-repaint',
+ title: 'Chessboard Repaint Puzzle',
+ description: 'Repaint rows, columns, or 2×2 squares to achieve exactly one black square. A puzzle about parity and operations!',
+ tags: ['logic', 'parity', 'strategy', 'puzzle', 'chessboard', 'operations'],
+ path: '/puzzles/chessboard-repaint',
+ theme: 'Puzzles',
+ dateAdded: '2024-12-19'
+ },
+ {
+ id: 'bulgarian-solitaire',
+ title: 'Bulgarian Solitaire',
+ description: 'A mathematical card game where you repeatedly redistribute cards into piles until reaching a stable configuration.',
+ tags: ['solitaire', 'card-game', 'mathematics', 'puzzle', 'redistribution', 'stable-configuration'],
+ path: '/puzzles/bulgarian-solitaire',
+ theme: 'Puzzles',
+ dateAdded: '2024-12-22'
+ },
+ {
+ id: 'subtraction-game',
+ title: 'The Subtraction Game',
+ description: 'A strategic two-player game where players take turns removing circles, with the last player to move winning.',
+ tags: ['strategy', 'two-player', 'game-theory', 'mathematical-games', 'nim-variant'],
+ path: '/subtraction-game',
+ theme: 'Games',
+ dateAdded: '2024-12-22'
+ },
+ {
+ id: 'knights-puzzle',
+ title: 'Knights Exchange Puzzle',
+ description: 'A classic chess puzzle where you must exchange the positions of white and black knights using legal knight moves.',
+ tags: ['chess', 'knights', 'puzzle', 'logic', 'strategy'],
+ path: '/knights-puzzle',
+ theme: 'Puzzles',
+ dateAdded: '2024-07-21'
+ },
+ {
+ id: 'gold-coin',
+ title: 'The Gold Coin Game',
+ description: 'A strategic two-player game where you move coins to the left or take the leftmost coin. The player who takes the gold coin wins!',
+ tags: ['strategy', 'two-player', 'logic', 'game-theory', 'movement', 'coins'],
+ path: '/games/gold-coin',
+ theme: 'Games',
+ dateAdded: '2024-12-19'
+ },
+ {
+ id: 'assisted-nim',
+ title: 'Assisted Game of Nim',
+ description: 'Learn the XOR strategy! Visualize how powers of 2 determine winning moves with color-coded borders.',
+ tags: ['strategy', 'two-player', 'math', 'logic', 'game-theory', 'xor-strategy', 'educational'],
+ path: '/games/assisted-nim',
+ theme: 'Games',
+ dateAdded: '2024-07-21'
+ },
+ {
+ id: 'nim',
+ title: 'Game of Nim',
+ description: 'A classic two-player game of strategy. Take turns removing stones from heaps. The player to take the last stone wins!',
+ tags: ['strategy', 'two-player', 'math', 'logic', 'game-theory'],
+ path: '/games/nim',
+ theme: 'Games',
+ dateAdded: '2024-07-21'
+ },
+ {
+ id: 'grid-tiling-puzzle',
+ title: 'Grid Tiling Puzzle',
+ description: 'Based on IMO 2025: Place rectangular tiles on a grid so that each row and column has exactly one uncovered square.',
+ tags: ['puzzle', 'geometry', 'optimization', 'imo', 'contest-problems'],
+ path: '/contest-problems/grid-tiling',
+ theme: 'Contest Problems',
+ dateAdded: '2024-12-22'
+ },
+ {
+ id: 'sunny-lines-puzzle',
+ title: 'Sunny Lines Puzzle',
+ description: 'Based on IMO 2025 P6: Place lines to cover points in a triangle. A line is "sunny" if it\'s not parallel to x-axis, y-axis, or x+y=0.',
+ tags: ['puzzle', 'geometry', 'lines', 'imo', 'contest-problems'],
+ path: '/contest-problems/sunny-lines',
+ theme: 'Contest Problems',
+ dateAdded: '2024-12-22'
+ },
+ {
+ id: 'sikinia-parliament',
+ title: 'Parliament of Sikinia Puzzle',
+ description: 'Separate parliament members into two houses so each has at most one enemy in their house. A graph theory puzzle!',
+ tags: ['graph-theory', 'logic', 'coloring'],
+ path: '/puzzles/sikinia-parliament',
+ theme: 'Puzzles',
+ dateAdded: '2024-12-22'
+ },
+ {
+ id: 'guessing-game',
+ title: 'Number Guessing Game',
+ description: 'Experience different search algorithms through interactive gameplay. Compare random, linear, and binary search strategies!',
+ tags: ['algorithms', 'search', 'educational', 'interactive', 'binary-search', 'computer-science'],
+ path: '/games/guessing',
+ theme: 'Data Structures and Algorithms',
+ dateAdded: '2024-12-23'
+ },
+ {
+ id: 'n-queens',
+ title: 'N-Queens Puzzle',
+ description: 'Place as many queens as possible on an n×n chessboard so that no two queens attack each other.',
+ tags: ['logic', 'chess', 'placement', 'classic'],
+ path: '/puzzles/n-queens',
+ theme: 'Puzzles',
+ dateAdded: '2024-12-22'
+ },
+ {
+ id: 'rules-of-inference',
+ title: 'Rules of Inference Playground',
+ description: 'Practice applying resolution and equivalence rules to derive conclusions step by step in this interactive logic playground.',
+ tags: ['logic', 'inference', 'playground', 'rules', 'proofs', 'educational'],
+ path: '/discrete-math/foundations/rules-of-inference',
+ theme: 'Discrete Math',
+ dateAdded: '2024-12-23'
+ },
+ {
+ id: 'stacking-blocks',
+ title: 'Stacking Blocks Optimization',
+ description: 'Split stacks of blocks to maximize your score! An optimization puzzle about strategic decision-making.',
+ tags: ['optimization', 'strategy', 'mathematical', 'algorithm', 'puzzles'],
+ path: '/puzzles/stacking-blocks',
+ theme: 'Puzzles',
+ dateAdded: '2025-01-22'
+ },
+ {
+ id: 'craps-game',
+ title: 'Craps: An Exploration',
+ description: 'Experience the classic casino dice game! Roll two dice and learn about probability as you discover the rules of the opening throw.',
+ tags: ['probability', 'dice', 'casino', 'mathematics', 'statistics', 'gambling'],
+ path: '/themes/games/craps-game',
+ theme: 'Games',
+ dateAdded: '2025-01-05'
+ },
+ {
+ id: 'neighbor-sum-avoidance',
+ title: 'Neighbor Sum Avoidance',
+ description: 'Arrange numbers in a circle so that the sum of two neighbors is never divisible by 3, 5, or 7. An interactive graph theory puzzle!',
+ tags: ['graph-theory', 'puzzle', 'arrangement', 'divisibility', 'circle', 'mathematics'],
+ path: '/themes/discrete-math/graphs/neighbor-sum-avoidance',
+ theme: 'Discrete Math',
+ dateAdded: '2025-01-22'
+ },
+ {
+ id: 'burnsides-lemma',
+ title: "Burnside's Lemma",
+ description: 'Explore how to count distinct objects under symmetry by creating necklaces with different bead and color combinations.',
+ tags: ['group-theory', 'symmetry', 'combinatorics', 'counting', 'algebra', 'structures'],
+ path: '/themes/discrete-math/structures/burnsides-lemma',
+ theme: 'Discrete Math',
+ dateAdded: '2025-01-22'
+ },
+ {
+ id: 'cube-coloring',
+ title: "Burnside's Lemma: Cube Coloring",
+ description: 'Explore cube rotations and their correspondence with permutations. Paint a 3D cube and understand the rotational symmetry group.',
+ tags: ['group-theory', 'symmetry', 'cube', 'rotations', 'permutations', 'algebra', '3d'],
+ path: '/themes/discrete-math/structures/cube-coloring',
+ theme: 'Discrete Math',
+ dateAdded: '2025-01-22'
+ },
+ {
+ id: 'presents-puzzle',
+ title: 'The Presents Puzzle',
+ description: 'Explore a probability puzzle about search strategies. Charlie puts 26 presents in 100 boxes. Alice opens them in order while Bob opens odds first, then evens. Who is more likely to see all 26 presents first?',
+ tags: ['probability', 'search', 'simulation', 'expected-value', 'strategy', 'uncertainty'],
+ path: '/themes/discrete-math/uncertainty/presents-puzzle',
+ theme: 'Discrete Math',
+ dateAdded: '2025-11-19'
+ },
+ {
+ id: 'ladybug-clock',
+ title: 'The Ladybug Clock Puzzle',
+ description: 'A ladybug walks randomly on a clock face. Discover the surprising probability that any given number is painted last!',
+ tags: ['probability', 'random-walk', 'simulation', 'statistics', 'cover-time', 'puzzle'],
+ path: '/puzzles/ladybug-clock',
+ theme: 'Puzzles',
+ dateAdded: '2025-01-21'
+ },
+ {
+ id: 'erdos-discrepancy',
+ title: 'The Erdős Discrepancy Problem',
+ description: 'Can you write instructions to survive the tunnel forever? Explore this famous mathematical puzzle through the Prisoner\'s Walk game.',
+ tags: ['erdos', 'discrepancy', 'sequences', 'game-theory', 'impossibility', 'puzzle', 'number-theory'],
+ path: '/puzzles/erdos-discrepancy',
+ theme: 'Puzzles',
+ dateAdded: '2025-01-22'
+ }
+];
+
+type SortField = 'title' | 'dateAdded';
+type SortDirection = 'asc' | 'desc';
+
+const InteractiveIndex = () => {
+ const [searchTerm, setSearchTerm] = useState('');
+ const [selectedTag, setSelectedTag] = useState
('');
+ const [sortField, setSortField] = useState('title');
+ const [sortDirection, setSortDirection] = useState('asc');
+ const [currentPage, setCurrentPage] = useState(1);
+ const itemsPerPage = 10;
+ const [showTags, setShowTags] = useState(false);
+
+ // Get all unique tags
+ const allTags = useMemo(() => {
+ const tags = new Set();
+ allInteractives.forEach(interactive => {
+ interactive.tags.forEach(tag => tags.add(tag));
+ });
+ return Array.from(tags).sort();
+ }, []);
+
+ // Filter and sort interactives
+ const filteredAndSortedInteractives = useMemo(() => {
+ const filtered = allInteractives.filter(interactive => {
+ const matchesSearch = interactive.title.toLowerCase().includes(searchTerm.toLowerCase()) ||
+ interactive.description.toLowerCase().includes(searchTerm.toLowerCase()) ||
+ interactive.tags.some(tag => tag.toLowerCase().includes(searchTerm.toLowerCase()));
+
+ const matchesTag = !selectedTag || interactive.tags.includes(selectedTag);
+
+ return matchesSearch && matchesTag;
+ });
+
+ // Sort
+ filtered.sort((a, b) => {
+ let aValue = a[sortField];
+ let bValue = b[sortField];
+
+ if (sortField === 'title') {
+ aValue = aValue.toLowerCase();
+ bValue = bValue.toLowerCase();
+ }
+
+ if (aValue < bValue) return sortDirection === 'asc' ? -1 : 1;
+ if (aValue > bValue) return sortDirection === 'asc' ? 1 : -1;
+ return 0;
+ });
+
+ return filtered;
+ }, [searchTerm, selectedTag, sortField, sortDirection]);
+
+ // Pagination
+ const totalPages = Math.ceil(filteredAndSortedInteractives.length / itemsPerPage);
+ const startIndex = (currentPage - 1) * itemsPerPage;
+ const paginatedInteractives = filteredAndSortedInteractives.slice(startIndex, startIndex + itemsPerPage);
+
+ const handleTagClick = (tag: string) => {
+ setSelectedTag(selectedTag === tag ? '' : tag);
+ setCurrentPage(1);
+ };
+
+ const handleSortChange = (field: SortField) => {
+ if (sortField === field) {
+ setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc');
+ } else {
+ setSortField(field);
+ setSortDirection('asc');
+ }
+ setCurrentPage(1);
+ };
+
+ return (
+
+
+
+
All Interactives ({allInteractives.length})
+
+ {/* Search and Sort Controls */}
+
+
+
+ {
+ setSearchTerm(e.target.value);
+ setCurrentPage(1);
+ }}
+ className="pl-10"
+ />
+
+
+
+ handleSortChange('title')}
+ className="flex items-center gap-2"
+ >
+ {sortField === 'title' ? (
+ sortDirection === 'asc' ? :
+ ) : (
+
+ )}
+ Title
+
+
+ handleSortChange('dateAdded')}
+ className="flex items-center gap-2"
+ >
+ {sortField === 'dateAdded' ? (
+ sortDirection === 'asc' ? :
+ ) : (
+
+ )}
+ Recency
+
+
+
+
+ {/* Tag Filter */}
+ {selectedTag && (
+
+ Filtered by:
+ setSelectedTag('')}
+ >
+ {selectedTag} ×
+
+
+ )}
+
+ {/* Tags */}
+
+
+
Filter by Tags
+ setShowTags(v => !v)}>
+ {showTags ? 'Hide Tags' : 'Show all Tags'}
+
+
+ {showTags && (
+
+ {allTags.map(tag => (
+ handleTagClick(tag)}
+ >
+ {tag}
+
+ ))}
+
+ )}
+
+
+ {/* Results Count */}
+
+
+ Showing {filteredAndSortedInteractives.length} of {allInteractives.length} interactives
+
+
+
+ {/* Interactive List */}
+
+ {paginatedInteractives.map(interactive => (
+
+
+
+
+ {interactive.title}
+
+
+
+ {interactive.tags.map(tag => (
+ handleTagClick(tag)}
+ >
+ {tag}
+
+ ))}
+
+
+
+ {interactive.description}
+
+
+ {interactive.theme}
+
+
+
+
+ ))}
+
+
+ {/* Pagination */}
+ {totalPages > 1 && (
+
+
setCurrentPage(Math.max(1, currentPage - 1))}
+ disabled={currentPage === 1}
+ >
+ Previous
+
+
+
+ {Array.from({ length: totalPages }, (_, i) => i + 1).map(page => (
+ setCurrentPage(page)}
+ >
+ {page}
+
+ ))}
+
+
+
setCurrentPage(Math.min(totalPages, currentPage + 1))}
+ disabled={currentPage === totalPages}
+ >
+ Next
+
+
+ )}
+
+ {paginatedInteractives.length === 0 && (
+
+
No interactives found matching your criteria.
+
+ )}
+
+
+
+ );
+};
+
+export default InteractiveIndex;
diff --git a/src/components/InteractiveRenderer.tsx b/src/components/InteractiveRenderer.tsx
deleted file mode 100644
index 4998bfa..0000000
--- a/src/components/InteractiveRenderer.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import React, { type ComponentType,lazy, Suspense } from "react";
-
-const componentMap: Record Promise<{ default: ComponentType }>> = {
- "akkam-bakkam": () => import("./interactives/AkkamBakkam"),
- "binary-number-game": () => import("./interactives/BinaryNumberGame"),
- "ternary-number-game": () => import("./interactives/TernaryNumberGame"),
- "balanced-ternary-game": () => import("./interactives/BalancedTernaryGame"),
- "zeckendorf-game": () => import("./interactives/ZeckendorfGame"),
- "zeckendorf-search-trick": () => import("./interactives/ZeckendorfSearchTrick"),
- "binary-search-trick": () => import("./interactives/BinarySearchTrick"),
- "ternary-search-trick": () => import("./interactives/TernarySearchTrick"),
- "game-of-sim": () => import("./interactives/GameOfSim"),
- "northcotts-game": () => import("./interactives/NorthcottsGame"),
- "nim-game": () => import("./interactives/NimGame"),
- "assisted-nim-game": () => import("./interactives/AssistedNimGame"),
- "gold-coin-game": () => import("./interactives/GoldCoinGame"),
- "subtraction-game": () => import("./interactives/SubtractionGame"),
- "craps-game": () => import("./interactives/CrapsGame"),
- "bagchal-game": () => import("./interactives/BagchalGame"),
- "guessing-game": () => import("./interactives/GuessingGame"),
- "knights-puzzle": () => import("./interactives/KnightsPuzzle"),
- "plate-swap-puzzle": () => import("./interactives/PlateSwapPuzzle"),
- "chessboard-repaint-puzzle": () => import("./interactives/ChessboardRepaintPuzzle"),
- "n-queens-puzzle": () => import("./interactives/NQueensPuzzle"),
- "sikinia-parliament-puzzle": () => import("./interactives/SikiniaParliamentPuzzle"),
- "bulgarian-solitaire": () => import("./interactives/BulgarianSolitaire"),
- "pebble-placement-game": () => import("./interactives/PebblePlacementGame"),
- "stacking-blocks": () => import("./interactives/StackingBlocks"),
- "domino-retiling-puzzle": () => import("./interactives/DominoRetilingPuzzle"),
- "asc-desc-grid-puzzle": () => import("./interactives/AscDescGridPuzzle"),
- "ladybug-clock-puzzle": () => import("./interactives/LadybugClockPuzzle"),
- "erdos-discrepancy-puzzle": () => import("./interactives/ErdosDiscrepancyPuzzle"),
- "parity-bits-game": () => import("./interactives/ParityBitsGame"),
- "rules-of-inference": () => import("./interactives/RulesOfInferencePlayground"),
- "neighbor-sum-avoidance": () => import("./interactives/NeighborSumAvoidance"),
- "burnsides-lemma": () => import("./interactives/BurnsidesLemma"),
- "cube-coloring": () => import("./interactives/CubeColoring"),
- "presents-puzzle": () => import("./interactives/PresentsPuzzle"),
- "ferrers-rogers-ramanujan": () => import("./interactives/FerrersRogersRamanujan"),
- "grid-tiling-puzzle": () => import("./interactives/GridTilingPuzzle"),
- "sunny-lines-puzzle": () => import("./interactives/SunnyLinesPuzzle"),
- "rent-division-puzzle": () => import("./interactives/RentDivisionPuzzle"),
- "eternal-domination-game": () => import("./interactives/EternalDominationGame"),
- "knights-and-knaves": () => import("./interactives/KnightsAndKnavesI"),
- "three-bank-accounts": () => import("./interactives/ThreeBankAccounts"),
- "computing-pi": () => import("./interactives/ComputingPi"),
- "kasuti": () => import("./interactives/KasutiEmbroidery"),
-};
-
-const lazyCache = new Map>>();
-
-function getLazyComponent(slug: string) {
- if (!lazyCache.has(slug)) {
- const loader = componentMap[slug];
- if (!loader) return null;
- lazyCache.set(slug, lazy(loader));
- }
- return lazyCache.get(slug)!;
-}
-
-interface InteractiveRendererProps {
- slug: string;
-}
-
-const InteractiveRenderer: React.FC = ({ slug }) => {
- const LazyComponent = getLazyComponent(slug);
-
- if (!LazyComponent) {
- return (
-
-
Interactive not found.
-
- );
- }
-
- return (
-
-
-
- }
- >
-
-
- );
-};
-
-export default InteractiveRenderer;
diff --git a/src/components/interactives/KnightsAndKnavesI.tsx b/src/components/KnightsAndKnavesI.tsx
similarity index 100%
rename from src/components/interactives/KnightsAndKnavesI.tsx
rename to src/components/KnightsAndKnavesI.tsx
diff --git a/src/components/interactives/KnightsPuzzle.tsx b/src/components/KnightsPuzzle.tsx
similarity index 89%
rename from src/components/interactives/KnightsPuzzle.tsx
rename to src/components/KnightsPuzzle.tsx
index c5a1c84..9780ae9 100644
--- a/src/components/interactives/KnightsPuzzle.tsx
+++ b/src/components/KnightsPuzzle.tsx
@@ -2,15 +2,24 @@ import { useState, useCallback } from "react";
import { Button } from "@/components/ui/button";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Badge } from "@/components/ui/badge";
-import { RefreshCw, RotateCcw, ExternalLink } from "lucide-react";
+import { RefreshCw, RotateCcw, ExternalLink, ArrowLeft } from "lucide-react";
import { toast } from "sonner";
+import SocialShare from "@/components/SocialShare";
+import { useSearchParams, useNavigate } from "react-router-dom";
type Piece = 'white' | 'black' | null;
type Position = {
row: number;
col: number;
};
-
-const KnightsPuzzle = () => {
+interface KnightsPuzzleProps {
+ showSocialShare?: boolean;
+}
+const KnightsPuzzle = ({
+ showSocialShare = false
+}: KnightsPuzzleProps) => {
+ const [searchParams] = useSearchParams();
+ const navigate = useNavigate();
+ const isFromPuzzles = searchParams.get('from') === 'puzzles';
// Initial state: white knights at top corners, black knights at bottom corners
const initialBoard: Piece[][] = [['white', null, 'white'], [null, null, null], ['black', null, 'black']];
@@ -147,7 +156,15 @@ const KnightsPuzzle = () => {
return null;
};
return
- {/* Title and Description - Centered */}
+ {/* Back to Puzzles button - only show when coming from puzzles */}
+ {isFromPuzzles &&
+
navigate('/themes/puzzles')} className="text-primary hover:text-primary/80 font-medium flex items-center gap-2">
+
+ Go back to Puzzles
+
+
}
+
+ {/* Green: Title and Description - Centered */}
Knights Exchange Puzzle
@@ -249,6 +266,7 @@ const KnightsPuzzle = () => {
{/* Social Share Section */}
+ {showSocialShare &&
}
;
};
export default KnightsPuzzle;
\ No newline at end of file
diff --git a/src/components/interactives/LadybugClockPuzzle.tsx b/src/components/LadybugClockPuzzle.tsx
similarity index 97%
rename from src/components/interactives/LadybugClockPuzzle.tsx
rename to src/components/LadybugClockPuzzle.tsx
index 0b8554d..7de133f 100644
--- a/src/components/interactives/LadybugClockPuzzle.tsx
+++ b/src/components/LadybugClockPuzzle.tsx
@@ -7,7 +7,9 @@ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
import { Play, Pause, RotateCcw, SkipForward, FastForward, Info, ExternalLink, BarChart3 } from 'lucide-react';
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, ReferenceLine, Cell } from 'recharts';
+import SocialShare from '@/components/SocialShare';
interface LadybugClockPuzzleProps {
+ showSocialShare?: boolean;
}
interface SimulationState {
position: number; // 0-11 (0 = 12 o'clock, 1 = 1 o'clock, etc.)
@@ -18,7 +20,9 @@ interface SimulationState {
moveCount: number;
}
const CLOCK_NUMBERS = [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
-const LadybugClockPuzzle: React.FC
= () => {
+const LadybugClockPuzzle: React.FC = ({
+ showSocialShare = true
+}) => {
// Simulation state
const [simulation, setSimulation] = useState({
position: 0,
@@ -140,7 +144,7 @@ const LadybugClockPuzzle: React.FC = () => {
// Run to completion
const runToCompletion = useCallback(() => {
setIsPlaying(false);
- let currentSim = simulation;
+ const currentSim = simulation;
let position = currentSim.position;
const visited = new Set(currentSim.visited);
let moveCount = currentSim.moveCount;
@@ -538,6 +542,7 @@ const LadybugClockPuzzle: React.FC = () => {
+ {showSocialShare && }
;
};
-export default LadybugClockPuzzle;
\ No newline at end of file
+export default LadybugClockPuzzle;
diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx
new file mode 100644
index 0000000..f23cc80
--- /dev/null
+++ b/src/components/Layout.tsx
@@ -0,0 +1,48 @@
+import Navigation from '@/components/Navigation';
+import { ReactNode } from 'react';
+import { Link } from 'react-router-dom';
+import { Button } from '@/components/ui/button';
+import { ArrowLeft } from 'lucide-react';
+
+interface LayoutProps {
+ children: ReactNode;
+ showBackToGames?: boolean;
+}
+
+const Layout = ({ children, showBackToGames = false }: LayoutProps) => {
+ return (
+
+
+
+ {showBackToGames && (
+
+
+
+
+
+ Back to Games
+
+
+
+
+ )}
+
+
+ {children}
+
+
+
+
+ );
+};
+
+export default Layout;
\ No newline at end of file
diff --git a/src/components/interactives/NQueensPuzzle.tsx b/src/components/NQueensPuzzle.tsx
similarity index 93%
rename from src/components/interactives/NQueensPuzzle.tsx
rename to src/components/NQueensPuzzle.tsx
index 80d8c23..f951dc9 100644
--- a/src/components/interactives/NQueensPuzzle.tsx
+++ b/src/components/NQueensPuzzle.tsx
@@ -5,8 +5,15 @@ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
import { Separator } from '@/components/ui/separator';
import { Play, Pause, RotateCcw, Crown, Timer, Trophy } from 'lucide-react';
+import { useNavigate } from 'react-router-dom';
+import SocialShare from './SocialShare';
-const NQueensPuzzle = () => {
+interface NQueensPuzzleProps {
+ showSocialShare?: boolean;
+}
+
+const NQueensPuzzle: React.FC = ({ showSocialShare = false }) => {
+ const navigate = useNavigate();
const [boardSize, setBoardSize] = useState([8]);
const [queens, setQueens] = useState>(new Set());
const [timerStarted, setTimerStarted] = useState(false);
@@ -142,6 +149,13 @@ const NQueensPuzzle = () => {
{/* Header */}
+
navigate('/puzzles')}
+ className="mb-4"
+ >
+ ← Back to Puzzles
+
N-Queens Puzzle
Place as many queens as possible on the chessboard so that no two queens attack each other.
@@ -279,6 +293,13 @@ const NQueensPuzzle = () => {
+
+ {showSocialShare && (
+
+ )}
);
diff --git a/src/components/Navigation.tsx b/src/components/Navigation.tsx
new file mode 100644
index 0000000..d28c138
--- /dev/null
+++ b/src/components/Navigation.tsx
@@ -0,0 +1,56 @@
+import { Link, useLocation } from "react-router-dom";
+import { BookOpen } from "lucide-react";
+import { cn } from "@/lib/utils";
+
+const Navigation = () => {
+ const location = useLocation();
+
+ const navItems = [
+ { name: "Index", path: "/index" },
+ { name: "Themes", path: "/themes" },
+ { name: "About", path: "/about" }
+ ];
+
+ return (
+
+
+
+
+
+
+
+ Interactives
+
+
+
+ {navItems.map((item) => {
+ const isActive = location.pathname === item.path;
+ return (
+
+ {item.name}
+ {isActive && (
+
+ )}
+
+ );
+ })}
+
+
+
+
+ );
+};
+
+export default Navigation;
\ No newline at end of file
diff --git a/src/components/interactives/NeighborSumAvoidance.tsx b/src/components/NeighborSumAvoidance.tsx
similarity index 61%
rename from src/components/interactives/NeighborSumAvoidance.tsx
rename to src/components/NeighborSumAvoidance.tsx
index 3027c91..1defb8e 100644
--- a/src/components/interactives/NeighborSumAvoidance.tsx
+++ b/src/components/NeighborSumAvoidance.tsx
@@ -1,19 +1,20 @@
-import confetti from 'canvas-confetti';
-import { RotateCcw,Timer } from 'lucide-react';
-import { useEffect, useRef,useState } from 'react';
-import { toast } from 'sonner';
-
-import { Button } from '@/components/ui/button';
+import { useState, useEffect, useRef } from 'react';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import { Button } from '@/components/ui/button';
+import { Switch } from '@/components/ui/switch';
import { Label } from '@/components/ui/label';
import { Slider } from '@/components/ui/slider';
-import { Switch } from '@/components/ui/switch';
+import { Timer, RotateCcw } from 'lucide-react';
+import confetti from 'canvas-confetti';
+import { toast } from 'sonner';
+import SocialShare from '@/components/SocialShare';
interface NeighborSumAvoidanceProps {
+ showSocialShare?: boolean;
shareUrl?: string;
}
-const NeighborSumAvoidance = ({ shareUrl }: NeighborSumAvoidanceProps) => {
+const NeighborSumAvoidance = ({ showSocialShare = false, shareUrl }: NeighborSumAvoidanceProps) => {
const [numberCount, setNumberCount] = useState(9);
const [mode, setMode] = useState<'default' | 'guided'>('default');
const [isActive, setIsActive] = useState(false);
@@ -42,23 +43,6 @@ const NeighborSumAvoidance = ({ shareUrl }: NeighborSumAvoidanceProps) => {
};
}, [isActive, isComplete]);
- // Keep the pre-start arena populated so users can preview the mode before starting.
- // Default mode shows empty slots + draggable numbers (disabled). Guided mode shows
- // a shuffled arrangement so edges/violations are visible right away.
- useEffect(() => {
- if (isActive) return;
- if (mode === 'default') {
- setSlots(Array(numberCount).fill(null));
- setAvailableNumbers(Array.from({ length: numberCount }, (_, i) => i + 1));
- } else {
- const shuffled = Array.from({ length: numberCount }, (_, i) => i + 1).sort(
- () => Math.random() - 0.5
- );
- setSlots(shuffled);
- setAvailableNumbers([]);
- }
- }, [numberCount, mode, isActive]);
-
const isDivisible = (a: number, b: number) => {
const sum = a + b;
return sum % 3 === 0 || sum % 5 === 0 || sum % 7 === 0;
@@ -100,30 +84,40 @@ const NeighborSumAvoidance = ({ shareUrl }: NeighborSumAvoidanceProps) => {
return `${mins}:${secs.toString().padStart(2, '0')}`;
};
- const startGame = () => {
+ const startGame = (selectedMode: 'default' | 'guided') => {
+ setMode(selectedMode);
setIsActive(true);
setTime(0);
setSwaps(0);
setIsComplete(false);
- // Slots/availableNumbers are already primed by the pre-start useEffect.
+
+ if (selectedMode === 'default') {
+ setSlots(Array(numberCount).fill(null));
+ setAvailableNumbers(Array.from({ length: numberCount }, (_, i) => i + 1));
+ } else {
+ // Guided mode: random arrangement
+ const shuffled = Array.from({ length: numberCount }, (_, i) => i + 1).sort(() => Math.random() - 0.5);
+ setSlots(shuffled);
+ setAvailableNumbers([]);
+ }
};
const restart = () => {
setIsActive(false);
setIsComplete(false);
+ setSlots(Array(numberCount).fill(null));
+ setAvailableNumbers(Array.from({ length: numberCount }, (_, i) => i + 1));
setTime(0);
setSwaps(0);
- // The pre-start useEffect will re-populate slots for the current mode.
};
const handleDragStart = (num: number, fromSlot: number | null) => {
- if (!isActive) return;
setDraggedNumber(num);
setDraggedFrom(fromSlot);
};
const handleDrop = (toSlot: number) => {
- if (!isActive || draggedNumber === null) return;
+ if (draggedNumber === null) return;
if (mode === 'default') {
// Default mode: place number in slot
@@ -148,7 +142,6 @@ const NeighborSumAvoidance = ({ shareUrl }: NeighborSumAvoidanceProps) => {
};
const handleSlotClick = (slotIndex: number) => {
- if (!isActive) return;
if (mode === 'default') {
// Remove from slot in default mode
if (slots[slotIndex] !== null) {
@@ -188,7 +181,7 @@ const NeighborSumAvoidance = ({ shareUrl }: NeighborSumAvoidanceProps) => {
return (
{/* Draw circle */}
-
+
{/* Draw violation arcs */}
{violations.map(i => {
@@ -204,7 +197,7 @@ const NeighborSumAvoidance = ({ shareUrl }: NeighborSumAvoidanceProps) => {
key={i}
d={`M ${x1} ${y1} A ${radius} ${radius} 0 0 1 ${x2} ${y2}`}
fill="none"
- stroke="var(--destructive)"
+ stroke="hsl(var(--destructive))"
strokeWidth="4"
/>
);
@@ -232,9 +225,9 @@ const NeighborSumAvoidance = ({ shareUrl }: NeighborSumAvoidanceProps) => {
y1={y1}
x2={x2}
y2={y2}
- stroke={isAdjacentOnCircle ? "#22c55e" : "var(--muted-foreground)"}
- strokeWidth={isAdjacentOnCircle ? "2.5" : "1"}
- opacity={isAdjacentOnCircle ? "0.9" : "0.3"}
+ stroke={isAdjacentOnCircle ? "hsl(var(--primary))" : "hsl(var(--muted-foreground))"}
+ strokeWidth={isAdjacentOnCircle ? "2" : "1"}
+ opacity={isAdjacentOnCircle ? "0.8" : "0.3"}
/>
);
}
@@ -256,8 +249,8 @@ const NeighborSumAvoidance = ({ shareUrl }: NeighborSumAvoidanceProps) => {
cx={x}
cy={y}
r="25"
- fill={isSelected ? "var(--primary)" : "var(--background)"}
- stroke={isSelected ? "var(--primary)" : "var(--border)"}
+ fill={isSelected ? "hsl(var(--primary))" : "hsl(var(--background))"}
+ stroke={isSelected ? "hsl(var(--primary))" : "hsl(var(--border))"}
strokeWidth="2"
onDragOver={(e) => e.preventDefault()}
onDrop={() => handleDrop(i)}
@@ -271,7 +264,7 @@ const NeighborSumAvoidance = ({ shareUrl }: NeighborSumAvoidanceProps) => {
textAnchor="middle"
dominantBaseline="middle"
className="text-xl font-bold select-none pointer-events-none"
- fill={isSelected ? "var(--primary-foreground)" : "var(--foreground)"}
+ fill={isSelected ? "hsl(var(--primary-foreground))" : "hsl(var(--foreground))"}
>
{num}
@@ -293,115 +286,110 @@ const NeighborSumAvoidance = ({ shareUrl }: NeighborSumAvoidanceProps) => {
- {/* Config controls — always visible, slider/toggle disabled once active */}
-
-
-
-
Default Mode
-
setMode(checked ? 'guided' : 'default')}
- disabled={isActive}
- />
- Guided Mode
+ {!isActive ? (
+
+
+
+ Default Mode
+ setMode(checked ? 'guided' : 'default')}
+ />
+ Guided Mode
+
+
+
+ Numbers: {numberCount}
+ setNumberCount(value[0])}
+ className="w-24"
+ />
+
-
-
Numbers: {numberCount}
-
setNumberCount(value[0])}
- className="w-24"
- disabled={isActive}
- />
+
+
+ {mode === 'default' ? (
+ <>
+
Drag numbers from below into the circle slots.
+
Adjacent numbers that sum to a multiple of 3, 5, or 7 will show a red arc.
+
Click a filled slot to remove the number.
+ >
+ ) : (
+ <>
+
Numbers are connected by edges if their sum is NOT divisible by 3, 5, or 7.
+
Click two slots to swap their numbers and form a cycle on the circle's edge.
+ >
+ )}
+
+
startGame(mode)} size="lg">
+ Start {mode === 'default' ? 'Default' : 'Guided'} Mode
+
-
-
- {mode === 'default' ? (
- <>
-
Drag numbers from below into the circle slots.
-
Adjacent numbers that sum to a multiple of 3, 5, or 7 will show a red arc.
-
Click a filled slot to remove the number.
- >
- ) : (
- <>
-
Numbers are connected by light grey edges if their sum is NOT divisible by 3, 5, or 7.
-
Violations around the circle are marked by red arcs, and valid neighbors are connected by a green line.
-
Click two slots to swap their numbers and form a cycle on the circle's edge.
- >
- )}
-
-
-
- {/* Timer + controls — shown after start */}
- {isActive && (
-
-
-
-
{formatTime(time)}
+ ) : (
+
+
+
+
+ {formatTime(time)}
+
+ {mode === 'guided' && (
+
+ Swaps: {swaps}
+
+ )}
+
+
+ Restart
+
- {mode === 'guided' && (
-
- Swaps: {swaps}
+
+ {renderCircle()}
+
+ {mode === 'default' && availableNumbers.length > 0 && (
+
+ {availableNumbers.map(num => (
+
handleDragStart(num, null)}
+ className="w-12 h-12 rounded-full border-2 border-primary bg-background flex items-center justify-center text-lg font-bold cursor-move hover:scale-110 transition-transform"
+ >
+ {num}
+
+ ))}
)}
-
-
- Restart
-
-
- )}
- {/* Arena — always visible */}
-
- {renderCircle()}
-
-
- {/* Start button — shown before start */}
- {!isActive && (
-
-
- Start
-
-
- )}
-
- {/* Available numbers for default mode — always visible pre/post start,
- but only draggable once active */}
- {mode === 'default' && availableNumbers.length > 0 && (
-
- {availableNumbers.map(num => (
-
handleDragStart(num, null) : undefined}
- className={`w-12 h-12 rounded-full border-2 border-primary bg-background flex items-center justify-center text-lg font-bold transition-transform ${
- isActive ? 'cursor-move hover:scale-110' : 'cursor-not-allowed opacity-60'
- }`}
- >
- {num}
+ {isComplete && (
+
+
+ 🎉 Congratulations! You solved it in {formatTime(time)}
+ {mode === 'guided' && ` with ${swaps} swaps`}!
+
+
Play Again
- ))}
-
- )}
-
- {isComplete && (
-
-
- 🎉 Congratulations! You solved it in {formatTime(time)}
- {mode === 'guided' && ` with ${swaps} swaps`}!
-
-
Play Again
+ )}
)}
+ {showSocialShare && (
+
+
+
+ )}
);
};
diff --git a/src/components/interactives/NimGame.tsx b/src/components/NimGame.tsx
similarity index 96%
rename from src/components/interactives/NimGame.tsx
rename to src/components/NimGame.tsx
index f10f00c..5fe070c 100644
--- a/src/components/interactives/NimGame.tsx
+++ b/src/components/NimGame.tsx
@@ -2,6 +2,7 @@ import React, { useState, useRef } from 'react';
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card';
import { Button } from '@/components/ui/button';
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';
+import SocialShare from '@/components/SocialShare';
const SKY_BLUE = '#e0f2fe';
const MAROON = '#800000';
@@ -27,9 +28,10 @@ const heapColors = [
];
interface NimGameProps {
+ showSocialShare?: boolean;
}
-const NimGame: React.FC
= () => {
+const NimGame: React.FC = ({ showSocialShare = true }) => {
const [mode, setMode] = useState(null);
const [showSetup, setShowSetup] = useState(false);
const [userHeapCount, setUserHeapCount] = useState(3);
@@ -276,6 +278,13 @@ const NimGame: React.FC = () => {
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/NorthcottsGame.tsx b/src/components/NorthcottsGame.tsx
similarity index 97%
rename from src/components/interactives/NorthcottsGame.tsx
rename to src/components/NorthcottsGame.tsx
index ae1aa9c..eba81d2 100644
--- a/src/components/interactives/NorthcottsGame.tsx
+++ b/src/components/NorthcottsGame.tsx
@@ -6,6 +6,7 @@ import { Switch } from '@/components/ui/switch';
import { Label } from '@/components/ui/label';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import { RotateCcw, Shuffle } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
interface GameState {
board: ('L' | 'R' | null)[][];
@@ -22,9 +23,10 @@ interface GameState {
}
interface NorthcottsGameProps {
+ showSocialShare?: boolean;
}
-const NorthcottsGame: React.FC
= () => {
+const NorthcottsGame: React.FC = ({ showSocialShare = false }) => {
const [gameState, setGameState] = useState(() => ({
board: Array(3).fill(null).map(() => Array(6).fill(null)),
currentPlayer: 'L',
@@ -446,6 +448,13 @@ const NorthcottsGame: React.FC = () => {
)}
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/ParityBitsGame.tsx b/src/components/ParityBitsGame.tsx
similarity index 89%
rename from src/components/interactives/ParityBitsGame.tsx
rename to src/components/ParityBitsGame.tsx
index 8ca021d..aff21ce 100644
--- a/src/components/interactives/ParityBitsGame.tsx
+++ b/src/components/ParityBitsGame.tsx
@@ -4,11 +4,13 @@ import { Slider } from '@/components/ui/slider';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Alert, AlertDescription } from '@/components/ui/alert';
import { RotateCcw, Info } from 'lucide-react';
+import SocialShare from './SocialShare';
interface ParityBitsGameProps {
+ showSocialShare?: boolean;
}
-const ParityBitsGame = ({}: ParityBitsGameProps) => {
+const ParityBitsGame = ({ showSocialShare = true }: ParityBitsGameProps) => {
const [gridSize, setGridSize] = useState(5);
const [grid, setGrid] = useState
(() =>
Array(5).fill(null).map(() => Array(5).fill(false))
@@ -264,7 +266,7 @@ const ParityBitsGame = ({}: ParityBitsGameProps) => {
className={`
w-12 h-12 border-2 transition-all duration-200
${currentGrid[row]?.[col] ? 'bg-foreground' : 'bg-background'}
- ${isParityCell ? 'border-muted-foreground/40 border-dashed' : 'border-foreground'}
+ ${isParityCell ? 'border-primary' : 'border-foreground'}
${isError ? 'ring-4 ring-green-500 bg-green-500/20' : ''}
${shouldHighlightForAnimation ? highlightColor : ''}
${phase === 'setup' && !isParityCell ? 'hover:bg-accent cursor-pointer' : ''}
@@ -304,27 +306,21 @@ const ParityBitsGame = ({}: ParityBitsGameProps) => {
{/* Column parity labels */}
{(animationState.currentCol >= 0 || animationState.showColParity) && (
-
-
- {Array(gridSize + 1).fill(null).map((_, col) => {
- const hasOddParity = animationState.colParities[col];
- const count = animationState.colCounts[col];
- const showLabel = (col === animationState.currentCol) || animationState.showColParity;
- return (
-
- {showLabel && (
-
- {count}
-
- )}
-
- );
- })}
-
- {/* Spacer matching the row labels width */}
- {(animationState.currentRow >= 0 || animationState.showRowParity) && (
-
- )}
+
+ {Array(gridSize + 1).fill(null).map((_, col) => {
+ const hasOddParity = animationState.colParities[col];
+ const count = animationState.colCounts[col];
+ const showLabel = (col === animationState.currentCol) || animationState.showColParity;
+ return (
+
+ {showLabel && (
+
+ {count}
+
+ )}
+
+ );
+ })}
)}
@@ -342,8 +338,8 @@ const ParityBitsGame = ({}: ParityBitsGameProps) => {
{/* Instructions */}
-
-
+
+
{phase === 'setup' && 'Set your grid by clicking squares to make them black. Then add parity bits.'}
{phase === 'parity' && 'Parity bits added! Now flip exactly one bit anywhere in the grid.'}
{phase === 'flip' && 'Bit flipped! Click "Identify Flip" to see error detection in action.'}
@@ -369,36 +365,35 @@ const ParityBitsGame = ({}: ParityBitsGameProps) => {
/>
-
-
+
Add Parity Bits
-
-
Random Start
-
-
{animationState.isAnimating ? 'Checking...' : 'Identify Flip'}
-
-
@@ -414,7 +409,7 @@ const ParityBitsGame = ({}: ParityBitsGameProps) => {
{parityBitsAdded && (
- Parity cells have dashed borders. Each row and column should have an even number of black squares.
+ Parity cells have colored borders. Each row and column should have an even number of black squares.
{flippedCell && (
@@ -436,6 +431,15 @@ const ParityBitsGame = ({}: ParityBitsGameProps) => {
{/* Social Share */}
+ {showSocialShare && (
+
+
+
+ )}
diff --git a/src/components/interactives/PebblePlacementGame.tsx b/src/components/PebblePlacementGame.tsx
similarity index 96%
rename from src/components/interactives/PebblePlacementGame.tsx
rename to src/components/PebblePlacementGame.tsx
index c0a60dc..b186e8c 100644
--- a/src/components/interactives/PebblePlacementGame.tsx
+++ b/src/components/PebblePlacementGame.tsx
@@ -4,11 +4,13 @@ import { Button } from '@/components/ui/button';
import { Slider } from '@/components/ui/slider';
import { Badge } from '@/components/ui/badge';
import { RotateCcw, Trophy } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
interface PebblePlacementGameProps {
+ showSocialShare?: boolean;
}
-const PebblePlacementGame: React.FC = () => {
+const PebblePlacementGame: React.FC = ({ showSocialShare = false }) => {
const [numPebbles, setNumPebbles] = useState(3);
const [pebblesInHand, setPebblesInHand] = useState(3);
const [placedPebbles, setPlacedPebbles] = useState>(new Set());
@@ -220,6 +222,13 @@ const PebblePlacementGame: React.FC = () => {
)}
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/PlateSwapPuzzle.tsx b/src/components/PlateSwapPuzzle.tsx
similarity index 93%
rename from src/components/interactives/PlateSwapPuzzle.tsx
rename to src/components/PlateSwapPuzzle.tsx
index e59fe91..29d75ea 100644
--- a/src/components/interactives/PlateSwapPuzzle.tsx
+++ b/src/components/PlateSwapPuzzle.tsx
@@ -3,7 +3,9 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';
-import { RefreshCw, RotateCcw, BookOpen, Trophy, CheckCircle, ExternalLink } from 'lucide-react';
+import { RefreshCw, RotateCcw, BookOpen, Trophy, CheckCircle, ArrowLeft, ExternalLink } from 'lucide-react';
+import SocialShare from './SocialShare';
+import { useSearchParams, useNavigate } from 'react-router-dom';
interface Person {
id: number;
@@ -21,7 +23,15 @@ interface GameState {
gameStarted: boolean;
}
-const PlateSwapPuzzle = () => {
+interface PlateSwapPuzzleProps {
+ showSocialShare?: boolean;
+}
+
+const PlateSwapPuzzle: React.FC
= ({ showSocialShare = false }) => {
+ const [searchParams] = useSearchParams();
+ const navigate = useNavigate();
+ const isFromPuzzles = searchParams.get('from') === 'puzzles';
+
const [gameState, setGameState] = useState(() => {
const people: Person[] = [];
for (let i = 1; i <= 16; i++) {
@@ -285,6 +295,19 @@ const PlateSwapPuzzle = () => {
return (
+ {/* Back to Puzzles button - only show when coming from puzzles */}
+ {isFromPuzzles && (
+
+
navigate('/themes/puzzles')}
+ className="text-primary hover:text-primary/80 font-medium flex items-center gap-2"
+ >
+
+ Go back to Puzzles
+
+
+ )}
+
@@ -485,6 +508,13 @@ const PlateSwapPuzzle = () => {
{/* Social Share Section */}
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/PresentsPuzzle.tsx b/src/components/PresentsPuzzle.tsx
similarity index 98%
rename from src/components/interactives/PresentsPuzzle.tsx
rename to src/components/PresentsPuzzle.tsx
index be42e80..5844ed5 100644
--- a/src/components/interactives/PresentsPuzzle.tsx
+++ b/src/components/PresentsPuzzle.tsx
@@ -3,8 +3,10 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Slider } from '@/components/ui/slider';
+import SocialShare from './SocialShare';
import { Gift, Play, RotateCw, Zap, Pause, ChevronRight, ChevronLeft, ChevronsRight, ChevronsLeft } from 'lucide-react';
interface PresentsPuzzleProps {
+ showSocialShare?: boolean;
shareUrl?: string;
}
interface SimulationResult {
@@ -13,7 +15,8 @@ interface SimulationResult {
ties: number;
}
const PresentsPuzzle = ({
- shareUrl
+ showSocialShare = false,
+ shareUrl
}: PresentsPuzzleProps) => {
const [numBoxes, setNumBoxes] = useState(100);
const [numPresents, setNumPresents] = useState(26);
@@ -598,6 +601,7 @@ const PresentsPuzzle = ({
+ {showSocialShare &&
}
;
};
export default PresentsPuzzle;
\ No newline at end of file
diff --git a/src/components/interactives/RentDivisionPuzzle.tsx b/src/components/RentDivisionPuzzle.tsx
similarity index 97%
rename from src/components/interactives/RentDivisionPuzzle.tsx
rename to src/components/RentDivisionPuzzle.tsx
index b06a5b1..51f9951 100644
--- a/src/components/interactives/RentDivisionPuzzle.tsx
+++ b/src/components/RentDivisionPuzzle.tsx
@@ -11,6 +11,7 @@ import {
SelectValue,
} from "@/components/ui/select";
import { RefreshCw, User, UserRound, Users, UserCheck } from "lucide-react";
+import SocialShare from '@/components/SocialShare';
const AGENTS = ["Alice", "Bob", "Charlie", "Dana"];
const AGENT_ICONS = [User, UserRound, Users, UserCheck];
@@ -23,9 +24,10 @@ const ROOM_COLORS = [
interface RentDivisionPuzzleProps {
onComplete?: (completed: boolean) => void;
+ showSocialShare?: boolean;
}
-const RentDivisionPuzzle = ({ onComplete }: RentDivisionPuzzleProps) => {
+const RentDivisionPuzzle = ({ onComplete, showSocialShare = true }: RentDivisionPuzzleProps) => {
// V-matrix: valuations[agent][room]
const [valuations, setValuations] = useState(() =>
Array.from({ length: 4 }, () =>
@@ -469,6 +471,12 @@ const RentDivisionPuzzle = ({ onComplete }: RentDivisionPuzzleProps) => {
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/RulesOfInferencePlayground.tsx b/src/components/RulesOfInferencePlayground.tsx
similarity index 97%
rename from src/components/interactives/RulesOfInferencePlayground.tsx
rename to src/components/RulesOfInferencePlayground.tsx
index 990924d..54d85b9 100644
--- a/src/components/interactives/RulesOfInferencePlayground.tsx
+++ b/src/components/RulesOfInferencePlayground.tsx
@@ -3,6 +3,7 @@ import { Button } from "@/components/ui/button";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { useToast } from "@/hooks/use-toast";
import { AlertDialog, AlertDialogAction, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog";
+import SocialShare from '@/components/SocialShare';
// Rules of Inference Playground (Example 1: Resolution)
// Layout: 3 columns (Premises | Notepad lines with rule margin | Rules)
@@ -196,7 +197,7 @@ function DropZone({ children, onDrop, className }: { children?: React.ReactNode;
);
}
-export default function RulesOfInferencePlayground({ onComplete }: { onComplete?: (completed: boolean) => void }) {
+export default function RulesOfInferencePlayground({ onComplete, showSocialShare = true }: { onComplete?: (completed: boolean) => void; showSocialShare?: boolean }) {
const { toast } = useToast();
const [exampleId, setExampleId] = useState(EXAMPLES[0].id);
const example = useMemo(() => EXAMPLES.find((e) => e.id === exampleId)!, [exampleId]);
@@ -579,6 +580,13 @@ export default function RulesOfInferencePlayground({ onComplete }: { onComplete?
+
+ {showSocialShare && (
+
+ )}
);
}
diff --git a/src/components/interactives/SikiniaParliamentPuzzle.tsx b/src/components/SikiniaParliamentPuzzle.tsx
similarity index 96%
rename from src/components/interactives/SikiniaParliamentPuzzle.tsx
rename to src/components/SikiniaParliamentPuzzle.tsx
index 24ae90a..590e654 100644
--- a/src/components/interactives/SikiniaParliamentPuzzle.tsx
+++ b/src/components/SikiniaParliamentPuzzle.tsx
@@ -4,6 +4,7 @@ import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Alert, AlertDescription } from '@/components/ui/alert';
import { Play, RotateCcw, Trophy, Clock, Info, ChevronDown, ChevronUp, User, UserCircle, Users, UserCheck, UserX, Baby, PersonStanding, Smile, Frown, Meh } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
interface Person {
id: number;
@@ -19,9 +20,10 @@ interface Edge {
}
interface SikiniaParliamentPuzzleProps {
+ showSocialShare?: boolean;
}
-const SikiniaParliamentPuzzle: React.FC = () => {
+const SikiniaParliamentPuzzle: React.FC = ({ showSocialShare = false }) => {
const [people, setPeople] = useState([]);
const [edges, setEdges] = useState([]);
const [gameStarted, setGameStarted] = useState(false);
@@ -372,6 +374,13 @@ const SikiniaParliamentPuzzle: React.FC = () => {
{/* Social Share */}
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/SocialShare.tsx b/src/components/SocialShare.tsx
index aa529eb..258d595 100644
--- a/src/components/SocialShare.tsx
+++ b/src/components/SocialShare.tsx
@@ -2,165 +2,262 @@ import React, { useState, useEffect } from 'react';
import { Button } from '@/components/ui/button';
import { Card, CardContent } from '@/components/ui/card';
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog';
-import { Copy, QrCode, Code2 } from 'lucide-react';
+import { Share2, Copy, QrCode, Twitter, Facebook, Linkedin, Home } from 'lucide-react';
+import { useToast } from '@/hooks/use-toast';
import QRCode from 'qrcode';
+import { validateShareData, rateLimiter } from '@/utils/security';
interface SocialShareProps {
title: string;
description: string;
- url: string;
- embedUrl?: string;
+ url?: string;
}
-const SocialShare: React.FC = ({ title, description, url, embedUrl }) => {
+const SocialShare: React.FC = ({
+ title,
+ description,
+ url = window.location.href
+}) => {
const [qrCodeDataUrl, setQrCodeDataUrl] = useState('');
- const [isQrOpen, setIsQrOpen] = useState(false);
- const [isEmbedOpen, setIsEmbedOpen] = useState(false);
- const [copied, setCopied] = useState(null);
+ const [isOpen, setIsOpen] = useState(false);
+ const { toast } = useToast();
+
+ // Validate and sanitize share data
+ const shareData = validateShareData(title, description, url);
useEffect(() => {
- if (isQrOpen) {
- QRCode.toDataURL(url, {
+ if (isOpen) {
+ QRCode.toDataURL(shareData.url, {
width: 200,
margin: 2,
- color: { dark: '#000000', light: '#FFFFFF' },
- })
- .then(setQrCodeDataUrl)
- .catch(() => {});
+ color: {
+ dark: '#000000',
+ light: '#FFFFFF'
+ }
+ }).then(setQrCodeDataUrl).catch(() => {
+ toast({
+ title: "Error",
+ description: "Failed to generate QR code",
+ variant: "destructive",
+ });
+ });
+ }
+ }, [shareData.url, isOpen, toast]);
+
+ const copyToClipboard = async (text: string) => {
+ console.log('Copy to clipboard called with text:', text);
+
+ if (!rateLimiter.isAllowed('clipboard', 10, 60000)) {
+ console.log('Rate limit exceeded for clipboard');
+ toast({
+ title: "Too many attempts",
+ description: "Please wait before copying again",
+ variant: "destructive",
+ });
+ return;
}
- }, [url, isQrOpen]);
- const copyToClipboard = async (text: string, label: string) => {
try {
+ console.log('Attempting to copy to clipboard...');
+
+ // Check if clipboard API is available
+ if (!navigator.clipboard) {
+ console.log('Clipboard API not available, using fallback');
+ // Fallback for older browsers or insecure contexts
+ const textArea = document.createElement('textarea');
+ textArea.value = text;
+ textArea.style.position = 'fixed';
+ textArea.style.left = '-999999px';
+ textArea.style.top = '-999999px';
+ document.body.appendChild(textArea);
+ textArea.focus();
+ textArea.select();
+
+ try {
+ const success = document.execCommand('copy');
+ console.log('Fallback copy result:', success);
+ if (success) {
+ toast({
+ title: "Copied!",
+ description: "Link copied to clipboard",
+ });
+ } else {
+ throw new Error('Copy command failed');
+ }
+ } catch (err) {
+ console.error('Fallback copy failed:', err);
+ toast({
+ title: "Error",
+ description: "Failed to copy to clipboard",
+ variant: "destructive",
+ });
+ } finally {
+ document.body.removeChild(textArea);
+ }
+ return;
+ }
+
+ console.log('Using modern clipboard API');
await navigator.clipboard.writeText(text);
- setCopied(label);
- setTimeout(() => setCopied(null), 2000);
- } catch {
- // fallback
- const ta = document.createElement('textarea');
- ta.value = text;
- ta.style.position = 'fixed';
- ta.style.left = '-9999px';
- document.body.appendChild(ta);
- ta.select();
- document.execCommand('copy');
- document.body.removeChild(ta);
- setCopied(label);
- setTimeout(() => setCopied(null), 2000);
+ console.log('Copy successful');
+ toast({
+ title: "Copied!",
+ description: "Link copied to clipboard",
+ });
+ } catch (err) {
+ console.error('Copy failed:', err);
+ toast({
+ title: "Error",
+ description: "Failed to copy to clipboard. Please copy the URL manually.",
+ variant: "destructive",
+ });
}
};
- const twitterUrl = `https://twitter.com/intent/tweet?text=${encodeURIComponent(title)}&url=${encodeURIComponent(url)}`;
- const linkedinUrl = `https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(url)}`;
+ const copyQRCode = async () => {
+ if (!rateLimiter.isAllowed('qr-copy', 5, 60000)) {
+ toast({
+ title: "Too many attempts",
+ description: "Please wait before copying again",
+ variant: "destructive",
+ });
+ return;
+ }
- const embedCode = embedUrl
- ? ``
- : '';
+ try {
+ const response = await fetch(qrCodeDataUrl);
+ const blob = await response.blob();
+ await navigator.clipboard.write([
+ new ClipboardItem({ 'image/png': blob })
+ ]);
+ toast({
+ title: "QR Code Copied!",
+ description: "QR code image copied to clipboard",
+ });
+ } catch (err) {
+ toast({
+ title: "Error",
+ description: "Failed to copy QR code",
+ variant: "destructive",
+ });
+ }
+ };
+
+ const shareLinks = {
+ twitter: `https://twitter.com/intent/tweet?text=${encodeURIComponent(shareData.title)}&url=${encodeURIComponent(shareData.url)}`,
+ facebook: `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(shareData.url)}`,
+ linkedin: `https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(shareData.url)}`
+ };
+
+ const handleSocialShare = (platform: string, url: string) => {
+ if (!rateLimiter.isAllowed('social-share', 10, 60000)) {
+ toast({
+ title: "Too many attempts",
+ description: "Please wait before sharing again",
+ variant: "destructive",
+ });
+ return;
+ }
+
+ window.open(url, '_blank', 'noopener,noreferrer');
+ };
return (
-
- {/* Twitter/X */}
-
window.open(twitterUrl, '_blank', 'noopener,noreferrer')}
- className="gap-2"
- >
-
-
-
- Share
-
-
- {/* LinkedIn */}
-
window.open(linkedinUrl, '_blank', 'noopener,noreferrer')}
- className="gap-2"
- >
-
-
-
- Share
-
-
- {/* Copy Link */}
-
copyToClipboard(url, 'link')}
- className="gap-2"
- >
-
- {copied === 'link' ? 'Copied!' : 'Copy Link'}
-
-
- {/* QR Code */}
-
-
-
-
- QR Code
-
-
-
-
-
-
- QR Code
-
-
-
- {qrCodeDataUrl && (
-
-
-
-
-
- )}
-
Scan to open this interactive
-
-
-
-
- {/* Embed Code */}
- {embedUrl && (
-
+
+
+
+ {/* Social sharing buttons */}
+
handleSocialShare('twitter', shareLinks.twitter)}
+ className="flex items-center gap-2"
+ >
+
+ Twitter
+
+
+
handleSocialShare('facebook', shareLinks.facebook)}
+ className="flex items-center gap-2"
+ >
+
+ Facebook
+
+
+
handleSocialShare('linkedin', shareLinks.linkedin)}
+ className="flex items-center gap-2"
+ >
+
+ LinkedIn
+
+
+ {/* Copy link button */}
+
copyToClipboard(shareData.url)}
+ className="flex items-center gap-2"
+ >
+
+ Copy Link
+
+
+ {/* QR Code dialog */}
+
-
-
- Embed
+
+
+ QR Code
-
+
-
- Embed Code
+
+ QR Code
-
-
- {embedCode}
-
-
copyToClipboard(embedCode, 'embed')}
- className="gap-2"
- >
-
- {copied === 'embed' ? 'Copied!' : 'Copy Embed Code'}
-
+
+ {qrCodeDataUrl && (
+
+
+
+
+
+ )}
+
+
Scan to open this interactive
+
+
+ Copy QR Code
+
+
- )}
+
+
+
+ {/* Centered Home Icon */}
+
+ window.location.href = '/'}
+ />
);
};
-export default SocialShare;
+export default SocialShare;
\ No newline at end of file
diff --git a/src/components/interactives/StackingBlocks.tsx b/src/components/StackingBlocks.tsx
similarity index 95%
rename from src/components/interactives/StackingBlocks.tsx
rename to src/components/StackingBlocks.tsx
index bf07ed4..b1a81a6 100644
--- a/src/components/interactives/StackingBlocks.tsx
+++ b/src/components/StackingBlocks.tsx
@@ -5,12 +5,14 @@ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Label } from '@/components/ui/label';
import { Separator } from '@/components/ui/separator';
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
+import SocialShare from './SocialShare';
import confetti from 'canvas-confetti';
interface StackingBlocksProps {
+ showSocialShare?: boolean;
}
-const StackingBlocks: React.FC = () => {
+const StackingBlocks: React.FC = ({ showSocialShare = false }) => {
const [n, setN] = useState(8);
const [stacks, setStacks] = useState([]);
const [score, setScore] = useState(0);
@@ -208,6 +210,14 @@ const StackingBlocks: React.FC = () => {
)}
+
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/SubtractionGame.tsx b/src/components/SubtractionGame.tsx
similarity index 95%
rename from src/components/interactives/SubtractionGame.tsx
rename to src/components/SubtractionGame.tsx
index 9a7d34a..2834753 100644
--- a/src/components/interactives/SubtractionGame.tsx
+++ b/src/components/SubtractionGame.tsx
@@ -2,11 +2,13 @@ import React, { useState, useEffect } from 'react';
import { Button } from '@/components/ui/button';
import { Slider } from '@/components/ui/slider';
import confetti from 'canvas-confetti';
+import SocialShare from '@/components/SocialShare';
interface SubtractionGameProps {
+ showSocialShare?: boolean;
}
-const SubtractionGame: React.FC
= () => {
+const SubtractionGame: React.FC = ({ showSocialShare = true }) => {
const [n, setN] = useState([10]);
const [k, setK] = useState([3]);
const [gameStarted, setGameStarted] = useState(false);
@@ -282,6 +284,13 @@ const SubtractionGame: React.FC = () => {
+
+ {showSocialShare && (
+
+ )}
);
diff --git a/src/components/interactives/SunnyLinesPuzzle.tsx b/src/components/SunnyLinesPuzzle.tsx
similarity index 97%
rename from src/components/interactives/SunnyLinesPuzzle.tsx
rename to src/components/SunnyLinesPuzzle.tsx
index 08277b3..4c8f3e2 100644
--- a/src/components/interactives/SunnyLinesPuzzle.tsx
+++ b/src/components/SunnyLinesPuzzle.tsx
@@ -4,6 +4,7 @@ import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Alert, AlertDescription } from '@/components/ui/alert';
import { CheckCircle, XCircle, Info, ChevronDown, ChevronUp, Undo2 } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
interface Point {
x: number;
@@ -18,9 +19,10 @@ interface Line {
}
interface SunnyLinesPuzzleProps {
+ showSocialShare?: boolean;
}
-const SunnyLinesPuzzle: React.FC = () => {
+const SunnyLinesPuzzle: React.FC = ({ showSocialShare = true }) => {
const [n, setN] = useState(5);
const [lines, setLines] = useState([]);
const [isDrawing, setIsDrawing] = useState(false);
@@ -380,7 +382,7 @@ const SunnyLinesPuzzle: React.FC = () => {
return (
-
+
Sunny Lines Puzzle
@@ -599,6 +601,13 @@ const SunnyLinesPuzzle: React.FC = () => {
)}
{/* Social Share */}
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/TernaryNumberGame.tsx b/src/components/TernaryNumberGame.tsx
similarity index 95%
rename from src/components/interactives/TernaryNumberGame.tsx
rename to src/components/TernaryNumberGame.tsx
index f3066a1..be2e4c5 100644
--- a/src/components/interactives/TernaryNumberGame.tsx
+++ b/src/components/TernaryNumberGame.tsx
@@ -4,13 +4,15 @@ import { Card, CardContent } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
import { RangeSlider } from '@/components/ui/range-slider';
import { Label } from '@/components/ui/label';
+import SocialShare from '@/components/SocialShare';
const POWERS_OF_THREE = [2187, 729, 243, 81, 27, 9, 3, 1]; // 3^7 to 3^0
interface TernaryNumberGameProps {
+ showSocialShare?: boolean;
}
-const TernaryNumberGame: React.FC = () => {
+const TernaryNumberGame: React.FC = ({ showSocialShare = true }) => {
const [targetNumber, setTargetNumber] = useState(0);
const [cardValues, setCardValues] = useState(new Array(8).fill(0)); // 0, 1, or 2 for each position
const [currentSum, setCurrentSum] = useState(0);
@@ -244,6 +246,14 @@ const TernaryNumberGame: React.FC = () => {
{!hasGameStarted ? 'Start Game' : isGameWon ? 'Play Again' : 'New Game'}
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/TernarySearchTrick.tsx b/src/components/TernarySearchTrick.tsx
similarity index 94%
rename from src/components/interactives/TernarySearchTrick.tsx
rename to src/components/TernarySearchTrick.tsx
index 603078b..91157c2 100644
--- a/src/components/interactives/TernarySearchTrick.tsx
+++ b/src/components/TernarySearchTrick.tsx
@@ -4,11 +4,13 @@ import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog';
import { RotateCcw, Wand2, Info } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
interface TernarySearchTrickProps {
+ showSocialShare?: boolean;
}
-const TernarySearchTrick: React.FC = () => {
+const TernarySearchTrick: React.FC = ({ showSocialShare = true }) => {
const [step, setStep] = useState<'cards' | 'final-question' | 'result'>('cards');
const [cardSelections, setCardSelections] = useState<{
card1: 'left' | 'right' | 'missing' | null;
@@ -311,6 +313,15 @@ const TernarySearchTrick: React.FC = () => {
{/* Social Share */}
+ {showSocialShare && (
+
+
+
+ )}
diff --git a/src/components/ThemeCard.tsx b/src/components/ThemeCard.tsx
new file mode 100644
index 0000000..d6e264e
--- /dev/null
+++ b/src/components/ThemeCard.tsx
@@ -0,0 +1,42 @@
+import { Link } from "react-router-dom";
+import { ArrowRight } from "lucide-react";
+import { cn } from "@/lib/utils";
+
+interface ThemeCardProps {
+ title: string;
+ description: string;
+ path: string;
+ icon?: React.ReactNode;
+ className?: string;
+}
+
+const ThemeCard = ({ title, description, path, icon, className }: ThemeCardProps) => {
+ return (
+
+
+
+ {icon && (
+
+ {icon}
+
+ )}
+
+ {title}
+
+
+ {description}
+
+
+
+
+
+ );
+};
+
+export default ThemeCard;
\ No newline at end of file
diff --git a/src/components/ThemeContent.tsx b/src/components/ThemeContent.tsx
deleted file mode 100644
index 76ada26..0000000
--- a/src/components/ThemeContent.tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-import React, { useState } from "react";
-import { Badge } from "@/components/ui/badge";
-import AdminIdeaCards from "@/components/AdminIdeaCards";
-import AdminDraftCards from "@/components/AdminDraftCards";
-import type { Interactive, Subcategory } from "@/lib/interactives";
-
-interface ThemeContentProps {
- themeSlug: string;
- themeTitle: string;
- description: string;
- subcategories: Subcategory[];
- interactives: Interactive[];
-}
-
-const ThemeContent: React.FC = ({
- themeSlug,
- themeTitle,
- description,
- subcategories,
- interactives,
-}) => {
- const [viewAll, setViewAll] = useState(false);
-
- return (
-
-
-
- {description}
-
-
setViewAll((v) => !v)}
- className="shrink-0 inline-flex items-center rounded-full border px-3 py-1 text-sm font-medium text-muted-foreground hover:text-foreground hover:border-foreground transition-colors cursor-pointer mt-1"
- >
- {viewAll ? "View Categories" : "View All"}
-
-
-
- {viewAll ? (
-
- ) : (
-
- )}
-
- );
-};
-
-export default ThemeContent;
diff --git a/src/components/interactives/ZeckendorfGame.tsx b/src/components/ZeckendorfGame.tsx
similarity index 93%
rename from src/components/interactives/ZeckendorfGame.tsx
rename to src/components/ZeckendorfGame.tsx
index a652d55..1655e46 100644
--- a/src/components/interactives/ZeckendorfGame.tsx
+++ b/src/components/ZeckendorfGame.tsx
@@ -2,14 +2,16 @@ import React, { useState, useEffect, useCallback } from 'react';
import { Button } from '@/components/ui/button';
import { Card, CardContent } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
+import SocialShare from '@/components/SocialShare';
// First 10 Fibonacci numbers: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
const FIBONACCI_NUMBERS = [55, 34, 21, 13, 8, 5, 3, 2, 1, 1];
interface ZeckendorfGameProps {
+ showSocialShare?: boolean;
}
-const ZeckendorfGame: React.FC = () => {
+const ZeckendorfGame: React.FC = ({ showSocialShare = true }) => {
const [targetNumber, setTargetNumber] = useState(0);
const [flippedCards, setFlippedCards] = useState(new Array(10).fill(false));
const [currentSum, setCurrentSum] = useState(0);
@@ -32,7 +34,7 @@ const ZeckendorfGame: React.FC = () => {
// Generate a random combination of Fibonacci numbers
const numTerms = Math.floor(Math.random() * 4) + 2; // 2-5 terms
let target = 0;
- let usedIndices = new Set();
+ const usedIndices = new Set();
for (let i = 0; i < numTerms; i++) {
let index;
@@ -221,8 +223,16 @@ const ZeckendorfGame: React.FC = () => {
where no two consecutive Fibonacci numbers are used. This is called the Zeckendorf representation.
+
+ {showSocialShare && (
+
+ )}
);
};
-export default ZeckendorfGame;
\ No newline at end of file
+export default ZeckendorfGame;
diff --git a/src/components/interactives/ZeckendorfSearchTrick.tsx b/src/components/ZeckendorfSearchTrick.tsx
similarity index 95%
rename from src/components/interactives/ZeckendorfSearchTrick.tsx
rename to src/components/ZeckendorfSearchTrick.tsx
index ae4065b..d215f31 100644
--- a/src/components/interactives/ZeckendorfSearchTrick.tsx
+++ b/src/components/ZeckendorfSearchTrick.tsx
@@ -5,8 +5,10 @@ import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, Di
import { Switch } from '@/components/ui/switch';
import { Label } from '@/components/ui/label';
import { HelpCircle, RefreshCw, ChevronLeft, ChevronRight } from 'lucide-react';
+import SocialShare from '@/components/SocialShare';
interface ZeckendorfSearchTrickProps {
+ showSocialShare?: boolean;
}
// First 8 Fibonacci numbers: 1, 1, 2, 3, 5, 8, 13, 21
@@ -49,7 +51,7 @@ const containsFibonacciInZeckendorf = (number: number, fibonacci: number): boole
return representation.includes(fibonacci);
};
-const ZeckendorfSearchTrick = ({}: ZeckendorfSearchTrickProps) => {
+const ZeckendorfSearchTrick = ({ showSocialShare = true }: ZeckendorfSearchTrickProps) => {
const [cardStates, setCardStates] = useState>({});
const [result, setResult] = useState(null);
const [showResult, setShowResult] = useState(false);
@@ -171,7 +173,7 @@ const ZeckendorfSearchTrick = ({}: ZeckendorfSearchTrickProps) => {
return (
-
+
Zeckendorf Search Magic Trick
@@ -369,6 +371,14 @@ const ZeckendorfSearchTrick = ({}: ZeckendorfSearchTrickProps) => {
)}
+
+ {showSocialShare && (
+
+ )}
);
};
diff --git a/src/components/interactives/guessing-game/QuestionGuessingMode.tsx b/src/components/guessing-game/QuestionGuessingMode.tsx
similarity index 99%
rename from src/components/interactives/guessing-game/QuestionGuessingMode.tsx
rename to src/components/guessing-game/QuestionGuessingMode.tsx
index d30855a..d76a11a 100644
--- a/src/components/interactives/guessing-game/QuestionGuessingMode.tsx
+++ b/src/components/guessing-game/QuestionGuessingMode.tsx
@@ -217,7 +217,7 @@ const QuestionGuessingMode: React.FC = ({
case 'odd':
baseCondition = (num % 2 !== 0);
break;
- case 'prime':
+ case 'prime': {
const isPrimeNum = (n: number): boolean => {
if (n < 2) return false;
for (let i = 2; i <= Math.sqrt(n); i++) {
@@ -227,6 +227,7 @@ const QuestionGuessingMode: React.FC = ({
};
baseCondition = isPrimeNum(num);
break;
+ }
case 'perfectSquare':
baseCondition = Math.sqrt(num) % 1 === 0;
break;
diff --git a/src/components/interactives/guessing-game/StandardGuessingMode.tsx b/src/components/guessing-game/StandardGuessingMode.tsx
similarity index 100%
rename from src/components/interactives/guessing-game/StandardGuessingMode.tsx
rename to src/components/guessing-game/StandardGuessingMode.tsx
diff --git a/src/components/hatch-radial-svg-pattern.tsx b/src/components/hatch-radial-svg-pattern.tsx
deleted file mode 100644
index 01ccf1f..0000000
--- a/src/components/hatch-radial-svg-pattern.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import * as React from 'react';
-
-import { cn } from '@/lib/utils';
-
-const PATTERN_ID = 'hatch-radial-dots';
-
-/**
- * Subtle dot grid with a radial fade (stronger toward center, soft at edges).
- */
-export function HatchRadialSvgPattern({ className }: { className?: string }) {
- return (
-
- );
-}
diff --git a/src/components/hatch-svg-grid-pattern.tsx b/src/components/hatch-svg-grid-pattern.tsx
deleted file mode 100644
index 95c15db..0000000
--- a/src/components/hatch-svg-grid-pattern.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-import * as React from 'react';
-
-import { cn } from '@/lib/utils';
-
-/**
- * Static SVG grid (Scalar-style) — no canvas / rAF, better for perf than animated canvas patterns.
- */
-export function HatchSvgGridPattern({
- className,
- cellSize = 12,
- gap = 2,
-}: {
- className?: string;
- cellSize?: number;
- gap?: number;
-}) {
- const step = cellSize + gap;
- const id = React.useId();
-
- return (
-
- );
-}
diff --git a/src/components/interactives/AkkamBakkam.tsx b/src/components/interactives/AkkamBakkam.tsx
deleted file mode 100644
index d8a06b1..0000000
--- a/src/components/interactives/AkkamBakkam.tsx
+++ /dev/null
@@ -1,2073 +0,0 @@
-import {
- Check,
- Copy,
- Crown,
- Dice1,
- Dice2,
- Dice3,
- Dice4,
- Dice5,
- Dice6,
- ExternalLink,
- Loader2,
- LogOut,
- Move,
- Plus,
- QrCode,
- RefreshCw,
- Replace,
- RotateCcw,
- Settings2,
- Sparkles,
- Undo2,
- Users,
- Wifi,
-} from "lucide-react";
-import QRCode from "qrcode";
-import { useCallback, useEffect, useMemo, useRef, useState } from "react";
-
-import {
- AlertDialog,
- AlertDialogAction,
- AlertDialogCancel,
- AlertDialogContent,
- AlertDialogDescription,
- AlertDialogFooter,
- AlertDialogHeader,
- AlertDialogTitle,
- AlertDialogTrigger,
-} from "@/components/ui/alert-dialog";
-import { Badge } from "@/components/ui/badge";
-import { Button } from "@/components/ui/button";
-import {
- Card,
- CardContent,
- CardDescription,
- CardHeader,
- CardTitle,
-} from "@/components/ui/card";
-import {
- Dialog,
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from "@/components/ui/dialog";
-import { Input } from "@/components/ui/input";
-import { Kbd } from "@/components/ui/kbd";
-import { Label } from "@/components/ui/label";
-import { Slider } from "@/components/ui/slider";
-import type { DiceRoll, LevelSettings } from "@/hooks/useClassroomDice";
-import {
- DEFAULT_LEVEL_SETTINGS,
- useClassroomDice,
-} from "@/hooks/useClassroomDice";
-import { cn } from "@/lib/utils";
-
-type Power = "replace" | "move" | "add";
-type Edge = "top" | "right" | "bottom" | "left";
-interface AddedCell {
- edge: Edge;
- index: number;
- value: number;
-}
-
-interface PowerFlags {
- replace: boolean;
- move: boolean;
- add: boolean;
-}
-
-interface GameSnapshot {
- board: Array;
- bank: Array;
- usedRolls: number;
- addedCell: AddedCell | null;
- unlockedPowers: PowerFlags;
- usedPowers: PowerFlags;
-}
-
-interface ScoreLink {
- key: string;
- value: number;
- from: { row: number; column: number };
- to: { row: number; column: number };
-}
-
-interface BenchmarkResult {
- board: number[];
- score: number;
- ceiling: number;
- provenOptimal: boolean;
-}
-
-const makeEmptyBoard = (size: number) =>
- Array(size * size).fill(null);
-const makeEmptyBank = (size: number) => Array(size).fill(null);
-const DIE_ICONS = [Dice1, Dice2, Dice3, Dice4, Dice5, Dice6];
-const EMPTY_POWERS: PowerFlags = {
- replace: false,
- move: false,
- add: false,
-};
-
-const SUM_STYLES: Record = {
- 2: {
- base: "border-rose-200 bg-rose-100/70 text-rose-950 dark:border-rose-800 dark:bg-rose-950/45 dark:text-rose-100",
- linked:
- "border-rose-400 bg-rose-200/90 text-rose-950 ring-2 ring-rose-300/60 dark:border-rose-600 dark:bg-rose-900/65 dark:text-rose-50 dark:ring-rose-700/60",
- },
- 3: {
- base: "border-orange-200 bg-orange-100/70 text-orange-950 dark:border-orange-800 dark:bg-orange-950/45 dark:text-orange-100",
- linked:
- "border-orange-400 bg-orange-200/90 text-orange-950 ring-2 ring-orange-300/60 dark:border-orange-600 dark:bg-orange-900/65 dark:text-orange-50 dark:ring-orange-700/60",
- },
- 4: {
- base: "border-amber-200 bg-amber-100/70 text-amber-950 dark:border-amber-800 dark:bg-amber-950/45 dark:text-amber-100",
- linked:
- "border-amber-400 bg-amber-200/90 text-amber-950 ring-2 ring-amber-300/60 dark:border-amber-600 dark:bg-amber-900/65 dark:text-amber-50 dark:ring-amber-700/60",
- },
- 5: {
- base: "border-yellow-200 bg-yellow-100/70 text-yellow-950 dark:border-yellow-800 dark:bg-yellow-950/45 dark:text-yellow-100",
- linked:
- "border-yellow-400 bg-yellow-200/90 text-yellow-950 ring-2 ring-yellow-300/60 dark:border-yellow-600 dark:bg-yellow-900/65 dark:text-yellow-50 dark:ring-yellow-700/60",
- },
- 6: {
- base: "border-lime-200 bg-lime-100/70 text-lime-950 dark:border-lime-800 dark:bg-lime-950/45 dark:text-lime-100",
- linked:
- "border-lime-400 bg-lime-200/90 text-lime-950 ring-2 ring-lime-300/60 dark:border-lime-600 dark:bg-lime-900/65 dark:text-lime-50 dark:ring-lime-700/60",
- },
- 7: {
- base: "border-emerald-200 bg-emerald-100/70 text-emerald-950 dark:border-emerald-800 dark:bg-emerald-950/45 dark:text-emerald-100",
- linked:
- "border-emerald-400 bg-emerald-200/90 text-emerald-950 ring-2 ring-emerald-300/60 dark:border-emerald-600 dark:bg-emerald-900/65 dark:text-emerald-50 dark:ring-emerald-700/60",
- },
- 8: {
- base: "border-cyan-200 bg-cyan-100/70 text-cyan-950 dark:border-cyan-800 dark:bg-cyan-950/45 dark:text-cyan-100",
- linked:
- "border-cyan-400 bg-cyan-200/90 text-cyan-950 ring-2 ring-cyan-300/60 dark:border-cyan-600 dark:bg-cyan-900/65 dark:text-cyan-50 dark:ring-cyan-700/60",
- },
- 9: {
- base: "border-sky-200 bg-sky-100/70 text-sky-950 dark:border-sky-800 dark:bg-sky-950/45 dark:text-sky-100",
- linked:
- "border-sky-400 bg-sky-200/90 text-sky-950 ring-2 ring-sky-300/60 dark:border-sky-600 dark:bg-sky-900/65 dark:text-sky-50 dark:ring-sky-700/60",
- },
- 10: {
- base: "border-blue-200 bg-blue-100/70 text-blue-950 dark:border-blue-800 dark:bg-blue-950/45 dark:text-blue-100",
- linked:
- "border-blue-400 bg-blue-200/90 text-blue-950 ring-2 ring-blue-300/60 dark:border-blue-600 dark:bg-blue-900/65 dark:text-blue-50 dark:ring-blue-700/60",
- },
- 11: {
- base: "border-violet-200 bg-violet-100/70 text-violet-950 dark:border-violet-800 dark:bg-violet-950/45 dark:text-violet-100",
- linked:
- "border-violet-400 bg-violet-200/90 text-violet-950 ring-2 ring-violet-300/60 dark:border-violet-600 dark:bg-violet-900/65 dark:text-violet-50 dark:ring-violet-700/60",
- },
- 12: {
- base: "border-fuchsia-200 bg-fuchsia-100/70 text-fuchsia-950 dark:border-fuchsia-800 dark:bg-fuchsia-950/45 dark:text-fuchsia-100",
- linked:
- "border-fuchsia-400 bg-fuchsia-200/90 text-fuchsia-950 ring-2 ring-fuchsia-300/60 dark:border-fuchsia-600 dark:bg-fuchsia-900/65 dark:text-fuchsia-50 dark:ring-fuchsia-700/60",
- },
-};
-
-const sumStyle = (value: number | null, linked = false) =>
- value === null
- ? "border-border bg-card text-foreground"
- : SUM_STYLES[value][linked ? "linked" : "base"];
-
-const randomDie = () => {
- const values = new Uint32Array(1);
- window.crypto.getRandomValues(values);
- return (values[0] % 6) + 1;
-};
-
-const coordinateForAddedCell = (cell: AddedCell, gridSize: number) => {
- if (cell.edge === "top") return [-1, cell.index];
- if (cell.edge === "bottom") return [gridSize, cell.index];
- if (cell.edge === "left") return [cell.index, -1];
- return [cell.index, gridSize];
-};
-
-const calculateScore = (
- board: Array,
- gridSize: number,
- addedCell: AddedCell | null = null,
-) => {
- const cells = board.flatMap((value, index) =>
- value === null
- ? []
- : [
- {
- key: `board-${index}`,
- value,
- row: Math.floor(index / gridSize),
- column: index % gridSize,
- },
- ],
- );
- if (addedCell) {
- const [row, column] = coordinateForAddedCell(addedCell, gridSize);
- cells.push({ key: "added", value: addedCell.value, row, column });
- }
- let score = 0;
- const linkedCells = new Set();
- const links: ScoreLink[] = [];
- for (let left = 0; left < cells.length; left += 1) {
- for (let right = left + 1; right < cells.length; right += 1) {
- const a = cells[left];
- const b = cells[right];
- const adjacent =
- Math.max(Math.abs(a.row - b.row), Math.abs(a.column - b.column)) === 1;
- if (adjacent && a.value === b.value) {
- score += a.value;
- linkedCells.add(a.key);
- linkedCells.add(b.key);
- links.push({
- key: `${a.key}-${b.key}`,
- value: a.value,
- from: { row: a.row, column: a.column },
- to: { row: b.row, column: b.column },
- });
- }
- }
- }
- return { score, linkedCells, links };
-};
-
-const flatScore = (board: number[], gridSize: number) =>
- calculateScore(board, gridSize).score;
-
-const mulberry32 = (seed: number) => () => {
- let value = (seed += 0x6d2b79f5);
- value = Math.imul(value ^ (value >>> 15), value | 1);
- value ^= value + Math.imul(value ^ (value >>> 7), value | 61);
- return ((value ^ (value >>> 14)) >>> 0) / 4294967296;
-};
-
-const scoreLines = (
- links: ScoreLink[],
- gridSize: number,
- includeEdgeSlots = false,
-) => {
- const padding = includeEdgeSlots ? 1 : 0;
- const viewBoxSize = gridSize + padding * 2;
- return (
-
- {links.map((link) => {
- const fromX = link.from.column + padding + 0.5;
- const fromY = link.from.row + padding + 0.5;
- const toX = link.to.column + padding + 0.5;
- const toY = link.to.row + padding + 0.5;
- const deltaX = toX - fromX;
- const deltaY = toY - fromY;
- const distance = Math.hypot(deltaX, deltaY);
- const inset = gridSize >= 8 ? 0.28 : 0.25;
- const offsetX = (deltaX / distance) * inset;
- const offsetY = (deltaY / distance) * inset;
- return (
- = 8 ? 2.5 : 3.5}
- strokeLinecap="round"
- vectorEffect="non-scaling-stroke"
- opacity="0.72"
- />
- );
- })}
-
- );
-};
-
-const singleClusterMaxLinks = (gridSize: number) => {
- const cellCount = gridSize * gridSize;
- let previous = Array.from({ length: gridSize + 1 }, () =>
- Array(cellCount + 1).fill(Number.NEGATIVE_INFINITY),
- );
- previous[0][0] = 0;
-
- for (let row = 0; row < gridSize; row += 1) {
- const next = Array.from({ length: gridSize + 1 }, () =>
- Array(cellCount + 1).fill(Number.NEGATIVE_INFINITY),
- );
- for (
- let previousLength = 0;
- previousLength <= gridSize;
- previousLength += 1
- ) {
- for (let used = 0; used <= cellCount; used += 1) {
- const currentScore = previous[previousLength][used];
- if (!Number.isFinite(currentScore)) continue;
- for (let length = 0; length <= gridSize; length += 1) {
- if (used + length > cellCount) break;
- const shorter = Math.min(previousLength, length);
- const crossRowLinks =
- shorter === 0
- ? 0
- : 3 * shorter -
- Math.max(0, 2 - Math.abs(previousLength - length));
- const horizontalLinks = Math.max(0, length - 1);
- next[length][used + length] = Math.max(
- next[length][used + length],
- currentScore + crossRowLinks + horizontalLinks,
- );
- }
- }
- }
- previous = next;
- }
-
- return Array.from({ length: cellCount + 1 }, (_, used) =>
- Math.max(...previous.map((scores) => scores[used])),
- );
-};
-
-const theoreticalCeiling = (values: number[], gridSize: number) => {
- const capacity = gridSize * gridSize;
- const frequencies = Array(13).fill(0);
- values.forEach((value) => {
- frequencies[value] += 1;
- });
- const clusterLinks = singleClusterMaxLinks(gridSize);
- let states: Array<{ score: number; counts: number[] } | null> = Array(
- capacity + 1,
- ).fill(null);
- states[0] = { score: 0, counts: Array(13).fill(0) };
-
- for (let value = 2; value <= 12; value += 1) {
- const next: Array<{ score: number; counts: number[] } | null> = Array(
- capacity + 1,
- ).fill(null);
- for (let used = 0; used <= capacity; used += 1) {
- const state = states[used];
- if (!state) continue;
- const maximumCount = Math.min(frequencies[value], capacity - used);
- for (let count = 0; count <= maximumCount; count += 1) {
- const nextUsed = used + count;
- const nextScore = state.score + value * clusterLinks[count];
- if (!next[nextUsed] || nextScore > next[nextUsed].score) {
- const counts = [...state.counts];
- counts[value] = count;
- next[nextUsed] = { score: nextScore, counts };
- }
- }
- }
- states = next;
- }
-
- const result = states[capacity];
- return {
- ceiling: result?.score ?? 0,
- selectedCounts: result?.counts ?? Array(13).fill(0),
- };
-};
-
-const gridEdges = (gridSize: number) => {
- const edges: Array<[number, number]> = [];
- const directions = [
- [0, 1],
- [1, -1],
- [1, 0],
- [1, 1],
- ];
- for (let row = 0; row < gridSize; row += 1) {
- for (let column = 0; column < gridSize; column += 1) {
- for (const [rowDelta, columnDelta] of directions) {
- const nextRow = row + rowDelta;
- const nextColumn = column + columnDelta;
- if (
- nextRow >= 0 &&
- nextRow < gridSize &&
- nextColumn >= 0 &&
- nextColumn < gridSize
- ) {
- edges.push([
- row * gridSize + column,
- nextRow * gridSize + nextColumn,
- ]);
- }
- }
- }
- }
- return edges;
-};
-
-const findBenchmark = (
- rolls: DiceRoll[],
- gridSize: number,
- searchPass = 0,
-): BenchmarkResult => {
- const boardCellCount = gridSize * gridSize;
- const values = rolls.map((roll) => roll.sum);
- const { ceiling, selectedCounts } = theoreticalCeiling(values, gridSize);
- const remainingCounts = Array(13).fill(0);
- values.forEach((value) => {
- remainingCounts[value] += 1;
- });
- const selected: number[] = [];
- for (let value = 2; value <= 12; value += 1) {
- selected.push(...Array(selectedCounts[value]).fill(value));
- remainingCounts[value] -= selectedCounts[value];
- }
- const leftovers: number[] = [];
- for (let value = 2; value <= 12; value += 1) {
- leftovers.push(...Array(remainingCounts[value]).fill(value));
- }
-
- const snakeOrder = Array.from({ length: gridSize }, (_, row) =>
- Array.from(
- { length: gridSize },
- (_, column) =>
- row * gridSize + (row % 2 === 0 ? column : gridSize - 1 - column),
- ),
- ).flat();
- const groupedBoard = Array(boardCellCount);
- selected.forEach((value, index) => {
- groupedBoard[snakeOrder[index]] = value;
- });
- let best = groupedBoard;
- let bestScore = flatScore(best, gridSize);
- const seed = values.reduce(
- (total, value, index) => total + value * (index + 17),
- 7919 + searchPass * 104729,
- );
- const random = mulberry32(seed);
- const edges = gridEdges(gridSize);
- const incidentEdges = Array.from({ length: boardCellCount }, () =>
- Array(),
- );
- edges.forEach(([from, to], edgeIndex) => {
- incidentEdges[from].push(edgeIndex);
- incidentEdges[to].push(edgeIndex);
- });
- const edgeScore = (candidate: number[], edgeIndex: number) => {
- const [from, to] = edges[edgeIndex];
- return candidate[from] === candidate[to] ? candidate[from] : 0;
- };
-
- const restarts = gridSize >= 8 ? 4 : 5;
- const iterations = gridSize >= 8 ? 80000 : gridSize >= 7 ? 70000 : 60000;
- for (let restart = 0; restart < restarts; restart += 1) {
- const labelOrder = Array.from({ length: 11 }, (_, index) => index + 2);
- if (restart > 0) {
- for (let index = labelOrder.length - 1; index > 0; index -= 1) {
- const swapIndex = Math.floor(random() * (index + 1));
- [labelOrder[index], labelOrder[swapIndex]] = [
- labelOrder[swapIndex],
- labelOrder[index],
- ];
- }
- }
- const orderedValues = labelOrder.flatMap((value) =>
- Array(selectedCounts[value]).fill(value),
- );
- const candidateBoard = Array(boardCellCount);
- orderedValues.forEach((value, index) => {
- candidateBoard[snakeOrder[index]] = value;
- });
- const candidate = [...candidateBoard, ...leftovers];
- let candidateScore = flatScore(candidateBoard, gridSize);
- if (candidateScore > bestScore) {
- bestScore = candidateScore;
- best = [...candidateBoard];
- }
- if (bestScore === ceiling) break;
-
- for (let iteration = 0; iteration < iterations; iteration += 1) {
- const first = Math.floor(random() * candidate.length);
- const second = Math.floor(random() * candidate.length);
- if (
- first === second ||
- (first >= boardCellCount && second >= boardCellCount) ||
- candidate[first] === candidate[second]
- )
- continue;
- const affectedEdges = new Set();
- if (first < boardCellCount)
- incidentEdges[first].forEach((edge) => affectedEdges.add(edge));
- if (second < boardCellCount)
- incidentEdges[second].forEach((edge) => affectedEdges.add(edge));
- let previousContribution = 0;
- affectedEdges.forEach((edge) => {
- previousContribution += edgeScore(candidate, edge);
- });
- [candidate[first], candidate[second]] = [
- candidate[second],
- candidate[first],
- ];
- let nextContribution = 0;
- affectedEdges.forEach((edge) => {
- nextContribution += edgeScore(candidate, edge);
- });
- const nextScore =
- candidateScore - previousContribution + nextContribution;
- const temperature = Math.max(0.18, 9 * (1 - iteration / iterations));
- if (
- nextScore >= candidateScore ||
- random() < Math.exp((nextScore - candidateScore) / temperature)
- ) {
- candidateScore = nextScore;
- } else {
- [candidate[first], candidate[second]] = [
- candidate[second],
- candidate[first],
- ];
- }
- if (candidateScore > bestScore) {
- bestScore = candidateScore;
- best = candidate.slice(0, boardCellCount);
- if (bestScore === ceiling) break;
- }
- }
- if (bestScore === ceiling) break;
- }
- return {
- board: best,
- score: bestScore,
- ceiling,
- provenOptimal: bestScore === ceiling,
- };
-};
-
-const DiceFace = ({ value, animate }: { value: number; animate: boolean }) => {
- const Icon = DIE_ICONS[value - 1];
- return (
-
-
- {value}
-
- );
-};
-
-const AkkamBakkamGame = () => {
- const classroom = useClassroomDice();
- const {
- joinRoom,
- roomId,
- status: classroomStatus,
- updateProgress,
- } = classroom;
- const [settings, setSettings] = useState(
- DEFAULT_LEVEL_SETTINGS,
- );
- const [draftSettings, setDraftSettings] = useState(
- DEFAULT_LEVEL_SETTINGS,
- );
- const [levelDialogOpen, setLevelDialogOpen] = useState(false);
- const [board, setBoard] = useState>(() =>
- makeEmptyBoard(DEFAULT_LEVEL_SETTINGS.gridSize),
- );
- const [bank, setBank] = useState>(() =>
- makeEmptyBank(DEFAULT_LEVEL_SETTINGS.gridSize),
- );
- const [localHistory, setLocalHistory] = useState([]);
- const [usedRolls, setUsedRolls] = useState(0);
- const [undoStack, setUndoStack] = useState([]);
- const [undosUsed, setUndosUsed] = useState(0);
- const [localRerollsUsed, setLocalRerollsUsed] = useState(0);
- const [joinCode, setJoinCode] = useState("");
- const [copied, setCopied] = useState(false);
- const [qrDialogOpen, setQrDialogOpen] = useState(false);
- const [qrDataUrl, setQrDataUrl] = useState("");
- const [qrError, setQrError] = useState(null);
- const [activePower, setActivePower] = useState(null);
- const [selectedBankIndex, setSelectedBankIndex] = useState(
- null,
- );
- const [moveFrom, setMoveFrom] = useState(null);
- const [addedCell, setAddedCell] = useState(null);
- const [unlockedPowers, setUnlockedPowers] =
- useState(EMPTY_POWERS);
- const [usedPowers, setUsedPowers] = useState(EMPTY_POWERS);
- const [benchmark, setBenchmark] = useState(null);
- const [isBenchmarking, setIsBenchmarking] = useState(false);
- const benchmarkAttemptRef = useRef(0);
- const roundRef = useRef(null);
- const initialRoomAttemptedRef = useRef(false);
- const classroomSettingsKeyRef = useRef("");
-
- const inClassroom = Boolean(classroom.roomId);
- const activeHistory = inClassroom ? classroom.history : localHistory;
- const boardFull = board.every((value) => value !== null);
- const currentRoll = boardFull ? null : activeHistory[usedRolls] || null;
- const queuedRolls = boardFull
- ? 0
- : Math.max(0, activeHistory.length - usedRolls - (currentRoll ? 1 : 0));
- const bankFull = bank.every((value) => value !== null);
- const endgame = boardFull;
- const rerollsUsed = inClassroom ? classroom.rerollsUsed : localRerollsUsed;
- const undosRemaining = Math.max(0, settings.undoLimit - undosUsed);
- const rerollsRemaining = Math.max(0, settings.rerollLimit - rerollsUsed);
- const levelLocked =
- activeHistory.length > 0 ||
- usedRolls > 0 ||
- board.some((value) => value !== null) ||
- bank.some((value) => value !== null);
- const canRoll = inClassroom
- ? classroom.isHost &&
- classroom.status === "connected" &&
- !currentRoll &&
- !boardFull
- : !currentRoll && !boardFull;
- const canBank =
- Boolean(currentRoll) && !bankFull && !boardFull && !activePower;
- const canUndo = undoStack.length > 0 && undosRemaining > 0 && !activePower;
- const canReroll =
- Boolean(currentRoll) &&
- rerollsRemaining > 0 &&
- !activePower &&
- (!inClassroom ||
- (classroom.isHost &&
- classroom.status === "connected" &&
- usedRolls === activeHistory.length - 1));
- const { score, linkedCells, links } = useMemo(
- () => calculateScore(board, settings.gridSize, addedCell),
- [board, settings.gridSize, addedCell],
- );
- const squareScore = useMemo(
- () => calculateScore(board, settings.gridSize).score,
- [board, settings.gridSize],
- );
- const benchmarkScoring = useMemo(
- () =>
- benchmark ? calculateScore(benchmark.board, settings.gridSize) : null,
- [benchmark, settings.gridSize],
- );
- const benchmarkRollKey = endgame
- ? activeHistory
- .slice(0, usedRolls)
- .map((roll) => `${roll.id}:${roll.sum}:${roll.rolledAt}`)
- .join("|")
- : "";
- const getInviteUrl = useCallback(() => {
- const inviteUrl = new URL(window.location.href);
- inviteUrl.search = "";
- inviteUrl.hash = "";
- inviteUrl.searchParams.set("room", classroom.roomId);
- return inviteUrl.toString();
- }, [classroom.roomId]);
-
- const resetPrivateBoard = useCallback((nextSettings: LevelSettings) => {
- setBoard(makeEmptyBoard(nextSettings.gridSize));
- setBank(makeEmptyBank(nextSettings.gridSize));
- setUsedRolls(0);
- setUndoStack([]);
- setUndosUsed(0);
- setLocalRerollsUsed(0);
- setActivePower(null);
- setSelectedBankIndex(null);
- setMoveFrom(null);
- setAddedCell(null);
- setUnlockedPowers(EMPTY_POWERS);
- setUsedPowers(EMPTY_POWERS);
- setBenchmark(null);
- setIsBenchmarking(false);
- }, []);
-
- useEffect(() => {
- if (!inClassroom || classroomStatus !== "connected") return;
- const nextSettings = classroom.settings;
- const key = `${nextSettings.gridSize}-${nextSettings.undoLimit}-${nextSettings.rerollLimit}`;
- if (classroomSettingsKeyRef.current === key) return;
- classroomSettingsKeyRef.current = key;
- setSettings(nextSettings);
- setDraftSettings(nextSettings);
- resetPrivateBoard(nextSettings);
- }, [classroom.settings, classroomStatus, inClassroom, resetPrivateBoard]);
-
- useEffect(() => {
- if (!classroom.roundId || classroom.roundId === roundRef.current) return;
- roundRef.current = classroom.roundId;
- resetPrivateBoard(classroom.settings);
- }, [classroom.roundId, classroom.settings, resetPrivateBoard]);
-
- useEffect(() => {
- if (initialRoomAttemptedRef.current) return;
- initialRoomAttemptedRef.current = true;
- const roomId = new URLSearchParams(window.location.search).get("room");
- if (roomId) {
- setJoinCode(roomId.toUpperCase());
- joinRoom(roomId);
- } else {
- setLevelDialogOpen(true);
- }
- }, [joinRoom]);
-
- useEffect(() => {
- const url = new URL(window.location.href);
- if (roomId) url.searchParams.set("room", roomId);
- else url.searchParams.delete("room");
- window.history.replaceState({}, "", url);
- }, [roomId]);
-
- useEffect(() => {
- if (!qrDialogOpen || !classroom.roomId) return;
- let cancelled = false;
- setQrDataUrl("");
- setQrError(null);
- QRCode.toDataURL(getInviteUrl(), {
- width: 720,
- margin: 4,
- errorCorrectionLevel: "M",
- color: { dark: "#111827", light: "#ffffff" },
- })
- .then((dataUrl) => {
- if (!cancelled) setQrDataUrl(dataUrl);
- })
- .catch(() => {
- if (!cancelled)
- setQrError("The QR code could not be generated on this device.");
- });
- return () => {
- cancelled = true;
- };
- }, [classroom.roomId, getInviteUrl, qrDialogOpen]);
-
- useEffect(() => {
- if (!inClassroom || classroomStatus !== "connected") return;
- const timer = window.setTimeout(
- () => updateProgress(score, usedRolls, endgame),
- 0,
- );
- return () => window.clearTimeout(timer);
- }, [classroomStatus, endgame, inClassroom, score, updateProgress, usedRolls]);
-
- const unlockPowers = (nextBoard: Array) => {
- if (!nextBoard.every((value) => value !== null)) return;
- const banked = bank.filter((value) => value !== null).length;
- setUnlockedPowers({
- replace: banked >= settings.gridSize - 2,
- move: banked >= settings.gridSize - 1,
- add: banked >= settings.gridSize,
- });
- };
-
- const consumeCurrentRoll = () => setUsedRolls((count) => count + 1);
-
- const pushUndoSnapshot = () => {
- setUndoStack((current) => [
- ...current,
- {
- board: [...board],
- bank: [...bank],
- usedRolls,
- addedCell: addedCell ? { ...addedCell } : null,
- unlockedPowers: { ...unlockedPowers },
- usedPowers: { ...usedPowers },
- },
- ]);
- };
-
- const placeOnBoard = (index: number) => {
- if (
- activePower === "replace" &&
- selectedBankIndex !== null &&
- bank[selectedBankIndex] !== null
- ) {
- pushUndoSnapshot();
- const value = bank[selectedBankIndex];
- setBoard((current) =>
- current.map((cell, cellIndex) => (cellIndex === index ? value : cell)),
- );
- setBank((current) =>
- current.map((cell, cellIndex) =>
- cellIndex === selectedBankIndex ? null : cell,
- ),
- );
- setUsedPowers((current) => ({ ...current, replace: true }));
- setActivePower(null);
- setSelectedBankIndex(null);
- return;
- }
- if (activePower === "move") {
- if (moveFrom === null) {
- setMoveFrom(index);
- } else if (moveFrom === index) {
- setMoveFrom(null);
- } else {
- pushUndoSnapshot();
- setBoard((current) => {
- const next = [...current];
- [next[moveFrom], next[index]] = [next[index], next[moveFrom]];
- return next;
- });
- setUsedPowers((current) => ({ ...current, move: true }));
- setActivePower(null);
- setMoveFrom(null);
- }
- return;
- }
- if (!currentRoll || board[index] !== null || boardFull) return;
- pushUndoSnapshot();
- const nextBoard = board.map((cell, cellIndex) =>
- cellIndex === index ? currentRoll.sum : cell,
- );
- setBoard(nextBoard);
- consumeCurrentRoll();
- unlockPowers(nextBoard);
- };
-
- const bankCurrentRoll = () => {
- if (!currentRoll || bankFull || boardFull) return;
- pushUndoSnapshot();
- const openIndex = bank.findIndex((value) => value === null);
- setBank((current) =>
- current.map((value, index) =>
- index === openIndex ? currentRoll.sum : value,
- ),
- );
- consumeCurrentRoll();
- };
-
- const placeAddedCell = (edge: Edge, index: number) => {
- if (
- activePower !== "add" ||
- selectedBankIndex === null ||
- bank[selectedBankIndex] === null ||
- addedCell
- )
- return;
- pushUndoSnapshot();
- setAddedCell({ edge, index, value: bank[selectedBankIndex] as number });
- setBank((current) =>
- current.map((cell, cellIndex) =>
- cellIndex === selectedBankIndex ? null : cell,
- ),
- );
- setUsedPowers((current) => ({ ...current, add: true }));
- setActivePower(null);
- setSelectedBankIndex(null);
- };
-
- const requestRoll = () => {
- if (inClassroom) {
- if (canRoll) classroom.roll();
- return;
- }
- if (!canRoll) return;
- const dice: [number, number] = [randomDie(), randomDie()];
- setLocalHistory((history) => [
- ...history,
- {
- id: history.length + 1,
- dice,
- sum: dice[0] + dice[1],
- rolledAt: Date.now(),
- },
- ]);
- };
-
- const undoLastMove = () => {
- if (!canUndo) return;
- const snapshot = undoStack[undoStack.length - 1];
- setBoard([...snapshot.board]);
- setBank([...snapshot.bank]);
- setUsedRolls(snapshot.usedRolls);
- setAddedCell(snapshot.addedCell ? { ...snapshot.addedCell } : null);
- setUnlockedPowers({ ...snapshot.unlockedPowers });
- setUsedPowers({ ...snapshot.usedPowers });
- setUndoStack((current) => current.slice(0, -1));
- setUndosUsed((count) => count + 1);
- setActivePower(null);
- setSelectedBankIndex(null);
- setMoveFrom(null);
- };
-
- const rerollCurrentRoll = () => {
- if (!canReroll || !currentRoll) return;
- if (inClassroom) {
- classroom.reroll();
- return;
- }
- const dice: [number, number] = [randomDie(), randomDie()];
- setLocalHistory((history) =>
- history.map((roll, index) =>
- index === usedRolls
- ? {
- ...roll,
- dice,
- sum: dice[0] + dice[1],
- rolledAt: Date.now(),
- }
- : roll,
- ),
- );
- setLocalRerollsUsed((count) => count + 1);
- };
-
- const openLevelDialog = () => {
- setDraftSettings(settings);
- setLevelDialogOpen(true);
- };
-
- const applyLevel = () => {
- if (inClassroom && (!classroom.isHost || levelLocked)) return;
- const nextSettings = {
- gridSize: Math.max(5, Math.min(9, Math.round(draftSettings.gridSize))),
- undoLimit: Math.max(0, Math.min(9, Math.round(draftSettings.undoLimit))),
- rerollLimit: Math.max(
- 0,
- Math.min(9, Math.round(draftSettings.rerollLimit)),
- ),
- };
- setSettings(nextSettings);
- setDraftSettings(nextSettings);
- setLocalHistory([]);
- resetPrivateBoard(nextSettings);
- if (inClassroom) classroom.configure(nextSettings);
- setLevelDialogOpen(false);
- };
-
- const handleReset = () => {
- if (inClassroom) classroom.reset();
- else {
- setLocalHistory([]);
- resetPrivateBoard(settings);
- }
- };
-
- const leaveClassroom = () => {
- setQrDialogOpen(false);
- classroom.leaveRoom();
- roundRef.current = null;
- classroomSettingsKeyRef.current = "";
- setLocalHistory([]);
- resetPrivateBoard(settings);
- };
-
- const copyInvite = async () => {
- try {
- await navigator.clipboard.writeText(getInviteUrl());
- setCopied(true);
- window.setTimeout(() => setCopied(false), 1600);
- } catch {
- setCopied(false);
- }
- };
-
- const runBenchmark = () => {
- benchmarkAttemptRef.current += 1;
- const searchPass = benchmarkAttemptRef.current;
- const completedRolls = activeHistory.slice(0, usedRolls);
- setIsBenchmarking(true);
- window.setTimeout(() => {
- const result = findBenchmark(
- completedRolls,
- settings.gridSize,
- searchPass,
- );
- setBenchmark((current) =>
- !current || result.score > current.score ? result : current,
- );
- setIsBenchmarking(false);
- }, 40);
- };
-
- useEffect(() => {
- if (!endgame || !benchmarkRollKey) return;
- benchmarkAttemptRef.current = 0;
- const completedRolls = activeHistory.slice(0, usedRolls);
- setIsBenchmarking(true);
- const timer = window.setTimeout(() => {
- setBenchmark(findBenchmark(completedRolls, settings.gridSize));
- setIsBenchmarking(false);
- }, 40);
- return () => window.clearTimeout(timer);
- }, [benchmarkRollKey, endgame, settings.gridSize]);
-
- const startPower = (power: Power) => {
- setActivePower((current) => (current === power ? null : power));
- setSelectedBankIndex(null);
- setMoveFrom(null);
- };
-
- const rollButtonText = () => {
- if (inClassroom && !classroom.isHost) return "Waiting for the facilitator";
- if (classroom.status === "reconnecting") return "Reconnecting…";
- if (inClassroom)
- return currentRoll
- ? `Place ${currentRoll.sum} first`
- : "Roll for everyone";
- if (boardFull) return "Board complete";
- if (currentRoll) return `Place ${currentRoll.sum} first`;
- return "Roll the dice";
- };
-
- const actionRefs = useRef({
- roll: { enabled: false, run: () => {} },
- bank: { enabled: false, run: () => {} },
- undo: { enabled: false, run: () => {} },
- reroll: { enabled: false, run: () => {} },
- });
- actionRefs.current = {
- roll: { enabled: canRoll, run: requestRoll },
- bank: { enabled: canBank, run: bankCurrentRoll },
- undo: { enabled: canUndo, run: undoLastMove },
- reroll: { enabled: canReroll, run: rerollCurrentRoll },
- };
-
- useEffect(() => {
- const handleShortcut = (event: KeyboardEvent) => {
- if (event.repeat || event.metaKey || event.ctrlKey || event.altKey)
- return;
- const target = event.target as HTMLElement | null;
- if (
- target?.closest("input, textarea, select, [contenteditable='true']") ||
- document.querySelector(
- "[data-slot='dialog-content'][data-state='open'], [data-slot='alert-dialog-content'][data-state='open']",
- )
- )
- return;
-
- const key = event.key.toLowerCase();
- const action =
- key === "r" && event.shiftKey
- ? actionRefs.current.reroll
- : key === "r"
- ? actionRefs.current.roll
- : key === "b"
- ? actionRefs.current.bank
- : key === "u"
- ? actionRefs.current.undo
- : null;
- if (!action?.enabled) return;
- event.preventDefault();
- action.run();
- };
- window.addEventListener("keydown", handleShortcut);
- return () => window.removeEventListener("keydown", handleShortcut);
- }, []);
-
- const edgeButton = (edge: Edge, index: number) => {
- const isAddedHere = addedCell?.edge === edge && addedCell.index === index;
- if (isAddedHere) {
- return (
-
- {addedCell.value}
-
- );
- }
- const enabled =
- activePower === "add" && selectedBankIndex !== null && !addedCell;
- return (
- placeAddedCell(edge, index)}
- disabled={!enabled}
- className={cn(
- "relative grid aspect-square w-full place-items-center rounded-lg border border-dashed text-muted-foreground transition-colors",
- enabled
- ? "border-accent hover:bg-accent/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
- : "border-transparent opacity-0",
- )}
- >
-
-
- );
- };
-
- return (
- <>
-
-
- {
- event.preventDefault();
- applyLevel();
- }}
- className="contents"
- >
-
- Set your level
-
- Choose the board and your safety nets before the first roll.
- Classroom facilitators set these for everyone.
-
-
-
-
- Grid size
-
- {Array.from({ length: 5 }, (_, index) => index + 5).map(
- (size) => (
-
- setDraftSettings((current) => ({
- ...current,
- gridSize: size,
- }))
- }
- className="min-h-11 px-2 tabular-nums"
- >
- {size}×{size}
-
- ),
- )}
-
-
-
-
-
-
- Undo tokens
-
- {draftSettings.undoLimit}
-
-
-
- setDraftSettings((current) => ({
- ...current,
- undoLimit,
- }))
- }
- aria-label="Undo tokens"
- aria-valuetext={`${draftSettings.undoLimit} undo tokens`}
- className="min-h-11"
- />
-
-
-
-
- Reroll tokens
-
- {draftSettings.rerollLimit}
-
-
-
- setDraftSettings((current) => ({
- ...current,
- rerollLimit,
- }))
- }
- aria-label="Reroll tokens"
- aria-valuetext={`${draftSettings.rerollLimit} reroll tokens`}
- className="min-h-11"
- />
-
-
-
-
-
- Start with this level
-
-
-
-
-
-
-
-
-
- Join classroom {classroom.roomId}
-
- Put this on the projector. Scanning the code opens this game and
- joins the synchronized dice stream directly.
-
-
-
-
- {qrDataUrl ? (
-
- ) : qrError ? (
-
- {qrError}
-
- ) : (
-
- )}
-
-
-
Game ID
-
- {classroom.roomId}
-
-
-
-
-
- {copied ? (
-
- ) : (
-
- )}
- {copied ? "Invite copied" : "Copy invite link"}
-
-
-
-
-
-
-
-
-
-
- Akkam Bakkam
-
- அக்கம் பக்கம்
-
-
- Place each dice sum carefully. Equal neighbors make links, and
- every link scores its number.
-
-
-
- {settings.gridSize}×{settings.gridSize}
-
-
- {settings.undoLimit}{" "}
- {settings.undoLimit === 1 ? "undo" : "undos"}
-
-
- {settings.rerollLimit}{" "}
- {settings.rerollLimit === 1 ? "reroll" : "rerolls"}
-
-
- Set level
-
- {levelLocked && (
-
- Start a new round to change the level.
-
- )}
-
-
-
-
-
-
-
-
- Classroom sync
-
-
- One facilitator rolls; everyone receives the same sequence
- and plays a private board.
-
-
- {inClassroom && (
-
-
- {classroom.status === "connected" ? "Live" : "Reconnecting"}
-
- )}
-
-
-
- {!inClassroom ? (
-
-
classroom.createRoom(settings)}
- disabled={classroom.status === "connecting"}
- className="min-h-11"
- >
- {classroom.status === "connecting" ? (
-
- ) : (
-
- )}
- Create a classroom game
-
-
-
- Or join with a game ID
-
-
-
- setJoinCode(
- event.target.value
- .toUpperCase()
- .replace(/[^A-Z0-9]/g, "")
- .slice(0, 6),
- )
- }
- onKeyDown={(event) =>
- event.key === "Enter" &&
- joinCode.length === 6 &&
- classroom.joinRoom(joinCode)
- }
- placeholder="ABC234"
- autoComplete="off"
- className="h-11 font-mono uppercase tracking-widest"
- />
- classroom.joinRoom(joinCode)}
- disabled={
- joinCode.length !== 6 ||
- classroom.status === "connecting"
- }
- className="min-h-11"
- >
- Join
-
-
-
-
- ) : (
-
-
-
- Game ID
-
-
- {classroom.roomId}
-
-
-
- {classroom.isHost && }
- {classroom.playerName}
- {classroom.isHost ? " · Facilitator" : ""}
-
-
- {classroom.participants} connected
-
-
- setQrDialogOpen(true)}
- className="min-h-10"
- >
-
- Show join QR
-
-
- {copied ? (
-
- ) : (
-
- )}
- {copied ? "Copied" : "Copy invite"}
-
-
- Leave
-
-
-
- )}
- {classroom.error && (
-
- {classroom.error}
-
- )}
-
-
-
-
-
-
-
-
- Akkam · scoring grid
-
- Tap an empty square to place the current sum.
-
-
-
-
-
- Score
-
-
- {score}
-
-
-
-
- Rolls
-
-
- {activeHistory.length}
-
-
-
-
-
-
-
-
- {currentRoll ? (
- <>
-
-
-
- = {currentRoll.sum}
-
- >
- ) : (
-
- No sum waiting to be placed
-
- )}
-
-
- {rollButtonText()}
-
- R
-
-
-
-
-
-
- Undo · {undosRemaining} left
- U
-
-
-
- {inClassroom && !classroom.isHost
- ? "Facilitator rerolls"
- : "Reroll"}
- {` · ${rerollsRemaining} left`}
- ⇧R
-
-
- {inClassroom && (
-
- Undo only changes your private board. The facilitator can
- reroll the shared current sum after the class agrees.
-
- )}
- {queuedRolls > 0 && (
-
- {queuedRolls} more synchronized{" "}
- {queuedRolls === 1 ? "roll is" : "rolls are"} waiting.
-
- )}
-
- {activePower && (
-
- {activePower === "replace" &&
- (selectedBankIndex === null
- ? "Choose a number from Pakkam."
- : "Now choose the Akkam cell to overwrite.")}
- {activePower === "move" &&
- (moveFrom === null
- ? "Choose the first Akkam cell."
- : "Choose another cell to swap with it.")}
- {activePower === "add" &&
- (selectedBankIndex === null
- ? "Choose a number from Pakkam."
- : "Choose one of the dotted edge spaces.")}
-
- )}
-
- = 8 ? "gap-1" : "gap-1.5 sm:gap-2",
- )}
- style={{
- gridTemplateColumns: `repeat(${settings.gridSize + 2}, minmax(0, 1fr))`,
- width:
- settings.gridSize >= 7
- ? "min(100%, max(19rem, calc(100dvh - 22rem)))"
- : "min(100%, 36rem)",
- }}
- >
- {scoreLines(links, settings.gridSize, true)}
-
- {Array.from({ length: settings.gridSize }, (_, index) => (
-
{edgeButton("top", index)}
- ))}
-
- {Array.from({ length: settings.gridSize }, (_, row) => (
-
-
{edgeButton("left", row)}
- {Array.from(
- { length: settings.gridSize },
- (_, column) => {
- const index = row * settings.gridSize + column;
- const value = board[index];
- const canPlace =
- Boolean(currentRoll) &&
- value === null &&
- !boardFull &&
- !activePower;
- const canUsePower =
- activePower === "move" ||
- (activePower === "replace" &&
- selectedBankIndex !== null);
- return (
-
placeOnBoard(index)}
- disabled={!canPlace && !canUsePower}
- aria-label={`Row ${row + 1}, column ${column + 1}${value === null ? ", empty" : `, ${value}`}`}
- className={cn(
- "relative grid aspect-square place-items-center border font-bold tabular-nums shadow-sm transition-[background-color,border-color,transform] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
- settings.gridSize >= 8
- ? "rounded-md text-sm sm:text-lg"
- : settings.gridSize >= 7
- ? "rounded-md text-base sm:text-xl"
- : "min-h-10 rounded-lg text-lg sm:text-2xl",
- sumStyle(
- value,
- linkedCells.has(`board-${index}`),
- ),
- canPlace &&
- "cursor-pointer hover:-translate-y-0.5 hover:border-primary",
- moveFrom === index &&
- "border-primary bg-primary/10 ring-2 ring-primary",
- canUsePower &&
- "cursor-pointer hover:border-accent",
- )}
- >
-
- {value ?? ""}
-
-
- );
- },
- )}
-
{edgeButton("right", row)}
-
- ))}
-
- {Array.from({ length: settings.gridSize }, (_, index) => (
-
- {edgeButton("bottom", index)}
-
- ))}
-
-
-
- {endgame && (
-
-
-
- Endgame powers
-
-
- Each unlocked power can be used once. Replace and Add
- spend a banked number.
-
-
-
-
startPower("replace")}
- disabled={
- !unlockedPowers.replace ||
- usedPowers.replace ||
- bank.every((value) => value === null)
- }
- className="min-h-11"
- >
-
- {usedPowers.replace ? "Replace used" : "Replace"}
-
-
startPower("move")}
- disabled={!unlockedPowers.move || usedPowers.move}
- className="min-h-11"
- >
-
- {usedPowers.move ? "Move used" : "Move"}
-
-
startPower("add")}
- disabled={
- !unlockedPowers.add ||
- usedPowers.add ||
- bank.every((value) => value === null)
- }
- className="min-h-11"
- >
-
- {usedPowers.add ? "Add used" : "Add"}
-
-
-
- )}
-
-
-
-
-
-
- Pakkam · bank
-
- Fills bottom to top. The top three slots always unlock R, M,
- and A.
-
-
-
- = 7
- ? "grid grid-cols-3 sm:flex"
- : "flex",
- )}
- >
- {Array.from(
- { length: settings.gridSize },
- (_, index) => settings.gridSize - 1 - index,
- ).map((bankIndex) => {
- const selectable =
- endgame &&
- (activePower === "replace" || activePower === "add") &&
- bank[bankIndex] !== null;
- return (
-
- selectable && setSelectedBankIndex(bankIndex)
- }
- disabled={!selectable}
- aria-label={`Bank slot ${bankIndex + 1}${bank[bankIndex] === null ? ", empty" : `, ${bank[bankIndex]}`}`}
- className={cn(
- "relative grid aspect-square min-h-11 min-w-0 flex-1 place-items-center rounded-lg border font-bold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring lg:aspect-auto",
- settings.gridSize >= 8 ? "text-sm" : "text-xl",
- sumStyle(bank[bankIndex]),
- selectable && "cursor-pointer hover:border-primary",
- selectedBankIndex === bankIndex &&
- "ring-2 ring-primary",
- )}
- >
- {bank[bankIndex] ?? ""}
-
- {bankIndex === settings.gridSize - 1
- ? "A"
- : bankIndex === settings.gridSize - 2
- ? "M"
- : bankIndex === settings.gridSize - 3
- ? "R"
- : "•"}
-
-
- );
- })}
-
-
- {bankFull
- ? "Bank full"
- : currentRoll
- ? `Bank ${currentRoll.sum}`
- : "Bank the current sum"}
- B
-
-
-
-
- {inClassroom && (
-
-
-
- Leaderboard
-
-
- Scores and progress only; boards stay private.
-
-
-
-
- {classroom.leaderboard.map((player, index) => (
-
-
- {index + 1}
-
-
- {player.name}
- {player.id === classroom.playerId ? " (you)" : ""}
-
-
-
- {player.placed} placed
-
- {player.score}
- {player.finished && (
-
- )}
-
-
- ))}
-
-
-
- )}
-
- {endgame && (
-
-
-
- Round solution
-
-
- The strongest square arrangement found from the sums you
- used this round. The outside Add cell is a bonus and is
- not included.
-
-
-
- {!benchmark && isBenchmarking && (
-
-
- Arranging this round’s sums…
-
- )}
- {benchmark && benchmarkScoring && (
- <>
-
-
-
- Your grid
-
-
- {squareScore}
-
-
-
-
- {benchmark.provenOptimal
- ? "Maximum"
- : "Best found"}
-
-
- {benchmark.score}
-
-
-
-
-
- {benchmark.score > 0
- ? Math.round(
- (100 * squareScore) / benchmark.score,
- )
- : 100}
- %
-
-
- of{" "}
- {benchmark.provenOptimal ? "maximum" : "best found"}
-
-
-
- {scoreLines(
- benchmarkScoring.links,
- settings.gridSize,
- )}
- {benchmark.board.map((value, index) => (
-
- {value}
-
- ))}
-
- {benchmark.provenOptimal ? (
-
- Proven theoretical maximum: {benchmark.ceiling}
-
- ) : (
-
-
- Rigorous theoretical ceiling: {benchmark.ceiling}.
- The displayed solution is{" "}
- {benchmark.ceiling - benchmark.score} points below
- it, so it is not claimed as the exact maximum.
-
-
- {isBenchmarking ? (
-
- ) : (
-
- )}
- Search for a better solution
-
-
- )}
- >
- )}
-
-
- )}
-
-
-
-
-
-
-
-
- {inClassroom
- ? "Start a new synchronized round"
- : "Start over"}
-
-
-
-
- Start a new round?
-
- {inClassroom
- ? "This clears every player’s private board and the classroom leaderboard."
- : "This clears your board, bank, and roll history."}
-
-
-
- Keep playing
-
- Start new round
-
-
-
-
-
- Shortcuts: R roll, B bank, U {" "}
- undo, ⇧R reroll
-
-
-
-
-
- How to play
-
-
-
-
- Place every roll. {" "}
- Roll two dice, add them, then put the sum in any empty Akkam
- cell or in the lowest open Pakkam slot. You cannot skip a sum.
-
-
- Make links. Equal
- values touching horizontally, vertically, or diagonally score
- that value. A cluster scores once for every adjacent pair.
-
-
-
-
- Unlock powers. {" "}
- The lower Pakkam slots only hold numbers. Its top three slots
- unlock Replace, Move, and Add, each usable once after the{" "}
- {settings.gridSize}×{settings.gridSize} grid is full.
-
-
-
- Finish creatively.
- {" "}
- Replace overwrites a cell using a banked number; Move swaps
- two grid cells for free; Add places one banked number in a new
- cell along an edge.
-
-
-
-
-
-
-
- The rules of Akkam Bakkam were created by{" "}
-
- Jyothi Krishnan
-
- . You can find her standalone implementation as a Claude artifact{" "}
-
- here
-
- . Inspired by{" "}
-
- Digit Party
-
- , created by Robert Brignall and Vince Vatter, and{" "}
-
- Neighbors
- {" "}
- by Ben Orlin.
-
-
-
-
- >
- );
-};
-
-export default AkkamBakkamGame;
diff --git a/src/components/interactives/ComputingPi.tsx b/src/components/interactives/ComputingPi.tsx
deleted file mode 100644
index f251d2d..0000000
--- a/src/components/interactives/ComputingPi.tsx
+++ /dev/null
@@ -1,370 +0,0 @@
-import { Play, RotateCcw } from 'lucide-react';
-import React, { useEffect, useMemo, useState } from 'react';
-
-import { Button } from '@/components/ui/button';
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
-import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog';
-import { Slider } from '@/components/ui/slider';
-
-type Toss = 'H' | 'T';
-
-interface Run {
- sequence: Toss[];
- stopped: boolean;
- discarded: boolean;
- heads: number;
- tails: number;
- fraction: number | null;
-}
-
-const MIN_RUNS = 4;
-const MAX_RUNS = 100;
-const DEFAULT_RUNS = 36;
-const TICK_MS = 110;
-const MAX_TOSSES_PER_RUN = 5000; // safety cap; first-passage time has infinite expectation
-const AMBER_STEP = 500; // tosses per amber level
-const AMBER_MAX_LEVEL = 9;
-
-// Amber wash classes, pre-declared so Tailwind's JIT picks them up.
-const AMBER_WASH: Record = {
- 0: '',
- 1: 'bg-amber-500/10 border-amber-500/30',
- 2: 'bg-amber-500/20 border-amber-500/40',
- 3: 'bg-amber-500/30 border-amber-500/50',
- 4: 'bg-amber-500/40 border-amber-500/60',
- 5: 'bg-amber-500/50 border-amber-500/70',
- 6: 'bg-amber-500/60 border-amber-500/80',
- 7: 'bg-amber-500/70 border-amber-500/90',
- 8: 'bg-amber-500/80 border-amber-600',
- 9: 'bg-amber-500/90 border-amber-600',
-};
-
-function emptyRun(): Run {
- return { sequence: [], stopped: false, discarded: false, heads: 0, tails: 0, fraction: null };
-}
-
-function stepRun(r: Run): Run {
- if (r.stopped) return r;
- const toss: Toss = Math.random() < 0.5 ? 'H' : 'T';
- const heads = r.heads + (toss === 'H' ? 1 : 0);
- const tails = r.tails + (toss === 'T' ? 1 : 0);
- const sequence = [...r.sequence, toss];
- if (heads > tails) {
- return {
- sequence,
- stopped: true,
- discarded: false,
- heads,
- tails,
- fraction: heads / sequence.length,
- };
- }
- if (sequence.length >= MAX_TOSSES_PER_RUN) {
- // Cap hit without the walk crossing above ½ — drop this run so it doesn't bias the average.
- return { sequence, stopped: true, discarded: true, heads, tails, fraction: null };
- }
- return { sequence, stopped: false, discarded: false, heads, tails, fraction: null };
-}
-
-function amberLevel(run: Run): number {
- if (run.stopped) return 0;
- return Math.min(AMBER_MAX_LEVEL, Math.floor(run.sequence.length / AMBER_STEP));
-}
-
-const ComputingPi: React.FC = () => {
- const [n, setN] = useState(DEFAULT_RUNS);
- const [runs, setRuns] = useState([]);
- const [running, setRunning] = useState(false);
- const [selectedIdx, setSelectedIdx] = useState(null);
- const [showTimes4, setShowTimes4] = useState(true);
-
- const started = runs.length > 0;
- const allStopped = started && runs.every((r) => r.stopped);
- const stoppedCount = runs.filter((r) => r.stopped).length;
- const discardedCount = runs.filter((r) => r.discarded).length;
-
- const avgTimes4 = useMemo(() => {
- const usable = runs.filter((r) => r.stopped && !r.discarded && r.fraction !== null);
- if (usable.length === 0) return null;
- const sum = usable.reduce((acc, r) => acc + (r.fraction ?? 0), 0);
- return (sum / usable.length) * 4;
- }, [runs]);
-
- // Simulate one toss per active run on every tick.
- useEffect(() => {
- if (!running) return;
- const id = setInterval(() => {
- setRuns((prev) => prev.map(stepRun));
- }, TICK_MS);
- return () => clearInterval(id);
- }, [running]);
-
- useEffect(() => {
- if (running && allStopped) setRunning(false);
- }, [running, allStopped]);
-
- const handleStart = () => {
- setRuns(Array.from({ length: n }, emptyRun));
- setRunning(true);
- setSelectedIdx(null);
- };
-
- const handleReset = () => {
- setRunning(false);
- setRuns([]);
- setSelectedIdx(null);
- };
-
- const selectedRun = selectedIdx !== null ? runs[selectedIdx] : null;
-
- return (
-
-
-
- Computing π from Coin Tosses
-
- Toss a fair coin until the number of heads first exceeds the number of tails,
- and record the fraction of heads at that moment. Repeated, the average of those
- fractions approaches π/4 .
-
-
-
- {/* Header: slider | running avg × 4 | start/reset */}
-
-
-
- Runs: {n}
-
- setN(v[0])}
- disabled={started}
- />
-
-
-
setShowTimes4((v) => !v)}
- aria-label="Toggle between average and average × 4"
- className="flex flex-col items-center rounded-lg px-3 py-1 -my-1 hover:bg-background/60 transition-colors cursor-pointer"
- >
-
- {showTimes4 ? 'Average × 4' : 'Average'}
-
-
- {avgTimes4 !== null
- ? (showTimes4 ? avgTimes4 : avgTimes4 / 4).toFixed(4)
- : '—'}
-
-
- {showTimes4 ? 'π ≈ 3.1416' : 'π/4 ≈ 0.7854'}
-
-
-
-
- {!started ? (
-
-
- Start
-
- ) : (
-
-
- Reset
- {!allStopped && (
-
- ({stoppedCount}/{runs.length})
-
- )}
-
- )}
-
-
-
- {/* Instruction + grid of runs */}
- {started ? (
- <>
-
-
Click on any of the completed runs to view the full sequence.
-
Click on the average shown above to toggle between seeing the average and the average multiplied by 4.
-
-
- {runs.map((run, idx) => (
- run.stopped && setSelectedIdx(idx)}
- />
- ))}
-
- >
- ) : (
-
- Pick a number of runs and press Start .
-
- )}
-
- {allStopped && discardedCount > 0 && (
-
-
- {discardedCount} run{discardedCount === 1 ? '' : 's'} discarded after hitting the {MAX_TOSSES_PER_RUN}-toss cap.
-
-
- )}
-
-
-
-
-
-
{
- if (!open) setSelectedIdx(null);
- }}
- >
-
-
- Run {(selectedIdx ?? 0) + 1}
- {selectedRun && (
-
- {selectedRun.heads} heads,{' '}
- {selectedRun.tails} tails in{' '}
- {selectedRun.sequence.length} {' '}
- toss{selectedRun.sequence.length === 1 ? '' : 'es'}.{' '}
- {selectedRun.discarded ? (
-
- Discarded: hit the {MAX_TOSSES_PER_RUN}-toss cap without heads ever exceeding tails.
-
- ) : (
- <>
- Recorded fraction:{' '}
-
- {selectedRun.heads}/{selectedRun.sequence.length} ={' '}
- {(selectedRun.fraction ?? 0).toFixed(4)}
-
- .
- >
- )}
-
- )}
-
- {selectedRun && (
-
- {selectedRun.sequence.join('')}
-
- )}
-
-
-
- );
-};
-
-interface RunTileProps {
- index: number;
- run: Run;
- clickable: boolean;
- onClick: () => void;
-}
-
-const RunTile: React.FC = ({ index, run, clickable, onClick }) => {
- const seq = run.sequence.join('');
- const settledClass = run.discarded
- ? 'bg-red-50 dark:bg-red-950/30 border-red-500/60'
- : run.stopped
- ? 'bg-green-50 dark:bg-green-950/30 border-green-500/60'
- : AMBER_WASH[amberLevel(run)] || 'bg-card border-border';
- const footer = run.discarded
- ? 'discarded'
- : run.stopped
- ? `${run.heads}/${run.sequence.length}`
- : `${run.sequence.length} toss${run.sequence.length === 1 ? '' : 'es'}`;
- const aria = run.discarded
- ? `Run ${index + 1}, discarded (cap)`
- : run.stopped
- ? `Run ${index + 1}, fraction ${run.heads}/${run.sequence.length}`
- : `Run ${index + 1}, in progress (${run.sequence.length} tosses)`;
- return (
-
- {/* H / T counters with a fraction indicator dot — position = H/N,
- midpoint = H=T, so the dot crosses the middle exactly when the run stops. */}
-
- H:{run.heads}
- T:{run.tails}
- {run.sequence.length > 0 && (
-
- )}
-
-
- {/* Billboard + footer */}
-
-
- {seq || ' '}
-
-
- {footer}
-
-
-
- );
-};
-
-export default ComputingPi;
diff --git a/src/components/interactives/KasutiEmbroidery.tsx b/src/components/interactives/KasutiEmbroidery.tsx
deleted file mode 100644
index f5d912e..0000000
--- a/src/components/interactives/KasutiEmbroidery.tsx
+++ /dev/null
@@ -1,2395 +0,0 @@
-import confetti from 'canvas-confetti';
-import { ChevronLeft, ChevronRight, Download, Link as LinkIcon, Pause, Play, Plus, RotateCcw, Share2, SkipBack, SkipForward, Undo2, Upload } from 'lucide-react';
-import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
-import { toast } from 'sonner';
-
-import { Badge } from '@/components/ui/badge';
-import { Button } from '@/components/ui/button';
-import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
-import {
- Dialog,
- DialogContent,
- DialogDescription,
- DialogFooter,
- DialogHeader,
- DialogTitle,
-} from '@/components/ui/dialog';
-import { Input } from '@/components/ui/input';
-import { Label } from '@/components/ui/label';
-import { Toaster as SonnerToaster } from '@/components/ui/sonner';
-
-// ─── Types ──────────────────────────────────────────────────────────────────
-
-type V = readonly [number, number]; // [row, col]
-type EdgeKey = string;
-type Side = 'front' | 'back';
-
-interface Pattern {
- id: string;
- title: string;
- description: string;
- bbox: readonly [number, number]; // [rows, cols]
- edges: ReadonlyArray;
-}
-
-interface Stitch {
- side: Side;
- from: V;
- to: V;
-}
-
-// ─── Constants ──────────────────────────────────────────────────────────────
-
-const GRID_SIZE = 20; // (GRID_SIZE + 1) x (GRID_SIZE + 1) points
-const CELL = 22; // px per cell
-const PAD = 12;
-const SVG_DIM = GRID_SIZE * CELL + PAD * 2;
-
-const FRONT_COLORS = ['#000000', '#1e3a8a', '#7c2d12', '#052e16', '#3b0764'];
-const BACK_COLORS = ['#b91c1c', '#ca8a04', '#0f766e', '#6d28d9', '#be185d'];
-
-// ─── Helpers ────────────────────────────────────────────────────────────────
-
-function edgeKey(a: V, b: V): EdgeKey {
- const [r1, c1] = a;
- const [r2, c2] = b;
- if (r1 < r2 || (r1 === r2 && c1 < c2)) return `${r1},${c1}|${r2},${c2}`;
- return `${r2},${c2}|${r1},${c1}`;
-}
-
-function vKey(v: V): string {
- return `${v[0]},${v[1]}`;
-}
-
-function isNeighbor(a: V, b: V): boolean {
- const dr = Math.abs(a[0] - b[0]);
- const dc = Math.abs(a[1] - b[1]);
- // Orthogonal unit step or diagonal unit step.
- return (
- (dr === 1 && dc === 0) ||
- (dr === 0 && dc === 1) ||
- (dr === 1 && dc === 1)
- );
-}
-
-function vEqual(a: V | null, b: V | null): boolean {
- if (!a || !b) return false;
- return a[0] === b[0] && a[1] === b[1];
-}
-
-// ─── GIF export ─────────────────────────────────────────────────────────────
-// Draws both fabric panels to an offscreen canvas and uses gifenc to encode
-// one frame per stitch (plus a hold at the start and end). The rendering
-// mirrors the on-screen SVG: grid dots, dashed pattern guides for undrawn
-// edges, drawn stitches in thread colour, and the current vertex dot. Kept
-// self-contained so it doesn't depend on the live DOM.
-
-const GIF_PANEL = 320; // px per fabric panel
-const GIF_GAP = 24;
-const GIF_LABEL_H = 36;
-const GIF_WIDTH = GIF_PANEL * 2 + GIF_GAP + 20;
-const GIF_HEIGHT = GIF_PANEL + GIF_LABEL_H + 20;
-
-function drawGifFrame(
- ctx: CanvasRenderingContext2D,
- placed: PlacedPattern,
- stitchesUpTo: Stitch[],
- frontColor: string,
- backColor: string,
- currentVertex: V | null,
- startVertex: V | null,
- activeSide: Side
-) {
- const panelPad = 10;
- const inner = GIF_PANEL - panelPad * 2;
- const cellPx = inner / GRID_SIZE;
-
- ctx.fillStyle = '#fdfcfa';
- ctx.fillRect(0, 0, GIF_WIDTH, GIF_HEIGHT);
-
- const drawPanel = (offsetX: number, side: Side) => {
- const isActive = side === activeSide;
- ctx.fillStyle = '#ffffff';
- ctx.strokeStyle = isActive ? '#d04a2b' : '#d8d4cc';
- ctx.lineWidth = isActive ? 2 : 1;
- ctx.fillRect(offsetX, 10, GIF_PANEL, GIF_PANEL);
- ctx.strokeRect(offsetX + 0.5, 10.5, GIF_PANEL - 1, GIF_PANEL - 1);
-
- const toCanvas = (v: V) => ({
- x: offsetX + panelPad + v[1] * cellPx,
- y: 10 + panelPad + v[0] * cellPx,
- });
-
- ctx.fillStyle = 'rgba(100,100,100,0.30)';
- for (let r = 0; r <= GRID_SIZE; r++) {
- for (let c = 0; c <= GRID_SIZE; c++) {
- const { x, y } = toCanvas([r, c] as V);
- ctx.beginPath();
- ctx.arc(x, y, 0.8, 0, Math.PI * 2);
- ctx.fill();
- }
- }
-
- const drawnHere = new Set();
- for (const s of stitchesUpTo) {
- if (s.side === side) drawnHere.add(edgeKey(s.from, s.to));
- }
-
- ctx.strokeStyle = 'rgba(100,100,100,0.55)';
- ctx.lineWidth = 1;
- ctx.setLineDash([2, 3]);
- for (const [a, b] of placed.edges) {
- if (drawnHere.has(edgeKey(a, b))) continue;
- const p = toCanvas(a);
- const q = toCanvas(b);
- ctx.beginPath();
- ctx.moveTo(p.x, p.y);
- ctx.lineTo(q.x, q.y);
- ctx.stroke();
- }
- ctx.setLineDash([]);
-
- ctx.strokeStyle = side === 'front' ? frontColor : backColor;
- ctx.lineWidth = Math.max(2, cellPx * 0.14);
- ctx.lineCap = 'round';
- for (const s of stitchesUpTo) {
- if (s.side !== side) continue;
- const p = toCanvas(s.from);
- const q = toCanvas(s.to);
- ctx.beginPath();
- ctx.moveTo(p.x, p.y);
- ctx.lineTo(q.x, q.y);
- ctx.stroke();
- }
-
- if (startVertex) {
- const { x, y } = toCanvas(startVertex);
- ctx.strokeStyle = '#171717';
- ctx.lineWidth = 1.4;
- ctx.setLineDash([2, 2]);
- ctx.beginPath();
- ctx.arc(x, y, 4.5, 0, Math.PI * 2);
- ctx.stroke();
- ctx.setLineDash([]);
- }
-
- if (currentVertex) {
- const { x, y } = toCanvas(currentVertex);
- ctx.fillStyle = isActive ? '#d04a2b' : 'rgba(100,100,100,0.6)';
- ctx.beginPath();
- ctx.arc(x, y, 4, 0, Math.PI * 2);
- ctx.fill();
- }
-
- ctx.fillStyle = '#5C5C5C';
- ctx.font = '600 14px sans-serif';
- ctx.textAlign = 'center';
- ctx.fillText(
- side === 'front' ? 'FRONT' : 'BACK',
- offsetX + GIF_PANEL / 2,
- GIF_PANEL + 30
- );
- };
-
- drawPanel(10, 'front');
- drawPanel(10 + GIF_PANEL + GIF_GAP, 'back');
-}
-
-// ─── Replay URL codec ───────────────────────────────────────────────────────
-// The payload captures just enough to reconstruct a completed tour: which
-// pattern (preset id, or "custom" with its edge list), the start vertex, and
-// the sequence of to-points. Sides alternate front/back so they don't need
-// encoding. Coordinates are placed coords on the 20×20 grid; placement is
-// deterministic (bbox centering) so a snowflake reload lands on the same
-// vertices that were recorded.
-
-interface ReplayPayload {
- v: 1;
- p: string;
- e?: Array<[[number, number], [number, number]]>;
- s: [number, number];
- t: Array<[number, number]>;
-}
-
-function b64urlEncode(s: string): string {
- return btoa(s).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '');
-}
-
-function b64urlDecode(s: string): string {
- const padded = s.replace(/-/g, '+').replace(/_/g, '/') + '==='.slice(0, (4 - (s.length % 4)) % 4);
- return atob(padded);
-}
-
-function encodeReplay(
- pattern: Pattern,
- startVertex: V,
- stitches: Stitch[]
-): string {
- const isCustom = !PATTERNS.some((p) => p.id === pattern.id);
- const payload: ReplayPayload = {
- v: 1,
- p: isCustom ? 'custom' : pattern.id,
- s: [startVertex[0], startVertex[1]],
- t: stitches.map((st) => [st.to[0], st.to[1]]),
- };
- if (isCustom) {
- payload.e = pattern.edges.map(([a, b]) => [
- [a[0], a[1]],
- [b[0], b[1]],
- ]);
- }
- return b64urlEncode(JSON.stringify(payload));
-}
-
-function decodeReplay(raw: string): ReplayPayload | null {
- try {
- const obj = JSON.parse(b64urlDecode(raw)) as ReplayPayload;
- if (!obj || obj.v !== 1) return null;
- if (typeof obj.p !== 'string') return null;
- if (!Array.isArray(obj.s) || obj.s.length !== 2) return null;
- if (!Array.isArray(obj.t)) return null;
- for (const pt of obj.t) {
- if (!Array.isArray(pt) || pt.length !== 2) return null;
- if (typeof pt[0] !== 'number' || typeof pt[1] !== 'number') return null;
- }
- if (obj.e !== undefined) {
- if (!Array.isArray(obj.e)) return null;
- for (const e of obj.e) {
- if (!Array.isArray(e) || e.length !== 2) return null;
- const [a, b] = e;
- if (!Array.isArray(a) || !Array.isArray(b)) return null;
- if (a.length !== 2 || b.length !== 2) return null;
- }
- }
- return obj;
- } catch {
- return null;
- }
-}
-
-// ─── Patterns ───────────────────────────────────────────────────────────────
-
-const PATTERNS: Pattern[] = [
- {
- id: 'square',
- title: 'Square',
- description: '4 stitches',
- bbox: [1, 1],
- edges: [
- [[0, 0], [0, 1]],
- [[0, 1], [1, 1]],
- [[1, 1], [1, 0]],
- [[1, 0], [0, 0]],
- ],
- },
- {
- id: 'rectangle',
- title: 'Rectangle',
- description: '6 stitches',
- bbox: [1, 2],
- edges: [
- [[0, 0], [0, 1]],
- [[0, 1], [0, 2]],
- [[0, 2], [1, 2]],
- [[1, 2], [1, 1]],
- [[1, 1], [1, 0]],
- [[1, 0], [0, 0]],
- ],
- },
- {
- id: 'box',
- title: 'Window',
- description: '8 stitches',
- bbox: [2, 2],
- edges: [
- [[0, 0], [0, 1]],
- [[0, 1], [0, 2]],
- [[0, 2], [1, 2]],
- [[1, 2], [2, 2]],
- [[2, 2], [2, 1]],
- [[2, 1], [2, 0]],
- [[2, 0], [1, 0]],
- [[1, 0], [0, 0]],
- ],
- },
- {
- id: 'l-shape',
- title: 'L-Shape',
- description: '8 stitches',
- bbox: [2, 2],
- edges: [
- [[0, 0], [0, 1]],
- [[0, 1], [1, 1]],
- [[1, 1], [1, 2]],
- [[1, 2], [2, 2]],
- [[2, 2], [2, 1]],
- [[2, 1], [2, 0]],
- [[2, 0], [1, 0]],
- [[1, 0], [0, 0]],
- ],
- },
- {
- id: 'figure-eight',
- title: 'Figure-Eight',
- description: '8 stitches, crossing',
- bbox: [2, 2],
- edges: [
- [[0, 0], [0, 1]],
- [[0, 1], [1, 1]],
- [[1, 1], [1, 0]],
- [[1, 0], [0, 0]],
- [[1, 1], [1, 2]],
- [[1, 2], [2, 2]],
- [[2, 2], [2, 1]],
- [[2, 1], [1, 1]],
- ],
- },
- {
- id: 'plus',
- title: 'Cross',
- description: '12 stitches',
- bbox: [3, 3],
- edges: [
- [[0, 1], [0, 2]],
- [[0, 2], [1, 2]],
- [[1, 2], [1, 3]],
- [[1, 3], [2, 3]],
- [[2, 3], [2, 2]],
- [[2, 2], [3, 2]],
- [[3, 2], [3, 1]],
- [[3, 1], [2, 1]],
- [[2, 1], [2, 0]],
- [[2, 0], [1, 0]],
- [[1, 0], [1, 1]],
- [[1, 1], [0, 1]],
- ],
- },
- {
- id: 'temple',
- title: 'Temple',
- description: '12 stitches',
- bbox: [3, 3],
- edges: [
- [[0, 1], [0, 2]],
- [[0, 2], [1, 2]],
- [[1, 2], [1, 3]],
- [[1, 3], [2, 3]],
- [[2, 3], [3, 3]],
- [[3, 3], [3, 2]],
- [[3, 2], [3, 1]],
- [[3, 1], [3, 0]],
- [[3, 0], [2, 0]],
- [[2, 0], [1, 0]],
- [[1, 0], [1, 1]],
- [[1, 1], [0, 1]],
- ],
- },
- // Rose — central square with four corner-shared petal squares (pattern 1 from the
- // reference sheet). Each corner of the central square carries a 2×2 petal.
- {
- id: 'rose',
- title: 'Rose',
- description: '36 stitches',
- bbox: [7, 7],
- edges: [
- // Central 1×1 square at (3,3)..(4,4)
- [[3, 3], [3, 4]],
- [[3, 4], [4, 4]],
- [[4, 4], [4, 3]],
- [[4, 3], [3, 3]],
- // NW petal: 2×2 square with corner (3,3)
- [[1, 1], [1, 2]],
- [[1, 2], [1, 3]],
- [[1, 3], [2, 3]],
- [[2, 3], [3, 3]],
- [[3, 3], [3, 2]],
- [[3, 2], [3, 1]],
- [[3, 1], [2, 1]],
- [[2, 1], [1, 1]],
- // NE petal: corner (3,4)
- [[1, 4], [1, 5]],
- [[1, 5], [1, 6]],
- [[1, 6], [2, 6]],
- [[2, 6], [3, 6]],
- [[3, 6], [3, 5]],
- [[3, 5], [3, 4]],
- [[3, 4], [2, 4]],
- [[2, 4], [1, 4]],
- // SW petal: corner (4,3)
- [[4, 1], [4, 2]],
- [[4, 2], [4, 3]],
- [[4, 3], [5, 3]],
- [[5, 3], [6, 3]],
- [[6, 3], [6, 2]],
- [[6, 2], [6, 1]],
- [[6, 1], [5, 1]],
- [[5, 1], [4, 1]],
- // SE petal: corner (4,4)
- [[4, 4], [4, 5]],
- [[4, 5], [4, 6]],
- [[4, 6], [5, 6]],
- [[5, 6], [6, 6]],
- [[6, 6], [6, 5]],
- [[6, 5], [6, 4]],
- [[6, 4], [5, 4]],
- [[5, 4], [4, 4]],
- ],
- },
- // Totem — top two boxes, middle square, wide base (pattern 2 from the reference).
- {
- id: 'totem',
- title: 'Totem',
- description: '24 stitches',
- bbox: [3, 5],
- edges: [
- // Top-left box (0..1, 1..2)
- [[0, 1], [0, 2]],
- [[0, 2], [1, 2]],
- [[1, 2], [1, 1]],
- [[1, 1], [0, 1]],
- // Top-right box (0..1, 3..4)
- [[0, 3], [0, 4]],
- [[0, 4], [1, 4]],
- [[1, 4], [1, 3]],
- [[1, 3], [0, 3]],
- // Middle square (1..2, 2..3) — shares corners (1,2) and (1,3)
- [[1, 2], [1, 3]],
- [[1, 3], [2, 3]],
- [[2, 3], [2, 2]],
- [[2, 2], [1, 2]],
- // Base (2..3, 0..5) — passes through (2,2),(2,3) so their degree stays even
- [[2, 0], [2, 1]],
- [[2, 1], [2, 2]],
- [[2, 2], [2, 3]],
- [[2, 3], [2, 4]],
- [[2, 4], [2, 5]],
- [[2, 5], [3, 5]],
- [[3, 5], [3, 4]],
- [[3, 4], [3, 3]],
- [[3, 3], [3, 2]],
- [[3, 2], [3, 1]],
- [[3, 1], [3, 0]],
- [[3, 0], [2, 0]],
- ],
- },
- // Figurine — head / arms / body / legs (pattern 4 from the reference).
- {
- id: 'figurine',
- title: 'Figurine',
- description: '34 stitches',
- bbox: [5, 6],
- edges: [
- // Head (0..1, 3..4)
- [[0, 3], [0, 4]],
- [[0, 4], [1, 4]],
- [[1, 4], [1, 3]],
- [[1, 3], [0, 3]],
- // Left arm: 2×2 rect (1..2, 1..3), corner-shared at (1,3)
- [[1, 1], [1, 2]],
- [[1, 2], [1, 3]],
- [[1, 3], [2, 3]],
- [[2, 3], [2, 2]],
- [[2, 2], [2, 1]],
- [[2, 1], [1, 1]],
- // Right arm: 2×2 rect (1..2, 4..6), corner-shared at (1,4)
- [[1, 4], [1, 5]],
- [[1, 5], [1, 6]],
- [[1, 6], [2, 6]],
- [[2, 6], [2, 5]],
- [[2, 5], [2, 4]],
- [[2, 4], [1, 4]],
- // Body: 1×2 rect (2..4, 3..4) — corner-shared with left arm at (2,3)
- // and with right arm at (2,4)
- [[2, 3], [2, 4]],
- [[2, 4], [3, 4]],
- [[3, 4], [4, 4]],
- [[4, 4], [4, 3]],
- [[4, 3], [3, 3]],
- [[3, 3], [2, 3]],
- // Left leg: 2×2 rect (4..5, 1..3), corner-shared with body at (4,3)
- [[4, 1], [4, 2]],
- [[4, 2], [4, 3]],
- [[4, 3], [5, 3]],
- [[5, 3], [5, 2]],
- [[5, 2], [5, 1]],
- [[5, 1], [4, 1]],
- // Right leg: corner-shared with body at (4,4)
- [[4, 4], [4, 5]],
- [[4, 5], [4, 6]],
- [[4, 6], [5, 6]],
- [[5, 6], [5, 5]],
- [[5, 5], [5, 4]],
- [[5, 4], [4, 4]],
- ],
- },
- // Snowflake — central square, four inner petals, four outer 2×2 petals. 4-fold
- // symmetric, richer motif inspired by the red kasuti sample.
- {
- id: 'snowflake',
- title: 'Snowflake',
- description: '52 stitches',
- bbox: [7, 7],
- edges: [
- // Central 1×1 square at (3,3)..(4,4)
- [[3, 3], [3, 4]],
- [[3, 4], [4, 4]],
- [[4, 4], [4, 3]],
- [[4, 3], [3, 3]],
- // Inner NW petal (2,2)..(3,3)
- [[2, 2], [2, 3]],
- [[2, 3], [3, 3]],
- [[3, 3], [3, 2]],
- [[3, 2], [2, 2]],
- // Inner NE petal (2,4)..(3,5)
- [[2, 4], [2, 5]],
- [[2, 5], [3, 5]],
- [[3, 5], [3, 4]],
- [[3, 4], [2, 4]],
- // Inner SW petal (4,2)..(5,3)
- [[4, 2], [4, 3]],
- [[4, 3], [5, 3]],
- [[5, 3], [5, 2]],
- [[5, 2], [4, 2]],
- // Inner SE petal (4,4)..(5,5)
- [[4, 4], [4, 5]],
- [[4, 5], [5, 5]],
- [[5, 5], [5, 4]],
- [[5, 4], [4, 4]],
- // Outer NW 2×2 square sharing (2,2)
- [[0, 0], [0, 1]],
- [[0, 1], [0, 2]],
- [[0, 2], [1, 2]],
- [[1, 2], [2, 2]],
- [[2, 2], [2, 1]],
- [[2, 1], [2, 0]],
- [[2, 0], [1, 0]],
- [[1, 0], [0, 0]],
- // Outer NE 2×2 sharing (2,5)
- [[0, 5], [0, 6]],
- [[0, 6], [0, 7]],
- [[0, 7], [1, 7]],
- [[1, 7], [2, 7]],
- [[2, 7], [2, 6]],
- [[2, 6], [2, 5]],
- [[2, 5], [1, 5]],
- [[1, 5], [0, 5]],
- // Outer SW 2×2 sharing (5,2)
- [[5, 0], [5, 1]],
- [[5, 1], [5, 2]],
- [[5, 2], [6, 2]],
- [[6, 2], [7, 2]],
- [[7, 2], [7, 1]],
- [[7, 1], [7, 0]],
- [[7, 0], [6, 0]],
- [[6, 0], [5, 0]],
- // Outer SE 2×2 sharing (5,5)
- [[5, 5], [5, 6]],
- [[5, 6], [5, 7]],
- [[5, 7], [6, 7]],
- [[6, 7], [7, 7]],
- [[7, 7], [7, 6]],
- [[7, 6], [7, 5]],
- [[7, 5], [6, 5]],
- [[6, 5], [5, 5]],
- ],
- },
-];
-
-// ─── Pattern placement (centered in GRID_SIZE x GRID_SIZE) ──────────────────
-
-interface PlacedPattern {
- pattern: Pattern;
- edgeKeys: Set;
- edges: Array;
- vertices: V[];
- neighbors: Map;
- offset: readonly [number, number];
-}
-
-function placePattern(pattern: Pattern): PlacedPattern {
- const [br, bc] = pattern.bbox;
- const offsetR = Math.floor((GRID_SIZE - br) / 2);
- const offsetC = Math.floor((GRID_SIZE - bc) / 2);
- const shifted: Array = pattern.edges.map(([a, b]) => [
- [a[0] + offsetR, a[1] + offsetC] as V,
- [b[0] + offsetR, b[1] + offsetC] as V,
- ]);
- const edgeKeys = new Set();
- const vMap = new Map();
- const neighbors = new Map();
- for (const [a, b] of shifted) {
- edgeKeys.add(edgeKey(a, b));
- vMap.set(vKey(a), a);
- vMap.set(vKey(b), b);
- if (!neighbors.has(vKey(a))) neighbors.set(vKey(a), []);
- if (!neighbors.has(vKey(b))) neighbors.set(vKey(b), []);
- neighbors.get(vKey(a))!.push(b);
- neighbors.get(vKey(b))!.push(a);
- }
- return {
- pattern,
- edgeKeys,
- edges: shifted,
- vertices: Array.from(vMap.values()),
- neighbors,
- offset: [offsetR, offsetC],
- };
-}
-
-// ─── Coordinate helpers ─────────────────────────────────────────────────────
-
-function toXY([r, c]: V): { x: number; y: number } {
- return { x: PAD + c * CELL, y: PAD + r * CELL };
-}
-
-// ─── Mini pattern preview for the reel ──────────────────────────────────────
-
-const MINI_SIZE = 60;
-const MINI_PAD = 4;
-
-const MiniPreview: React.FC<{ pattern: Pattern; active: boolean }> = ({ pattern, active }) => {
- const [rows, cols] = pattern.bbox;
- // Scale to fit the fixed MINI_SIZE square so big motifs (Snowflake, Rose) don't overshoot.
- const span = Math.max(rows, cols, 1);
- const inner = MINI_SIZE - MINI_PAD * 2;
- const cell = inner / span;
- const offsetR = (inner - rows * cell) / 2;
- const offsetC = (inner - cols * cell) / 2;
- return (
-
- {pattern.edges.map(([a, b], i) => (
-
- ))}
-
- );
-};
-
-// ─── Motif reel (custom horizontal scroller) ────────────────────────────────
-
-interface MotifReelProps {
- patterns: Pattern[];
- customPatternIds: string[];
- activeId: string;
- onSelect: (id: string) => void;
- onEditCustom: (id: string) => void;
- onOpenEditor: () => void;
-}
-
-const MotifReel: React.FC = ({
- patterns,
- customPatternIds,
- activeId,
- onSelect,
- onEditCustom,
- onOpenEditor,
-}) => {
- const customIdSet = useMemo(() => new Set(customPatternIds), [customPatternIds]);
- const trackRef = useRef(null);
- const [atStart, setAtStart] = useState(true);
- const [atEnd, setAtEnd] = useState(false);
-
- const updateEdgeState = useCallback(() => {
- const el = trackRef.current;
- if (!el) return;
- setAtStart(el.scrollLeft <= 1);
- setAtEnd(el.scrollLeft + el.clientWidth >= el.scrollWidth - 1);
- }, []);
-
- useEffect(() => {
- updateEdgeState();
- const el = trackRef.current;
- if (!el) return;
- const handler = () => updateEdgeState();
- el.addEventListener('scroll', handler, { passive: true });
- const ro = new ResizeObserver(handler);
- ro.observe(el);
- return () => {
- el.removeEventListener('scroll', handler);
- ro.disconnect();
- };
- }, [updateEdgeState, patterns.length]);
-
- const scrollBy = useCallback((dir: 1 | -1) => {
- const el = trackRef.current;
- if (!el) return;
- const step = Math.max(el.clientWidth * 0.8, 180);
- el.scrollBy({ left: dir * step, behavior: 'smooth' });
- }, []);
-
- return (
-
-
- {patterns.map((p) => {
- const active = p.id === activeId;
- const isCustom = customIdSet.has(p.id);
- return (
-
(isCustom ? onEditCustom(p.id) : onSelect(p.id))}
- title={isCustom ? 'Click to edit or rename this motif' : p.title}
- className={`shrink-0 flex flex-col items-center gap-1 rounded-lg border p-2 transition-colors min-w-[92px] ${
- active
- ? 'border-primary bg-primary/5 text-foreground'
- : 'border-border bg-card hover:border-primary/40'
- }`}
- >
-
-
-
- {p.title}
-
- {isCustom ? 'click to edit' : p.description}
-
-
- );
- })}
-
-
-
- Make your own
- draw a motif
-
-
-
- {/* Edge fades + arrow buttons */}
- {!atStart && (
-
- )}
- {!atEnd && (
-
- )}
-
scrollBy(-1)}
- disabled={atStart}
- aria-label="Scroll motifs left"
- className="absolute left-0 top-1/2 -translate-y-1/2 -translate-x-1 w-8 h-8 rounded-full bg-card border border-border shadow-sm flex items-center justify-center transition-opacity disabled:opacity-0 disabled:pointer-events-none hover:border-primary/60"
- >
-
-
-
scrollBy(1)}
- disabled={atEnd}
- aria-label="Scroll motifs right"
- className="absolute right-0 top-1/2 -translate-y-1/2 translate-x-1 w-8 h-8 rounded-full bg-card border border-border shadow-sm flex items-center justify-center transition-opacity disabled:opacity-0 disabled:pointer-events-none hover:border-primary/60"
- >
-
-
-
- );
-};
-
-// ─── Main component ────────────────────────────────────────────────────────
-
-const KasutiEmbroidery: React.FC = () => {
- const [patternId, setPatternId] = useState(PATTERNS[0].id);
- const [customPatterns, setCustomPatterns] = useState([]);
- const [editorOpen, setEditorOpen] = useState(false);
- const [editingId, setEditingId] = useState(null); // null = new motif
- const customCounterRef = useRef(0);
- const [currentVertex, setCurrentVertex] = useState(null);
- const [startVertex, setStartVertex] = useState(null);
- const [activeSide, setActiveSide] = useState('front');
- const [stitches, setStitches] = useState([]);
- const [frontColor, setFrontColor] = useState(FRONT_COLORS[0]);
- const [backColor, setBackColor] = useState(BACK_COLORS[0]);
- const [completed, setCompleted] = useState(false);
- const [replayIdx, setReplayIdx] = useState(0);
- const [replayPlaying, setReplayPlaying] = useState(false);
- const [replaySpeed, setReplaySpeed] = useState(1); // 0.5 | 1 | 2
- const celebratedRef = useRef(false);
-
- const visiblePatterns = useMemo(
- () => [...PATTERNS, ...customPatterns],
- [customPatterns]
- );
-
- const editingPattern = useMemo(
- () => (editingId ? customPatterns.find((p) => p.id === editingId) ?? null : null),
- [editingId, customPatterns]
- );
-
- const nextCustomId = useCallback(() => {
- customCounterRef.current += 1;
- return `custom-${customCounterRef.current}`;
- }, []);
-
- const placed = useMemo(() => {
- const p = visiblePatterns.find((x) => x.id === patternId) ?? PATTERNS[0];
- return placePattern(p);
- }, [patternId, visiblePatterns]);
-
- const drawnFront = useMemo(() => {
- const s = new Set();
- for (const st of stitches) {
- if (st.side === 'front') s.add(edgeKey(st.from, st.to));
- }
- return s;
- }, [stitches]);
-
- const drawnBack = useMemo(() => {
- const s = new Set();
- for (const st of stitches) {
- if (st.side === 'back') s.add(edgeKey(st.from, st.to));
- }
- return s;
- }, [stitches]);
-
- const resetTrace = useCallback(() => {
- setCurrentVertex(null);
- setStartVertex(null);
- setActiveSide('front');
- setStitches([]);
- setCompleted(false);
- celebratedRef.current = false;
- }, []);
-
- const selectPattern = useCallback(
- (id: string) => {
- setPatternId(id);
- resetTrace();
- },
- [resetTrace]
- );
-
- // Pick starting vertex — any pattern-incident vertex is valid.
- const canStartAt = useCallback(
- (v: V) => placed.neighbors.has(vKey(v)),
- [placed]
- );
-
- // For a given current vertex and active side, compute reachable neighbors.
- const legalNextVertices = useMemo(() => {
- if (!currentVertex) return [] as V[];
- const key = vKey(currentVertex);
- const neigh = placed.neighbors.get(key) ?? [];
- const drawn = activeSide === 'front' ? drawnFront : drawnBack;
- return neigh.filter((n) => !drawn.has(edgeKey(currentVertex, n)));
- }, [currentVertex, placed, activeSide, drawnFront, drawnBack]);
-
- const handleVertexClick = useCallback(
- (v: V) => {
- if (completed) return;
- if (!currentVertex) {
- if (!canStartAt(v)) return;
- setStartVertex(v);
- setCurrentVertex(v);
- return;
- }
- if (!isNeighbor(currentVertex, v)) return;
- const k = edgeKey(currentVertex, v);
- if (!placed.edgeKeys.has(k)) return;
- const drawn = activeSide === 'front' ? drawnFront : drawnBack;
- if (drawn.has(k)) return;
- const next: Stitch = { side: activeSide, from: currentVertex, to: v };
- const newStitches = [...stitches, next];
- setStitches(newStitches);
- setCurrentVertex(v);
- setActiveSide(activeSide === 'front' ? 'back' : 'front');
-
- // Check completion: all edges drawn on both sides AND we've returned to start.
- const totalEdges = placed.edges.length;
- const newFront = activeSide === 'front' ? drawnFront.size + 1 : drawnFront.size;
- const newBack = activeSide === 'back' ? drawnBack.size + 1 : drawnBack.size;
- if (
- newFront === totalEdges &&
- newBack === totalEdges &&
- startVertex &&
- vEqual(v, startVertex)
- ) {
- setCompleted(true);
- }
- },
- [
- completed,
- currentVertex,
- canStartAt,
- placed,
- activeSide,
- drawnFront,
- drawnBack,
- stitches,
- startVertex,
- ]
- );
-
- const undo = useCallback(() => {
- if (stitches.length === 0) {
- setCurrentVertex(null);
- setStartVertex(null);
- return;
- }
- const last = stitches[stitches.length - 1];
- setStitches(stitches.slice(0, -1));
- setCurrentVertex(last.from);
- setActiveSide(last.side);
- setCompleted(false);
- celebratedRef.current = false;
- }, [stitches]);
-
- // Build a shareable URL that hydrates to this tour on arrival.
- const buildReplayUrl = useCallback((): string | null => {
- if (!completed || !startVertex || typeof window === 'undefined') return null;
- const pattern = visiblePatterns.find((p) => p.id === patternId);
- if (!pattern) return null;
- const encoded = encodeReplay(pattern, startVertex, stitches);
- const url = new URL(window.location.href);
- url.search = '';
- url.searchParams.set('replay', encoded);
- return url.toString();
- }, [completed, startVertex, patternId, visiblePatterns, stitches]);
-
- const copyReplayLink = useCallback(async () => {
- const url = buildReplayUrl();
- if (!url) return;
- try {
- await navigator.clipboard.writeText(url);
- toast.success('Replay link copied to clipboard.');
- } catch {
- toast.error('Could not copy — your browser blocked clipboard access.');
- }
- }, [buildReplayUrl]);
-
- const shareReplayOnX = useCallback(() => {
- const url = buildReplayUrl();
- if (!url) return;
- const patternName =
- visiblePatterns.find((p) => p.id === patternId)?.title ?? 'kasuti';
- const text = `I just traced a ${patternName} kasuti tour in ${stitches.length} stitches — watch it replay:`;
- const tweet = `https://twitter.com/intent/tweet?text=${encodeURIComponent(text)}&url=${encodeURIComponent(url)}`;
- window.open(tweet, '_blank', 'noopener,noreferrer');
- }, [buildReplayUrl, patternId, stitches.length, visiblePatterns]);
-
- const [gifBusy, setGifBusy] = useState(false);
- const exportGif = useCallback(async () => {
- if (gifBusy) return;
- if (!completed || !startVertex) return;
- setGifBusy(true);
- try {
- const { GIFEncoder, quantize, applyPalette } = await import('gifenc');
- const canvas = document.createElement('canvas');
- canvas.width = GIF_WIDTH;
- canvas.height = GIF_HEIGHT;
- const ctx = canvas.getContext('2d');
- if (!ctx) throw new Error('canvas unavailable');
-
- const encoder = GIFEncoder();
- const totalFrames = stitches.length + 1;
- // Export at 0.5× the on-screen replay pace — easier to follow in a loop
- // and friendlier when the GIF auto-plays in a social-media preview.
- const frameDelayMs = 400;
- const holdDelayMs = 1200;
-
- for (let k = 0; k <= stitches.length; k++) {
- const stitchesUpTo = stitches.slice(0, k);
- const side: Side =
- k === 0 ? 'front' : stitches[k - 1].side === 'front' ? 'back' : 'front';
- const cur = k === 0 ? startVertex : stitches[k - 1].to;
- drawGifFrame(ctx, placed, stitchesUpTo, frontColor, backColor, cur, startVertex, side);
- const { data } = ctx.getImageData(0, 0, GIF_WIDTH, GIF_HEIGHT);
- const palette = quantize(data, 64);
- const index = applyPalette(data, palette);
- const delay = k === 0 || k === stitches.length ? holdDelayMs : frameDelayMs;
- encoder.writeFrame(index, GIF_WIDTH, GIF_HEIGHT, { palette, delay });
- // Yield once in a while so the UI doesn't lock up on long tours.
- if (k % 8 === 0) await new Promise((r) => setTimeout(r, 0));
- }
- encoder.finish();
- const buffer = encoder.bytes();
- const blob = new Blob([buffer], { type: 'image/gif' });
- const url = URL.createObjectURL(blob);
- const link = document.createElement('a');
- const name =
- visiblePatterns.find((p) => p.id === patternId)?.title?.toLowerCase() ?? 'kasuti';
- link.href = url;
- link.download = `kasuti-${name}-${stitches.length}.gif`;
- document.body.appendChild(link);
- link.click();
- link.remove();
- URL.revokeObjectURL(url);
- toast.success(`Saved ${totalFrames}-frame GIF (${(buffer.length / 1024).toFixed(0)} KB).`);
- } catch (err) {
- toast.error(`Could not export GIF${err instanceof Error ? `: ${err.message}` : ''}.`);
- } finally {
- setGifBusy(false);
- }
- }, [
- gifBusy,
- completed,
- startVertex,
- stitches,
- placed,
- frontColor,
- backColor,
- visiblePatterns,
- patternId,
- ]);
-
- // On first completion: confetti + leave both fabrics showing the final tour.
- // Replay stays paused until the user presses play or scrubs the slider.
- // When the tour is un-completed (undo/reset/pattern change), tear down replay.
- useEffect(() => {
- if (completed && !celebratedRef.current) {
- celebratedRef.current = true;
- confetti({ particleCount: 180, spread: 90, origin: { y: 0.6 } });
- setReplayIdx(stitches.length);
- setReplayPlaying(false);
- } else if (!completed) {
- setReplayIdx(0);
- setReplayPlaying(false);
- }
- }, [completed, stitches.length]);
-
- // Hydrate from ?replay=... on mount. Runs once client-side; if the payload
- // parses and the pattern is known (preset or carried inline), rebuild the
- // stitch sequence and mark the tour complete — the completion effect above
- // then takes care of confetti + autoplay.
- const hydratedRef = useRef(false);
- useEffect(() => {
- if (hydratedRef.current) return;
- if (typeof window === 'undefined') return;
- const params = new URLSearchParams(window.location.search);
- const raw = params.get('replay');
- if (!raw) return;
- const payload = decodeReplay(raw);
- if (!payload) return;
-
- let targetPattern: Pattern | null = null;
- let targetPatternId = payload.p;
- if (payload.p === 'custom' && payload.e) {
- const customEdges: Array = payload.e.map(([a, b]) => [
- [a[0], a[1]] as V,
- [b[0], b[1]] as V,
- ]);
- // Build a Pattern from the raw (already-placed) edges. bbox should be 0..max.
- let maxR = 0;
- let maxC = 0;
- for (const [a, b] of customEdges) {
- maxR = Math.max(maxR, a[0], b[0]);
- maxC = Math.max(maxC, a[1], b[1]);
- }
- const hydratedId = nextCustomId();
- targetPattern = {
- id: hydratedId,
- title: 'Shared motif',
- description: `${customEdges.length} stitches`,
- bbox: [maxR, maxC],
- edges: customEdges,
- };
- targetPatternId = hydratedId;
- setCustomPatterns((prev) => [...prev, targetPattern!]);
- } else {
- targetPattern = PATTERNS.find((p) => p.id === payload.p) ?? null;
- }
- if (!targetPattern) return;
-
- setPatternId(targetPatternId);
-
- // Reconstruct stitches: start at payload.s, alternate sides, each entry's
- // `to` is the corresponding tour point.
- const start: V = [payload.s[0], payload.s[1]];
- const rebuilt: Stitch[] = [];
- let from: V = start;
- payload.t.forEach((pt, i) => {
- const to: V = [pt[0], pt[1]];
- rebuilt.push({ side: i % 2 === 0 ? 'front' : 'back', from, to });
- from = to;
- });
- setStartVertex(start);
- setCurrentVertex(from);
- setActiveSide(rebuilt.length % 2 === 0 ? 'front' : 'back');
- setStitches(rebuilt);
- // Pre-arm the celebration flag so the completion effect leaves replayIdx
- // at 0 and doesn't fire confetti — URL arrivals should land on an empty
- // board and press play themselves to watch the tour get stitched in.
- celebratedRef.current = true;
- setCompleted(true);
- hydratedRef.current = true;
- }, []);
-
- // Replay autoplay tick.
- useEffect(() => {
- if (!completed || !replayPlaying) return;
- const id = setInterval(() => {
- setReplayIdx((prev) => {
- if (prev >= stitches.length) {
- setReplayPlaying(false);
- return prev;
- }
- return prev + 1;
- });
- }, 320 / replaySpeed);
- return () => clearInterval(id);
- }, [completed, replayPlaying, stitches.length, replaySpeed]);
-
- // Effective view for rendering: during replay, clip stitches to replayIdx.
- const effectiveStitches = useMemo(
- () => (completed ? stitches.slice(0, replayIdx) : stitches),
- [completed, stitches, replayIdx]
- );
- const effectiveDrawnFront = useMemo(() => {
- if (!completed) return drawnFront;
- const s = new Set();
- for (const st of effectiveStitches) {
- if (st.side === 'front') s.add(edgeKey(st.from, st.to));
- }
- return s;
- }, [completed, effectiveStitches, drawnFront]);
- const effectiveDrawnBack = useMemo(() => {
- if (!completed) return drawnBack;
- const s = new Set();
- for (const st of effectiveStitches) {
- if (st.side === 'back') s.add(edgeKey(st.from, st.to));
- }
- return s;
- }, [completed, effectiveStitches, drawnBack]);
- const effectiveCurrentVertex: V | null = completed
- ? replayIdx === 0
- ? startVertex
- : stitches[replayIdx - 1].to
- : currentVertex;
- const effectiveActiveSide: Side = completed
- ? replayIdx === 0
- ? 'front'
- : stitches[replayIdx - 1].side === 'front'
- ? 'back'
- : 'front'
- : activeSide;
-
- const totalEdges = placed.edges.length;
- const frontRemaining = totalEdges - effectiveDrawnFront.size;
- const backRemaining = totalEdges - effectiveDrawnBack.size;
- const deadEnd = !completed && currentVertex !== null && legalNextVertices.length === 0;
-
- return (
-
-
-
-
- Kasuti
-
-
- A traditional hand-embroidery from Karnataka, India (7th century).
-
-
-
-
- Kasuti follows three rules: the design looks{' '}
- identical on both sides of the cloth,
- you end where you start , and{' '}
- no stitch is made twice . Trace a
- motif alternately on the front (left) and back (right). Each stitch flips the fabric.
-
-
- Kasuti is best experienced with thread and fabric, but if you want to experiment
- with making some designs or just get a feel for the pathways the thread will take
- when you don't have your materials handy, you can try emulating kasuti embroidery
- below. Pick one of the premade examples or make, save, and share your own designs!
-
-
- The editor does not currently support disjoint designs so make sure your patterns
- are connected. The browser will not save your designs, so be sure to download them
- separately if you want to come back to them later!
-
-
-
-
- {/* Pattern reel */}
-
-
-
- Choose a motif
-
- easy → more intricate
-
-
-
-
- p.id)}
- activeId={patternId}
- onSelect={selectPattern}
- onEditCustom={(id) => {
- setEditingId(id);
- setEditorOpen(true);
- }}
- onOpenEditor={() => {
- setEditingId(null);
- setEditorOpen(true);
- }}
- />
-
-
-
-
{
- setEditorOpen(open);
- if (!open) setEditingId(null);
- }}
- initial={editingPattern}
- onSave={(p) => {
- const title = p.title?.trim() || (editingPattern?.title ?? 'Custom');
- if (editingId) {
- // Update existing motif in place.
- const updated: Pattern = { ...p, id: editingId, title };
- setCustomPatterns((prev) =>
- prev.map((m) => (m.id === editingId ? updated : m))
- );
- setPatternId(editingId);
- } else {
- // Brand new motif.
- const id = nextCustomId();
- const defaultTitle =
- title && title !== 'Custom' ? title : `Custom ${customCounterRef.current}`;
- const created: Pattern = { ...p, id, title: defaultTitle };
- setCustomPatterns((prev) => [...prev, created]);
- setPatternId(id);
- }
- resetTrace();
- setEditingId(null);
- setEditorOpen(false);
- }}
- />
-
- {/* Status bar */}
-
-
-
- Front{effectiveActiveSide === 'front' ? ' · active' : ''}
-
-
- Back{effectiveActiveSide === 'back' ? ' · active' : ''}
-
-
- {effectiveStitches.length} stitch{effectiveStitches.length === 1 ? '' : 'es'} · front{' '}
- {effectiveDrawnFront.size}/{totalEdges} · back {effectiveDrawnBack.size}/{totalEdges}
-
-
-
-
-
- Undo
-
-
-
- Reset
-
-
-
-
- {/* Two fabric panels */}
-
-
-
-
-
- {completed && (
-
- )}
-
- {deadEnd && (
-
- No legal stitches from here on the {activeSide}. Undo a step or reset to try a
- different route.
-
- )}
-
-
-
-
- );
-};
-
-// ─── Replay controls ────────────────────────────────────────────────────────
-
-interface ReplayControlsProps {
- totalStitches: number;
- replayIdx: number;
- playing: boolean;
- speed: number; // 0.5 | 1 | 2
- onIdxChange: (idx: number) => void;
- onPlayingChange: (playing: boolean) => void;
- onSpeedChange: (speed: number) => void;
- onCopyLink: () => void;
- onShareTweet: () => void;
- onExportGif: () => void;
- gifBusy: boolean;
-}
-
-const REPLAY_SPEEDS = [0.5, 1, 2] as const;
-
-const ReplayControls: React.FC = ({
- totalStitches,
- replayIdx,
- playing,
- speed,
- onIdxChange,
- onPlayingChange,
- onSpeedChange,
- onCopyLink,
- onShareTweet,
- onExportGif,
- gifBusy,
-}) => {
- const atStart = replayIdx <= 0;
- const atEnd = replayIdx >= totalStitches;
-
- const handlePlay = () => {
- if (atEnd) {
- // If at the end, rewind and start over.
- onIdxChange(0);
- onPlayingChange(true);
- return;
- }
- onPlayingChange(!playing);
- };
-
- return (
-
-
-
- Tour complete in {totalStitches} stitches — replay below.
-
-
-
-
- Copy link
-
-
-
- Share
-
-
-
- {gifBusy ? 'Encoding…' : 'Save GIF'}
-
-
- speed
- {REPLAY_SPEEDS.map((s) => (
- onSpeedChange(s)}
- className={`px-2 py-0.5 rounded-md font-mono ${
- s === speed
- ? 'bg-foreground text-background'
- : 'hover:bg-muted'
- }`}
- >
- {s === 1 ? '1×' : `${s}×`}
-
- ))}
-
-
-
-
-
-
{
- onPlayingChange(false);
- onIdxChange(0);
- }}
- disabled={atStart}
- aria-label="Jump to start"
- >
-
-
-
{
- onPlayingChange(false);
- onIdxChange(Math.max(0, replayIdx - 1));
- }}
- disabled={atStart}
- aria-label="Previous stitch"
- >
-
-
-
- {playing ? : }
-
-
{
- onPlayingChange(false);
- onIdxChange(Math.min(totalStitches, replayIdx + 1));
- }}
- disabled={atEnd}
- aria-label="Next stitch"
- >
-
-
-
{
- onPlayingChange(false);
- onIdxChange(totalStitches);
- }}
- disabled={atEnd}
- aria-label="Jump to end"
- >
-
-
-
{
- onPlayingChange(false);
- onIdxChange(Number(e.target.value));
- }}
- className="flex-1 accent-primary"
- aria-label="Replay scrubber"
- />
-
- {replayIdx} / {totalStitches}
-
-
-
- );
-};
-
-// ─── Fabric panel (one side) ────────────────────────────────────────────────
-
-interface FabricPanelProps {
- side: Side;
- title: string;
- color: string;
- setColor: (c: string) => void;
- palette: string[];
- placed: PlacedPattern;
- currentVertex: V | null;
- startVertex: V | null;
- drawn: Set;
- otherDrawn: Set;
- stitches: Stitch[];
- frontColor: string;
- backColor: string;
- activeSide: Side;
- onVertexClick: (v: V) => void;
- legalNext: V[];
- canStartAt: (v: V) => boolean;
- completed: boolean;
- deadEnd: boolean;
- remaining: number;
-}
-
-const FabricPanel: React.FC = ({
- side,
- title,
- color,
- setColor,
- palette,
- placed,
- currentVertex,
- startVertex,
- drawn,
- stitches,
- activeSide,
- onVertexClick,
- legalNext,
- canStartAt,
- completed,
- deadEnd,
- remaining,
-}) => {
- const isActive = activeSide === side && !completed;
- const dots: V[] = useMemo(() => {
- const out: V[] = [];
- for (let r = 0; r <= GRID_SIZE; r++) {
- for (let c = 0; c <= GRID_SIZE; c++) {
- out.push([r, c]);
- }
- }
- return out;
- }, []);
-
- const legalSet = useMemo(() => {
- const s = new Set();
- for (const v of legalNext) s.add(vKey(v));
- return s;
- }, [legalNext]);
-
- const mySideStitches = stitches.filter((s) => s.side === side);
-
- return (
-
-
-
-
- {title}
- {isActive && (
- active
- )}
- {!isActive && !completed && (
-
- waiting
-
- )}
-
-
-
thread
-
- {palette.map((c) => (
- setColor(c)}
- aria-label={`Set ${side} thread color`}
- className={`w-5 h-5 rounded-full border-2 transition-transform ${
- color === c ? 'border-foreground scale-110' : 'border-border'
- }`}
- style={{ backgroundColor: c }}
- />
- ))}
-
- setColor(e.target.value)}
- className="absolute inset-0 opacity-0 cursor-pointer"
- />
-
-
-
-
-
- {mySideStitches.length} / {placed.edges.length} stitches · {remaining} remaining
-
-
-
-
-
- {/* Grid dots */}
- {dots.map(([r, c]) => {
- const { x, y } = toXY([r, c]);
- return (
-
- );
- })}
-
- {/* Pattern guide lines (undrawn). Drawn ones rendered below in thread color. */}
- {placed.edges.map(([a, b], i) => {
- const k = edgeKey(a, b);
- if (drawn.has(k)) return null;
- const p = toXY(a);
- const q = toXY(b);
- return (
-
- );
- })}
-
- {/* Drawn stitches on this side in thread color */}
- {mySideStitches.map((st, i) => {
- const p = toXY(st.from);
- const q = toXY(st.to);
- return (
-
- );
- })}
-
- {/* Legal-next affordances (green = go) */}
- {isActive &&
- currentVertex &&
- legalNext.map((v, i) => {
- const { x, y } = toXY(v);
- return (
-
- );
- })}
-
- {/* Start-picker affordances (only when no current vertex yet and this side is active) */}
- {isActive &&
- !currentVertex &&
- placed.vertices.map((v, i) => {
- const { x, y } = toXY(v);
- return (
-
- );
- })}
-
- {/* Start vertex marker (persists across sides) */}
- {startVertex && (
-
- )}
-
- {/* Current vertex marker — red on the active side, muted grey on the other.
- A ring briefly expands each time the marker moves or the side flips
- (the browser won't let us move the OS mouse pointer, so this draws
- the eye instead). */}
- {currentVertex &&
- (() => {
- const { x, y } = toXY(currentVertex);
- if (!isActive) {
- return (
-
- );
- }
- return (
-
-
-
-
-
-
-
- );
- })()}
-
- {/* Click overlays: only active side accepts clicks */}
- {isActive &&
- dots.map(([r, c]) => {
- const v: V = [r, c];
- const clickable = currentVertex
- ? legalSet.has(vKey(v))
- : canStartAt(v);
- if (!clickable) return null;
- const { x, y } = toXY(v);
- return (
- onVertexClick(v)}
- className="cursor-pointer"
- />
- );
- })}
-
-
-
-
- );
-};
-
-// ─── Pattern editor modal ──────────────────────────────────────────────────
-
-const EDITOR_SIZE = 14; // cells
-const EDITOR_CELL = 22; // px
-const EDITOR_PAD = 14;
-const EDITOR_DIM = EDITOR_SIZE * EDITOR_CELL + EDITOR_PAD * 2;
-
-function edgeListFromKeys(keys: Set): Array {
- const out: Array = [];
- for (const k of keys) {
- const [a, b] = k.split('|');
- const [r1, c1] = a.split(',').map(Number);
- const [r2, c2] = b.split(',').map(Number);
- out.push([[r1, c1] as V, [r2, c2] as V]);
- }
- return out;
-}
-
-function isConnected(edges: Array): boolean {
- if (edges.length === 0) return false;
- const adj = new Map();
- for (const [a, b] of edges) {
- const ka = vKey(a);
- const kb = vKey(b);
- if (!adj.has(ka)) adj.set(ka, []);
- if (!adj.has(kb)) adj.set(kb, []);
- adj.get(ka)!.push(kb);
- adj.get(kb)!.push(ka);
- }
- const start = adj.keys().next().value as string | undefined;
- if (!start) return false;
- const seen = new Set([start]);
- const queue = [start];
- while (queue.length) {
- const node = queue.shift()!;
- for (const next of adj.get(node) ?? []) {
- if (!seen.has(next)) {
- seen.add(next);
- queue.push(next);
- }
- }
- }
- return seen.size === adj.size;
-}
-
-function normalizePattern(edges: Array): Pattern | null {
- if (edges.length === 0) return null;
- let minR = Infinity,
- minC = Infinity,
- maxR = -Infinity,
- maxC = -Infinity;
- for (const [a, b] of edges) {
- for (const [r, c] of [a, b]) {
- if (r < minR) minR = r;
- if (r > maxR) maxR = r;
- if (c < minC) minC = c;
- if (c > maxC) maxC = c;
- }
- }
- const shifted: Array = edges.map(([a, b]) => [
- [a[0] - minR, a[1] - minC] as V,
- [b[0] - minR, b[1] - minC] as V,
- ]);
- return {
- id: 'custom',
- title: 'Custom',
- description: `${edges.length} stitches`,
- bbox: [maxR - minR, maxC - minC],
- edges: shifted,
- };
-}
-
-interface PatternEditorProps {
- open: boolean;
- onOpenChange: (open: boolean) => void;
- initial: Pattern | null;
- onSave: (p: Pattern) => void;
-}
-
-interface KasutiPatternFile {
- kind: 'kasuti-pattern';
- version: 1;
- title: string;
- edges: Array<[[number, number], [number, number]]>;
-}
-
-function centeredEdgeSetFromPattern(p: Pattern): Set {
- const [br, bc] = p.bbox;
- const offR = Math.max(0, Math.floor((EDITOR_SIZE - br) / 2));
- const offC = Math.max(0, Math.floor((EDITOR_SIZE - bc) / 2));
- const out = new Set();
- for (const [a, b] of p.edges) {
- const sa: V = [a[0] + offR, a[1] + offC];
- const sb: V = [b[0] + offR, b[1] + offC];
- out.add(edgeKey(sa, sb));
- }
- return out;
-}
-
-function parsePatternFile(raw: string): Pattern | null {
- try {
- const data = JSON.parse(raw) as KasutiPatternFile;
- if (!data || data.kind !== 'kasuti-pattern' || !Array.isArray(data.edges)) return null;
- const edges: Array = [];
- for (const e of data.edges) {
- if (!Array.isArray(e) || e.length !== 2) return null;
- const [a, b] = e;
- if (!Array.isArray(a) || !Array.isArray(b)) return null;
- if (a.length !== 2 || b.length !== 2) return null;
- const [r1, c1] = a;
- const [r2, c2] = b;
- if (
- typeof r1 !== 'number' ||
- typeof c1 !== 'number' ||
- typeof r2 !== 'number' ||
- typeof c2 !== 'number'
- )
- return null;
- // Orthogonal or diagonal unit-length segments are valid.
- const dr = Math.abs(r1 - r2);
- const dc = Math.abs(c1 - c2);
- if (
- !(
- (dr === 1 && dc === 0) ||
- (dr === 0 && dc === 1) ||
- (dr === 1 && dc === 1)
- )
- )
- return null;
- edges.push([[r1, c1] as V, [r2, c2] as V]);
- }
- const normalized = normalizePattern(edges);
- if (!normalized) return null;
- return { ...normalized, title: data.title || 'Custom' };
- } catch {
- return null;
- }
-}
-
-const PatternEditor: React.FC = ({ open, onOpenChange, initial, onSave }) => {
- const [edges, setEdges] = useState>(new Set());
- const [title, setTitle] = useState('');
- const [loadError, setLoadError] = useState(null);
- const fileInputRef = useRef(null);
-
- // When the modal opens, seed from the initial custom pattern (if any), centred in the
- // editor grid. Resetting here avoids stale state between open/close cycles.
- useEffect(() => {
- if (!open) return;
- setLoadError(null);
- if (!initial) {
- setEdges(new Set());
- setTitle('');
- return;
- }
- setEdges(centeredEdgeSetFromPattern(initial));
- setTitle(initial.title ?? '');
- }, [open, initial]);
-
- const toggleEdge = useCallback((a: V, b: V) => {
- setEdges((prev) => {
- const next = new Set(prev);
- const k = edgeKey(a, b);
- if (next.has(k)) next.delete(k);
- else next.add(k);
- return next;
- });
- }, []);
-
- const edgeList = useMemo(() => edgeListFromKeys(edges), [edges]);
- const connected = useMemo(() => isConnected(edgeList), [edgeList]);
- const count = edges.size;
-
- // Orthogonal edges are painted first so they stay on top (clicks near a vertex
- // prefer the straight segment); diagonals sit underneath and catch clicks in
- // the middle of each cell.
- const orthogonalEdges: Array<[V, V]> = useMemo(() => {
- const out: Array<[V, V]> = [];
- for (let r = 0; r <= EDITOR_SIZE; r++) {
- for (let c = 0; c < EDITOR_SIZE; c++) {
- out.push([[r, c], [r, c + 1]]);
- }
- }
- for (let r = 0; r < EDITOR_SIZE; r++) {
- for (let c = 0; c <= EDITOR_SIZE; c++) {
- out.push([[r, c], [r + 1, c]]);
- }
- }
- return out;
- }, []);
-
- const diagonalEdges: Array<[V, V]> = useMemo(() => {
- const out: Array<[V, V]> = [];
- for (let r = 0; r < EDITOR_SIZE; r++) {
- for (let c = 0; c < EDITOR_SIZE; c++) {
- out.push([[r, c], [r + 1, c + 1]]); // ╲
- out.push([[r, c + 1], [r + 1, c]]); // ╱
- }
- }
- return out;
- }, []);
-
- const handleSave = useCallback(() => {
- if (!connected) return;
- const pattern = normalizePattern(edgeList);
- if (!pattern) return;
- // Main grid has GRID_SIZE cells; patterns larger than that will not fit.
- const [br, bc] = pattern.bbox;
- if (br > GRID_SIZE || bc > GRID_SIZE) return;
- const trimmed = title.trim();
- onSave({ ...pattern, title: trimmed || 'Custom' });
- }, [connected, edgeList, title, onSave]);
-
- const handleClear = useCallback(() => setEdges(new Set()), []);
-
- const handleDownload = useCallback(() => {
- const pattern = normalizePattern(edgeList);
- if (!pattern) return;
- const trimmed = title.trim() || 'Custom';
- const payload: KasutiPatternFile = {
- kind: 'kasuti-pattern',
- version: 1,
- title: trimmed,
- edges: pattern.edges.map(([a, b]) => [
- [a[0], a[1]],
- [b[0], b[1]],
- ]),
- };
- const blob = new Blob([JSON.stringify(payload, null, 2)], { type: 'application/json' });
- const url = URL.createObjectURL(blob);
- const link = document.createElement('a');
- const safeName = trimmed.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') || 'motif';
- link.href = url;
- link.download = `kasuti-${safeName}-${pattern.edges.length}.json`;
- document.body.appendChild(link);
- link.click();
- link.remove();
- URL.revokeObjectURL(url);
- }, [edgeList, title]);
-
- const handleDownloadPng = useCallback(() => {
- const pattern = normalizePattern(edgeList);
- if (!pattern) return;
- const trimmed = title.trim() || 'Custom';
- const safeName =
- trimmed.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') || 'motif';
- const [rows, cols] = pattern.bbox;
- const span = Math.max(rows, cols, 1);
- const cellPx = 800 / span;
- const pad = 40;
- const W = Math.round(cols * cellPx + pad * 2);
- const H = Math.round(rows * cellPx + pad * 2);
- const canvas = document.createElement('canvas');
- canvas.width = W;
- canvas.height = H;
- const ctx = canvas.getContext('2d');
- if (!ctx) return;
- ctx.fillStyle = '#ffffff';
- ctx.fillRect(0, 0, W, H);
- ctx.strokeStyle = '#171717';
- ctx.lineWidth = Math.max(4, cellPx * 0.16);
- ctx.lineCap = 'round';
- ctx.lineJoin = 'round';
- for (const [a, b] of pattern.edges) {
- ctx.beginPath();
- ctx.moveTo(pad + a[1] * cellPx, pad + a[0] * cellPx);
- ctx.lineTo(pad + b[1] * cellPx, pad + b[0] * cellPx);
- ctx.stroke();
- }
- canvas.toBlob((blob) => {
- if (!blob) return;
- const url = URL.createObjectURL(blob);
- const link = document.createElement('a');
- link.href = url;
- link.download = `kasuti-${safeName}-${pattern.edges.length}.png`;
- document.body.appendChild(link);
- link.click();
- link.remove();
- URL.revokeObjectURL(url);
- }, 'image/png');
- }, [edgeList, title]);
-
- const handleUpload = useCallback(() => {
- fileInputRef.current?.click();
- }, []);
-
- const handleFilePicked = useCallback((e: React.ChangeEvent) => {
- const file = e.target.files?.[0];
- e.target.value = '';
- if (!file) return;
- const reader = new FileReader();
- reader.onload = () => {
- const result = typeof reader.result === 'string' ? reader.result : '';
- const parsed = parsePatternFile(result);
- if (!parsed) {
- setLoadError('That file does not look like a saved Kasuti motif.');
- return;
- }
- const [br, bc] = parsed.bbox;
- if (br > EDITOR_SIZE || bc > EDITOR_SIZE) {
- setLoadError(
- `That motif is too big for the editor grid (${br + 1}×${bc + 1} > ${EDITOR_SIZE + 1}×${EDITOR_SIZE + 1}).`
- );
- return;
- }
- setLoadError(null);
- setEdges(centeredEdgeSetFromPattern(parsed));
- setTitle(parsed.title ?? '');
- };
- reader.onerror = () => setLoadError('Could not read that file.');
- reader.readAsText(file);
- }, []);
-
- return (
-
-
-
- {initial ? 'Edit motif' : 'Design your own motif'}
-
- Click between two dots to add or remove a stitch line. As long as your motif is{' '}
- connected , an alternating kasuti tour exists on it.
-
-
-
-
-
- Name
-
- setTitle(e.target.value)}
- placeholder="Custom"
- maxLength={40}
- className="h-8 text-sm"
- />
-
-
-
-
- {/* Grid dots */}
- {Array.from({ length: (EDITOR_SIZE + 1) * (EDITOR_SIZE + 1) }).map((_, i) => {
- const r = Math.floor(i / (EDITOR_SIZE + 1));
- const c = i % (EDITOR_SIZE + 1);
- return (
-
- );
- })}
-
- {/* Drawn edges */}
- {edgeList.map(([a, b], i) => {
- const ax = EDITOR_PAD + a[1] * EDITOR_CELL;
- const ay = EDITOR_PAD + a[0] * EDITOR_CELL;
- const bx = EDITOR_PAD + b[1] * EDITOR_CELL;
- const by = EDITOR_PAD + b[0] * EDITOR_CELL;
- return (
-
- );
- })}
-
- {/* Hit areas — diagonals underneath (catch clicks in cell centre),
- orthogonals on top (catch clicks near each edge). */}
- {diagonalEdges.map(([a, b], i) => {
- const ax = EDITOR_PAD + a[1] * EDITOR_CELL;
- const ay = EDITOR_PAD + a[0] * EDITOR_CELL;
- const bx = EDITOR_PAD + b[1] * EDITOR_CELL;
- const by = EDITOR_PAD + b[0] * EDITOR_CELL;
- return (
- toggleEdge(a, b)}
- className="cursor-pointer hover:stroke-primary/15"
- />
- );
- })}
- {orthogonalEdges.map(([a, b], i) => {
- const horizontal = a[0] === b[0];
- const x = EDITOR_PAD + Math.min(a[1], b[1]) * EDITOR_CELL;
- const y = EDITOR_PAD + Math.min(a[0], b[0]) * EDITOR_CELL;
- const w = horizontal ? EDITOR_CELL : 8;
- const h = horizontal ? 8 : EDITOR_CELL;
- return (
- toggleEdge(a, b)}
- className="cursor-pointer hover:fill-primary/10"
- />
- );
- })}
-
-
-
-
-
{count} stitch{count === 1 ? '' : 'es'}
- {count > 0 && !connected && (
-
- Not connected — every drawn segment must reach every other segment.
-
- )}
- {count > 0 && connected && (
-
Connected — ready to stitch.
- )}
- {loadError &&
{loadError}
}
-
-
-
-
-
-
-
-
- Upload
-
-
-
- JSON
-
-
-
- PNG
-
-
- Clear
-
-
-
- Use this motif
-
-
-
-
- );
-};
-
-export default KasutiEmbroidery;
diff --git a/src/components/interactives/ThreeBankAccounts.tsx b/src/components/interactives/ThreeBankAccounts.tsx
deleted file mode 100644
index a137da6..0000000
--- a/src/components/interactives/ThreeBankAccounts.tsx
+++ /dev/null
@@ -1,1058 +0,0 @@
-import React, { useState, useCallback, useMemo, useEffect, useRef } from 'react';
-import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
-import { Button } from '@/components/ui/button';
-import { Input } from '@/components/ui/input';
-import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
-import { Badge } from '@/components/ui/badge';
-import { Label } from '@/components/ui/label';
-import { Switch } from '@/components/ui/switch';
-import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog';
-import confetti from 'canvas-confetti';
-import katex from 'katex';
-import 'katex/dist/katex.min.css';
-
-// ─── Helpers ────────────────────────────────────────────────────────────────
-
-function tex(expr: string): string {
- return katex.renderToString(expr, { throwOnError: false });
-}
-
-function toBin(n: number): string {
- return n.toString(2);
-}
-
-const ACCOUNT_LABELS = ['A', 'B', 'C'] as const;
-type AccountLabel = (typeof ACCOUNT_LABELS)[number];
-
-const RANK_COLORS = {
- MIN: {
- bg: 'bg-green-100 dark:bg-green-900/40',
- border: 'border-green-500',
- text: 'text-green-700 dark:text-green-300',
- badge: 'bg-green-500 text-white',
- inlineText: 'text-green-700 dark:text-green-400',
- },
- MID: {
- bg: 'bg-amber-100 dark:bg-amber-900/40',
- border: 'border-amber-500',
- text: 'text-amber-700 dark:text-amber-300',
- badge: 'bg-amber-500 text-white',
- inlineText: 'text-amber-700 dark:text-amber-400',
- },
- MAX: {
- bg: 'bg-rose-100 dark:bg-rose-900/40',
- border: 'border-rose-500',
- text: 'text-rose-700 dark:text-rose-300',
- badge: 'bg-rose-500 text-white',
- inlineText: 'text-rose-700 dark:text-rose-400',
- },
-} as const;
-
-type RankLabel = 'MIN' | 'MID' | 'MAX' | 'TIE';
-
-const TIE_COLORS = {
- bg: 'bg-purple-100 dark:bg-purple-900/40',
- border: 'border-purple-500',
- text: 'text-purple-700 dark:text-purple-300',
- badge: 'bg-purple-500 text-white',
- inlineText: 'text-purple-700 dark:text-purple-400',
-};
-
-function getRanks(balances: [number, number, number]): [RankLabel, RankLabel, RankLabel] {
- const [a, b, c] = balances;
- const indices = [0, 1, 2].sort((x, y) => balances[x] - balances[y]);
- const sorted = [balances[indices[0]], balances[indices[1]], balances[indices[2]]];
-
- const ranks: [RankLabel, RankLabel, RankLabel] = ['MIN', 'MIN', 'MIN'];
-
- if (sorted[0] === sorted[1] && sorted[1] === sorted[2]) {
- // All three equal
- ranks[0] = ranks[1] = ranks[2] = 'TIE';
- } else if (sorted[0] === sorted[1]) {
- // Two smallest are tied
- ranks[indices[0]] = 'TIE';
- ranks[indices[1]] = 'TIE';
- ranks[indices[2]] = 'MAX';
- } else if (sorted[1] === sorted[2]) {
- // Two largest are tied
- ranks[indices[0]] = 'MIN';
- ranks[indices[1]] = 'TIE';
- ranks[indices[2]] = 'TIE';
- } else {
- ranks[indices[0]] = 'MIN';
- ranks[indices[1]] = 'MID';
- ranks[indices[2]] = 'MAX';
- }
- return ranks;
-}
-
-function hasEquality(balances: [number, number, number]): boolean {
- return (
- balances[0] === balances[1] ||
- balances[1] === balances[2] ||
- balances[0] === balances[2]
- );
-}
-
-function RankText({ rank, colorEnabled }: { rank: RankLabel; colorEnabled: boolean }) {
- const color = rank === 'TIE' ? TIE_COLORS.inlineText : RANK_COLORS[rank as keyof typeof RANK_COLORS]?.inlineText || '';
- if (colorEnabled) {
- return {rank} ;
- }
- return {rank} ;
-}
-
-interface Transfer {
- from: number;
- to: number;
- amount: number;
-}
-
-interface GameState {
- balances: [number, number, number];
- history: Transfer[];
-}
-
-function getLegalTransfers(balances: [number, number, number]): Transfer[] {
- const transfers: Transfer[] = [];
- for (let from = 0; from < 3; from++) {
- for (let to = 0; to < 3; to++) {
- if (from === to) continue;
- if (balances[from] >= balances[to] && balances[to] > 0) {
- transfers.push({ from, to, amount: balances[to] });
- }
- }
- }
- return transfers;
-}
-
-function applyTransfer(
- balances: [number, number, number],
- transfer: Transfer
-): [number, number, number] {
- const next: [number, number, number] = [...balances];
- next[transfer.from] -= transfer.amount;
- next[transfer.to] += transfer.amount;
- return next;
-}
-
-function hasWon(balances: [number, number, number]): number | null {
- for (let i = 0; i < 3; i++) {
- if (balances[i] === 0) return i;
- }
- return null;
-}
-
-// T8: Game is "done" if any account is 0 OR any two are equal (for Play/Explore)
-function isGameDone(balances: [number, number, number]): boolean {
- return hasWon(balances) !== null || hasEquality(balances);
-}
-
-function getEqualPair(balances: [number, number, number]): [number, number] | null {
- if (balances[0] === balances[1]) return [0, 1];
- if (balances[0] === balances[2]) return [0, 2];
- if (balances[1] === balances[2]) return [1, 2];
- return null;
-}
-
-// ─── Solution algorithm ─────────────────────────────────────────────────────
-
-interface SolutionStep {
- balances: [number, number, number];
- sorted: [number, number, number];
- sortedLabels: [string, string, string];
- /** Labels fixed at start of iteration */
- iterationLabels?: [string, string, string]; // [MIN, MID, MAX]
- transfer?: { from: string; to: string; fromAccount: string; toAccount: string; amount: number; bit: number; bitIndex: number; totalBits: number };
- q?: number;
- qBits?: number[]; // LSB first
- r?: number;
- iteration?: number;
-}
-
-function computeSolution(initial: [number, number, number]): SolutionStep[] {
- const steps: SolutionStep[] = [];
- let balances: [number, number, number] = [...initial];
-
- if (balances.some((b) => b === 0)) {
- steps.push({
- balances: [...balances],
- sorted: [...balances].sort((a, b) => a - b) as [number, number, number],
- sortedLabels: getSortedLabels(balances),
- });
- return steps;
- }
-
- let iteration = 0;
- const maxSteps = 10000;
- let totalSteps = 0;
-
- while (!balances.some((b) => b === 0) && totalSteps < maxSteps) {
- iteration++;
- const indices = [0, 1, 2].sort((a, b) => balances[a] - balances[b]);
- const L = balances[indices[0]];
- const M = balances[indices[1]];
- const q = Math.floor(M / L);
- const r = M % L;
-
- // Fix the roles for this iteration
- const idxSmallest = indices[0];
- const idxMiddle = indices[1];
- const idxLargest = indices[2];
- const iterationLabels: [string, string, string] = [
- ACCOUNT_LABELS[idxSmallest],
- ACCOUNT_LABELS[idxMiddle],
- ACCOUNT_LABELS[idxLargest],
- ];
-
- const bits = toBin(q).split('').map(Number).reverse(); // LSB first
-
- steps.push({
- balances: [...balances],
- sorted: [balances[indices[0]], balances[indices[1]], balances[indices[2]]],
- sortedLabels: [ACCOUNT_LABELS[indices[0]], ACCOUNT_LABELS[indices[1]], ACCOUNT_LABELS[indices[2]]],
- iterationLabels,
- q, qBits: bits, r, iteration,
- });
-
- // Process bits from LSB to MSB: a_0, a_1, ..., a_k
- // Each transfer doubles the smallest account. Source is middle (bit=1) or largest (bit=0).
- for (let bitIdx = 0; bitIdx < bits.length; bitIdx++) {
- const bit = bits[bitIdx];
- if (balances.some((b) => b === 0) || totalSteps >= maxSteps) break;
-
- const amount = balances[idxSmallest];
- if (amount === 0) break;
- const from = bit === 1 ? idxMiddle : idxLargest;
-
- if (balances[from] < amount) break;
-
- const transfer = { from, to: idxSmallest, amount };
- balances = applyTransfer(balances, transfer);
- totalSteps++;
-
- steps.push({
- balances: [...balances],
- sorted: [...balances].sort((a, b) => a - b) as [number, number, number],
- sortedLabels: getSortedLabels(balances),
- iterationLabels,
- transfer: {
- from: ACCOUNT_LABELS[from],
- to: ACCOUNT_LABELS[idxSmallest],
- fromAccount: ACCOUNT_LABELS[from],
- toAccount: ACCOUNT_LABELS[idxSmallest],
- amount,
- bit,
- bitIndex: bitIdx,
- totalBits: bits.length,
- },
- q, qBits: bits, r, iteration,
- });
- }
- }
- return steps;
-}
-
-function getSortedLabels(balances: [number, number, number]): [string, string, string] {
- const indices = [0, 1, 2].sort((a, b) => balances[a] - balances[b]);
- return [ACCOUNT_LABELS[indices[0]], ACCOUNT_LABELS[indices[1]], ACCOUNT_LABELS[indices[2]]];
-}
-
-// ─── Sub-components ─────────────────────────────────────────────────────────
-
-function AccountCard({
- label, balance, rank, showBinary, className = '',
-}: {
- label: AccountLabel; balance: number; rank: RankLabel; showBinary?: boolean; className?: string;
-}) {
- const colors = rank === 'TIE' ? TIE_COLORS : RANK_COLORS[rank as keyof typeof RANK_COLORS];
- return (
-
-
-
- Account {label}
- {rank}
-
-
-
-
- ${balance.toLocaleString()}
-
- {showBinary && balance > 0 && (
- bin: {toBin(balance)}
- )}
-
-
- );
-}
-
-// T7: Animated sorted cards — uses a key based on sort order to trigger re-mount animation
-function SortedAccountCards({ balances, showBinary }: { balances: [number, number, number]; showBinary?: boolean }) {
- const ranks = getRanks(balances);
- const sortedIndices = [0, 1, 2].sort((a, b) => balances[a] - balances[b]);
- const sortKey = sortedIndices.join('-');
- const [animating, setAnimating] = useState(false);
- const prevSortKey = useRef(sortKey);
-
- useEffect(() => {
- if (prevSortKey.current !== sortKey) {
- setAnimating(true);
- const timer = setTimeout(() => setAnimating(false), 500);
- prevSortKey.current = sortKey;
- return () => clearTimeout(timer);
- }
- }, [sortKey]);
-
- return (
-
- {sortedIndices.map((i) => (
-
- ))}
-
- );
-}
-
-function BalanceInput({ label, value, onChange }: { label: AccountLabel; value: number; onChange: (v: number) => void }) {
- return (
-
- {label}
- { const v = parseInt(e.target.value, 10); if (!isNaN(v) && v >= 0 && v <= 10000) onChange(v); }}
- className="w-24 font-mono" />
-
- );
-}
-
-function PresetPicker({ initialBalances, setInitial }: { initialBalances: [number, number, number]; setInitial: (vals: [number, number, number]) => void }) {
- const randomPreset = () => {
- const a = Math.floor(Math.random() * 50) + 1;
- const b = Math.floor(Math.random() * 50) + 1;
- const c = Math.floor(Math.random() * 50) + 1;
- setInitial([a, b, c]);
- };
- return (
-
-
-
- setInitial([v, initialBalances[1], initialBalances[2]])} />
- setInitial([initialBalances[0], v, initialBalances[2]])} />
- setInitial([initialBalances[0], initialBalances[1], v])} />
-
-
- setInitial([5, 8, 11])}>Easy (5, 8, 11)
- setInitial([4, 8, 13])}>Medium (4, 8, 13)
- setInitial([17, 23, 41])}>Hard (17, 23, 41)
- Random
-
-
-
- );
-}
-
-// T9: Color-coded transfer button
-function TransferButton({
- transfer, balances, onTransfer, colorText,
-}: {
- transfer: Transfer; balances: [number, number, number]; onTransfer: (t: Transfer) => void; colorText: boolean;
-}) {
- const ranks = getRanks(balances);
- const fromRank = ranks[transfer.from];
- const toRank = ranks[transfer.to];
- const fromLabel = ACCOUNT_LABELS[transfer.from];
- const toLabel = ACCOUNT_LABELS[transfer.to];
-
- return (
- onTransfer(transfer)}>
- Transfer ${transfer.amount} from ({fromLabel}) → ({toLabel})
-
- (doubles to ${balances[transfer.to] * 2})
-
-
- );
-}
-
-function ColorToggle({ colorText, setColorText, balances, fixedLabels }: {
- colorText: boolean;
- setColorText: (v: boolean) => void;
- balances?: [number, number, number];
- /** Override labels for solution tab — uses iteration's fixed MIN/MID/MAX assignments */
- fixedLabels?: [string, string, string];
-}) {
- const ranks = balances ? getRanks(balances) : null;
- return (
-
-
-
-
- Color-coded labels
-
-
- {fixedLabels ? (
- /* T22: Solution tab shows iteration's fixed labels */
-
- {(['MIN', 'MID', 'MAX'] as const).map((rank, i) => {
- const rc = RANK_COLORS[rank];
- return (
-
- {rank} ={fixedLabels[i]}
-
- );
- })}
-
- ) : ranks && balances ? (
-
- {ACCOUNT_LABELS.map((label, i) => {
- const rank = ranks[i];
- const rc = rank === 'TIE' ? TIE_COLORS : RANK_COLORS[rank as keyof typeof RANK_COLORS];
- return (
-
- {rank} ={label}
-
- );
- })}
-
- ) : null}
-
- );
-}
-
-// T8: Game-over message for equality
-function GameDoneMessage({ balances, history }: { balances: [number, number, number]; history: Transfer[] }) {
- const wonIdx = hasWon(balances);
- if (wonIdx !== null) {
- return (
-
- You emptied account {ACCOUNT_LABELS[wonIdx]} in {history.length}{' '}
- move{history.length !== 1 ? 's' : ''}!
-
- );
- }
- const pair = getEqualPair(balances);
- if (pair) {
- return (
-
- Accounts {ACCOUNT_LABELS[pair[0]]} and {ACCOUNT_LABELS[pair[1]]} are equal (${balances[pair[0]]}) after {history.length}{' '}
- move{history.length !== 1 ? 's' : ''}! From here, one transfer empties an account.
-
- );
- }
- return null;
-}
-
-// ─── Play Tab ───────────────────────────────────────────────────────────────
-
-function PlayTab({ onSwitchTab }: { onSwitchTab: (tab: string) => void }) {
- const [initialBalances, setInitialBalances] = useState<[number, number, number]>([5, 8, 11]);
- const [state, setState] = useState({ balances: [5, 8, 11], history: [] });
- const [done, setDone] = useState(false);
- const [colorText, setColorText] = useState(true);
-
- const setInitial = useCallback((vals: [number, number, number]) => {
- setInitialBalances(vals);
- setState({ balances: vals, history: [] });
- setDone(false);
- }, []);
-
- const doTransfer = useCallback(
- (transfer: Transfer) => {
- if (done) return;
- const newBalances = applyTransfer(state.balances, transfer);
- const newHistory = [...state.history, transfer];
- setState({ balances: newBalances, history: newHistory });
- if (hasWon(newBalances) !== null) {
- setDone(true);
- confetti({ particleCount: 150, spread: 80, origin: { y: 0.6 } });
- }
- },
- [state, done]
- );
-
- const undo = useCallback(() => {
- if (state.history.length === 0) return;
- const newHistory = state.history.slice(0, -1);
- let balances: [number, number, number] = [...initialBalances];
- for (const t of newHistory) balances = applyTransfer(balances, t);
- setState({ balances, history: newHistory });
- setDone(hasWon(balances) !== null);
- }, [state, initialBalances]);
-
- const reset = useCallback(() => {
- setState({ balances: [...initialBalances], history: [] });
- setDone(false);
- }, [initialBalances]);
-
- // T24: When there's a tie, only show transfers between the tied accounts
- const legalTransfers = useMemo(() => {
- if (done) return [];
- let transfers = getLegalTransfers(state.balances);
- const pair = getEqualPair(state.balances);
- if (pair) {
- transfers = transfers.filter(
- (t) => pair.includes(t.from) && pair.includes(t.to)
- );
- }
- return transfers;
- }, [state.balances, done]
- );
-
- const alreadyZero = initialBalances.some((b) => b === 0);
-
- return (
-
-
-
-
- {alreadyZero && (
-
One account is already at $0 — nothing to do!
- )}
-
-
-
- {done &&
}
-
-
-
-
Available Transfers
- {legalTransfers.length === 0 && !done && !alreadyZero && (
-
No legal transfers available.
- )}
-
- {legalTransfers.map((t, i) => (
-
- ))}
-
-
- Undo
- Reset
-
-
-
-
-
- Transfer Log ({state.history.length} move{state.history.length !== 1 ? 's' : ''})
-
-
- {state.history.length === 0 &&
No transfers yet.
}
- {state.history.map((t, i) => (
-
- #{i + 1} {' '}
- ${t.amount}: {ACCOUNT_LABELS[t.from]} → {ACCOUNT_LABELS[t.to]}
-
- ))}
-
-
-
-
-
- onSwitchTab('explore')}>
- Stuck? See the solution →
-
-
-
- );
-}
-
-// ─── Explore Tab ────────────────────────────────────────────────────────────
-
-function ExploreTab() {
- const [initialBalances, setInitialBalances] = useState<[number, number, number]>([5, 8, 11]);
- const [state, setState] = useState({ balances: [5, 8, 11], history: [] });
- const [done, setDone] = useState(false);
- const [showBinary, setShowBinary] = useState(false);
- const [showHint, setShowHint] = useState(false);
- const [colorText, setColorText] = useState(true);
-
- const setInitial = useCallback((vals: [number, number, number]) => {
- setInitialBalances(vals);
- setState({ balances: vals, history: [] });
- setDone(false);
- setShowHint(false);
- }, []);
-
- // T18: Explore only stops when an account hits 0, not on equality
- const doTransfer = useCallback(
- (transfer: Transfer) => {
- if (done) return;
- const newBalances = applyTransfer(state.balances, transfer);
- const newHistory = [...state.history, transfer];
- setState({ balances: newBalances, history: newHistory });
- if (hasWon(newBalances) !== null) {
- setDone(true);
- confetti({ particleCount: 150, spread: 80, origin: { y: 0.6 } });
- }
- },
- [state, done]
- );
-
- const undo = useCallback(() => {
- if (state.history.length === 0) return;
- const newHistory = state.history.slice(0, -1);
- let balances: [number, number, number] = [...initialBalances];
- for (const t of newHistory) balances = applyTransfer(balances, t);
- setState({ balances, history: newHistory });
- setDone(hasWon(balances) !== null);
- }, [state, initialBalances]);
-
- const reset = useCallback(() => {
- setState({ balances: [...initialBalances], history: [] });
- setDone(false);
- }, [initialBalances]);
-
- const legalTransfers = useMemo(() => (done ? [] : getLegalTransfers(state.balances)), [state.balances, done]);
-
- const sorted = useMemo(() => {
- const indices = [0, 1, 2].sort((a, b) => state.balances[a] - state.balances[b]);
- return {
- L: state.balances[indices[0]], M: state.balances[indices[1]], N: state.balances[indices[2]],
- labels: [ACCOUNT_LABELS[indices[0]], ACCOUNT_LABELS[indices[1]], ACCOUNT_LABELS[indices[2]]] as [string, string, string],
- };
- }, [state.balances]);
-
- const qValue = sorted.L > 0 ? Math.floor(sorted.M / sorted.L) : undefined;
- const alreadyZero = initialBalances.some((b) => b === 0);
-
- return (
-
-
-
-
- {alreadyZero &&
One account is already at $0 — nothing to do!
}
-
-
-
- {!alreadyZero && !done && (
-
-
-
-
- Sorted:
-
- ({sorted.labels[0]})={sorted.L},{' '}
- ({sorted.labels[1]})={sorted.M},{' '}
- ({sorted.labels[2]})={sorted.N}
-
-
- {qValue !== undefined && (
-
-
- {showBinary && bin: {toBin(qValue)} }
-
- )}
-
-
- setShowBinary(!showBinary)}>
- {showBinary ? 'Hide' : 'Show'} Binary View
-
- setShowHint(!showHint)}>
- {showHint ? 'Hide Hint' : 'Hint'}
-
-
- {showHint && (
-
- {' '}
- written in binary tells you exactly which transfers to make.
- Each bit, from most significant to least, says: if the bit is 1,
- transfer from to ; if 0, transfer
- from to . After processing all bits,
- the smallest value strictly decreases, and you repeat.
-
- )}
-
-
- )}
-
- {done &&
}
-
-
-
-
Available Transfers
- {legalTransfers.length === 0 && !done && !alreadyZero && (
-
No legal transfers available.
- )}
-
- {legalTransfers.map((t, i) => (
-
- ))}
-
-
- Undo
- Reset
-
-
-
-
- Transfer Log ({state.history.length} move{state.history.length !== 1 ? 's' : ''})
-
-
- {state.history.length === 0 &&
No transfers yet.
}
- {state.history.map((t, i) => (
-
- #{i + 1} {' '}
- ${t.amount}: {ACCOUNT_LABELS[t.from]} → {ACCOUNT_LABELS[t.to]}
-
- ))}
-
-
-
-
- );
-}
-
-// ─── Solution Tab ───────────────────────────────────────────────────────────
-
-function SolutionTab() {
- const [initialBalances, setInitialBalances] = useState<[number, number, number]>([5, 8, 11]);
- const [steps, setSteps] = useState([]);
- const [currentStep, setCurrentStep] = useState(0);
- const [computed, setComputed] = useState(false);
- const [colorText, setColorText] = useState(true);
-
- const setInitial = useCallback((vals: [number, number, number]) => {
- setInitialBalances(vals);
- setSteps([]);
- setCurrentStep(0);
- setComputed(false);
- }, []);
-
- const compute = useCallback(() => {
- const result = computeSolution(initialBalances);
- setSteps(result);
- setCurrentStep(0);
- setComputed(true);
- }, [initialBalances]);
-
- const stepForward = useCallback(() => {
- if (currentStep < steps.length - 1) setCurrentStep((s) => s + 1);
- }, [currentStep, steps.length]);
-
- const runToCompletion = useCallback(() => setCurrentStep(steps.length - 1), [steps.length]);
-
- const currentStepData = steps[currentStep] ?? null;
- const alreadyZero = initialBalances.some((b) => b === 0);
-
- // T20: Find the header step for the current iteration (has correct q, sorted, etc.)
- const currentIterationHeader = useMemo(() => {
- if (!currentStepData?.iteration) return null;
- for (let i = currentStep; i >= 0; i--) {
- if (steps[i].iteration === currentStepData.iteration && !steps[i].transfer) return steps[i];
- }
- return null;
- }, [steps, currentStep, currentStepData]);
-
- // T21: Track evolving min across iterations
- const minHistory = useMemo(() => {
- const mins: { iteration: number; min: number }[] = [];
- const seen = new Set();
- for (let i = 0; i <= currentStep && i < steps.length; i++) {
- const s = steps[i];
- if (s.iteration && !seen.has(s.iteration)) {
- seen.add(s.iteration);
- mins.push({ iteration: s.iteration, min: s.sorted[0] });
- }
- }
- return mins;
- }, [steps, currentStep]);
-
- const iterationsUpToCurrent = useMemo(() => {
- const iters: SolutionStep[] = [];
- const seen = new Set();
- for (let i = 0; i <= currentStep && i < steps.length; i++) {
- const s = steps[i];
- if (s.iteration && !seen.has(s.iteration)) { seen.add(s.iteration); iters.push(s); }
- }
- return iters;
- }, [steps, currentStep]);
-
- const transferCount = useMemo(() => {
- let count = 0;
- for (let i = 0; i <= currentStep && i < steps.length; i++) { if (steps[i].transfer) count++; }
- return count;
- }, [steps, currentStep]);
-
- // T30: All transfer steps up to current step for the modal
- const allTransfersUpToCurrent = useMemo(() => {
- const transfers: { step: SolutionStep; index: number }[] = [];
- let count = 0;
- for (let i = 0; i <= currentStep && i < steps.length; i++) {
- if (steps[i].transfer) {
- count++;
- transfers.push({ step: steps[i], index: count });
- }
- }
- return transfers;
- }, [steps, currentStep]);
-
- const isFinished = computed && currentStep === steps.length - 1;
- const finalWon = isFinished && currentStepData ? hasWon(currentStepData.balances) : null;
-
- useEffect(() => {
- if (finalWon !== null) confetti({ particleCount: 100, spread: 70, origin: { y: 0.6 } });
- }, [finalWon]);
-
- return (
-
-
-
-
- {alreadyZero &&
One account is already at $0 — trivially done.
}
-
- {!computed && !alreadyZero && (
-
Compute Solution
- )}
-
- {computed && currentStepData && (() => {
- // T15: Show the *next* step's transfer as a preview of what will happen
- const nextStep = currentStep < steps.length - 1 ? steps[currentStep + 1] : null;
- const nextTransfer = nextStep?.transfer;
-
- return (
- <>
-
-
- {nextTransfer && (
-
-
-
- Next: Transfer ${nextTransfer.amount} from{' '}
- {nextTransfer.bit === 1 ? 'MID' : 'MAX'} ({nextTransfer.fromAccount}) →{' '}
- MIN ({nextTransfer.toAccount})
-
-
- Bit a{nextTransfer.bitIndex} = {nextTransfer.bit}{' '}
- —{' '}
- {nextTransfer.bit === 1
- ? <>transfer from MID to MIN>
- : <>transfer from MAX to MIN>}
- {' '}(iteration {nextStep?.iteration})
-
-
-
- )}
-
- {/* T21: Min tracker */}
- {minHistory.length > 0 && (
-
-
Min across iterations:
-
- {minHistory.map((m, i) => (
-
- {i > 0 && → }
-
- {m.min}
-
-
- ))}
-
-
- )}
-
-
- {/* T20: Use iteration header for correct q/sorted values */}
- {currentIterationHeader && currentIterationHeader.q !== undefined && currentIterationHeader.iterationLabels && (() => {
- const nextStep = currentStep < steps.length - 1 ? steps[currentStep + 1] : null;
- const iterationDone = !nextStep || !nextStep.transfer || nextStep.iteration !== currentIterationHeader.iteration;
- return (
-
-
- {iterationDone
- ? `Iteration ${currentIterationHeader.iteration} complete! Here's a summary:`
- : `Iteration ${currentIterationHeader.iteration}`}
-
-
-
- At start:
-
- ({currentIterationHeader.iterationLabels[0]})={currentIterationHeader.sorted[0]},{' '}
- ({currentIterationHeader.iterationLabels[1]})={currentIterationHeader.sorted[1]},{' '}
- ({currentIterationHeader.iterationLabels[2]})={currentIterationHeader.sorted[2]}
-
-
- {iterationDone ? (
- /* T28: When iteration is complete, just show start and end */
-
- At end:
-
- {ACCOUNT_LABELS.map((label, i) => (
-
- {i > 0 && ', '}
- {label}={currentStepData.balances[i]}
-
- ))}
-
-
- ) : (
- /* When iteration is in progress, show q decomposition and binary */
- <>
-
-
-
- q in binary:
-
- {[...(currentIterationHeader.qBits || [])].reverse().map((bit, i) => {
- const qBits = currentIterationHeader.qBits || [];
- const lsbIndex = qBits.length - 1 - i;
- const ns = currentStep < steps.length - 1 ? steps[currentStep + 1] : null;
- const isActive = ns?.transfer?.bitIndex === lsbIndex && ns?.iteration === currentIterationHeader.iteration;
- return (
-
- {bit}
-
- );
- })}
-
-
-
- 1 = MID → MIN,{' '}
- 0 = MAX → MIN
-
- >
- )}
-
-
- );
- })()}
-
-
-
- Iteration History
- {allTransfersUpToCurrent.length > 0 && (
-
-
-
- Show Transfers
-
-
-
-
- All Transfers ({allTransfersUpToCurrent.length})
-
-
- {allTransfersUpToCurrent.map(({ step: s, index }) => (
-
- #{index}
-
- ${s.transfer!.amount}: {s.transfer!.from} → {s.transfer!.to}
-
-
- iter {s.iteration}
-
-
- ))}
-
-
-
- )}
-
-
-
- {iterationsUpToCurrent.length === 0 && No iterations yet.
}
- {iterationsUpToCurrent.map((s) => (
-
- #{s.iteration}
-
- MIN({s.iterationLabels?.[0]})={s.sorted[0]}, MID({s.iterationLabels?.[1]})={s.sorted[1]}, MAX({s.iterationLabels?.[2]})={s.sorted[2]}
-
- {s.q !== undefined && }
-
- ))}
- {iterationsUpToCurrent.length > 1 && (
- The minimum value strictly decreases each iteration.
- )}
-
-
-
-
- {finalWon !== null && (
-
- Account {ACCOUNT_LABELS[finalWon]} emptied in {transferCount} total transfer{transferCount !== 1 ? 's' : ''}!
-
- )}
-
- {/* T12: Step slider */}
- {steps.length > 1 && (
-
-
setCurrentStep(parseInt(e.target.value, 10))}
- className="w-full accent-purple-500 cursor-pointer"
- />
-
- Step {currentStep + 1} of {steps.length}
-
-
- )}
-
- setCurrentStep(0)} disabled={currentStep === 0}>Restart
- setCurrentStep((s) => Math.max(0, s - 1))} disabled={currentStep === 0}>Previous
- = steps.length - 1}>Next
- = steps.length - 1}>Run to Completion
-
- >
- );
- })()}
-
- );
-}
-
-// ─── Main Component ─────────────────────────────────────────────────────────
-
-const ThreeBankAccounts: React.FC = () => {
- const [activeTab, setActiveTab] = useState('play');
- return (
-
-
-
-
- Three Bank Accounts
-
-
- From the 1994 IMO Shortlist.
-
-
-
-
- Peter has three bank accounts, each containing a positive integer number of dollars.
- He can transfer money between accounts, but a transfer must{' '}
- exactly double {' '}
- the recipient's balance. Can he always empty one account?
-
-
-
-
-
-
-
- Play
- Explore
- Solution
-
-
-
-
-
-
- );
-};
-
-export default ThreeBankAccounts;
diff --git a/src/components/primary-svg-icon.tsx b/src/components/primary-svg-icon.tsx
deleted file mode 100644
index f4edcd4..0000000
--- a/src/components/primary-svg-icon.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { cn } from '@/lib/utils';
-
-type PrimarySvgIconProps = {
- /** Public path, e.g. `/images/services/noun-star-7745963.svg` */
- src: string;
- className?: string;
-};
-
-/**
- * Renders a public SVG as a silhouette filled with theme `primary` (`--primary`)
- * using CSS mask, so color follows light/dark tokens.
- */
-export function PrimarySvgIcon({ src, className }: PrimarySvgIconProps) {
- return (
-
- );
-}
diff --git a/src/components/project-gallery.tsx b/src/components/project-gallery.tsx
deleted file mode 100644
index 7dca207..0000000
--- a/src/components/project-gallery.tsx
+++ /dev/null
@@ -1,162 +0,0 @@
-'use client';
-
-import { ChevronLeft, ChevronRight } from 'lucide-react';
-import * as React from 'react';
-
-import { cn } from '@/lib/utils';
-
-function dedupeOrdered(urls: string[]) {
- const seen = new Set();
- return urls.filter((u) => {
- if (!u || seen.has(u)) return false;
- seen.add(u);
- return true;
- });
-}
-
-export function ProjectGallery({
- gallery,
- initial,
- className,
-}: {
- gallery: string[];
- initial?: string;
- className?: string;
-}) {
- const images = React.useMemo(
- () => dedupeOrdered(gallery.filter(Boolean)),
- [gallery],
- );
-
- const [active, setActive] = React.useState(
- initial ?? images[0] ?? '',
- );
-
- React.useEffect(() => {
- const next = initial ?? images[0] ?? '';
- setActive(next);
- }, [initial, images]);
-
- const railRef = React.useRef(null);
-
- const index = Math.max(0, images.indexOf(active));
-
- function setByIndex(nextIndex: number) {
- if (!images.length) return;
- const i = ((nextIndex % images.length) + images.length) % images.length;
- setActive(images[i]);
- }
-
- function prev() {
- setByIndex(index - 1);
- }
-
- function next() {
- setByIndex(index + 1);
- }
-
- React.useEffect(() => {
- const el = railRef.current;
- if (!el) return;
-
- const btn = el.querySelector(
- `button[data-thumb="${CSS.escape(active)}"]`,
- );
- if (!btn) return;
-
- const left = btn.offsetLeft;
- const right = left + btn.offsetWidth;
- const viewLeft = el.scrollLeft;
- const viewRight = viewLeft + el.clientWidth;
-
- if (left < viewLeft) el.scrollTo({ left, behavior: 'smooth' });
- else if (right > viewRight)
- el.scrollTo({ left: right - el.clientWidth, behavior: 'smooth' });
- }, [active]);
-
- if (!images.length) return null;
-
- return (
-
-
-
-
-
-
- {images.length > 1 ? (
- <>
-
-
-
-
-
-
-
- >
- ) : null}
-
-
- {images.length > 1 ? (
-
-
- {images.map((src) => {
- const selected = src === active;
- return (
-
setActive(src)}
- aria-pressed={selected}
- className={cn(
- 'bg-muted border-border relative h-[74px] w-[140px] shrink-0 overflow-hidden rounded-xl border',
- 'sm:h-[84px] sm:w-[160px]',
- 'transition-colors',
- selected && 'border-hatch-cta',
- )}
- >
-
-
- );
- })}
-
-
- ) : null}
-
- );
-}
diff --git a/src/components/sections/banner.tsx b/src/components/sections/banner.tsx
deleted file mode 100644
index adde374..0000000
--- a/src/components/sections/banner.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-'use client';
-
-import { X } from 'lucide-react';
-import { useEffect, useState } from 'react';
-
-import { Button } from '@/components/ui/button';
-import { cn } from '@/lib/utils';
-
-const Banner = ({ url = 'https://shadcnblocks.com' }: { url?: string }) => {
- const [isVisible, setIsVisible] = useState(true);
- const [isClient, setIsClient] = useState(false);
-
- // Check localStorage to see if banner was previously dismissed
- useEffect(() => {
- queueMicrotask(() => {
- setIsClient(true);
- const bannerDismissed = localStorage.getItem('banner-dismissed');
- if (bannerDismissed === 'true') {
- setIsVisible(false);
- }
- });
- }, []);
-
- const handleDismiss = () => {
- setIsVisible(false);
- localStorage.setItem('banner-dismissed', 'true');
- };
-
- // Don't render anything until client-side hydration is complete
- if (!isClient || !isVisible) {
- return null;
- }
-
- return (
-
- );
-};
-
-export default Banner;
diff --git a/src/components/sections/footer.tsx b/src/components/sections/footer.tsx
deleted file mode 100644
index a9c9688..0000000
--- a/src/components/sections/footer.tsx
+++ /dev/null
@@ -1,111 +0,0 @@
-import { HatchRadialSvgPattern } from '@/components/hatch-radial-svg-pattern';
-
-type FooterProps = {
- name?: string;
- socials?: {
- href: string;
- label: string;
- iconSrc: string;
- }[];
-};
-
-export function Footer({
- name = 'Interactives',
- socials = [],
-}: FooterProps) {
- return (
-
- );
-}
diff --git a/src/components/sections/hatch-about-me.tsx b/src/components/sections/hatch-about-me.tsx
deleted file mode 100644
index 8619168..0000000
--- a/src/components/sections/hatch-about-me.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-'use client';
-
-import * as React from 'react';
-
-import { cn } from '@/lib/utils';
-
-type HatchAboutMeProps = {
- eyebrow?: string;
- title?: string;
- paragraphs?: string[];
- imageSrc?: string;
- imageAlt?: string;
-};
-
-export default function HatchAboutMe({
- eyebrow = 'ABOUT ME',
- title = 'I create digital products\nthat solve real problems\nfor real people.',
- paragraphs = [
- `My journey started with a passion for clean design and thoughtful user experiences. Over the past 8 years, I've worked with startups, agencies, and Fortune 500 companies to bring their visions to life.`,
- `I believe great design is invisible—it just works. It's about understanding your users deeply and creating experiences that feel natural and delightful.`,
- ],
- imageSrc = '/images/about/portrait.jpg',
- imageAlt = 'Portrait',
-}: HatchAboutMeProps) {
- return (
-
-
-
-
-
- {eyebrow}
-
-
-
- {title}
-
-
-
- {paragraphs.map((p, i) => (
-
- {p}
-
- ))}
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-contact.tsx b/src/components/sections/hatch-contact.tsx
deleted file mode 100644
index 4d56e91..0000000
--- a/src/components/sections/hatch-contact.tsx
+++ /dev/null
@@ -1,251 +0,0 @@
-'use client';
-
-import { Mail, MapPin, Phone } from 'lucide-react';
-import * as React from 'react';
-
-import { Button } from '@/components/ui/button';
-import { Input } from '@/components/ui/input';
-import { Textarea } from '@/components/ui/textarea';
-
-type HatchContactProps = {
- eyebrow?: string;
- title?: string;
- description?: string;
-
- phoneLabel?: string;
- phoneHref?: string;
-
- emailLabel?: string;
- emailHref?: string;
-
- /** Street / city lines; use \n for a second line */
- address?: string;
- /** If set, address is wrapped in a link (e.g. Google Maps). */
- addressHref?: string;
-};
-
-const AVATARS = [
- '/images/avatars/avatar-1.webp',
- '/images/avatars/avatar-2.webp',
- '/images/avatars/avatar-3.webp',
- '/images/avatars/avatar-4.webp',
-];
-
-const LOGOS = [
- { src: '/images/logos/Frame.webp', alt: 'Flickr' },
- { src: '/images/logos/Frame-1.webp', alt: 'Intel' },
- { src: '/images/logos/Frame-2.webp', alt: 'Gravatar' },
- { src: '/images/logos/Frame-3.webp', alt: 'Appcircle' },
- { src: '/images/logos/Frame-4.webp', alt: 'Brandfolder' },
- { src: '/images/logos/Vector.webp', alt: 'Other' },
-];
-
-function FieldLabel({
- children,
- required,
-}: {
- children: React.ReactNode;
- required?: boolean;
-}) {
- return (
-
- {children}
- {required ? * : null}
-
- );
-}
-
-export default function HatchContact({
- eyebrow = 'CONTACT US',
- title = "Let's work together",
- description = 'Ready to start your next project? Get in touch and let’s create something great.',
-
- phoneLabel = '+1 (555) 123-4567',
- phoneHref = 'tel:+15551234567',
-
- emailLabel = 'hello@example.com',
- emailHref = 'mailto:hello@example.com',
-
- address = '123 Design Street\nSan Francisco, CA 94102',
- addressHref,
-}: HatchContactProps) {
- const [form, setForm] = React.useState({
- name: '',
- email: '',
- company: '',
- details: '',
- });
-
- function update(key: K, value: string) {
- setForm((prev) => ({ ...prev, [key]: value }));
- }
-
- function onSubmit(e: React.FormEvent) {
- e.preventDefault();
- }
-
- return (
-
-
-
-
- {eyebrow}
-
-
-
- {title}
-
-
-
- {description}
-
-
-
-
-
- {AVATARS.map((src, i) => (
-
-
-
- ))}
-
-
The work that’s trusted by teams and founders
-
-
-
-
- {LOGOS.map((l) => (
-
-
-
- ))}
-
-
-
-
-
-
-
-
-
-
-
- Send us a message
-
-
-
-
-
- Full Name
- update('name', e.target.value)}
- placeholder="John Doe"
- className="dark:bg-card h-10 rounded-[12px] bg-white"
- />
-
-
-
- Email
- update('email', e.target.value)}
- placeholder="example@email.com"
- type="email"
- className="dark:bg-card h-10 rounded-[12px] bg-white"
- />
-
-
-
- Company (optional)
- update('company', e.target.value)}
- placeholder="Acme"
- className="dark:bg-card h-10 rounded-[12px] bg-white"
- />
-
-
-
- Project Details
- update('details', e.target.value)}
- placeholder="Tell us about your project..."
- className="dark:bg-card min-h-[120px] resize-none rounded-[12px] bg-white"
- />
-
-
-
-
- Send message
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-cta.tsx b/src/components/sections/hatch-cta.tsx
deleted file mode 100644
index 5955086..0000000
--- a/src/components/sections/hatch-cta.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-'use client';
-
-import { ArrowRight } from 'lucide-react';
-
-import { HatchSvgGridPattern } from '@/components/hatch-svg-grid-pattern';
-import { Button } from '@/components/ui/button';
-import { cn } from '@/lib/utils';
-
-type HatchCtaProps = {
- title?: string;
- /** Hide headline; button only (e.g. minimal homepage). */
- hideTitle?: boolean;
- ctaHref?: string;
- ctaLabel?: string;
-};
-
-export default function HatchCta({
- title = 'Design That Works\nBeautifully.',
- hideTitle = false,
- ctaHref = '/contact',
- ctaLabel = 'Get a quote',
-}: HatchCtaProps) {
- return (
-
-
-
-
- {hideTitle ? null : (
-
- {title.split('\n').map((line, i) => (
-
- {line}
-
- ))}
-
- )}
-
-
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-experience-grid.tsx b/src/components/sections/hatch-experience-grid.tsx
deleted file mode 100644
index 4c8a570..0000000
--- a/src/components/sections/hatch-experience-grid.tsx
+++ /dev/null
@@ -1,93 +0,0 @@
-'use client';
-
-import * as React from 'react';
-
-import { cn } from '@/lib/utils';
-
-import { HatchSectionHeader } from './hatch-section-header';
-
-type ExperienceItem = {
- range: string;
- title: string;
- description: string;
-};
-
-type HatchExperienceGridProps = {
- heading?: string;
- items?: ExperienceItem[];
-};
-
-const DEFAULT_ITEMS: ExperienceItem[] = [
- {
- range: '2019 – 2021',
- title: 'Senior Product Designer',
- description:
- 'Led design for 3 product lines. Built design systems used by 50+ engineers. Increased conversion by 34%.',
- },
- {
- range: '2017 – 2019',
- title: 'Designer + Lead',
- description:
- 'Designed entire product from concept to launch. Built brand identity and marketing site. Grew from 5 to 50 employees.',
- },
- {
- range: '2015 – Present',
- title: 'Freelance Designer',
- description:
- 'Worked with 50+ clients across SaaS, e-commerce, and startups. Built trusted relationships and repeat business.',
- },
-];
-
-function ExperienceCard({
- item,
- spanFull = false,
-}: {
- item: ExperienceItem;
- spanFull?: boolean;
-}) {
- return (
-
-
- {item.range}
-
-
-
- {item.title}
-
-
-
- {item.description}
-
-
- );
-}
-
-export default function HatchExperienceGrid({
- heading = 'Experience',
- items = DEFAULT_ITEMS,
-}: HatchExperienceGridProps) {
- return (
-
-
-
-
-
- {items.map((item, i) => (
-
- ))}
-
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-hero.tsx b/src/components/sections/hatch-hero.tsx
deleted file mode 100644
index eca7d34..0000000
--- a/src/components/sections/hatch-hero.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-'use client';
-
-import { ArrowRight } from 'lucide-react';
-import * as React from 'react';
-
-import { Avatar } from '@/components/ui/avatar';
-import { Button } from '@/components/ui/button';
-
-type HatchHeroProps = {
- title?: React.ReactNode;
- subtitle?: React.ReactNode;
- primaryCtaHref?: string;
- primaryCtaLabel?: string;
- secondaryCtaHref?: string;
- secondaryCtaLabel?: string;
-};
-
-const AVATARS = [
- '/images/avatars/avatar-1.webp',
- '/images/avatars/avatar-2.webp',
- '/images/avatars/avatar-3.webp',
- '/images/avatars/avatar-4.webp',
-];
-
-export default function HatchHero({
- primaryCtaHref = '/contact',
- primaryCtaLabel = 'Get a quote',
- secondaryCtaHref = '/contact',
- secondaryCtaLabel = 'Book a call',
-}: HatchHeroProps) {
- return (
-
-
-
-
- I design digital products that make
- business feel simple.
-
-
- Freelance{' '}
-
- Product Designer
- {' '}
- helping startups and agencies craft clean,{' '}
-
- Conversion-Focused Interfaces.
-
-
-
-
-
-
- {AVATARS.map((src, i) => (
-
-
-
- ))}
-
-
- The work that’s trusted by teams and founders
-
-
-
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-my-story.tsx b/src/components/sections/hatch-my-story.tsx
deleted file mode 100644
index b6e923a..0000000
--- a/src/components/sections/hatch-my-story.tsx
+++ /dev/null
@@ -1,102 +0,0 @@
-'use client';
-
-import {
- Carousel,
- CarouselContent,
- CarouselItem,
-} from '@/components/ui/carousel';
-import { cn } from '@/lib/utils';
-
-import { HatchSectionHeader } from './hatch-section-header';
-
-type StoryItem = {
- range: string;
- title: string;
- description: string;
-};
-
-type HatchMyStoryProps = {
- heading?: string;
- items?: StoryItem[];
-};
-
-const DEFAULT_ITEMS: StoryItem[] = [
- {
- range: '2015 - 2016',
- title: 'Started Freelancing',
- description:
- 'Began taking on small web design projects while learning the fundamentals. Quickly realized I loved solving complex problems through design.',
- },
- {
- range: '2016 - 2017',
- title: 'Joined Design Team At\nEarly-Stage Startup',
- description:
- 'Wore many hats—product design, brand identity, marketing site. Grew the company from 5 to 50 people and shipped features millions use today.',
- },
- {
- range: '2017 - 2019',
- title: 'Led Design At Series B\nSaaS Company',
- description:
- 'Built the design systems that scaled to 500K+ users. Mentored junior designers and established processes that stuck.',
- },
- {
- range: '2019 - 2021',
- title: 'Shipped Products\nFor Growing Teams',
- description:
- 'Partnered with founders to launch new features, improve onboarding, and build foundations for scale.',
- },
-];
-
-function StoryCard({ item }: { item: StoryItem }) {
- return (
-
-
- {item.range}
-
-
- {item.title}
-
-
- {item.description}
-
-
- );
-}
-
-export default function HatchMyStory({
- heading = 'My Story',
- items = DEFAULT_ITEMS,
-}: HatchMyStoryProps) {
- const list = Array.isArray(items) ? items : [];
-
- if (list.length === 0) return null;
-
- return (
-
-
-
-
-
-
- {list.map((item, idx) => (
-
-
-
- ))}
-
-
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-pricing.tsx b/src/components/sections/hatch-pricing.tsx
deleted file mode 100644
index 114db88..0000000
--- a/src/components/sections/hatch-pricing.tsx
+++ /dev/null
@@ -1,209 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import { ArrowRight, Check } from 'lucide-react';
-import * as React from 'react';
-
-import { Badge } from '@/components/ui/badge';
-import { Button } from '@/components/ui/button';
-import { cn } from '@/lib/utils';
-
-import { HatchSectionHeader } from './hatch-section-header';
-
-type PricingCard = {
- iconSrc: string;
- iconAlt: string;
- badge?: string;
- title: string;
- lead: string;
- subLead: string;
- price: string;
- priceSuffix: string;
- priceMeta: string;
- features: string[];
- ctaLabel: string;
- ctaHref: string;
- featured?: boolean;
-};
-
-const CARDS: PricingCard[] = [
- {
- iconSrc: '/icons/pricing/project.svg',
- iconAlt: 'Project icon',
- badge: 'Most Popular',
- title: 'One-Time Project',
- lead: 'Perfect For Startups And Small Businesses That Need A High-Impact Site Or Design Sprint.',
- subLead: 'Ideal For Portfolios, Product Launches, Or SaaS Landing Pages.',
- price: '$1,500',
- priceSuffix: '',
- priceMeta: 'Base Fee',
- features: [
- 'Discovery Call And Project Plan',
- 'Custom Design (Up To 5 Pages)',
- 'Figma Or Framer Delivery',
- '1 Round Of Revisions',
- 'Handoff Documentation',
- ],
- ctaLabel: 'Get a quote',
- ctaHref: '/contact',
- featured: false,
- },
- {
- iconSrc: '/icons/pricing/subscription.svg',
- iconAlt: 'Subscription icon',
- title: 'Design Subscription',
- lead: 'Ongoing Design Partnership For Teams That Need Consistent Creative Support.',
- subLead:
- 'Best For Teams That Want On-Demand Design Without Hiring Full-Time.',
- price: '$2,000',
- priceSuffix: '/ Month',
- priceMeta: '',
- features: [
- 'Unlimited Design Requests',
- '1 Active Task At A Time',
- 'Fast Turnaround (2–3 Days Per Task)',
- 'Cancel Anytime',
- 'Priority Communication Via Slack Or Notion',
- ],
- ctaLabel: 'Subscribe now',
- ctaHref: '/subscribe',
- featured: true,
- },
-];
-
-function PricingFeature({ children }: { children: React.ReactNode }) {
- return (
-
-
-
-
- {children}
-
- );
-}
-
-const cardEase: [number, number, number, number] = [0.22, 0.61, 0.36, 1];
-
-function PricingCardView({
- card,
- index = 0,
-}: {
- card: PricingCard;
- index?: number;
-}) {
- const isFeatured = !!card.featured;
-
- return (
-
-
-
-
-
- {card.badge ? (
-
- {card.badge}
-
- ) : null}
-
-
- {card.title}
-
-
- {card.lead}
-
-
-
- {card.subLead}
-
-
-
-
-
- {card.price}
-
- {card.priceSuffix ? (
-
- {card.priceSuffix}
-
- ) : null}
-
-
- {card.priceMeta ? (
-
- {card.priceMeta}
-
- ) : null}
-
-
-
- {card.features.map((f) => (
- {f}
- ))}
-
-
-
-
- );
-}
-
-type HatchPricingProps = {
- /** Hide section title + description (e.g. minimal homepage). */
- hideHeader?: boolean;
-};
-
-export default function HatchPricing({ hideHeader = false }: HatchPricingProps) {
- return (
-
-
- {hideHeader ? null : (
-
- )}
-
- {CARDS.map((c, i) => (
-
- ))}
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-section-header.tsx b/src/components/sections/hatch-section-header.tsx
deleted file mode 100644
index 3083e1a..0000000
--- a/src/components/sections/hatch-section-header.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-'use client';
-
-import * as React from 'react';
-
-import { cn } from '@/lib/utils';
-
-type HatchSectionHeaderProps = {
- title: React.ReactNode;
- description?: React.ReactNode;
- showLogo?: boolean;
- logoSrc?: string;
- logoAlt?: string;
- logoWidth?: number;
- logoHeight?: number;
- logoClassName?: string;
- className?: string;
- innerClassName?: string;
- titleClassName?: string;
- descriptionClassName?: string;
- aside?: React.ReactNode;
-};
-
-export function HatchSectionHeader({
- title,
- description,
-
- showLogo = false,
- logoSrc = '/images/layout/logo.svg',
- logoAlt = 'Hatch',
- logoWidth = 28,
- logoHeight = 28,
- logoClassName,
-
- className,
- innerClassName,
- titleClassName,
- descriptionClassName,
-
- aside,
-}: HatchSectionHeaderProps) {
- return (
-
- {showLogo ? (
-
-
-
- ) : null}
-
-
-
- {title}
-
-
- {aside ? (
-
{aside}
- ) : description ? (
-
- {description}
-
- ) : null}
-
-
- {description ? (
-
- {description}
-
- ) : null}
-
- );
-}
diff --git a/src/components/sections/hatch-selected-projects.tsx b/src/components/sections/hatch-selected-projects.tsx
deleted file mode 100644
index d8b10af..0000000
--- a/src/components/sections/hatch-selected-projects.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import { ArrowRight } from 'lucide-react';
-
-import { Button } from '@/components/ui/button';
-import type { Project } from '@/lib/project-work';
-import { cn } from '@/lib/utils';
-
-import { HatchSectionHeader } from './hatch-section-header';
-
-const DEFAULT_TITLE = 'Selected Projects';
-const DEFAULT_DESCRIPTION =
- 'A few recent collaborations that show how good design drives clarity and results.';
-
-type Props = {
- projects: Project[];
- limit?: number;
- /** Hide section title + description (e.g. minimal homepage). */
- hideHeader?: boolean;
- /** Overrides the default section title when the header is shown. */
- title?: string;
- /** Overrides the default section description when the header is shown. */
- description?: string;
-};
-
-export default function HatchSelectedProjects({
- projects,
- limit,
- hideHeader = false,
- title,
- description,
-}: Props) {
- const featured = projects.filter((p) => p.featured);
- const items = featured.slice(0, limit ?? 6);
-
- return (
-
-
- {hideHeader ? null : (
-
- )}
-
-
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-service-detail-hero.tsx b/src/components/sections/hatch-service-detail-hero.tsx
deleted file mode 100644
index cb2d7ba..0000000
--- a/src/components/sections/hatch-service-detail-hero.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-'use client';
-
-import { ArrowLeft, ArrowRight } from 'lucide-react';
-
-import { Button } from '@/components/ui/button';
-
-type ServiceDetailProps = {
- backHref?: string;
- title?: string;
- description?: string;
-
- price?: string;
- priceMeta?: string;
-
- primaryCtaLabel?: string;
- primaryCtaHref?: string;
-
- secondaryCtaLabel?: string;
- secondaryCtaHref?: string;
-};
-
-export default function HatchServiceDetail({
- backHref = '/services',
- title = 'Web Design & UX',
- description = `I design websites with a focus on user behavior, conversion goals, and scalability—combining strategy, research, and design to craft seamless experiences.`,
- price = '$1,500',
- priceMeta = 'Base Fee',
- primaryCtaLabel = 'Get a quote',
- primaryCtaHref = '/contact',
- secondaryCtaLabel = 'Other services',
- secondaryCtaHref = '/services',
-}: ServiceDetailProps) {
- return (
-
-
-
-
-
- Back
-
-
-
-
- {title}
-
-
-
- {description}
-
-
-
- {price}
- {priceMeta ? (
- {priceMeta}
- ) : null}
-
-
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-services-hero.tsx b/src/components/sections/hatch-services-hero.tsx
deleted file mode 100644
index 4058c36..0000000
--- a/src/components/sections/hatch-services-hero.tsx
+++ /dev/null
@@ -1,157 +0,0 @@
-'use client';
-
-import { ArrowRight, Check } from 'lucide-react';
-
-import { PrimarySvgIcon } from '@/components/primary-svg-icon';
-import { Button } from '@/components/ui/button';
-import { cn } from '@/lib/utils';
-
-type Service = {
- slug: string;
- title: string;
- description: string;
- features: string[];
- iconSrc: string;
-};
-
-const SERVICES: Service[] = [
- {
- slug: 'web-design-ux',
- title: 'Web Design & UX',
- iconSrc: '/images/services/noun-half-circles-7745954.svg',
- description:
- 'Custom website design and UX strategy that drives conversions. From strategy to pixel-perfect handoff, I create digital experiences that feel effortless.',
- features: [
- 'Information Architecture',
- 'Wireframing & Prototyping',
- 'Responsive Design',
- 'Developer Handoff',
- ],
- },
- {
- slug: 'brand-design',
- title: 'Brand Design',
- iconSrc: '/images/services/noun-sparkle-7746005.svg',
- description:
- 'Complete visual identity systems that make your brand memorable. Logo design, color palettes, typography, and standards that scale.',
- features: [
- 'Logo Design',
- 'Brand Guidelines',
- 'Visual Systems',
- 'Marketing Collateral',
- ],
- },
- {
- slug: 'product-design',
- title: 'Product Design',
- iconSrc: '/images/services/noun-semicircles-8294628.svg',
- description:
- 'End-to-end product design from concept to launch. I work closely with your team to design intuitive interfaces users will love.',
- features: [
- 'Product Strategy',
- 'User Research',
- 'Interface Design',
- 'Interaction Design',
- ],
- },
- {
- slug: 'framer-development',
- title: 'Framer Development',
- iconSrc: '/images/services/noun-star-7745963.svg',
- description:
- 'Interactive websites and prototypes built fast without compromising quality. Hand-coded designs that are pixel-perfect and performant.',
- features: [
- 'Framer Development',
- 'Webflow Sites',
- 'Interactive Prototypes',
- 'Custom Animations',
- ],
- },
-];
-
-function ServiceCard({ service }: { service: Service }) {
- return (
-
-
-
- {service.title}
-
-
- {service.description}
-
-
- {service.features.map((f) => (
-
-
- {f}
-
- ))}
-
-
- );
-}
-
-export default function ServicesHero() {
- return (
-
-
-
-
- Design services for startups
-
- ready to scale.
-
-
- Each service is designed to solve specific problems. Whether you
- need a full rebrand, a new website, or a design system — I've
- got you covered.
-
-
-
-
- {SERVICES.map((s) => (
-
- ))}
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-values.tsx b/src/components/sections/hatch-values.tsx
deleted file mode 100644
index a284752..0000000
--- a/src/components/sections/hatch-values.tsx
+++ /dev/null
@@ -1,253 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import { ArrowRight } from 'lucide-react';
-import * as React from 'react';
-
-import { Button } from '@/components/ui/button';
-import { cn } from '@/lib/utils';
-
-import HatchPatternBackground from '../ui/hatch-pattern-background';
-
-
-type Value = {
- title: string;
- body: string;
-};
-
-const VALUES: Value[] = [
- {
- title: 'User-Centered',
- body: 'Every pixel serves the user. I start with research and empathy, not assumptions.',
- },
- {
- title: 'Clear & Simple',
- body: "I believe in removing friction. If it's hard to understand, it's not finished.",
- },
- {
- title: 'Collaborative',
- body: 'Great work happens in teams. I love working with developers, marketers, and founders.',
- },
- {
- title: 'Thoughtful Details',
- body: 'Polish matters. Micro-interactions, spacing, typography—the details create delight.',
- },
-];
-
-const EASE: [number, number, number, number] = [0.22, 0.61, 0.36, 1];
-
-function StepDots({
- active,
- onChange,
- className,
-}: {
- active: number;
- onChange: (idx: number) => void;
- className?: string;
-}) {
- return (
-
- {VALUES.map((_, i) => {
- const isActive = i === active;
- return (
- onChange(i)}
- aria-pressed={isActive}
- className={cn(
- 'flex size-9 items-center justify-center rounded-full border text-sm transition-colors',
- isActive
- ? 'border-[var(--hatch-cta)] bg-[var(--hatch-cta)] text-white'
- : 'bg-background text-muted-foreground hover:text-foreground',
- )}
- >
- {i + 1}
-
- );
- })}
-
- );
-}
-
-function DesktopCard({ title, body, active }: Value & { active: boolean }) {
- return (
-
-
- {title}
-
-
-
- {body}
-
-
- );
-}
-
-function useStepHeights(count: number) {
- const nodesRef = React.useRef<(HTMLDivElement | null)[]>([]);
- const [heights, setHeights] = React.useState(
- Array.from({ length: count }, () => 0),
- );
-
- React.useEffect(() => {
- if (typeof window === 'undefined') return;
-
- const ro = new ResizeObserver(() => {
- const next = nodesRef.current.map((n) => (n ? n.offsetHeight : 0));
- setHeights(next);
- });
-
- nodesRef.current.forEach((n) => {
- if (n) ro.observe(n);
- });
-
- const next = nodesRef.current.map((n) => (n ? n.offsetHeight : 0));
- setHeights(next);
-
- return () => ro.disconnect();
- }, [count]);
-
- const setNode = React.useCallback(
- (idx: number) => (node: HTMLDivElement | null) => {
- nodesRef.current[idx] = node;
- },
- [],
- );
-
- return { heights, setNode };
-}
-
-export default function HatchValues() {
- const [active, setActive] = React.useState(0);
-
- const GAP = 16;
- const FALLBACK_CARD_H = 168;
-
- const { heights, setNode } = useStepHeights(VALUES.length);
-
- const viewportH =
- (heights[0] || FALLBACK_CARD_H) +
- (heights[1] || FALLBACK_CARD_H) +
- (heights[2] || FALLBACK_CARD_H) +
- GAP * 2;
-
- const offsetY = -(
- heights
- .slice(0, active)
- .reduce((acc, h) => acc + (h || FALLBACK_CARD_H), 0) +
- active * GAP
- );
-
- return (
-
-
-
-
-
-
-
-
-
- My Values
-
-
-
- These principles guide every project and decision I make.
-
-
-
-
-
-
-
-
-
- {VALUES.map((v, i) => (
-
-
-
- ))}
-
-
-
-
-
-
- {VALUES.map((v, i) => {
- const open = i === active;
- return (
-
-
setActive(i)}
- className="w-full text-left"
- aria-expanded={open}
- >
-
- {v.title}
-
-
-
-
-
- );
- })}
-
-
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-what-i-can-do.tsx b/src/components/sections/hatch-what-i-can-do.tsx
deleted file mode 100644
index 46fab21..0000000
--- a/src/components/sections/hatch-what-i-can-do.tsx
+++ /dev/null
@@ -1,209 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import { ArrowUpRight, Plus } from 'lucide-react';
-import * as React from 'react';
-
-import { PrimarySvgIcon } from '@/components/primary-svg-icon';
-import { Button } from '@/components/ui/button';
-import { cn } from '@/lib/utils';
-
-import { HatchSectionHeader } from './hatch-section-header';
-
-type Service = {
- title: string;
- description?: string;
- category: string;
- /** Public SVG path for `PrimarySvgIcon` (filled with `bg-primary`) */
- iconSrc: string;
- slug: string;
-};
-
-type HatchWhatICanDoProps = {
- title?: string;
- description?: string;
- /** Hide section title + description (e.g. minimal homepage). */
- hideHeader?: boolean;
- /** Short one-line points; + icons align to the top of each row. */
- bullets?: string[];
- ctaLabel?: string;
- ctaHref?: string;
- services?: Service[];
-};
-
-const DEFAULT_BULLETS: string[] = [
- 'Strategy through launch in one thread.',
- 'Handoff-ready files and specs.',
- 'Async collaboration, clear milestones.',
- 'Systems and patterns that scale.',
- 'Outcome-focused — ship with confidence.',
-];
-
-const DEFAULT_SERVICES: Service[] = [
- {
- title: 'Brand Design',
- category: 'Brand',
- description: 'Clear visual identities that stand out and scale.',
- iconSrc: '/images/services/noun-sparkle-7746005.svg',
- slug: 'brand-design',
- },
- {
- title: 'Web Design & UX',
- category: 'UX & Web',
- description:
- 'Beautiful, conversion-focused websites that feel effortless to use.',
- iconSrc: '/images/services/noun-half-circles-7745954.svg',
- slug: 'web-design-ux',
- },
- {
- title: 'Product Design',
- category: 'Product',
- description:
- 'Scalable component libraries for consistent, efficient UI design.',
- iconSrc: '/images/services/noun-semicircles-8294628.svg',
- slug: 'product-design',
- },
- {
- title: 'Framer Development',
- category: 'Build',
- description: 'Interactive sites built fast without compromising quality.',
- iconSrc: '/images/services/noun-star-7745963.svg',
- slug: 'framer-development',
- },
-];
-
-const rowMotion = {
- initial: { opacity: 0, y: 14 },
- whileInView: { opacity: 1, y: 0 },
- viewport: { once: true, amount: 0.25 },
- transition: { duration: 0.5, ease: [0.22, 1, 0.36, 1] as const },
-};
-
-export default function HatchWhatICanDo({
- title = 'Our services',
- description = 'End-to-end design support for founders, teams, and agencies that care about detail.',
- hideHeader = false,
- bullets = DEFAULT_BULLETS,
- ctaLabel = 'Get started',
- ctaHref = '/contact',
- services = DEFAULT_SERVICES,
-}: HatchWhatICanDoProps) {
- const list = services.slice(0, 4);
-
- return (
-
-
- {hideHeader ? null : (
-
- )}
-
-
-
-
-
- {bullets.map((line, i) => (
-
-
-
-
-
- {line}
-
-
- ))}
-
-
-
- {ctaLabel}
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-whats-included.tsx b/src/components/sections/hatch-whats-included.tsx
deleted file mode 100644
index 2fdeb5a..0000000
--- a/src/components/sections/hatch-whats-included.tsx
+++ /dev/null
@@ -1,155 +0,0 @@
-'use client';
-
-import { Check } from 'lucide-react';
-import * as React from 'react';
-
-import { cn } from '@/lib/utils';
-
-import { HatchSectionHeader } from './hatch-section-header';
-
-type IncludedColumn = {
- iconSrc: string;
- iconAlt: string;
- title: string;
- items: string[];
-};
-
-const INCLUDED: IncludedColumn[] = [
- {
- iconSrc: '/icons/pricing/project.svg',
- iconAlt: 'Discovery icon',
- title: 'Discovery & Strategy',
- items: [
- 'Competitive Analysis',
- 'User Research & Personas',
- 'Information Architecture',
- 'Customer Journey Mapping',
- ],
- },
- {
- iconSrc: '/icons/pricing/project.svg',
- iconAlt: 'Design icon',
- title: 'Design & Prototyping',
- items: [
- 'Wireframes',
- 'High-Fidelity Mockups',
- 'Interactive Prototypes',
- 'Design System Setup',
- ],
- },
- {
- iconSrc: '/icons/pricing/project.svg',
- iconAlt: 'Handoff icon',
- title: 'Handoff & Support',
- items: [
- 'Developer Handoff Specs',
- 'Design Documentation',
- 'Component Library',
- 'Design QA Support',
- ],
- },
-];
-
-function ListItem({ children }: { children: React.ReactNode }) {
- return (
-
-
- {children}
-
- );
-}
-
-function IncludedCard({ col }: { col: IncludedColumn }) {
- return (
-
-
-
-
- {col.title}
-
-
-
- {col.items.map((t) => (
- {t}
- ))}
-
-
- );
-}
-
-function MetaPill({
- label,
- value,
- className,
-}: {
- label: string;
- value: string;
- className?: string;
-}) {
- return (
-
-
- {label}
-
-
- {value}
-
-
- );
-}
-
-type HatchWhatsIncludedProps = {
- /** Hide section title + description (e.g. minimal service detail). */
- hideHeader?: boolean;
-};
-
-export default function HatchWhatsIncluded({
- hideHeader = false,
-}: HatchWhatsIncludedProps) {
- return (
-
-
- {hideHeader ? null : (
-
- )}
-
-
- {INCLUDED.map((col) => (
-
- ))}
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/components/sections/hatch-work-index.tsx b/src/components/sections/hatch-work-index.tsx
deleted file mode 100644
index a6edd27..0000000
--- a/src/components/sections/hatch-work-index.tsx
+++ /dev/null
@@ -1,154 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import { ArrowRight } from 'lucide-react';
-import * as React from 'react';
-
-import { Button } from '@/components/ui/button';
-import type { Project } from '@/lib/project-work';
-import { cn } from '@/lib/utils';
-
-type Props = {
- projects: Project[];
- initialCount?: number;
- pageSize?: number;
-};
-
-const EASE: [number, number, number, number] = [0.22, 0.61, 0.36, 1];
-
-const itemVariants = {
- hidden: { opacity: 0, y: 14, filter: 'blur(4px)' },
- show: {
- opacity: 1,
- y: 0,
- filter: 'blur(0px)',
- transition: { duration: 0.55, ease: EASE },
- },
-};
-
-function ProjectCard({ p, priority }: { p: Project; priority?: boolean }) {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
- {p.title}
-
-
- {p.description}
-
-
-
- );
-}
-
-export default function HatchWorkIndex({
- projects,
- initialCount = 9,
- pageSize = 9,
-}: Props) {
- const items = React.useMemo(
- () => [...projects].sort((a, b) => (a.order ?? 999) - (b.order ?? 999)),
- [projects],
- );
-
- const initialVisible = Math.min(initialCount, items.length);
- const [visible, setVisible] = React.useState(initialVisible);
- const [motionStartIndex, setMotionStartIndex] =
- React.useState(initialVisible);
-
- const canLoadMore = visible < items.length;
- const shown = items.slice(0, visible);
-
- const onLoadMore = () => {
- setMotionStartIndex(visible);
- setVisible((v) => Math.min(v + pageSize, items.length));
- };
-
- return (
-
-
-
-
- Selected Work
-
-
-
- A collection of recent projects spanning product design, branding,
- and web development. Each project showcases strategic thinking,
- attention to detail, and measurable impact.
-
-
-
-
- {shown.map((p, i) => {
- const isNew = i >= motionStartIndex;
- return (
-
-
-
- );
- })}
-
-
-
-
- Showing {Math.min(visible, items.length)} of {items.length}
-
-
- {canLoadMore ? (
-
- Load more
-
- ) : (
-
-
- Let’s work together
-
-
- )}
-
-
-
- );
-}
diff --git a/src/components/sections/legal-article.tsx b/src/components/sections/legal-article.tsx
deleted file mode 100644
index e991e91..0000000
--- a/src/components/sections/legal-article.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-'use client';
-
-import * as React from 'react';
-
-type LegalArticleProps = {
- overline?: string;
- title: string;
- subtitle?: string;
- updatedAt?: string;
- children: React.ReactNode;
-};
-
-export default function LegalArticle({
- overline = 'Legal',
- title,
- subtitle,
- updatedAt,
- children,
-}: LegalArticleProps) {
- return (
-
-
-
-
{overline}
-
- {title}
-
- {subtitle && (
-
- {subtitle}
-
- )}
- {updatedAt && (
-
{updatedAt}
- )}
-
-
-
-
-
-
-
- );
-}
diff --git a/src/components/sections/navbar.tsx b/src/components/sections/navbar.tsx
deleted file mode 100644
index 19b27af..0000000
--- a/src/components/sections/navbar.tsx
+++ /dev/null
@@ -1,241 +0,0 @@
-'use client';
-
-import { ThemeProvider } from 'next-themes';
-import * as React from 'react';
-
-import { ThemeToggle } from '@/components/theme-toggle';
-import { cn } from '@/lib/utils';
-
-const HEADER_HEIGHT = 80;
-
-const ITEMS = [
- { label: 'Themes', href: '/themes' },
- { label: 'All Interactives', href: '/i' },
- { label: 'Blog', href: '/blog' },
-];
-
-export default function Navbar() {
- const [pathname, setPathname] = React.useState('/');
- React.useEffect(() => {
- setPathname(window.location.pathname);
- }, []);
-
- const [isMenuOpen, setIsMenuOpen] = React.useState(false);
-
- React.useEffect(() => {
- document.body.classList.toggle('overflow-hidden', isMenuOpen);
- return () => document.body.classList.remove('overflow-hidden');
- }, [isMenuOpen]);
-
- React.useEffect(() => {
- const mq = window.matchMedia('(min-width: 1024px)');
- const closeOnDesktop = () => {
- if (mq.matches) setIsMenuOpen(false);
- };
- mq.addEventListener('change', closeOnDesktop);
- return () => mq.removeEventListener('change', closeOnDesktop);
- }, []);
-
- const wrapperRef = React.useRef(null);
- const contentRef = React.useRef(null);
- const [panelHeight, setPanelHeight] = React.useState(0);
- const [minOpenHeight, setMinOpenHeight] = React.useState(0);
-
- React.useLayoutEffect(() => {
- const wrapper = wrapperRef.current;
- const content = contentRef.current;
- if (!wrapper || !content) return;
-
- const viewportRemainder = Math.max(0, window.innerHeight - HEADER_HEIGHT);
-
- const onEnd = () => {
- if (isMenuOpen) setPanelHeight('auto');
- wrapper.removeEventListener('transitionend', onEnd);
- };
-
- queueMicrotask(() => {
- setMinOpenHeight(viewportRemainder);
-
- if (isMenuOpen) {
- const target = Math.max(content.scrollHeight, viewportRemainder);
- setPanelHeight(target);
- wrapper.addEventListener('transitionend', onEnd);
- } else {
- const current = wrapper.getBoundingClientRect().height || 0;
- setPanelHeight(current);
- requestAnimationFrame(() => setPanelHeight(0));
- }
- });
- }, [isMenuOpen, pathname]);
-
- React.useEffect(() => {
- const onResize = () => {
- if (!isMenuOpen || !contentRef.current) return;
- const viewportRemainder = Math.max(0, window.innerHeight - HEADER_HEIGHT);
- queueMicrotask(() => {
- setMinOpenHeight(viewportRemainder);
- if (panelHeight !== 'auto') {
- const target = Math.max(
- contentRef.current!.scrollHeight,
- viewportRemainder,
- );
- setPanelHeight(target);
- }
- });
- };
- window.addEventListener('resize', onResize);
- return () => window.removeEventListener('resize', onResize);
- }, [isMenuOpen, panelHeight]);
-
- return (
-
-
-
-
-
- Interactives
-
-
-
- {ITEMS.map((link) => {
- const active = pathname === link.href;
- return (
-
- {link.label}
-
- );
- })}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
setIsMenuOpen((v) => !v)}
- aria-expanded={isMenuOpen}
- aria-label="Toggle main menu"
- >
- Toggle main menu
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/components/theme-toggle.tsx b/src/components/theme-toggle.tsx
deleted file mode 100644
index 6a29bcf..0000000
--- a/src/components/theme-toggle.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-'use client';
-
-import { Moon, Sun } from 'lucide-react';
-import { useTheme } from 'next-themes';
-
-import { Button } from '@/components/ui/button';
-
-export function ThemeToggle() {
- const { theme, setTheme } = useTheme();
-
- return (
- setTheme(theme === 'light' ? 'dark' : 'light')}
- >
-
-
- Toggle theme
-
- );
-}
diff --git a/src/components/ui/accordion.tsx b/src/components/ui/accordion.tsx
index fcfee5c..e6a723d 100644
--- a/src/components/ui/accordion.tsx
+++ b/src/components/ui/accordion.tsx
@@ -1,79 +1,56 @@
import * as React from "react"
-import { Accordion as AccordionPrimitive } from "radix-ui"
+import * as AccordionPrimitive from "@radix-ui/react-accordion"
+import { ChevronDown } from "lucide-react"
import { cn } from "@/lib/utils"
-import { ChevronDownIcon, ChevronUpIcon } from "lucide-react"
-function Accordion({
- className,
- ...props
-}: React.ComponentProps) {
- return (
-
- )
-}
+const Accordion = AccordionPrimitive.Root
-function AccordionItem({
- className,
- ...props
-}: React.ComponentProps) {
- return (
-
- )
-}
+const AccordionItem = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+AccordionItem.displayName = "AccordionItem"
-function AccordionTrigger({
- className,
- children,
- ...props
-}: React.ComponentProps) {
- return (
-
-
- {children}
-
-
-
-
- )
-}
-
-function AccordionContent({
- className,
- children,
- ...props
-}: React.ComponentProps) {
- return (
- ,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+ svg]:rotate-180",
+ className
+ )}
{...props}
>
-
- {children}
-
-
- )
-}
+ {children}
+
+
+
+))
+AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName
+
+const AccordionContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+ {children}
+
+))
+
+AccordionContent.displayName = AccordionPrimitive.Content.displayName
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }
diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx
index 186efdb..8722561 100644
--- a/src/components/ui/alert-dialog.tsx
+++ b/src/components/ui/alert-dialog.tsx
@@ -1,197 +1,139 @@
import * as React from "react"
-import { AlertDialog as AlertDialogPrimitive } from "radix-ui"
+import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"
import { cn } from "@/lib/utils"
-import { Button } from "@/components/ui/button"
+import { buttonVariants } from "@/components/ui/button"
-function AlertDialog({
- ...props
-}: React.ComponentProps) {
- return
-}
+const AlertDialog = AlertDialogPrimitive.Root
-function AlertDialogTrigger({
- ...props
-}: React.ComponentProps) {
- return (
-
- )
-}
+const AlertDialogTrigger = AlertDialogPrimitive.Trigger
-function AlertDialogPortal({
- ...props
-}: React.ComponentProps) {
- return (
-
- )
-}
+const AlertDialogPortal = AlertDialogPrimitive.Portal
-function AlertDialogOverlay({
- className,
- ...props
-}: React.ComponentProps) {
- return (
- ,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName
+
+const AlertDialogContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
- )
-}
+
+))
+AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName
-function AlertDialogContent({
- className,
- size = "default",
- ...props
-}: React.ComponentProps & {
- size?: "default" | "sm"
-}) {
- return (
-
-
-
-
- )
-}
-
-function AlertDialogHeader({
+const AlertDialogHeader = ({
className,
...props
-}: React.ComponentProps<"div">) {
- return (
-
- )
-}
+}: React.HTMLAttributes) => (
+
+)
+AlertDialogHeader.displayName = "AlertDialogHeader"
-function AlertDialogFooter({
+const AlertDialogFooter = ({
className,
...props
-}: React.ComponentProps<"div">) {
- return (
-
- )
-}
+}: React.HTMLAttributes) => (
+
+)
+AlertDialogFooter.displayName = "AlertDialogFooter"
-function AlertDialogMedia({
- className,
- ...props
-}: React.ComponentProps<"div">) {
- return (
-
- )
-}
+const AlertDialogTitle = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName
-function AlertDialogTitle({
- className,
- ...props
-}: React.ComponentProps) {
- return (
-
- )
-}
+const AlertDialogDescription = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+AlertDialogDescription.displayName =
+ AlertDialogPrimitive.Description.displayName
-function AlertDialogDescription({
- className,
- ...props
-}: React.ComponentProps) {
- return (
-
- )
-}
+const AlertDialogAction = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName
-function AlertDialogAction({
- className,
- variant = "default",
- size = "default",
- ...props
-}: React.ComponentProps &
- Pick, "variant" | "size">) {
- return (
-
-
-
- )
-}
-
-function AlertDialogCancel({
- className,
- variant = "outline",
- size = "default",
- ...props
-}: React.ComponentProps &
- Pick, "variant" | "size">) {
- return (
-
-
-
- )
-}
+const AlertDialogCancel = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName
export {
AlertDialog,
+ AlertDialogPortal,
+ AlertDialogOverlay,
+ AlertDialogTrigger,
+ AlertDialogContent,
+ AlertDialogHeader,
+ AlertDialogFooter,
+ AlertDialogTitle,
+ AlertDialogDescription,
AlertDialogAction,
AlertDialogCancel,
- AlertDialogContent,
- AlertDialogDescription,
- AlertDialogFooter,
- AlertDialogHeader,
- AlertDialogMedia,
- AlertDialogOverlay,
- AlertDialogPortal,
- AlertDialogTitle,
- AlertDialogTrigger,
}
diff --git a/src/components/ui/alert.tsx b/src/components/ui/alert.tsx
index 1fe3176..41fa7e0 100644
--- a/src/components/ui/alert.tsx
+++ b/src/components/ui/alert.tsx
@@ -4,13 +4,13 @@ import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/lib/utils"
const alertVariants = cva(
- "group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",
+ "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
{
variants: {
variant: {
- default: "bg-card text-card-foreground",
+ default: "bg-background text-foreground",
destructive:
- "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current",
+ "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",
},
},
defaultVariants: {
@@ -19,58 +19,41 @@ const alertVariants = cva(
}
)
-function Alert({
- className,
- variant,
- ...props
-}: React.ComponentProps<"div"> & VariantProps) {
- return (
-
- )
-}
+const Alert = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes & VariantProps
+>(({ className, variant, ...props }, ref) => (
+
+))
+Alert.displayName = "Alert"
-function AlertTitle({ className, ...props }: React.ComponentProps<"div">) {
- return (
- svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground",
- className
- )}
- {...props}
- />
- )
-}
+const AlertTitle = React.forwardRef<
+ HTMLParagraphElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+AlertTitle.displayName = "AlertTitle"
-function AlertDescription({
- className,
- ...props
-}: React.ComponentProps<"div">) {
- return (
-
- )
-}
+const AlertDescription = React.forwardRef<
+ HTMLParagraphElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+AlertDescription.displayName = "AlertDescription"
-function AlertAction({ className, ...props }: React.ComponentProps<"div">) {
- return (
-
- )
-}
-
-export { Alert, AlertTitle, AlertDescription, AlertAction }
+export { Alert, AlertTitle, AlertDescription }
diff --git a/src/components/ui/animation-checkout.tsx b/src/components/ui/animation-checkout.tsx
deleted file mode 100644
index a444df9..0000000
--- a/src/components/ui/animation-checkout.tsx
+++ /dev/null
@@ -1,110 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import { useId } from 'react';
-
-import ShadowRootHost from './shadow-root-host';
-
-type Props = {
- className?: string;
-};
-
-export default function AnimationCheckout({ className }: Props) {
- const uid = useId();
- const cpId = `cp-${uid}`;
- const gradId = `g-${uid}`;
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/components/ui/animation-invoicing.tsx b/src/components/ui/animation-invoicing.tsx
deleted file mode 100644
index 5bc6081..0000000
--- a/src/components/ui/animation-invoicing.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import { useId } from 'react';
-
-import ShadowRootHost from './shadow-root-host';
-
-type Props = {
- className?: string;
- 'aria-label'?: string;
-};
-
-export default function AnimationInvoicing({
- className,
- 'aria-label': ariaLabel = 'Invoicing animation',
-}: Props) {
- const uid = useId();
- const cpId = `cp-${uid}`;
- const gradId = `g-${uid}`;
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/components/ui/animation-payment-link.tsx b/src/components/ui/animation-payment-link.tsx
deleted file mode 100644
index b099932..0000000
--- a/src/components/ui/animation-payment-link.tsx
+++ /dev/null
@@ -1,161 +0,0 @@
-'use client';
-
-import { motion } from 'framer-motion';
-import { useId } from 'react';
-
-import ShadowRootHost from './shadow-root-host';
-
-type Props = {
- className?: string;
-};
-
-export default function AnimationPaymentLink({ className }: Props) {
- const uid = useId();
- const cpId = `cp-${uid}`;
- const cp2Id = `cp2-${uid}`;
- const gradId = `g-${uid}`;
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/src/components/ui/animation-recurring-bill.tsx b/src/components/ui/animation-recurring-bill.tsx
deleted file mode 100644
index 93fee39..0000000
--- a/src/components/ui/animation-recurring-bill.tsx
+++ /dev/null
@@ -1,211 +0,0 @@
-'use client';
-
-import React, { useEffect, useMemo, useRef } from 'react';
-
-export type AnimatedShadowSvgProps = {
- className?: string;
- once?: boolean;
- threshold?: number;
- rootMargin?: string;
- shadowCss?: string;
-};
-
-const RAW_SVG = String.raw`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `;
-
-export default function AnimatedShadowSvg({
- className,
- once = true,
- threshold = 0.35,
- rootMargin = '0px 0px -20% 0px',
- shadowCss,
-}: AnimatedShadowSvgProps) {
- const hostRef = useRef(null);
- const shadowRef = useRef(null);
- const observerRef = useRef(null);
-
- const baseShadowCss = useMemo(
- () =>
- `
- :host { display: inline-block; }
- svg { display: block; width: 100%; height: auto; }
-
- /* Initial state */
- .reveal [id^="feature"],
- .reveal #card1,
- .reveal #card2 {
- opacity: 0;
- transform: translateY(12px);
- }
-
- /* When visible */
- svg.is-visible [id^="feature"],
- svg.is-visible #card1,
- svg.is-visible #card2 {
- opacity: 1;
- transform: translateY(0);
- transition: opacity .6s ease, transform .6s ease;
- }
-
- /* Small stagger for nice effect */
- svg.is-visible #card1 { transition-delay: .05s; }
- svg.is-visible #card2 { transition-delay: .1s; }
- svg.is-visible #feature1 { transition-delay: .15s; }
- svg.is-visible #feature2 { transition-delay: .2s; }
- svg.is-visible #feature3 { transition-delay: .25s; }
- svg.is-visible #feature4 { transition-delay: .3s; }
- svg.is-visible #feature5 { transition-delay: .35s; }
- svg.is-visible #feature6 { transition-delay: .4s; }
- svg.is-visible #feature7 { transition-delay: .45s; }
-
- /* Let consumers add more styling/overrides */
- ${shadowCss ?? ''}
- `.trim(),
- [shadowCss],
- );
-
- useEffect(() => {
- if (!hostRef.current || shadowRef.current) return;
-
- const root = hostRef.current.attachShadow({ mode: 'open' });
- shadowRef.current = root;
-
- const styleEl = document.createElement('style');
- styleEl.textContent = baseShadowCss;
-
- const wrapper = document.createElement('div');
- wrapper.innerHTML = RAW_SVG;
- const svgEl = wrapper.querySelector('svg');
- if (!svgEl) return;
-
- svgEl.classList.add('reveal');
- root.appendChild(styleEl);
- root.appendChild(svgEl);
- }, [baseShadowCss]);
-
- useEffect(() => {
- const root = shadowRef.current;
- if (!hostRef.current || !root) return;
-
- const svgEl = root.querySelector('svg');
- if (!svgEl) return;
-
- if (observerRef.current) {
- observerRef.current.disconnect();
- observerRef.current = null;
- }
-
- const io = new IntersectionObserver(
- (entries) => {
- entries.forEach((entry) => {
- if (entry.isIntersecting) {
- svgEl.classList.add('is-visible');
- svgEl.classList.remove('reveal');
- if (once) {
- io.unobserve(entry.target);
- }
- } else if (!once) {
- svgEl.classList.remove('is-visible');
- svgEl.classList.add('reveal');
- }
- });
- },
- { threshold, rootMargin },
- );
-
- observerRef.current = io;
- io.observe(hostRef.current);
-
- return () => {
- io.disconnect();
- observerRef.current = null;
- };
- }, [once, threshold, rootMargin]);
-
- return
;
-}
diff --git a/src/components/ui/aspect-ratio.tsx b/src/components/ui/aspect-ratio.tsx
index 57e38fa..c4abbf3 100644
--- a/src/components/ui/aspect-ratio.tsx
+++ b/src/components/ui/aspect-ratio.tsx
@@ -1,11 +1,5 @@
-"use client"
+import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio"
-import { AspectRatio as AspectRatioPrimitive } from "radix-ui"
-
-function AspectRatio({
- ...props
-}: React.ComponentProps) {
- return
-}
+const AspectRatio = AspectRatioPrimitive.Root
export { AspectRatio }
diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx
index 507f72f..991f56e 100644
--- a/src/components/ui/avatar.tsx
+++ b/src/components/ui/avatar.tsx
@@ -1,110 +1,48 @@
import * as React from "react"
-import { Avatar as AvatarPrimitive } from "radix-ui"
+import * as AvatarPrimitive from "@radix-ui/react-avatar"
import { cn } from "@/lib/utils"
-function Avatar({
- className,
- size = "default",
- ...props
-}: React.ComponentProps & {
- size?: "default" | "sm" | "lg"
-}) {
- return (
-
- )
-}
+const Avatar = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+Avatar.displayName = AvatarPrimitive.Root.displayName
-function AvatarImage({
- className,
- ...props
-}: React.ComponentProps) {
- return (
-
- )
-}
+const AvatarImage = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+AvatarImage.displayName = AvatarPrimitive.Image.displayName
-function AvatarFallback({
- className,
- ...props
-}: React.ComponentProps) {
- return (
-
- )
-}
+const AvatarFallback = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName
-function AvatarBadge({ className, ...props }: React.ComponentProps<"span">) {
- return (
- svg]:hidden",
- "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2",
- "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2",
- className
- )}
- {...props}
- />
- )
-}
-
-function AvatarGroup({ className, ...props }: React.ComponentProps<"div">) {
- return (
-
- )
-}
-
-function AvatarGroupCount({
- className,
- ...props
-}: React.ComponentProps<"div">) {
- return (
- svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
- className
- )}
- {...props}
- />
- )
-}
-
-export {
- Avatar,
- AvatarImage,
- AvatarFallback,
- AvatarGroup,
- AvatarGroupCount,
- AvatarBadge,
-}
+export { Avatar, AvatarImage, AvatarFallback }
diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx
index cacff11..f000e3e 100644
--- a/src/components/ui/badge.tsx
+++ b/src/components/ui/badge.tsx
@@ -1,24 +1,20 @@
import * as React from "react"
import { cva, type VariantProps } from "class-variance-authority"
-import { Slot } from "radix-ui"
import { cn } from "@/lib/utils"
const badgeVariants = cva(
- "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",
+ "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
{
variants: {
variant: {
- default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
+ default:
+ "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
secondary:
- "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
+ "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
destructive:
- "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
- outline:
- "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
- ghost:
- "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
- link: "text-primary underline-offset-4 hover:underline",
+ "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
+ outline: "text-foreground",
},
},
defaultVariants: {
@@ -27,22 +23,13 @@ const badgeVariants = cva(
}
)
-function Badge({
- className,
- variant = "default",
- asChild = false,
- ...props
-}: React.ComponentProps<"span"> &
- VariantProps
& { asChild?: boolean }) {
- const Comp = asChild ? Slot.Root : "span"
+export interface BadgeProps
+ extends React.HTMLAttributes,
+ VariantProps {}
+function Badge({ className, variant, ...props }: BadgeProps) {
return (
-
+
)
}
diff --git a/src/components/ui/breadcrumb.tsx b/src/components/ui/breadcrumb.tsx
index db9afc0..71a5c32 100644
--- a/src/components/ui/breadcrumb.tsx
+++ b/src/components/ui/breadcrumb.tsx
@@ -1,115 +1,108 @@
import * as React from "react"
-import { Slot } from "radix-ui"
+import { Slot } from "@radix-ui/react-slot"
+import { ChevronRight, MoreHorizontal } from "lucide-react"
import { cn } from "@/lib/utils"
-import { ChevronRightIcon, MoreHorizontalIcon } from "lucide-react"
-function Breadcrumb({ className, ...props }: React.ComponentProps<"nav">) {
- return (
-
- )
-}
+const Breadcrumb = React.forwardRef<
+ HTMLElement,
+ React.ComponentPropsWithoutRef<"nav"> & {
+ separator?: React.ReactNode
+ }
+>(({ ...props }, ref) => )
+Breadcrumb.displayName = "Breadcrumb"
-function BreadcrumbList({ className, ...props }: React.ComponentProps<"ol">) {
- return (
-
- )
-}
+const BreadcrumbList = React.forwardRef<
+ HTMLOListElement,
+ React.ComponentPropsWithoutRef<"ol">
+>(({ className, ...props }, ref) => (
+
+))
+BreadcrumbList.displayName = "BreadcrumbList"
-function BreadcrumbItem({ className, ...props }: React.ComponentProps<"li">) {
- return (
-
- )
-}
+const BreadcrumbItem = React.forwardRef<
+ HTMLLIElement,
+ React.ComponentPropsWithoutRef<"li">
+>(({ className, ...props }, ref) => (
+
+))
+BreadcrumbItem.displayName = "BreadcrumbItem"
-function BreadcrumbLink({
- asChild,
- className,
- ...props
-}: React.ComponentProps<"a"> & {
- asChild?: boolean
-}) {
- const Comp = asChild ? Slot.Root : "a"
+const BreadcrumbLink = React.forwardRef<
+ HTMLAnchorElement,
+ React.ComponentPropsWithoutRef<"a"> & {
+ asChild?: boolean
+ }
+>(({ asChild, className, ...props }, ref) => {
+ const Comp = asChild ? Slot : "a"
return (
)
-}
+})
+BreadcrumbLink.displayName = "BreadcrumbLink"
-function BreadcrumbPage({ className, ...props }: React.ComponentProps<"span">) {
- return (
-
- )
-}
+const BreadcrumbPage = React.forwardRef<
+ HTMLSpanElement,
+ React.ComponentPropsWithoutRef<"span">
+>(({ className, ...props }, ref) => (
+
+))
+BreadcrumbPage.displayName = "BreadcrumbPage"
-function BreadcrumbSeparator({
+const BreadcrumbSeparator = ({
children,
className,
...props
-}: React.ComponentProps<"li">) {
- return (
- svg]:size-3.5", className)}
- {...props}
- >
- {children ?? (
-
- )}
-
- )
-}
+}: React.ComponentProps<"li">) => (
+ svg]:size-3.5", className)}
+ {...props}
+ >
+ {children ?? }
+
+)
+BreadcrumbSeparator.displayName = "BreadcrumbSeparator"
-function BreadcrumbEllipsis({
+const BreadcrumbEllipsis = ({
className,
...props
-}: React.ComponentProps<"span">) {
- return (
- svg]:size-4",
- className
- )}
- {...props}
- >
-
- More
-
- )
-}
+}: React.ComponentProps<"span">) => (
+
+
+ More
+
+)
+BreadcrumbEllipsis.displayName = "BreadcrumbElipssis"
export {
Breadcrumb,
diff --git a/src/components/ui/button-group.tsx b/src/components/ui/button-group.tsx
deleted file mode 100644
index 5be638e..0000000
--- a/src/components/ui/button-group.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import { cva, type VariantProps } from "class-variance-authority"
-import { Slot } from "radix-ui"
-
-import { cn } from "@/lib/utils"
-import { Separator } from "@/components/ui/separator"
-
-const buttonGroupVariants = cva(
- "flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
- {
- variants: {
- orientation: {
- horizontal:
- "[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg!",
- vertical:
- "flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg!",
- },
- },
- defaultVariants: {
- orientation: "horizontal",
- },
- }
-)
-
-function ButtonGroup({
- className,
- orientation,
- ...props
-}: React.ComponentProps<"div"> & VariantProps) {
- return (
-
- )
-}
-
-function ButtonGroupText({
- className,
- asChild = false,
- ...props
-}: React.ComponentProps<"div"> & {
- asChild?: boolean
-}) {
- const Comp = asChild ? Slot.Root : "div"
-
- return (
-
- )
-}
-
-function ButtonGroupSeparator({
- className,
- orientation = "vertical",
- ...props
-}: React.ComponentProps) {
- return (
-
- )
-}
-
-export {
- ButtonGroup,
- ButtonGroupSeparator,
- ButtonGroupText,
- buttonGroupVariants,
-}
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
index 9faeab6..36496a2 100644
--- a/src/components/ui/button.tsx
+++ b/src/components/ui/button.tsx
@@ -1,39 +1,29 @@
import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
import { cva, type VariantProps } from "class-variance-authority"
-import { Slot } from "radix-ui"
import { cn } from "@/lib/utils"
const buttonVariants = cva(
- "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
{
variants: {
variant: {
- default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
- outline:
- "!h-10 !min-h-10 rounded-full border border-border bg-transparent !px-6 text-foreground shadow-xs hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:hover:bg-input/50",
- secondary:
- "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
- ghost:
- "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
destructive:
- "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
+ "bg-destructive text-destructive-foreground hover:bg-destructive/90",
+ outline:
+ "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
+ secondary:
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80",
+ ghost: "hover:bg-accent hover:text-accent-foreground",
link: "text-primary underline-offset-4 hover:underline",
- hatch:
- "!h-10 !min-h-10 rounded-full gap-[6px] border-0 bg-primary !px-6 text-primary-foreground shadow-none hover:bg-primary/90 active:bg-primary/85",
},
size: {
- default:
- "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
- xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
- sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
- lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
- icon: "size-8",
- "icon-xs":
- "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
- "icon-sm":
- "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
- "icon-lg": "size-9",
+ default: "h-10 px-4 py-2",
+ sm: "h-9 rounded-md px-3",
+ lg: "h-11 rounded-md px-8",
+ icon: "h-10 w-10",
},
},
defaultVariants: {
@@ -43,27 +33,24 @@ const buttonVariants = cva(
}
)
-function Button({
- className,
- variant = "default",
- size = "default",
- asChild = false,
- ...props
-}: React.ComponentProps<"button"> &
- VariantProps & {
- asChild?: boolean
- }) {
- const Comp = asChild ? Slot.Root : "button"
-
- return (
-
- )
+export interface ButtonProps
+ extends React.ButtonHTMLAttributes,
+ VariantProps {
+ asChild?: boolean
}
+const Button = React.forwardRef