diff --git a/.npmrc b/.npmrc deleted file mode 100644 index b96f962..0000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -node-linker=node-modules diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..24f33e0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "js/ts.tsdk.path": "node_modules/typescript/lib", + "editor.codeActionsOnSave": { + "source.organizeImports.biome": "explicit", + "source.fixAll.biome": "explicit" + } +} \ No newline at end of file diff --git a/README.md b/README.md index d9cf8b3..293ee3a 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,34 @@ Dies ist eine Fullstack-Coding-Challenge. Du baust eine Buchverwaltungsfunktion mit Next.js und Drizzle ORM. -Das **Autor-Feature ist bereits fertig** — es dient dir als Referenz. Deine Aufgabe ist es, das **Buch-Feature** zu ergänzen: Datenbank-Schema, API-Endpunkte und eine Frontend-Seite. +Das **Autor-Feature ist bereits fertig** — es dient dir als Referenz. Deine Aufgabe ist es, das **Buch-Feature** zu ergänzen: UI-Komponenten, Datenbank-Schema und API-Endpunkte — aufeinander aufbauend von einfach zu komplex. + +--- + +## Für WebDev-Einsteiger + +Wenn du wenig oder keine Erfahrung mit moderner Web-Entwicklung hast, arbeite dich zuerst durch diese Grundlagen — dann fällt dir die Challenge deutlich leichter. + +**Sprach- & Framework-Progression**: + +1. **JavaScript / TypeScript** — Syntax, async/await, Module-System +2. **React** — Komponenten, Props, State, Hooks (`useState`, `useEffect`) +3. **Next.js (App Router)** — Server/Client Components, Route Handlers, File-based Routing + +**Empfohlene Kurse** (beide kostenlos, offiziell): + +- [Next.js Learn: React Foundations](https://nextjs.org/learn/react-foundations) — React-Grundlagen für Einsteiger +- [Next.js Learn: Dashboard App](https://nextjs.org/learn/dashboard-app) — Fullstack-Tutorial mit DB + Auth + Deployment + +**Tools, die dieses Projekt nutzt** (vorher kurz anschauen hilft): + +| Tool | Rolle | +| --------------- | ------------------------------------------------------------------------------------------------- | +| **pnpm** | Package Manager (schneller + platzsparender als npm) — [Docs](https://pnpm.io) | +| **Biome** | Linter + Formatter (Alternative zu ESLint + Prettier in einem Tool) — [Docs](https://biomejs.dev) | +| **Drizzle ORM** | Type-safe SQL Query Builder für die DB-Schicht — [Docs](https://orm.drizzle.team) | +| **Docker** | Lokale PostgreSQL-Instanz via `docker-compose.yml` | +| **Swagger UI** | API-Dokumentation zum manuellen Testen der Endpunkte | --- @@ -27,10 +54,10 @@ pnpm dev Jedes Paket hat seine eigene `.env`-Datei — beide werden automatisch erstellt: -| Datei | Genutzt von | -|-------|-------------| +| Datei | Genutzt von | +| ------------------------ | --------------------------------------- | | `packages/database/.env` | Drizzle Kit (Migrationen, Seed, Studio) | -| `packages/web/.env` | Next.js (Dev-Server, API-Routes) | +| `packages/web/.env` | Next.js (Dev-Server, API-Routes) | Beide enthalten `DATABASE_URL` mit denselben Standardwerten. Du musst nichts ändern. @@ -41,8 +68,8 @@ Beide enthalten `DATABASE_URL` mit denselben Standardwerten. Du musst nichts än ## Projektstruktur ``` -fullstack-challenge/ -├── packages/database/ # Datenbank-Paket (Drizzle ORM) +book-manager/ +├── packages/database/ # Datenbank-Paket (Drizzle ORM) — SERVER ONLY │ ├── src/schema.ts # Schema-Datei (hier arbeitest du!) │ ├── src/client.ts # Datenbank-Client │ ├── drizzle.config.ts # Drizzle Kit Konfiguration @@ -51,108 +78,396 @@ fullstack-challenge/ ├── src/app/api/authors/ # Autor-API (Referenz!) ├── src/app/api/books/ # Bücher-API (deine Aufgabe!) ├── src/app/books/ # Bücher-Seite (deine Aufgabe!) + ├── src/components/ + │ ├── ui/ # Button, Input, Select (deine Aufgabe!) + │ └── BookForm.tsx # wiederverwendbare Form (deine Aufgabe!) └── src/app/api-doc/ # API Dokumentation (Swagger UI) ``` +> ⚠️ **`@book-manager/database` ist ein Server-Only-Paket.** Importiere es nur in Server-Code (Route Handlers, Server Components, Server Actions, Seed/Migrations). Niemals in Client Components (`"use client"`) — `pg` und `DATABASE_URL` dürfen das Client-Bundle nicht erreichen. + --- ## Deine Aufgaben -### Aufgabe 1: Datenbank-Schema +Aufgaben steigen von **einfach → komplex**: + +1. **UI-Basis** (stateless Bausteine) +2. **UI-Komposition** (State, wiederverwendbare Form) +3. **Seite mit Mock-Daten** (UI-Integration ohne Backend) +4. **Datenbank** (Schema, Migrationen) +5. **API** (CRUD, Validierung, Edit, Suche) +6. **Qualität & Architektur** (Tests, Optimistic UX, Server Components) + +--- + +### Aufgabe 1: UI-Basis — Button + +**Ziel**: Einfachste wiederverwendbare Komponente — stateless, nur Props. + +**Datei**: `packages/web/src/components/ui/Button.tsx` + +**Was zu tun ist**: + +1. Props: `variant: "primary" | "danger"`, `type?: "button" | "submit"`, `onClick?`, `disabled?`, `children` +2. Varianten visuell unterscheiden (Farbe, Hover) +3. `disabled`-Zustand respektieren + +**Hinweise**: + +- Kein `"use client"` nötig — keine Hooks, kein State im Modul +- Styling minimal (Tailwind oder inline) +- Klein halten — keine Logik im Button + +--- + +### Aufgabe 2: UI-Basis — Input + Select + +**Ziel**: Form-Felder als wiederverwendbare Komponenten — weiterhin stateless. + +**Dateien**: + +- `packages/web/src/components/ui/Input.tsx` +- `packages/web/src/components/ui/Select.tsx` + +**Was zu tun ist**: + +**`Input.tsx`**: + +- Props: `label`, `name`, `value`, `onChange`, `type?` (default `"text"`), `required?`, `error?` +- Label + Input + Fehlertext rendern + +**`Select.tsx`**: -**Ziel**: Erstelle die `books` Tabelle in der Drizzle-Schema-Datei. +- Props: `label`, `name`, `value`, `onChange`, `options: { value: string | number; label: string }[]`, `required?` + +**Hinweise**: + +- Immer noch stateless — Parent hält den Wert +- Fehleranzeige nur wenn `error` gesetzt + +--- + +### Aufgabe 3: UI-Komposition — BookForm (wiederverwendbar) + +**Ziel**: Form-Komponente mit lokalem State, die für Create UND Edit funktioniert. + +**Datei**: `packages/web/src/components/BookForm.tsx` + +**Was zu tun ist**: + +1. `"use client"` oben — State + Events nötig +2. Props: + - `initialValues?: { title?; authorId?; isbn?; year? }` + - `authors: { id: number; name: string }[]` + - `onSubmit: (values) => Promise | void` + - `submitLabel?: string` (default `"Speichern"`) +3. Felder: Titel (Pflicht), Autor-Dropdown, ISBN (optional), Jahr (optional) +4. Lokaler Form-State via `useState` +5. Nutzt `Input`, `Select`, `Button` aus Aufgaben 1-2 + +**Hinweise**: + +- Form kennt **keine API** — erhält `onSubmit` als Prop. Wiederverwendbar für Create und Edit (Aufgabe 9). +- Nach erfolgreichem Submit Felder leeren (nur wenn keine `initialValues`) + +--- + +### Aufgabe 4: Bücher-Seite mit Mock-Daten + +**Ziel**: Komplette Seite zusammenstecken — noch ohne echte API. + +**Datei**: `packages/web/src/app/books/page.tsx` + +**Was zu tun ist**: + +1. `"use client"` oben +2. Statische Mock-Daten im State (`useState([...])`, `useState([...])`) +3. Bücherliste rendern (Titel, Autor-Name, ISBN, Jahr) +4. `BookForm` einbinden → `onSubmit` fügt Buch in lokalen State ein +5. Löschen-Button pro Buch → entfernt aus lokalem State + +**Überprüfung**: http://localhost:3000/books — Seite rendert, Add/Delete funktioniert lokal. + +**Hinweis**: Mock-Daten werden in Aufgabe 7 durch echte API ersetzt. + +--- + +### Aufgabe 5: Datenbank-Schema + +**Ziel**: `books` Tabelle in Drizzle-Schema. **Datei**: `packages/database/src/schema.ts` **Was zu tun ist**: -1. Öffne `packages/database/src/schema.ts` -2. Füge eine neue `books` Tabelle hinzu mit folgenden Spalten: +1. `books` Tabelle mit Spalten: - `id` — serial, Primary Key - `title` — text (Pflichtfeld) - `isbn` — text (optional, unique) - `year` — integer (optional) - `authorId` — integer (Fremdschlüssel auf `authors.id`) -3. Definiere die Relation zwischen `authors` und `books` -4. Wende das Schema auf die Datenbank an: + + > **Hinweis `isbn` (optional + unique)**: PostgreSQL erlaubt mehrere `NULL`-Werte in `UNIQUE`-Constraints — zwei NULLs gelten nicht als Duplikat. + +2. Relation `authors` ↔ `books` definieren +3. Schema anwenden: ```bash -pnpm --filter @repo/database db:push +pnpm --filter @book-manager/database db:push ``` -**Überprüfung**: Öffne Drizzle Studio mit `pnpm --filter @repo/database studio` — du solltest die Book-Tabelle sehen. +**Überprüfung**: `pnpm --filter @book-manager/database studio` → Book-Tabelle sichtbar. + +**Hinweis**: `authors` Tabelle in `schema.ts` als Referenz. + +--- + +### Aufgabe 6: Versionierte Migrationen + +**Ziel**: SQL-Migrationen statt `db:push` im Repo. + +**Was zu tun ist**: + +1. `db:push`-Workflow aus Setup entfernen +2. Migration generieren: `pnpm --filter @book-manager/database generate` +3. SQL-Datei unter `packages/database/drizzle/` committen +4. Setup-Script ruft `migrate` statt `push` +5. Script `migrate:status` (oder äquivalent) ergänzen -**Hinweis**: Schau dir die `authors` Tabelle in `schema.ts` als Referenz an! +**Überprüfung**: `docker compose down -v && pnpm run setup` reproduziert DB-State sauber. --- -### Aufgabe 2: API-Endpunkte +### Aufgabe 7: API-Endpunkte (GET, POST, DELETE) + Verdrahtung -**Ziel**: Erstelle die API-Routes für Bücher. +**Ziel**: Basis-CRUD + Mock-Daten in der Seite durch echte API ersetzen. -**Dateien, die du anlegen musst**: +**Dateien**: -- `packages/web/src/app/api/books/route.ts` — GET (alle Bücher) + POST (neues Buch) -- `packages/web/src/app/api/books/[id]/route.ts` — DELETE (Buch löschen) +- `packages/web/src/app/api/books/route.ts` — GET (Liste) + POST (neu) +- `packages/web/src/app/api/books/[id]/route.ts` — GET (einzeln) + DELETE -**Referenz**: Schau dir `packages/web/src/app/api/authors/route.ts` an — das ist das Muster, dem du folgen sollst! +**Referenz**: `packages/web/src/app/api/authors/route.ts` — dem Muster folgen. **Was zu tun ist**: -**GET /api/books** — Alle Bücher mit Autor zurückgeben: +**GET /api/books** — Alle Bücher mit Autor (Join): ```typescript -import { db, books, authors } from "@repo/database"; +// Server-only Import — nur Route Handlers / Server Components / Server Actions +import { db, books, authors } from "@book-manager/database"; import { eq } from "drizzle-orm"; // db.select().from(books).innerJoin(authors, eq(books.authorId, authors.id)) ``` -**POST /api/books** — Neues Buch erstellen: +**POST /api/books** — Neues Buch: + +- Body: `{ title, authorId, isbn?, year? }` +- Validierung: `title` + `authorId` Pflicht (sonst 400) +- Antwort: 201 mit erstelltem Buch + +**GET /api/books/[id]** — Einzelnes Buch mit Autor: + +- 404 falls nicht vorhanden + +**DELETE /api/books/[id]**: -- Request Body: `{ title, authorId, isbn?, year? }` -- Validierung: `title` und `authorId` sind Pflichtfelder (sonst 400 zurückgeben) -- Antwort: 201 mit dem erstellten Buch +- 404 falls nicht vorhanden +- 204 bei Erfolg -**DELETE /api/books/[id]** — Buch löschen: +**Verdrahtung**: In `books/page.tsx`: -- Buch anhand der ID löschen -- 404 zurückgeben, wenn das Buch nicht existiert -- 200 bei Erfolg +- Mock-Daten durch `fetch('/api/books')` im `useEffect` ersetzen +- Autoren per `fetch('/api/authors')` laden +- Form-`onSubmit` → `fetch('/api/books', { method: 'POST' })` +- Delete-Button → `fetch('/api/books/:id', { method: 'DELETE' })` -**Überprüfung**: Teste deine Endpunkte über die [API Dokumentation](http://localhost:3000/api-doc) (Swagger UI)! +**Überprüfung**: Swagger UI ([API-Doc](http://localhost:3000/api-doc)) + Seite zeigt echte DB-Daten. --- -### Aufgabe 3: Frontend +### Aufgabe 8: Validierung mit Zod -**Ziel**: Baue die Bücher-Seite. +**Ziel**: Typsichere Request-Validierung in API-Routes. -**Datei**: `packages/web/src/app/books/page.tsx` +**Was zu tun ist**: + +1. `zod` im `@book-manager/web` Paket installieren +2. Schemas für POST/PUT-Bodies: `title: string min 1`, `authorId: number int positive`, `isbn: string optional`, `year: number int optional` +3. Requests mit `schema.safeParse(body)` validieren +4. Bei `!success`: 400 mit `error.flatten()` + +**Überprüfung**: Swagger UI → Request mit leerem `title` → 400 mit Feld-Fehlern. + +--- + +### Aufgabe 9: Buch bearbeiten (PUT) — BookForm wiederverwenden + +**Ziel**: Update-Endpunkt + Edit-UI durch Wiederverwendung der `BookForm`. **Was zu tun ist**: -1. Bücherliste anzeigen (GET /api/books) -2. Formular zum Hinzufügen neuer Bücher: - - Titel (Pflichtfeld) - - Autor-Dropdown (aus GET /api/authors) - - ISBN (optional) - - Jahr (optional) -3. Löschen-Button pro Buch (DELETE /api/books/[id]) +1. `PUT /api/books/[id]` — Body wie POST, partielle Updates erlaubt +2. 404 falls nicht vorhanden, 200 mit aktualisiertem Buch bei Erfolg +3. Zod-Schema für PUT (`title` und `authorId` weiterhin Pflicht); +4. Frontend: Bearbeiten-Button pro Buch → öffnet `BookForm` (Inline oder Modal) mit `initialValues` +5. **Dieselbe `BookForm` aus Aufgabe 3** für Create + Edit — `onSubmit` entscheidet POST vs. PUT -**Hinweise**: +**Hinweis**: Hier zahlt sich Aufgabe 3 aus — kein zweites Formular. + +--- + +### Aufgabe 10: Paginierung + Suche + +**Ziel**: GET /api/books mit Query-Parametern. + +**Was zu tun ist**: + +1. Query-Parameter: + - `?page=1&pageSize=20` — Offset-Paginierung (Defaults 1/20, max 100) + - `?q=harry` — Volltext auf `title` (case-insensitive, `ilike`) + - `?authorId=3` — Filter +2. Antwort-Format: + +```json +{ "data": [...], "page": 1, "pageSize": 20, "total": 42 } +``` + +3. Query-Validierung via Zod (`z.coerce.number()`) +4. Seite erweitern: Suchfeld + Pagination-Buttons + +**Hinweis**: `drizzle-orm` Operatoren `ilike`, `and`, `sql` count, `limit`, `offset`. + +--- + +### Aufgabe 11: Tests (Vitest) + +**Ziel**: Unit-Tests für UI-Komponenten. + +**Idee**: React-Komponente in jsdom rendern, interagieren (Klick, Tipp), prüfen. `fetch` gemockt — keine echte API. -- Schreibe `"use client"` ganz oben in der Datei — die Seite braucht interaktive Elemente -- Nutze `useState`, `useEffect` und `fetch` -- Schau dir `packages/web/src/app/api-doc/page.tsx` als Beispiel für eine `"use client"` Komponente an +**Was zu tun ist**: + +1. Dependencies installieren: + + ```bash + pnpm --filter @book-manager/web add -D vitest @vitejs/plugin-react jsdom \ + @testing-library/react @testing-library/user-event @testing-library/jest-dom + ``` + +2. `packages/web/vitest.config.ts`: + + ```typescript + import { defineConfig } from "vitest/config"; + import react from "@vitejs/plugin-react"; + + export default defineConfig({ + plugins: [react()], + test: { + environment: "jsdom", + setupFiles: ["./vitest.setup.ts"], + }, + }); + ``` + +3. `packages/web/vitest.setup.ts`: + + ```typescript + import "@testing-library/jest-dom/vitest"; + ``` + +4. **TypeScript-Augmentation** — sonst wirft `.toBeInTheDocument()` einen Fehler: + + In `packages/web/tsconfig.json` → `compilerOptions`: + + ```json + "types": ["node", "react", "vitest/globals"] + ``` + + Ambient-File `packages/web/src/vitest.d.ts` anlegen: + + ```ts + import "@testing-library/jest-dom/vitest"; + ``` + + > **Warum?** `@testing-library/jest-dom/vitest` erweitert Vitests `expect` via Module-Augmentation. Der Import muss für TS sichtbar sein. `vitest.setup.ts` liegt außerhalb des `include`-Blocks — daher Ambient-File unter `src/`. + +5. Script in `packages/web/package.json`: + + ```json + "scripts": { "test": "vitest" } + ``` + +6. Test neben Bücher-Seite, z.B. `packages/web/src/app/books/page.test.tsx`: -**Überprüfung**: Öffne http://localhost:3000/books — du solltest Bücher hinzufügen und löschen können. + ```typescript + import { describe, it, expect, vi, beforeEach } from "vitest"; + import { render, screen } from "@testing-library/react"; + import BooksPage from "./page"; + + beforeEach(() => { + global.fetch = vi.fn((url) => { + if (String(url).includes("/api/books")) { + return Promise.resolve( + new Response(JSON.stringify([ + { id: 1, title: "Test-Buch", author: { name: "Autor" } }, + ])), + ); + } + return Promise.resolve(new Response(JSON.stringify([]))); + }) as typeof fetch; + }); + + describe("BooksPage", () => { + it("zeigt Bücher aus der API an", async () => { + render(); + expect(await screen.findByText("Test-Buch")).toBeInTheDocument(); + }); + }); + ``` + +7. Decke ab: + - Liste rendert bei `fetch`-Daten + - Leere Liste → passender Hinweis + - Form-Submit ruft `fetch` mit `POST` (`userEvent.type` + `userEvent.click`) + - `BookForm` isoliert: Submit ruft `onSubmit`-Prop mit korrekten Werten + +8. Starten: `pnpm --filter @book-manager/web test` + +**Regel**: Nur `fetch` wird gemockt. Keine echte API, keine DB. Verhalten testen, nicht Implementierung. --- -## Bonus-Aufgaben (optional) +### Aufgabe 12: Optimistic UI + Toasts + +**Ziel**: UX-Polish durch optimistische Updates. + +**Was zu tun ist**: + +1. `sonner` installieren (oder minimales Toast-System) +2. DELETE: Buch sofort entfernen, bei Fehler rollback + Error-Toast +3. POST: neues Buch sofort anfügen (temporäre ID), nach Erfolg ID ersetzen +4. PUT: Feld-Updates sofort sichtbar, rollback bei Fehler +5. Success/Error-Toast nach jeder Mutation + +**Hinweis**: `useOptimistic` Hook (React 19) oder manuelles State-Handling. + +--- + +### Aufgabe 13: Server Components + Server Actions + +**Ziel**: `"use client"` Fetch-Pattern → natives Next.js App Router. + +**Was zu tun ist**: + +1. `packages/web/src/app/books/page.tsx` → Server Component (kein `"use client"`) +2. Direkter DB-Zugriff via `@book-manager/database` im Server-Render +3. Mutationen via Server Actions (`"use server"`) statt `fetch('/api/books')` +4. `revalidatePath('/books')` nach Mutation +5. `BookForm` bleibt Client-Komponente, ruft Server Action auf -- **Buch bearbeiten**: PUT-Endpunkt + Formular zum Aktualisieren eines bestehenden Buchs -- **Suche/Filter**: Bücher nach Titel oder Autor filtern +**Überprüfung**: Kein `fetch` Call im Client-Bundle für Bücher-Seite. --- @@ -166,28 +481,28 @@ import { eq } from "drizzle-orm"; ## Nützliche Befehle -| Befehl | Beschreibung | -| --------------------------------------- | --------------------------------------------------- | -| `pnpm dev` | Startet den Entwicklungsserver | -| `pnpm lint` | Prüft den Code mit Biome (Linting + Formatierung) | -| `pnpm lint:fix` | Behebt Linting- und Formatierungsfehler automatisch | -| `pnpm format` | Formatiert den Code mit Biome | -| `pnpm --filter @repo/database db:push` | Wendet Schema-Änderungen auf die Datenbank an | -| `pnpm --filter @repo/database generate` | Generiert SQL-Migrationsdateien | -| `pnpm --filter @repo/database migrate` | Führt Migrationen aus | -| `pnpm --filter @repo/database studio` | Öffnet Drizzle Studio | -| `pnpm --filter @repo/database seed` | Fügt Autor-Daten ein | -| `pnpm run db:start` | Startet PostgreSQL via Docker | -| `pnpm run db:stop` | Stoppt PostgreSQL | +| Befehl | Beschreibung | +| ----------------------------------------------- | --------------------------------------------------- | +| `pnpm dev` | Startet den Entwicklungsserver | +| `pnpm lint` | Prüft den Code mit Biome (Linting + Formatierung) | +| `pnpm lint:fix` | Behebt Linting- und Formatierungsfehler automatisch | +| `pnpm format` | Formatiert den Code mit Biome | +| `pnpm --filter @book-manager/database db:push` | Wendet Schema-Änderungen auf die Datenbank an | +| `pnpm --filter @book-manager/database generate` | Generiert SQL-Migrationsdateien | +| `pnpm --filter @book-manager/database migrate` | Führt Migrationen aus | +| `pnpm --filter @book-manager/database studio` | Öffnet Drizzle Studio | +| `pnpm --filter @book-manager/database seed` | Fügt Autor-Daten ein | +| `pnpm run db:start` | Startet PostgreSQL via Docker | +| `pnpm run db:stop` | Stoppt PostgreSQL | --- ## Fehlerbehebung **"Table does not exist"** -→ Hast du `db:push` ausgeführt? `pnpm --filter @repo/database db:push` +→ Hast du `db:push` ausgeführt? `pnpm --filter @book-manager/database db:push` -**"Cannot find module @repo/database"** +**"Cannot find module @book-manager/database"** → Führe `pnpm install` im Projektverzeichnis aus **"DATABASE_URL is not set"** @@ -195,3 +510,4 @@ import { eq } from "drizzle-orm"; **Autor-Relation Fehler** → Hast du die Relation zwischen `books` und `authors` in `schema.ts` definiert? + \ No newline at end of file diff --git a/package.json b/package.json index b4a2382..b66ca76 100644 --- a/package.json +++ b/package.json @@ -1,37 +1,37 @@ { "name": "fullstack-challenge", "private": true, - "packageManager": "pnpm@10.30.2", + "packageManager": "pnpm@11.17.0", "scripts": { + "build": "pnpm --filter @repo/web build", "db:start": "docker compose up -d", "db:stop": "docker compose down", - "setup": "test -f packages/database/.env || cp packages/database/.env.example packages/database/.env && test -f packages/web/.env || cp packages/web/.env.example packages/web/.env && pnpm install && pnpm run db:start && pnpm --filter @repo/database db:push && pnpm --filter @repo/database seed", "dev": "pnpm --filter @repo/web dev", + "format": "biome format --write .", + "setup": "test -f packages/database/.env || cp packages/database/.env.example packages/database/.env && test -f packages/web/.env || cp packages/web/.env.example packages/web/.env && pnpm install && pnpm run db:start && pnpm --filter @repo/database db:push && pnpm --filter @repo/database seed", + "table": "pnpm --filter @repo/database db:push && pnpm --filter @repo/database studio", "lint": "biome check .", "lint:fix": "biome check --write .", - "format": "biome format --write .", - "typecheck": "tsc --noEmit" - }, - "pnpm": { - "onlyBuiltDependencies": [ - "@prisma/engines", - "@scarf/scarf", - "@tree-sitter-grammars/tree-sitter-yaml", - "core-js-pure", - "esbuild", - "prisma", - "sharp", - "tree-sitter", - "tree-sitter-json" - ] + "typecheck": "tsc --noEmit", + "web_test": "pnpm --filter @repo/web test", + "table_push": "pnpm --filter @repo/database db:push" }, "devDependencies": { "@biomejs/biome": "2.4.11", "@types/pg": "8.15.4", - "drizzle-kit": "0.31.1" + "drizzle-kit": "0.31.1", + "typescript": "^6.0.3" }, "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@mui/icons-material": "^9.0.0", + "@mui/material": "^9.0.0", "drizzle-orm": "0.44.2", - "pg": "8.16.0" + "lucide-react": "^1.27.0", + "next-themes": "^0.4.6", + "pg": "8.16.0", + "pnpm": "^10.33.2", + "sonner": "^2.0.7" } -} +} \ No newline at end of file diff --git a/packages/database/drizzle/0000_needy_cardiac.sql b/packages/database/drizzle/0000_needy_cardiac.sql new file mode 100644 index 0000000..74c28b1 --- /dev/null +++ b/packages/database/drizzle/0000_needy_cardiac.sql @@ -0,0 +1,15 @@ +CREATE TABLE "Author" ( + "id" serial PRIMARY KEY NOT NULL, + "name" text NOT NULL +); +--> statement-breakpoint +CREATE TABLE "Books" ( + "id" serial PRIMARY KEY NOT NULL, + "title" text NOT NULL, + "isbn" text, + "year" integer, + "authorId" integer NOT NULL, + CONSTRAINT "Books_isbn_unique" UNIQUE("isbn") +); +--> statement-breakpoint +ALTER TABLE "Books" ADD CONSTRAINT "Books_authorId_Author_id_fk" FOREIGN KEY ("authorId") REFERENCES "public"."Author"("id") ON DELETE no action ON UPDATE no action; \ No newline at end of file diff --git a/packages/database/drizzle/meta/0000_snapshot.json b/packages/database/drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000..3e325a7 --- /dev/null +++ b/packages/database/drizzle/meta/0000_snapshot.json @@ -0,0 +1,109 @@ +{ + "id": "484b2c89-0261-48d8-a848-42e186da63f1", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.Author": { + "name": "Author", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.Books": { + "name": "Books", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isbn": { + "name": "isbn", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "year": { + "name": "year", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "authorId": { + "name": "authorId", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "Books_authorId_Author_id_fk": { + "name": "Books_authorId_Author_id_fk", + "tableFrom": "Books", + "tableTo": "Author", + "columnsFrom": [ + "authorId" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "Books_isbn_unique": { + "name": "Books_isbn_unique", + "nullsNotDistinct": false, + "columns": [ + "isbn" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/packages/database/drizzle/meta/_journal.json b/packages/database/drizzle/meta/_journal.json new file mode 100644 index 0000000..c096951 --- /dev/null +++ b/packages/database/drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1777463823899, + "tag": "0000_needy_cardiac", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/packages/database/src/schema.ts b/packages/database/src/schema.ts index ee50ea1..d80975a 100644 --- a/packages/database/src/schema.ts +++ b/packages/database/src/schema.ts @@ -8,9 +8,11 @@ export const authors = pgTable("Author", { export const books = pgTable("Books", { id: serial("id").primaryKey(), title: text("title").notNull(), - isbn: text("isbn").unique(), + isbn: text("isbn").unique().notNull(), year: integer("year"), - authorId: integer("authorId").references(() => authors.id).notNull(), + authorId: integer("authorId") + .references(() => authors.id) + .notNull(), }); export type Author = typeof authors.$inferSelect; diff --git a/packages/database/tsconfig.json b/packages/database/tsconfig.json index 1ebafbd..cdfb697 100644 --- a/packages/database/tsconfig.json +++ b/packages/database/tsconfig.json @@ -4,6 +4,13 @@ "outDir": "./dist", "rootDir": "." }, - "include": ["src/**/*.ts", "seed.ts"], - "exclude": ["node_modules", "generated", "dist"] -} + "include": [ + "src/**/*.ts", + "seed.ts" + ], + "exclude": [ + "node_modules", + "generated", + "dist" + ] +} \ No newline at end of file diff --git a/packages/web/.DS_Store b/packages/web/.DS_Store new file mode 100644 index 0000000..9a874b5 Binary files /dev/null and b/packages/web/.DS_Store differ diff --git a/packages/web/package.json b/packages/web/package.json index 3aba330..205eb7c 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -4,22 +4,31 @@ "private": true, "type": "module", "scripts": { - "dev": "next dev", "build": "next build", + "dev": "next dev", + "lint": "biome check .", "start": "next start", - "lint": "biome check ." + "test": "vitest" }, "dependencies": { - "next": "16.2.3", - "react": "19.2.5", - "react-dom": "19.2.5", "@repo/database": "workspace:*", - "swagger-ui-react": "5.32.2" + "next": "16.2.3", + "react": "19.2.7", + "react-dom": "19.2.7", + "swagger-ui-react": "5.32.2", + "zod": "^4.3.6" }, "devDependencies": { + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "16.3.2", + "@testing-library/user-event": "^14.6.1", "@types/node": "25.6.0", "@types/react": "19.2.14", "@types/react-dom": "19.2.3", - "typescript": "6.0.2" + "@vitejs/plugin-react": "^6.0.3", + "jsdom": "^29.1.1", + "react": "link: @testing-library/react", + "typescript": "6.0.2", + "vitest": "^4.1.9" } -} +} \ No newline at end of file diff --git a/packages/web/src/app/api/books/[id]/route.ts b/packages/web/src/app/api/books/[id]/route.ts index b7091f2..9973082 100644 --- a/packages/web/src/app/api/books/[id]/route.ts +++ b/packages/web/src/app/api/books/[id]/route.ts @@ -1,20 +1,69 @@ -import { db, books } from "@repo/database"; +import { books, db } from "@repo/database"; import { eq } from "drizzle-orm"; -import { NextResponse, NextRequest } from "next/server"; +import { type NextRequest, NextResponse } from "next/server"; +import type * as z from "zod"; +import { schema } from "../route"; -export async function DELETE(_req: NextRequest, ctx: RouteContext<'/api/books/[id]'>) { - try { - const { id } = await ctx.params; - const bookId = Number(id); +type Body = z.infer; - const deletedBook = await db.delete(books).where(eq(books.id, bookId)).returning(); +export async function GET(_req: NextRequest, ctx: RouteContext<"/api/books/[id]">) { + try { + const { id } = await ctx.params; + const bookId = Number(id); - if (deletedBook.length === 0) { - return NextResponse.json({ error: "Buch existiert nicht" }, { status: 404 }) - }; - return NextResponse.json({ message: "Erfolgreich gelöscht" }, { status: 200 }); + const getBook = await db.select().from(books).where(eq(books.id, bookId)); + return NextResponse.json(getBook, { statusText: "Gesuchtes Buch" }); + } catch { + return NextResponse.json({ error: "Buch nicht gefunden" }, { status: 404 }); + } +} + +export async function DELETE(_req: NextRequest, ctx: RouteContext<"/api/books/[id]">) { + try { + const { id } = await ctx.params; + const bookId = Number(id); + + const deletedBook = await db.delete(books).where(eq(books.id, bookId)).returning(); - } catch { - return NextResponse.json({ error: "Interner Serverfehler" }, { status: 500 }); + if (deletedBook.length === 0) { + return NextResponse.json({ error: "Buch existiert nicht" }, { status: 404 }); } + return NextResponse.json({ message: "Erfolgreich gelöscht" }, { status: 200 }); + } catch { + return NextResponse.json({ error: "Interner Serverfehler" }, { status: 500 }); + } +} + +export async function PUT(_req: NextRequest, ctx: RouteContext<"/api/books/[id]">) { + const { id } = await ctx.params; + const bookId = Number(id); + + const body: Body = await _req.json(); + const { title, authorId, isbn, year } = body; + try { + const data: Body = { + title, + authorId, + isbn, + year, + }; + + const result = schema.safeParse(data, { reportInput: true }); + console.log(result); + + if (!result.success) { + return NextResponse.json({ error: "Validation Error" }, { status: 400 }); + } + + const updatedBook = await db + .update(books) + .set(result.data) + .where(eq(books.id, bookId)) + .returning(); + + return NextResponse.json(updatedBook, { status: 200 }); + } catch (error) { + console.log(error); + return NextResponse.json({ error: "Buch existiert nicht" }, { status: 404 }); + } } diff --git a/packages/web/src/app/api/books/route.ts b/packages/web/src/app/api/books/route.ts index b3063f0..df3c300 100644 --- a/packages/web/src/app/api/books/route.ts +++ b/packages/web/src/app/api/books/route.ts @@ -1,30 +1,102 @@ -import { db, books, authors } from "@repo/database"; -import { eq } from "drizzle-orm"; +import { authors, books, db } from "@repo/database"; +import { count, eq, ilike, or } from "drizzle-orm"; import { NextResponse } from "next/server"; +import * as z from "zod"; -export async function GET() { - try { - const allBooks = await db.select().from(books).innerJoin(authors, eq(books.authorId, authors.id)); - return NextResponse.json(allBooks, { statusText: "Liste der Bücher" }); - } catch { - return NextResponse.json({ error: "Failed to fetch books" }, { status: 500 }); +export const schema = z.object({ + title: z.string().min(1), + authorId: z.number().int().positive(), + isbn: z.string().min(13).max(13), + year: z.number().int().min(1000).max(9999).optional(), +}); + +type Body = z.infer; + +export async function GET(req: Request) { + const { searchParams } = new URL(req.url); + const query = searchParams.get("q"); + const authorId = searchParams.get("authorId"); + const page = Number(searchParams.get("page")); + const pageSize = + Number(searchParams.get("pageSize")) <= 100 === true + ? Number(searchParams.get("pageSize")) + : 100; + const offset = (page - 1) * pageSize; + console.log("page:", page, "pageSize:", pageSize, "offset:", offset); + console.log(query, authorId); + const parsedAuthorId = Number(authorId); + try { + if ((query && query?.length > 0) || (parsedAuthorId && parsedAuthorId > 0)) { + const allBooks = await db + .select() + .from(books) + .where(or(ilike(books.title, `%${query}%`), eq(books.authorId, parsedAuthorId))) + .innerJoin(authors, eq(books.authorId, authors.id)) + .orderBy(books.authorId, books.year) + .limit(pageSize) + .offset(offset); + + const totalBooks = await db + .select({ count: count() }) + .from(books) + .where(or(ilike(books.title, `%${query}%`), eq(books.authorId, parsedAuthorId))); + console.log(totalBooks); + return NextResponse.json( + { data: allBooks, total: totalBooks[0].count ?? 0 }, + { statusText: "Liste der gesuchten Bücher" }, + ); + } else { + const allBooks = await db + .select() + .from(books) + .innerJoin(authors, eq(books.authorId, authors.id)) + .orderBy(books.authorId, books.year) + .limit(pageSize) + .offset(offset); + + const totalBooks = await db.select({ count: count() }).from(books); + console.log(totalBooks); + + return NextResponse.json( + { data: allBooks, total: totalBooks[0].count ?? 0 }, + { statusText: "Liste aller Bücher" }, + ); } -}; + } catch { + return NextResponse.json({ error: "Failed to fetch books" }, { status: 500 }); + } +} export async function POST(request: Request) { - try { - const body = await request.json(); - const { title, authorId, isbn, year } = body; - - const newBook = await db.insert(books).values({ - title, - authorId, - isbn, - year, - }); - - return NextResponse.json(newBook, { status: 201 }); - } catch { - return NextResponse.json({ error: "Ungültige Eingabe" }, { status: 400 }); + try { + const body: Body = await request.json(); + const { title, authorId, isbn, year } = body; + + const data: Body = { + title, + authorId, + isbn, + year, + }; + + const result = schema.safeParse(data, { reportInput: true }); + console.log(schema.safeParse(data)); + + if (!result.success) { + return NextResponse.json({ error: "Validation Error" }, { status: 400 }); } -}; + + const [newBook] = await db.insert(books).values(result.data).returning(); + + const [newBookWithAuthor] = await db + .select() + .from(books) + .innerJoin(authors, eq(books.authorId, authors.id)) + .where(eq(books.id, newBook.id)); + + return NextResponse.json(newBookWithAuthor, { status: 201 }); + } catch (error) { + console.log(error); + return NextResponse.json({ error: "Author oder Title fehlen" }, { status: 400 }); + } +} diff --git a/packages/web/src/app/books/page.css b/packages/web/src/app/books/page.css new file mode 100644 index 0000000..0599de5 --- /dev/null +++ b/packages/web/src/app/books/page.css @@ -0,0 +1,42 @@ +.books { + width: 75%; + margin-right: 20px; +} + +.book { + background-color: lightcyan; + box-shadow: 5px 5px 5px lightgray; + margin-bottom: 7.5px; +} + +.updateForm { + width: 100%; +} + +.updateFormField { + width: 100%; + display: flex; + flex-wrap: wrap; +} + +p { + margin-bottom: 0; +} + +.search { + display: flex; + justify-content: center; + align-items: center; + flex-direction: row; + width: 100%; +} + +.searchButton { + margin-left: 10px; +} + +.pageSizeSelect { + width: 100%; + display: flex; + margin-bottom: 10px; +} diff --git a/packages/web/src/app/books/page.test.tsx b/packages/web/src/app/books/page.test.tsx new file mode 100644 index 0000000..41e0e6c --- /dev/null +++ b/packages/web/src/app/books/page.test.tsx @@ -0,0 +1,84 @@ +import { render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { authorTestList, bookTestList } from "../../lib/bookTestList"; +import BooksPage from "./page"; + +beforeEach(() => { + global.fetch = vi.fn((url) => { + + // if (String(url).includes("/api/authors")) { + // console.log("oben", String(url)); + // return Promise.resolve( + // new Response( + // JSON.stringify({ + // data: authorTestList, + // }), + // { status: 200 } + // ), + // ); + // } + + if (String(url).includes("/api/books")) { + console.log("unten", String(url)); + return Promise.resolve( + new Response( + JSON.stringify({ + data: bookTestList, + total: 1, + }), + { status: 200 } + ), + ); + } + + return Promise.resolve(new Response(JSON.stringify([]), { status: 200 })); + }) as typeof fetch; +}); + +describe("BooksPage", () => { + it("zeigt Bücher aus der API an", async () => { + render(); + expect(await screen.findByText("Test-Buch")).toBeInTheDocument(); + }); +}); + +describe("POST-Test", () => { + it("ruft fetch mit POST auf", async () => { + const fetchSpy = vi.spyOn(globalThis, 'fetch'); + fetchSpy + .mockResolvedValueOnce(new Response(JSON.stringify({ data: authorTestList }), { status: 200 })) + // .mockResolvedValueOnce(new Response(JSON.stringify({ data: bookTestList, total: 1 }), { status: 200 })) + .mockResolvedValueOnce( + new Response(JSON.stringify({ + success: true, + data: { + title: "Neues Buch", + authorId: 1, + isbn: "234523462546245", + year: 2026 + }, + }), + { status: 200 } + ) + ); + + console.log("authorTestList", authorTestList); + console.log("isArray", Array.isArray(authorTestList)); + + + render(); + + const titleInput = await screen.findByLabelText("Title"); + + const user = userEvent.setup(); + await user.type(titleInput, "Neues Buch"); + await user.click(screen.getByRole("button", { name: "Add" })); + + expect(fetchSpy).toHaveBeenCalled() + expect(fetchSpy).toHaveBeenCalledWith( + expect.stringContaining("/api/books"), + expect.objectContaining({ method: "POST" }) + ); + }); +}); diff --git a/packages/web/src/app/books/page.tsx b/packages/web/src/app/books/page.tsx index 83958a7..7df7599 100644 --- a/packages/web/src/app/books/page.tsx +++ b/packages/web/src/app/books/page.tsx @@ -1,8 +1,385 @@ +"use client"; + +import { + Accordion, + AccordionDetails, + AccordionSummary, + FormControl, + InputLabel, + MenuItem, + Select, + type SelectChangeEvent, + TextField, + Typography, +} from "@mui/material"; +import { useSearchParams } from "next/navigation"; +import { startTransition, useEffect, useOptimistic, useState } from "react"; +import { toast } from "sonner"; +import { BookForm } from "../../componentes/BookForm/BookForm"; +import { Button } from "../../componentes/ui/Button"; +import { useDebounce } from "../../lib/useDebounce"; +import type { Author } from "../interfaces/Author"; +import type { BookResponse } from "../interfaces/BookRespone"; +import type { BookWithAuthor } from "../interfaces/BookWithAuthor"; +import "./page.css"; + export default function BooksPage() { + const [allBooks, setAllBooks] = useState([]); + const [allAuthors, setAllAuthors] = useState([]); + const [isOpen, setIsOpen] = useState(false); + const [query, setQuery] = useState(""); + const debouncedQuery = useDebounce(query, 750); + const [authorIdSearch, setAuthorIdSearch] = useState(""); + const [page, setPage] = useState("1"); + const [pageSize, setPageSize] = useState("20"); + const [totalPages, setTotalPages] = useState(1); + const [optimisticBooksCreate, createBookOptimistic] = useOptimistic(allBooks, createOptimistic); + const [optimisticBooksUpdate, updateBookOptimistic] = useOptimistic(allBooks, updateOptimistic); + const [optimisticBooksRemove, removeBookOptimistic] = useOptimistic(allBooks, deleteOptimistic); + + let pages = []; + const pageSizeValue = [5, 20, 50, 75, 100]; + + // Autoren laden + useEffect(() => { + async function authorFetch() { + const res = await fetch("/api/authors"); + const data: Author[] = await res.json(); + setAllAuthors(data); + console.log("Autoren", data); + } + authorFetch(); + }, []); + + const params = useSearchParams(); + const q = params?.get("q") || ""; + const authorId = params?.get("authorId") || ""; + const pageUrl = params?.get("page") || "1"; + const pageSizeUrl = params?.get("pageSize") || "20"; + + useEffect(() => { + if (q || authorId || pageUrl || pageSizeUrl) { + setQuery(q); + setAuthorIdSearch(authorId); + setPage(pageUrl); + setPageSize(pageSizeUrl); + } + }, [q, authorId, pageUrl, pageSizeUrl]); + + const searchValue = debouncedQuery || q || ""; + const searchAuthorId = authorIdSearch || authorId || ""; + const searchPage = page || pageUrl || 1; + const searchPageSize = pageSize || pageSizeUrl || 20; + + const handlePageUpdate = () => { + pages = Array.from({ length: totalPages }, (_, i) => i + 1); + }; + + // Bücher laden + useEffect(() => { + async function bookFetch() { + const res = await fetch( + `/api/books?q=${searchValue}&authorId=${searchAuthorId}&page=${searchPage}&pageSize=${searchPageSize}`, + ); + const data: BookResponse = await res.json(); + setAllBooks(data.data); + console.log("data", data); + console.log(res); + setTotalPages(Math.ceil(data.total / Number(pageSize))); + toast.info(`Anzahl der Bücher: ${data.total}`, { id: "anzahlBücher_id" }); + } + bookFetch(); + toast.promise(bookFetch(), { + loading: "Bücher werden geladen...", + success: "Bücher geladen.", + error: (err) => `${err.message}`, + }); + }, [searchValue, searchAuthorId, searchPage, searchPageSize, pageSize]); + + pages = Array.from({ length: totalPages }, (_, i) => i + 1); + + // Bücher nach Suche laden + async function handleSearch() { + const res = await fetch( + `/api/books?q=${searchValue}&authorId=${searchAuthorId}&page=${searchPage}&pageSize=${searchPageSize}`, + ); + console.log(res); + const data: BookResponse = await res.json(); + console.log("data: ", data); + if (Array.isArray(data.data) !== true) return; + setAllBooks(data.data); + setTotalPages(Math.ceil(data.total / Number(pageSize))); + handlePageUpdate(); + toast.info(`Anzahl der Bücher: ${data.total}`); + } + + // Büchersuche zurücksetzen + async function resetSearch() { + const res = await fetch(`/api/books?page=${page}&pageSize=${pageSize}`); + const data: BookResponse = await res.json(); + setAllBooks(data.data); + setQuery(""); + setAuthorIdSearch(""); + setPageSize("20"); + setPage("1"); + setTotalPages(Math.ceil(data.total / Number(pageSize))); + handlePageUpdate(); + toast.info(`Es werden wieder alle ${data.total} Bücher angezeigt.`); + } + + // Neues Buch hinzufügen + function createOptimistic(currentBooks: BookWithAuthor[], data: BookWithAuthor) { + + } + + async function createBook(_event: React.MouseEvent, data: BookWithAuthor) { + console.log("createBook", data); + const _res = await fetch("/api/books", { + method: "POST", + body: JSON.stringify({ + title: data.Books.title, + authorId: data.Books.authorId, + isbn: data.Books.isbn, + year: Number(data.Books.year) > 0 ? Number(data.Books.year) : undefined, + }), + }); + if (_res.ok) { + toast.success("Das Buch wurde hinzugefügt", { description: `${data.Books.title}` }); + } else { + toast.error("Das Buch konnte nicht hinzugefügt werden."); + } + + const res = await fetch(`/api/books?page=${page}&pageSize=${pageSize}`); + console.log(res); + const newBook: BookResponse = await res.json(); + setAllBooks(newBook.data); + if (res.ok) { + toast.info(`Anzahl der Bücher: ${newBook.total}`); + } + console.log(allBooks); + setTotalPages(Math.ceil(newBook.total / Number(pageSize))); + handlePageUpdate(); + } + + // Bestehendes Buch bearbeiten + function updateOptimistic(currentBooks: BookWithAuthor[], updatedBook: BookWithAuthor) { + return currentBooks.map((book) => { + if (book.Books.id === updatedBook.Books.id) { + return { ...book, Books: { ...book.Books, ...updatedBook.Books } }; + } else { + return book; + } + }); + }; + + async function updateBook(_event: React.MouseEvent, data: BookWithAuthor) { + startTransition(async () => { + updateBookOptimistic(data); + }); + setIsOpen(false); + console.log(data); + const _res = await fetch(`api/books/${data.Books.id}`, { + method: "PUT", + body: JSON.stringify({ + title: data.Books.title, + authorId: data.Books.authorId, + isbn: data.Books.isbn, + year: Number(data.Books.year) > 0 ? Number(data.Books.year) : undefined, + }), + }); + if (_res.ok) { + toast.success(`Das Buch wurde angepasst.`, { description: `${data.Books.title}` }); + } else { + toast.error("Das Buch konnte nicht angepasst werden.", { description: `${data.Books.title}` }); + } + + const res = await fetch(`/api/books?page=${page}&pageSize=${pageSize}`); + console.log(res); + const updatedBook: BookResponse = await res.json(); + setAllBooks(updatedBook.data); + setTotalPages(Math.ceil(updatedBook.total / Number(pageSize))); + handlePageUpdate(); + } + + function handleOnSubmit(event: React.MouseEvent, data: BookWithAuthor) { + updateBook(event, data); + console.log("updateBookData", data); + } + + // Einzelne Bücher löschen + function deleteOptimistic(currentBooks: BookWithAuthor[], bookIdToDelete: number) { + return currentBooks.filter((book) => book.Books.id !== bookIdToDelete); + } + + async function deleteBook(bookId: number) { + startTransition(async () => { + removeBookOptimistic(bookId); + }); + const _res = await fetch(`api/books/${bookId}`, { + method: "DELETE", + }); + if (_res.ok) { + const res = await fetch(`/api/books?page=${page}&pageSize=${pageSize}`); + const data: BookResponse = await res.json(); + setAllBooks(data.data); + setTotalPages(Math.ceil(data.total / Number(pageSize))); + handlePageUpdate(); + toast.success("Das Buch wurde gelöscht."); + } else { + toast.error(`Das Löschen ist fehlgeschlagen.`); + } + } + + const handlePageSize = (event: SelectChangeEvent) => { + setPageSize(event.target.value as string); + setPage("1"); + }; + + const handlePageNumber = (event: SelectChangeEvent) => { + setPage(event.target.value as string); + }; + return (
-

Bücher

-

Diese Seite wird von dir implementiert. Viel Erfolg!

+
+ setQuery(event.target.value)} + autoComplete="off" + /> +
+ + Author + + + +
+ + +
+
+ +
+ + Page + + +
+ + Page Size + + +
+ +
+

Bücher

+

Neues Buch

+
+
+ {/* Liste der Bücher */} +
+ {optimisticBooksRemove?.length === 0 ? ( +

Keine Bücher gefunden

+ ) : ( + optimisticBooksRemove?.map((book) => ( +
+ + + +

{book.Books.title}

+
+
+ +

+ Author: {book.Author.name} +

+ + + + + + {/* Update FormFields */} + +
+
+
+ )) + )} +
+ + {/* Formular zum Hinzufügen von Büchern */} +
+ +
+
); } diff --git a/packages/web/src/app/globals.css b/packages/web/src/app/globals.css index 6d71cb0..172a660 100644 --- a/packages/web/src/app/globals.css +++ b/packages/web/src/app/globals.css @@ -48,7 +48,7 @@ nav .nav-brand { h1 { font-size: 1.8rem; - margin-bottom: 16px; + margin-bottom: 5px; color: #111; } @@ -132,6 +132,9 @@ button { font-size: 1rem; font-family: inherit; cursor: pointer; + width: 100px; + margin-right: 5px; + margin-bottom: 10px; } button.primary { diff --git a/packages/web/src/app/interfaces/Author.ts b/packages/web/src/app/interfaces/Author.ts new file mode 100644 index 0000000..ff23fd2 --- /dev/null +++ b/packages/web/src/app/interfaces/Author.ts @@ -0,0 +1,4 @@ +export interface Author { + id: string; + name: string; +} diff --git a/packages/web/src/app/interfaces/BookFormProps.ts b/packages/web/src/app/interfaces/BookFormProps.ts new file mode 100644 index 0000000..d488c6b --- /dev/null +++ b/packages/web/src/app/interfaces/BookFormProps.ts @@ -0,0 +1,10 @@ +import type { Author } from "./Author"; +import type { BookInitialValues } from "./BookInitialValues"; +import type { BookWithAuthor } from "./BookWithAuthor"; + +export interface BookFormProps { + initialValues?: BookInitialValues; + authors: Author[]; + onSubmit?: (event: React.MouseEvent, data: BookWithAuthor) => Promise | void; + submitLabel?: string; +} diff --git a/packages/web/src/app/interfaces/BookInitialValues.ts b/packages/web/src/app/interfaces/BookInitialValues.ts new file mode 100644 index 0000000..4faad7d --- /dev/null +++ b/packages/web/src/app/interfaces/BookInitialValues.ts @@ -0,0 +1,7 @@ +export interface BookInitialValues { + id?: number; + title?: string; + authorId?: number; + isbn?: string; + year?: number; +} diff --git a/packages/web/src/app/interfaces/BookRespone.ts b/packages/web/src/app/interfaces/BookRespone.ts new file mode 100644 index 0000000..cc567c6 --- /dev/null +++ b/packages/web/src/app/interfaces/BookRespone.ts @@ -0,0 +1,6 @@ +import type { BookWithAuthor } from "./BookWithAuthor"; + +export interface BookResponse { + data: BookWithAuthor[]; + total: number; +} diff --git a/packages/web/src/app/interfaces/BookWithAuthor.ts b/packages/web/src/app/interfaces/BookWithAuthor.ts new file mode 100644 index 0000000..180d7ef --- /dev/null +++ b/packages/web/src/app/interfaces/BookWithAuthor.ts @@ -0,0 +1,12 @@ +import type { Author } from "./Author"; + +export interface BookWithAuthor { + Books: { + id?: number; + title: string; + isbn?: string; + year?: number; + authorId: number; + }; + Author: Author; +} diff --git a/packages/web/src/app/interfaces/ButtonProps.ts b/packages/web/src/app/interfaces/ButtonProps.ts new file mode 100644 index 0000000..74abb25 --- /dev/null +++ b/packages/web/src/app/interfaces/ButtonProps.ts @@ -0,0 +1,7 @@ +export interface ButtonProps { + children: React.ReactNode; + variant: "primary" | "submit" | "danger"; + type?: "button" | "submit"; + onClick?: React.MouseEventHandler; + disabled?: true | false; +} diff --git a/packages/web/src/app/layout.tsx b/packages/web/src/app/layout.tsx index b06bf17..aa9bc82 100644 --- a/packages/web/src/app/layout.tsx +++ b/packages/web/src/app/layout.tsx @@ -1,10 +1,11 @@ import type { Metadata } from "next"; import Link from "next/link"; +import { Toaster } from "../componentes/ui/sonner"; import "./globals.css"; export const metadata: Metadata = { title: "Fullstack Challenge", - description: "Buchverwaltung – Fullstack Challenge", + description: "Buchverwaltung - Fullstack Challenge", }; export default function RootLayout({ children }: { children: React.ReactNode }) { @@ -20,6 +21,10 @@ export default function RootLayout({ children }: { children: React.ReactNode }) Bücher API Docs +
{children}
diff --git a/packages/web/src/componentes/BookForm/BookForm.tsx b/packages/web/src/componentes/BookForm/BookForm.tsx new file mode 100644 index 0000000..235c77b --- /dev/null +++ b/packages/web/src/componentes/BookForm/BookForm.tsx @@ -0,0 +1,100 @@ +"use client"; + +import { Box, FormControl, InputLabel, MenuItem, Select, TextField } from "@mui/material"; +import { useState } from "react"; +import type { BookFormProps } from "../../app/interfaces/BookFormProps"; +import { Button } from "../ui/Button"; +import "./bookForm.css"; + +export function BookForm({ + initialValues, + authors, + onSubmit, + submitLabel = "Speichern", +}: BookFormProps) { + const [title, setTitle] = useState(initialValues?.title ?? ""); + const [authorId, setAuthorId] = useState(initialValues?.authorId ?? ""); + const [isbn, setIsbn] = useState(initialValues?.isbn ?? ""); + const [year, setYear] = useState(initialValues?.year ?? ""); + + const handleEmptyFields = () => { + if (!initialValues) { + setTitle(""); + setAuthorId(""); + setIsbn(""); + setYear(""); + } + }; + + return ( +
+ + setTitle(event.target.value)} + autoComplete="off" + required + /> +
+ + + Author + + +
+ + setIsbn(event.target.value)} + autoComplete="off" + required + /> + + +
+ + setYear(event.target.value)} + autoComplete="off" + /> +
required *
+
+ + + +
+ ); +} diff --git a/packages/web/src/componentes/BookForm/bookForm.css b/packages/web/src/componentes/BookForm/bookForm.css new file mode 100644 index 0000000..51aad92 --- /dev/null +++ b/packages/web/src/componentes/BookForm/bookForm.css @@ -0,0 +1,3 @@ +.isbnHilfstext { + font-size: 12px; +} diff --git a/packages/web/src/componentes/ui/Button.tsx b/packages/web/src/componentes/ui/Button.tsx new file mode 100644 index 0000000..1c22f9c --- /dev/null +++ b/packages/web/src/componentes/ui/Button.tsx @@ -0,0 +1,9 @@ +import type { ButtonProps } from "../../app/interfaces/ButtonProps"; + +export const Button: React.FC = ({ children, variant, type, onClick, disabled }) => { + return ( + + ); +}; diff --git a/packages/web/src/componentes/ui/sonner.tsx b/packages/web/src/componentes/ui/sonner.tsx new file mode 100644 index 0000000..61261b5 --- /dev/null +++ b/packages/web/src/componentes/ui/sonner.tsx @@ -0,0 +1,45 @@ +"use client" + +import { + CircleCheckIcon, + InfoIcon, + Loader2Icon, + OctagonXIcon, + TriangleAlertIcon +} from "lucide-react"; +import { useTheme } from "next-themes"; +import { Toaster as Sonner, type ToasterProps } from "sonner"; + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme(); + + return ( + , + info: , + warning: , + error: , + loading: + }} + style={ + { + "--normal-bg": "var(--popover)", + "--normal-text": "var(--popover-foreground)", + "--normal-border": "var(--border)", + "--border-radius": "var(--radius)", + } as React.CSSProperties + } + toastOptions={{ + classNames: { + toast: "cn-toast", + }, + }} + {...props} + /> + ) +} + +export { Toaster } diff --git a/packages/web/src/css.d.ts b/packages/web/src/css.d.ts new file mode 100644 index 0000000..5048746 --- /dev/null +++ b/packages/web/src/css.d.ts @@ -0,0 +1,4 @@ +declare module "*.css" { + const content: Record; + export default content; +} \ No newline at end of file diff --git a/packages/web/src/lib/bookTestList.ts b/packages/web/src/lib/bookTestList.ts new file mode 100644 index 0000000..2013064 --- /dev/null +++ b/packages/web/src/lib/bookTestList.ts @@ -0,0 +1,18 @@ +import type { BookWithAuthor } from "../app/interfaces/BookWithAuthor"; + +export const bookTestList: BookWithAuthor = [ + { + Books: { + id: 1, + title: "Test-Buch", + authorId: 1, + isbn: "1353246437563", + year: 2026, + }, + Author: { id: 1, name: "Autor" } + } +] + +export const authorTestList = [ + { id: 1, name: "Autor" } +] \ No newline at end of file diff --git a/packages/web/src/lib/useDebounce.ts b/packages/web/src/lib/useDebounce.ts new file mode 100644 index 0000000..35f6943 --- /dev/null +++ b/packages/web/src/lib/useDebounce.ts @@ -0,0 +1,19 @@ +"use client"; + +import { useEffect, useState } from "react"; + +export function useDebounce(value: T, delay: number): T { + const [debouncedValue, setDebouncedValue] = useState(value); + + useEffect(() => { + const handler = setTimeout(() => { + setDebouncedValue(value); + }, delay); + + return () => { + clearTimeout(handler); + }; + }, [value, delay]); + + return debouncedValue; +} diff --git a/packages/web/src/vitest.d.ts b/packages/web/src/vitest.d.ts new file mode 100644 index 0000000..9a41425 --- /dev/null +++ b/packages/web/src/vitest.d.ts @@ -0,0 +1 @@ +import "@testing-library/jest-dom/vitest"; \ No newline at end of file diff --git a/packages/web/tsconfig.json b/packages/web/tsconfig.json index 7995dbf..b3bbc01 100644 --- a/packages/web/tsconfig.json +++ b/packages/web/tsconfig.json @@ -1,14 +1,29 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "strict": true, "jsx": "preserve", "module": "ESNext", "moduleResolution": "bundler", - "plugins": [{ "name": "next" }], + "plugins": [ + { + "name": "next" + } + ], "paths": { - "@/*": ["./src/*"] - } + "@/*": [ + "./src/*" + ] + }, + "types": ["node", "react", "vitest/globals"] }, - "include": ["src/**/*.ts", "src/**/*.tsx", "next-env.d.ts", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "next-env.d.ts", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/packages/web/vitest.config.ts b/packages/web/vitest.config.ts new file mode 100644 index 0000000..7303129 --- /dev/null +++ b/packages/web/vitest.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from "vitest/config"; +import react from "@vitejs/plugin-react"; + +export default defineConfig({ + plugins: [react()], + test: { + environment: "jsdom", + setupFiles: ["./vitest.setup.ts"], + }, +}); diff --git a/packages/web/vitest.setup.ts b/packages/web/vitest.setup.ts new file mode 100644 index 0000000..9a41425 --- /dev/null +++ b/packages/web/vitest.setup.ts @@ -0,0 +1 @@ +import "@testing-library/jest-dom/vitest"; \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3ca6f6f..bd8e541 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,12 +8,36 @@ importers: .: dependencies: + '@emotion/react': + specifier: ^11.14.0 + version: 11.14.0(@types/react@19.2.14)(react@19.2.7) + '@emotion/styled': + specifier: ^11.14.1 + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7) + '@mui/icons-material': + specifier: ^9.0.0 + version: 9.0.0(@mui/material@9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@types/react@19.2.14)(react@19.2.7) + '@mui/material': + specifier: ^9.0.0 + version: 9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) drizzle-orm: specifier: 0.44.2 - version: 0.44.2(@electric-sql/pglite@0.4.1)(@prisma/client@7.7.0(prisma@7.7.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(typescript@6.0.2))(@types/pg@8.15.4)(mysql2@3.15.3)(pg@8.16.0)(postgres@3.4.7)(prisma@7.7.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)) + version: 0.44.2(@types/pg@8.15.4)(pg@8.16.0) + lucide-react: + specifier: ^1.27.0 + version: 1.27.0(react@19.2.7) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7) pg: specifier: 8.16.0 version: 8.16.0 + pnpm: + specifier: ^10.33.2 + version: 10.33.2 + sonner: + specifier: ^2.0.7 + version: 2.0.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7) devDependencies: '@biomejs/biome': specifier: 2.4.11 @@ -24,6 +48,9 @@ importers: drizzle-kit: specifier: 0.31.1 version: 0.31.1 + typescript: + specifier: ^6.0.3 + version: 6.0.3 packages/database: dependencies: @@ -32,7 +59,7 @@ importers: version: 16.5.0 drizzle-orm: specifier: 0.44.2 - version: 0.44.2(@electric-sql/pglite@0.4.1)(@prisma/client@7.7.0(prisma@7.7.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(typescript@6.0.2))(@types/pg@8.15.4)(mysql2@3.15.3)(pg@8.16.0)(postgres@3.4.7)(prisma@7.7.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)) + version: 0.44.2(@types/pg@8.15.4)(pg@8.16.0) pg: specifier: 8.16.0 version: 8.16.0 @@ -57,17 +84,29 @@ importers: version: link:../database next: specifier: 16.2.3 - version: 16.2.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 16.2.3(babel-plugin-macros@3.1.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: - specifier: 19.2.5 - version: 19.2.5 + specifier: 19.2.7 + version: 19.2.7 react-dom: - specifier: 19.2.5 - version: 19.2.5(react@19.2.5) + specifier: 19.2.7 + version: 19.2.7(react@19.2.7) swagger-ui-react: specifier: 5.32.2 - version: 5.32.2(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 5.32.2(@types/react@19.2.14)(debug@4.4.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + zod: + specifier: ^4.3.6 + version: 4.3.6 devDependencies: + '@testing-library/jest-dom': + specifier: ^6.9.1 + version: 6.9.1 + '@testing-library/react': + specifier: 16.3.2 + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + '@testing-library/user-event': + specifier: ^14.6.1 + version: 14.6.1(@testing-library/dom@10.4.1) '@types/node': specifier: 25.6.0 version: 25.6.0 @@ -77,12 +116,68 @@ importers: '@types/react-dom': specifier: 19.2.3 version: 19.2.3(@types/react@19.2.14) + '@vitejs/plugin-react': + specifier: ^6.0.3 + version: 6.0.3(vite@8.1.0(@types/node@25.6.0)(esbuild@0.27.7)(tsx@4.21.0)) + jsdom: + specifier: ^29.1.1 + version: 29.1.1 typescript: specifier: 6.0.2 version: 6.0.2 + vitest: + specifier: ^4.1.9 + version: 4.1.9(@types/node@25.6.0)(jsdom@29.1.1)(vite@8.1.0(@types/node@25.6.0)(esbuild@0.27.7)(tsx@4.21.0)) packages: + '@adobe/css-tools@4.5.0': + resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + + '@asamuzakjp/css-color@5.1.11': + resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + + '@asamuzakjp/dom-selector@7.1.1': + resolution: {integrity: sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + + '@asamuzakjp/generational-cache@1.0.1': + resolution: {integrity: sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + + '@asamuzakjp/nwsapi@2.3.9': + resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/runtime-corejs3@7.29.2': resolution: {integrity: sha512-Lc94FOD5+0aXhdb0Tdg3RUtqT6yWbI/BbFWvlaSJ3gAb9Ks+99nHRDKADVqC37er4eCB0fHyWT+y+K3QOvJKbw==} engines: {node: '>=6.9.0'} @@ -91,6 +186,18 @@ packages: resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@biomejs/biome@2.4.11': resolution: {integrity: sha512-nWxHX8tf3Opb/qRgZpBbsTOqOodkbrkJ7S+JxJAruxOReaDPPmPuLBAGQ8vigyUgo0QBB+oQltNEAvalLcjggA==} engines: {node: '>=14.21.3'} @@ -148,25 +255,114 @@ packages: cpu: [x64] os: [win32] + '@bramus/specificity@2.4.2': + resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} + hasBin: true + + '@csstools/color-helpers@6.1.0': + resolution: {integrity: sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==} + engines: {node: '>=20.19.0'} + + '@csstools/css-calc@3.2.1': + resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-color-parser@4.1.9': + resolution: {integrity: sha512-paQcIaOO53Rk5+YrBaBjm/SgrV4INImjo2BT1DtQRYr+XeTRbeAYlS+jxXp9drqvKmtFnWRJKIalDLhZZDu42A==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.1.5': + resolution: {integrity: sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==} + peerDependencies: + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true + + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} + '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@electric-sql/pglite-socket@0.1.1': - resolution: {integrity: sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw==} - hasBin: true + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + + '@emotion/cache@11.14.0': + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/is-prop-valid@1.4.0': + resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.14.0': + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/styled@11.14.1': + resolution: {integrity: sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==} peerDependencies: - '@electric-sql/pglite': 0.4.1 + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - '@electric-sql/pglite-tools@0.3.1': - resolution: {integrity: sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA==} + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} peerDependencies: - '@electric-sql/pglite': 0.4.1 + react: '>=16.8.0' - '@electric-sql/pglite@0.4.1': - resolution: {integrity: sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==} + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} - '@emnapi/runtime@1.9.2': - resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} @@ -620,11 +816,14 @@ packages: cpu: [x64] os: [win32] - '@hono/node-server@1.19.11': - resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} - engines: {node: '>=18.14.1'} + '@exodus/bytes@1.15.1': + resolution: {integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - hono: ^4 + '@noble/hashes': ^1.8.0 || ^2.0.0 + peerDependenciesMeta: + '@noble/hashes': + optional: true '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} @@ -779,8 +978,115 @@ packages: cpu: [x64] os: [win32] - '@kurkle/color@0.3.4': - resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@mui/core-downloads-tracker@9.0.0': + resolution: {integrity: sha512-uwQNGkhv0lf7ufxw6QXev77BW6pWbW+7uxYjU5+rfp4lBkFtMEgJCsarTM3Tn+i0lGx6+Ol2u88JdGXr0GDskA==} + + '@mui/icons-material@9.0.0': + resolution: {integrity: sha512-oDwyvI6LgjWRC9MBcSGvLkPud9S9ELgSBQFYxa1rYcZn6Br55dn22SyvsPDMsn0G8OndFk53iMT45W5mNqrogw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@mui/material': ^9.0.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/material@9.0.0': + resolution: {integrity: sha512-+VP/oQCDhDR87NQQgXnNBG8dwy6GNuQLnenS1pZvkbn2dKFSxRSRMybTpH9xUxXP+316mlYDy5CSbYtusnCWtw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@mui/material-pigment-css': ^9.0.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/material-pigment-css': + optional: true + '@types/react': + optional: true + + '@mui/private-theming@9.0.0': + resolution: {integrity: sha512-JtuZoaiCqwD6vjgYu6Xp3T7DZkrxJlgtDz5yESzhI34fEX5hHMh2VJUbuL9UOg8xrfIFMrq6dcYoH/7Zi4G0RA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/styled-engine@9.0.0': + resolution: {integrity: sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + + '@mui/system@9.0.0': + resolution: {integrity: sha512-YnC5Zg6j04IxiLc/boAKs0464jfZlLFVa7mf5E8lF0XOtZVUvG6R6gJK50lgUYdaaLdyLfxF6xR7LaPuEpeT/g==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + + '@mui/types@9.0.0': + resolution: {integrity: sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/utils@9.0.0': + resolution: {integrity: sha512-bQcqyg/gjULUqTuyUjSAFr6LQGLvtkNtDbJerAtoUn9kGZ0hg5QJiN1PLHMLbeFpe3te1831uq7GFl2ITokGdg==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 '@next/env@16.2.3': resolution: {integrity: sha512-ZWXyj4uNu4GCWQw9cjRxWlbD+33mcDszIo9iQxFnBX3Wmgq9ulaSJcl6VhuWx5pCWqqD+9W6Wfz7N0lM5lYPMA==} @@ -837,136 +1143,109 @@ packages: cpu: [x64] os: [win32] - '@prisma/client-runtime-utils@7.7.0': - resolution: {integrity: sha512-BLyd0UpFYOtyJFTHm7jS9vesHW7P83abibodQMiIofqjBKzDHQ1VAsQkdfvXyYDkPlONPfOTz7/rv3x/+CQqvQ==} - - '@prisma/client@7.7.0': - resolution: {integrity: sha512-5Ar4OsZpJ54s21sy5oDNNW9gQtd4NuxCaiM7+JDTOU07D6VvlpLjYzAVCMB1+JzokN+08dAVomlx+b7bhJd3ww==} - engines: {node: ^20.19 || ^22.12 || >=24.0} - peerDependencies: - prisma: '*' - typescript: '>=5.4.0' - peerDependenciesMeta: - prisma: - optional: true - typescript: - optional: true - - '@prisma/config@7.7.0': - resolution: {integrity: sha512-hmPI3tKLO2aP0Y5vugbjcnA9qqlfJndiT6ds4tw28U5hNHLWg+mHJEWAhjsSPgxjtmxhJ/EDIeIlyh+3Us0OPg==} - - '@prisma/debug@7.2.0': - resolution: {integrity: sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==} - - '@prisma/debug@7.7.0': - resolution: {integrity: sha512-12J62XdqCmpiwJHhHdQxZeY3ckVCWIFmcJP8hg5dPTceeiQ0wiojXGFYTluKqFQfu46fRLgb/rLALZMAx3+dTA==} + '@oxc-project/types@0.137.0': + resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==} - '@prisma/dev@0.24.3': - resolution: {integrity: sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg==} + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@prisma/engines-version@7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711': - resolution: {integrity: sha512-r51DLcJ8bDRSrBEJF3J4cinoWyGA7rfP2mG6lD90VqIbGNOkbfcLcXalSVjq5Y6brQS3vcjrq4GbyUb1Cb7vkw==} + '@rolldown/binding-android-arm64@1.1.3': + resolution: {integrity: sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] - '@prisma/engines@7.7.0': - resolution: {integrity: sha512-7fmcbT7HHXBq/b+3h/dO1JI3fd8l8q7erf7xP7pRprh58hmSSnG8mg9K3yjW3h9WaHWUwngVFpSxxxivaitQ2w==} + '@rolldown/binding-darwin-arm64@1.1.3': + resolution: {integrity: sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] - '@prisma/fetch-engine@7.7.0': - resolution: {integrity: sha512-TfyzveBQoK4xALzsTpVhB/0KG1N8zOK0ap+RnBMkzGUu3f98fnQ4QtXa2wlKPhsO2X8a3N5ugFQgcKNoHGmDfw==} + '@rolldown/binding-darwin-x64@1.1.3': + resolution: {integrity: sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] - '@prisma/get-platform@7.2.0': - resolution: {integrity: sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==} + '@rolldown/binding-freebsd-x64@1.1.3': + resolution: {integrity: sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] - '@prisma/get-platform@7.7.0': - resolution: {integrity: sha512-MEUNzvKxvYnJ7kgvd6oNRnMmmiGNS9TYLB2weMeIXplnHdL/UWEGnvavYGnN7KLJ2n0iI4dDAyzSkHI3c7AscQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.1.3': + resolution: {integrity: sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] - '@prisma/query-plan-executor@7.2.0': - resolution: {integrity: sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==} + '@rolldown/binding-linux-arm64-gnu@1.1.3': + resolution: {integrity: sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] - '@prisma/streams-local@0.1.2': - resolution: {integrity: sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg==} - engines: {bun: '>=1.3.6', node: '>=22.0.0'} + '@rolldown/binding-linux-arm64-musl@1.1.3': + resolution: {integrity: sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] - '@prisma/studio-core@0.27.3': - resolution: {integrity: sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw==} - engines: {node: ^20.19 || ^22.12 || >=24.0, pnpm: '8'} - peerDependencies: - '@types/react': ^18.0.0 || ^19.0.0 - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 + '@rolldown/binding-linux-ppc64-gnu@1.1.3': + resolution: {integrity: sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] - '@radix-ui/primitive@1.1.3': - resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + '@rolldown/binding-linux-s390x-gnu@1.1.3': + resolution: {integrity: sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + '@rolldown/binding-linux-x64-gnu@1.1.3': + resolution: {integrity: sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} - 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 + '@rolldown/binding-linux-x64-musl@1.1.3': + resolution: {integrity: sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + '@rolldown/binding-openharmony-arm64@1.1.3': + resolution: {integrity: sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] - '@radix-ui/react-toggle@1.1.10': - resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} - 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 + '@rolldown/binding-wasm32-wasi@1.1.3': + resolution: {integrity: sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + '@rolldown/binding-win32-arm64-msvc@1.1.3': + resolution: {integrity: sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + '@rolldown/binding-win32-x64-msvc@1.1.3': + resolution: {integrity: sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@scarf/scarf@1.4.0': resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} @@ -974,113 +1253,113 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@swagger-api/apidom-ast@1.10.1': - resolution: {integrity: sha512-mevhQXYM5RwpH9UX8VDZw8ePFZSryuXZ5uU5crQPXLTKBkNok6kxlrVI0nRydbFZ1cIUc0nA//PUQPtCoBp6kw==} + '@swagger-api/apidom-ast@1.10.2': + resolution: {integrity: sha512-vTl8gWyeZaj887/NSWYs3as4K8wXHar5wY/606XRBjR2UgmJBokBgKjq7S23LW9tsYjsT4MjQKC8idjgw17xvg==} - '@swagger-api/apidom-core@1.10.1': - resolution: {integrity: sha512-gTj48Q5GAcBZpiLTDueBfjg4xfyeGwuWNjmJ7YneoI9478LD2l23kP8sZauCegV0PflzzO15M2hTkNTwX1alDQ==} + '@swagger-api/apidom-core@1.10.2': + resolution: {integrity: sha512-qryNBGHNWDvSRyK1w5rox0UOrHrVBjZOHgeXFpGHF+oBO7ntSc/H7BSiYMDR+KQESkzMcAxn4tZMLYItaBt06w==} - '@swagger-api/apidom-error@1.10.1': - resolution: {integrity: sha512-VMm/a65GVBv+PLTnlAef+6sryui333FfoBtPP/wHE1M1cY7hJGJDKA7WIxjxgcX0shgqTVHx2m/2/cJT3EN0ng==} + '@swagger-api/apidom-error@1.10.2': + resolution: {integrity: sha512-SWyPyL5xwTUsDzPi0A5zwTFwqPezvlwj4opEqruqjESNTYupUA7+vt4Mdj7IlDaRYRG1qyCWQgKhIBXznVUD4w==} - '@swagger-api/apidom-json-pointer@1.10.1': - resolution: {integrity: sha512-YIzrhTt/5EsfcjxWvGogJNepMNt3A4+O8Hnqkv5TT1gV4nbM9RNlMOoNezZfOv59SCQsbIM7bP/zab5wwVotEA==} + '@swagger-api/apidom-json-pointer@1.10.2': + resolution: {integrity: sha512-zySHPqIXF4HZ3VWbHwTxO+H1e9dJw7mGHzoX+tZjx5wVyLQO3kZDCAAXzz3c3/TIY21Y2Zkpkez3q9hjFyuLvQ==} - '@swagger-api/apidom-ns-api-design-systems@1.10.1': - resolution: {integrity: sha512-wIgv6sf26ipUYFP65t72FIT96kTgBWiWiLVqVnsEEqkOzHVBG0C6cfRHBBg/xrbfxhk4naVoNDs5dNvFaa1RCg==} + '@swagger-api/apidom-ns-api-design-systems@1.10.2': + resolution: {integrity: sha512-MsZ4GWmWN7wkWv7G9Pwk8sHU1j0bwk7xoGeaZmNCylbTfYvGkg6jJGMHdAdQNCQXbbpfLeKt1O+3YCN//JUQ7w==} - '@swagger-api/apidom-ns-arazzo-1@1.10.1': - resolution: {integrity: sha512-SfYxcZt8oCSxmLIh+Itb/cyCCiFo6C50NIqcXK8cAH1LuS4uN8vnJcf/g9dsLi6X0uL3tFco1Im2cW3FNa+yTA==} + '@swagger-api/apidom-ns-arazzo-1@1.10.2': + resolution: {integrity: sha512-fQSwDlIR85tbnLXAjtV/ypSGUBfrzFcZ4NbH6BL1DSTR4uEunVxAULdD4wlhCt9gGNDl/zxZD3vQtlYDkXDFmw==} - '@swagger-api/apidom-ns-asyncapi-2@1.10.1': - resolution: {integrity: sha512-HfQHr6cF58wNI2x77XkcuEycbv7zeYg43kHV6Bekp2up24nuexMyX+kMg1JdBS+lrBq0DpYVOKBesUWTLyiLqg==} + '@swagger-api/apidom-ns-asyncapi-2@1.10.2': + resolution: {integrity: sha512-obWHe3pyAj65Nf9ISwnbtJ4C5mZ15C6mtQXxzHVW5maVZqlqt3s/YbPY87EqK9ArdNOwOZHkQt2Uth02GMmjxA==} - '@swagger-api/apidom-ns-asyncapi-3@1.10.1': - resolution: {integrity: sha512-ztMMhW+7f548AH/VbyBOvA9FvPQ+F/RwIEN2rw9M3Lq/hjHaXTzYE2Bt5q8TNHis46NPyLYQR6lD+MANsII0aA==} + '@swagger-api/apidom-ns-asyncapi-3@1.10.2': + resolution: {integrity: sha512-yqNmXeObF2OLAusgGEapXz2CrGjXwkcfG3DYcQDtOvgRytvGZxC2EkCUR+wEXCVNYhoJ7QpVzzTJOHs3jOvptg==} - '@swagger-api/apidom-ns-json-schema-2019-09@1.10.1': - resolution: {integrity: sha512-2X0wc36PbKo6zbygG19Vw4H2nDo7hT9zxlyNCaBiWdYT1gKxhG/IbftfEaiBOBlpYIXbfmo/7/yJe0OFqJjwvg==} + '@swagger-api/apidom-ns-json-schema-2019-09@1.10.2': + resolution: {integrity: sha512-I1FaBoDFMjybF4QVsesIYl8OilkwycZ0mQ0jf1P++zfTRG27uIePB8M+Iuj6iqMsE3qpkjjJJ6ZLnrLPdKvmRw==} - '@swagger-api/apidom-ns-json-schema-2020-12@1.10.1': - resolution: {integrity: sha512-JWQJS2eKJgzA/zomZ1Rx8tfIr8H/hCY7CmH5AsYLp0kn4RkABODvbnR19eMTIF0aNuI7SB9DvQe28EfpYMCAyw==} + '@swagger-api/apidom-ns-json-schema-2020-12@1.10.2': + resolution: {integrity: sha512-lg9XfRlJRNoBa2EDGpEFc7HvFV39G6RG0/SbjQY0BE/WZer10wmfTCU7l3RUNJXRFGKH6/O/nsYgP7AFjTanXQ==} - '@swagger-api/apidom-ns-json-schema-draft-4@1.10.1': - resolution: {integrity: sha512-jynGmvUNNuqy7AJb5n8mXjWgmo8mPDNuIYMgije3U4eThdmOpd4iD4iO0EVV5ltfYDlUWepQaiSn2NPn4TSzVQ==} + '@swagger-api/apidom-ns-json-schema-draft-4@1.10.2': + resolution: {integrity: sha512-C50KnSKynrmHky/oOB6+hHyZVpwng78Fz5aZjay3h8X5C/PJHmm3sDJFvF3/9wkYHO3N9sPp7cpu4Xm9VJ4/wQ==} - '@swagger-api/apidom-ns-json-schema-draft-6@1.10.1': - resolution: {integrity: sha512-ucF0/vVPdN9hNpEqNiu+QQ1ijI1Leng+Ma6wzzML8kQxiqdHiisYiOA7NlBS0iFR6ibjjTx5/ivFZp25pcOXlA==} + '@swagger-api/apidom-ns-json-schema-draft-6@1.10.2': + resolution: {integrity: sha512-/wiP8+2lF8UJRrkoQ9HvKnMbnqijk2uY/hAg+/Bo73T9NGKkEa29jYVUKYNYj7gJBw4hhkUHfHFWuZUpxPC4ZA==} - '@swagger-api/apidom-ns-json-schema-draft-7@1.10.1': - resolution: {integrity: sha512-oAr+yyLAOWEu8QdTg4os5ktZSNM0lDfoJmOmbZdSxFKv9xd9KSAqcf4e3/v8OWgvX2V9JIxwE0Jo2sI8j4h7Hg==} + '@swagger-api/apidom-ns-json-schema-draft-7@1.10.2': + resolution: {integrity: sha512-firN/uvnVxQgACqcyzV3NU9qjbMvNMJkpmm3wOat3URmaFMaFBT3qjbU1pFHBGbnXI3+I9pQJZHmJSwqNzfUbQ==} - '@swagger-api/apidom-ns-openapi-2@1.10.1': - resolution: {integrity: sha512-zlGSW/XCtjfn+vjLPVSt+KsPouIOkoXifzWk0P/oAf13JQC9JZJ2MHrqwyw24PqQCf7zjqvHwXhrS/6/3usevg==} + '@swagger-api/apidom-ns-openapi-2@1.10.2': + resolution: {integrity: sha512-FK5kYvo/1uwAByumRVRsynBlnKxUUImfsjPEFgRCW6yhbCGRqN47NaZ7GYFHpbhjC3OmMN5/etYj6B0jnZx7Gg==} - '@swagger-api/apidom-ns-openapi-3-0@1.10.1': - resolution: {integrity: sha512-82TW6iwMrRcY09MQI8ZzSbPx7gPo0Qw4R9eQAixhnZ+icp+2VVFMM38pGpZQ5wGLLmbMi+wXnIKqJNw64y3Ihw==} + '@swagger-api/apidom-ns-openapi-3-0@1.10.2': + resolution: {integrity: sha512-ziyv85QbJYHRdc9oTEFBy3pxwxg7BW/a9GrwH01/SmuXVQPjLjwzRb+SjCxLogJppm0yjxOkDFI2VWPp2RADFg==} - '@swagger-api/apidom-ns-openapi-3-1@1.10.1': - resolution: {integrity: sha512-u8A+AqMy2lvRRxl11fqeTDHSbWUgU7kCoz0G7p6K3HoJ7hLb7q97+tldNmxvAGjE1ljylx55sSswEfAUZk9oZA==} + '@swagger-api/apidom-ns-openapi-3-1@1.10.2': + resolution: {integrity: sha512-ngcmO4dH77JT5hZB04OJdyTzgKnt2lNhAZQ+4wXjum/xhszjUmDhOeYfXdHw3Lm7MxsEsTesWzLYQ5LKADc41A==} - '@swagger-api/apidom-ns-openapi-3-2@1.10.1': - resolution: {integrity: sha512-q+xnEfGWIIqGX+ldd6rgyvtaah22XHVZ2ROcfGKsLHjZNoxc1p94VBMaJmUYYx5GAXRZD9Yn65xUQ29nHHsJBw==} + '@swagger-api/apidom-ns-openapi-3-2@1.10.2': + resolution: {integrity: sha512-3SWJ5ipWwn+w11HTUESWex/522jy2aGLzBqqMgH36sy+Wdwx+9Mw2bgSDqkxmNC5+jpzOGUOIWoQAMuCpS/Gzg==} - '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.10.1': - resolution: {integrity: sha512-P7sikA/ck0rMaeWGYTTzlnjSmLOoN/YRLDEv334po2/A5Js/FmBvfHJflLDZ4Hn6X2mhbdoF7arLJ0P3VAK86w==} + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.10.2': + resolution: {integrity: sha512-kzhJUGzsJ38Uohj5xRQDkQC08rqNhatbqgD30LZ0/UWryJ9nAsjqK2ovuP9t+5WKcDE4iwcYeGSt1NA2XgEZwg==} - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.10.1': - resolution: {integrity: sha512-3S9gbqVLE2rkd7jzDThVX6uW6zFGuL0BLJOpduxkwhezgZwyf/EpB29oSzH8ZHuwZHWAsPGiqtivfCp1o5KIxA==} + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.10.2': + resolution: {integrity: sha512-i3CmSxJ/iG67ybRDAJ9xpuMrOMFvC/obX2lI36E0VZzBTb+llw4Zd5qFmBqNnImLpwdmk11Z1V7i+5HM+J7ijQ==} - '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.10.1': - resolution: {integrity: sha512-e02QuxdkgyCHB+kAskWOKD3doy8FwEheNFPg8te58SvKwxJ/32TwmWQSUT0zmDK6omzFV/HaFzUSfau5UZLquw==} + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.10.2': + resolution: {integrity: sha512-HwiUkwvo5i2hV2SS6KWrdj62BdceZGfhuXhr1il8akWekpU4jXPtr5pv4gOnKKJN7VgjAmwt/DlcCSRo1+9jVA==} - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.10.1': - resolution: {integrity: sha512-S7+1zLGZDX6KuimlRCAfe0df5HxY1ruchyU2VFB/mOikKf3UoDDdlaT/lXRJtyw9aoSuXuYV7ysEyAOLffGgxQ==} + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.10.2': + resolution: {integrity: sha512-w8VTVuE7GPbRqWxvMgRoTb726JRsMhFPMfTBf8+MJ4pQThjk78dSXPV2Zlse71b2DWBuQy2sr6zGyLUNs/3ePQ==} - '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.10.1': - resolution: {integrity: sha512-6j1Uufq52yGJR4xkWYAA2jlv6YjNev+z7Z9BrQCDm7Y9y69zh1HHMncuUwTe1wnypd2hcwLu6IBT0ykBPnNn3Q==} + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.10.2': + resolution: {integrity: sha512-FDNjqmn2vV1jFoVVwQDO0XPPm8R5xzmcyY/6yBLFmKZADin3smSKVZ+njYHmfRjpspXwN0AwI0drdvuH0FZLJg==} - '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.10.1': - resolution: {integrity: sha512-2XQG9HVkINBnpwE1Oln4KRDCt6ZB7V1/9If9RAK42wIgpGsHGwgRqsGs39a4tqTL0luXRKyaMVQ2yJ7k4Kq3Ew==} + '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.10.2': + resolution: {integrity: sha512-x/0vM2nDDzYzFnXr69+so/KSH+2py2TiZd1K49pWcX8cHsPV1Y4Ppih7GVOMymd8m/IOCjLYlV7qt4eWDwdldg==} - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.10.1': - resolution: {integrity: sha512-rNE/52HEgYDbLpJ0ydKcXUiQVe1FWz2FN7TgcSplrlwcQdLdO4wwMgMhDgxZfeSDYrsss3rJCqgI8jJFMhIlDQ==} + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.10.2': + resolution: {integrity: sha512-2bVACmU9ZmAVVnqQWSc3Bs+xG0HHLU1tfZbYL8xNgSi8kw4HcnejF5mWtN+MLFzTaBmWCi2In7P7BYNR8+2Dyg==} - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.10.1': - resolution: {integrity: sha512-++u3KvXmZKyBgNzLR58yr/9D3OPxBg/njrz/L8ncfIRTfdBHYRFP8XA0ktb+3W7RQAFgcG1bB5czq7Y+brLg5g==} + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.10.2': + resolution: {integrity: sha512-oHpbf+iqBcDS3qtsipMpgCwAeckKMxg0qFKYTCRZyJdctRgupJTxVeir6t/SGo0Ny0a1iknt2LN0u5frEen0kg==} - '@swagger-api/apidom-parser-adapter-json@1.10.1': - resolution: {integrity: sha512-hi1Ly/4fWwn7bhWr9l59BJa/dTC6bnb2+0Ogt1fHsyLuHLA71hxKX5FLRKVUcVTITunJg5mIgtBxG928MMJmdA==} + '@swagger-api/apidom-parser-adapter-json@1.10.2': + resolution: {integrity: sha512-VnwEkarKfsJYRF0zCI9AGiSIyBUXqS2d32KQuhVCt/HeuF1XO9sjeLjGiosA/24YVOnO0ul5TpiNFQn0pw89mA==} - '@swagger-api/apidom-parser-adapter-openapi-json-2@1.10.1': - resolution: {integrity: sha512-V0D9OrDTT7HXht8c48ngHcZCae1HYcvjyhX/xfG9/UyrEIY6IqGxhr5Bh7SRvNLLQ+3WuN8+o6PzBFtaU0tWAw==} + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.10.2': + resolution: {integrity: sha512-+d/o/8TrNBjvFzgPb0RQhrCc8gOWnrHZF+xvCO5gwp+4MUr1XP1AJIox1e6t1SO+j7IQjiF2ocx2r7eFE5QC7w==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.10.1': - resolution: {integrity: sha512-02pJp2Dz9fYzxA/GYthoUSGrMp1cqrfvsi1UfDVqnPuO4A/hFMLtpTIXs1YseRdrPiDLQF12+3uKH8wrNmZ1Zg==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.10.2': + resolution: {integrity: sha512-3ieUeX8/WywkUzdOO1U1QKQDNmpZFfOeTAeb4ISDd/PKOVwuEx/b0w5I8EuOu97tKAe3UUesEdii+pJlkcFlFw==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.10.1': - resolution: {integrity: sha512-ceJej3P0S0WGGK07BAbdxkTp16+MHiU0kLjvUaj7QME/UBXoTaLFl0YRvGy1nHbnOHx7qQloC6JR5fUzm8pXdQ==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.10.2': + resolution: {integrity: sha512-z0c7IgMPLSDhE+ldTb54Xlhq+yPF0w/8LHXyeHX4V6BS1VG3Utb+mM/qTVfy1Eo+p1KGNlwNDEPsBp6jIaVb5Q==} - '@swagger-api/apidom-parser-adapter-openapi-json-3-2@1.10.1': - resolution: {integrity: sha512-QHq7sBJEsVZyCTpHp4auVdK/9kClwI7NUGIHo0k3TmQZqVwg0uv3CQRkrTw50m5SauQG/ZfTxvnBPDqu004P6Q==} + '@swagger-api/apidom-parser-adapter-openapi-json-3-2@1.10.2': + resolution: {integrity: sha512-bx/kEIXWtpHu+4LEiyNdt0v8ER5EVwPjhQdlpOaC5qghnRH9aUYOTawZtVHsNHAQWTIMNn9DdPKYQgttQKD0Pw==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.10.1': - resolution: {integrity: sha512-I0Sa1TMfYpqkfDDtLCLfhTpLtYdI9xjzhUTnM5bGooO7ylZ0+6rZ/kUvt7mHJvGzN5hEpwznDzQabA96rZd5mA==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.10.2': + resolution: {integrity: sha512-e86JUXHGGEVsO4/xpy/GRSvYXGN30hLt1lMUhjzCFuE95N6/K3hmQHE3rA/H7ot1ajCWUhzukW5rGQac79NIjA==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.10.1': - resolution: {integrity: sha512-btALgBVEggG0yUVPmMR+EfFOo4dT6qPBA0Rc9Sl6mXsQmuyp08w0pFS1bEWCulpFs4AluLNOO3Eca/nk3SvItA==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.10.2': + resolution: {integrity: sha512-ucfc13Ai31tJ0ruAm1YiHhqENgcBuiOXL00OhoICWA56ggAcnA5WfWmvtsXVMlZsTHVbhZP3XpsH5rui2N8u5w==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.10.1': - resolution: {integrity: sha512-lF/7vamKL71HAu+ivfQpLk/rbV3EUHlibSUusOZgn5w8LRsKvRlM5F+EbMUCEE3L+ZHvbX3r7I7BHfjMPG8KeA==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.10.2': + resolution: {integrity: sha512-7o8j93qgf9yYAaaJ/GpH+5sB3fC9EmvmjTCqlw5YWXp+cRgCn9q7f80Sv4+NjbracUafB6qL4i9F/m+Xs0XZaQ==} - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2@1.10.1': - resolution: {integrity: sha512-2IkryVZCuJk5hgggS4wugqsUrCAlGTeYOa34Aw0oH1E+2KC0CRXx8s19/UstdwEWx49kEMoh/QOx3Tb0Kp4idQ==} + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2@1.10.2': + resolution: {integrity: sha512-blDIeVmo8bpXYV/C+b6PYi54yS+5jPEZTFsK5jQ2NzpCPrkBPacp/KTuHBUBzJsYj4bj/ivRL3+JXGw4YovUHw==} - '@swagger-api/apidom-parser-adapter-yaml-1-2@1.10.1': - resolution: {integrity: sha512-HVnq38OnU3nodluWbXTXf7PY5BSp2X07q1Ppx/vxPJaxQ43QxD+EZYvuh2HF7M072f9JuxZzlZQO1btFk7qD2g==} + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.10.2': + resolution: {integrity: sha512-I5eCls8XS3SVEwH/cuL6T3iar1TPaFYh3gXwS/2rzP1aZQNKSHDP3y3ney7nAomKG4dFvE8Q248FL36arG7T/w==} - '@swagger-api/apidom-reference@1.10.1': - resolution: {integrity: sha512-JVbUI6tlndxoP9oW7Xyhm6N1hevtTK23cIZAUDDPfZ9nYjdV6OPleT5aKsVBw3ZtBXtvriTZ/vODdqL7H28Z8A==} + '@swagger-api/apidom-reference@1.10.2': + resolution: {integrity: sha512-H5UqOmae9CXdiLJbbh1j+/hwvcECmr6ci2XtUKTQpFviemvsIDZmPV1DKUAxCfzGr2iOkDO6SZc+/OEWlETqiQ==} '@swaggerexpert/cookie@2.0.2': resolution: {integrity: sha512-DPI8YJ0Vznk4CT+ekn3rcFNq1uQwvUHZhH6WvTSPD0YKBIlMS9ur2RYKghXuxxOiqOam/i4lHJH4xTIiTgs3Mg==} @@ -1093,6 +1372,35 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/react@16.3.2': + resolution: {integrity: sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@tree-sitter-grammars/tree-sitter-yaml@0.7.1': resolution: {integrity: sha512-AynBwkIoQCTgjDR33bDUp9Mqq+YTco0is3n5hRApMqG9of/6A4eQsfC1/uSEeHSUyMQSYawcAWamsexnVpIP4Q==} peerDependencies: @@ -1101,18 +1409,39 @@ packages: tree-sitter: optional: true + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} '@types/node@25.6.0': resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + '@types/pg@8.15.4': resolution: {integrity: sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg==} '@types/prismjs@1.26.6': resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + '@types/ramda@0.30.2': resolution: {integrity: sha512-PyzHvjCalm2BRYjAU6nIB3TprYwMNOUY/7P/N8bSzp9W/yM2YrtGtAnnVtaCNSeOZ8DzKyFDvaqQs7LnWwwmBA==} @@ -1121,6 +1450,11 @@ packages: peerDependencies: '@types/react': ^19.2.0 + '@types/react-transition-group@4.4.12': + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} + peerDependencies: + '@types/react': '*' + '@types/react@19.2.14': resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} @@ -1136,8 +1470,55 @@ packages: '@types/use-sync-external-store@0.0.6': resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + '@vitejs/plugin-react@6.0.3': + resolution: {integrity: sha512-vmFvco5/QuC2f9Oj+wTk0+9XeDFkHxSamwZKYc7MxYwKICfvUvlMhqKI0VuICPltGqh1neqBKDvO4kes1ya8vg==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 + babel-plugin-react-compiler: ^1.0.0 + vite: ^8.0.0 + peerDependenciesMeta: + '@rolldown/plugin-babel': + optional: true + babel-plugin-react-compiler: + optional: true + + '@vitest/expect@4.1.9': + resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==} + + '@vitest/mocker@4.1.9': + resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.1.9': + resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==} + + '@vitest/runner@4.1.9': + resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==} + + '@vitest/snapshot@4.1.9': + resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==} + + '@vitest/spy@4.1.9': + resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==} + + '@vitest/utils@4.1.9': + resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} apg-lite@1.0.5: resolution: {integrity: sha512-SlI+nLMQDzCZfS39ihzjGp3JNBQfJXyMi6cg9tkLOCPVErgFsUIAEdO9IezR7kbP5Xd0ozcPNQBkf9TO5cHgWw==} @@ -1148,6 +1529,17 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -1158,12 +1550,12 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - aws-ssl-profiles@1.1.2: - resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} - engines: {node: '>= 6.0.0'} + axios@1.15.2: + resolution: {integrity: sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==} - axios@1.15.0: - resolution: {integrity: sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==} + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} @@ -1172,13 +1564,13 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.18: - resolution: {integrity: sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A==} + baseline-browser-mapping@2.10.23: + resolution: {integrity: sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g==} engines: {node: '>=6.0.0'} hasBin: true - better-result@2.8.2: - resolution: {integrity: sha512-YOf0VSj5nUPI27doTtXF+BBnsiRq3qY7avHqfIWnppxTLGyvkLq1QV2RTxkwoZwJ60ywLfZ0raFF4J/G886i7A==} + bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} brace-expansion@5.0.5: resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} @@ -1190,14 +1582,6 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - c12@3.1.0: - resolution: {integrity: sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==} - peerDependencies: - magicast: ^0.3.5 - peerDependenciesMeta: - magicast: - optional: true - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -1210,8 +1594,16 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} - caniuse-lite@1.0.30001787: - resolution: {integrity: sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==} + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001791: + resolution: {integrity: sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==} + + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} @@ -1222,26 +1614,16 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - chart.js@4.5.1: - resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} - engines: {pnpm: '>=8'} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - - citty@0.2.2: - resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==} - classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -1249,12 +1631,11 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - confbox@0.2.4: - resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} @@ -1262,9 +1643,13 @@ packages: core-js-pure@3.49.0: resolution: {integrity: sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==} - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -1272,6 +1657,10 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + data-urls@7.0.0: + resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1281,6 +1670,9 @@ packages: supports-color: optional: true + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decode-named-character-reference@1.3.0: resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} @@ -1288,10 +1680,6 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} - deepmerge-ts@7.1.5: - resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} - engines: {node: '>=16.0.0'} - deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -1300,35 +1688,34 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - defu@6.1.7: - resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - denque@2.1.0: - resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} - engines: {node: '>=0.10'} - - destr@2.0.5: - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - dompurify@3.3.3: - resolution: {integrity: sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dompurify@3.4.1: + resolution: {integrity: sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==} dotenv@16.5.0: resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - drange@1.1.1: resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==} engines: {node: '>=4'} @@ -1433,16 +1820,12 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - effect@3.20.0: - resolution: {integrity: sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==} - - empathic@2.0.0: - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} - engines: {node: '>=14'} + entities@8.0.0: + resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} + engines: {node: '>=20.19.0'} - env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} @@ -1452,6 +1835,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -1480,27 +1866,37 @@ packages: engines: {node: '>=18'} hasBin: true - exsolve@1.0.8: - resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} - fast-check@3.23.2: - resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} - engines: {node: '>=8.0.0'} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} + engines: {node: '>=12.0.0'} fast-json-patch@3.1.1: resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -1512,10 +1908,6 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} @@ -1532,40 +1924,21 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - generate-function@2.3.1: - resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} - get-port-please@3.2.0: - resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} - get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.7: - resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} - - giget@2.0.0: - resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} - hasBin: true + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - grammex@3.1.12: - resolution: {integrity: sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==} - - graphmatch@1.1.1: - resolution: {integrity: sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -1577,8 +1950,8 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} hast-util-parse-selector@4.0.0: @@ -1593,16 +1966,12 @@ packages: highlightjs-vue@1.0.0: resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} - hono@4.12.12: - resolution: {integrity: sha512-p1JfQMKaceuCbpJKAPKVqyqviZdS0eUxH9v82oWo1kb9xjQ5wA6iP3FNVAPDFlz5/p7d45lO+BpSk1tuSZMF4Q==} - engines: {node: '>=16.9.0'} - - http-status-codes@2.3.0: - resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - iconv-lite@0.7.2: - resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} - engines: {node: '>=0.10.0'} + html-encoding-sniffer@6.0.0: + resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -1611,6 +1980,14 @@ packages: resolution: {integrity: sha512-AUY/VyX0E5XlibOmWt10uabJzam1zlYjwiEgQSDc5+UIkFNaF9WM0JxXKaNMGf+F/ffUF+7kRKXM9A7C0xXqMg==} engines: {node: '>=0.10.0'} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -1623,18 +2000,25 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - is-property@1.0.2: - resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} @@ -1643,13 +2027,6 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - js-file-download@0.4.12: resolution: {integrity: sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==} @@ -1660,8 +2037,99 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + jsdom@29.1.1: + resolution: {integrity: sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -1669,9 +2137,6 @@ packages: lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -1679,14 +2144,29 @@ packages: lowlight@1.20.0: resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} - lru.min@1.1.4: - resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} - engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} + lru-cache@11.5.1: + resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==} + engines: {node: 20 || >=22} + + lucide-react@1.27.0: + resolution: {integrity: sha512-rJicGl/3Fly/E0rOH1YmPZ6e49JCnKknh1ox1vpHnkfjujAkKA6sqUZvH3MTAaXXjgexyUwgNwTJzTtYuAFYJw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -1695,6 +2175,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + minim@0.23.8: resolution: {integrity: sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww==} engines: {node: '>=6'} @@ -1706,23 +2190,26 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mysql2@3.15.3: - resolution: {integrity: sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==} - engines: {node: '>= 8.0'} - - named-placeholders@1.1.6: - resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} - engines: {node: '>=8.0.0'} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.15: + resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + neotraverse@0.6.18: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + next@16.2.3: resolution: {integrity: sha512-9V3zV4oZFza3PVev5/poB9g0dEafVcgNyQ8eTRop8GvxZjV2G15FC5ARuG1eFD42QgeYkzJBJzHghNP8Ad9xtA==} engines: {node: '>=20.9.0'} @@ -1760,24 +2247,17 @@ packages: resolution: {integrity: sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-fetch-native@1.6.7: - resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - nypm@0.6.5: - resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==} - engines: {node: '>=18'} - hasBin: true - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - ohash@2.0.11: - resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + obug@2.1.3: + resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} + engines: {node: '>=12.20.0'} openapi-path-templating@2.2.1: resolution: {integrity: sha512-eN14VrDvl/YyGxxrkGOHkVkWEoPyhyeydOUrbvjoz8K5eIGgELASwN1eqFOJ2CTQMGCy2EntOK1KdtJ8ZMekcg==} @@ -1787,19 +2267,30 @@ packages: resolution: {integrity: sha512-DPlCms3KKEbjVQb0spV6Awfn6UWNheuG/+folQPzh/wUaKwuqvj8zt5gagD7qoyxtE03cIiKPgLFS3Q8Bz00uQ==} engines: {node: '>=12.20.0'} + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse5@8.0.1: + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - pg-cloudflare@1.3.0: resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==} @@ -1837,8 +2328,14 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + pnpm@10.33.2: + resolution: {integrity: sha512-qQ+vb+6rca1sblf5Tg/hoS9dzCLNdU20CulZPraj4LaxLjVAIYuzeuCDQEsfLObbKkEh6XmCm0r/lLmfSdoc+A==} + engines: {node: '>=18.12'} + hasBin: true possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} @@ -1848,6 +2345,10 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -1864,22 +2365,9 @@ packages: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} - postgres@3.4.7: - resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} - engines: {node: '>=12'} - - prisma@7.7.0: - resolution: {integrity: sha512-HlgwRBt1uEFB9LStHL4HLYDvoi4BNu1rYA0hPG0zCAEyK9SaZBqp7E5Rjpc3Qh8Lex/ye/svoHZ0OWoFNhWxuQ==} - engines: {node: ^20.19 || ^22.12 || >=24.0} - hasBin: true - peerDependencies: - better-sqlite3: '>=9.0.0' - typescript: '>=5.4.0' - peerDependenciesMeta: - better-sqlite3: - optional: true - typescript: - optional: true + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} @@ -1888,9 +2376,6 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - proper-lockfile@4.1.2: - resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} - property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -1898,8 +2383,9 @@ packages: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -1920,9 +2406,6 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - rc9@2.1.2: - resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} - react-copy-to-clipboard@5.1.0: resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==} peerDependencies: @@ -1933,10 +2416,10 @@ packages: peerDependencies: react: ^15.3.0 || 16 || 17 || 18 - react-dom@19.2.5: - resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} + react-dom@19.2.7: + resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} peerDependencies: - react: ^19.2.5 + react: ^19.2.7 react-immutable-proptypes@2.2.0: resolution: {integrity: sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==} @@ -1958,6 +2441,12 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-is@19.2.5: + resolution: {integrity: sha512-Dn0t8IQhCmeIT3wu+Apm1/YVsJXsGWi6k4sPdnBIdqMVtHtv0IGi6dcpNpNkNac0zB2uUAqNX3MHzN8c+z2rwQ==} + react-redux@9.2.0: resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} peerDependencies: @@ -1976,13 +2465,19 @@ packages: peerDependencies: react: '>= 0.14.0' - react@19.2.5: - resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@19.2.7: + resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} engines: {node: '>=0.10.0'} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} redux-immutable@4.0.0: resolution: {integrity: sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg==} @@ -2000,9 +2495,6 @@ packages: engines: {node: '>= 6.0.0'} hasBin: true - remeda@2.33.4: - resolution: {integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==} - repeat-string@1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} @@ -2017,22 +2509,33 @@ packages: reselect@5.1.1: resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} + hasBin: true + ret@0.2.2: resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} engines: {node: '>=4'} - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} + rolldown@1.1.3: + resolution: {integrity: sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -2042,9 +2545,6 @@ packages: engines: {node: '>=10'} hasBin: true - seq-queue@0.0.5: - resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} - serialize-error@8.1.0: resolution: {integrity: sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==} engines: {node: '>=10'} @@ -2062,24 +2562,18 @@ packages: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - short-unique-id@5.3.2: resolution: {integrity: sha512-KRT/hufMSxXKEDSQujfVE0Faa/kZ51ihUcZQAcmP04t00DvPj7Ox5anHke1sJYUtzSuiT/Y5uyzg/W7bBEGhCg==} hasBin: true - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + sonner@2.0.7: + resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} @@ -2088,6 +2582,10 @@ packages: source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -2102,12 +2600,15 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sqlstring@2.3.3: - resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} - engines: {node: '>= 0.6'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} @@ -2122,8 +2623,15 @@ packages: babel-plugin-macros: optional: true - swagger-client@3.37.1: - resolution: {integrity: sha512-WCRU7wfyqTyB0vOpVK1vHFm4aCqnmqcXycDcWVmHa784Nd4cABaQeSITtjWMOnjJoIkTqG8TLArYn4SAv+wj2w==} + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swagger-client@3.37.2: + resolution: {integrity: sha512-KcB8psL1On4GWwv9Ribp1oteh50ygNnAyvQbd5MwiXMGkcB4f53rkZEdvZKPDdJO764mQjgErxQEGDVw6QBUMQ==} swagger-ui-react@5.32.2: resolution: {integrity: sha512-7MFN2c3urrqnDiB3n2C7cx2xddzp/DraOufpM5hIa61RhpIY/odFUY6TZsy5xhQwkRMHG04a7aU2d6rOXqWZEA==} @@ -2131,10 +2639,31 @@ packages: react: '>=16.8.0 <20' react-dom: '>=16.8.0 <20' - tinyexec@1.1.1: - resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} engines: {node: '>=18'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + + tldts-core@7.4.5: + resolution: {integrity: sha512-pGrwzZDvPwKe+7NNUqAunb6rqTfynr0VOUhCMdqbu5xlvNiszsAJygRzwvpVycdzejlbpY+SWJOn+s75Og7FEA==} + + tldts@7.4.5: + resolution: {integrity: sha512-RfEzKWcq5fHUOFq7J3rl3Oz6ylKGtcHqUznzj4EcXsxLSIjJcvpbXAQtWGeJQ0xKnimR5e0Cn+cn9TssfMzm+g==} + hasBin: true + to-buffer@1.2.2: resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} engines: {node: '>= 0.4'} @@ -2142,6 +2671,14 @@ packages: toggle-selection@1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + tough-cookie@6.0.1: + resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} + engines: {node: '>=16'} + + tr46@6.0.0: + resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} + engines: {node: '>=20'} + tree-sitter-json@0.24.8: resolution: {integrity: sha512-Tc9ZZYwHyWZ3Tt1VEw7Pa2scu1YO7/d2BCBbKTx5hXwig3UfdQjsOPkPyLpDJOn/m1UBEWYAtSdGAwCSyagBqQ==} peerDependencies: @@ -2186,9 +2723,18 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + undici-types@7.19.2: resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici@7.28.0: + resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} + engines: {node: '>=20.18.1'} + unraw@3.0.0: resolution: {integrity: sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==} @@ -2200,14 +2746,94 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - valibot@1.2.0: - resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} + vite@8.1.0: + resolution: {integrity: sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true peerDependencies: - typescript: '>=5' + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.3.0 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.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 peerDependenciesMeta: - typescript: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.1.9: + resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.9 + '@vitest/browser-preview': 4.1.9 + '@vitest/browser-webdriverio': 4.1.9 + '@vitest/coverage-istanbul': 4.1.9 + '@vitest/coverage-v8': 4.1.9 + '@vitest/ui': 4.1.9 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: optional: true + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -2215,46 +2841,145 @@ packages: web-tree-sitter@0.24.5: resolution: {integrity: sha512-+J/2VSHN8J47gQUAvF8KDadrfz6uFYVjxoxbKWDoXVsH2u7yLdarCnIURnrMA6uSRkgX3SdmqM5BOoQjPdSh5w==} + webidl-conversions@8.0.1: + resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} + engines: {node: '>=20'} + + whatwg-mimetype@5.0.0: + resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} + engines: {node: '>=20'} + + whatwg-url@16.0.1: + resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + which-typed-array@1.1.20: resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} hasBin: true xml-but-prettier@1.0.1: resolution: {integrity: sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ==} + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + xml@1.0.1: resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} + engines: {node: '>= 6'} + zenscroll@4.0.2: resolution: {integrity: sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==} - zeptomatch@2.1.0: - resolution: {integrity: sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==} + zod@4.3.6: + resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} snapshots: - '@babel/runtime-corejs3@7.29.2': + '@adobe/css-tools@4.5.0': {} + + '@asamuzakjp/css-color@5.1.11': dependencies: - core-js-pure: 3.49.0 + '@asamuzakjp/generational-cache': 1.0.1 + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.9(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 - '@babel/runtime@7.29.2': {} + '@asamuzakjp/dom-selector@7.1.1': + dependencies: + '@asamuzakjp/generational-cache': 1.0.1 + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.2.1 + is-potential-custom-element-name: 1.0.1 - '@biomejs/biome@2.4.11': - optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.11 - '@biomejs/cli-darwin-x64': 2.4.11 - '@biomejs/cli-linux-arm64': 2.4.11 - '@biomejs/cli-linux-arm64-musl': 2.4.11 - '@biomejs/cli-linux-x64': 2.4.11 + '@asamuzakjp/generational-cache@1.0.1': {} + + '@asamuzakjp/nwsapi@2.3.9': {} + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + + '@babel/runtime-corejs3@7.29.2': + dependencies: + core-js-pure: 3.49.0 + + '@babel/runtime@7.29.2': {} + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@biomejs/biome@2.4.11': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.4.11 + '@biomejs/cli-darwin-x64': 2.4.11 + '@biomejs/cli-linux-arm64': 2.4.11 + '@biomejs/cli-linux-arm64-musl': 2.4.11 + '@biomejs/cli-linux-x64': 2.4.11 '@biomejs/cli-linux-x64-musl': 2.4.11 '@biomejs/cli-win32-arm64': 2.4.11 '@biomejs/cli-win32-x64': 2.4.11 @@ -2283,26 +3008,140 @@ snapshots: '@biomejs/cli-win32-x64@2.4.11': optional: true + '@bramus/specificity@2.4.2': + dependencies: + css-tree: 3.2.1 + + '@csstools/color-helpers@6.1.0': {} + + '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-color-parser@4.1.9(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/color-helpers': 6.1.0 + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.1.5(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 + + '@csstools/css-tokenizer@4.0.0': {} + '@drizzle-team/brocli@0.10.2': {} - '@electric-sql/pglite-socket@0.1.1(@electric-sql/pglite@0.4.1)': + '@emnapi/core@1.11.1': dependencies: - '@electric-sql/pglite': 0.4.1 + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 optional: true - '@electric-sql/pglite-tools@0.3.1(@electric-sql/pglite@0.4.1)': + '@emnapi/runtime@1.10.0': dependencies: - '@electric-sql/pglite': 0.4.1 + tslib: 2.8.1 optional: true - '@electric-sql/pglite@0.4.1': + '@emnapi/runtime@1.11.1': + dependencies: + tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.2': + '@emnapi/wasi-threads@1.2.2': dependencies: tslib: 2.8.1 optional: true + '@emotion/babel-plugin@11.13.5': + dependencies: + '@babel/helper-module-imports': 7.28.6 + '@babel/runtime': 7.29.2 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.14.0': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/is-prop-valid@1.4.0': + dependencies: + '@emotion/memoize': 0.9.0 + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.2 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.7) + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 19.2.7 + optionalDependencies: + '@types/react': 19.2.14 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.3': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.2.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.2 + '@emotion/babel-plugin': 11.13.5 + '@emotion/is-prop-valid': 1.4.0 + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.7) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.7) + '@emotion/utils': 1.4.2 + react: 19.2.7 + optionalDependencies: + '@types/react': 19.2.14 + transitivePeerDependencies: + - supports-color + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.7)': + dependencies: + react: 19.2.7 + + '@emotion/utils@1.4.2': {} + + '@emotion/weak-memoize@0.4.0': {} + '@esbuild-kit/core-utils@3.3.2': dependencies: esbuild: 0.18.20 @@ -2311,7 +3150,7 @@ snapshots: '@esbuild-kit/esm-loader@2.6.5': dependencies: '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 '@esbuild/aix-ppc64@0.25.12': optional: true @@ -2535,10 +3374,7 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@hono/node-server@1.19.11(hono@4.12.12)': - dependencies: - hono: 4.12.12 - optional: true + '@exodus/bytes@1.15.1': {} '@img/colour@1.1.0': optional: true @@ -2625,7 +3461,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.9.2 + '@emnapi/runtime': 1.10.0 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -2637,7 +3473,112 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@kurkle/color@0.3.4': + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@mui/core-downloads-tracker@9.0.0': {} + + '@mui/icons-material@9.0.0(@mui/material@9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@types/react@19.2.14)(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.2 + '@mui/material': 9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react: 19.2.7 + optionalDependencies: + '@types/react': 19.2.14 + + '@mui/material@9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.2 + '@mui/core-downloads-tracker': 9.0.0 + '@mui/system': 9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7) + '@mui/types': 9.0.0(@types/react@19.2.14) + '@mui/utils': 9.0.0(@types/react@19.2.14)(react@19.2.7) + '@popperjs/core': 2.11.8 + '@types/react-transition-group': 4.4.12(@types/react@19.2.14) + clsx: 2.1.1 + csstype: 3.2.3 + prop-types: 15.8.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + react-is: 19.2.5 + react-transition-group: 4.4.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.7) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7) + '@types/react': 19.2.14 + + '@mui/private-theming@9.0.0(@types/react@19.2.14)(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.2 + '@mui/utils': 9.0.0(@types/react@19.2.14)(react@19.2.7) + prop-types: 15.8.1 + react: 19.2.7 + optionalDependencies: + '@types/react': 19.2.14 + + '@mui/styled-engine@9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7))(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.2 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/sheet': 1.4.0 + csstype: 3.2.3 + prop-types: 15.8.1 + react: 19.2.7 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.7) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7) + + '@mui/system@9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.2 + '@mui/private-theming': 9.0.0(@types/react@19.2.14)(react@19.2.7) + '@mui/styled-engine': 9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7))(react@19.2.7) + '@mui/types': 9.0.0(@types/react@19.2.14) + '@mui/utils': 9.0.0(@types/react@19.2.14)(react@19.2.7) + clsx: 2.1.1 + csstype: 3.2.3 + prop-types: 15.8.1 + react: 19.2.7 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.7) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.7))(@types/react@19.2.14)(react@19.2.7) + '@types/react': 19.2.14 + + '@mui/types@9.0.0(@types/react@19.2.14)': + dependencies: + '@babel/runtime': 7.29.2 + optionalDependencies: + '@types/react': 19.2.14 + + '@mui/utils@9.0.0(@types/react@19.2.14)(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.2 + '@mui/types': 9.0.0(@types/react@19.2.14) + '@types/prop-types': 15.7.15 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.2.7 + react-is: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 optional: true '@next/env@16.2.3': {} @@ -2666,189 +3607,79 @@ snapshots: '@next/swc-win32-x64-msvc@16.2.3': optional: true - '@prisma/client-runtime-utils@7.7.0': - optional: true + '@oxc-project/types@0.137.0': {} - '@prisma/client@7.7.0(prisma@7.7.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(typescript@6.0.2)': - dependencies: - '@prisma/client-runtime-utils': 7.7.0 - optionalDependencies: - prisma: 7.7.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) - typescript: 6.0.2 - optional: true + '@popperjs/core@2.11.8': {} - '@prisma/config@7.7.0': - dependencies: - c12: 3.1.0 - deepmerge-ts: 7.1.5 - effect: 3.20.0 - empathic: 2.0.0 - transitivePeerDependencies: - - magicast + '@rolldown/binding-android-arm64@1.1.3': optional: true - '@prisma/debug@7.2.0': + '@rolldown/binding-darwin-arm64@1.1.3': optional: true - '@prisma/debug@7.7.0': + '@rolldown/binding-darwin-x64@1.1.3': optional: true - '@prisma/dev@0.24.3(typescript@6.0.2)': - dependencies: - '@electric-sql/pglite': 0.4.1 - '@electric-sql/pglite-socket': 0.1.1(@electric-sql/pglite@0.4.1) - '@electric-sql/pglite-tools': 0.3.1(@electric-sql/pglite@0.4.1) - '@hono/node-server': 1.19.11(hono@4.12.12) - '@prisma/get-platform': 7.2.0 - '@prisma/query-plan-executor': 7.2.0 - '@prisma/streams-local': 0.1.2 - foreground-child: 3.3.1 - get-port-please: 3.2.0 - hono: 4.12.12 - http-status-codes: 2.3.0 - pathe: 2.0.3 - proper-lockfile: 4.1.2 - remeda: 2.33.4 - std-env: 3.10.0 - valibot: 1.2.0(typescript@6.0.2) - zeptomatch: 2.1.0 - transitivePeerDependencies: - - typescript - optional: true - - '@prisma/engines-version@7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711': + '@rolldown/binding-freebsd-x64@1.1.3': optional: true - '@prisma/engines@7.7.0': - dependencies: - '@prisma/debug': 7.7.0 - '@prisma/engines-version': 7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711 - '@prisma/fetch-engine': 7.7.0 - '@prisma/get-platform': 7.7.0 + '@rolldown/binding-linux-arm-gnueabihf@1.1.3': optional: true - '@prisma/fetch-engine@7.7.0': - dependencies: - '@prisma/debug': 7.7.0 - '@prisma/engines-version': 7.6.0-1.75cbdc1eb7150937890ad5465d861175c6624711 - '@prisma/get-platform': 7.7.0 + '@rolldown/binding-linux-arm64-gnu@1.1.3': optional: true - '@prisma/get-platform@7.2.0': - dependencies: - '@prisma/debug': 7.2.0 + '@rolldown/binding-linux-arm64-musl@1.1.3': optional: true - '@prisma/get-platform@7.7.0': - dependencies: - '@prisma/debug': 7.7.0 + '@rolldown/binding-linux-ppc64-gnu@1.1.3': optional: true - '@prisma/query-plan-executor@7.2.0': + '@rolldown/binding-linux-s390x-gnu@1.1.3': optional: true - '@prisma/streams-local@0.1.2': - dependencies: - ajv: 8.18.0 - better-result: 2.8.2 - env-paths: 3.0.0 - proper-lockfile: 4.1.2 + '@rolldown/binding-linux-x64-gnu@1.1.3': optional: true - '@prisma/studio-core@0.27.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': - dependencies: - '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@types/react': 19.2.14 - chart.js: 4.5.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - transitivePeerDependencies: - - '@types/react-dom' + '@rolldown/binding-linux-x64-musl@1.1.3': optional: true - '@radix-ui/primitive@1.1.3': + '@rolldown/binding-openharmony-arm64@1.1.3': optional: true - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.5)': + '@rolldown/binding-wasm32-wasi@1.1.3': dependencies: - react: 19.2.5 - optionalDependencies: - '@types/react': 19.2.14 + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optional: true - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': - dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - optional: true - - '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.5)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - optionalDependencies: - '@types/react': 19.2.14 - optional: true - - '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - optional: true - - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.5)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.5) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - optionalDependencies: - '@types/react': 19.2.14 + '@rolldown/binding-win32-arm64-msvc@1.1.3': optional: true - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.5)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.5) - react: 19.2.5 - optionalDependencies: - '@types/react': 19.2.14 + '@rolldown/binding-win32-x64-msvc@1.1.3': optional: true - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.5)': - dependencies: - react: 19.2.5 - optionalDependencies: - '@types/react': 19.2.14 - optional: true + '@rolldown/pluginutils@1.0.1': {} '@scarf/scarf@1.4.0': {} - '@standard-schema/spec@1.1.0': - optional: true + '@standard-schema/spec@1.1.0': {} - '@swagger-api/apidom-ast@1.10.1': + '@swagger-api/apidom-ast@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-error': 1.10.1 + '@swagger-api/apidom-error': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) unraw: 3.0.0 - '@swagger-api/apidom-core@1.10.1': + '@swagger-api/apidom-core@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-ast': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 '@types/ramda': 0.30.2 minim: 0.23.8 ramda: 0.30.1 @@ -2856,260 +3687,260 @@ snapshots: short-unique-id: 5.3.2 ts-mixer: 6.0.4 - '@swagger-api/apidom-error@1.10.1': + '@swagger-api/apidom-error@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-json-pointer@1.10.1': + '@swagger-api/apidom-json-pointer@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 '@swaggerexpert/json-pointer': 2.10.2 - '@swagger-api/apidom-ns-api-design-systems@1.10.1': + '@swagger-api/apidom-ns-api-design-systems@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-1': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-arazzo-1@1.10.1': + '@swagger-api/apidom-ns-arazzo-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-asyncapi-2@1.10.1': + '@swagger-api/apidom-ns-asyncapi-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-json-schema-draft-7': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-asyncapi-3@1.10.1': + '@swagger-api/apidom-ns-asyncapi-3@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-asyncapi-2': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-json-schema-2019-09@1.10.1': + '@swagger-api/apidom-ns-json-schema-2019-09@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 - '@swagger-api/apidom-ns-json-schema-draft-7': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-7': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-2020-12@1.10.1': + '@swagger-api/apidom-ns-json-schema-2020-12@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 - '@swagger-api/apidom-ns-json-schema-2019-09': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-2019-09': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-4@1.10.1': + '@swagger-api/apidom-ns-json-schema-draft-4@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-ast': 1.10.1 - '@swagger-api/apidom-core': 1.10.1 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-core': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-6@1.10.1': + '@swagger-api/apidom-ns-json-schema-draft-6@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-json-schema-draft-7@1.10.1': + '@swagger-api/apidom-ns-json-schema-draft-7@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 - '@swagger-api/apidom-ns-json-schema-draft-6': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-6': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-2@1.10.1': + '@swagger-api/apidom-ns-openapi-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 optional: true - '@swagger-api/apidom-ns-openapi-3-0@1.10.1': + '@swagger-api/apidom-ns-openapi-3-0@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 - '@swagger-api/apidom-ns-json-schema-draft-4': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-ns-json-schema-draft-4': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-3-1@1.10.1': + '@swagger-api/apidom-ns-openapi-3-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-ast': 1.10.1 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-json-pointer': 1.10.1 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-0': 1.10.1 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-json-pointer': 1.10.2 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-ns-openapi-3-2@1.10.1': + '@swagger-api/apidom-ns-openapi-3-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-ast': 1.10.1 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-json-pointer': 1.10.1 - '@swagger-api/apidom-ns-json-schema-2020-12': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-0': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-1': 1.10.1 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-json-pointer': 1.10.2 + '@swagger-api/apidom-ns-json-schema-2020-12': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) ts-mixer: 6.0.4 - '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.10.1': + '@swagger-api/apidom-parser-adapter-api-design-systems-json@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-api-design-systems': 1.10.1 - '@swagger-api/apidom-parser-adapter-json': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-api-design-systems': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.10.1': + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-api-design-systems': 1.10.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-api-design-systems': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.10.1': + '@swagger-api/apidom-parser-adapter-arazzo-json-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-arazzo-1': 1.10.1 - '@swagger-api/apidom-parser-adapter-json': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-arazzo-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.10.1': + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-arazzo-1': 1.10.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-arazzo-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.10.1': + '@swagger-api/apidom-parser-adapter-asyncapi-json-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-asyncapi-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-json': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.10.1': + '@swagger-api/apidom-parser-adapter-asyncapi-json-3@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-asyncapi-3': 1.10.1 - '@swagger-api/apidom-parser-adapter-json': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-3': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.10.1': + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-asyncapi-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.10.1': + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-asyncapi-3': 1.10.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-3': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-json@1.10.1': + '@swagger-api/apidom-parser-adapter-json@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-ast': 1.10.1 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) @@ -3118,100 +3949,100 @@ snapshots: web-tree-sitter: 0.24.5 optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-2@1.10.1': + '@swagger-api/apidom-parser-adapter-openapi-json-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-openapi-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-json': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.10.1': + '@swagger-api/apidom-parser-adapter-openapi-json-3-0@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-0': 1.10.1 - '@swagger-api/apidom-parser-adapter-json': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.10.1': + '@swagger-api/apidom-parser-adapter-openapi-json-3-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-1': 1.10.1 - '@swagger-api/apidom-parser-adapter-json': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-json-3-2@1.10.1': + '@swagger-api/apidom-parser-adapter-openapi-json-3-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-json': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.10.1': + '@swagger-api/apidom-parser-adapter-openapi-yaml-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-openapi-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.10.1': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-0': 1.10.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.10.1': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-1': 1.10.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2@1.10.1': + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 '@types/ramda': 0.30.2 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optional: true - '@swagger-api/apidom-parser-adapter-yaml-1-2@1.10.1': + '@swagger-api/apidom-parser-adapter-yaml-1-2@1.10.2': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-ast': 1.10.1 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 + '@swagger-api/apidom-ast': 1.10.2 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 '@tree-sitter-grammars/tree-sitter-yaml': 0.7.1(tree-sitter@0.22.4) '@types/ramda': 0.30.2 ramda: 0.30.1 @@ -3220,42 +4051,42 @@ snapshots: web-tree-sitter: 0.24.5 optional: true - '@swagger-api/apidom-reference@1.10.1': + '@swagger-api/apidom-reference@1.10.2(debug@4.4.3)': dependencies: '@babel/runtime-corejs3': 7.29.2 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 '@types/ramda': 0.30.2 - axios: 1.15.0 + axios: 1.15.2(debug@4.4.3) minimatch: 10.2.5 ramda: 0.30.1 ramda-adjunct: 5.1.0(ramda@0.30.1) optionalDependencies: - '@swagger-api/apidom-json-pointer': 1.10.1 - '@swagger-api/apidom-ns-arazzo-1': 1.10.1 - '@swagger-api/apidom-ns-asyncapi-2': 1.10.1 - '@swagger-api/apidom-ns-openapi-2': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-0': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-1': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-api-design-systems-json': 1.10.1 - '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 1.10.1 - '@swagger-api/apidom-parser-adapter-arazzo-json-1': 1.10.1 - '@swagger-api/apidom-parser-adapter-arazzo-yaml-1': 1.10.1 - '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-asyncapi-json-3': 1.10.1 - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3': 1.10.1 - '@swagger-api/apidom-parser-adapter-json': 1.10.1 - '@swagger-api/apidom-parser-adapter-openapi-json-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 1.10.1 - '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 1.10.1 - '@swagger-api/apidom-parser-adapter-openapi-json-3-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 1.10.1 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 1.10.1 - '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2': 1.10.1 - '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.1 + '@swagger-api/apidom-json-pointer': 1.10.2 + '@swagger-api/apidom-ns-arazzo-1': 1.10.2 + '@swagger-api/apidom-ns-asyncapi-2': 1.10.2 + '@swagger-api/apidom-ns-openapi-2': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-0': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-api-design-systems-json': 1.10.2 + '@swagger-api/apidom-parser-adapter-api-design-systems-yaml': 1.10.2 + '@swagger-api/apidom-parser-adapter-arazzo-json-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-arazzo-yaml-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-asyncapi-json-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-asyncapi-json-3': 1.10.2 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-asyncapi-yaml-3': 1.10.2 + '@swagger-api/apidom-parser-adapter-json': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-json-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-json-3-0': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-json-3-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-json-3-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-yaml-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-0': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-1': 1.10.2 + '@swagger-api/apidom-parser-adapter-openapi-yaml-3-2': 1.10.2 + '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.10.2 transitivePeerDependencies: - debug @@ -3271,6 +4102,40 @@ snapshots: dependencies: tslib: 2.8.1 + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/runtime': 7.29.2 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.9.1': + dependencies: + '@adobe/css-tools': 4.5.0 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': + dependencies: + '@babel/runtime': 7.29.2 + '@testing-library/dom': 10.4.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + '@tree-sitter-grammars/tree-sitter-yaml@0.7.1(tree-sitter@0.22.4)': dependencies: node-addon-api: 8.7.0 @@ -3279,6 +4144,22 @@ snapshots: tree-sitter: 0.22.4 optional: true + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/aria-query@5.0.4': {} + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.9': {} + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -3287,6 +4168,8 @@ snapshots: dependencies: undici-types: 7.19.2 + '@types/parse-json@4.0.2': {} + '@types/pg@8.15.4': dependencies: '@types/node': 25.6.0 @@ -3295,6 +4178,8 @@ snapshots: '@types/prismjs@1.26.6': {} + '@types/prop-types@15.7.15': {} + '@types/ramda@0.30.2': dependencies: types-ramda: 0.30.1 @@ -3303,6 +4188,10 @@ snapshots: dependencies: '@types/react': 19.2.14 + '@types/react-transition-group@4.4.12(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + '@types/react@19.2.14': dependencies: csstype: 3.2.3 @@ -3316,13 +4205,55 @@ snapshots: '@types/use-sync-external-store@0.0.6': {} - ajv@8.18.0: + '@vitejs/plugin-react@6.0.3(vite@8.1.0(@types/node@25.6.0)(esbuild@0.27.7)(tsx@4.21.0))': dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - optional: true + '@rolldown/pluginutils': 1.0.1 + vite: 8.1.0(@types/node@25.6.0)(esbuild@0.27.7)(tsx@4.21.0) + + '@vitest/expect@4.1.9': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + chai: 6.2.2 + tinyrainbow: 3.1.0 + + '@vitest/mocker@4.1.9(vite@8.1.0(@types/node@25.6.0)(esbuild@0.27.7)(tsx@4.21.0))': + dependencies: + '@vitest/spy': 4.1.9 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.1.0(@types/node@25.6.0)(esbuild@0.27.7)(tsx@4.21.0) + + '@vitest/pretty-format@4.1.9': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/runner@4.1.9': + dependencies: + '@vitest/utils': 4.1.9 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.9': + dependencies: + '@vitest/pretty-format': 4.1.9 + '@vitest/utils': 4.1.9 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.1.9': {} + + '@vitest/utils@4.1.9': + dependencies: + '@vitest/pretty-format': 4.1.9 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + + ansi-regex@5.0.1: {} + + ansi-styles@5.2.0: {} apg-lite@1.0.5: {} @@ -3332,6 +4263,14 @@ snapshots: argparse@2.0.1: {} + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + aria-query@5.3.2: {} + + assertion-error@2.0.1: {} + asynckit@0.4.0: {} autolinker@3.16.2: @@ -3342,25 +4281,29 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - aws-ssl-profiles@1.1.2: - optional: true - - axios@1.15.0: + axios@1.15.2(debug@4.4.3): dependencies: - follow-redirects: 1.15.11 + follow-redirects: 1.16.0(debug@4.4.3) form-data: 4.0.5 proxy-from-env: 2.1.0 transitivePeerDependencies: - debug + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.29.2 + cosmiconfig: 7.1.0 + resolve: 1.22.12 + balanced-match@4.0.4: {} base64-js@1.5.1: {} - baseline-browser-mapping@2.10.18: {} + baseline-browser-mapping@2.10.23: {} - better-result@2.8.2: - optional: true + bidi-js@1.0.3: + dependencies: + require-from-string: 2.0.2 brace-expansion@5.0.5: dependencies: @@ -3371,23 +4314,7 @@ snapshots: buffer@6.0.3: dependencies: base64-js: 1.5.1 - ieee754: 1.2.1 - - c12@3.1.0: - dependencies: - chokidar: 4.0.3 - confbox: 0.2.4 - defu: 6.1.7 - dotenv: 16.6.1 - exsolve: 1.0.8 - giget: 2.0.0 - jiti: 2.6.1 - ohash: 2.0.11 - pathe: 2.0.3 - perfect-debounce: 1.0.0 - pkg-types: 2.3.0 - rc9: 2.1.2 - optional: true + ieee754: 1.2.1 call-bind-apply-helpers@1.0.2: dependencies: @@ -3406,7 +4333,11 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - caniuse-lite@1.0.30001787: {} + callsites@3.1.0: {} + + caniuse-lite@1.0.30001791: {} + + chai@6.2.2: {} character-entities-legacy@3.0.0: {} @@ -3414,39 +4345,21 @@ snapshots: character-reference-invalid@2.0.1: {} - chart.js@4.5.1: - dependencies: - '@kurkle/color': 0.3.4 - optional: true - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - optional: true - - citty@0.1.6: - dependencies: - consola: 3.4.2 - optional: true - - citty@0.2.2: - optional: true - classnames@2.5.1: {} client-only@0.0.1: {} + clsx@2.1.1: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 comma-separated-tokens@2.0.3: {} - confbox@0.2.4: - optional: true + convert-source-map@1.9.0: {} - consola@3.4.2: - optional: true + convert-source-map@2.0.0: {} copy-to-clipboard@3.3.3: dependencies: @@ -3454,30 +4367,42 @@ snapshots: core-js-pure@3.49.0: {} - cross-spawn@7.0.6: + cosmiconfig@7.1.0: dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - optional: true + '@types/parse-json': 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.3 + + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 css.escape@1.5.1: {} csstype@3.2.3: {} + data-urls@7.0.0: + dependencies: + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1 + transitivePeerDependencies: + - '@noble/hashes' + debug@4.4.3: dependencies: ms: 2.1.3 + decimal.js@10.6.0: {} + decode-named-character-reference@1.3.0: dependencies: character-entities: 2.0.2 deep-extend@0.6.0: {} - deepmerge-ts@7.1.5: - optional: true - deepmerge@4.3.1: {} define-data-property@1.1.4: @@ -3486,29 +4411,27 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - defu@6.1.7: - optional: true - delayed-stream@1.0.0: {} - denque@2.1.0: - optional: true + dequal@2.0.3: {} - destr@2.0.5: - optional: true + detect-libc@2.1.2: {} - detect-libc@2.1.2: - optional: true + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.29.2 + csstype: 3.2.3 - dompurify@3.3.3: + dompurify@3.4.1: optionalDependencies: '@types/trusted-types': 2.0.7 dotenv@16.5.0: {} - dotenv@16.6.1: - optional: true - drange@1.1.1: {} drizzle-kit@0.31.1: @@ -3520,15 +4443,10 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.44.2(@electric-sql/pglite@0.4.1)(@prisma/client@7.7.0(prisma@7.7.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(typescript@6.0.2))(@types/pg@8.15.4)(mysql2@3.15.3)(pg@8.16.0)(postgres@3.4.7)(prisma@7.7.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2)): + drizzle-orm@0.44.2(@types/pg@8.15.4)(pg@8.16.0): optionalDependencies: - '@electric-sql/pglite': 0.4.1 - '@prisma/client': 7.7.0(prisma@7.7.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2))(typescript@6.0.2) '@types/pg': 8.15.4 - mysql2: 3.15.3 pg: 8.16.0 - postgres: 3.4.7 - prisma: 7.7.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2) dunder-proto@1.0.1: dependencies: @@ -3536,22 +4454,18 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - effect@3.20.0: - dependencies: - '@standard-schema/spec': 1.1.0 - fast-check: 3.23.2 - optional: true - - empathic@2.0.0: - optional: true + entities@8.0.0: {} - env-paths@3.0.0: - optional: true + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 es-define-property@1.0.1: {} es-errors@1.3.0: {} + es-module-lexer@2.1.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -3561,7 +4475,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.3 esbuild-register@3.6.0(esbuild@0.25.12): dependencies: @@ -3653,44 +4567,40 @@ snapshots: '@esbuild/win32-ia32': 0.27.7 '@esbuild/win32-x64': 0.27.7 - exsolve@1.0.8: - optional: true + escape-string-regexp@4.0.0: {} - fast-check@3.23.2: + estree-walker@3.0.3: dependencies: - pure-rand: 6.1.0 - optional: true + '@types/estree': 1.0.9 - fast-deep-equal@3.1.3: - optional: true + expect-type@1.4.0: {} fast-json-patch@3.1.1: {} - fast-uri@3.1.0: - optional: true - fault@1.0.4: dependencies: format: 0.2.2 - follow-redirects@1.15.11: {} + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + find-root@1.1.0: {} + + follow-redirects@1.16.0(debug@4.4.3): + optionalDependencies: + debug: 4.4.3 for-each@0.3.5: dependencies: is-callable: 1.2.7 - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - optional: true - form-data@4.0.5: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 - hasown: 2.0.2 + hasown: 2.0.3 mime-types: 2.1.35 format@0.2.2: {} @@ -3700,11 +4610,6 @@ snapshots: function-bind@1.1.2: {} - generate-function@2.3.1: - dependencies: - is-property: 1.0.2 - optional: true - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -3715,42 +4620,20 @@ snapshots: get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.3 math-intrinsics: 1.1.0 - get-port-please@3.2.0: - optional: true - get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-tsconfig@4.13.7: + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 - giget@2.0.0: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - defu: 6.1.7 - node-fetch-native: 1.6.7 - nypm: 0.6.5 - pathe: 2.0.3 - optional: true - gopd@1.2.0: {} - graceful-fs@4.2.11: - optional: true - - grammex@3.1.12: - optional: true - - graphmatch@1.1.1: - optional: true - has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 @@ -3761,7 +4644,7 @@ snapshots: dependencies: has-symbols: 1.1.0 - hasown@2.0.2: + hasown@2.0.3: dependencies: function-bind: 1.1.2 @@ -3781,21 +4664,27 @@ snapshots: highlightjs-vue@1.0.0: {} - hono@4.12.12: - optional: true - - http-status-codes@2.3.0: - optional: true + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 - iconv-lite@0.7.2: + html-encoding-sniffer@6.0.0: dependencies: - safer-buffer: 2.1.2 - optional: true + '@exodus/bytes': 1.15.1 + transitivePeerDependencies: + - '@noble/hashes' ieee754@1.2.1: {} immutable@3.8.3: {} + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + indent-string@4.0.0: {} + inherits@2.0.4: {} invariant@2.2.4: @@ -3809,14 +4698,19 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 + is-arrayish@0.2.1: {} + is-callable@1.2.7: {} + is-core-module@2.16.1: + dependencies: + hasown: 2.0.3 + is-decimal@2.0.1: {} is-hexadecimal@2.0.1: {} - is-property@1.0.2: - optional: true + is-potential-custom-element-name@1.0.1: {} is-typed-array@1.1.15: dependencies: @@ -3824,12 +4718,6 @@ snapshots: isarray@2.0.5: {} - isexe@2.0.0: - optional: true - - jiti@2.6.1: - optional: true - js-file-download@0.4.12: {} js-tokens@4.0.0: {} @@ -3838,16 +4726,91 @@ snapshots: dependencies: argparse: 2.0.1 - json-schema-traverse@1.0.0: + jsdom@29.1.1: + dependencies: + '@asamuzakjp/css-color': 5.1.11 + '@asamuzakjp/dom-selector': 7.1.1 + '@bramus/specificity': 2.4.2 + '@csstools/css-syntax-patches-for-csstree': 1.1.5(css-tree@3.2.1) + '@exodus/bytes': 1.15.1 + css-tree: 3.2.1 + data-urls: 7.0.0 + decimal.js: 10.6.0 + html-encoding-sniffer: 6.0.0 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.5.1 + parse5: 8.0.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 6.0.1 + undici: 7.28.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 8.0.1 + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - '@noble/hashes' + + jsesc@3.1.0: {} + + json-parse-even-better-errors@2.3.1: {} + + lightningcss-android-arm64@1.32.0: optional: true - lodash.debounce@4.0.8: {} + lightningcss-darwin-arm64@1.32.0: + optional: true - lodash@4.18.1: {} + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true - long@5.3.2: + lightningcss-linux-x64-musl@1.32.0: optional: true + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + lines-and-columns@1.2.4: {} + + lodash.debounce@4.0.8: {} + + lodash@4.18.1: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -3857,17 +4820,30 @@ snapshots: fault: 1.0.4 highlight.js: 10.7.3 - lru.min@1.1.4: - optional: true + lru-cache@11.5.1: {} + + lucide-react@1.27.0(react@19.2.7): + dependencies: + react: 19.2.7 + + lz-string@1.5.0: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 math-intrinsics@1.1.0: {} + mdn-data@2.27.1: {} + mime-db@1.52.0: {} mime-types@2.1.35: dependencies: mime-db: 1.52.0 + min-indent@1.0.1: {} + minim@0.23.8: dependencies: lodash: 4.18.1 @@ -3878,38 +4854,27 @@ snapshots: ms@2.1.3: {} - mysql2@3.15.3: - dependencies: - aws-ssl-profiles: 1.1.2 - denque: 2.1.0 - generate-function: 2.3.1 - iconv-lite: 0.7.2 - long: 5.3.2 - lru.min: 1.1.4 - named-placeholders: 1.1.6 - seq-queue: 0.0.5 - sqlstring: 2.3.3 - optional: true - - named-placeholders@1.1.6: - dependencies: - lru.min: 1.1.4 - optional: true - nanoid@3.3.11: {} + nanoid@3.3.15: {} + neotraverse@0.6.18: {} - next@16.2.3(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + next-themes@0.4.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + dependencies: + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + next@16.2.3(babel-plugin-macros@3.1.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: '@next/env': 16.2.3 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.10.18 - caniuse-lite: 1.0.30001787 + baseline-browser-mapping: 2.10.23 + caniuse-lite: 1.0.30001791 postcss: 8.4.31 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - styled-jsx: 5.1.6(react@19.2.5) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + styled-jsx: 5.1.6(babel-plugin-macros@3.1.0)(react@19.2.7) optionalDependencies: '@next/swc-darwin-arm64': 16.2.3 '@next/swc-darwin-x64': 16.2.3 @@ -3936,23 +4901,12 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - node-fetch-native@1.6.7: - optional: true - node-gyp-build@4.8.4: optional: true - nypm@0.6.5: - dependencies: - citty: 0.2.2 - pathe: 2.0.3 - tinyexec: 1.1.1 - optional: true - object-assign@4.1.1: {} - ohash@2.0.11: - optional: true + obug@2.1.3: {} openapi-path-templating@2.2.1: dependencies: @@ -3962,6 +4916,10 @@ snapshots: dependencies: apg-lite: 1.0.5 + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 @@ -3972,14 +4930,22 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - path-key@3.1.1: - optional: true + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.0 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 - pathe@2.0.3: - optional: true + parse5@8.0.1: + dependencies: + entities: 8.0.0 - perfect-debounce@1.0.0: - optional: true + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + pathe@2.0.3: {} pg-cloudflare@1.3.0: optional: true @@ -4018,12 +4984,9 @@ snapshots: picocolors@1.1.1: {} - pkg-types@2.3.0: - dependencies: - confbox: 0.2.4 - exsolve: 1.0.8 - pathe: 2.0.3 - optional: true + picomatch@4.0.4: {} + + pnpm@10.33.2: {} possible-typed-array-names@1.1.0: {} @@ -4033,6 +4996,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.15: + dependencies: + nanoid: 3.3.15 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postgres-array@2.0.0: {} postgres-bytea@1.0.1: {} @@ -4043,26 +5012,11 @@ snapshots: dependencies: xtend: 4.0.2 - postgres@3.4.7: - optional: true - - prisma@7.7.0(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(typescript@6.0.2): + pretty-format@27.5.1: dependencies: - '@prisma/config': 7.7.0 - '@prisma/dev': 0.24.3(typescript@6.0.2) - '@prisma/engines': 7.7.0 - '@prisma/studio-core': 0.27.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - mysql2: 3.15.3 - postgres: 3.4.7 - optionalDependencies: - typescript: 6.0.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - magicast - - react - - react-dom - optional: true + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 prismjs@1.30.0: {} @@ -4072,19 +5026,11 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 - proper-lockfile@4.1.2: - dependencies: - graceful-fs: 4.2.11 - retry: 0.12.0 - signal-exit: 3.0.7 - optional: true - property-information@7.1.0: {} proxy-from-env@2.1.0: {} - pure-rand@6.1.0: - optional: true + punycode@2.3.1: {} querystringify@2.2.0: {} @@ -4103,27 +5049,21 @@ snapshots: dependencies: safe-buffer: 5.2.1 - rc9@2.1.2: - dependencies: - defu: 6.1.7 - destr: 2.0.5 - optional: true - - react-copy-to-clipboard@5.1.0(react@19.2.5): + react-copy-to-clipboard@5.1.0(react@19.2.7): dependencies: copy-to-clipboard: 3.3.3 prop-types: 15.8.1 - react: 19.2.5 + react: 19.2.7 - react-debounce-input@3.3.0(react@19.2.5): + react-debounce-input@3.3.0(react@19.2.7): dependencies: lodash.debounce: 4.0.8 prop-types: 15.8.1 - react: 19.2.5 + react: 19.2.7 - react-dom@19.2.5(react@19.2.5): + react-dom@19.2.7(react@19.2.7): dependencies: - react: 19.2.5 + react: 19.2.7 scheduler: 0.27.0 react-immutable-proptypes@2.2.0(immutable@3.8.3): @@ -4131,41 +5071,56 @@ snapshots: immutable: 3.8.3 invariant: 2.2.4 - react-immutable-pure-component@2.2.2(immutable@3.8.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + react-immutable-pure-component@2.2.2(immutable@3.8.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: immutable: 3.8.3 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) - react-inspector@6.0.2(react@19.2.5): + react-inspector@6.0.2(react@19.2.7): dependencies: - react: 19.2.5 + react: 19.2.7 react-is@16.13.1: {} - react-redux@9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1): + react-is@17.0.2: {} + + react-is@19.2.5: {} + + react-redux@9.2.0(@types/react@19.2.14)(react@19.2.7)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 - react: 19.2.5 - use-sync-external-store: 1.6.0(react@19.2.5) + react: 19.2.7 + use-sync-external-store: 1.6.0(react@19.2.7) optionalDependencies: '@types/react': 19.2.14 redux: 5.0.1 - react-syntax-highlighter@16.1.1(react@19.2.5): + react-syntax-highlighter@16.1.1(react@19.2.7): dependencies: '@babel/runtime': 7.29.2 highlight.js: 10.7.3 highlightjs-vue: 1.0.0 lowlight: 1.20.0 prismjs: 1.30.0 - react: 19.2.5 + react: 19.2.7 refractor: 5.0.0 - react@19.2.5: {} + react-transition-group@4.4.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + dependencies: + '@babel/runtime': 7.29.2 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) + + react@19.2.7: {} - readdirp@4.1.2: - optional: true + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 redux-immutable@4.0.0(immutable@3.8.3): dependencies: @@ -4185,38 +5140,59 @@ snapshots: argparse: 1.0.10 autolinker: 3.16.2 - remeda@2.33.4: - optional: true - repeat-string@1.6.1: {} - require-from-string@2.0.2: - optional: true + require-from-string@2.0.2: {} requires-port@1.0.0: {} reselect@5.1.1: {} + resolve-from@4.0.0: {} + resolve-pkg-maps@1.0.0: {} + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + ret@0.2.2: {} - retry@0.12.0: - optional: true + rolldown@1.1.3: + dependencies: + '@oxc-project/types': 0.137.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.1.3 + '@rolldown/binding-darwin-arm64': 1.1.3 + '@rolldown/binding-darwin-x64': 1.1.3 + '@rolldown/binding-freebsd-x64': 1.1.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.1.3 + '@rolldown/binding-linux-arm64-gnu': 1.1.3 + '@rolldown/binding-linux-arm64-musl': 1.1.3 + '@rolldown/binding-linux-ppc64-gnu': 1.1.3 + '@rolldown/binding-linux-s390x-gnu': 1.1.3 + '@rolldown/binding-linux-x64-gnu': 1.1.3 + '@rolldown/binding-linux-x64-musl': 1.1.3 + '@rolldown/binding-openharmony-arm64': 1.1.3 + '@rolldown/binding-wasm32-wasi': 1.1.3 + '@rolldown/binding-win32-arm64-msvc': 1.1.3 + '@rolldown/binding-win32-x64-msvc': 1.1.3 safe-buffer@5.2.1: {} - safer-buffer@2.1.2: - optional: true + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 scheduler@0.27.0: {} semver@7.7.4: optional: true - seq-queue@0.0.5: - optional: true - serialize-error@8.1.0: dependencies: type-fest: 0.20.2 @@ -4268,21 +5244,14 @@ snapshots: '@img/sharp-win32-x64': 0.34.5 optional: true - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - optional: true - - shebang-regex@3.0.0: - optional: true - short-unique-id@5.3.2: {} - signal-exit@3.0.7: - optional: true + siginfo@2.0.0: {} - signal-exit@4.1.0: - optional: true + sonner@2.0.7(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + dependencies: + react: 19.2.7 + react-dom: 19.2.7(react@19.2.7) source-map-js@1.2.1: {} @@ -4291,6 +5260,8 @@ snapshots: buffer-from: 1.1.2 source-map: 0.6.1 + source-map@0.5.7: {} + source-map@0.6.1: {} space-separated-tokens@2.0.2: {} @@ -4299,27 +5270,35 @@ snapshots: sprintf-js@1.0.3: {} - sqlstring@2.3.3: - optional: true + stackback@0.0.2: {} - std-env@3.10.0: - optional: true + std-env@4.1.0: {} + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 - styled-jsx@5.1.6(react@19.2.5): + styled-jsx@5.1.6(babel-plugin-macros@3.1.0)(react@19.2.7): dependencies: client-only: 0.0.1 - react: 19.2.5 + react: 19.2.7 + optionalDependencies: + babel-plugin-macros: 3.1.0 + + stylis@4.2.0: {} - swagger-client@3.37.1: + supports-preserve-symlinks-flag@1.0.0: {} + + swagger-client@3.37.2(debug@4.4.3): dependencies: '@babel/runtime-corejs3': 7.29.2 '@scarf/scarf': 1.4.0 - '@swagger-api/apidom-core': 1.10.1 - '@swagger-api/apidom-error': 1.10.1 - '@swagger-api/apidom-json-pointer': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-1': 1.10.1 - '@swagger-api/apidom-ns-openapi-3-2': 1.10.1 - '@swagger-api/apidom-reference': 1.10.1 + '@swagger-api/apidom-core': 1.10.2 + '@swagger-api/apidom-error': 1.10.2 + '@swagger-api/apidom-json-pointer': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-1': 1.10.2 + '@swagger-api/apidom-ns-openapi-3-2': 1.10.2 + '@swagger-api/apidom-reference': 1.10.2(debug@4.4.3) '@swaggerexpert/cookie': 2.0.2 deepmerge: 4.3.1 fast-json-patch: 3.1.1 @@ -4334,7 +5313,7 @@ snapshots: transitivePeerDependencies: - debug - swagger-ui-react@5.32.2(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + swagger-ui-react@5.32.2(@types/react@19.2.14)(debug@4.4.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: '@babel/runtime-corejs3': 7.29.2 '@scarf/scarf': 1.4.0 @@ -4343,7 +5322,7 @@ snapshots: classnames: 2.5.1 css.escape: 1.5.1 deep-extend: 0.6.0 - dompurify: 3.3.3 + dompurify: 3.4.1 ieee754: 1.2.1 immutable: 3.8.3 js-file-download: 0.4.12 @@ -4352,22 +5331,22 @@ snapshots: prop-types: 15.8.1 randexp: 0.5.3 randombytes: 2.1.0 - react: 19.2.5 - react-copy-to-clipboard: 5.1.0(react@19.2.5) - react-debounce-input: 3.3.0(react@19.2.5) - react-dom: 19.2.5(react@19.2.5) + react: 19.2.7 + react-copy-to-clipboard: 5.1.0(react@19.2.7) + react-debounce-input: 3.3.0(react@19.2.7) + react-dom: 19.2.7(react@19.2.7) react-immutable-proptypes: 2.2.0(immutable@3.8.3) - react-immutable-pure-component: 2.2.2(immutable@3.8.3)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - react-inspector: 6.0.2(react@19.2.5) - react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.5)(redux@5.0.1) - react-syntax-highlighter: 16.1.1(react@19.2.5) + react-immutable-pure-component: 2.2.2(immutable@3.8.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + react-inspector: 6.0.2(react@19.2.7) + react-redux: 9.2.0(@types/react@19.2.14)(react@19.2.7)(redux@5.0.1) + react-syntax-highlighter: 16.1.1(react@19.2.7) redux: 5.0.1 redux-immutable: 4.0.0(immutable@3.8.3) remarkable: 2.0.1 reselect: 5.1.1 serialize-error: 8.1.0 sha.js: 2.4.12 - swagger-client: 3.37.1 + swagger-client: 3.37.2(debug@4.4.3) url-parse: 1.5.10 xml: 1.0.1 xml-but-prettier: 1.0.1 @@ -4376,8 +5355,24 @@ snapshots: - '@types/react' - debug - tinyexec@1.1.1: - optional: true + symbol-tree@3.2.4: {} + + tinybench@2.9.0: {} + + tinyexec@1.2.4: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tinyrainbow@3.1.0: {} + + tldts-core@7.4.5: {} + + tldts@7.4.5: + dependencies: + tldts-core: 7.4.5 to-buffer@1.2.2: dependencies: @@ -4387,6 +5382,14 @@ snapshots: toggle-selection@1.0.6: {} + tough-cookie@6.0.1: + dependencies: + tldts: 7.4.5 + + tr46@6.0.0: + dependencies: + punycode: 2.3.1 + tree-sitter-json@0.24.8(tree-sitter@0.21.1): dependencies: node-addon-api: 8.7.0 @@ -4416,7 +5419,7 @@ snapshots: tsx@4.21.0: dependencies: esbuild: 0.27.7 - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 optionalDependencies: fsevents: 2.3.3 @@ -4434,8 +5437,12 @@ snapshots: typescript@6.0.2: {} + typescript@6.0.3: {} + undici-types@7.19.2: {} + undici@7.28.0: {} + unraw@3.0.0: {} url-parse@1.5.10: @@ -4443,20 +5450,72 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - use-sync-external-store@1.6.0(react@19.2.5): + use-sync-external-store@1.6.0(react@19.2.7): dependencies: - react: 19.2.5 + react: 19.2.7 - valibot@1.2.0(typescript@6.0.2): + vite@8.1.0(@types/node@25.6.0)(esbuild@0.27.7)(tsx@4.21.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.15 + rolldown: 1.1.3 + tinyglobby: 0.2.17 optionalDependencies: - typescript: 6.0.2 - optional: true + '@types/node': 25.6.0 + esbuild: 0.27.7 + fsevents: 2.3.3 + tsx: 4.21.0 + + vitest@4.1.9(@types/node@25.6.0)(jsdom@29.1.1)(vite@8.1.0(@types/node@25.6.0)(esbuild@0.27.7)(tsx@4.21.0)): + dependencies: + '@vitest/expect': 4.1.9 + '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@25.6.0)(esbuild@0.27.7)(tsx@4.21.0)) + '@vitest/pretty-format': 4.1.9 + '@vitest/runner': 4.1.9 + '@vitest/snapshot': 4.1.9 + '@vitest/spy': 4.1.9 + '@vitest/utils': 4.1.9 + es-module-lexer: 2.1.0 + expect-type: 1.4.0 + magic-string: 0.30.21 + obug: 2.1.3 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 8.1.0(@types/node@25.6.0)(esbuild@0.27.7)(tsx@4.21.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 25.6.0 + jsdom: 29.1.1 + transitivePeerDependencies: + - msw + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 web-streams-polyfill@3.3.3: {} web-tree-sitter@0.24.5: optional: true + webidl-conversions@8.0.1: {} + + whatwg-mimetype@5.0.0: {} + + whatwg-url@16.0.1: + dependencies: + '@exodus/bytes': 1.15.1 + tr46: 6.0.0 + webidl-conversions: 8.0.1 + transitivePeerDependencies: + - '@noble/hashes' + which-typed-array@1.1.20: dependencies: available-typed-arrays: 1.0.7 @@ -4467,23 +5526,25 @@ snapshots: gopd: 1.2.0 has-tostringtag: 1.0.2 - which@2.0.2: + why-is-node-running@2.3.0: dependencies: - isexe: 2.0.0 - optional: true + siginfo: 2.0.0 + stackback: 0.0.2 xml-but-prettier@1.0.1: dependencies: repeat-string: 1.6.1 + xml-name-validator@5.0.0: {} + xml@1.0.1: {} + xmlchars@2.2.0: {} + xtend@4.0.2: {} + yaml@1.10.3: {} + zenscroll@4.0.2: {} - zeptomatch@2.1.0: - dependencies: - grammex: 3.1.12 - graphmatch: 1.1.1 - optional: true + zod@4.3.6: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index dee51e9..f996d5f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,13 @@ packages: - "packages/*" +allowBuilds: + '@scarf/scarf': true + '@tree-sitter-grammars/tree-sitter-yaml': true + core-js-pure: true + esbuild: true + sharp: true + tree-sitter: true + tree-sitter-json: true + '@prisma/engines': true + prisma: true +nodeLinker: node-modules