From 05b3dba97cd5ddc8bd847ad9299a0545b495f894 Mon Sep 17 00:00:00 2001 From: IzumiSy Date: Tue, 2 Jun 2026 13:55:38 +0900 Subject: [PATCH 01/20] feat: add alert component --- .../src/modules/pages/primitives-demo.tsx | 28 +++++++ .../src__components__alert.test.tsx.snap | 9 +++ packages/core/src/components/alert.test.tsx | 73 +++++++++++++++++ packages/core/src/components/alert.tsx | 80 +++++++++++++++++++ packages/core/src/index.ts | 7 ++ 5 files changed, 197 insertions(+) create mode 100644 packages/core/__snapshots__/src__components__alert.test.tsx.snap create mode 100644 packages/core/src/components/alert.test.tsx create mode 100644 packages/core/src/components/alert.tsx diff --git a/examples/nextjs-app/src/modules/pages/primitives-demo.tsx b/examples/nextjs-app/src/modules/pages/primitives-demo.tsx index 7345af6a..f3d264d8 100644 --- a/examples/nextjs-app/src/modules/pages/primitives-demo.tsx +++ b/examples/nextjs-app/src/modules/pages/primitives-demo.tsx @@ -11,6 +11,9 @@ import { Menu, Table, Tabs, + Alert, + AlertTitle, + AlertDescription, } from "@tailor-platform/app-shell"; import { LayoutDashboard as LayoutDashboardIcon, @@ -505,6 +508,31 @@ export const primitiveComponentsDemoResource = defineResource({ + + {/* Alert */} + + + +
+ + Default Alert + This is a default alert message. + + + Success + Operation completed successfully. + + + Error + Something went wrong. Please try again. + + + Information + This is a neutral informational message. + +
+
+
); diff --git a/packages/core/__snapshots__/src__components__alert.test.tsx.snap b/packages/core/__snapshots__/src__components__alert.test.tsx.snap new file mode 100644 index 00000000..0ca3eb05 --- /dev/null +++ b/packages/core/__snapshots__/src__components__alert.test.tsx.snap @@ -0,0 +1,9 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Alert > snapshots > default variant 1`] = `""`; + +exports[`Alert > snapshots > error variant 1`] = `""`; + +exports[`Alert > snapshots > neutral variant 1`] = `""`; + +exports[`Alert > snapshots > success variant 1`] = `""`; diff --git a/packages/core/src/components/alert.test.tsx b/packages/core/src/components/alert.test.tsx new file mode 100644 index 00000000..a2e068ed --- /dev/null +++ b/packages/core/src/components/alert.test.tsx @@ -0,0 +1,73 @@ +import { afterEach, describe, expect, it } from "vitest"; +import { cleanup, render, screen } from "@testing-library/react"; +import { Alert, AlertTitle, AlertDescription } from "./alert"; + +afterEach(() => { + cleanup(); +}); + +describe("Alert", () => { + describe("snapshots", () => { + it("default variant", () => { + const { container } = render( + + Title + Description + , + ); + expect(container.innerHTML).toMatchSnapshot(); + }); + + it("success variant", () => { + const { container } = render( + + Success + Operation completed + , + ); + expect(container.innerHTML).toMatchSnapshot(); + }); + + it("error variant", () => { + const { container } = render( + + Error + Something went wrong + , + ); + expect(container.innerHTML).toMatchSnapshot(); + }); + + it("neutral variant", () => { + const { container } = render( + + Info + Note this + , + ); + expect(container.innerHTML).toMatchSnapshot(); + }); + }); + + it("renders with role=alert", () => { + render(Content); + expect(screen.getByRole("alert")).toBeDefined(); + }); + + it("renders title and description", () => { + render( + + Test Title + Test Description + , + ); + expect(screen.getByText("Test Title")).toBeDefined(); + expect(screen.getByText("Test Description")).toBeDefined(); + }); + + it("accepts custom className", () => { + render(Content); + const alert = screen.getByRole("alert"); + expect(alert.className).toContain("astw:mt-4"); + }); +}); diff --git a/packages/core/src/components/alert.tsx b/packages/core/src/components/alert.tsx new file mode 100644 index 00000000..c3d3d64c --- /dev/null +++ b/packages/core/src/components/alert.tsx @@ -0,0 +1,80 @@ +import * as React from "react"; +import { cva, type VariantProps } from "class-variance-authority"; +import { AlertCircleIcon, CheckCircleIcon, InfoIcon, XCircleIcon } from "lucide-react"; +import { cn } from "../lib/utils"; + +const alertVariants = cva( + "astw:relative astw:w-full astw:rounded-lg astw:border astw:px-4 astw:py-3 astw:text-sm astw:grid astw:grid-cols-[calc(var(--spacing)*4.5)_1fr] astw:gap-x-3 astw:gap-y-0.5 astw:items-start astw:[&>svg]:size-[17.5px] astw:[&>svg]:self-center astw:[&>svg]:shrink-0 astw:[&>svg]:text-current", + { + variants: { + variant: { + default: + "astw:bg-primary/10 astw:text-primary astw:border-primary/20 *:data-[slot=alert-description]:astw:text-primary/80", + success: + "astw:bg-green-500/10 astw:text-green-700 astw:border-green-500/20 dark:astw:text-green-400 *:data-[slot=alert-description]:astw:text-green-700/80 dark:*:data-[slot=alert-description]:astw:text-green-400/80", + error: + "astw:bg-destructive/10 astw:text-destructive astw:border-destructive/20 *:data-[slot=alert-description]:astw:text-destructive/80", + neutral: + "astw:bg-secondary astw:text-secondary-foreground astw:border-border *:data-[slot=alert-description]:astw:text-muted-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +const variantIcons: Record< + NonNullable["variant"]>, + React.ElementType +> = { + default: AlertCircleIcon, + success: CheckCircleIcon, + error: XCircleIcon, + neutral: InfoIcon, +}; + +type AlertProps = React.ComponentProps<"div"> & VariantProps; + +function Alert({ className, variant = "default", children, ...props }: AlertProps) { + const Icon = variantIcons[variant ?? "default"]; + return ( +
+ + {children} +
+ ); +} + +function AlertTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function AlertDescription({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +export { Alert, AlertTitle, AlertDescription, alertVariants, type AlertProps }; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 6c26da3c..b18d5814 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -83,6 +83,13 @@ export { useToast } from "./hooks/use-toast"; export { useOverrideBreadcrumb } from "./hooks/use-override-breadcrumb"; // Components +export { + Alert, + AlertTitle, + AlertDescription, + alertVariants, + type AlertProps, +} from "./components/alert"; export { Badge, badgeVariants, type BadgeProps } from "./components/badge"; export type { BadgeVariant, BadgeOptions } from "./components/badge-list"; export { DescriptionCard, type DescriptionCardProps } from "./components/description-card"; From fed7c6564c815da34ffc45e2fe7e8eed8c368cc7 Mon Sep 17 00:00:00 2001 From: itsprade Date: Tue, 28 Apr 2026 22:10:28 +0530 Subject: [PATCH 02/20] feat(themes): tailor-light/dark palettes, ThemeProvider API, tactile buttons Made-with: Cursor --- .changeset/tailor-theme-palettes.md | 26 +++ CLAUDE.md | 2 +- README.md | 4 +- docs/api/use-theme.md | 100 ++++---- docs/concepts/styling-theming.md | 15 ++ examples/nextjs-app/next.config.ts | 10 +- examples/nextjs-app/package.json | 1 + packages/core/src/assets/theme.css | 133 ++++++++++- packages/core/src/components/appshell.tsx | 18 +- packages/core/src/components/sidebar.tsx | 2 +- .../src/components/sidebar/sidebar-layout.tsx | 10 +- packages/core/src/contexts/theme-context.tsx | 68 +++++- packages/core/src/globals.css | 215 ++++++++++++++++++ packages/core/src/index.ts | 2 +- 14 files changed, 536 insertions(+), 70 deletions(-) create mode 100644 .changeset/tailor-theme-palettes.md diff --git a/.changeset/tailor-theme-palettes.md b/.changeset/tailor-theme-palettes.md new file mode 100644 index 00000000..bac1d77c --- /dev/null +++ b/.changeset/tailor-theme-palettes.md @@ -0,0 +1,26 @@ +--- +"@tailor-platform/app-shell": minor +--- + +Adds **Tailor** brand theme presets alongside the existing default light and dark palettes. `useTheme` / `ThemeProvider` accept `light`, `dark`, `tailor-light`, `tailor-dark`, and `system`. The document root sets `data-theme` to the resolved palette and keeps `class="light"` or `class="dark"` for Tailwind `dark` mode (`tailor-dark` uses the `dark` class). + +Semantic tokens in `theme.css` include placeholder **Tailor light** and **Tailor dark** values (indigo / slate–emerald styling) you can tune toward final brand colors. Status colors and elevation shadows (`--semantic-shadow-*`, mapped to `@theme` shadow keys) are centralized so each palette can override them. + +`AppShell` accepts an optional `defaultTheme` when no value is stored in `localStorage`. Exports: `Theme`, `ResolvedTheme`. + +The sidebar floating menu outline hover style now uses `var(--sidebar-border)` / `var(--sidebar-accent)` instead of `hsl(...)`, fixing invalid color math with `rgba`-based CSS variables. + +```tsx +import { AppShell, useTheme, type Theme } from "@tailor-platform/app-shell"; + +{/* ... */}; + +function Switcher() { + const { setTheme } = useTheme(); + return ( + + ); +} +``` diff --git a/CLAUDE.md b/CLAUDE.md index 0c6695e6..7955204a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -55,7 +55,7 @@ Tailor Platform AppShell - A React-based framework for building ERP applications # Install dependencies pnpm install -# Start dev server (opens localhost:3000 with example app) +# Start Next.js example (localhost:3000). Use `pnpm dev:examples` only if you need every example dev server. pnpm dev ``` diff --git a/README.md b/README.md index 01b8bfc2..a81f3f1b 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,9 @@ pnpm install ### Commands ```bash -pnpm dev # Start all packages in development mode with hot reloading +pnpm dev # Next.js example only (localhost:3000) — recommended default +pnpm dev:examples # All examples in parallel (Next + Vite + app-module watch; heavy) +pnpm dev:vite # Vite example only pnpm build # Build all packages for production pnpm type-check # Run type checking across all packages ``` diff --git a/docs/api/use-theme.md b/docs/api/use-theme.md index 7f3821ea..01b96182 100644 --- a/docs/api/use-theme.md +++ b/docs/api/use-theme.md @@ -1,103 +1,119 @@ --- title: useTheme -description: Hook for accessing and controlling theme (light/dark mode) +description: Hook for accessing and controlling theme appearance (default and Tailor palettes) --- # useTheme -React hook to access and control the current theme (light/dark mode). +React hook to access and control the current appearance theme. ## Signature +Exported types: + +```typescript +export type Theme = "light" | "dark" | "tailor-light" | "tailor-dark" | "system"; + +export type ResolvedTheme = "light" | "dark" | "tailor-light" | "tailor-dark"; +``` + +Hook return value: + ```typescript const useTheme: () => { - theme: "light" | "dark" | "system"; - setTheme: (theme: "light" | "dark" | "system") => void; - systemTheme: "light" | "dark"; + theme: Theme; + resolvedTheme: ResolvedTheme; + setTheme: (theme: Theme) => void; }; ``` -## Return Value +## Return value ### `theme` -- **Type:** `"light" | "dark" | "system"` -- **Description:** Current theme setting +- **Type:** `Theme` +- **Description:** Stored theme preference. **`system`** means “follow OS light/dark” for the **default** light/dark palettes only (not Tailor). -### `setTheme()` +### `resolvedTheme` -- **Type:** `(theme: "light" | "dark" | "system") => void` -- **Description:** Set the theme. Persisted to localStorage. +- **Type:** `ResolvedTheme` +- **Description:** Concrete palette after resolving **`system`** to **`light`** or **`dark`**. **`tailor-light`** and **`tailor-dark`** are never produced by **`system`**; pick them explicitly with **`setTheme`**. -### `systemTheme` +When **`resolvedTheme`** changes, **`document.documentElement`** gets **`data-theme`** set to this value and a **`light`** / **`dark`** class for Tailwind **`dark`** variant compatibility. -- **Type:** `"light" | "dark"` -- **Description:** System preference (from OS settings) +### `setTheme(theme)` + +- **Type:** `(theme: Theme) => void` +- **Description:** Set the theme. Persisted to **`localStorage`** (key **`appshell-ui-theme`** when using AppShell’s built-in provider). ## Usage -### Display Current Theme +### Display current themes ```typescript import { useTheme } from "@tailor-platform/app-shell"; function ThemeDisplay() { - const { theme } = useTheme(); + const { theme, resolvedTheme } = useTheme(); - return
Current theme: {theme}
; + return ( +
+ Preference: {theme} · Effective: {resolvedTheme} +
+ ); } ``` -### Theme Toggle +### Set a named palette ```typescript -function ThemeToggle() { - const { theme, setTheme } = useTheme(); - - const toggleTheme = () => { - setTheme(theme === "dark" ? "light" : "dark"); - }; - - return ; +function UseTailorLight() { + const { setTheme } = useTheme(); + return ; } ``` -### Theme Selector +### Theme selector ```typescript function ThemeSelector() { const { theme, setTheme } = useTheme(); return ( - setTheme(e.target.value as Theme)} + > + + + + ); } ``` -### Conditional Rendering +### Logo or assets by lightness + +Use **`resolvedTheme`** and treat **`tailor-light`** like light and **`tailor-dark`** like dark for monochrome assets: ```typescript function Logo() { - const { theme, systemTheme } = useTheme(); - const effectiveTheme = theme === "system" ? systemTheme : theme; + const { resolvedTheme } = useTheme(); + const darkish = + resolvedTheme === "dark" || resolvedTheme === "tailor-dark"; - return ( - Logo - ); + return Logo; } ``` -## Theme Persistence +## Theme persistence + +The built-in **`ThemeProvider`** (used inside **`AppShell`**) persists the **`theme`** value to **`localStorage`** and restores it on reload. -Theme preference is automatically saved to localStorage and restored on page load. +Use **`AppShell`**’s **`defaultTheme`** prop for the initial value when nothing is stored. ## Related -- [Styling & Theming](../concepts/styling-theming.md) - Theme customization +- [Styling & Theming](../concepts/styling-theming.md) diff --git a/docs/concepts/styling-theming.md b/docs/concepts/styling-theming.md index 60c13ae7..cf86a58a 100644 --- a/docs/concepts/styling-theming.md +++ b/docs/concepts/styling-theming.md @@ -26,6 +26,21 @@ E.g. Note, many of these are default Tailwind colors, but there are some differences. If you omit this, much of the UI will look the same, but we will lose some of the Tailor-preferred colors. +## Built-in palettes (default and Tailor) + +AppShell ships **four** named semantic palettes controlled by **`data-theme`** on **``** (see [`useTheme`](../api/use-theme.md)): + +| Resolved theme | Purpose | +| -------------- | -------------------------------------------- | +| `light` | Default neutral light (historic AppShell UI) | +| `dark` | Default neutral dark | +| `tailor-light` | Tailor brand — light tuning surface | +| `tailor-dark` | Tailor brand — dark tuning surface | + +**`system`** resolves to **`light`** or **`dark`** only — not **`tailor-*`**. Apps that want Tailor must set **`tailor-light`** or **`tailor-dark`** explicitly. + +Semantic tokens (**`--background`**, **`--primary`**, **`--border`**, sidebar tokens, **`--semantic-shadow-*`**, statuses, **`--radius`**, …) live in **`theme.css`**; override there or in host CSS keyed off **`html[data-theme='…']`**. + ## A note on AppShell component class names AppShell components use Tailwind utility classes for their styling. Tailwind classes are generated at build-time, so stylesheet for AppShell components is already built and is separate to the Tailwind stylesheet generated for your application. diff --git a/examples/nextjs-app/next.config.ts b/examples/nextjs-app/next.config.ts index e9ffa308..3e263b8c 100644 --- a/examples/nextjs-app/next.config.ts +++ b/examples/nextjs-app/next.config.ts @@ -1,7 +1,15 @@ +import path from "node:path"; import type { NextConfig } from "next"; +const monorepoRoot = path.join(__dirname, "..", ".."); + const nextConfig: NextConfig = { - /* config options here */ + turbopack: { + root: monorepoRoot, + }, + experimental: { + turbopackMemoryLimit: 1536 * 1024 * 1024, + }, }; export default nextConfig; diff --git a/examples/nextjs-app/package.json b/examples/nextjs-app/package.json index c4370552..558dec1f 100644 --- a/examples/nextjs-app/package.json +++ b/examples/nextjs-app/package.json @@ -3,6 +3,7 @@ "private": true, "scripts": { "dev": "next dev --turbopack", + "dev:webpack": "next dev", "build": "next build", "start": "next start", "lint": "oxlint -c .oxlintrc.jsonc", diff --git a/packages/core/src/assets/theme.css b/packages/core/src/assets/theme.css index a594613b..6a38cc61 100644 --- a/packages/core/src/assets/theme.css +++ b/packages/core/src/assets/theme.css @@ -34,6 +34,17 @@ --sidebar-accent-foreground: rgba(23, 23, 23, 1); --sidebar-border: rgba(229, 229, 229, 1); --sidebar-ring: rgba(163, 163, 163, 1); + /* Status (overridable per theme) */ + --status-default: #737373; + --status-neutral: #0ea5e9; + --status-completed: #22c55e; + --status-attention: #f59e0b; + --status-danger: #ef4444; + /* Elevation (wired through @theme; override per Tailor palettes) */ + --semantic-shadow-xs: 0 1px 2px 0 rgb(15 23 42 / 0.06); + --semantic-shadow-sm: 0 1px 3px 0 rgb(15 23 42 / 0.08), 0 1px 2px -1px rgb(15 23 42 / 0.08); + --semantic-shadow-md: 0 4px 6px -1px rgb(15 23 42 / 0.09), 0 2px 4px -2px rgb(15 23 42 / 0.06); + --semantic-shadow-lg: 0 10px 15px -3px rgb(15 23 42 / 0.12), 0 4px 6px -4px rgb(15 23 42 / 0.09); } .dark { @@ -70,6 +81,112 @@ --sidebar-accent-foreground: rgba(250, 250, 250, 1); --sidebar-border: rgba(255, 255, 255, 0.10000000149011612); --sidebar-ring: rgba(82, 82, 82, 1); + --semantic-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.35); + --semantic-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.38), 0 1px 2px -1px rgb(0 0 0 / 0.32); + --semantic-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.35), 0 2px 4px -2px rgb(0 0 0 / 0.28); + --semantic-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.42), 0 4px 6px -4px rgb(0 0 0 / 0.35); +} + +/** + * Tailor brand — light palette (Tailor brand guidelines). + * Primary: #535AE8 · Text: #10122B · White: #FFFFFF + * Secondary: Deep Cyan #00979C · Dark Green #013742 · Off-White #F8F3E4 · Neutral #EEEEEE · Light Violet #E2D4FE + */ +html[data-theme="tailor-light"] { + color-scheme: light; + /* Off-white app shell; white cards for elevation */ + --background: rgba(248, 243, 228, 1); + --foreground: rgba(16, 18, 43, 1); + --card: rgba(255, 255, 255, 1); + --card-foreground: rgba(16, 18, 43, 1); + --popover: rgba(255, 255, 255, 1); + --popover-foreground: rgba(16, 18, 43, 1); + --primary: rgba(83, 90, 232, 1); + --primary-foreground: rgba(255, 255, 255, 1); + /* Light violet surfaces; dark green text (brand text-on-violet pairing) */ + --secondary: rgba(226, 212, 254, 1); + --secondary-foreground: rgba(1, 55, 66, 1); + --muted: rgba(238, 238, 238, 1); + --muted-foreground: rgba(16, 18, 43, 0.72); + --accent: rgba(226, 212, 254, 1); + --accent-foreground: rgba(1, 55, 66, 1); + --destructive: rgba(185, 28, 28, 1); + --destructive-foreground: rgba(254, 242, 242, 1); + --border: rgba(0, 0, 0, 0.08); + --input: rgba(0, 0, 0, 0.08); + --ring: rgba(83, 90, 232, 0.45); + --chart-1: rgba(83, 90, 232, 1); + --chart-2: rgba(0, 151, 156, 1); + --chart-3: rgba(1, 55, 66, 1); + --chart-4: rgba(110, 95, 195, 1); + --chart-5: rgba(217, 119, 6, 1); + /* Larger corner scale; squircle overlays via globals.css where supported */ + --radius: 1rem; + --sidebar: rgba(248, 243, 228, 1); + --sidebar-foreground: rgba(16, 18, 43, 1); + --sidebar-primary: rgba(83, 90, 232, 1); + --sidebar-primary-foreground: rgba(255, 255, 255, 1); + --sidebar-accent: rgba(226, 212, 254, 1); + --sidebar-accent-foreground: rgba(1, 55, 66, 1); + --sidebar-border: rgba(0, 0, 0, 0.08); + --sidebar-ring: rgba(83, 90, 232, 0.45); + --status-default: rgba(16, 18, 43, 0.55); + --status-neutral: #00979c; + --status-completed: #00979c; + --status-attention: #d97706; + --status-danger: #dc2626; + --semantic-shadow-xs: 0 1px 2px 0 rgb(16 18 43 / 0.07); + --semantic-shadow-sm: 0 1px 3px 0 rgb(16 18 43 / 0.08), 0 1px 2px -1px rgb(16 18 43 / 0.06); + --semantic-shadow-md: 0 4px 6px -1px rgb(16 18 43 / 0.1), 0 2px 4px -2px rgb(16 18 43 / 0.08); + --semantic-shadow-lg: 0 10px 15px -3px rgb(16 18 43 / 0.12), 0 4px 6px -4px rgb(83 90 232 / 0.1); +} + +/** + * Tailor brand — dark palette (distinct from default dark for tuning). + */ +html[data-theme="tailor-dark"] { + color-scheme: dark; + --background: rgba(15, 23, 42, 1); + --foreground: rgba(241, 245, 249, 1); + --card: rgba(30, 41, 59, 1); + --card-foreground: rgba(241, 245, 249, 1); + --popover: rgba(30, 41, 59, 1); + --popover-foreground: rgba(241, 245, 249, 1); + --primary: rgba(52, 211, 153, 1); + --primary-foreground: rgba(6, 78, 59, 1); + --secondary: rgba(51, 65, 85, 1); + --secondary-foreground: rgba(241, 245, 249, 1); + --muted: rgba(51, 65, 85, 1); + --muted-foreground: rgba(148, 163, 184, 1); + --accent: rgba(71, 85, 105, 1); + --accent-foreground: rgba(241, 245, 249, 1); + --destructive: rgba(248, 113, 113, 1); + --destructive-foreground: rgba(254, 242, 242, 1); + --border: rgba(71, 85, 105, 1); + --input: rgba(71, 85, 105, 1); + --ring: rgba(52, 211, 153, 1); + --chart-1: rgba(52, 211, 153, 1); + --chart-2: rgba(94, 234, 212, 1); + --chart-3: rgba(251, 191, 36, 1); + --chart-4: rgba(196, 181, 253, 1); + --chart-5: rgba(251, 113, 133, 1); + --sidebar: rgba(15, 23, 42, 1); + --sidebar-foreground: rgba(241, 245, 249, 1); + --sidebar-primary: rgba(16, 185, 129, 1); + --sidebar-primary-foreground: rgba(6, 78, 59, 1); + --sidebar-accent: rgba(51, 65, 85, 1); + --sidebar-accent-foreground: rgba(241, 245, 249, 1); + --sidebar-border: rgba(71, 85, 105, 1); + --sidebar-ring: rgba(52, 211, 153, 1); + --status-default: #94a3b8; + --status-neutral: #38bdf8; + --status-completed: #34d399; + --status-attention: #fbbf24; + --status-danger: #f87171; + --semantic-shadow-xs: 0 1px 2px 0 rgb(15 118 110 / 0.22); + --semantic-shadow-sm: 0 1px 3px 0 rgb(16 185 129 / 0.28), 0 1px 2px -1px rgb(16 185 129 / 0.22); + --semantic-shadow-md: 0 4px 6px -1px rgb(6 95 70 / 0.35), 0 2px 4px -2px rgb(6 95 70 / 0.28); + --semantic-shadow-lg: 0 10px 15px -3px rgb(6 78 59 / 0.45), 0 4px 6px -4px rgb(6 78 59 / 0.35); } @theme inline { @@ -110,10 +227,14 @@ --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); - /* Statuses */ - --color-status-default: #737373; - --color-status-neutral: #0ea5e9; - --color-status-completed: #22c55e; - --color-status-attention: #f59e0b; - --color-status-danger: #ef4444; + --color-status-default: var(--status-default); + --color-status-neutral: var(--status-neutral); + --color-status-completed: var(--status-completed); + --color-status-attention: var(--status-attention); + --color-status-danger: var(--status-danger); + + --shadow-xs: var(--semantic-shadow-xs); + --shadow-sm: var(--semantic-shadow-sm); + --shadow-md: var(--semantic-shadow-md); + --shadow-lg: var(--semantic-shadow-lg); } diff --git a/packages/core/src/components/appshell.tsx b/packages/core/src/components/appshell.tsx index bf4d8376..036faddc 100644 --- a/packages/core/src/components/appshell.tsx +++ b/packages/core/src/components/appshell.tsx @@ -17,7 +17,7 @@ import { type ContextData, } from "@/contexts/appshell-context"; import { RouterContainer } from "@/routing/router"; -import { ThemeProvider } from "@/contexts/theme-context"; +import { ThemeProvider, type Theme } from "@/contexts/theme-context"; import { BreadcrumbOverrideProvider } from "@/contexts/breadcrumb-context"; import { CommandPaletteProvider, type SearchSource } from "@/contexts/command-palette-context"; import { BuiltInCommandPalette } from "@/components/command-palette"; @@ -177,6 +177,17 @@ type SharedAppShellProps = React.PropsWithChildren<{ * ``` */ searchSources?: readonly SearchSource[]; + + /** + * Initial theme before any value is loaded from localStorage (`appshell-ui-theme`). + * Does not replace a stored preference. + * + * Includes **Tailor** brand palettes (`tailor-light`, `tailor-dark`) in addition to + * default light/dark and `system` (OS preference maps to **default** light or dark only). + * + * @default "system" + */ + defaultTheme?: Theme; }>; /** @@ -320,7 +331,10 @@ export const AppShell = (props: AppShellProps) => { - + {props.children} diff --git a/packages/core/src/components/sidebar.tsx b/packages/core/src/components/sidebar.tsx index 6b9356bc..c7eb7ed8 100644 --- a/packages/core/src/components/sidebar.tsx +++ b/packages/core/src/components/sidebar.tsx @@ -556,7 +556,7 @@ const sidebarMenuButtonVariants = cva( variant: { default: "astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground", outline: - "astw:bg-background astw:shadow-[0_0_0_1px_hsl(var(--sidebar-border))] astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground astw:hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]", + "astw:bg-background astw:shadow-[0_0_0_1px_var(--sidebar-border)] astw:hover:bg-sidebar-accent astw:hover:text-sidebar-accent-foreground astw:hover:shadow-[0_0_0_1px_var(--sidebar-accent)]", }, size: { default: "astw:h-8 astw:text-sm", diff --git a/packages/core/src/components/sidebar/sidebar-layout.tsx b/packages/core/src/components/sidebar/sidebar-layout.tsx index 30961c25..fda3ffbc 100644 --- a/packages/core/src/components/sidebar/sidebar-layout.tsx +++ b/packages/core/src/components/sidebar/sidebar-layout.tsx @@ -2,7 +2,9 @@ import { SidebarProvider, SidebarInset, SidebarTrigger, useSidebar } from "@/com import { SunIcon } from "lucide-react"; import { AppShellOutlet } from "@/components/content"; import { Button } from "@/components/button"; -import { useTheme } from "@/contexts/theme-context"; +import { useTheme, type ResolvedTheme } from "@/contexts/theme-context"; + +const RESOLVED_THEME_CYCLE: ResolvedTheme[] = ["light", "dark", "tailor-light", "tailor-dark"]; import { DefaultSidebar } from "./default-sidebar"; import { DynamicBreadcrumb } from "@/components/dynamic-breadcrumb"; @@ -68,9 +70,11 @@ const HidableSidebarTrigger = () => { export const SidebarLayout = (props: SidebarLayoutProps) => { const Children = props.children ? props.children({ Outlet: AppShellOutlet }) : null; - const themeContext = useTheme(); + const { resolvedTheme, setTheme } = useTheme(); const toggleTheme = () => { - themeContext.setTheme(themeContext.theme === "dark" ? "light" : "dark"); + const i = RESOLVED_THEME_CYCLE.indexOf(resolvedTheme); + const next = RESOLVED_THEME_CYCLE[(i === -1 ? 0 : i + 1) % RESOLVED_THEME_CYCLE.length]; + setTheme(next); }; return ( diff --git a/packages/core/src/contexts/theme-context.tsx b/packages/core/src/contexts/theme-context.tsx index 77f62dc6..45457c84 100644 --- a/packages/core/src/contexts/theme-context.tsx +++ b/packages/core/src/contexts/theme-context.tsx @@ -1,6 +1,46 @@ import { createContext, useContext, useEffect, useMemo, useState } from "react"; -type Theme = "dark" | "light" | "system"; +/** User-selectable theme. `system` follows OS light/dark (default palettes only — B1). */ +export type Theme = "light" | "dark" | "tailor-light" | "tailor-dark" | "system"; + +/** Resolved paint after applying `system`. */ +export type ResolvedTheme = "light" | "dark" | "tailor-light" | "tailor-dark"; + +const ALL_THEMES: readonly Theme[] = [ + "light", + "dark", + "tailor-light", + "tailor-dark", + "system", +] as const; + +function parseStoredTheme(value: string | null, fallback: Theme): Theme { + if (value && (ALL_THEMES as readonly string[]).includes(value)) return value as Theme; + return fallback; +} + +function readStoredTheme(storageKey: string, fallback: Theme): Theme { + if (typeof window === "undefined") return fallback; + const ls = window.localStorage; + const getItem = ls && typeof ls.getItem === "function" ? ls.getItem.bind(ls) : null; + if (!getItem) return fallback; + try { + return parseStoredTheme(getItem(storageKey), fallback); + } catch { + return fallback; + } +} + +function writeStoredTheme(storageKey: string, theme: Theme) { + if (typeof window === "undefined") return; + const ls = window.localStorage; + if (!ls || typeof ls.setItem !== "function") return; + try { + ls.setItem(storageKey, theme); + } catch { + /* storage full or forbidden */ + } +} type ThemeProviderProps = { children: React.ReactNode; @@ -10,7 +50,7 @@ type ThemeProviderProps = { type ThemeProviderState = { theme: Theme; - resolvedTheme: Omit; + resolvedTheme: ResolvedTheme; setTheme: (theme: Theme) => void; }; @@ -22,33 +62,37 @@ const initialState: ThemeProviderState = { const ThemeProviderContext = createContext(initialState); +function resolveTheme(theme: Theme): ResolvedTheme { + if (theme !== "system") return theme; + if (typeof window === "undefined") return "light"; + return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; +} + export function ThemeProvider({ children, storageKey, defaultTheme = "system", ...props }: ThemeProviderProps) { - const [theme, setTheme] = useState( - () => (localStorage.getItem(storageKey) as Theme) || defaultTheme, - ); + const [theme, setThemeState] = useState(() => readStoredTheme(storageKey, defaultTheme)); - const resolvedTheme = useMemo(() => { - if (theme !== "system") return theme; - return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; - }, [theme]); + const resolvedTheme = useMemo(() => resolveTheme(theme), [theme]); useEffect(() => { const root = window.document.documentElement; root.classList.remove("light", "dark"); - root.classList.add(resolvedTheme); + root.classList.add( + resolvedTheme === "dark" || resolvedTheme === "tailor-dark" ? "dark" : "light", + ); + root.dataset.theme = resolvedTheme; }, [resolvedTheme]); const value = { resolvedTheme, theme, setTheme: (newTheme: Theme) => { - localStorage.setItem(storageKey, newTheme); - setTheme(newTheme); + writeStoredTheme(storageKey, newTheme); + setThemeState(newTheme); }, }; diff --git a/packages/core/src/globals.css b/packages/core/src/globals.css index f55ebe89..e77fd5f5 100644 --- a/packages/core/src/globals.css +++ b/packages/core/src/globals.css @@ -1,3 +1,8 @@ +@import url("https://cdn.jsdelivr.net/npm/@fontsource/geist-sans@5.2.5/400.css"); +@import url("https://cdn.jsdelivr.net/npm/@fontsource/geist-sans@5.2.5/500.css"); +@import url("https://cdn.jsdelivr.net/npm/@fontsource/geist-sans@5.2.5/600.css"); +@import url("https://cdn.jsdelivr.net/npm/@fontsource/geist-sans@5.2.5/700.css"); + @import "tailwindcss" prefix(astw); @import "tw-animate-css"; @import "./assets/theme.css"; @@ -34,6 +39,29 @@ body { @apply astw:font-sans astw:antialiased astw:bg-background astw:text-foreground; } + /* + Tailor light: Geist Sans + Apple-style corners (squircle) when the engine supports corner-shape (Chromium). + Circles (.rounded-full) stay round; browsers without support keep standard border-radius. + */ + html[data-theme="tailor-light"] body { + font-family: "Geist Sans", ui-sans-serif, system-ui, sans-serif; + } + + html[data-theme="tailor-light"] :where(h1, h2, h3, h4, h5, h6) { + letter-spacing: -0.03em; + line-height: 1.2; + font-family: "Geist Sans", ui-sans-serif, system-ui, sans-serif; + } + + @supports (corner-shape: squircle) { + html[data-theme="tailor-light"] * { + corner-shape: squircle; + } + /* Round radii (.rounded-full) stay circular squircles, not elongated “capsules” */ + html[data-theme="tailor-light"] [class*="rounded-full"] { + corner-shape: round; + } + } ::-webkit-scrollbar { @apply astw:w-2 astw:h-2 astw:bg-muted; } @@ -44,3 +72,190 @@ @apply astw:bg-muted-foreground; } } + +/* + * Tailor light — tactile buttons: inset highlight + bottom shade + outer rim. + * Corner radius comes from Button’s rounded-* utilities like other themes (no pill override). + * Only html[data-theme="tailor-light"]; raised variants share shadow-xs in button.tsx. + * Focus ring is folded into box-shadow so it does not clash with stacked shadows. + */ +@layer utilities { + html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"] { + transition: + filter 0.15s ease, + box-shadow 0.15s ease, + background-image 0.15s ease; + } + + /* Primary (brand chroma gradient + dark rim + inset gloss) */ + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"] { + background-color: transparent; + border: 1px solid color-mix(in srgb, #10122b 70%, rgb(83 90 232 / 35%)); + background-image: linear-gradient( + 180deg, + rgb(126 133 246) 0%, + rgb(126 133 246) 10%, + rgb(68 73 218) 25%, + rgb(68 73 218) 85%, + rgb(54 62 178) 100% + ); + box-shadow: + inset 0 2px 1px rgb(255 255 255 / 0.28), + inset 0 -4px 5px rgb(0 10 54 / 0.36), + 0 1px 2px rgb(16 18 43 / 0.2); + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:hover:not(:disabled) { + filter: brightness(1.055); + box-shadow: + inset 0 2px 1px rgb(255 255 255 / 0.32), + inset 0 -4px 5px rgb(0 10 54 / 0.32), + 0 1px 3px rgb(16 18 43 / 0.18); + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:active:not(:disabled) { + filter: brightness(0.96); + box-shadow: + inset 0 3px 6px rgb(0 0 0 / 0.38), + inset 0 -1px 1px rgb(255 255 255 / 0.12), + 0 1px 1px rgb(16 18 43 / 0.12); + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:focus-visible { + box-shadow: + inset 0 2px 1px rgb(255 255 255 / 0.28), + inset 0 -4px 5px rgb(0 10 54 / 0.36), + 0 1px 2px rgb(16 18 43 / 0.2), + 0 0 0 3px var(--ring) !important; + } + + /* Secondary — light violet tactile surface */ + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"] { + background-color: transparent; + border: 1px solid rgb(154 148 209 / 0.45); + background-image: linear-gradient( + 180deg, + rgb(239 229 253) 0%, + rgb(216 188 246) 50%, + rgb(206 174 239) 100% + ); + box-shadow: + inset 0 2px 1px rgb(255 255 255 / 0.75), + inset 0 -3px 4px rgb(50 42 118 / 0.18), + 0 1px 2px rgb(16 18 43 / 0.1); + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:hover:not(:disabled) { + filter: brightness(1.04); + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:active:not(:disabled) { + filter: brightness(0.97); + box-shadow: + inset 0 3px 5px rgb(50 42 118 / 0.22), + inset 0 -1px 1px rgb(255 255 255 / 0.6), + 0 1px 1px rgb(16 18 43 / 0.08); + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:focus-visible { + box-shadow: + inset 0 2px 1px rgb(255 255 255 / 0.75), + inset 0 -3px 4px rgb(50 42 118 / 0.18), + 0 1px 2px rgb(16 18 43 / 0.1), + 0 0 0 3px var(--ring) !important; + } + + /* Destructive */ + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"] { + background-color: transparent; + border: 1px solid color-mix(in srgb, #10122b 45%, rgb(156 42 42)); + background-image: linear-gradient( + 180deg, + rgb(219 71 71) 0%, + rgb(175 42 42) 50%, + rgb(154 38 42) 100% + ); + box-shadow: + inset 0 2px 1px rgb(255 255 255 / 0.26), + inset 0 -4px 5px rgb(60 12 14 / 0.45), + 0 1px 2px rgb(16 18 43 / 0.18); + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:hover:not(:disabled) { + filter: brightness(1.05); + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:active:not(:disabled) { + filter: brightness(0.96); + box-shadow: + inset 0 3px 6px rgb(40 12 14 / 0.45), + inset 0 -1px 1px rgb(255 255 255 / 0.2), + 0 1px 1px rgb(16 18 43 / 0.12); + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:focus-visible { + box-shadow: + inset 0 2px 1px rgb(255 255 255 / 0.26), + inset 0 -4px 5px rgb(60 12 14 / 0.45), + 0 1px 2px rgb(16 18 43 / 0.18), + 0 0 0 3px color-mix(in srgb, var(--destructive) 42%, transparent) !important; + } + + /* Outline — white tactile + gray rim (neutral “secondary” chrome) */ + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"] { + background-color: transparent; + color: rgb(16 18 43); + border-color: rgb(185 183 206 / 0.65); + background-image: linear-gradient(180deg, rgb(255 255 255) 0%, rgb(246 246 251) 100%); + box-shadow: + inset 0 2px 1px rgb(255 255 255 / 0.95), + inset 0 -3px 4px rgb(16 18 43 / 0.08), + 0 1px 2px rgb(16 18 43 / 0.08); + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:hover:not( + :disabled + ) { + border-color: rgb(165 160 205 / 0.55); + background-image: linear-gradient(180deg, rgb(252 246 253) 0%, rgb(237 229 251) 100%); + box-shadow: + inset 0 2px 1px rgb(255 255 255 / 1), + inset 0 -3px 5px rgb(80 74 149 / 0.12), + 0 1px 3px rgb(16 18 43 / 0.1); + filter: none; + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:active:not( + :disabled + ) { + box-shadow: + inset 0 3px 5px rgb(16 18 43 / 0.1), + inset 0 -1px 1px rgb(255 255 255 / 0.7), + 0 1px 1px rgb(16 18 43 / 0.06); + filter: none; + } + + html[data-theme="tailor-light"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:focus-visible { + box-shadow: + inset 0 2px 1px rgb(255 255 255 / 0.95), + inset 0 -3px 4px rgb(16 18 43 / 0.08), + 0 1px 2px rgb(16 18 43 / 0.08), + 0 0 0 3px var(--ring) !important; + } +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index b18d5814..14a784f3 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -24,7 +24,7 @@ export { export { WithGuard, type WithGuardProps } from "./components/with-guard"; export { useAppShell, useAppShellConfig, useAppShellData } from "./contexts/appshell-context"; -export { useTheme } from "./contexts/theme-context"; +export { useTheme, type ResolvedTheme, type Theme } from "./contexts/theme-context"; export { type I18nLabels, defineI18nLabels } from "./hooks/i18n"; export { AuthProvider, From 02d23c73da295f7c86b06345e3df5831eed0d810 Mon Sep 17 00:00:00 2001 From: itsprade Date: Tue, 28 Apr 2026 22:11:11 +0530 Subject: [PATCH 03/20] style(tailor-light): tactile buttons with solid fills, 2px bottom lip, border 0 on press Made-with: Cursor --- packages/core/src/globals.css | 144 +++++++++++----------------------- 1 file changed, 46 insertions(+), 98 deletions(-) diff --git a/packages/core/src/globals.css b/packages/core/src/globals.css index e77fd5f5..4e108a68 100644 --- a/packages/core/src/globals.css +++ b/packages/core/src/globals.css @@ -74,156 +74,111 @@ } /* - * Tailor light — tactile buttons: inset highlight + bottom shade + outer rim. - * Corner radius comes from Button’s rounded-* utilities like other themes (no pill override). + * Tailor light — tactile buttons: solid fill + 2px darker bottom lip (raised); + * pressed: border 0 + inset shade. Corner radius stays from Button utilities. * Only html[data-theme="tailor-light"]; raised variants share shadow-xs in button.tsx. - * Focus ring is folded into box-shadow so it does not clash with stacked shadows. */ @layer utilities { html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"] { + background-image: none; transition: - filter 0.15s ease, - box-shadow 0.15s ease, - background-image 0.15s ease; + filter 0.12s ease, + border-width 0.12s ease, + border-color 0.12s ease, + box-shadow 0.12s ease; } - /* Primary (brand chroma gradient + dark rim + inset gloss) */ html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"] { - background-color: transparent; - border: 1px solid color-mix(in srgb, #10122b 70%, rgb(83 90 232 / 35%)); - background-image: linear-gradient( - 180deg, - rgb(126 133 246) 0%, - rgb(126 133 246) 10%, - rgb(68 73 218) 25%, - rgb(68 73 218) 85%, - rgb(54 62 178) 100% - ); - box-shadow: - inset 0 2px 1px rgb(255 255 255 / 0.28), - inset 0 -4px 5px rgb(0 10 54 / 0.36), - 0 1px 2px rgb(16 18 43 / 0.2); + background-color: var(--primary); + color: var(--primary-foreground); + border: 1px solid color-mix(in srgb, #10122b 38%, rgb(106 114 226)); + border-bottom: 2px solid color-mix(in srgb, #10122b 58%, rgb(73 76 205)); + box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.22); } html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:hover:not(:disabled) { - filter: brightness(1.055); - box-shadow: - inset 0 2px 1px rgb(255 255 255 / 0.32), - inset 0 -4px 5px rgb(0 10 54 / 0.32), - 0 1px 3px rgb(16 18 43 / 0.18); + filter: brightness(1.05); } html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:active:not(:disabled) { + border: 0; filter: brightness(0.96); - box-shadow: - inset 0 3px 6px rgb(0 0 0 / 0.38), - inset 0 -1px 1px rgb(255 255 255 / 0.12), - 0 1px 1px rgb(16 18 43 / 0.12); + box-shadow: inset 0 4px 10px rgb(8 14 82 / 0.38); } html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:focus-visible { box-shadow: - inset 0 2px 1px rgb(255 255 255 / 0.28), - inset 0 -4px 5px rgb(0 10 54 / 0.36), - 0 1px 2px rgb(16 18 43 / 0.2), + inset 0 1px 0 rgb(255 255 255 / 0.22), 0 0 0 3px var(--ring) !important; } - /* Secondary — light violet tactile surface */ html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"] { - background-color: transparent; - border: 1px solid rgb(154 148 209 / 0.45); - background-image: linear-gradient( - 180deg, - rgb(239 229 253) 0%, - rgb(216 188 246) 50%, - rgb(206 174 239) 100% - ); - box-shadow: - inset 0 2px 1px rgb(255 255 255 / 0.75), - inset 0 -3px 4px rgb(50 42 118 / 0.18), - 0 1px 2px rgb(16 18 43 / 0.1); + background-color: var(--secondary); + color: var(--secondary-foreground); + border: 1px solid color-mix(in srgb, var(--secondary) 18%, rgb(110 94 164)); + border-bottom: 2px solid color-mix(in srgb, rgb(226 212 254) 30%, rgb(98 74 154)); + box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.65); } html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:hover:not(:disabled) { - filter: brightness(1.04); + filter: brightness(1.035); } html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:active:not(:disabled) { - filter: brightness(0.97); - box-shadow: - inset 0 3px 5px rgb(50 42 118 / 0.22), - inset 0 -1px 1px rgb(255 255 255 / 0.6), - 0 1px 1px rgb(16 18 43 / 0.08); + border: 0; + filter: brightness(0.98); + box-shadow: inset 0 3px 8px rgb(50 42 118 / 0.22); } html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:focus-visible { box-shadow: - inset 0 2px 1px rgb(255 255 255 / 0.75), - inset 0 -3px 4px rgb(50 42 118 / 0.18), - 0 1px 2px rgb(16 18 43 / 0.1), + inset 0 1px 0 rgb(255 255 255 / 0.65), 0 0 0 3px var(--ring) !important; } - /* Destructive */ html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"] { - background-color: transparent; - border: 1px solid color-mix(in srgb, #10122b 45%, rgb(156 42 42)); - background-image: linear-gradient( - 180deg, - rgb(219 71 71) 0%, - rgb(175 42 42) 50%, - rgb(154 38 42) 100% - ); - box-shadow: - inset 0 2px 1px rgb(255 255 255 / 0.26), - inset 0 -4px 5px rgb(60 12 14 / 0.45), - 0 1px 2px rgb(16 18 43 / 0.18); + background-color: var(--destructive); + color: var(--destructive-foreground); + border: 1px solid color-mix(in srgb, var(--destructive) 62%, rgb(92 26 26)); + border-bottom: 2px solid color-mix(in srgb, var(--destructive) 52%, rgb(76 22 26)); + box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.2); } html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:hover:not(:disabled) { - filter: brightness(1.05); + filter: brightness(1.04); } html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:active:not(:disabled) { + border: 0; filter: brightness(0.96); - box-shadow: - inset 0 3px 6px rgb(40 12 14 / 0.45), - inset 0 -1px 1px rgb(255 255 255 / 0.2), - 0 1px 1px rgb(16 18 43 / 0.12); + box-shadow: inset 0 4px 10px rgb(70 14 14 / 0.45); } html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:focus-visible { box-shadow: - inset 0 2px 1px rgb(255 255 255 / 0.26), - inset 0 -4px 5px rgb(60 12 14 / 0.45), - 0 1px 2px rgb(16 18 43 / 0.18), + inset 0 1px 0 rgb(255 255 255 / 0.2), 0 0 0 3px color-mix(in srgb, var(--destructive) 42%, transparent) !important; } - /* Outline — white tactile + gray rim (neutral “secondary” chrome) */ html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"] { - background-color: transparent; - color: rgb(16 18 43); - border-color: rgb(185 183 206 / 0.65); - background-image: linear-gradient(180deg, rgb(255 255 255) 0%, rgb(246 246 251) 100%); - box-shadow: - inset 0 2px 1px rgb(255 255 255 / 0.95), - inset 0 -3px 4px rgb(16 18 43 / 0.08), - 0 1px 2px rgb(16 18 43 / 0.08); + background-color: var(--card); + color: var(--card-foreground); + border: 1px solid rgb(185 183 206 / 0.65); + border-bottom: 2px solid rgb(130 134 164 / 0.85); + box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.9); } html[data-theme="tailor-light"] @@ -231,31 +186,24 @@ :disabled ) { border-color: rgb(165 160 205 / 0.55); - background-image: linear-gradient(180deg, rgb(252 246 253) 0%, rgb(237 229 251) 100%); - box-shadow: - inset 0 2px 1px rgb(255 255 255 / 1), - inset 0 -3px 5px rgb(80 74 149 / 0.12), - 0 1px 3px rgb(16 18 43 / 0.1); - filter: none; + border-bottom-color: rgb(110 118 168 / 0.75); + filter: brightness(1.015); + box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.98); } html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:active:not( :disabled ) { - box-shadow: - inset 0 3px 5px rgb(16 18 43 / 0.1), - inset 0 -1px 1px rgb(255 255 255 / 0.7), - 0 1px 1px rgb(16 18 43 / 0.06); + border: 0; + box-shadow: inset 0 3px 8px rgb(16 18 43 / 0.12); filter: none; } html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:focus-visible { box-shadow: - inset 0 2px 1px rgb(255 255 255 / 0.95), - inset 0 -3px 4px rgb(16 18 43 / 0.08), - 0 1px 2px rgb(16 18 43 / 0.08), + inset 0 1px 0 rgb(255 255 255 / 0.9), 0 0 0 3px var(--ring) !important; } } From bc40ba24fcd282719c3ea613590e1a4af18bb9e9 Mon Sep 17 00:00:00 2001 From: itsprade Date: Tue, 28 Apr 2026 23:57:46 +0530 Subject: [PATCH 04/20] feat(themes): preset ids light, dark, deep-dark, cream, bloom Rename theme API and html[data-theme] from tailor-* to short names. LocalStorage values tailor-light, tailor-bloom, tailor-dark map to cream, bloom, deep-dark on read. deep-dark keeps Tailwind dark class. Includes palette CSS, shell gradients, tactile globals, docs, and changesets. Checkpoint: cream + bloom + deep-dark brand themes alongside default light/dark. Made-with: Cursor --- .changeset/bloom-tailor-theme.md | 5 + .changeset/tailor-theme-palettes.md | 10 +- docs/api/use-theme.md | 25 +- docs/concepts/styling-theming.md | 11 +- .../nextjs-app/src/modules/sidebar-menu.tsx | 2 +- ...nts__autocomplete-standalone.test.tsx.snap | 6 +- ...rc__components__autocomplete.test.tsx.snap | 6 +- .../src__components__button.test.tsx.snap | 4 +- ...ponents__combobox-standalone.test.tsx.snap | 8 +- .../src__components__combobox.test.tsx.snap | 8 +- .../src__components__field.test.tsx.snap | 10 +- .../src__components__form.test.tsx.snap | 4 +- .../src__components__input.test.tsx.snap | 12 +- ...omponents__select-standalone.test.tsx.snap | 8 +- .../src__components__select.test.tsx.snap | 49 +++- packages/core/src/assets/theme.css | 149 +++++++--- packages/core/src/components/appshell.tsx | 2 +- packages/core/src/components/autocomplete.tsx | 2 +- packages/core/src/components/button.tsx | 4 +- packages/core/src/components/combobox.tsx | 4 +- packages/core/src/components/select.tsx | 2 +- .../components/sidebar/default-sidebar.tsx | 4 +- .../src/components/sidebar/sidebar-group.tsx | 6 +- .../src/components/sidebar/sidebar-item.tsx | 12 +- .../src/components/sidebar/sidebar-layout.tsx | 8 +- packages/core/src/contexts/theme-context.tsx | 25 +- packages/core/src/globals.css | 272 +++++++++++++++--- packages/core/src/lib/input-classes.ts | 12 +- 28 files changed, 505 insertions(+), 165 deletions(-) create mode 100644 .changeset/bloom-tailor-theme.md diff --git a/.changeset/bloom-tailor-theme.md b/.changeset/bloom-tailor-theme.md new file mode 100644 index 00000000..08e32fb4 --- /dev/null +++ b/.changeset/bloom-tailor-theme.md @@ -0,0 +1,5 @@ +--- +"@tailor-platform/app-shell": minor +--- + +Add the **Bloom** light palette (`bloom`): lavender shell with cream secondary surfaces — set with `defaultTheme`, `ThemeProvider`, or **`setTheme("bloom")`**. Sidebar theme cycling includes Bloom when using the layout toggle. diff --git a/.changeset/tailor-theme-palettes.md b/.changeset/tailor-theme-palettes.md index bac1d77c..44cb94dd 100644 --- a/.changeset/tailor-theme-palettes.md +++ b/.changeset/tailor-theme-palettes.md @@ -2,9 +2,9 @@ "@tailor-platform/app-shell": minor --- -Adds **Tailor** brand theme presets alongside the existing default light and dark palettes. `useTheme` / `ThemeProvider` accept `light`, `dark`, `tailor-light`, `tailor-dark`, and `system`. The document root sets `data-theme` to the resolved palette and keeps `class="light"` or `class="dark"` for Tailwind `dark` mode (`tailor-dark` uses the `dark` class). +Adds **Tailor** brand theme presets alongside the existing default light and dark palettes. `useTheme` / `ThemeProvider` accept `light`, `dark`, `deep-dark`, `cream`, `bloom`, and `system`. The document root sets `data-theme` to the resolved palette and keeps `class="light"` or `class="dark"` for Tailwind `dark` mode (`deep-dark` uses the `dark` class). -Semantic tokens in `theme.css` include placeholder **Tailor light** and **Tailor dark** values (indigo / slate–emerald styling) you can tune toward final brand colors. Status colors and elevation shadows (`--semantic-shadow-*`, mapped to `@theme` shadow keys) are centralized so each palette can override them. +Semantic tokens in `theme.css` include **cream** and **deep-dark** values (indigo / slate–emerald styling) you can tune toward final brand colors. Status colors and elevation shadows (`--semantic-shadow-*`, mapped to `@theme` shadow keys) are centralized so each palette can override them. `AppShell` accepts an optional `defaultTheme` when no value is stored in `localStorage`. Exports: `Theme`, `ResolvedTheme`. @@ -13,13 +13,13 @@ The sidebar floating menu outline hover style now uses `var(--sidebar-border)` / ```tsx import { AppShell, useTheme, type Theme } from "@tailor-platform/app-shell"; -{/* ... */}; +{/* ... */}; function Switcher() { const { setTheme } = useTheme(); return ( - ); } diff --git a/docs/api/use-theme.md b/docs/api/use-theme.md index 01b96182..778f0099 100644 --- a/docs/api/use-theme.md +++ b/docs/api/use-theme.md @@ -1,6 +1,6 @@ --- title: useTheme -description: Hook for accessing and controlling theme appearance (default and Tailor palettes) +description: Hook for accessing and controlling theme appearance (named palettes including Cream and Bloom) --- # useTheme @@ -12,9 +12,9 @@ React hook to access and control the current appearance theme. Exported types: ```typescript -export type Theme = "light" | "dark" | "tailor-light" | "tailor-dark" | "system"; +export type Theme = "light" | "dark" | "deep-dark" | "cream" | "bloom" | "system"; -export type ResolvedTheme = "light" | "dark" | "tailor-light" | "tailor-dark"; +export type ResolvedTheme = "light" | "dark" | "deep-dark" | "cream" | "bloom"; ``` Hook return value: @@ -32,12 +32,12 @@ const useTheme: () => { ### `theme` - **Type:** `Theme` -- **Description:** Stored theme preference. **`system`** means “follow OS light/dark” for the **default** light/dark palettes only (not Tailor). +- **Description:** Stored theme preference. **`system`** means “follow OS light/dark” for the **default** light/dark palettes only (not cream, bloom, or deep-dark). ### `resolvedTheme` - **Type:** `ResolvedTheme` -- **Description:** Concrete palette after resolving **`system`** to **`light`** or **`dark`**. **`tailor-light`** and **`tailor-dark`** are never produced by **`system`**; pick them explicitly with **`setTheme`**. +- **Description:** Concrete palette after resolving **`system`** to **`light`** or **`dark`**. **`cream`**, **`bloom`**, and **`deep-dark`** are never produced by **`system`**; pick them explicitly with **`setTheme`**. When **`resolvedTheme`** changes, **`document.documentElement`** gets **`data-theme`** set to this value and a **`light`** / **`dark`** class for Tailwind **`dark`** variant compatibility. @@ -46,6 +46,8 @@ When **`resolvedTheme`** changes, **`document.documentElement`** gets **`data-th - **Type:** `(theme: Theme) => void` - **Description:** Set the theme. Persisted to **`localStorage`** (key **`appshell-ui-theme`** when using AppShell’s built-in provider). +Previously saved ids **`tailor-light`**, **`tailor-bloom`**, **`tailor-dark`** are mapped on read to **`cream`**, **`bloom`**, **`deep-dark`** (see **`LEGACY_THEME_IDS`** in **`theme-context.tsx`**). + ## Usage ### Display current themes @@ -67,9 +69,9 @@ function ThemeDisplay() { ### Set a named palette ```typescript -function UseTailorLight() { +function UseCream() { const { setTheme } = useTheme(); - return ; + return ; } ``` @@ -86,8 +88,9 @@ function ThemeSelector() { > - - + + + ); @@ -96,13 +99,13 @@ function ThemeSelector() { ### Logo or assets by lightness -Use **`resolvedTheme`** and treat **`tailor-light`** like light and **`tailor-dark`** like dark for monochrome assets: +Use **`resolvedTheme`** and treat **`light`**, **`cream`**, and **`bloom`** like “light” palettes and **`dark`** and **`deep-dark`** like “dark” for monochrome assets: ```typescript function Logo() { const { resolvedTheme } = useTheme(); const darkish = - resolvedTheme === "dark" || resolvedTheme === "tailor-dark"; + resolvedTheme === "dark" || resolvedTheme === "deep-dark"; return Logo; } diff --git a/docs/concepts/styling-theming.md b/docs/concepts/styling-theming.md index cf86a58a..50733984 100644 --- a/docs/concepts/styling-theming.md +++ b/docs/concepts/styling-theming.md @@ -26,18 +26,19 @@ E.g. Note, many of these are default Tailwind colors, but there are some differences. If you omit this, much of the UI will look the same, but we will lose some of the Tailor-preferred colors. -## Built-in palettes (default and Tailor) +## Built-in palettes -AppShell ships **four** named semantic palettes controlled by **`data-theme`** on **``** (see [`useTheme`](../api/use-theme.md)): +AppShell ships **five** named semantic palettes controlled by **`data-theme`** on **``** (see [`useTheme`](../api/use-theme.md)): | Resolved theme | Purpose | | -------------- | -------------------------------------------- | | `light` | Default neutral light (historic AppShell UI) | | `dark` | Default neutral dark | -| `tailor-light` | Tailor brand — light tuning surface | -| `tailor-dark` | Tailor brand — dark tuning surface | +| `cream` | Tailor brand — cream shell, violet accents | +| `bloom` | Lavender shell (**Bloom**) and cream accents | +| `deep-dark` | Tailor brand — near-black tuning surface | -**`system`** resolves to **`light`** or **`dark`** only — not **`tailor-*`**. Apps that want Tailor must set **`tailor-light`** or **`tailor-dark`** explicitly. +**`system`** resolves to **`light`** or **`dark`** only — not **`cream`**, **`bloom`**, or **`deep-dark`**. Set those with **`setTheme`** or **`AppShell`** **`defaultTheme`**. Semantic tokens (**`--background`**, **`--primary`**, **`--border`**, sidebar tokens, **`--semantic-shadow-*`**, statuses, **`--radius`**, …) live in **`theme.css`**; override there or in host CSS keyed off **`html[data-theme='…']`**. diff --git a/examples/nextjs-app/src/modules/sidebar-menu.tsx b/examples/nextjs-app/src/modules/sidebar-menu.tsx index dbdc74a6..9e775abb 100644 --- a/examples/nextjs-app/src/modules/sidebar-menu.tsx +++ b/examples/nextjs-app/src/modules/sidebar-menu.tsx @@ -33,7 +33,7 @@ export const SidebarMenu = () => { border: "1px solid var(--sidebar-border)", borderRadius: "4px", backgroundColor: "var(--sidebar-accent)", - color: "var(--sidebar-foreground)", + color: "var(--sidebar-accent-foreground)", }} > diff --git a/packages/core/__snapshots__/src__components__autocomplete-standalone.test.tsx.snap b/packages/core/__snapshots__/src__components__autocomplete-standalone.test.tsx.snap index 4dabbc25..40ee5b87 100644 --- a/packages/core/__snapshots__/src__components__autocomplete-standalone.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__autocomplete-standalone.test.tsx.snap @@ -1,7 +1,7 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Autocomplete (standalone) > snapshots > default with string items 1`] = `"
"`; +exports[`Autocomplete (standalone) > snapshots > default with string items 1`] = `"
"`; -exports[`Autocomplete (standalone) > snapshots > with custom className 1`] = `"
"`; +exports[`Autocomplete (standalone) > snapshots > with custom className 1`] = `"
"`; -exports[`Autocomplete (standalone) > snapshots > with custom mapItem 1`] = `"
"`; +exports[`Autocomplete (standalone) > snapshots > with custom mapItem 1`] = `"
"`; diff --git a/packages/core/__snapshots__/src__components__autocomplete.test.tsx.snap b/packages/core/__snapshots__/src__components__autocomplete.test.tsx.snap index 6844e380..b477a6c7 100644 --- a/packages/core/__snapshots__/src__components__autocomplete.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__autocomplete.test.tsx.snap @@ -1,7 +1,7 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Autocomplete.Parts > snapshots > closed autocomplete with placeholder 1`] = `"
"`; +exports[`Autocomplete.Parts > snapshots > closed autocomplete with placeholder 1`] = `"
"`; -exports[`Autocomplete.Parts > snapshots > open autocomplete 1`] = `"
"`; +exports[`Autocomplete.Parts > snapshots > open autocomplete 1`] = `"
"`; -exports[`Autocomplete.Parts > snapshots > with groups 1`] = `""`; +exports[`Autocomplete.Parts > snapshots > with groups 1`] = `""`; diff --git a/packages/core/__snapshots__/src__components__button.test.tsx.snap b/packages/core/__snapshots__/src__components__button.test.tsx.snap index 9c82e9fc..2ab69968 100644 --- a/packages/core/__snapshots__/src__components__button.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__button.test.tsx.snap @@ -8,7 +8,7 @@ exports[`Button > snapshots > disabled state 1`] = `""`; -exports[`Button > snapshots > ghost variant 1`] = `""`; +exports[`Button > snapshots > ghost variant 1`] = `""`; exports[`Button > snapshots > icon size 1`] = `""`; @@ -16,7 +16,7 @@ exports[`Button > snapshots > large size 1`] = `""`; -exports[`Button > snapshots > outline variant 1`] = `""`; +exports[`Button > snapshots > outline variant 1`] = `""`; exports[`Button > snapshots > secondary variant 1`] = `""`; diff --git a/packages/core/__snapshots__/src__components__combobox-standalone.test.tsx.snap b/packages/core/__snapshots__/src__components__combobox-standalone.test.tsx.snap index c504aafa..19f4968e 100644 --- a/packages/core/__snapshots__/src__components__combobox-standalone.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__combobox-standalone.test.tsx.snap @@ -1,9 +1,9 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Combobox (standalone) > snapshots > default with string items 1`] = `"
"`; +exports[`Combobox (standalone) > snapshots > default with string items 1`] = `"
"`; -exports[`Combobox (standalone) > snapshots > disabled 1`] = `"
"`; +exports[`Combobox (standalone) > snapshots > disabled 1`] = `"
"`; -exports[`Combobox (standalone) > snapshots > multiple mode 1`] = `"
"`; +exports[`Combobox (standalone) > snapshots > multiple mode 1`] = `"
"`; -exports[`Combobox (standalone) > snapshots > with custom className 1`] = `"
"`; +exports[`Combobox (standalone) > snapshots > with custom className 1`] = `"
"`; diff --git a/packages/core/__snapshots__/src__components__combobox.test.tsx.snap b/packages/core/__snapshots__/src__components__combobox.test.tsx.snap index e2fff1a3..33172b85 100644 --- a/packages/core/__snapshots__/src__components__combobox.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__combobox.test.tsx.snap @@ -1,9 +1,9 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Combobox.Parts > snapshots > closed combobox with placeholder 1`] = `""`; +exports[`Combobox.Parts > snapshots > closed combobox with placeholder 1`] = `""`; -exports[`Combobox.Parts > snapshots > open combobox 1`] = `"
"`; +exports[`Combobox.Parts > snapshots > open combobox 1`] = `"
"`; -exports[`Combobox.Parts > snapshots > with InputGroup, Clear, and Trigger 1`] = `"
"`; +exports[`Combobox.Parts > snapshots > with InputGroup, Clear, and Trigger 1`] = `"
"`; -exports[`Combobox.Parts > snapshots > with groups 1`] = `""`; +exports[`Combobox.Parts > snapshots > with groups 1`] = `""`; diff --git a/packages/core/__snapshots__/src__components__field.test.tsx.snap b/packages/core/__snapshots__/src__components__field.test.tsx.snap index 4a468f85..9a009393 100644 --- a/packages/core/__snapshots__/src__components__field.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__field.test.tsx.snap @@ -1,11 +1,11 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Field > snapshots > basic field with label and control 1`] = `"
"`; +exports[`Field > snapshots > basic field with label and control 1`] = `"
"`; -exports[`Field > snapshots > disabled field 1`] = `"
"`; +exports[`Field > snapshots > disabled field 1`] = `"
"`; -exports[`Field > snapshots > field with custom className 1`] = `"
"`; +exports[`Field > snapshots > field with custom className 1`] = `"
"`; -exports[`Field > snapshots > field with description 1`] = `"

We will never share your email.

"`; +exports[`Field > snapshots > field with description 1`] = `"

We will never share your email.

"`; -exports[`Field > snapshots > field with error 1`] = `"
Please enter a valid URL.
"`; +exports[`Field > snapshots > field with error 1`] = `"
Please enter a valid URL.
"`; diff --git a/packages/core/__snapshots__/src__components__form.test.tsx.snap b/packages/core/__snapshots__/src__components__form.test.tsx.snap index 5728bc2d..15d557d6 100644 --- a/packages/core/__snapshots__/src__components__form.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__form.test.tsx.snap @@ -1,7 +1,7 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Form > snapshots > basic form with a field 1`] = `"
"`; +exports[`Form > snapshots > basic form with a field 1`] = `"
"`; exports[`Form > snapshots > form with custom className 1`] = `"
Content
"`; -exports[`Form > snapshots > form with noValidate 1`] = `"
"`; +exports[`Form > snapshots > form with noValidate 1`] = `"
"`; diff --git a/packages/core/__snapshots__/src__components__input.test.tsx.snap b/packages/core/__snapshots__/src__components__input.test.tsx.snap index bf53423a..a83b490d 100644 --- a/packages/core/__snapshots__/src__components__input.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__input.test.tsx.snap @@ -1,13 +1,13 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Input > snapshots > default text input 1`] = `""`; +exports[`Input > snapshots > default text input 1`] = `""`; -exports[`Input > snapshots > disabled input 1`] = `""`; +exports[`Input > snapshots > disabled input 1`] = `""`; -exports[`Input > snapshots > email input 1`] = `""`; +exports[`Input > snapshots > email input 1`] = `""`; -exports[`Input > snapshots > file input 1`] = `""`; +exports[`Input > snapshots > file input 1`] = `""`; -exports[`Input > snapshots > password input 1`] = `""`; +exports[`Input > snapshots > password input 1`] = `""`; -exports[`Input > snapshots > with custom className 1`] = `""`; +exports[`Input > snapshots > with custom className 1`] = `""`; diff --git a/packages/core/__snapshots__/src__components__select-standalone.test.tsx.snap b/packages/core/__snapshots__/src__components__select-standalone.test.tsx.snap index 0f0e515f..dac82fdf 100644 --- a/packages/core/__snapshots__/src__components__select-standalone.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__select-standalone.test.tsx.snap @@ -1,9 +1,9 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Select (standalone) > snapshots > default with string items 1`] = `"
"`; +exports[`Select (standalone) > snapshots > default with string items 1`] = `"
"`; -exports[`Select (standalone) > snapshots > disabled 1`] = `"
"`; +exports[`Select (standalone) > snapshots > disabled 1`] = `"
"`; -exports[`Select (standalone) > snapshots > multiple mode 1`] = `"
"`; +exports[`Select (standalone) > snapshots > multiple mode 1`] = `"
"`; -exports[`Select (standalone) > snapshots > with custom mapItem 1`] = `"
"`; +exports[`Select (standalone) > snapshots > with custom mapItem 1`] = `"
"`; diff --git a/packages/core/__snapshots__/src__components__select.test.tsx.snap b/packages/core/__snapshots__/src__components__select.test.tsx.snap index e791e421..c14ab1ce 100644 --- a/packages/core/__snapshots__/src__components__select.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__select.test.tsx.snap @@ -1,11 +1,50 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Select > snapshots > closed select with placeholder 1`] = `""`; +exports[`Select > snapshots > closed select with placeholder 1`] = `""`; -exports[`Select > snapshots > disabled item 1`] = `"
Apple
Banana
"`; +exports[`Select > snapshots > disabled item 1`] = ` +"
Apple
Banana
" +`; -exports[`Select > snapshots > disabled select 1`] = `""`; +exports[`Select > snapshots > disabled select 1`] = `""`; -exports[`Select > snapshots > open select 1`] = `"
Apple
Banana
"`; +exports[`Select > snapshots > open select 1`] = ` +"
Apple
Banana
" +`; -exports[`Select > snapshots > with groups and separator 1`] = `"
Fruits
Apple
Vegetables
Carrot
"`; +exports[`Select > snapshots > with groups and separator 1`] = ` +"
Fruits
Apple
Vegetables
Carrot
" +`; diff --git a/packages/core/src/assets/theme.css b/packages/core/src/assets/theme.css index 6a38cc61..f3c151c6 100644 --- a/packages/core/src/assets/theme.css +++ b/packages/core/src/assets/theme.css @@ -92,10 +92,12 @@ * Primary: #535AE8 · Text: #10122B · White: #FFFFFF * Secondary: Deep Cyan #00979C · Dark Green #013742 · Off-White #F8F3E4 · Neutral #EEEEEE · Light Violet #E2D4FE */ -html[data-theme="tailor-light"] { +html[data-theme="cream"] { color-scheme: light; /* Off-white app shell; white cards for elevation */ --background: rgba(248, 243, 228, 1); + /* Bottom stop for fixed shell gradient (globals.css); same cream family, lighter toward white. */ + --shell-gradient-end: color-mix(in srgb, var(--background) 40%, rgb(255, 255, 255)); --foreground: rgba(16, 18, 43, 1); --card: rgba(255, 255, 255, 1); --card-foreground: rgba(16, 18, 43, 1); @@ -142,51 +144,112 @@ html[data-theme="tailor-light"] { } /** - * Tailor brand — dark palette (distinct from default dark for tuning). + * Bloom — light lavender app shell; cream secondary/accent surfaces (inverse of Tailor light). */ -html[data-theme="tailor-dark"] { +html[data-theme="bloom"] { + color-scheme: light; + --background: rgba(239, 232, 255, 1); + /* Bottom stop for shell gradient (globals.css); lavender family, lighter than top. */ + --shell-gradient-end: color-mix(in srgb, var(--background) 40%, rgb(255, 255, 255)); + --foreground: rgba(16, 18, 43, 1); + --card: rgba(255, 255, 255, 1); + --card-foreground: rgba(16, 18, 43, 1); + --popover: rgba(255, 255, 255, 1); + --popover-foreground: rgba(16, 18, 43, 1); + --primary: rgba(83, 90, 232, 1); + --primary-foreground: rgba(255, 255, 255, 1); + --secondary: rgba(248, 243, 228, 1); + --secondary-foreground: rgba(16, 18, 43, 1); + --muted: rgba(238, 238, 238, 1); + --muted-foreground: rgba(16, 18, 43, 0.72); + --accent: rgba(248, 243, 228, 1); + --accent-foreground: rgba(16, 18, 43, 1); + /* Softer reds than cream — less harsh against lavender gradient / cream fills */ + --destructive: rgba(176, 45, 64, 1); + --destructive-foreground: rgba(255, 251, 252, 1); + --border: rgba(0, 0, 0, 0.08); + --input: rgba(0, 0, 0, 0.08); + --ring: rgba(83, 90, 232, 0.45); + --chart-1: rgba(83, 90, 232, 1); + --chart-2: rgba(0, 151, 156, 1); + --chart-3: rgba(1, 55, 66, 1); + --chart-4: rgba(110, 95, 195, 1); + --chart-5: rgba(217, 119, 6, 1); + --radius: 1rem; + --sidebar: rgba(239, 232, 255, 1); + --sidebar-foreground: rgba(16, 18, 43, 1); + --sidebar-primary: rgba(83, 90, 232, 1); + --sidebar-primary-foreground: rgba(255, 255, 255, 1); + /* White elevated row on lavender shell (readable vs lavender-on-lavender) */ + --sidebar-accent: rgba(255, 255, 255, 1); + --sidebar-accent-foreground: rgba(16, 18, 43, 1); + --sidebar-border: rgba(0, 0, 0, 0.08); + --sidebar-ring: rgba(83, 90, 232, 0.45); + --status-default: rgba(16, 18, 43, 0.55); + /* Bloom: teal + violet-tint foregrounds; amber + dusty rose harmonize with shell */ + --status-neutral: #0b8c9a; + --status-completed: #0d7668; + --status-attention: #ae6f12; + --status-danger: #ae2438; + --semantic-shadow-xs: 0 1px 2px 0 rgb(16 18 43 / 0.07); + --semantic-shadow-sm: 0 1px 3px 0 rgb(16 18 43 / 0.08), 0 1px 2px -1px rgb(16 18 43 / 0.06); + --semantic-shadow-md: 0 4px 6px -1px rgb(16 18 43 / 0.1), 0 2px 4px -2px rgb(16 18 43 / 0.08); + --semantic-shadow-lg: 0 10px 15px -3px rgb(16 18 43 / 0.12), 0 4px 6px -4px rgb(83 90 232 / 0.1); +} + +/** + * Tailor brand — dark palette (`deep-dark`): near-black shell; same primaries / secondaries as cream. + */ +html[data-theme="deep-dark"] { color-scheme: dark; - --background: rgba(15, 23, 42, 1); - --foreground: rgba(241, 245, 249, 1); - --card: rgba(30, 41, 59, 1); - --card-foreground: rgba(241, 245, 249, 1); - --popover: rgba(30, 41, 59, 1); - --popover-foreground: rgba(241, 245, 249, 1); - --primary: rgba(52, 211, 153, 1); - --primary-foreground: rgba(6, 78, 59, 1); - --secondary: rgba(51, 65, 85, 1); - --secondary-foreground: rgba(241, 245, 249, 1); - --muted: rgba(51, 65, 85, 1); - --muted-foreground: rgba(148, 163, 184, 1); - --accent: rgba(71, 85, 105, 1); - --accent-foreground: rgba(241, 245, 249, 1); - --destructive: rgba(248, 113, 113, 1); + --background: rgba(10, 10, 11, 1); + --foreground: rgba(237, 238, 242, 1); + --card: rgba(18, 18, 21, 1); + --card-foreground: rgba(237, 238, 242, 1); + --popover: rgba(22, 22, 26, 1); + --popover-foreground: rgba(237, 238, 242, 1); + /* Match cream — Primary #535AE8 */ + --primary: rgba(83, 90, 232, 1); + --primary-foreground: rgba(255, 255, 255, 1); + /* Light violet + dark green text (same pairing as cream) */ + --secondary: rgba(226, 212, 254, 1); + --secondary-foreground: rgba(1, 55, 66, 1); + --muted: rgba(28, 28, 34, 1); + --muted-foreground: rgba(163, 167, 180, 1); + --accent: rgba(226, 212, 254, 1); + --accent-foreground: rgba(1, 55, 66, 1); + --destructive: rgba(185, 28, 28, 1); --destructive-foreground: rgba(254, 242, 242, 1); - --border: rgba(71, 85, 105, 1); - --input: rgba(71, 85, 105, 1); - --ring: rgba(52, 211, 153, 1); - --chart-1: rgba(52, 211, 153, 1); - --chart-2: rgba(94, 234, 212, 1); - --chart-3: rgba(251, 191, 36, 1); - --chart-4: rgba(196, 181, 253, 1); - --chart-5: rgba(251, 113, 133, 1); - --sidebar: rgba(15, 23, 42, 1); - --sidebar-foreground: rgba(241, 245, 249, 1); - --sidebar-primary: rgba(16, 185, 129, 1); - --sidebar-primary-foreground: rgba(6, 78, 59, 1); - --sidebar-accent: rgba(51, 65, 85, 1); - --sidebar-accent-foreground: rgba(241, 245, 249, 1); - --sidebar-border: rgba(71, 85, 105, 1); - --sidebar-ring: rgba(52, 211, 153, 1); - --status-default: #94a3b8; - --status-neutral: #38bdf8; - --status-completed: #34d399; - --status-attention: #fbbf24; - --status-danger: #f87171; - --semantic-shadow-xs: 0 1px 2px 0 rgb(15 118 110 / 0.22); - --semantic-shadow-sm: 0 1px 3px 0 rgb(16 185 129 / 0.28), 0 1px 2px -1px rgb(16 185 129 / 0.22); - --semantic-shadow-md: 0 4px 6px -1px rgb(6 95 70 / 0.35), 0 2px 4px -2px rgb(6 95 70 / 0.28); - --semantic-shadow-lg: 0 10px 15px -3px rgb(6 78 59 / 0.45), 0 4px 6px -4px rgb(6 78 59 / 0.35); + --border: rgba(255, 255, 255, 0.1); + --input: rgba(255, 255, 255, 0.12); + --ring: rgba(83, 90, 232, 0.45); + --chart-1: rgba(83, 90, 232, 1); + --chart-2: rgba(0, 151, 156, 1); + --chart-3: rgba(1, 55, 66, 1); + --chart-4: rgba(110, 95, 195, 1); + --chart-5: rgba(217, 119, 6, 1); + --radius: 1rem; + --sidebar: rgba(10, 10, 11, 1); + --sidebar-foreground: rgba(237, 238, 242, 1); + --sidebar-primary: rgba(83, 90, 232, 1); + --sidebar-primary-foreground: rgba(255, 255, 255, 1); + /* + * Hover + current row: dark elevated chip on near-black sidebar — light label. + * (Lavender wash reads as a “light tab” here; a muted lift matches dark UI better.) + */ + --sidebar-accent: rgba(42, 43, 54, 1); + --sidebar-accent-foreground: rgba(238, 239, 246, 1); + --sidebar-border: rgba(255, 255, 255, 0.1); + --sidebar-ring: rgba(83, 90, 232, 0.45); + --status-default: rgba(144, 150, 168, 0.88); + --status-neutral: #00979c; + --status-completed: #00979c; + --status-attention: #d97706; + --status-danger: #dc2626; + --semantic-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.42); + --semantic-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.42), 0 1px 2px -1px rgb(0 0 0 / 0.36); + --semantic-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.46), 0 2px 4px -2px rgb(0 0 0 / 0.36); + --semantic-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.54), 0 4px 6px -4px rgb(83 90 232 / 0.12); } @theme inline { diff --git a/packages/core/src/components/appshell.tsx b/packages/core/src/components/appshell.tsx index 036faddc..4b96c8b8 100644 --- a/packages/core/src/components/appshell.tsx +++ b/packages/core/src/components/appshell.tsx @@ -182,7 +182,7 @@ type SharedAppShellProps = React.PropsWithChildren<{ * Initial theme before any value is loaded from localStorage (`appshell-ui-theme`). * Does not replace a stored preference. * - * Includes **Tailor** brand palettes (`tailor-light`, `tailor-dark`) in addition to + * Named palettes **`cream`**, **`bloom`**, **`deep-dark`**, plus default **`light`** / **`dark`**, in addition to * default light/dark and `system` (OS preference maps to **default** light or dark only). * * @default "system" diff --git a/packages/core/src/components/autocomplete.tsx b/packages/core/src/components/autocomplete.tsx index eadfebe5..4a1abb09 100644 --- a/packages/core/src/components/autocomplete.tsx +++ b/packages/core/src/components/autocomplete.tsx @@ -39,7 +39,7 @@ function AutocompleteInput({ ; currentPath: string }) to={item.url as string} className={ isActivePath(item.url, props.currentPath) - ? "astw:bg-sidebar-accent astw:font-medium" + ? "astw:bg-sidebar-accent astw:font-medium astw:text-sidebar-accent-foreground" : undefined } /> @@ -246,7 +246,7 @@ const AutoSidebarItems = (props: { items: Array; currentPath: string }) to={subItem.url!} className={ isActivePath(subItem.url, props.currentPath) - ? "astw:bg-sidebar-accent astw:font-medium" + ? "astw:bg-sidebar-accent astw:font-medium astw:text-sidebar-accent-foreground" : undefined } /> diff --git a/packages/core/src/components/sidebar/sidebar-group.tsx b/packages/core/src/components/sidebar/sidebar-group.tsx index f094f354..906bc389 100644 --- a/packages/core/src/components/sidebar/sidebar-group.tsx +++ b/packages/core/src/components/sidebar/sidebar-group.tsx @@ -85,7 +85,11 @@ export const SidebarGroup = (props: SidebarGroupProps) => { render={ } tooltip={resolvedTitle} diff --git a/packages/core/src/components/sidebar/sidebar-item.tsx b/packages/core/src/components/sidebar/sidebar-item.tsx index 03949b88..50d0bb62 100644 --- a/packages/core/src/components/sidebar/sidebar-item.tsx +++ b/packages/core/src/components/sidebar/sidebar-item.tsx @@ -123,7 +123,11 @@ export const SidebarItem = (props: SidebarItemProps) => { href={to} target="_blank" rel="noopener noreferrer" - className={isActive ? "astw:bg-sidebar-accent astw:font-medium" : undefined} + className={ + isActive + ? "astw:bg-sidebar-accent astw:font-medium astw:text-sidebar-accent-foreground" + : undefined + } /> } tooltip={title} @@ -148,7 +152,11 @@ export const SidebarItem = (props: SidebarItemProps) => { render={ } tooltip={title} diff --git a/packages/core/src/components/sidebar/sidebar-layout.tsx b/packages/core/src/components/sidebar/sidebar-layout.tsx index fda3ffbc..ad663326 100644 --- a/packages/core/src/components/sidebar/sidebar-layout.tsx +++ b/packages/core/src/components/sidebar/sidebar-layout.tsx @@ -4,7 +4,13 @@ import { AppShellOutlet } from "@/components/content"; import { Button } from "@/components/button"; import { useTheme, type ResolvedTheme } from "@/contexts/theme-context"; -const RESOLVED_THEME_CYCLE: ResolvedTheme[] = ["light", "dark", "tailor-light", "tailor-dark"]; +const RESOLVED_THEME_CYCLE: ResolvedTheme[] = [ + "light", + "dark", + "deep-dark", + "cream", + "bloom", +]; import { DefaultSidebar } from "./default-sidebar"; import { DynamicBreadcrumb } from "@/components/dynamic-breadcrumb"; diff --git a/packages/core/src/contexts/theme-context.tsx b/packages/core/src/contexts/theme-context.tsx index 45457c84..2c73ff98 100644 --- a/packages/core/src/contexts/theme-context.tsx +++ b/packages/core/src/contexts/theme-context.tsx @@ -1,21 +1,32 @@ import { createContext, useContext, useEffect, useMemo, useState } from "react"; -/** User-selectable theme. `system` follows OS light/dark (default palettes only — B1). */ -export type Theme = "light" | "dark" | "tailor-light" | "tailor-dark" | "system"; +/** User-selectable theme. `system` follows OS light/dark (default palettes only — not cream/bloom/deep-dark). */ +export type Theme = "light" | "dark" | "deep-dark" | "cream" | "bloom" | "system"; /** Resolved paint after applying `system`. */ -export type ResolvedTheme = "light" | "dark" | "tailor-light" | "tailor-dark"; +export type ResolvedTheme = "light" | "dark" | "deep-dark" | "cream" | "bloom"; const ALL_THEMES: readonly Theme[] = [ "light", "dark", - "tailor-light", - "tailor-dark", + "deep-dark", + "cream", + "bloom", "system", ] as const; +/** Migrate stored values from legacy `tailor-*` ids before the public rename. */ +const LEGACY_THEME_IDS: Partial> = { + "tailor-light": "cream", + "tailor-bloom": "bloom", + "tailor-dark": "deep-dark", +}; + function parseStoredTheme(value: string | null, fallback: Theme): Theme { - if (value && (ALL_THEMES as readonly string[]).includes(value)) return value as Theme; + if (!value) return fallback; + const legacy = LEGACY_THEME_IDS[value]; + if (legacy) return legacy; + if ((ALL_THEMES as readonly string[]).includes(value)) return value as Theme; return fallback; } @@ -82,7 +93,7 @@ export function ThemeProvider({ const root = window.document.documentElement; root.classList.remove("light", "dark"); root.classList.add( - resolvedTheme === "dark" || resolvedTheme === "tailor-dark" ? "dark" : "light", + resolvedTheme === "dark" || resolvedTheme === "deep-dark" ? "dark" : "light", ); root.dataset.theme = resolvedTheme; }, [resolvedTheme]); diff --git a/packages/core/src/globals.css b/packages/core/src/globals.css index 4e108a68..d6996f9f 100644 --- a/packages/core/src/globals.css +++ b/packages/core/src/globals.css @@ -39,26 +39,60 @@ body { @apply astw:font-sans astw:antialiased astw:bg-background astw:text-foreground; } + + /* + * Cream / Bloom — vertical shell gradient (top = --background; bottom lighter via --shell-gradient-end). + * Paint on `html` (fixed); shell chrome uses transparent bg so `bg-background` on buttons/cards stays solid. + */ + :is(html[data-theme="cream"], html[data-theme="bloom"]) { + min-height: 100vh; + min-height: 100dvh; + background-color: var(--background); + background-image: linear-gradient(to bottom, var(--background), var(--shell-gradient-end)); + background-attachment: fixed; + background-repeat: no-repeat; + background-size: 100% 100%; + } + + :is(html[data-theme="cream"], html[data-theme="bloom"]) body { + background-color: transparent !important; + background-image: none; + } + + :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="sidebar-wrapper"], + :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="sidebar-inner"], + :is(html[data-theme="cream"], html[data-theme="bloom"]) main[data-slot="sidebar-inset"], + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="sidebar"][class*="bg-sidebar"]:not([data-mobile="true"]):not( + [data-icon-mode="true"] + ) { + background-color: transparent !important; + } + /* - Tailor light: Geist Sans + Apple-style corners (squircle) when the engine supports corner-shape (Chromium). + Tailor light / dark: Geist Sans + Apple-style corners (squircle) when the engine supports corner-shape (Chromium). Circles (.rounded-full) stay round; browsers without support keep standard border-radius. */ - html[data-theme="tailor-light"] body { + :is(html[data-theme="cream"], html[data-theme="bloom"]) body, + html[data-theme="deep-dark"] body { font-family: "Geist Sans", ui-sans-serif, system-ui, sans-serif; } - html[data-theme="tailor-light"] :where(h1, h2, h3, h4, h5, h6) { + :is(html[data-theme="cream"], html[data-theme="bloom"]) :where(h1, h2, h3, h4, h5, h6), + html[data-theme="deep-dark"] :where(h1, h2, h3, h4, h5, h6) { letter-spacing: -0.03em; line-height: 1.2; font-family: "Geist Sans", ui-sans-serif, system-ui, sans-serif; } @supports (corner-shape: squircle) { - html[data-theme="tailor-light"] * { + :is(html[data-theme="cream"], html[data-theme="bloom"]) *, + html[data-theme="deep-dark"] * { corner-shape: squircle; } /* Round radii (.rounded-full) stay circular squircles, not elongated “capsules” */ - html[data-theme="tailor-light"] [class*="rounded-full"] { + :is(html[data-theme="cream"], html[data-theme="bloom"]) [class*="rounded-full"], + html[data-theme="deep-dark"] [class*="rounded-full"] { corner-shape: round; } } @@ -71,25 +105,40 @@ ::-webkit-scrollbar-corner { @apply astw:bg-muted-foreground; } + + /* + * WebKit / Firefox autofill: override system yellow so fills follow design tokens + * (typically white card surfaces in cream / bloom; --card resolves per theme). + */ + input:is(:-webkit-autofill, :autofill), + textarea:is(:-webkit-autofill, :autofill), + select:is(:-webkit-autofill, :autofill) { + -webkit-box-shadow: 0 0 0 1000px var(--card) inset !important; + box-shadow: 0 0 0 1000px var(--card) inset !important; + caret-color: var(--foreground); + transition: background-color 9999s ease-out 0s; + } } /* - * Tailor light — tactile buttons: solid fill + 2px darker bottom lip (raised); - * pressed: border 0 + inset shade. Corner radius stays from Button utilities. - * Only html[data-theme="tailor-light"]; raised variants share shadow-xs in button.tsx. + * Cream / Bloom / deep-dark — tactile buttons: solid fill + 2px darker bottom lip (raised); + * pressed: borders match fill (lip vanishes visually, no jump) + inset shade + slight translateY on label. + * These themes use the same brand tokens and rim recipes (theme.css). */ @layer utilities { - html[data-theme="tailor-light"] [data-slot="button"][class*="shadow-xs"] { + :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="button"][class*="shadow-xs"], + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"] { background-image: none; transition: filter 0.12s ease, - border-width 0.12s ease, border-color 0.12s ease, - box-shadow 0.12s ease; + box-shadow 0.12s ease, + transform 0.08s ease; } - html[data-theme="tailor-light"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"] { + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"], + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"] { background-color: var(--primary); color: var(--primary-foreground); border: 1px solid color-mix(in srgb, #10122b 38%, rgb(106 114 226)); @@ -97,26 +146,36 @@ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.22); } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:hover:not(:disabled), + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:hover:not(:disabled) { filter: brightness(1.05); } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:active:not(:disabled), + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:active:not(:disabled) { - border: 0; filter: brightness(0.96); - box-shadow: inset 0 4px 10px rgb(8 14 82 / 0.38); + border: 1px solid var(--primary); + border-bottom: 2px solid var(--primary); + box-shadow: inset 0 3px 8px rgb(8 14 82 / 0.36); + transform: translateY(2px); } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:focus-visible, + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:focus-visible { box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.22), 0 0 0 3px var(--ring) !important; } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"], + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"] { background-color: var(--secondary); color: var(--secondary-foreground); @@ -125,26 +184,44 @@ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.65); } - html[data-theme="tailor-light"] + /* + * Bloom: cream secondary on lavender shell — rims from --background (lighter than cream’s violet lip). + */ + html[data-theme="bloom"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"] { + border: 1px solid color-mix(in srgb, var(--background) 88%, rgb(118 108 168)); + border-bottom: 2px solid color-mix(in srgb, var(--background) 70%, rgb(105 96 152)); + } + + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:hover:not(:disabled), + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:hover:not(:disabled) { filter: brightness(1.035); } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:active:not(:disabled), + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:active:not(:disabled) { - border: 0; filter: brightness(0.98); + border: 1px solid var(--secondary); + border-bottom: 2px solid var(--secondary); box-shadow: inset 0 3px 8px rgb(50 42 118 / 0.22); + transform: translateY(2px); } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:focus-visible, + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:focus-visible { box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.65), 0 0 0 3px var(--ring) !important; } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"], + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"] { background-color: var(--destructive); color: var(--destructive-foreground); @@ -153,57 +230,178 @@ box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.2); } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:hover:not(:disabled), + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:hover:not(:disabled) { filter: brightness(1.04); } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:active:not(:disabled), + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:active:not(:disabled) { - border: 0; filter: brightness(0.96); + border: 1px solid var(--destructive); + border-bottom: 2px solid var(--destructive); box-shadow: inset 0 4px 10px rgb(70 14 14 / 0.45); + transform: translateY(2px); } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:focus-visible, + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:focus-visible { box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.2), 0 0 0 3px color-mix(in srgb, var(--destructive) 42%, transparent) !important; } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"] { background-color: var(--card); color: var(--card-foreground); - border: 1px solid rgb(185 183 206 / 0.65); - border-bottom: 2px solid rgb(130 134 164 / 0.85); + border: 1px solid rgb(203 200 225 / 0.48); + border-bottom: 2px solid rgb(154 158 184 / 0.62); box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.9); } - html[data-theme="tailor-light"] + /* Dark: subtler rims so outline doesn’t read as a bright halo on near-black UI. */ + html[data-theme="deep-dark"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"] { + background-color: var(--card); + color: var(--card-foreground); + border: 1px solid rgb(58 60 72 / 0.55); + border-bottom: 2px solid rgb(34 36 46 / 0.82); + box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.04); + } + + :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:hover:not( :disabled ) { - border-color: rgb(165 160 205 / 0.55); - border-bottom-color: rgb(110 118 168 / 0.75); + border-color: rgb(185 180 218 / 0.42); + border-bottom-color: rgb(135 142 188 / 0.58); filter: brightness(1.015); box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.98); } - html[data-theme="tailor-light"] + html[data-theme="deep-dark"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:hover:not( + :disabled + ) { + border-color: rgb(78 80 94 / 0.5); + border-bottom-color: rgb(52 54 68 / 0.85); + filter: brightness(1.04); + box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.06); + } + + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:active:not( + :disabled + ), + html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:active:not( :disabled ) { - border: 0; + border: 1px solid var(--card); + border-bottom: 2px solid var(--card); box-shadow: inset 0 3px 8px rgb(16 18 43 / 0.12); filter: none; + transform: translateY(2px); } - html[data-theme="tailor-light"] + :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:focus-visible { box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.9), 0 0 0 3px var(--ring) !important; } + + html[data-theme="deep-dark"] + [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:focus-visible { + box-shadow: + inset 0 1px 0 rgb(255 255 255 / 0.05), + 0 0 0 3px var(--ring) !important; + } + + /* + * Ghost (no shadow-xs): hover / pressed / focus match tactile outline (card + rim), not secondary. + * Invisible border at rest matches outline lip widths so chrome does not shift layout. + */ + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"], + html[data-theme="deep-dark"] + [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"] { + background-image: none; + border: 1px solid transparent; + border-bottom: 2px solid transparent; + transition: + filter 0.12s ease, + border-color 0.12s ease, + box-shadow 0.12s ease, + transform 0.08s ease, + background-color 0.12s ease, + color 0.12s ease; + } + + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:hover:not( + :disabled + ) { + background-color: var(--card); + color: var(--card-foreground); + border: 1px solid rgb(185 180 218 / 0.42); + border-bottom: 2px solid rgb(135 142 188 / 0.58); + filter: brightness(1.015); + box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.98); + } + + html[data-theme="deep-dark"] + [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:hover:not( + :disabled + ) { + background-color: var(--card); + color: var(--card-foreground); + border: 1px solid rgb(78 80 94 / 0.5); + border-bottom: 2px solid rgb(52 54 68 / 0.85); + filter: brightness(1.04); + box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.06); + } + + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:active:not( + :disabled + ), + html[data-theme="deep-dark"] + [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:active:not( + :disabled + ) { + border: 1px solid var(--card); + border-bottom: 2px solid var(--card); + box-shadow: inset 0 3px 8px rgb(16 18 43 / 0.12); + filter: none; + transform: translateY(2px); + background-color: var(--card); + color: var(--card-foreground); + } + + /* Match outline tactile: focus-visible adds ring atop existing rim (outline default already painted). */ + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:focus-visible:not( + :disabled + ) { + box-shadow: + inset 0 1px 0 rgb(255 255 255 / 0.9), + 0 0 0 3px var(--ring) !important; + } + + html[data-theme="deep-dark"] + [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:focus-visible:not( + :disabled + ) { + box-shadow: + inset 0 1px 0 rgb(255 255 255 / 0.05), + 0 0 0 3px var(--ring) !important; + } } diff --git a/packages/core/src/lib/input-classes.ts b/packages/core/src/lib/input-classes.ts index f814a266..87c89c62 100644 --- a/packages/core/src/lib/input-classes.ts +++ b/packages/core/src/lib/input-classes.ts @@ -1,13 +1,15 @@ /** * Shared base Tailwind classes for text-input-like controls. * - * Used by both `Input` and `Field.Control` to keep their visual appearance - * in sync. Each consumer layers on context-specific classes (e.g. - * `aria-invalid` vs `data-invalid`, file-input utilities). + * Surfaces use **transparent** fill so the control picks up whatever is behind it + * (e.g. white `Card`, cream page). In `.dark`, a light input wash applies. + * + * Used by both `Input` and `Field.Control`. Select/Combobox/Autocomplete triggers + * repeat the same transparent + dark line for the same behavior. */ export const inputBaseClasses = [ - "astw:border-input astw:flex astw:h-9 astw:w-full astw:min-w-0 astw:rounded-md astw:border astw:bg-transparent astw:px-3 astw:py-1 astw:text-base astw:shadow-xs astw:outline-none astw:md:text-sm", - "astw:dark:bg-input/30 astw:transition-[color,box-shadow]", + "astw:border-input astw:flex astw:h-9 astw:w-full astw:min-w-0 astw:rounded-md astw:border astw:px-3 astw:py-1 astw:text-base astw:shadow-xs astw:outline-none astw:md:text-sm", + "astw:bg-transparent astw:dark:bg-input/30 astw:transition-[color,box-shadow]", "astw:selection:bg-primary astw:selection:text-primary-foreground", "astw:placeholder:text-muted-foreground", "astw:focus-visible:border-ring astw:focus-visible:ring-ring/50 astw:focus-visible:ring-[3px]", From 5efb6f40ce26f9f88885f9455f4794c79870179b Mon Sep 17 00:00:00 2001 From: itsprade Date: Wed, 29 Apr 2026 15:53:27 +0530 Subject: [PATCH 05/20] feat(themes): theme switcher, tactile slots, Bloom/Cream refinements - Add ThemeSwitcher (grid) and Tailor palettes (cream, bloom, deep-dark); wire sidebar slot; export THEMES/options. - Theme context: bloom label, resolver updates; muted token comments aligned. - Globals: tactile Cream/Bloom/deep-dark rules for composed controls (dialog-close/trigger slots); table layout fix. - Dialog: card surface for content; footer/close compose with branded buttons. - Vite example: CSS load order note (Tailwind before app-shell styles). - Docs: use-theme and sidebar-layout; styling-theming palettes table. Made-with: Cursor --- docs/api/use-theme.md | 41 ++++-- docs/components/sidebar-layout.md | 16 ++- docs/concepts/styling-theming.md | 2 +- examples/vite-app/src/index.css | 6 + .../src__components__dialog.test.tsx.snap | 6 +- .../src__components__table.test.tsx.snap | 10 +- packages/core/src/assets/theme.css | 6 +- packages/core/src/components/dialog.tsx | 12 +- packages/core/src/components/sidebar/index.ts | 1 + .../src/components/sidebar/sidebar-layout.tsx | 39 +++--- packages/core/src/components/table.tsx | 2 +- .../src/components/theme-switcher.test.tsx | 101 ++++++++++++++ .../core/src/components/theme-switcher.tsx | 128 ++++++++++++++++++ packages/core/src/contexts/theme-context.tsx | 12 ++ packages/core/src/globals.css | 89 ++++++------ packages/core/src/index.ts | 9 +- 16 files changed, 380 insertions(+), 100 deletions(-) create mode 100644 packages/core/src/components/theme-switcher.test.tsx create mode 100644 packages/core/src/components/theme-switcher.tsx diff --git a/docs/api/use-theme.md b/docs/api/use-theme.md index 778f0099..76f0c0a4 100644 --- a/docs/api/use-theme.md +++ b/docs/api/use-theme.md @@ -15,6 +15,11 @@ Exported types: export type Theme = "light" | "dark" | "deep-dark" | "cream" | "bloom" | "system"; export type ResolvedTheme = "light" | "dark" | "deep-dark" | "cream" | "bloom"; + +export type ThemeOption = { readonly value: Theme; readonly label: string }; + +/** Ordered labels for UI (e.g. theme menus); includes System last. */ +export const THEME_OPTIONS: readonly ThemeOption[]; ``` Hook return value: @@ -75,24 +80,34 @@ function UseCream() { } ``` -### Theme selector +### Theme menu (**`ThemeSwitcher`**) + +`SidebarLayout` includes a header **`ThemeSwitcher`** by default. You can reuse it elsewhere or build a custom control from **`THEME_OPTIONS`**: + +```tsx +import { ThemeSwitcher } from "@tailor-platform/app-shell"; + +function Toolbar() { + return ; +} +``` ```typescript -function ThemeSelector() { +import { THEME_OPTIONS, useTheme, type Theme } from "@tailor-platform/app-shell"; + +function CustomThemeList() { const { theme, setTheme } = useTheme(); return ( - +
    + {THEME_OPTIONS.map(({ value, label }) => ( +
  • + +
  • + ))} +
); } ``` diff --git a/docs/components/sidebar-layout.md b/docs/components/sidebar-layout.md index f855c558..40e3373e 100644 --- a/docs/components/sidebar-layout.md +++ b/docs/components/sidebar-layout.md @@ -1,11 +1,11 @@ --- title: SidebarLayout -description: The default layout component with sidebar navigation, breadcrumbs, and theme toggle +description: The default layout component with sidebar navigation, breadcrumbs, and theme menu --- # SidebarLayout -`SidebarLayout` is the default layout component that provides a responsive sidebar navigation, breadcrumb trail, and theme toggle. It's designed to work seamlessly with AppShell's module system. +`SidebarLayout` is the default layout component that provides a responsive sidebar navigation, breadcrumb trail, and theme menu (named palettes plus **System**). It's designed to work seamlessly with AppShell's module system. ## Import @@ -31,7 +31,7 @@ This gives you: - ✅ Responsive sidebar with auto-generated navigation from modules - ✅ Breadcrumb navigation -- ✅ Theme toggle (light/dark mode) +- ✅ Theme menu (all palettes + **System**) - ✅ Mobile-friendly collapsible sidebar ## Props @@ -55,6 +55,12 @@ This gives you: The `Outlet` component renders your current route's component. +### themeSwitcher + +- **Type:** `React.ReactNode` (optional) +- **Default:** `` — dropdown listing every [`Theme`](../api/use-theme.md) plus **System** +- **Description:** Pass **`null`** to hide the header theme control, or pass a custom node to replace it. + ### sidebar - **Type:** `React.ReactNode` (optional) @@ -119,9 +125,9 @@ Dashboard > Products > Product Details Breadcrumbs update automatically as users navigate through your application. -### Theme Toggle +### Theme menu -A sun/moon icon button in the header allows users to switch between light and dark themes. The theme preference is persisted to localStorage. +A palette icon button in the header opens a grid of every palette (each with a two-color preview) plus **System**. When **System** is selected, the button’s **tooltip** (`title`) summarizes the effective palette. The choice is persisted to `localStorage`. Override or hide via the **`themeSwitcher`** prop. ## Customization Examples diff --git a/docs/concepts/styling-theming.md b/docs/concepts/styling-theming.md index 50733984..23bd29fd 100644 --- a/docs/concepts/styling-theming.md +++ b/docs/concepts/styling-theming.md @@ -35,7 +35,7 @@ AppShell ships **five** named semantic palettes controlled by **`data-theme`** o | `light` | Default neutral light (historic AppShell UI) | | `dark` | Default neutral dark | | `cream` | Tailor brand — cream shell, violet accents | -| `bloom` | Lavender shell (**Bloom**) and cream accents | +| `bloom` | Lavender shell (**Bloom**) and cream accents | | `deep-dark` | Tailor brand — near-black tuning surface | **`system`** resolves to **`light`** or **`dark`** only — not **`cream`**, **`bloom`**, or **`deep-dark`**. Set those with **`setTheme`** or **`AppShell`** **`defaultTheme`**. diff --git a/examples/vite-app/src/index.css b/examples/vite-app/src/index.css index c280a9f7..89caf9b8 100644 --- a/examples/vite-app/src/index.css +++ b/examples/vite-app/src/index.css @@ -1,3 +1,9 @@ +/* Unprefixed Tailwind for this app (`mb-4`, `text-muted-foreground`, etc.) must load first. + * App Shell styles MUST come second so layered base rules (semantic `border-border` / `--border`) + * are not overwritten by Tailwind preflight — otherwise AppShell borders look harsh/black everywhere. + * + * Theme switcher grid does not rely on this order (inline fallback styles on `ThemeSwitcher`). + */ @import "tailwindcss"; @import "@tailor-platform/app-shell/styles"; diff --git a/packages/core/__snapshots__/src__components__dialog.test.tsx.snap b/packages/core/__snapshots__/src__components__dialog.test.tsx.snap index f0d6aaf6..67039ef6 100644 --- a/packages/core/__snapshots__/src__components__dialog.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__dialog.test.tsx.snap @@ -1,7 +1,7 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Dialog > snapshots > closed dialog (trigger only) 1`] = `""`; +exports[`Dialog > snapshots > closed dialog (trigger only) 1`] = `""`; -exports[`Dialog > snapshots > open dialog with header 1`] = `"
"`; +exports[`Dialog > snapshots > open dialog with header 1`] = `"
"`; -exports[`Dialog > snapshots > open dialog with header and footer 1`] = `"
"`; +exports[`Dialog > snapshots > open dialog with header and footer 1`] = `"
"`; diff --git a/packages/core/__snapshots__/src__components__table.test.tsx.snap b/packages/core/__snapshots__/src__components__table.test.tsx.snap index ba7e659e..abb364ae 100644 --- a/packages/core/__snapshots__/src__components__table.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__table.test.tsx.snap @@ -1,11 +1,11 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Table > snapshots > basic table with header and body 1`] = `"
NameStatus
Item 1Active
"`; +exports[`Table > snapshots > basic table with header and body 1`] = `"
NameStatus
Item 1Active
"`; -exports[`Table > snapshots > empty table 1`] = `"
NameStatus
"`; +exports[`Table > snapshots > empty table 1`] = `"
NameStatus
"`; -exports[`Table > snapshots > table with caption 1`] = `"
A list of items
Name
Item
"`; +exports[`Table > snapshots > table with caption 1`] = `"
A list of items
Name
Item
"`; -exports[`Table > snapshots > table with containerClassName 1`] = `"
Name
Item
"`; +exports[`Table > snapshots > table with containerClassName 1`] = `"
Name
Item
"`; -exports[`Table > snapshots > table with footer 1`] = `"
ProductPrice
Widget$10
Total$10
"`; +exports[`Table > snapshots > table with footer 1`] = `"
ProductPrice
Widget$10
Total$10
"`; diff --git a/packages/core/src/assets/theme.css b/packages/core/src/assets/theme.css index f3c151c6..43a20eb6 100644 --- a/packages/core/src/assets/theme.css +++ b/packages/core/src/assets/theme.css @@ -108,7 +108,8 @@ html[data-theme="cream"] { /* Light violet surfaces; dark green text (brand text-on-violet pairing) */ --secondary: rgba(226, 212, 254, 1); --secondary-foreground: rgba(1, 55, 66, 1); - --muted: rgba(238, 238, 238, 1); + /* Row hovers / `bg-muted`: subtle neutral lift (same alpha family as `--border`), not a second brand tint. */ + --muted: rgba(0, 0, 0, 0.08); --muted-foreground: rgba(16, 18, 43, 0.72); --accent: rgba(226, 212, 254, 1); --accent-foreground: rgba(1, 55, 66, 1); @@ -160,7 +161,8 @@ html[data-theme="bloom"] { --primary-foreground: rgba(255, 255, 255, 1); --secondary: rgba(248, 243, 228, 1); --secondary-foreground: rgba(16, 18, 43, 1); - --muted: rgba(238, 238, 238, 1); + /* Row hovers / `bg-muted`: subtle neutral lift (same alpha family as `--border`). */ + --muted: rgba(0, 0, 0, 0.08); --muted-foreground: rgba(16, 18, 43, 0.72); --accent: rgba(248, 243, 228, 1); --accent-foreground: rgba(16, 18, 43, 1); diff --git a/packages/core/src/components/dialog.tsx b/packages/core/src/components/dialog.tsx index d5dbbe30..9a18a857 100644 --- a/packages/core/src/components/dialog.tsx +++ b/packages/core/src/components/dialog.tsx @@ -2,6 +2,7 @@ import * as React from "react"; import { Dialog as BaseDialog } from "@base-ui/react/dialog"; import { XIcon } from "lucide-react"; +import { Button } from "@/components/button"; import { cn } from "@/lib/utils"; // Only the props relevant to the Dialog abstraction are picked from BaseDialog.Root. @@ -80,16 +81,21 @@ function Content({ className, children, ...props }: React.ComponentProps {children} - + ); diff --git a/packages/core/src/components/sidebar/index.ts b/packages/core/src/components/sidebar/index.ts index a751bfda..92665e9c 100644 --- a/packages/core/src/components/sidebar/index.ts +++ b/packages/core/src/components/sidebar/index.ts @@ -3,3 +3,4 @@ export { SidebarGroup, type SidebarGroupProps } from "./sidebar-group"; export { SidebarSeparator } from "./sidebar-separator"; export { DefaultSidebar, type DefaultSidebarProps } from "./default-sidebar"; export { SidebarLayout, type SidebarLayoutProps } from "./sidebar-layout"; +export { ThemeSwitcher } from "../theme-switcher"; diff --git a/packages/core/src/components/sidebar/sidebar-layout.tsx b/packages/core/src/components/sidebar/sidebar-layout.tsx index ad663326..b80146e5 100644 --- a/packages/core/src/components/sidebar/sidebar-layout.tsx +++ b/packages/core/src/components/sidebar/sidebar-layout.tsx @@ -1,20 +1,20 @@ +import type { ReactNode } from "react"; + import { SidebarProvider, SidebarInset, SidebarTrigger, useSidebar } from "@/components/sidebar"; -import { SunIcon } from "lucide-react"; import { AppShellOutlet } from "@/components/content"; -import { Button } from "@/components/button"; -import { useTheme, type ResolvedTheme } from "@/contexts/theme-context"; - -const RESOLVED_THEME_CYCLE: ResolvedTheme[] = [ - "light", - "dark", - "deep-dark", - "cream", - "bloom", -]; +import { ThemeSwitcher } from "@/components/theme-switcher"; import { DefaultSidebar } from "./default-sidebar"; import { DynamicBreadcrumb } from "@/components/dynamic-breadcrumb"; export type SidebarLayoutProps = { + /** + * Header theme control. + * + * @default Built-in **`ThemeSwitcher`** menu (all themes + **System**). + * Pass **`null`** to hide. Pass a custom **`ReactNode`** to replace. + */ + themeSwitcher?: ReactNode; + /** * Custom content renderer. * @@ -31,7 +31,7 @@ export type SidebarLayoutProps = { * * ``` */ - children?: (props: { Outlet: () => React.ReactNode }) => React.ReactNode; + children?: (props: { Outlet: () => ReactNode }) => ReactNode; /** * Custom sidebar content. @@ -76,12 +76,7 @@ const HidableSidebarTrigger = () => { export const SidebarLayout = (props: SidebarLayoutProps) => { const Children = props.children ? props.children({ Outlet: AppShellOutlet }) : null; - const { resolvedTheme, setTheme } = useTheme(); - const toggleTheme = () => { - const i = RESOLVED_THEME_CYCLE.indexOf(resolvedTheme); - const next = RESOLVED_THEME_CYCLE[(i === -1 ? 0 : i + 1) % RESOLVED_THEME_CYCLE.length]; - setTheme(next); - }; + const themeSwitcher = props.themeSwitcher !== undefined ? props.themeSwitcher : ; return ( {
-
- -
+ {themeSwitcher !== null ? ( +
{themeSwitcher}
+ ) : null}
diff --git a/packages/core/src/components/table.tsx b/packages/core/src/components/table.tsx index a03a72fe..c48d8416 100644 --- a/packages/core/src/components/table.tsx +++ b/packages/core/src/components/table.tsx @@ -84,7 +84,7 @@ function Row({ className, ...props }: React.ComponentProps<"tr">) { (); + const ls = { + getItem: (k: string) => map.get(k) ?? null, + setItem: (k: string, v: string) => { + map.set(k, v); + }, + removeItem: (k: string) => { + map.delete(k); + }, + clear: () => map.clear(), + key: (i: number) => [...map.keys()][i] ?? null, + get length() { + return map.size; + }, + }; + Object.defineProperty(globalThis, "localStorage", { configurable: true, value: ls }); + return map; +} + +let storageMap: Map; + +beforeAll(() => { + storageMap = installLocalStorageStub(); +}); + +beforeEach(() => { + storageMap.clear(); +}); + +afterEach(() => { + cleanup(); +}); + +describe("ThemeSwitcher", () => { + it("opens a menu listing every theme option", async () => { + const user = userEvent.setup(); + + render( + + + , + ); + + await user.click(screen.getByRole("button", { name: "Theme" })); + + await waitFor(() => { + expect(screen.getAllByRole("menuitemradio").length).toBe(THEME_OPTIONS.length); + }); + + for (const opt of THEME_OPTIONS) { + expect(screen.getByRole("menuitemradio", { name: opt.label })).toBeDefined(); + } + }); + + it("exposes resolved palette on the trigger when system mode is selected", () => { + render( + + + , + ); + + const btn = screen.getByRole("button", { name: "Theme" }); + expect(btn.getAttribute("title")).toMatch(/following system/i); + expect(btn.getAttribute("title")).toMatch(/currently light|currently dark/i); + }); + + it("applies selected palette when a radio item is activated", async () => { + const user = userEvent.setup(); + + render( + + + , + ); + + await user.click(screen.getByRole("button", { name: "Theme" })); + + await waitFor(() => { + expect(screen.getByRole("menu")).toBeDefined(); + }); + + await user.click(screen.getByRole("menuitemradio", { name: "Bloom" })); + + await waitFor(() => { + expect(document.documentElement.dataset.theme).toBe("bloom"); + }); + expect(localStorage.getItem(storageKey)).toBe("bloom"); + }); +}); diff --git a/packages/core/src/components/theme-switcher.tsx b/packages/core/src/components/theme-switcher.tsx new file mode 100644 index 00000000..6b7cf583 --- /dev/null +++ b/packages/core/src/components/theme-switcher.tsx @@ -0,0 +1,128 @@ +import { Palette } from "lucide-react"; + +import { Menu } from "@/components/menu"; +import { Button } from "@/components/button"; +import { cn } from "@/lib/utils"; +import { useTheme, type ResolvedTheme, type Theme, THEME_OPTIONS } from "@/contexts/theme-context"; + +const RESOLVED_THEME_SHORT: Record = { + light: "Light", + dark: "Dark", + "deep-dark": "Deep dark", + cream: "Cream", + bloom: "Bloom", +}; + +/** + * Decorative dual swatches — approximates each palette pair (accent + neutral) for the picker grid. + */ +const THEME_PREVIEW: Record = { + light: { a: "#ffffff", b: "#d4d4d8" }, + dark: { a: "#3f3f46", b: "#d4d4d8" }, + "deep-dark": { a: "#09090b", b: "#a1a1aa" }, + cream: { a: "#f8f3e4", b: "#e2d4fe" }, + bloom: { a: "#535ae8", b: "#f8f3e4" }, + system: { a: "#52525b", b: "#7c73e6" }, +}; + +function isTheme(value: string): value is Theme { + return THEME_OPTIONS.some((o) => o.value === value); +} + +function ThemePreviewSwatches({ themeId }: { themeId: Theme }) { + const { a, b } = THEME_PREVIEW[themeId]; + return ( +
+ + +
+ ); +} + +/** + * Appearance menu: visual grid of every palette plus **System**. + * Bound to stored `theme` (not resolved paint alone) so **System** stays explicit. + */ +function ThemeSwitcher() { + const { theme, resolvedTheme, setTheme } = useTheme(); + + const triggerTitle = + theme === "system" + ? `Following system — currently ${RESOLVED_THEME_SHORT[resolvedTheme]}` + : "Choose appearance theme"; + + return ( + + + } + > + + + + { + if (typeof value === "string" && isTheme(value)) setTheme(value); + }} + > + {THEME_OPTIONS.map((opt) => ( + + + {opt.label} + + + {opt.label} + + ))} + + + + ); +} + +export { ThemeSwitcher }; diff --git a/packages/core/src/contexts/theme-context.tsx b/packages/core/src/contexts/theme-context.tsx index 2c73ff98..6d06d39c 100644 --- a/packages/core/src/contexts/theme-context.tsx +++ b/packages/core/src/contexts/theme-context.tsx @@ -15,6 +15,18 @@ const ALL_THEMES: readonly Theme[] = [ "system", ] as const; +/** Dropdown / switcher entries: order matches selectable themes; labels are user-facing. */ +export type ThemeOption = { readonly value: Theme; readonly label: string }; + +export const THEME_OPTIONS: readonly ThemeOption[] = [ + { value: "light", label: "Light" }, + { value: "dark", label: "Dark" }, + { value: "deep-dark", label: "Deep dark" }, + { value: "cream", label: "Cream" }, + { value: "bloom", label: "Bloom" }, + { value: "system", label: "System" }, +] as const; + /** Migrate stored values from legacy `tailor-*` ids before the public rename. */ const LEGACY_THEME_IDS: Partial> = { "tailor-light": "cream", diff --git a/packages/core/src/globals.css b/packages/core/src/globals.css index d6996f9f..13e3bdfd 100644 --- a/packages/core/src/globals.css +++ b/packages/core/src/globals.css @@ -124,10 +124,13 @@ * Cream / Bloom / deep-dark — tactile buttons: solid fill + 2px darker bottom lip (raised); * pressed: borders match fill (lip vanishes visually, no jump) + inset shade + slight translateY on label. * These themes use the same brand tokens and rim recipes (theme.css). + * + * `}>` and `}>` keep + * `data-slot="dialog-trigger"` / `data-slot="dialog-close"` on the merged control; targets include those plus `button`. */ @layer utilities { - :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="button"][class*="shadow-xs"], - html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"] { + :is(html[data-theme="cream"], html[data-theme="bloom"]) :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"], + html[data-theme="deep-dark"] :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"] { background-image: none; transition: filter 0.12s ease, @@ -137,8 +140,8 @@ } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"], - html[data-theme="deep-dark"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"] { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"], + html[data-theme="deep-dark"] :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"] { background-color: var(--primary); color: var(--primary-foreground); border: 1px solid color-mix(in srgb, #10122b 38%, rgb(106 114 226)); @@ -147,16 +150,16 @@ } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:hover:not(:disabled), + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:hover:not(:disabled), html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:hover:not(:disabled) { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:hover:not(:disabled) { filter: brightness(1.05); } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:active:not(:disabled), + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:active:not(:disabled), html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:active:not(:disabled) { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:active:not(:disabled) { filter: brightness(0.96); border: 1px solid var(--primary); border-bottom: 2px solid var(--primary); @@ -165,18 +168,18 @@ } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:focus-visible, + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:focus-visible, html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-primary"]:focus-visible { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:focus-visible { box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.22), 0 0 0 3px var(--ring) !important; } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"], + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"], html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"] { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"] { background-color: var(--secondary); color: var(--secondary-foreground); border: 1px solid color-mix(in srgb, var(--secondary) 18%, rgb(110 94 164)); @@ -187,22 +190,22 @@ /* * Bloom: cream secondary on lavender shell — rims from --background (lighter than cream’s violet lip). */ - html[data-theme="bloom"] [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"] { + html[data-theme="bloom"] :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"] { border: 1px solid color-mix(in srgb, var(--background) 88%, rgb(118 108 168)); border-bottom: 2px solid color-mix(in srgb, var(--background) 70%, rgb(105 96 152)); } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:hover:not(:disabled), + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:hover:not(:disabled), html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:hover:not(:disabled) { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:hover:not(:disabled) { filter: brightness(1.035); } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:active:not(:disabled), + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:active:not(:disabled), html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:active:not(:disabled) { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:active:not(:disabled) { filter: brightness(0.98); border: 1px solid var(--secondary); border-bottom: 2px solid var(--secondary); @@ -211,18 +214,18 @@ } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:focus-visible, + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:focus-visible, html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-secondary"]:focus-visible { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:focus-visible { box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.65), 0 0 0 3px var(--ring) !important; } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"], + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"], html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"] { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"] { background-color: var(--destructive); color: var(--destructive-foreground); border: 1px solid color-mix(in srgb, var(--destructive) 62%, rgb(92 26 26)); @@ -231,16 +234,16 @@ } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:hover:not(:disabled), + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:hover:not(:disabled), html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:hover:not(:disabled) { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:hover:not(:disabled) { filter: brightness(1.04); } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:active:not(:disabled), + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:active:not(:disabled), html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:active:not(:disabled) { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:active:not(:disabled) { filter: brightness(0.96); border: 1px solid var(--destructive); border-bottom: 2px solid var(--destructive); @@ -249,16 +252,16 @@ } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:focus-visible, + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:focus-visible, html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-destructive"]:focus-visible { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:focus-visible { box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.2), 0 0 0 3px color-mix(in srgb, var(--destructive) 42%, transparent) !important; } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"] { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"] { background-color: var(--card); color: var(--card-foreground); border: 1px solid rgb(203 200 225 / 0.48); @@ -268,7 +271,7 @@ /* Dark: subtler rims so outline doesn’t read as a bright halo on near-black UI. */ html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"] { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"] { background-color: var(--card); color: var(--card-foreground); border: 1px solid rgb(58 60 72 / 0.55); @@ -277,7 +280,7 @@ } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:hover:not( + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:hover:not( :disabled ) { border-color: rgb(185 180 218 / 0.42); @@ -287,7 +290,7 @@ } html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:hover:not( + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:hover:not( :disabled ) { border-color: rgb(78 80 94 / 0.5); @@ -297,11 +300,11 @@ } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:active:not( + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:active:not( :disabled ), html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:active:not( + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:active:not( :disabled ) { border: 1px solid var(--card); @@ -312,14 +315,14 @@ } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:focus-visible { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:focus-visible { box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.9), 0 0 0 3px var(--ring) !important; } html[data-theme="deep-dark"] - [data-slot="button"][class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:focus-visible { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:focus-visible { box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.05), 0 0 0 3px var(--ring) !important; @@ -330,9 +333,9 @@ * Invisible border at rest matches outline lip widths so chrome does not shift layout. */ :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"], + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"], html[data-theme="deep-dark"] - [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"] { + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"] { background-image: none; border: 1px solid transparent; border-bottom: 2px solid transparent; @@ -346,7 +349,7 @@ } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:hover:not( + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:hover:not( :disabled ) { background-color: var(--card); @@ -358,7 +361,7 @@ } html[data-theme="deep-dark"] - [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:hover:not( + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:hover:not( :disabled ) { background-color: var(--card); @@ -370,11 +373,11 @@ } :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:active:not( + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:active:not( :disabled ), html[data-theme="deep-dark"] - [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:active:not( + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:active:not( :disabled ) { border: 1px solid var(--card); @@ -388,7 +391,7 @@ /* Match outline tactile: focus-visible adds ring atop existing rim (outline default already painted). */ :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:focus-visible:not( + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:focus-visible:not( :disabled ) { box-shadow: @@ -397,7 +400,7 @@ } html[data-theme="deep-dark"] - [data-slot="button"]:not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:focus-visible:not( + :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:focus-visible:not( :disabled ) { box-shadow: diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 14a784f3..c2c03fd3 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -24,7 +24,14 @@ export { export { WithGuard, type WithGuardProps } from "./components/with-guard"; export { useAppShell, useAppShellConfig, useAppShellData } from "./contexts/appshell-context"; -export { useTheme, type ResolvedTheme, type Theme } from "./contexts/theme-context"; +export { + useTheme, + THEME_OPTIONS, + type ResolvedTheme, + type Theme, + type ThemeOption, +} from "./contexts/theme-context"; +export { ThemeSwitcher } from "./components/theme-switcher"; export { type I18nLabels, defineI18nLabels } from "./hooks/i18n"; export { AuthProvider, From 16468c3174cc2fbd8a383b37c61b927a3608404a Mon Sep 17 00:00:00 2001 From: itsprade Date: Wed, 29 Apr 2026 16:11:00 +0530 Subject: [PATCH 06/20] chore: align README, CLAUDE, Next example configs with main After rebase onto latest main, restore dev/docs and nextjs-app local config to match origin/main so theme work stays separate from dev ergonomics (turbopack root, extra scripts). Made-with: Cursor --- CLAUDE.md | 2 +- README.md | 4 +--- examples/nextjs-app/next.config.ts | 10 +--------- examples/nextjs-app/package.json | 1 - 4 files changed, 3 insertions(+), 14 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 7955204a..0c6695e6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -55,7 +55,7 @@ Tailor Platform AppShell - A React-based framework for building ERP applications # Install dependencies pnpm install -# Start Next.js example (localhost:3000). Use `pnpm dev:examples` only if you need every example dev server. +# Start dev server (opens localhost:3000 with example app) pnpm dev ``` diff --git a/README.md b/README.md index a81f3f1b..01b8bfc2 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,7 @@ pnpm install ### Commands ```bash -pnpm dev # Next.js example only (localhost:3000) — recommended default -pnpm dev:examples # All examples in parallel (Next + Vite + app-module watch; heavy) -pnpm dev:vite # Vite example only +pnpm dev # Start all packages in development mode with hot reloading pnpm build # Build all packages for production pnpm type-check # Run type checking across all packages ``` diff --git a/examples/nextjs-app/next.config.ts b/examples/nextjs-app/next.config.ts index 3e263b8c..e9ffa308 100644 --- a/examples/nextjs-app/next.config.ts +++ b/examples/nextjs-app/next.config.ts @@ -1,15 +1,7 @@ -import path from "node:path"; import type { NextConfig } from "next"; -const monorepoRoot = path.join(__dirname, "..", ".."); - const nextConfig: NextConfig = { - turbopack: { - root: monorepoRoot, - }, - experimental: { - turbopackMemoryLimit: 1536 * 1024 * 1024, - }, + /* config options here */ }; export default nextConfig; diff --git a/examples/nextjs-app/package.json b/examples/nextjs-app/package.json index 558dec1f..c4370552 100644 --- a/examples/nextjs-app/package.json +++ b/examples/nextjs-app/package.json @@ -3,7 +3,6 @@ "private": true, "scripts": { "dev": "next dev --turbopack", - "dev:webpack": "next dev", "build": "next build", "start": "next start", "lint": "oxlint -c .oxlintrc.jsonc", From cefe8c05bf76a2ac77853f891d1a32be59990e39 Mon Sep 17 00:00:00 2001 From: itsprade Date: Wed, 29 Apr 2026 16:11:25 +0530 Subject: [PATCH 07/20] test: refresh menu and table snapshots after rebase onto main Align snapshot output with upstream DataTable/menu DOM after merging main. Made-with: Cursor --- .../src__components__menu.test.tsx.snap | 79 +++++++++++++++++-- .../src__components__table.test.tsx.snap | 10 +-- 2 files changed, 77 insertions(+), 12 deletions(-) diff --git a/packages/core/__snapshots__/src__components__menu.test.tsx.snap b/packages/core/__snapshots__/src__components__menu.test.tsx.snap index 14ba0945..96c9180d 100644 --- a/packages/core/__snapshots__/src__components__menu.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__menu.test.tsx.snap @@ -1,15 +1,80 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Menu > snapshots > closed menu (trigger only) 1`] = `""`; +exports[`Menu > snapshots > closed menu (trigger only) 1`] = `""`; -exports[`Menu > snapshots > open menu with items 1`] = `"
"`; +exports[`Menu > snapshots > open menu with items 1`] = ` +"
" +`; -exports[`Menu > snapshots > with checkbox items 1`] = `"
"`; +exports[`Menu > snapshots > with checkbox items 1`] = ` +"
" +`; -exports[`Menu > snapshots > with disabled item 1`] = `"
"`; +exports[`Menu > snapshots > with disabled item 1`] = ` +"
" +`; -exports[`Menu > snapshots > with groups and group labels 1`] = `"
"`; +exports[`Menu > snapshots > with groups and group labels 1`] = ` +"
" +`; -exports[`Menu > snapshots > with radio group 1`] = `"
"`; +exports[`Menu > snapshots > with radio group 1`] = ` +"
" +`; -exports[`Menu > snapshots > with submenu 1`] = `""`; +exports[`Menu > snapshots > with submenu 1`] = `""`; diff --git a/packages/core/__snapshots__/src__components__table.test.tsx.snap b/packages/core/__snapshots__/src__components__table.test.tsx.snap index abb364ae..857c1b90 100644 --- a/packages/core/__snapshots__/src__components__table.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__table.test.tsx.snap @@ -1,11 +1,11 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Table > snapshots > basic table with header and body 1`] = `"
NameStatus
Item 1Active
"`; +exports[`Table > snapshots > basic table with header and body 1`] = `"
NameStatus
Item 1Active
"`; -exports[`Table > snapshots > empty table 1`] = `"
NameStatus
"`; +exports[`Table > snapshots > empty table 1`] = `"
NameStatus
"`; -exports[`Table > snapshots > table with caption 1`] = `"
A list of items
Name
Item
"`; +exports[`Table > snapshots > table with caption 1`] = `"
A list of items
Name
Item
"`; -exports[`Table > snapshots > table with containerClassName 1`] = `"
Name
Item
"`; +exports[`Table > snapshots > table with containerClassName 1`] = `"
Name
Item
"`; -exports[`Table > snapshots > table with footer 1`] = `"
ProductPrice
Widget$10
Total$10
"`; +exports[`Table > snapshots > table with footer 1`] = `"
ProductPrice
Widget$10
Total$10
"`; From 3bf11a4bd43742e21dfc77b80d8a9ec2428c4820 Mon Sep 17 00:00:00 2001 From: itsprade Date: Wed, 13 May 2026 21:47:05 +0530 Subject: [PATCH 08/20] refactor(themes): drop deep-dark, default to bloom, flatten button + sidebar chrome - Remove deep-dark palette + types + switcher entry + globals selectors; dark covers the same need. - Default theme now bloom (existing localStorage choices preserved); legacy tailor-dark id remaps to dark. - Strip tactile button overrides; cream/bloom/dark buttons inherit default shadcn Button styling. - Drop sidebar right-edge divider (border-r/border-l and inset-variant border-x). - Dark --sidebar matches --background; sidebar blends with app surface. - Unify --destructive at #dc2626 across light/cream/bloom for brand-consistent red. - Neutral badge uses Tailwind neutral palette so lavender --secondary doesn't bleed in. - Outline button transparent on cream/bloom only (rule sits in @layer utilities to beat Tailwind's astw:bg-background which also lives in utilities). - Secondary button hover now brightness-based (visible regardless of token value). Co-Authored-By: Claude Opus 4.7 --- docs/api/use-theme.md | 15 +- docs/concepts/styling-theming.md | 3 +- .../src__components__button.test.tsx.snap | 2 +- packages/core/src/assets/theme.css | 67 +--- packages/core/src/components/appshell.tsx | 8 +- packages/core/src/components/badge.tsx | 2 +- packages/core/src/components/button.tsx | 2 +- packages/core/src/components/sidebar.tsx | 6 +- .../core/src/components/theme-switcher.tsx | 2 - packages/core/src/contexts/theme-context.tsx | 30 +- packages/core/src/globals.css | 302 +----------------- 11 files changed, 45 insertions(+), 394 deletions(-) diff --git a/docs/api/use-theme.md b/docs/api/use-theme.md index 76f0c0a4..4a68dc19 100644 --- a/docs/api/use-theme.md +++ b/docs/api/use-theme.md @@ -12,9 +12,9 @@ React hook to access and control the current appearance theme. Exported types: ```typescript -export type Theme = "light" | "dark" | "deep-dark" | "cream" | "bloom" | "system"; +export type Theme = "light" | "dark" | "cream" | "bloom" | "system"; -export type ResolvedTheme = "light" | "dark" | "deep-dark" | "cream" | "bloom"; +export type ResolvedTheme = "light" | "dark" | "cream" | "bloom"; export type ThemeOption = { readonly value: Theme; readonly label: string }; @@ -37,12 +37,12 @@ const useTheme: () => { ### `theme` - **Type:** `Theme` -- **Description:** Stored theme preference. **`system`** means “follow OS light/dark” for the **default** light/dark palettes only (not cream, bloom, or deep-dark). +- **Description:** Stored theme preference. **`system`** means “follow OS light/dark” for the **default** light/dark palettes only (not cream or bloom). ### `resolvedTheme` - **Type:** `ResolvedTheme` -- **Description:** Concrete palette after resolving **`system`** to **`light`** or **`dark`**. **`cream`**, **`bloom`**, and **`deep-dark`** are never produced by **`system`**; pick them explicitly with **`setTheme`**. +- **Description:** Concrete palette after resolving **`system`** to **`light`** or **`dark`**. **`cream`** and **`bloom`** are never produced by **`system`**; pick them explicitly with **`setTheme`**. When **`resolvedTheme`** changes, **`document.documentElement`** gets **`data-theme`** set to this value and a **`light`** / **`dark`** class for Tailwind **`dark`** variant compatibility. @@ -51,7 +51,7 @@ When **`resolvedTheme`** changes, **`document.documentElement`** gets **`data-th - **Type:** `(theme: Theme) => void` - **Description:** Set the theme. Persisted to **`localStorage`** (key **`appshell-ui-theme`** when using AppShell’s built-in provider). -Previously saved ids **`tailor-light`**, **`tailor-bloom`**, **`tailor-dark`** are mapped on read to **`cream`**, **`bloom`**, **`deep-dark`** (see **`LEGACY_THEME_IDS`** in **`theme-context.tsx`**). +Previously saved ids **`tailor-light`**, **`tailor-bloom`**, **`tailor-dark`** are mapped on read to **`cream`**, **`bloom`**, **`dark`** (see **`LEGACY_THEME_IDS`** in **`theme-context.tsx`**). ## Usage @@ -114,13 +114,12 @@ function CustomThemeList() { ### Logo or assets by lightness -Use **`resolvedTheme`** and treat **`light`**, **`cream`**, and **`bloom`** like “light” palettes and **`dark`** and **`deep-dark`** like “dark” for monochrome assets: +Use **`resolvedTheme`** and treat **`light`**, **`cream`**, and **`bloom`** like “light” palettes and **`dark`** like “dark” for monochrome assets: ```typescript function Logo() { const { resolvedTheme } = useTheme(); - const darkish = - resolvedTheme === "dark" || resolvedTheme === "deep-dark"; + const darkish = resolvedTheme === "dark"; return Logo; } diff --git a/docs/concepts/styling-theming.md b/docs/concepts/styling-theming.md index 23bd29fd..9db638ae 100644 --- a/docs/concepts/styling-theming.md +++ b/docs/concepts/styling-theming.md @@ -36,9 +36,8 @@ AppShell ships **five** named semantic palettes controlled by **`data-theme`** o | `dark` | Default neutral dark | | `cream` | Tailor brand — cream shell, violet accents | | `bloom` | Lavender shell (**Bloom**) and cream accents | -| `deep-dark` | Tailor brand — near-black tuning surface | -**`system`** resolves to **`light`** or **`dark`** only — not **`cream`**, **`bloom`**, or **`deep-dark`**. Set those with **`setTheme`** or **`AppShell`** **`defaultTheme`**. +**`system`** resolves to **`light`** or **`dark`** only — not **`cream`** or **`bloom`**. Set those with **`setTheme`** or **`AppShell`** **`defaultTheme`**. Semantic tokens (**`--background`**, **`--primary`**, **`--border`**, sidebar tokens, **`--semantic-shadow-*`**, statuses, **`--radius`**, …) live in **`theme.css`**; override there or in host CSS keyed off **`html[data-theme='…']`**. diff --git a/packages/core/__snapshots__/src__components__button.test.tsx.snap b/packages/core/__snapshots__/src__components__button.test.tsx.snap index 2ab69968..4aa5dc49 100644 --- a/packages/core/__snapshots__/src__components__button.test.tsx.snap +++ b/packages/core/__snapshots__/src__components__button.test.tsx.snap @@ -18,7 +18,7 @@ exports[`Button > snapshots > link variant 1`] = `""`; -exports[`Button > snapshots > secondary variant 1`] = `""`; +exports[`Button > snapshots > secondary variant 1`] = `""`; exports[`Button > snapshots > small size 1`] = `""`; diff --git a/packages/core/src/assets/theme.css b/packages/core/src/assets/theme.css index 43a20eb6..2601670f 100644 --- a/packages/core/src/assets/theme.css +++ b/packages/core/src/assets/theme.css @@ -73,7 +73,8 @@ --chart-3: rgba(245, 158, 11, 1); --chart-4: rgba(168, 85, 247, 1); --chart-5: rgba(244, 63, 94, 1); - --sidebar: rgba(23, 23, 23, 1); + /* Match --background so sidebar blends with the app surface. */ + --sidebar: rgba(10, 10, 10, 1); --sidebar-foreground: rgba(250, 250, 250, 1); --sidebar-primary: rgba(29, 78, 216, 1); --sidebar-primary-foreground: rgba(250, 250, 250, 1); @@ -113,7 +114,8 @@ html[data-theme="cream"] { --muted-foreground: rgba(16, 18, 43, 0.72); --accent: rgba(226, 212, 254, 1); --accent-foreground: rgba(1, 55, 66, 1); - --destructive: rgba(185, 28, 28, 1); + /* Destructive matches default light theme so the brand red stays consistent across light/cream/bloom. */ + --destructive: rgba(220, 38, 38, 1); --destructive-foreground: rgba(254, 242, 242, 1); --border: rgba(0, 0, 0, 0.08); --input: rgba(0, 0, 0, 0.08); @@ -166,9 +168,9 @@ html[data-theme="bloom"] { --muted-foreground: rgba(16, 18, 43, 0.72); --accent: rgba(248, 243, 228, 1); --accent-foreground: rgba(16, 18, 43, 1); - /* Softer reds than cream — less harsh against lavender gradient / cream fills */ - --destructive: rgba(176, 45, 64, 1); - --destructive-foreground: rgba(255, 251, 252, 1); + /* Destructive matches default light theme so the brand red stays consistent across light/cream/bloom. */ + --destructive: rgba(220, 38, 38, 1); + --destructive-foreground: rgba(254, 242, 242, 1); --border: rgba(0, 0, 0, 0.08); --input: rgba(0, 0, 0, 0.08); --ring: rgba(83, 90, 232, 0.45); @@ -199,61 +201,6 @@ html[data-theme="bloom"] { --semantic-shadow-lg: 0 10px 15px -3px rgb(16 18 43 / 0.12), 0 4px 6px -4px rgb(83 90 232 / 0.1); } -/** - * Tailor brand — dark palette (`deep-dark`): near-black shell; same primaries / secondaries as cream. - */ -html[data-theme="deep-dark"] { - color-scheme: dark; - --background: rgba(10, 10, 11, 1); - --foreground: rgba(237, 238, 242, 1); - --card: rgba(18, 18, 21, 1); - --card-foreground: rgba(237, 238, 242, 1); - --popover: rgba(22, 22, 26, 1); - --popover-foreground: rgba(237, 238, 242, 1); - /* Match cream — Primary #535AE8 */ - --primary: rgba(83, 90, 232, 1); - --primary-foreground: rgba(255, 255, 255, 1); - /* Light violet + dark green text (same pairing as cream) */ - --secondary: rgba(226, 212, 254, 1); - --secondary-foreground: rgba(1, 55, 66, 1); - --muted: rgba(28, 28, 34, 1); - --muted-foreground: rgba(163, 167, 180, 1); - --accent: rgba(226, 212, 254, 1); - --accent-foreground: rgba(1, 55, 66, 1); - --destructive: rgba(185, 28, 28, 1); - --destructive-foreground: rgba(254, 242, 242, 1); - --border: rgba(255, 255, 255, 0.1); - --input: rgba(255, 255, 255, 0.12); - --ring: rgba(83, 90, 232, 0.45); - --chart-1: rgba(83, 90, 232, 1); - --chart-2: rgba(0, 151, 156, 1); - --chart-3: rgba(1, 55, 66, 1); - --chart-4: rgba(110, 95, 195, 1); - --chart-5: rgba(217, 119, 6, 1); - --radius: 1rem; - --sidebar: rgba(10, 10, 11, 1); - --sidebar-foreground: rgba(237, 238, 242, 1); - --sidebar-primary: rgba(83, 90, 232, 1); - --sidebar-primary-foreground: rgba(255, 255, 255, 1); - /* - * Hover + current row: dark elevated chip on near-black sidebar — light label. - * (Lavender wash reads as a “light tab” here; a muted lift matches dark UI better.) - */ - --sidebar-accent: rgba(42, 43, 54, 1); - --sidebar-accent-foreground: rgba(238, 239, 246, 1); - --sidebar-border: rgba(255, 255, 255, 0.1); - --sidebar-ring: rgba(83, 90, 232, 0.45); - --status-default: rgba(144, 150, 168, 0.88); - --status-neutral: #00979c; - --status-completed: #00979c; - --status-attention: #d97706; - --status-danger: #dc2626; - --semantic-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.42); - --semantic-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.42), 0 1px 2px -1px rgb(0 0 0 / 0.36); - --semantic-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.46), 0 2px 4px -2px rgb(0 0 0 / 0.36); - --semantic-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.54), 0 4px 6px -4px rgb(83 90 232 / 0.12); -} - @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); diff --git a/packages/core/src/components/appshell.tsx b/packages/core/src/components/appshell.tsx index 4b96c8b8..efdbcbd2 100644 --- a/packages/core/src/components/appshell.tsx +++ b/packages/core/src/components/appshell.tsx @@ -182,10 +182,10 @@ type SharedAppShellProps = React.PropsWithChildren<{ * Initial theme before any value is loaded from localStorage (`appshell-ui-theme`). * Does not replace a stored preference. * - * Named palettes **`cream`**, **`bloom`**, **`deep-dark`**, plus default **`light`** / **`dark`**, in addition to - * default light/dark and `system` (OS preference maps to **default** light or dark only). + * Named palettes **`cream`**, **`bloom`**, plus default **`light`** / **`dark`**, in addition to + * `system` (OS preference maps to **default** light or dark only — not cream or bloom). * - * @default "system" + * @default "bloom" */ defaultTheme?: Theme; }>; @@ -332,7 +332,7 @@ export const AppShell = (props: AppShellProps) => { diff --git a/packages/core/src/components/badge.tsx b/packages/core/src/components/badge.tsx index 03d84fe8..34dee25d 100644 --- a/packages/core/src/components/badge.tsx +++ b/packages/core/src/components/badge.tsx @@ -16,7 +16,7 @@ const badgeVariants = cva( error: "astw:border-transparent astw:bg-destructive astw:text-destructive-foreground astw:hover:bg-destructive/80", neutral: - "astw:border-transparent astw:bg-secondary astw:text-secondary-foreground astw:hover:bg-secondary/80", + "astw:border-transparent astw:bg-neutral-200 astw:text-neutral-700 astw:hover:bg-neutral-300 astw:dark:bg-neutral-800 astw:dark:text-neutral-200 astw:dark:hover:bg-neutral-700", info: "astw:border-transparent astw:bg-blue-500 astw:text-white astw:hover:bg-blue-600", "subtle-success": "astw:border-transparent astw:bg-green-500/10 astw:text-green-700 astw:hover:bg-green-500/20 astw:dark:text-green-500", diff --git a/packages/core/src/components/button.tsx b/packages/core/src/components/button.tsx index f237cf91..fadd977b 100644 --- a/packages/core/src/components/button.tsx +++ b/packages/core/src/components/button.tsx @@ -16,7 +16,7 @@ const buttonVariants = cva( outline: "astw:border astw:bg-background astw:shadow-xs astw:hover:bg-accent astw:hover:text-accent-foreground astw:dark:bg-input/30 astw:dark:border-input astw:dark:hover:bg-input/50 astw:dark:hover:text-foreground", secondary: - "astw:bg-secondary astw:text-secondary-foreground astw:shadow-xs astw:hover:bg-secondary/80", + "astw:bg-secondary astw:text-secondary-foreground astw:shadow-xs astw:hover:brightness-95 astw:dark:hover:brightness-110", ghost: "astw:hover:bg-accent astw:hover:text-accent-foreground astw:dark:hover:bg-accent/50 astw:dark:hover:text-foreground", link: "astw:text-primary astw:underline-offset-4 astw:hover:underline", diff --git a/packages/core/src/components/sidebar.tsx b/packages/core/src/components/sidebar.tsx index c7eb7ed8..4fdbe3e3 100644 --- a/packages/core/src/components/sidebar.tsx +++ b/packages/core/src/components/sidebar.tsx @@ -249,8 +249,7 @@ function Sidebar({ side === "left" ? "astw:left-0" : "astw:right-0", variant === "floating" || variant === "inset" ? "astw:p-2 astw:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" - : "astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon) astw:group-data-[side=left]:border-r astw:group-data-[side=right]:border-l", - variant === "inset" && "astw:border-x astw:border-x-border", + : "astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon)", )} >
= { light: "Light", dark: "Dark", - "deep-dark": "Deep dark", cream: "Cream", bloom: "Bloom", }; @@ -19,7 +18,6 @@ const RESOLVED_THEME_SHORT: Record = { const THEME_PREVIEW: Record = { light: { a: "#ffffff", b: "#d4d4d8" }, dark: { a: "#3f3f46", b: "#d4d4d8" }, - "deep-dark": { a: "#09090b", b: "#a1a1aa" }, cream: { a: "#f8f3e4", b: "#e2d4fe" }, bloom: { a: "#535ae8", b: "#f8f3e4" }, system: { a: "#52525b", b: "#7c73e6" }, diff --git a/packages/core/src/contexts/theme-context.tsx b/packages/core/src/contexts/theme-context.tsx index 6d06d39c..6746cf58 100644 --- a/packages/core/src/contexts/theme-context.tsx +++ b/packages/core/src/contexts/theme-context.tsx @@ -1,19 +1,12 @@ import { createContext, useContext, useEffect, useMemo, useState } from "react"; -/** User-selectable theme. `system` follows OS light/dark (default palettes only — not cream/bloom/deep-dark). */ -export type Theme = "light" | "dark" | "deep-dark" | "cream" | "bloom" | "system"; +/** User-selectable theme. `system` follows OS light/dark (default palettes only — not cream/bloom). */ +export type Theme = "light" | "dark" | "cream" | "bloom" | "system"; /** Resolved paint after applying `system`. */ -export type ResolvedTheme = "light" | "dark" | "deep-dark" | "cream" | "bloom"; - -const ALL_THEMES: readonly Theme[] = [ - "light", - "dark", - "deep-dark", - "cream", - "bloom", - "system", -] as const; +export type ResolvedTheme = "light" | "dark" | "cream" | "bloom"; + +const ALL_THEMES: readonly Theme[] = ["light", "dark", "cream", "bloom", "system"] as const; /** Dropdown / switcher entries: order matches selectable themes; labels are user-facing. */ export type ThemeOption = { readonly value: Theme; readonly label: string }; @@ -21,7 +14,6 @@ export type ThemeOption = { readonly value: Theme; readonly label: string }; export const THEME_OPTIONS: readonly ThemeOption[] = [ { value: "light", label: "Light" }, { value: "dark", label: "Dark" }, - { value: "deep-dark", label: "Deep dark" }, { value: "cream", label: "Cream" }, { value: "bloom", label: "Bloom" }, { value: "system", label: "System" }, @@ -31,7 +23,7 @@ export const THEME_OPTIONS: readonly ThemeOption[] = [ const LEGACY_THEME_IDS: Partial> = { "tailor-light": "cream", "tailor-bloom": "bloom", - "tailor-dark": "deep-dark", + "tailor-dark": "dark", }; function parseStoredTheme(value: string | null, fallback: Theme): Theme { @@ -78,8 +70,8 @@ type ThemeProviderState = { }; const initialState: ThemeProviderState = { - resolvedTheme: "light", - theme: "system", + resolvedTheme: "bloom", + theme: "bloom", setTheme: () => null, }; @@ -94,7 +86,7 @@ function resolveTheme(theme: Theme): ResolvedTheme { export function ThemeProvider({ children, storageKey, - defaultTheme = "system", + defaultTheme = "bloom", ...props }: ThemeProviderProps) { const [theme, setThemeState] = useState(() => readStoredTheme(storageKey, defaultTheme)); @@ -104,9 +96,7 @@ export function ThemeProvider({ useEffect(() => { const root = window.document.documentElement; root.classList.remove("light", "dark"); - root.classList.add( - resolvedTheme === "dark" || resolvedTheme === "deep-dark" ? "dark" : "light", - ); + root.classList.add(resolvedTheme === "dark" ? "dark" : "light"); root.dataset.theme = resolvedTheme; }, [resolvedTheme]); diff --git a/packages/core/src/globals.css b/packages/core/src/globals.css index 13e3bdfd..9760d2fa 100644 --- a/packages/core/src/globals.css +++ b/packages/core/src/globals.css @@ -69,30 +69,27 @@ background-color: transparent !important; } + /* - Tailor light / dark: Geist Sans + Apple-style corners (squircle) when the engine supports corner-shape (Chromium). + Cream / Bloom: Geist Sans + Apple-style corners (squircle) when the engine supports corner-shape (Chromium). Circles (.rounded-full) stay round; browsers without support keep standard border-radius. */ - :is(html[data-theme="cream"], html[data-theme="bloom"]) body, - html[data-theme="deep-dark"] body { + :is(html[data-theme="cream"], html[data-theme="bloom"]) body { font-family: "Geist Sans", ui-sans-serif, system-ui, sans-serif; } - :is(html[data-theme="cream"], html[data-theme="bloom"]) :where(h1, h2, h3, h4, h5, h6), - html[data-theme="deep-dark"] :where(h1, h2, h3, h4, h5, h6) { + :is(html[data-theme="cream"], html[data-theme="bloom"]) :where(h1, h2, h3, h4, h5, h6) { letter-spacing: -0.03em; line-height: 1.2; font-family: "Geist Sans", ui-sans-serif, system-ui, sans-serif; } @supports (corner-shape: squircle) { - :is(html[data-theme="cream"], html[data-theme="bloom"]) *, - html[data-theme="deep-dark"] * { + :is(html[data-theme="cream"], html[data-theme="bloom"]) * { corner-shape: squircle; } /* Round radii (.rounded-full) stay circular squircles, not elongated “capsules” */ - :is(html[data-theme="cream"], html[data-theme="bloom"]) [class*="rounded-full"], - html[data-theme="deep-dark"] [class*="rounded-full"] { + :is(html[data-theme="cream"], html[data-theme="bloom"]) [class*="rounded-full"] { corner-shape: round; } } @@ -121,290 +118,13 @@ } /* - * Cream / Bloom / deep-dark — tactile buttons: solid fill + 2px darker bottom lip (raised); - * pressed: borders match fill (lip vanishes visually, no jump) + inset shade + slight translateY on label. - * These themes use the same brand tokens and rim recipes (theme.css). - * - * `}>` and `}>` keep - * `data-slot="dialog-trigger"` / `data-slot="dialog-close"` on the merged control; targets include those plus `button`. + * Theme-specific overrides that must beat Tailwind utility classes (which sit in `@layer utilities`). + * Keep this block in `@layer utilities` so it loses to no Tailwind utility in earlier layers but wins on specificity. */ @layer utilities { - :is(html[data-theme="cream"], html[data-theme="bloom"]) :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"], - html[data-theme="deep-dark"] :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"] { - background-image: none; - transition: - filter 0.12s ease, - border-color 0.12s ease, - box-shadow 0.12s ease, - transform 0.08s ease; - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"], - html[data-theme="deep-dark"] :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"] { - background-color: var(--primary); - color: var(--primary-foreground); - border: 1px solid color-mix(in srgb, #10122b 38%, rgb(106 114 226)); - border-bottom: 2px solid color-mix(in srgb, #10122b 58%, rgb(73 76 205)); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.22); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:hover:not(:disabled), - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:hover:not(:disabled) { - filter: brightness(1.05); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:active:not(:disabled), - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:active:not(:disabled) { - filter: brightness(0.96); - border: 1px solid var(--primary); - border-bottom: 2px solid var(--primary); - box-shadow: inset 0 3px 8px rgb(8 14 82 / 0.36); - transform: translateY(2px); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:focus-visible, - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-primary"]:focus-visible { - box-shadow: - inset 0 1px 0 rgb(255 255 255 / 0.22), - 0 0 0 3px var(--ring) !important; - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"], - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"] { - background-color: var(--secondary); - color: var(--secondary-foreground); - border: 1px solid color-mix(in srgb, var(--secondary) 18%, rgb(110 94 164)); - border-bottom: 2px solid color-mix(in srgb, rgb(226 212 254) 30%, rgb(98 74 154)); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.65); - } - - /* - * Bloom: cream secondary on lavender shell — rims from --background (lighter than cream’s violet lip). - */ - html[data-theme="bloom"] :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"] { - border: 1px solid color-mix(in srgb, var(--background) 88%, rgb(118 108 168)); - border-bottom: 2px solid color-mix(in srgb, var(--background) 70%, rgb(105 96 152)); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:hover:not(:disabled), - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:hover:not(:disabled) { - filter: brightness(1.035); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:active:not(:disabled), - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:active:not(:disabled) { - filter: brightness(0.98); - border: 1px solid var(--secondary); - border-bottom: 2px solid var(--secondary); - box-shadow: inset 0 3px 8px rgb(50 42 118 / 0.22); - transform: translateY(2px); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:focus-visible, - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-secondary"]:focus-visible { - box-shadow: - inset 0 1px 0 rgb(255 255 255 / 0.65), - 0 0 0 3px var(--ring) !important; - } - + /* Outline button on cream/bloom: transparent fill so the shell gradient shows through; keep border. */ :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"], - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"] { - background-color: var(--destructive); - color: var(--destructive-foreground); - border: 1px solid color-mix(in srgb, var(--destructive) 62%, rgb(92 26 26)); - border-bottom: 2px solid color-mix(in srgb, var(--destructive) 52%, rgb(76 22 26)); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.2); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:hover:not(:disabled), - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:hover:not(:disabled) { - filter: brightness(1.04); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:active:not(:disabled), - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:active:not(:disabled) { - filter: brightness(0.96); - border: 1px solid var(--destructive); - border-bottom: 2px solid var(--destructive); - box-shadow: inset 0 4px 10px rgb(70 14 14 / 0.45); - transform: translateY(2px); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:focus-visible, - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-destructive"]:focus-visible { - box-shadow: - inset 0 1px 0 rgb(255 255 255 / 0.2), - 0 0 0 3px color-mix(in srgb, var(--destructive) 42%, transparent) !important; - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"] { - background-color: var(--card); - color: var(--card-foreground); - border: 1px solid rgb(203 200 225 / 0.48); - border-bottom: 2px solid rgb(154 158 184 / 0.62); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.9); - } - - /* Dark: subtler rims so outline doesn’t read as a bright halo on near-black UI. */ - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"] { - background-color: var(--card); - color: var(--card-foreground); - border: 1px solid rgb(58 60 72 / 0.55); - border-bottom: 2px solid rgb(34 36 46 / 0.82); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.04); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:hover:not( - :disabled - ) { - border-color: rgb(185 180 218 / 0.42); - border-bottom-color: rgb(135 142 188 / 0.58); - filter: brightness(1.015); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.98); - } - - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:hover:not( - :disabled - ) { - border-color: rgb(78 80 94 / 0.5); - border-bottom-color: rgb(52 54 68 / 0.85); - filter: brightness(1.04); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.06); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:active:not( - :disabled - ), - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:active:not( - :disabled - ) { - border: 1px solid var(--card); - border-bottom: 2px solid var(--card); - box-shadow: inset 0 3px 8px rgb(16 18 43 / 0.12); - filter: none; - transform: translateY(2px); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:focus-visible { - box-shadow: - inset 0 1px 0 rgb(255 255 255 / 0.9), - 0 0 0 3px var(--ring) !important; - } - - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"])[class*="shadow-xs"][class*="astw:bg-background"][class*="astw:border"]:focus-visible { - box-shadow: - inset 0 1px 0 rgb(255 255 255 / 0.05), - 0 0 0 3px var(--ring) !important; - } - - /* - * Ghost (no shadow-xs): hover / pressed / focus match tactile outline (card + rim), not secondary. - * Invisible border at rest matches outline lip widths so chrome does not shift layout. - */ - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"], - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"] { - background-image: none; - border: 1px solid transparent; - border-bottom: 2px solid transparent; - transition: - filter 0.12s ease, - border-color 0.12s ease, - box-shadow 0.12s ease, - transform 0.08s ease, - background-color 0.12s ease, - color 0.12s ease; - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:hover:not( - :disabled - ) { - background-color: var(--card); - color: var(--card-foreground); - border: 1px solid rgb(185 180 218 / 0.42); - border-bottom: 2px solid rgb(135 142 188 / 0.58); - filter: brightness(1.015); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.98); - } - - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:hover:not( - :disabled - ) { - background-color: var(--card); - color: var(--card-foreground); - border: 1px solid rgb(78 80 94 / 0.5); - border-bottom: 2px solid rgb(52 54 68 / 0.85); - filter: brightness(1.04); - box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.06); - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:active:not( - :disabled - ), - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:active:not( - :disabled - ) { - border: 1px solid var(--card); - border-bottom: 2px solid var(--card); - box-shadow: inset 0 3px 8px rgb(16 18 43 / 0.12); - filter: none; - transform: translateY(2px); - background-color: var(--card); - color: var(--card-foreground); - } - - /* Match outline tactile: focus-visible adds ring atop existing rim (outline default already painted). */ - :is(html[data-theme="cream"], html[data-theme="bloom"]) - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:focus-visible:not( - :disabled - ) { - box-shadow: - inset 0 1px 0 rgb(255 255 255 / 0.9), - 0 0 0 3px var(--ring) !important; - } - - html[data-theme="deep-dark"] - :is([data-slot="button"], [data-slot="dialog-close"], [data-slot="dialog-trigger"]):not([class*="shadow-xs"])[class*="astw:hover:bg-accent"]:focus-visible:not( - :disabled - ) { - box-shadow: - inset 0 1px 0 rgb(255 255 255 / 0.05), - 0 0 0 3px var(--ring) !important; + [data-slot="button"][class*="astw:bg-background"][class*="astw:border"] { + background-color: transparent; } } From a7f3b8308d4e5145383bb6271992d0ad17b218d1 Mon Sep 17 00:00:00 2001 From: itsprade Date: Fri, 15 May 2026 14:28:56 +0530 Subject: [PATCH 09/20] feat(themes): font axis, neutral cream foregrounds, refined cream/bloom shell - Font axis (Geist default, Inter): `useFont` hook + `data-font` attr, added to ThemeSwitcher as a second axis alongside the color palette. - Cream theme drops the dark-green text-on-violet pairing; secondary / accent / sidebar-accent foregrounds now use the same near-black as bloom. - Cream/Bloom shell gradient: multi-stop fade with pure white covering the bottom 30% for a softer, more blended feel. - Sidebar active item: hairline outline (`var(--border)`) + `--semantic-shadow-xs` drop so the selected row reads as elevated. Rule lives in `@layer utilities` so it wins against Tailwind's `outline-hidden` utility. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/api/use-theme.md | 46 +++++ docs/concepts/styling-theming.md | 11 ++ packages/core/src/assets/theme.css | 23 +-- packages/core/src/components/appshell.tsx | 12 +- packages/core/src/components/sidebar.tsx | 6 +- .../src/components/theme-switcher.test.tsx | 52 +++++- .../core/src/components/theme-switcher.tsx | 162 +++++++++++++----- packages/core/src/contexts/theme-context.tsx | 70 +++++++- packages/core/src/globals.css | 62 ++++++- packages/core/src/index.ts | 4 + 10 files changed, 370 insertions(+), 78 deletions(-) diff --git a/docs/api/use-theme.md b/docs/api/use-theme.md index 4a68dc19..3658217c 100644 --- a/docs/api/use-theme.md +++ b/docs/api/use-theme.md @@ -131,6 +131,52 @@ The built-in **`ThemeProvider`** (used inside **`AppShell`**) persists the **`th Use **`AppShell`**’s **`defaultTheme`** prop for the initial value when nothing is stored. +# useFont + +Sibling hook to **`useTheme`** that controls the **font axis**, independent of color theme. Any color theme works with either font; users pick them separately in **`ThemeSwitcher`**. + +## Signature + +```typescript +export type Font = "inter" | "geist"; + +export type FontOption = { readonly value: Font; readonly label: string }; + +export const FONT_OPTIONS: readonly FontOption[]; +``` + +```typescript +const useFont: () => { + font: Font; + setFont: (font: Font) => void; +}; +``` + +## Return value + +### `font` + +- **Type:** `Font` +- **Description:** Stored font preference. Applied to **``** as **`data-font`**, which the package CSS uses to set **`font-family`** on **`body`** and headings. + +### `setFont(font)` + +- **Type:** `(font: Font) => void` +- **Description:** Set the font. Persisted to **`localStorage`** (key **`appshell-ui-font`** when using AppShell’s built-in provider). + +## Usage + +```typescript +import { useFont } from "@tailor-platform/app-shell"; + +function UseInter() { + const { setFont } = useFont(); + return ; +} +``` + +Use **`AppShell`**’s **`defaultFont`** prop for the initial value when nothing is stored. Default is **`"geist"`**. + ## Related - [Styling & Theming](../concepts/styling-theming.md) diff --git a/docs/concepts/styling-theming.md b/docs/concepts/styling-theming.md index 9db638ae..8f702eba 100644 --- a/docs/concepts/styling-theming.md +++ b/docs/concepts/styling-theming.md @@ -41,6 +41,17 @@ AppShell ships **five** named semantic palettes controlled by **`data-theme`** o Semantic tokens (**`--background`**, **`--primary`**, **`--border`**, sidebar tokens, **`--semantic-shadow-*`**, statuses, **`--radius`**, …) live in **`theme.css`**; override there or in host CSS keyed off **`html[data-theme='…']`**. +### Font axis + +Font is an independent axis from color theme — any palette works with either face. + +| Font | When you'd pick it | +| ------- | -------------------------------------------------------- | +| `inter` | Neutral workhorse; matches most ERP / dashboard UIs | +| `geist` | Vercel-flavoured display sans; default for Tailor themes | + +Selected font is applied to **``** as **`data-font`**. CSS in **`globals.css`** sets **`font-family`** on **`body`** and headings off that attribute. Persisted to **`localStorage`** under **`appshell-ui-font`**; pick via **`setFont`** (see **`useFont`**) or **`AppShell`**'s **`defaultFont`** prop (default **`"geist"`**). + ## A note on AppShell component class names AppShell components use Tailwind utility classes for their styling. Tailwind classes are generated at build-time, so stylesheet for AppShell components is already built and is separate to the Tailwind stylesheet generated for your application. diff --git a/packages/core/src/assets/theme.css b/packages/core/src/assets/theme.css index 2601670f..4bf9563c 100644 --- a/packages/core/src/assets/theme.css +++ b/packages/core/src/assets/theme.css @@ -97,8 +97,9 @@ html[data-theme="cream"] { color-scheme: light; /* Off-white app shell; white cards for elevation */ --background: rgba(248, 243, 228, 1); - /* Bottom stop for fixed shell gradient (globals.css); same cream family, lighter toward white. */ - --shell-gradient-end: color-mix(in srgb, var(--background) 40%, rgb(255, 255, 255)); + /* Shell gradient stops (globals.css): light cream tint at top → white at bottom. */ + --shell-gradient-start: color-mix(in srgb, var(--background) 55%, rgb(255, 255, 255)); + --shell-gradient-end: rgb(255, 255, 255); --foreground: rgba(16, 18, 43, 1); --card: rgba(255, 255, 255, 1); --card-foreground: rgba(16, 18, 43, 1); @@ -106,14 +107,14 @@ html[data-theme="cream"] { --popover-foreground: rgba(16, 18, 43, 1); --primary: rgba(83, 90, 232, 1); --primary-foreground: rgba(255, 255, 255, 1); - /* Light violet surfaces; dark green text (brand text-on-violet pairing) */ + /* Light violet surfaces; near-black text (match bloom; drop the brand dark-green pairing). */ --secondary: rgba(226, 212, 254, 1); - --secondary-foreground: rgba(1, 55, 66, 1); + --secondary-foreground: rgba(16, 18, 43, 1); /* Row hovers / `bg-muted`: subtle neutral lift (same alpha family as `--border`), not a second brand tint. */ --muted: rgba(0, 0, 0, 0.08); --muted-foreground: rgba(16, 18, 43, 0.72); --accent: rgba(226, 212, 254, 1); - --accent-foreground: rgba(1, 55, 66, 1); + --accent-foreground: rgba(16, 18, 43, 1); /* Destructive matches default light theme so the brand red stays consistent across light/cream/bloom. */ --destructive: rgba(220, 38, 38, 1); --destructive-foreground: rgba(254, 242, 242, 1); @@ -132,7 +133,7 @@ html[data-theme="cream"] { --sidebar-primary: rgba(83, 90, 232, 1); --sidebar-primary-foreground: rgba(255, 255, 255, 1); --sidebar-accent: rgba(226, 212, 254, 1); - --sidebar-accent-foreground: rgba(1, 55, 66, 1); + --sidebar-accent-foreground: rgba(16, 18, 43, 1); --sidebar-border: rgba(0, 0, 0, 0.08); --sidebar-ring: rgba(83, 90, 232, 0.45); --status-default: rgba(16, 18, 43, 0.55); @@ -152,8 +153,9 @@ html[data-theme="cream"] { html[data-theme="bloom"] { color-scheme: light; --background: rgba(239, 232, 255, 1); - /* Bottom stop for shell gradient (globals.css); lavender family, lighter than top. */ - --shell-gradient-end: color-mix(in srgb, var(--background) 40%, rgb(255, 255, 255)); + /* Shell gradient stops (globals.css): light lavender tint at top → white at bottom. */ + --shell-gradient-start: color-mix(in srgb, var(--background) 55%, rgb(255, 255, 255)); + --shell-gradient-end: rgb(255, 255, 255); --foreground: rgba(16, 18, 43, 1); --card: rgba(255, 255, 255, 1); --card-foreground: rgba(16, 18, 43, 1); @@ -161,8 +163,9 @@ html[data-theme="bloom"] { --popover-foreground: rgba(16, 18, 43, 1); --primary: rgba(83, 90, 232, 1); --primary-foreground: rgba(255, 255, 255, 1); - --secondary: rgba(248, 243, 228, 1); - --secondary-foreground: rgba(16, 18, 43, 1); + /* Match light theme — neutral pale grey reads as a soft pill on the lavender shell. */ + --secondary: rgba(245, 245, 245, 1); + --secondary-foreground: rgba(23, 23, 23, 1); /* Row hovers / `bg-muted`: subtle neutral lift (same alpha family as `--border`). */ --muted: rgba(0, 0, 0, 0.08); --muted-foreground: rgba(16, 18, 43, 0.72); diff --git a/packages/core/src/components/appshell.tsx b/packages/core/src/components/appshell.tsx index efdbcbd2..d677a78e 100644 --- a/packages/core/src/components/appshell.tsx +++ b/packages/core/src/components/appshell.tsx @@ -17,7 +17,7 @@ import { type ContextData, } from "@/contexts/appshell-context"; import { RouterContainer } from "@/routing/router"; -import { ThemeProvider, type Theme } from "@/contexts/theme-context"; +import { ThemeProvider, type Theme, type Font } from "@/contexts/theme-context"; import { BreadcrumbOverrideProvider } from "@/contexts/breadcrumb-context"; import { CommandPaletteProvider, type SearchSource } from "@/contexts/command-palette-context"; import { BuiltInCommandPalette } from "@/components/command-palette"; @@ -188,6 +188,14 @@ type SharedAppShellProps = React.PropsWithChildren<{ * @default "bloom" */ defaultTheme?: Theme; + + /** + * Initial font axis before any value is loaded from localStorage (`appshell-ui-font`). + * Independent of `defaultTheme`; any color theme works with either font. + * + * @default "geist" + */ + defaultFont?: Font; }>; /** @@ -333,7 +341,9 @@ export const AppShell = (props: AppShellProps) => { {props.children} diff --git a/packages/core/src/components/sidebar.tsx b/packages/core/src/components/sidebar.tsx index 4fdbe3e3..c7eb7ed8 100644 --- a/packages/core/src/components/sidebar.tsx +++ b/packages/core/src/components/sidebar.tsx @@ -249,7 +249,8 @@ function Sidebar({ side === "left" ? "astw:left-0" : "astw:right-0", variant === "floating" || variant === "inset" ? "astw:p-2 astw:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" - : "astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon)", + : "astw:group-data-[collapsible=icon]:w-(--sidebar-width-icon) astw:group-data-[side=left]:border-r astw:group-data-[side=right]:border-l", + variant === "inset" && "astw:border-x astw:border-x-border", )} >
{ }); describe("ThemeSwitcher", () => { - it("opens a menu listing every theme option", async () => { + it("opens a menu listing every theme and font option", async () => { const user = userEvent.setup(); render( - + , ); - await user.click(screen.getByRole("button", { name: "Theme" })); + await user.click(screen.getByRole("button", { name: "Appearance" })); await waitFor(() => { - expect(screen.getAllByRole("menuitemradio").length).toBe(THEME_OPTIONS.length); + expect(screen.getAllByRole("menuitemradio").length).toBe( + THEME_OPTIONS.length + FONT_OPTIONS.length, + ); }); for (const opt of THEME_OPTIONS) { expect(screen.getByRole("menuitemradio", { name: opt.label })).toBeDefined(); } + for (const opt of FONT_OPTIONS) { + expect(screen.getByRole("menuitemradio", { name: opt.label })).toBeDefined(); + } }); it("exposes resolved palette on the trigger when system mode is selected", () => { render( - + , ); - const btn = screen.getByRole("button", { name: "Theme" }); + const btn = screen.getByRole("button", { name: "Appearance" }); expect(btn.getAttribute("title")).toMatch(/following system/i); expect(btn.getAttribute("title")).toMatch(/currently light|currently dark/i); }); @@ -80,12 +86,12 @@ describe("ThemeSwitcher", () => { const user = userEvent.setup(); render( - + , ); - await user.click(screen.getByRole("button", { name: "Theme" })); + await user.click(screen.getByRole("button", { name: "Appearance" })); await waitFor(() => { expect(screen.getByRole("menu")).toBeDefined(); @@ -98,4 +104,32 @@ describe("ThemeSwitcher", () => { }); expect(localStorage.getItem(storageKey)).toBe("bloom"); }); + + it("applies selected font when a font radio item is activated", async () => { + const user = userEvent.setup(); + + render( + + + , + ); + + await user.click(screen.getByRole("button", { name: "Appearance" })); + + await waitFor(() => { + expect(screen.getByRole("menu")).toBeDefined(); + }); + + await user.click(screen.getByRole("menuitemradio", { name: "Inter" })); + + await waitFor(() => { + expect(document.documentElement.dataset.font).toBe("inter"); + }); + expect(localStorage.getItem(fontStorageKey)).toBe("inter"); + }); }); diff --git a/packages/core/src/components/theme-switcher.tsx b/packages/core/src/components/theme-switcher.tsx index dd1b1b1f..71136711 100644 --- a/packages/core/src/components/theme-switcher.tsx +++ b/packages/core/src/components/theme-switcher.tsx @@ -3,7 +3,15 @@ import { Palette } from "lucide-react"; import { Menu } from "@/components/menu"; import { Button } from "@/components/button"; import { cn } from "@/lib/utils"; -import { useTheme, type ResolvedTheme, type Theme, THEME_OPTIONS } from "@/contexts/theme-context"; +import { + useTheme, + useFont, + type ResolvedTheme, + type Theme, + type Font, + THEME_OPTIONS, + FONT_OPTIONS, +} from "@/contexts/theme-context"; const RESOLVED_THEME_SHORT: Record = { light: "Light", @@ -23,10 +31,22 @@ const THEME_PREVIEW: Record = { + geist: '"Geist Sans", ui-sans-serif, system-ui, sans-serif', + inter: '"Inter", ui-sans-serif, system-ui, sans-serif', +}; + function isTheme(value: string): value is Theme { return THEME_OPTIONS.some((o) => o.value === value); } +function isFont(value: string): value is Font { + return FONT_OPTIONS.some((o) => o.value === value); +} + function ThemePreviewSwatches({ themeId }: { themeId: Theme }) { const { a, b } = THEME_PREVIEW[themeId]; return ( @@ -52,17 +72,34 @@ function ThemePreviewSwatches({ themeId }: { themeId: Theme }) { ); } +function FontPreview({ fontId }: { fontId: Font }) { + return ( +
+ + Aa + +
+ ); +} + /** - * Appearance menu: visual grid of every palette plus **System**. - * Bound to stored `theme` (not resolved paint alone) so **System** stays explicit. + * Appearance menu: two independent axes — color palette (top) and font (bottom). + * Bound to stored `theme` and `font`; **System** stays explicit on the color axis. */ function ThemeSwitcher() { const { theme, resolvedTheme, setTheme } = useTheme(); + const { font, setFont } = useFont(); const triggerTitle = theme === "system" - ? `Following system — currently ${RESOLVED_THEME_SHORT[resolvedTheme]}` - : "Choose appearance theme"; + ? `Following system — currently ${RESOLVED_THEME_SHORT[resolvedTheme]} · ${FONT_OPTIONS.find((o) => o.value === font)?.label ?? font}` + : "Choose appearance — color + font"; return ( @@ -73,7 +110,7 @@ function ThemeSwitcher() { variant="outline" size="icon" className="astw:shrink-0" - aria-label="Theme" + aria-label="Appearance" title={triggerTitle} /> } @@ -84,40 +121,85 @@ function ThemeSwitcher() { position={{ side: "bottom", align: "end", sideOffset: 4 }} className="astw:min-w-[16.5rem] astw:rounded-xl astw:p-3" > - { - if (typeof value === "string" && isTheme(value)) setTheme(value); - }} - > - {THEME_OPTIONS.map((opt) => ( - - - {opt.label} - - - {opt.label} - - ))} - + + Colors + { + if (typeof value === "string" && isTheme(value)) setTheme(value); + }} + > + {THEME_OPTIONS.map((opt) => ( + + + {opt.label} + + + + {opt.label} + + + ))} + + + + + Font + { + if (typeof value === "string" && isFont(value)) setFont(value); + }} + > + {FONT_OPTIONS.map((opt) => ( + + + {opt.label} + + + + {opt.label} + + + ))} + + ); diff --git a/packages/core/src/contexts/theme-context.tsx b/packages/core/src/contexts/theme-context.tsx index 6746cf58..303dc908 100644 --- a/packages/core/src/contexts/theme-context.tsx +++ b/packages/core/src/contexts/theme-context.tsx @@ -12,13 +12,25 @@ const ALL_THEMES: readonly Theme[] = ["light", "dark", "cream", "bloom", "system export type ThemeOption = { readonly value: Theme; readonly label: string }; export const THEME_OPTIONS: readonly ThemeOption[] = [ + { value: "bloom", label: "Bloom" }, { value: "light", label: "Light" }, { value: "dark", label: "Dark" }, { value: "cream", label: "Cream" }, - { value: "bloom", label: "Bloom" }, { value: "system", label: "System" }, ] as const; +/** Font axis — independent of color theme. Applied to `` as `data-font`. */ +export type Font = "geist" | "inter"; + +const ALL_FONTS: readonly Font[] = ["geist", "inter"] as const; + +export type FontOption = { readonly value: Font; readonly label: string }; + +export const FONT_OPTIONS: readonly FontOption[] = [ + { value: "geist", label: "Geist" }, + { value: "inter", label: "Inter" }, +] as const; + /** Migrate stored values from legacy `tailor-*` ids before the public rename. */ const LEGACY_THEME_IDS: Partial> = { "tailor-light": "cream", @@ -34,24 +46,34 @@ function parseStoredTheme(value: string | null, fallback: Theme): Theme { return fallback; } -function readStoredTheme(storageKey: string, fallback: Theme): Theme { +function parseStoredFont(value: string | null, fallback: Font): Font { + if (!value) return fallback; + if ((ALL_FONTS as readonly string[]).includes(value)) return value as Font; + return fallback; +} + +function readStored( + storageKey: string, + fallback: T, + parse: (value: string | null, fallback: T) => T, +): T { if (typeof window === "undefined") return fallback; const ls = window.localStorage; const getItem = ls && typeof ls.getItem === "function" ? ls.getItem.bind(ls) : null; if (!getItem) return fallback; try { - return parseStoredTheme(getItem(storageKey), fallback); + return parse(getItem(storageKey), fallback); } catch { return fallback; } } -function writeStoredTheme(storageKey: string, theme: Theme) { +function writeStored(storageKey: string, value: T) { if (typeof window === "undefined") return; const ls = window.localStorage; if (!ls || typeof ls.setItem !== "function") return; try { - ls.setItem(storageKey, theme); + ls.setItem(storageKey, value); } catch { /* storage full or forbidden */ } @@ -60,19 +82,25 @@ function writeStoredTheme(storageKey: string, theme: Theme) { type ThemeProviderProps = { children: React.ReactNode; defaultTheme?: Theme; + defaultFont?: Font; storageKey: string; + fontStorageKey: string; }; type ThemeProviderState = { theme: Theme; resolvedTheme: ResolvedTheme; setTheme: (theme: Theme) => void; + font: Font; + setFont: (font: Font) => void; }; const initialState: ThemeProviderState = { resolvedTheme: "bloom", theme: "bloom", setTheme: () => null, + font: "geist", + setFont: () => null, }; const ThemeProviderContext = createContext(initialState); @@ -86,10 +114,17 @@ function resolveTheme(theme: Theme): ResolvedTheme { export function ThemeProvider({ children, storageKey, + fontStorageKey, defaultTheme = "bloom", + defaultFont = "geist", ...props }: ThemeProviderProps) { - const [theme, setThemeState] = useState(() => readStoredTheme(storageKey, defaultTheme)); + const [theme, setThemeState] = useState(() => + readStored(storageKey, defaultTheme, parseStoredTheme), + ); + const [font, setFontState] = useState(() => + readStored(fontStorageKey, defaultFont, parseStoredFont), + ); const resolvedTheme = useMemo(() => resolveTheme(theme), [theme]); @@ -100,13 +135,22 @@ export function ThemeProvider({ root.dataset.theme = resolvedTheme; }, [resolvedTheme]); + useEffect(() => { + window.document.documentElement.dataset.font = font; + }, [font]); + const value = { resolvedTheme, theme, setTheme: (newTheme: Theme) => { - writeStoredTheme(storageKey, newTheme); + writeStored(storageKey, newTheme); setThemeState(newTheme); }, + font, + setFont: (newFont: Font) => { + writeStored(fontStorageKey, newFont); + setFontState(newFont); + }, }; return ( @@ -121,5 +165,15 @@ export const useTheme = () => { if (context === undefined) throw new Error("useTheme must be used within a ThemeProvider"); - return context; + const { theme, resolvedTheme, setTheme } = context; + return { theme, resolvedTheme, setTheme }; +}; + +export const useFont = () => { + const context = useContext(ThemeProviderContext); + + if (context === undefined) throw new Error("useFont must be used within a ThemeProvider"); + + const { font, setFont } = context; + return { font, setFont }; }; diff --git a/packages/core/src/globals.css b/packages/core/src/globals.css index 9760d2fa..915133cb 100644 --- a/packages/core/src/globals.css +++ b/packages/core/src/globals.css @@ -2,6 +2,10 @@ @import url("https://cdn.jsdelivr.net/npm/@fontsource/geist-sans@5.2.5/500.css"); @import url("https://cdn.jsdelivr.net/npm/@fontsource/geist-sans@5.2.5/600.css"); @import url("https://cdn.jsdelivr.net/npm/@fontsource/geist-sans@5.2.5/700.css"); +@import url("https://cdn.jsdelivr.net/npm/@fontsource/inter@5.2.5/400.css"); +@import url("https://cdn.jsdelivr.net/npm/@fontsource/inter@5.2.5/500.css"); +@import url("https://cdn.jsdelivr.net/npm/@fontsource/inter@5.2.5/600.css"); +@import url("https://cdn.jsdelivr.net/npm/@fontsource/inter@5.2.5/700.css"); @import "tailwindcss" prefix(astw); @import "tw-animate-css"; @@ -41,14 +45,23 @@ } /* - * Cream / Bloom — vertical shell gradient (top = --background; bottom lighter via --shell-gradient-end). + * Cream / Bloom — vertical shell gradient (top = light tint via --shell-gradient-start → bottom = white via --shell-gradient-end). * Paint on `html` (fixed); shell chrome uses transparent bg so `bg-background` on buttons/cards stays solid. */ :is(html[data-theme="cream"], html[data-theme="bloom"]) { min-height: 100vh; min-height: 100dvh; background-color: var(--background); - background-image: linear-gradient(to bottom, var(--background), var(--shell-gradient-end)); + background-image: linear-gradient( + to bottom, + var(--shell-gradient-start) 0%, + color-mix(in srgb, var(--background) 45%, white) 20%, + color-mix(in srgb, var(--background) 30%, white) 40%, + color-mix(in srgb, var(--background) 15%, white) 55%, + color-mix(in srgb, var(--background) 6%, white) 65%, + var(--shell-gradient-end) 70%, + var(--shell-gradient-end) 100% + ); background-attachment: fixed; background-repeat: no-repeat; background-size: 100% 100%; @@ -69,21 +82,27 @@ background-color: transparent !important; } - /* - Cream / Bloom: Geist Sans + Apple-style corners (squircle) when the engine supports corner-shape (Chromium). - Circles (.rounded-full) stay round; browsers without support keep standard border-radius. - */ - :is(html[data-theme="cream"], html[data-theme="bloom"]) body { + * Font axis — applied independently of color theme via `data-font` on ``. + * Default Tailwind sans is the fallback when no `data-font` is set. + */ + html[data-font="geist"] body, + html[data-font="geist"] :where(h1, h2, h3, h4, h5, h6) { font-family: "Geist Sans", ui-sans-serif, system-ui, sans-serif; } + html[data-font="inter"] body, + html[data-font="inter"] :where(h1, h2, h3, h4, h5, h6) { + font-family: "Inter", ui-sans-serif, system-ui, sans-serif; + } + + /* Tighter heading rhythm on cream/bloom — matches the showcase palettes' display feel. */ :is(html[data-theme="cream"], html[data-theme="bloom"]) :where(h1, h2, h3, h4, h5, h6) { letter-spacing: -0.03em; line-height: 1.2; - font-family: "Geist Sans", ui-sans-serif, system-ui, sans-serif; } + /* Apple-style squircle corners on cream/bloom where engine supports corner-shape (Chromium). */ @supports (corner-shape: squircle) { :is(html[data-theme="cream"], html[data-theme="bloom"]) * { corner-shape: squircle; @@ -126,5 +145,32 @@ :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="button"][class*="astw:bg-background"][class*="astw:border"] { background-color: transparent; + transition: + background-color 0.12s ease, + color 0.12s ease; + } + + /* Hover state — restore the accent fill that the Tailwind `hover:bg-accent` utility would have provided + * if our transparent rule above weren't winning on specificity. */ + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="button"][class*="astw:bg-background"][class*="astw:border"]:hover:not(:disabled) { + background-color: var(--accent); + color: var(--accent-foreground); + } + + /* + * Sidebar active item — hairline border (~0.5px @ 30% black). Wrapper components in + * `components/sidebar/*` apply the active state via direct `bg-sidebar-accent` classes + * (not the `data-active` attribute), so target the class signature. Inset box-shadow + * (not outline) because Tailwind's `outline-hidden` utility sets a transparent 2px + * outline that would override us. Lives in `@layer utilities` to win the cascade. + */ + :is( + [data-slot="sidebar-menu-button"], + [data-slot="sidebar-menu-sub-button"] + )[class~="astw:bg-sidebar-accent"] { + outline: 0.5px solid var(--border); + outline-offset: -0.5px; + box-shadow: var(--semantic-shadow-xs); } } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index c2c03fd3..55b1864c 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -26,10 +26,14 @@ export { WithGuard, type WithGuardProps } from "./components/with-guard"; export { useAppShell, useAppShellConfig, useAppShellData } from "./contexts/appshell-context"; export { useTheme, + useFont, THEME_OPTIONS, + FONT_OPTIONS, type ResolvedTheme, type Theme, type ThemeOption, + type Font, + type FontOption, } from "./contexts/theme-context"; export { ThemeSwitcher } from "./components/theme-switcher"; export { type I18nLabels, defineI18nLabels } from "./hooks/i18n"; From f701cb6350c814f1ef95178b4266ac970e51522b Mon Sep 17 00:00:00 2001 From: itsprade Date: Fri, 15 May 2026 15:26:27 +0530 Subject: [PATCH 10/20] refactor(themes): memoize ThemeProvider value + stable hook returns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Wrap `value` in `useMemo`; wrap `setTheme`/`setFont` in `useCallback` so consumers don't re-render when ThemeProvider re-renders for an unrelated reason and identity-comparison code (effect deps, memo selectors) stays stable across renders. - `useTheme` / `useFont` return a memoized projection of the context so the hook return identity matches the underlying state slice. - Change `ThemeProviderContext` default to `undefined` so the `useTheme must be used within a ThemeProvider` runtime guard actually fires instead of silently returning no-op setters from a fallback `initialState`. - Drop redundant `defaultTheme ?? "bloom"` / `defaultFont ?? "geist"` in `AppShell` — `ThemeProvider` already has the same defaults; single source. Co-Authored-By: Claude Opus 4.7 (1M context) --- packages/core/src/components/appshell.tsx | 4 +- packages/core/src/contexts/theme-context.tsx | 44 ++++++++------------ 2 files changed, 20 insertions(+), 28 deletions(-) diff --git a/packages/core/src/components/appshell.tsx b/packages/core/src/components/appshell.tsx index d677a78e..c9c26c69 100644 --- a/packages/core/src/components/appshell.tsx +++ b/packages/core/src/components/appshell.tsx @@ -340,8 +340,8 @@ export const AppShell = (props: AppShellProps) => { diff --git a/packages/core/src/contexts/theme-context.tsx b/packages/core/src/contexts/theme-context.tsx index 303dc908..82237b63 100644 --- a/packages/core/src/contexts/theme-context.tsx +++ b/packages/core/src/contexts/theme-context.tsx @@ -1,4 +1,4 @@ -import { createContext, useContext, useEffect, useMemo, useState } from "react"; +import { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react"; /** User-selectable theme. `system` follows OS light/dark (default palettes only — not cream/bloom). */ export type Theme = "light" | "dark" | "cream" | "bloom" | "system"; @@ -95,15 +95,7 @@ type ThemeProviderState = { setFont: (font: Font) => void; }; -const initialState: ThemeProviderState = { - resolvedTheme: "bloom", - theme: "bloom", - setTheme: () => null, - font: "geist", - setFont: () => null, -}; - -const ThemeProviderContext = createContext(initialState); +const ThemeProviderContext = createContext(undefined); function resolveTheme(theme: Theme): ResolvedTheme { if (theme !== "system") return theme; @@ -117,7 +109,6 @@ export function ThemeProvider({ fontStorageKey, defaultTheme = "bloom", defaultFont = "geist", - ...props }: ThemeProviderProps) { const [theme, setThemeState] = useState(() => readStored(storageKey, defaultTheme, parseStoredTheme), @@ -139,41 +130,42 @@ export function ThemeProvider({ window.document.documentElement.dataset.font = font; }, [font]); - const value = { - resolvedTheme, - theme, - setTheme: (newTheme: Theme) => { + const setTheme = useCallback( + (newTheme: Theme) => { writeStored(storageKey, newTheme); setThemeState(newTheme); }, - font, - setFont: (newFont: Font) => { + [storageKey], + ); + + const setFont = useCallback( + (newFont: Font) => { writeStored(fontStorageKey, newFont); setFontState(newFont); }, - }; + [fontStorageKey], + ); - return ( - - {children} - + const value = useMemo( + () => ({ theme, resolvedTheme, setTheme, font, setFont }), + [theme, resolvedTheme, setTheme, font, setFont], ); + + return {children}; } export const useTheme = () => { const context = useContext(ThemeProviderContext); - if (context === undefined) throw new Error("useTheme must be used within a ThemeProvider"); const { theme, resolvedTheme, setTheme } = context; - return { theme, resolvedTheme, setTheme }; + return useMemo(() => ({ theme, resolvedTheme, setTheme }), [theme, resolvedTheme, setTheme]); }; export const useFont = () => { const context = useContext(ThemeProviderContext); - if (context === undefined) throw new Error("useFont must be used within a ThemeProvider"); const { font, setFont } = context; - return { font, setFont }; + return useMemo(() => ({ font, setFont }), [font, setFont]); }; From 4c01a783b4266b0993769063ce2c4741d85f5535 Mon Sep 17 00:00:00 2001 From: itsprade Date: Fri, 15 May 2026 15:27:26 +0530 Subject: [PATCH 11/20] refactor(themes): drop !important on cream/bloom transparent overrides MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the cream/bloom `body` and sidebar-chrome transparency rules from `@layer base` to `@layer utilities` so they win the cascade against Tailwind utilities (`bg-sidebar*` on sidebar slots) on layer order, and drop the `!important` declarations — selector specificity now suffices. `!important` is retained only on the WebKit/Firefox autofill rule, where it's the documented way to defeat browser default styling. Co-Authored-By: Claude Opus 4.7 (1M context) --- packages/core/src/globals.css | 38 ++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/packages/core/src/globals.css b/packages/core/src/globals.css index 915133cb..d937a351 100644 --- a/packages/core/src/globals.css +++ b/packages/core/src/globals.css @@ -67,21 +67,6 @@ background-size: 100% 100%; } - :is(html[data-theme="cream"], html[data-theme="bloom"]) body { - background-color: transparent !important; - background-image: none; - } - - :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="sidebar-wrapper"], - :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="sidebar-inner"], - :is(html[data-theme="cream"], html[data-theme="bloom"]) main[data-slot="sidebar-inset"], - :is(html[data-theme="cream"], html[data-theme="bloom"]) - [data-slot="sidebar"][class*="bg-sidebar"]:not([data-mobile="true"]):not( - [data-icon-mode="true"] - ) { - background-color: transparent !important; - } - /* * Font axis — applied independently of color theme via `data-font` on ``. * Default Tailwind sans is the fallback when no `data-font` is set. @@ -138,9 +123,30 @@ /* * Theme-specific overrides that must beat Tailwind utility classes (which sit in `@layer utilities`). - * Keep this block in `@layer utilities` so it loses to no Tailwind utility in earlier layers but wins on specificity. + * Keep this block in `@layer utilities` so it loses to no Tailwind utility in earlier layers and wins + * on selector specificity (no `!important` needed). */ @layer utilities { + /* + * Cream / Bloom: body and sidebar chrome stay transparent so the html-level shell gradient shows + * through. Wins over `body { bg-background }` (base) and the Tailwind `bg-sidebar*` utilities on + * sidebar slots via the `:is(html[data-theme=...])` prefix raising specificity. + */ + :is(html[data-theme="cream"], html[data-theme="bloom"]) body { + background-color: transparent; + background-image: none; + } + + :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="sidebar-wrapper"], + :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="sidebar-inner"], + :is(html[data-theme="cream"], html[data-theme="bloom"]) main[data-slot="sidebar-inset"], + :is(html[data-theme="cream"], html[data-theme="bloom"]) + [data-slot="sidebar"][class*="bg-sidebar"]:not([data-mobile="true"]):not( + [data-icon-mode="true"] + ) { + background-color: transparent; + } + /* Outline button on cream/bloom: transparent fill so the shell gradient shows through; keep border. */ :is(html[data-theme="cream"], html[data-theme="bloom"]) [data-slot="button"][class*="astw:bg-background"][class*="astw:border"] { From 8ca1605cfb320c264d115e5eb80aa66af5bc28ec Mon Sep 17 00:00:00 2001 From: itsprade Date: Fri, 15 May 2026 15:28:46 +0530 Subject: [PATCH 12/20] refactor(theme-switcher): dedup radio-item classes, drop inline-style fallbacks - Extract `radioItemClasses(active)` shared by the color and font grids; the two grids were carrying byte-identical 7-line class strings. - Remove the inline `style={{ display: "grid", gridTemplateColumns: ..., gap: ... }}` fallbacks on `RadioGroup` and the matching `display: flex` block on `ThemePreviewSwatches`. The Tailwind `astw:grid astw:grid-cols-N astw:gap-2` utilities cover the same layout and are now the single source of truth, in line with the project rule that components must be self-contained / portable (`.agents/skills/add-component/SKILL.md`). - Drop the now-obsolete "inline fallback" note from the vite example's `index.css`; the load-order rationale remains. Co-Authored-By: Claude Opus 4.7 (1M context) --- examples/vite-app/src/index.css | 2 - .../core/src/components/theme-switcher.tsx | 56 ++++++------------- 2 files changed, 18 insertions(+), 40 deletions(-) diff --git a/examples/vite-app/src/index.css b/examples/vite-app/src/index.css index 89caf9b8..b71cbfd1 100644 --- a/examples/vite-app/src/index.css +++ b/examples/vite-app/src/index.css @@ -1,8 +1,6 @@ /* Unprefixed Tailwind for this app (`mb-4`, `text-muted-foreground`, etc.) must load first. * App Shell styles MUST come second so layered base rules (semantic `border-border` / `--border`) * are not overwritten by Tailwind preflight — otherwise AppShell borders look harsh/black everywhere. - * - * Theme switcher grid does not rely on this order (inline fallback styles on `ThemeSwitcher`). */ @import "tailwindcss"; @import "@tailor-platform/app-shell/styles"; diff --git a/packages/core/src/components/theme-switcher.tsx b/packages/core/src/components/theme-switcher.tsx index 71136711..5423c0c8 100644 --- a/packages/core/src/components/theme-switcher.tsx +++ b/packages/core/src/components/theme-switcher.tsx @@ -22,6 +22,8 @@ const RESOLVED_THEME_SHORT: Record = { /** * Decorative dual swatches — approximates each palette pair (accent + neutral) for the picker grid. + * Kept as static hex previews so the swatches render even before a theme stylesheet has loaded; + * keep these in sync with the palette tokens in `assets/theme.css`. */ const THEME_PREVIEW: Record = { light: { a: "#ffffff", b: "#d4d4d8" }, @@ -31,9 +33,7 @@ const THEME_PREVIEW: Record = { geist: '"Geist Sans", ui-sans-serif, system-ui, sans-serif', inter: '"Inter", ui-sans-serif, system-ui, sans-serif', @@ -47,17 +47,22 @@ function isFont(value: string): value is Font { return FONT_OPTIONS.some((o) => o.value === value); } +/** Shared radio-item chrome — used by both the color and font grids. */ +function radioItemClasses(active: boolean) { + return cn( + "astw:relative astw:flex astw:h-auto astw:w-full astw:cursor-default astw:select-none astw:flex-col astw:items-center astw:justify-center astw:gap-1.5 astw:rounded-xl astw:border-0 astw:bg-transparent astw:px-2 astw:py-2 astw:text-center astw:text-xs astw:font-medium astw:leading-tight astw:outline-hidden", + "astw:data-highlighted:bg-muted/80 astw:data-highlighted:text-foreground", + "astw:data-disabled:pointer-events-none astw:data-disabled:opacity-50", + "[&_[data-slot=menu-radio-item-indicator]]:astw:hidden", + active && "astw:bg-primary/12 astw:ring-1 astw:ring-primary/25 astw:data-highlighted:bg-primary/[0.14]", + ); +} + function ThemePreviewSwatches({ themeId }: { themeId: Theme }) { const { a, b } = THEME_PREVIEW[themeId]; return (
o.value === font)?.label ?? font; const triggerTitle = theme === "system" - ? `Following system — currently ${RESOLVED_THEME_SHORT[resolvedTheme]} · ${FONT_OPTIONS.find((o) => o.value === font)?.label ?? font}` + ? `Following system — currently ${RESOLVED_THEME_SHORT[resolvedTheme]} · ${fontLabel}` : "Choose appearance — color + font"; return ( @@ -125,11 +131,6 @@ function ThemeSwitcher() { Colors { if (typeof value === "string" && isTheme(value)) setTheme(value); @@ -139,15 +140,7 @@ function ThemeSwitcher() { {opt.label} @@ -165,11 +158,6 @@ function ThemeSwitcher() { Font { if (typeof value === "string" && isFont(value)) setFont(value); @@ -179,15 +167,7 @@ function ThemeSwitcher() { {opt.label} From 0243c98c22c0e521a3434eff06f44f7373a9bf38 Mon Sep 17 00:00:00 2001 From: itsprade Date: Fri, 15 May 2026 15:34:37 +0530 Subject: [PATCH 13/20] feat(themes): self-host fonts via optional @tailor-platform/app-shell/fonts subpath MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the eight runtime `@import url("https://cdn.jsdelivr.net/...")` lines from `globals.css`. The default `@import "@tailor-platform/app-shell/styles"` is now font-free, eliminating the third-party CDN dependency (supply-chain risk, request privacy, render-blocking imports, no offline support, not lockfile-pinned). In its place, AppShell ships a separate, opt-in stylesheet at `@tailor-platform/app-shell/fonts` which pulls in `@fontsource-variable/geist` and `@fontsource-variable/inter` — self-hosted, lockfile-pinned, single variable font per family (~30KB each vs. 4× static weights). Consumers pick a loading strategy: 1. `@import "@tailor-platform/app-shell/fonts"` — zero-config. 2. `next/font/google` with the conventional family name (`Geist`, `Inter`) — the new `font-family` fallback chain `"Geist Variable", "Geist Sans", …` catches it. 3. Bring their own font; AppShell's `data-font` attribute still drives which axis is active. Wiring: - New `packages/core/src/assets/fonts.css` (copied to `dist/fonts.css` by `publicDir` during build). - New `"./fonts": "./dist/fonts.css"` entry in `package.json` exports. - `@fontsource-variable/{geist,inter}` added to core deps. - Example apps updated to import the subpath so demos still render Geist. - `docs/concepts/styling-theming.md` documents the three loading patterns. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/concepts/styling-theming.md | 38 + examples/nextjs-app/src/app/globals.css | 1 + examples/vite-app/src/index.css | 1 + packages/core/package.json | 3 + packages/core/src/assets/fonts.css | 13 + .../core/src/components/theme-switcher.tsx | 7 +- packages/core/src/globals.css | 20 +- pnpm-lock.yaml | 3192 ++++++++++------- 8 files changed, 1970 insertions(+), 1305 deletions(-) create mode 100644 packages/core/src/assets/fonts.css diff --git a/docs/concepts/styling-theming.md b/docs/concepts/styling-theming.md index 8f702eba..3d8337e7 100644 --- a/docs/concepts/styling-theming.md +++ b/docs/concepts/styling-theming.md @@ -52,6 +52,44 @@ Font is an independent axis from color theme — any palette works with either f Selected font is applied to **``** as **`data-font`**. CSS in **`globals.css`** sets **`font-family`** on **`body`** and headings off that attribute. Persisted to **`localStorage`** under **`appshell-ui-font`**; pick via **`setFont`** (see **`useFont`**) or **`AppShell`**'s **`defaultFont`** prop (default **`"geist"`**). +### Loading the fonts + +AppShell's main stylesheet (**`@tailor-platform/app-shell/styles`**) references the family names but **does not load the font files** — that's up to the consumer so you can choose your own loading strategy. Three common options: + +**1. Use the bundled fonts (zero-config)** + +```css +/* Your app's global CSS — typically app/globals.css or src/index.css */ +@import "@tailor-platform/app-shell/styles"; +@import "@tailor-platform/app-shell/fonts"; /* ships Geist + Inter variable */ +``` + +This pulls **`@fontsource-variable/geist`** and **`@fontsource-variable/inter`** in via the AppShell package — self-hosted, lockfile-pinned, no third-party CDN. + +**2. Use Next.js font loader (best for Next.js apps)** + +```tsx +// app/layout.tsx +import { Geist, Inter } from "next/font/google"; + +const geist = Geist({ subsets: ["latin"], variable: "--font-geist" }); +const inter = Inter({ subsets: ["latin"], variable: "--font-inter" }); + +export default function RootLayout({ children }) { + return ( + + {children} + + ); +} +``` + +AppShell's family chain is **`"Geist Variable", "Geist Sans", …`** — Next's loader registers Geist under **`"Geist Sans"`**, so it participates via the fallback. No extra CSS needed. + +**3. Self-host other fonts** + +If you don't want either Geist or Inter, you can replace the family on `body` in your own global CSS (post-import order). AppShell's `data-font` attribute still drives which axis is active. + ## A note on AppShell component class names AppShell components use Tailwind utility classes for their styling. Tailwind classes are generated at build-time, so stylesheet for AppShell components is already built and is separate to the Tailwind stylesheet generated for your application. diff --git a/examples/nextjs-app/src/app/globals.css b/examples/nextjs-app/src/app/globals.css index 91056708..80fa9727 100644 --- a/examples/nextjs-app/src/app/globals.css +++ b/examples/nextjs-app/src/app/globals.css @@ -1,5 +1,6 @@ @import "tailwindcss"; @import "tw-animate-css"; +@import "@tailor-platform/app-shell/fonts"; @custom-variant dark (&:is(.dark *)); diff --git a/examples/vite-app/src/index.css b/examples/vite-app/src/index.css index b71cbfd1..1df94d6e 100644 --- a/examples/vite-app/src/index.css +++ b/examples/vite-app/src/index.css @@ -4,6 +4,7 @@ */ @import "tailwindcss"; @import "@tailor-platform/app-shell/styles"; +@import "@tailor-platform/app-shell/fonts"; html, body { diff --git a/packages/core/package.json b/packages/core/package.json index 7dff3b28..5008946c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -29,6 +29,7 @@ "exports": { "./styles": "./dist/app-shell.css", "./theme.css": "./dist/theme.css", + "./fonts": "./dist/fonts.css", ".": { "types": "./dist/app-shell.d.ts", "default": "./dist/app-shell.js" @@ -50,6 +51,8 @@ }, "dependencies": { "@base-ui/react": "^1.5.0", + "@fontsource-variable/geist": "^5.2.8", + "@fontsource-variable/inter": "^5.2.8", "@standard-schema/spec": "^1.1.0", "@tailor-platform/app-shell-vite-plugin": "workspace:*", "@tailor-platform/auth-public-client": "^0.5.0", diff --git a/packages/core/src/assets/fonts.css b/packages/core/src/assets/fonts.css new file mode 100644 index 00000000..b5c22ac7 --- /dev/null +++ b/packages/core/src/assets/fonts.css @@ -0,0 +1,13 @@ +/* + * Self-hosted variable fonts used by AppShell's appearance axis. Shipped as a + * separate, opt-in stylesheet via the `@tailor-platform/app-shell/fonts` + * subpath so the default `@import "@tailor-platform/app-shell/styles"` stays + * font-free and consumers can choose their own loading strategy (e.g. + * `next/font/local`, `next/font/google`, or a CDN). + * + * Family names: `"Geist Variable"`, `"Inter Variable"`. AppShell's + * `globals.css` falls back to `"Geist Sans"` / `"Inter"` after these so + * consumers who self-host with the conventional family names also work. + */ +@import "@fontsource-variable/geist"; +@import "@fontsource-variable/inter"; diff --git a/packages/core/src/components/theme-switcher.tsx b/packages/core/src/components/theme-switcher.tsx index 5423c0c8..f8cd0da9 100644 --- a/packages/core/src/components/theme-switcher.tsx +++ b/packages/core/src/components/theme-switcher.tsx @@ -33,10 +33,11 @@ const THEME_PREVIEW: Record = { - geist: '"Geist Sans", ui-sans-serif, system-ui, sans-serif', - inter: '"Inter", ui-sans-serif, system-ui, sans-serif', + geist: '"Geist Variable", "Geist Sans", ui-sans-serif, system-ui, sans-serif', + inter: '"Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif', }; function isTheme(value: string): value is Theme { diff --git a/packages/core/src/globals.css b/packages/core/src/globals.css index d937a351..17da3132 100644 --- a/packages/core/src/globals.css +++ b/packages/core/src/globals.css @@ -1,12 +1,3 @@ -@import url("https://cdn.jsdelivr.net/npm/@fontsource/geist-sans@5.2.5/400.css"); -@import url("https://cdn.jsdelivr.net/npm/@fontsource/geist-sans@5.2.5/500.css"); -@import url("https://cdn.jsdelivr.net/npm/@fontsource/geist-sans@5.2.5/600.css"); -@import url("https://cdn.jsdelivr.net/npm/@fontsource/geist-sans@5.2.5/700.css"); -@import url("https://cdn.jsdelivr.net/npm/@fontsource/inter@5.2.5/400.css"); -@import url("https://cdn.jsdelivr.net/npm/@fontsource/inter@5.2.5/500.css"); -@import url("https://cdn.jsdelivr.net/npm/@fontsource/inter@5.2.5/600.css"); -@import url("https://cdn.jsdelivr.net/npm/@fontsource/inter@5.2.5/700.css"); - @import "tailwindcss" prefix(astw); @import "tw-animate-css"; @import "./assets/theme.css"; @@ -69,16 +60,21 @@ /* * Font axis — applied independently of color theme via `data-font` on ``. - * Default Tailwind sans is the fallback when no `data-font` is set. + * + * Family-name chain prefers the variable build (loaded by + * `@tailor-platform/app-shell/fonts`), then the conventional static family + * name (`Geist Sans` / `Inter` — what `next/font/google` and most CDNs + * register), then the system stack. Consumers who load their own font under + * either name automatically participate; no font loads when nothing matches. */ html[data-font="geist"] body, html[data-font="geist"] :where(h1, h2, h3, h4, h5, h6) { - font-family: "Geist Sans", ui-sans-serif, system-ui, sans-serif; + font-family: "Geist Variable", "Geist Sans", ui-sans-serif, system-ui, sans-serif; } html[data-font="inter"] body, html[data-font="inter"] :where(h1, h2, h3, h4, h5, h6) { - font-family: "Inter", ui-sans-serif, system-ui, sans-serif; + font-family: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif; } /* Tighter heading rhythm on cream/bloom — matches the showcase palettes' display feel. */ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1c3b0f7a..ea37fd54 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,11 +7,11 @@ settings: catalogs: default: '@tailwindcss/postcss': - specifier: ^4.3.0 - version: 4.3.0 + specifier: ^4.2.4 + version: 4.2.4 '@types/node': - specifier: ^25.9.1 - version: 25.9.1 + specifier: ^25.6.0 + version: 25.6.0 '@types/react': specifier: ^19 version: 19.2.13 @@ -21,36 +21,18 @@ catalogs: '@vitejs/plugin-react': specifier: ^5.2.0 version: 5.2.0 - lucide-react: - specifier: ^1.8.0 - version: 1.8.0 oxfmt: specifier: ^0.47.0 version: 0.47.0 oxlint: specifier: ^1.64.0 version: 1.64.0 - react: - specifier: ^19.2.6 - version: 19.2.6 - react-dom: - specifier: ^19.2.6 - version: 19.2.6 tailwindcss: specifier: ^4.2.4 - version: 4.3.0 - tsdown: - specifier: ^0.22.0 - version: 0.22.0 - typescript: - specifier: ^5 - version: 5.9.3 + version: 4.2.4 vite: specifier: ^7.3.2 version: 7.3.2 - vitest: - specifier: ^4.1.6 - version: 4.1.7 importers: @@ -58,10 +40,7 @@ importers: devDependencies: '@changesets/cli': specifier: ^2.31.0 - version: 2.31.0(@types/node@25.9.1) - lefthook: - specifier: 2.1.6 - version: 2.1.6 + version: 2.31.0(@types/node@25.6.0) oxfmt: specifier: 'catalog:' version: 0.47.0 @@ -69,112 +48,39 @@ importers: specifier: 'catalog:' version: 1.64.0 turbo: - specifier: ^2.9.14 - version: 2.9.14 - - catalogue: - dependencies: - '@tailor-platform/app-shell': - specifier: workspace:* - version: link:../packages/core - gray-matter: - specifier: 4.0.3 - version: 4.0.3 - react: - specifier: ^19.0.0 - version: 19.2.5 - react-dom: - specifier: ^19.0.0 - version: 19.2.5(react@19.2.5) - devDependencies: - '@types/react': - specifier: 'catalog:' - version: 19.2.13 - '@types/react-dom': - specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.13) - typescript: - specifier: 'catalog:' - version: 5.9.3 - - e2e: - devDependencies: - '@playwright/test': - specifier: 1.51.1 - version: 1.51.1 - '@tailor-platform/app-shell': - specifier: workspace:* - version: link:../packages/core - '@tailor-platform/sdk': - specifier: ^1.45.1 - version: 1.45.1(@types/node@25.9.1)(@types/react@19.2.13)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3)) - '@tailwindcss/vite': - specifier: ^4.3.0 - version: 4.3.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) - '@types/node': - specifier: 'catalog:' - version: 25.9.1 - '@types/react': - specifier: 'catalog:' - version: 19.2.13 - '@types/react-dom': - specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.13) - '@vitejs/plugin-react': - specifier: 'catalog:' - version: 5.2.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) - dotenv: - specifier: ^16.5.0 - version: 16.6.1 - react: - specifier: 'catalog:' - version: 19.2.6 - react-dom: - specifier: 'catalog:' - version: 19.2.6(react@19.2.6) - tailwindcss: - specifier: 'catalog:' - version: 4.3.0 - typescript: - specifier: 'catalog:' - version: 5.9.3 - vite: - specifier: 'catalog:' - version: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0) + specifier: ^2.8.21 + version: 2.9.1 examples/nextjs-app: dependencies: '@hookform/resolvers': specifier: ^5.2.2 - version: 5.4.0(react-hook-form@7.71.2(react@19.2.6)) + version: 5.2.2(react-hook-form@7.71.2(react@19.2.5)) '@tailor-platform/app-shell': specifier: workspace:* version: link:../../packages/core - lucide-react: - specifier: 'catalog:' - version: 1.8.0(react@19.2.6) next: - specifier: 16.2.6 - version: 16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.51.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: 16.2.3 + version: 16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: - specifier: 'catalog:' - version: 19.2.6 + specifier: ^19.2.5 + version: 19.2.5 react-dom: - specifier: 'catalog:' - version: 19.2.6(react@19.2.6) + specifier: ^19.2.5 + version: 19.2.5(react@19.2.5) react-hook-form: specifier: ^7.71.2 - version: 7.71.2(react@19.2.6) + version: 7.71.2(react@19.2.5) zod: - specifier: ^3.24.0 - version: 3.25.76 + specifier: ^4.4.3 + version: 4.4.3 devDependencies: '@tailwindcss/postcss': specifier: 'catalog:' - version: 4.3.0 + version: 4.2.4 '@types/node': specifier: 'catalog:' - version: 25.9.1 + version: 25.6.0 '@types/react': specifier: 'catalog:' version: 19.2.13 @@ -186,7 +92,7 @@ importers: version: 8.5.12 tailwindcss: specifier: 'catalog:' - version: 4.3.0 + version: 4.2.4 tw-animate-css: specifier: ^1.4.0 version: 1.4.0 @@ -200,21 +106,21 @@ importers: specifier: workspace:* version: link:../../packages/core lucide-react: - specifier: 'catalog:' - version: 1.8.0(react@19.2.6) + specifier: ^1.8.0 + version: 1.8.0(react@19.2.5) react: - specifier: 'catalog:' - version: 19.2.6 + specifier: ^19.2.5 + version: 19.2.5 react-dom: - specifier: 'catalog:' - version: 19.2.6(react@19.2.6) + specifier: ^19.2.5 + version: 19.2.5(react@19.2.5) tailwindcss: specifier: 'catalog:' - version: 4.3.0 + version: 4.2.4 devDependencies: '@tailwindcss/vite': - specifier: ^4.3.0 - version: 4.3.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) + specifier: ^4.2.2 + version: 4.2.2(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) '@types/react': specifier: 'catalog:' version: 19.2.13 @@ -223,19 +129,25 @@ importers: version: 19.2.3(@types/react@19.2.13) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.2.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 5.2.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) typescript: specifier: ~5.9.3 version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0) + version: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) packages/core: dependencies: '@base-ui/react': - specifier: ^1.5.0 - version: 1.5.0(@types/react@19.2.13)(date-fns@4.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + specifier: ^1.4.1 + version: 1.4.1(@types/react@19.2.13)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@fontsource-variable/geist': + specifier: ^5.2.8 + version: 5.2.8 + '@fontsource-variable/inter': + specifier: ^5.2.8 + version: 5.2.8 '@standard-schema/spec': specifier: ^1.1.0 version: 1.1.0 @@ -257,28 +169,43 @@ importers: encoding-japanese: specifier: ^2.2.0 version: 2.2.0 + es-toolkit: + specifier: ^1.45.1 + version: 1.45.1 + graphql: + specifier: ^16.13.2 + version: 16.13.2 lucide-react: - specifier: 'catalog:' - version: 1.8.0(react@19.2.6) + specifier: ^1.8.0 + version: 1.8.0(react@19.2.5) papaparse: specifier: ^5.5.3 version: 5.5.3 + react: + specifier: ^19.2.5 + version: 19.2.5 + react-dom: + specifier: ^19.2.5 + version: 19.2.5(react@19.2.5) + react-hook-form: + specifier: ^7.71.2 + version: 7.71.2(react@19.2.5) react-router: specifier: ^7.14.1 - version: 7.14.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 7.14.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) sonner: specifier: ^2.0.7 - version: 2.0.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 2.0.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5) tailwind-merge: - specifier: ^3.6.0 - version: 3.6.0 + specifier: ^3.5.0 + version: 3.5.0 devDependencies: '@tailwindcss/postcss': specifier: 'catalog:' - version: 4.3.0 + version: 4.2.4 '@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.13))(@types/react@19.2.13)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.1) @@ -287,7 +214,7 @@ importers: version: 2.2.1 '@types/node': specifier: 'catalog:' - version: 25.9.1 + version: 25.6.0 '@types/papaparse': specifier: ^5.5.2 version: 5.5.2 @@ -299,22 +226,16 @@ importers: version: 19.2.3(@types/react@19.2.13) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.2.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 5.2.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) happy-dom: - specifier: ^20.9.0 - version: 20.9.0 + specifier: ^20.6.2 + version: 20.6.2 postcss: specifier: ^8 version: 8.5.12 - react: - specifier: 'catalog:' - version: 19.2.6 - react-dom: - specifier: 'catalog:' - version: 19.2.6(react@19.2.6) tailwindcss: specifier: 'catalog:' - version: 4.3.0 + version: 4.2.4 tw-animate-css: specifier: ^1.4.0 version: 1.4.0 @@ -323,19 +244,19 @@ importers: version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0) + version: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) vite-plugin-dts: specifier: ^4.5.0 - version: 4.5.4(@types/node@25.9.1)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 4.5.4(@types/node@25.6.0)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) vite-plugin-externalize-deps: specifier: ^0.10.0 - version: 0.10.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 0.10.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) vitest: - specifier: 'catalog:' - version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) + specifier: ^4.1.4 + version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) packages/sdk-plugin: devDependencies: @@ -344,19 +265,19 @@ importers: version: link:../core '@tailor-platform/sdk': specifier: ^1.45.1 - version: 1.45.1(@types/node@25.9.1)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3)) + version: 1.45.1(@types/node@25.6.0)(@types/react@19.2.13)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3)) oxlint: specifier: 'catalog:' version: 1.64.0 tsdown: - specifier: 'catalog:' - version: 0.22.0(tsx@4.21.0)(typescript@5.9.3) + specifier: ^0.21.7 + version: 0.21.7(typescript@5.9.3) typescript: specifier: ^5 version: 5.9.3 vitest: - specifier: 'catalog:' - version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) + specifier: ^4 + version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) packages/vite-plugin: dependencies: @@ -366,19 +287,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.9.1 + version: 25.6.0 tsdown: - specifier: 'catalog:' - version: 0.22.0(tsx@4.21.0)(typescript@5.9.3) + specifier: ^0.21.7 + version: 0.21.7(typescript@5.9.3) typescript: specifier: ^5 version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0) + version: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) vitest: - specifier: 'catalog:' - version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) + specifier: ^4.1.4 + version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) packages: @@ -398,8 +319,17 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@babel/code-frame@7.29.7': - resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + '@asamuzakjp/css-color@4.1.2': + resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} + + '@asamuzakjp/dom-selector@6.8.1': + resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} + + '@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/compat-data@7.29.0': @@ -414,9 +344,9 @@ packages: resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} - '@babel/generator@8.0.0-rc.5': - resolution: {integrity: sha512-nFZPWz3FHIS7y6rMIVoa/WBwjdutfIaRJIBQjzn+t3RnecZoRNlGmGcyR2wb0T/IgSd50Kz/6dG8/LvMCRunjg==} - engines: {node: ^22.18.0 || >=24.11.0} + '@babel/generator@8.0.0-rc.3': + resolution: {integrity: sha512-em37/13/nR320G4jab/nIIHZgc2Wz2y/D39lxnTyxB4/D/omPQncl/lSdlnJY1OhQcRGugTSIF2l/69o31C9dA==} + engines: {node: ^20.19.0 || >=22.12.0} '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} @@ -444,25 +374,17 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@8.0.0-rc.6': - resolution: {integrity: sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==} - engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-string-parser@8.0.0-rc.3': + resolution: {integrity: sha512-AmwWFx1m8G/a5cXkxLxTiWl+YEoWuoFLUCwqMlNuWO1tqAYITQAbCRPUkyBHv1VOFgfjVOqEj6L3u15J5ZCzTA==} + engines: {node: ^20.19.0 || >=22.12.0} '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.29.7': - resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@8.0.0-rc.5': - resolution: {integrity: sha512-ehJDxHvtbZ85RtX/L2fi0h9AGsBNqB5Euv1EB8RMAvGYvD+2X+QbpzzOpbklnNXO+WSZJNOaetw2BBj27xsWVg==} - engines: {node: ^22.18.0 || >=24.11.0} - - '@babel/helper-validator-identifier@8.0.0-rc.6': - resolution: {integrity: sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==} - engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-validator-identifier@8.0.0-rc.3': + resolution: {integrity: sha512-8AWCJ2VJJyDFlGBep5GpaaQ9AAaE/FjAcrqI7jyssYhtL7WGV0DOKpJsQqM037xDbpRLHXsY8TwU7zDma7coOw==} + engines: {node: ^20.19.0 || >=22.12.0} '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} @@ -472,21 +394,26 @@ packages: resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/parser@7.29.3': resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@8.0.0-rc.4': - resolution: {integrity: sha512-0S/1yefMa15N4i2v3t8Fw9pgMHhf2gF6Lc1UEXI96Ls6FNAjqvHHZouZ2ZS/deqLhbMFtmfVeFac6iTsvFbLwA==} + '@babel/parser@8.0.0-rc.3': + resolution: {integrity: sha512-B20dvP3MfNc/XS5KKCHy/oyWl5IA6Cn9YjXRdDlCjNmUFrjvLXMNUfQq/QUy9fnG2gYkKKcrto2YaF9B32ToOQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - '@babel/parser@8.0.0-rc.6': - resolution: {integrity: sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==} - engines: {node: ^22.18.0 || >=24.11.0} - hasBin: true - '@babel/plugin-transform-react-jsx-self@7.27.1': resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} @@ -507,10 +434,6 @@ packages: resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.29.7': - resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} - 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'} @@ -523,16 +446,16 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@babel/types@8.0.0-rc.6': - resolution: {integrity: sha512-p7/ABylAYlexb31wtRdIfH9L9A0Z2T/9H6zAqzqndkY2PLkvNNc580wGhp/gGKN4Sp9sQvSkhc6Oga8/O+wTyw==} - engines: {node: ^22.18.0 || >=24.11.0} + '@babel/types@8.0.0-rc.3': + resolution: {integrity: sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==} + engines: {node: ^20.19.0 || >=22.12.0} '@badgateway/oauth2-client@3.3.1': resolution: {integrity: sha512-7R4mZocEt8nOIMCz9cQyxsrY7n/jhFW9YUW6Er9ySnBzH92wA0KmQUR1cT2encq2Lix6kRD2GyQRAmT1dWtwzg==} engines: {node: '>= 18'} - '@base-ui/react@1.5.0': - resolution: {integrity: sha512-z1gSAlced1yY+iM+mHDEtIkD8UI3Ebs52MuBPxvV6f5hRutk+xvCH/wuB7hDqDzK9JG5FoMz5nhrqtSs1wjt1A==} + '@base-ui/react@1.4.1': + resolution: {integrity: sha512-Ab5/LIhcmL8BQcsBUYiOfkSDRdLpvgUBzMK30cu684JPcLclYlztharvCZyNNgzJtbAiREzI9q0pI5erHCMgCw==} engines: {node: '>=14.0.0'} peerDependencies: '@date-fns/tz': ^1.2.0 @@ -548,8 +471,8 @@ packages: date-fns: optional: true - '@base-ui/utils@0.2.9': - resolution: {integrity: sha512-x/PDDCYzoqPpjrdyb3VcyylTI2IjUXEtYDGi5foh7KsnmNJIIaVwA2GLgDH1dps1GgXiJbA60hM+AyuTfQzIvw==} + '@base-ui/utils@0.2.8': + resolution: {integrity: sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ==} peerDependencies: '@types/react': ^17 || ^18 || ^19 react: ^17 || ^18 || ^19 @@ -561,6 +484,12 @@ packages: '@bufbuild/protobuf@2.12.0': resolution: {integrity: sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA==} + '@bundled-es-modules/cookie@2.0.1': + resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} + + '@bundled-es-modules/statuses@1.0.1': + resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + '@changesets/apply-release-plan@7.1.1': resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} @@ -628,6 +557,42 @@ packages: peerDependencies: '@bufbuild/protobuf': ^2.7.0 + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} + engines: {node: '>=20.19.0'} + + '@csstools/css-calc@3.2.0': + resolution: {integrity: sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==} + 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.0': + resolution: {integrity: sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==} + 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.3': + resolution: {integrity: sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==} + 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'} + '@dependents/detective-less@5.0.3': resolution: {integrity: sha512-v6oD9Ukp+N7V4n6p5I/+mM5fIohSfkrDSGlFm5w/pYmchvbk+sMIHsLxrFJ5Lnujewj1BzWL0K84d88lwZAMQA==} engines: {node: '>=18'} @@ -641,162 +606,321 @@ packages: '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.9.0': + resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} + '@emnapi/runtime@1.9.2': resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@esbuild/aix-ppc64@0.27.4': + resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.27.4': + resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.7': resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.27.4': + resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.7': resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.27.4': + resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.7': resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.27.4': + resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.7': resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.27.4': + resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.7': resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.27.4': + resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.7': resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.27.4': + resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.7': resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.27.4': + resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.7': resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.27.4': + resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.7': resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.27.4': + resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.7': resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.27.4': + resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.7': resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.27.4': + resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.7': resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.27.4': + resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.7': resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.27.4': + resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.7': resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.27.4': + resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.7': resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.27.4': + resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.7': resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.27.4': + resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.27.7': resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.27.4': + resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.7': resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.27.4': + resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.27.7': resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.27.4': + resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.7': resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.27.4': + resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.27.7': resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.27.4': + resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.7': resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.27.4': + resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.7': resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.27.4': + resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.7': resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.27.4': + resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.7': resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} @@ -818,13 +942,19 @@ packages: '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - '@hookform/resolvers@5.4.0': - resolution: {integrity: sha512-EIsqr/t/qbinPIhGjMdtvutIN1Kk4uwbROE9/UQ93CAVGR7GkA7Y92+fX80OzXi/OB67jVFYwKGO1WzkxmkFZw==} + '@fontsource-variable/geist@5.2.8': + resolution: {integrity: sha512-cJ6m9e+8MQ5dCYJsLylfZrgBh6KkG4bOLckB35Tr9J/EqdkEM6QllH5PxqP1dhTvFup+HtMRPuz9xOjxXJggxw==} + + '@fontsource-variable/inter@5.2.8': + resolution: {integrity: sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ==} + + '@hookform/resolvers@5.2.2': + resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==} peerDependencies: react-hook-form: ^7.55.0 - '@img/colour@1.1.0': - resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} '@img/sharp-darwin-arm64@0.34.5': @@ -853,105 +983,89 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] - libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] - libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] - libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1295,6 +1409,10 @@ packages: '@microsoft/tsdoc@0.16.0': resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} + '@mswjs/interceptors@0.39.8': + resolution: {integrity: sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==} + engines: {node: '>=18'} + '@napi-rs/keyring-darwin-arm64@1.2.0': resolution: {integrity: sha512-CA83rDeyONDADO25JLZsh3eHY8yTEtm/RS6ecPsY+1v+dSawzT9GywBMu2r6uOp1IEhQs/xAfxgybGAFr17lSA==} engines: {node: '>= 10'} @@ -1324,35 +1442,30 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@napi-rs/keyring-linux-arm64-musl@1.2.0': resolution: {integrity: sha512-8TDymrpC4P1a9iDEaegT7RnrkmrJN5eNZh3Im3UEV5PPYGtrb82CRxsuFohthCWQW81O483u1bu+25+XA4nKUw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@napi-rs/keyring-linux-riscv64-gnu@1.2.0': resolution: {integrity: sha512-awsB5XI1MYL7fwfjMDGmKOWvNgJEO7mM7iVEMS0fO39f0kVJnOSjlu7RHcXAF0LOx+0VfF3oxbWqJmZbvRCRHw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] - libc: [glibc] '@napi-rs/keyring-linux-x64-gnu@1.2.0': resolution: {integrity: sha512-8E+7z4tbxSJXxIBqA+vfB1CGajpCDRyTyqXkBig5NtASrv4YXcntSo96Iah2QDR5zD3dSTsmbqJudcj9rKKuHQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@napi-rs/keyring-linux-x64-musl@1.2.0': resolution: {integrity: sha512-8RZ8yVEnmWr/3BxKgBSzmgntI7lNEsY7xouNfOsQkuVAiCNmxzJwETspzK3PQ2FHtDxgz5vHQDEBVGMyM4hUHA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@napi-rs/keyring-win32-arm64-msvc@1.2.0': resolution: {integrity: sha512-AoqaDZpQ6KPE19VBLpxyORcp+yWmHI9Xs9Oo0PJ4mfHma4nFSLVdhAubJCxdlNptHe5va7ghGCHj3L9Akiv4cQ==} @@ -1376,63 +1489,62 @@ packages: resolution: {integrity: sha512-d0d4Oyxm+v980PEq1ZH2PmS6cvpMIRc17eYpiU47KgW+lzxklMu6+HOEOPmxrpnF/XQZ0+Q78I2mgMhbIIo/dg==} engines: {node: '>= 10'} + '@napi-rs/wasm-runtime@1.1.1': + resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@napi-rs/wasm-runtime@1.1.4': resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 - '@next/env@16.2.6': - resolution: {integrity: sha512-gd8HoHN4ufj73WmR3JmVolrpJR47ILK6LouP5xElPglaVxir6e1a7VzvTvDWkOoPXT9rkkTzyCxBu4yeZfZwcw==} + '@next/env@16.2.3': + resolution: {integrity: sha512-ZWXyj4uNu4GCWQw9cjRxWlbD+33mcDszIo9iQxFnBX3Wmgq9ulaSJcl6VhuWx5pCWqqD+9W6Wfz7N0lM5lYPMA==} - '@next/swc-darwin-arm64@16.2.6': - resolution: {integrity: sha512-ZJGkkcNfYgrrMkqOdZ7zoLa1TOy0qpcMfk/z4Mh/FKUz40gVO+HNQWqmLxf67Z5WB64DRp0dhEbyHfel+6sJUg==} + '@next/swc-darwin-arm64@16.2.3': + resolution: {integrity: sha512-u37KDKTKQ+OQLvY+z7SNXixwo4Q2/IAJFDzU1fYe66IbCE51aDSAzkNDkWmLN0yjTUh4BKBd+hb69jYn6qqqSg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.2.6': - resolution: {integrity: sha512-v/YLBHIY132Ced3puBJ7YJKw1lqsCrgcNo2aRJlCEyQrrCeRJlvGlnmxhPxNQI3KE3N1DN5r9TPNPvka3nq5RQ==} + '@next/swc-darwin-x64@16.2.3': + resolution: {integrity: sha512-gHjL/qy6Q6CG3176FWbAKyKh9IfntKZTB3RY/YOJdDFpHGsUDXVH38U4mMNpHVGXmeYW4wj22dMp1lTfmu/bTQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.2.6': - resolution: {integrity: sha512-RPOvqlYBbcQjkz9VQQDZ2T2bARIjXZV1KFlt+V2Mr6SW/e4I9fcKsaA0hdyf2FHoTlsV2xnBd5Y912rP/1Ce6w==} + '@next/swc-linux-arm64-gnu@16.2.3': + resolution: {integrity: sha512-U6vtblPtU/P14Y/b/n9ZY0GOxbbIhTFuaFR7F4/uMBidCi2nSdaOFhA0Go81L61Zd6527+yvuX44T4ksnf8T+Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] - '@next/swc-linux-arm64-musl@16.2.6': - resolution: {integrity: sha512-URUTu1+dMkxJsPFgm+OeEvq9wf5sujw0EvgYy80TDGHTSLTnIHeqb0Eu8A3sC95IRgjejQL+kC4mw+4yPxiAXA==} + '@next/swc-linux-arm64-musl@16.2.3': + resolution: {integrity: sha512-/YV0LgjHUmfhQpn9bVoGc4x4nan64pkhWR5wyEV8yCOfwwrH630KpvRg86olQHTwHIn1z59uh6JwKvHq1h4QEw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] - '@next/swc-linux-x64-gnu@16.2.6': - resolution: {integrity: sha512-DOj182mPV8G3UkrayLoREM5YEYI+Dk5wv7Ox9xl1fFibAELEsFD0lDPfHIeILlutMMfdyhlzYPELG3peuKaurw==} + '@next/swc-linux-x64-gnu@16.2.3': + resolution: {integrity: sha512-/HiWEcp+WMZ7VajuiMEFGZ6cg0+aYZPqCJD3YJEfpVWQsKYSjXQG06vJP6F1rdA03COD9Fef4aODs3YxKx+RDQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] - '@next/swc-linux-x64-musl@16.2.6': - resolution: {integrity: sha512-HKQ5SP/V/ub73UvF7n/zeJlxk2kLmtL7Wzrg4WfmkjmNos5onJ2tKu7yZOPdL18A6Svfn3max29ym+ry7NkK4g==} + '@next/swc-linux-x64-musl@16.2.3': + resolution: {integrity: sha512-Kt44hGJfZSefebhk/7nIdivoDr3Ugp5+oNz9VvF3GUtfxutucUIHfIO0ZYO8QlOPDQloUVQn4NVC/9JvHRk9hw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] - '@next/swc-win32-arm64-msvc@16.2.6': - resolution: {integrity: sha512-LZXpTlPyS5v7HhSmnvsLGP3iIYgYOBnc8r8ArlT55sGHV89bR2HlDdBjWQ+PY6SJMmk8TuVGFuxalnP3k/0Dwg==} + '@next/swc-win32-arm64-msvc@16.2.3': + resolution: {integrity: sha512-O2NZ9ie3Tq6xj5Z5CSwBT3+aWAMW2PIZ4egUi9MaWLkwaehgtB7YZjPm+UpcNpKOme0IQuqDcor7BsW6QBiQBw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.2.6': - resolution: {integrity: sha512-F0+4i0h9J6C4eE3EAPWsoCk7UW/dbzOjyzxY0qnDUOYFu6FFmdZ6l97/XdV3/Nz3VYyO7UWjyEJUXkGqcoXfMA==} + '@next/swc-win32-x64-msvc@16.2.3': + resolution: {integrity: sha512-Ibm29/GgB/ab5n7XKqlStkm54qqZE8v2FnijUPBgrd67FWrac45o/RsNlaOWjme/B5UqeWt/8KM4aWBwA1D2Kw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1449,6 +1561,15 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@opentelemetry/api-logs@0.215.0': resolution: {integrity: sha512-xrFlqhdhUyO8wSRn6DjE0145/HPWSJ5Nm0C7vWua6TdL/FSEAZvEyvdsa9CRXuxo9ebb7j/NEPhEcO62IJ0qUA==} engines: {node: '>=8.0.0'} @@ -1568,56 +1689,48 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] '@oxc-parser/binding-linux-arm64-musl@0.127.0': resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': resolution: {integrity: sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [glibc] '@oxc-parser/binding-linux-riscv64-musl@0.127.0': resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [musl] '@oxc-parser/binding-linux-s390x-gnu@0.127.0': resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] '@oxc-parser/binding-linux-x64-gnu@0.127.0': resolution: {integrity: sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] '@oxc-parser/binding-linux-x64-musl@0.127.0': resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] '@oxc-parser/binding-openharmony-arm64@0.127.0': resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==} @@ -1648,12 +1761,12 @@ packages: cpu: [x64] os: [win32] + '@oxc-project/types@0.122.0': + resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + '@oxc-project/types@0.127.0': resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} - '@oxc-project/types@0.132.0': - resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} - '@oxfmt/binding-android-arm-eabi@0.47.0': resolution: {integrity: sha512-KrMQRdMi/upr81qT4ijK6X6BNp6jqpMY7FwILQnwIy9QLc3qpnhUx5rsCLGzn4ewsCQ0CNAspN2ogmP1GXLyLw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1701,56 +1814,48 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] '@oxfmt/binding-linux-arm64-musl@0.47.0': resolution: {integrity: sha512-IxtQC/sbBi4ubbY+MdwdanRWrG9InQJVZqyMsBa5IUaQcnSg86gQme574HxXMC1p4bo4YhV99zQ+wNnGCvEgzw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] '@oxfmt/binding-linux-ppc64-gnu@0.47.0': resolution: {integrity: sha512-EWXEhOMbWO0q6eJSbu0QLkU8cKi0ljlYLngeDs2Ocu/pm1rrLwyQiYzlFbdnMRURI4w9ndr1sI9rSbhlJ5o23Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@oxfmt/binding-linux-riscv64-gnu@0.47.0': resolution: {integrity: sha512-tZrjS11TUiDuEpRaqdk8K9F9xETRyKXfuZKmdeW+Gj7coBnm7+8sBEfyt033EAFEQSlkniAXvBLh+Qja2ioGBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [glibc] '@oxfmt/binding-linux-riscv64-musl@0.47.0': resolution: {integrity: sha512-KBFy+2CFKUCZzYwX2ZOPQKck1vjQbz+hextuc19G4r0WRJwadfAeuQMQRQvB+Ivc8brlbOVg7et8K7E467440g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [musl] '@oxfmt/binding-linux-s390x-gnu@0.47.0': resolution: {integrity: sha512-REUPFKVGSiK99B+9eaPhluEVglzaoj/SMykNC5SUiV2RSsBfV5lWN7Y0iCIc251Wz3GaeAGZsJ/zj3gjarxdFg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] '@oxfmt/binding-linux-x64-gnu@0.47.0': resolution: {integrity: sha512-KVftVSVEDeIfRW3TIeLe3aNI/iY4m1fu5mDwHcisKMZSCMKLkrhFsjowC7o9RoqNPxbbglm2+/6KAKBIts2t0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] '@oxfmt/binding-linux-x64-musl@0.47.0': resolution: {integrity: sha512-DTsmGEaA2860Aq5VUyDO8/MT9NFxwVL93RnRYmpMwK6DsSkThmvEpqoUDDljziEpAedMRG19SCogrNbINSbLUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] '@oxfmt/binding-openharmony-arm64@0.47.0': resolution: {integrity: sha512-8r5BDro7fLOBoq1JXHLVSs55OlrxQhEso4HVo0TcY7OXJUPYfjPoOaYL5us+yIwqyP9rQwN+rxuiNFSmaxSuOQ==} @@ -1823,56 +1928,48 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] '@oxlint/binding-linux-arm64-musl@1.64.0': resolution: {integrity: sha512-00QQ0h0Y7u0G69BgiH3+ky2aaq/QvkDL6DYok8htIuJHxybiux5aQ8jwmg8qIk9wha6UagUP2BAwAzbemcJbpg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] '@oxlint/binding-linux-ppc64-gnu@1.64.0': resolution: {integrity: sha512-2GaimTV6EMW+s5HS0An3oGbQme3BgHswvfVdGk3EB57Xe9+/gyT+Qd7lNVzb3rtir52vbIPzXfaYArzs5b5zcw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@oxlint/binding-linux-riscv64-gnu@1.64.0': resolution: {integrity: sha512-H46AtFb9wypjoVwGdlxrm0DsD809NGmtiK9HiyPKTxkSte2YjhC4S+00rOIrwCaxcyPiGid3Y3OMXp5KMAkGZw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [glibc] '@oxlint/binding-linux-riscv64-musl@1.64.0': resolution: {integrity: sha512-HEgsidjjvvyzdg82icYkuFCf7REDV7B9JFwbIMbVwrKLBY0MrXX+bku3POn/hduZ2yW91IyVDUMq0Bf02KwXQw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [musl] '@oxlint/binding-linux-s390x-gnu@1.64.0': resolution: {integrity: sha512-Axvm8qryotmKN00P5w4JapaSjvP2LOSbdbBJiX+2SuHd3QzhW7TUc8skqgw+ahQZ5DmzEYeHCqauvW8f32Ns6Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] '@oxlint/binding-linux-x64-gnu@1.64.0': resolution: {integrity: sha512-cR60vSd7+m+KRZ3GQGfDxWwahW5RMXg0qlGvAluZr0fTUYvw0H9N9AXAF/M/PMqgytyqvVNmBAkJG9l7U30Y1g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] '@oxlint/binding-linux-x64-musl@1.64.0': resolution: {integrity: sha512-2u/aPZ9pEg7HnvZPDsHxUGNnrpr4qaHi+mCgLgpt+LYRzPrS4Px4wPfkIdRdr2GvKnaYyt+XSlto0Vm5sbStTg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] '@oxlint/binding-openharmony-arm64@1.64.0': resolution: {integrity: sha512-kfhkGfCdoXLSxEkrhDlJrvBYajGmq+ma4EMc53dsOWTq+rIBOlI0vTBmpZNnM5oH2LY/K/w1HAK+UQEgjgpVUg==} @@ -1898,11 +1995,6 @@ packages: cpu: [x64] os: [win32] - '@playwright/test@1.51.1': - resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==} - engines: {node: '>=18'} - hasBin: true - '@prisma/config@6.8.2': resolution: {integrity: sha512-ZJY1fF4qRBPdLQ/60wxNtX+eu89c3AkYEcP7L3jkp0IPXCNphCYxikTg55kPJLDOG6P0X+QG5tCv6CmsBRZWFQ==} @@ -1953,17 +2045,23 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} + '@rolldown/binding-android-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@rolldown/binding-android-arm64@1.0.0-rc.17': resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-android-arm64@1.0.2': - resolution: {integrity: sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] - os: [android] + os: [darwin] '@rolldown/binding-darwin-arm64@1.0.0-rc.17': resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==} @@ -1971,10 +2069,10 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.2': - resolution: {integrity: sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w==} + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + cpu: [x64] os: [darwin] '@rolldown/binding-darwin-x64@1.0.0-rc.17': @@ -1983,11 +2081,11 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.2': - resolution: {integrity: sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] - os: [darwin] + os: [freebsd] '@rolldown/binding-freebsd-x64@1.0.0-rc.17': resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==} @@ -1995,11 +2093,11 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.2': - resolution: {integrity: sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] + cpu: [arm] + os: [linux] '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==} @@ -2007,10 +2105,10 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.2': - resolution: {integrity: sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] + cpu: [arm64] os: [linux] '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': @@ -2018,84 +2116,72 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.0.2': - resolution: {integrity: sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.0.2': - resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + cpu: [ppc64] os: [linux] - libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] - '@rolldown/binding-linux-ppc64-gnu@1.0.2': - resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] + cpu: [s390x] os: [linux] - libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.2': - resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] + cpu: [x64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.2': - resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] - '@rolldown/binding-linux-x64-musl@1.0.2': - resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] + cpu: [arm64] + os: [openharmony] '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} @@ -2103,21 +2189,21 @@ packages: cpu: [arm64] os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.0.2': - resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.2': - resolution: {integrity: sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] + cpu: [arm64] + os: [win32] '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==} @@ -2125,10 +2211,10 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.2': - resolution: {integrity: sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + cpu: [x64] os: [win32] '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': @@ -2137,11 +2223,8 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.2': - resolution: {integrity: sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] + '@rolldown/pluginutils@1.0.0-rc.12': + resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} '@rolldown/pluginutils@1.0.0-rc.17': resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==} @@ -2149,9 +2232,6 @@ packages: '@rolldown/pluginutils@1.0.0-rc.3': resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} - '@rolldown/pluginutils@1.0.1': - resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} @@ -2195,85 +2275,71 @@ packages: resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.60.0': resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.60.0': resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.60.0': resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.60.0': resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==} cpu: [loong64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.60.0': resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==} cpu: [loong64] os: [linux] - libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.60.0': resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.60.0': resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==} cpu: [ppc64] os: [linux] - libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.60.0': resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.60.0': resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==} cpu: [riscv64] os: [linux] - libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.60.0': resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.0': resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.2': resolution: {integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.60.0': resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-openbsd-x64@4.60.0': resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==} @@ -2364,28 +2430,24 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [glibc] '@swc/core-linux-arm64-musl@1.12.11': resolution: {integrity: sha512-LlBxPh/32pyQsu2emMEOFRm7poEFLsw12Y1mPY7FWZiZeptomKSOSHRzKDz9EolMiV4qhK1caP1lvW4vminYgQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [musl] '@swc/core-linux-x64-gnu@1.12.11': resolution: {integrity: sha512-bOjiZB8O/1AzHkzjge1jqX62HGRIpOHqFUrGPfAln/NC6NR+Z2A78u3ixV7k5KesWZFhCV0YVGJL+qToL27myA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [glibc] '@swc/core-linux-x64-musl@1.12.11': resolution: {integrity: sha512-4dzAtbT/m3/UjF045+33gLiHd8aSXJDoqof7gTtu4q0ZyAf7XJ3HHspz+/AvOJLVo4FHHdFcdXhmo/zi1nFn8A==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [musl] '@swc/core-win32-arm64-msvc@1.12.11': resolution: {integrity: sha512-h8HiwBZErKvCAmjW92JvQp0iOqm6bncU4ac5jxBGkRApabpUenNJcj3h2g5O6GL5K6T9/WhnXE5gyq/s1fhPQg==} @@ -2439,69 +2501,134 @@ packages: resolution: {integrity: sha512-XRzhSGAa46tdeR8TIfFBXUMHIxU5tMO/vueB+ocVaeC0wjktj+PfXsE1bOD99kP0+ox0Jm8eTpnNwDlSxfGJGg==} hasBin: true - '@tailwindcss/node@4.3.0': - resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} + '@tailwindcss/node@4.2.2': + resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} + + '@tailwindcss/node@4.2.4': + resolution: {integrity: sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==} + + '@tailwindcss/oxide-android-arm64@4.2.2': + resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-android-arm64@4.2.4': + resolution: {integrity: sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] - '@tailwindcss/oxide-android-arm64@4.3.0': - resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==} + '@tailwindcss/oxide-darwin-arm64@4.2.2': + resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==} engines: {node: '>= 20'} cpu: [arm64] - os: [android] + os: [darwin] - '@tailwindcss/oxide-darwin-arm64@4.3.0': - resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==} + '@tailwindcss/oxide-darwin-arm64@4.2.4': + resolution: {integrity: sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==} engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.3.0': - resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==} + '@tailwindcss/oxide-darwin-x64@4.2.2': + resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.2.4': + resolution: {integrity: sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==} engines: {node: '>= 20'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.3.0': - resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==} + '@tailwindcss/oxide-freebsd-x64@4.2.2': + resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-freebsd-x64@4.2.4': + resolution: {integrity: sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==} engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': - resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': + resolution: {integrity: sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==} engines: {node: '>= 20'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': - resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==} + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': + resolution: {integrity: sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] - libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.3.0': - resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==} + '@tailwindcss/oxide-linux-arm64-musl@4.2.4': + resolution: {integrity: sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] - libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.3.0': - resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==} + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.2.4': + resolution: {integrity: sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.2.2': + resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} engines: {node: '>= 20'} cpu: [x64] os: [linux] - libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.3.0': - resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==} + '@tailwindcss/oxide-linux-x64-musl@4.2.4': + resolution: {integrity: sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==} engines: {node: '>= 20'} cpu: [x64] os: [linux] - libc: [musl] - '@tailwindcss/oxide-wasm32-wasi@4.3.0': - resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==} + '@tailwindcss/oxide-wasm32-wasi@4.2.2': + resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-wasm32-wasi@4.2.4': + resolution: {integrity: sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -2512,27 +2639,43 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': - resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==} + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==} engines: {node: '>= 20'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.3.0': - resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==} + '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': + resolution: {integrity: sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.2.4': + resolution: {integrity: sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==} engines: {node: '>= 20'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.3.0': - resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==} + '@tailwindcss/oxide@4.2.2': + resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==} engines: {node: '>= 20'} - '@tailwindcss/postcss@4.3.0': - resolution: {integrity: sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w==} + '@tailwindcss/oxide@4.2.4': + resolution: {integrity: sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==} + engines: {node: '>= 20'} + + '@tailwindcss/postcss@4.2.4': + resolution: {integrity: sha512-wgAVj6nUWAolAu8YFvzT2cTBIElWHkjZwFYovF+xsqKsW2ADxM/X2opxj5NsF/qVccAOjRNe8X2IdPzMsWyHTg==} - '@tailwindcss/vite@4.3.0': - resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==} + '@tailwindcss/vite@4.2.2': + resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 @@ -2592,33 +2735,33 @@ packages: '@ts-morph/common@0.29.0': resolution: {integrity: sha512-35oUmphHbJvQ/+UTwFNme/t2p3FoKiGJ5auTjjpNTop2dyREspirjMy82PLSC1pnDJ8ah1GU98hwpVt64YXQsg==} - '@turbo/darwin-64@2.9.14': - resolution: {integrity: sha512-t7QiPflaEyBE4oayeZtSmu4mEfjgIrcNlNNl1z1dmIVPqEdtA7+CfTf8d7KXsOGPh6aNgWjKxyvQg9uGfDQF+A==} + '@turbo/darwin-64@2.9.1': + resolution: {integrity: sha512-d1zTcIf6VWT7cdfjhi0X36C2PRsUi2HdEwYzVgkLHmuuYtL+1Y1Zu3JdlouoB/NjG2vX3q4NnKLMNhDOEweoIg==} cpu: [x64] os: [darwin] - '@turbo/darwin-arm64@2.9.14': - resolution: {integrity: sha512-d23147mC9BsCPA9mJ0h/ubcpbRgcJBXbcG3+Vq7YLhjz3IXuvQsJ1UXH8f4MD76ZjJ4m/E4aRdJV+MW88CDfbw==} + '@turbo/darwin-arm64@2.9.1': + resolution: {integrity: sha512-AwJ4mA++Kpem33Lcov093hS1LrgqbKxqq5FCReoqsA8ayEG6eAJAo8ItDd9qQTdBiXxZH8GHCspLAMIe1t3Xyw==} cpu: [arm64] os: [darwin] - '@turbo/linux-64@2.9.14': - resolution: {integrity: sha512-P3ZKB5tuUDdDQWuAsACGUR1qv9W7BNWxdxqVJ0kZNuNNPRaVYTPPikLcp79+GiEcW3npsR+KyP38lnQiBc5aSA==} + '@turbo/linux-64@2.9.1': + resolution: {integrity: sha512-HT9SjKkjEw9uvlgly/qwCGEm4wOXOwQPSPS+wkg+/O1Qan3F1uU/0PFYzxl3m4lfuV3CP9wr2Dq5dPrUX+B9Ag==} cpu: [x64] os: [linux] - '@turbo/linux-arm64@2.9.14': - resolution: {integrity: sha512-ZRTlzcUMrrPv9ZuDzRF9n60Ym13bKeG9jDB8WjxyLhWNzV+AJQN+zdpIk3NJYf2zQsGUm1mNar2P0elRzLw25g==} + '@turbo/linux-arm64@2.9.1': + resolution: {integrity: sha512-+4s5GZs3kjxc1KMhLBhoQy4UBkXjOhgidA9ipNllkA4JLivSqUCuOgU1Xbyp6vzYrsqHJ9vvwo/2mXgEtD6ZHg==} cpu: [arm64] os: [linux] - '@turbo/windows-64@2.9.14': - resolution: {integrity: sha512-exanwN6sIduZwykYeiTQj8kCmOhazP5WOz3bvXMcYtjhL6Z3iRWLewKrXCBq0bqwSP3iBMb/AerRCnHI4lx46A==} + '@turbo/windows-64@2.9.1': + resolution: {integrity: sha512-ZO7GCyQd5HV564XWHc9KysjanFfM3DmnWquyEByu+hQMq42g9OMU/fYOCfHS6Xj2aXkIg2FHJeRV+iAck2YrbQ==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.9.14': - resolution: {integrity: sha512-fVdCsnmYoKICsycbWuuGp6Jvi51/3G/UluFWuAUCvR8PIW5IJkAk5BM9UF8PSm0Q2IphWHFZjYEgjHsh3B9y/g==} + '@turbo/windows-arm64@2.9.1': + resolution: {integrity: sha512-BjX2fdz38mBb/H94JXrD5cJ+mEq8NmsCbYdC42JzQebJ0X8EdNgyFoEhOydPGViOmaRmhhdZnPZKKn6wahSpcA==} cpu: [arm64] os: [win32] @@ -2646,6 +2789,9 @@ packages: '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -2664,8 +2810,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@25.9.1': - resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} + '@types/node@25.6.0': + resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} '@types/papaparse@5.5.2': resolution: {integrity: sha512-gFnFp/JMzLHCwRf7tQHrNnfhN4eYBVYYI897CGX4MY1tzY9l2aLkVyx2IlKZ/SAqDbB3I1AOZW5gTMGGsqWliA==} @@ -2678,6 +2824,9 @@ packages: '@types/react@19.2.13': resolution: {integrity: sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==} + '@types/statuses@2.0.6': + resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} + '@types/tinycolor2@1.4.6': resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} @@ -2722,11 +2871,11 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@vitest/expect@4.1.7': - resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} + '@vitest/expect@4.1.4': + resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==} - '@vitest/mocker@4.1.7': - resolution: {integrity: sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==} + '@vitest/mocker@4.1.4': + resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2736,20 +2885,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.7': - resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==} + '@vitest/pretty-format@4.1.4': + resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==} - '@vitest/runner@4.1.7': - resolution: {integrity: sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==} + '@vitest/runner@4.1.4': + resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==} - '@vitest/snapshot@4.1.7': - resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==} + '@vitest/snapshot@4.1.4': + resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==} - '@vitest/spy@4.1.7': - resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==} + '@vitest/spy@4.1.4': + resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==} - '@vitest/utils@4.1.7': - resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} + '@vitest/utils@4.1.4': + resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} '@volar/language-core@2.4.27': resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} @@ -2808,6 +2957,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + ajv-draft-04@1.0.0: resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: @@ -2933,15 +3086,17 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.30: - resolution: {integrity: sha512-xjOFN16Ha1+Rz4nFYKqHU/LSB+gx/Vi3yQLX7r7sAW+Wa+8hhF2h4pvqTrTMc8+WcDBEunnUurr46Jvv0jk3Vg==} - engines: {node: '>=6.0.0'} + baseline-browser-mapping@2.9.19: + resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} + bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + birpc@4.0.0: resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} @@ -2994,8 +3149,8 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} - caniuse-lite@1.0.30001793: - resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} + caniuse-lite@1.0.30001770: + resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==} chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} @@ -3069,6 +3224,10 @@ packages: resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -3144,6 +3303,10 @@ packages: resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + cookie@1.1.1: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} @@ -3152,9 +3315,21 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + cssstyle@5.3.7: + resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==} + engines: {node: '>=20'} + csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + data-urls@6.0.1: + resolution: {integrity: sha512-euIQENZg6x8mj3fO6o9+fOW8MimUI4PpD/fZBhJfeioZVy9TUpM4UY7KjQNVZFlqwJ0UdzRDzkycB997HEq1BQ==} + engines: {node: '>=20'} + date-fns@4.1.0: resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} @@ -3178,6 +3353,9 @@ packages: supports-color: optional: true + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -3197,8 +3375,8 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - defu@6.1.7: - resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} dependency-tree@11.4.3: resolution: {integrity: sha512-Y2gzOJ2Rb2X7MN6pT9llWpXxl5J5s5/11CBpJ5b85DjEqZH7jv3T9RO6HRV/PI/3MDmaKn/g7uoYdYmSb9vLlw==} @@ -3274,13 +3452,9 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - - dts-resolver@3.0.0: - resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==} - engines: {node: ^22.18.0 || >=24.0.0} + dts-resolver@2.1.3: + resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} + engines: {node: '>=20.19.0'} peerDependencies: oxc-resolver: '>=11.0.0' peerDependenciesMeta: @@ -3310,8 +3484,12 @@ packages: resolution: {integrity: sha512-EuJWwlHPZ1LbADuKTClvHtwbaFn4rOD+dRAbWysqEOXRc2Uui0hJInNJrsdH0c+OhJA4nrCBdSkW4DD5YxAo6A==} engines: {node: '>=8.10.0'} - enhanced-resolve@5.21.3: - resolution: {integrity: sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==} + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + engines: {node: '>=10.13.0'} + + enhanced-resolve@5.21.0: + resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -3322,6 +3500,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + entities@7.0.1: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} @@ -3337,9 +3519,17 @@ packages: es-module-lexer@2.0.0: resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-toolkit@1.45.1: + resolution: {integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==} + es-toolkit@1.46.0: resolution: {integrity: sha512-IToJ6ct9OLl5zz6WsC/1vZEwfSZ7Myil+ygl5Tf30Xjn9AEkzNB4kqp2G7VUJKF1DtTx/ra5M5KLlXvzOg51BA==} + esbuild@0.27.4: + resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.27.7: resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} @@ -3392,10 +3582,6 @@ packages: exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -3467,11 +3653,6 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3488,6 +3669,10 @@ packages: resolution: {integrity: sha512-7zShVYAYtMnj9S65CfN+hvpBCByfuB1OY8xID01nZEzXTZbx4YyysAfi+nMl95JSR6odt4q8TCj2W63KAoyVLQ==} engines: {node: '>=18'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.5.0: resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} @@ -3499,13 +3684,12 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + get-tsconfig@4.13.7: + resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} + get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} - get-tsconfig@5.0.0-beta.5: - resolution: {integrity: sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==} - engines: {node: '>=20.20.0'} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3543,12 +3727,12 @@ packages: resolution: {integrity: sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} + graphql@16.14.0: + resolution: {integrity: sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - happy-dom@20.9.0: - resolution: {integrity: sha512-GZZ9mKe8r646NUAf/zemnGbjYh4Bt8/MqASJY+pSm5ZDtc3YQox+4gsLI7yi1hba6o+eCsGxpHn5+iEVn31/FQ==} + happy-dom@20.6.2: + resolution: {integrity: sha512-Xk/Y0cuq9ngN/my8uvK4gKoyDl6sBKkIl8A/hJ0IabZVH7E5SJLHNE7uKRPVmSrQbhJaLIHTEcvTct4GgNtsRA==} engines: {node: '>=20.0.0'} has-flag@4.0.0: @@ -3563,8 +3747,23 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - hookable@6.1.1: - resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==} + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + + hookable@6.1.0: + resolution: {integrity: sha512-ZoKZSJgu8voGK2geJS+6YtYjvIzu9AOM/KZXsBxr83uhLL++e9pEv/dlgwgy3dvHg06kTz6JOh1hk3C8Ceiymw==} + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} human-id@4.1.3: resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} @@ -3574,6 +3773,10 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + iconv-lite@0.7.2: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} @@ -3589,9 +3792,9 @@ packages: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} - import-without-cache@0.4.0: - resolution: {integrity: sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==} - engines: {node: ^22.18.0 || >=24.0.0} + import-without-cache@0.2.5: + resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==} + engines: {node: '>=20.19.0'} indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} @@ -3649,10 +3852,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3695,6 +3894,9 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3707,6 +3909,9 @@ packages: resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-regexp@1.0.0: resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} engines: {node: '>=0.10.0'} @@ -3757,8 +3962,8 @@ packages: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true - jiti@2.7.0: - resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true jju@1.4.0: @@ -3778,6 +3983,15 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + jsdom@27.0.0: + resolution: {integrity: sha512-lIHeR1qlIRrIN5VMccd8tI2Sgw6ieYXSVktcSHaNe3Z5nE/tcPQYQWOq00wxMvYOsz+73eAkNenVvmPC6bba9A==} + engines: {node: '>=20'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -3800,10 +4014,6 @@ packages: jsonfile@6.2.1: resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -3815,60 +4025,6 @@ packages: resolution: {integrity: sha512-3i5pmOiZvMDj00qhrIVbH0AnioVTx22DMP7Vn5At4yJO46iy+FM8Y/g61ltenLVSo3fiO8h8Q3QOFgf/gQ72ww==} engines: {node: '>=20.0.0'} - lefthook-darwin-arm64@2.1.6: - resolution: {integrity: sha512-hyB7eeiX78BS66f70byTJacDLC/xV1vgMv9n+idFUsrM7J3Udd/ag9Ag5NP3t0eN0EqQqAtrNnt35EH01lxnRQ==} - cpu: [arm64] - os: [darwin] - - lefthook-darwin-x64@2.1.6: - resolution: {integrity: sha512-5Ka6cFxiH83krt+OMRQtmS6zqoZR5SLXSudLjTbZA1c3ZqF0+dqkeb4XcB6plx6WR0GFizabuc6Bi3iXPIe1eQ==} - cpu: [x64] - os: [darwin] - - lefthook-freebsd-arm64@2.1.6: - resolution: {integrity: sha512-VswyOg5CVN3rMaOJ2HtnkltiMKgFHW/wouWxXsV8RxSa4tgWOKxM0EmSXi8qc2jX+LRga6B0uOY6toXS01zWxA==} - cpu: [arm64] - os: [freebsd] - - lefthook-freebsd-x64@2.1.6: - resolution: {integrity: sha512-vXsCUFYuVwrVWwcypB7Zt2Hf+5pl1V1la7ZfvGYZaTRURu0zF/XUnMF/nOz/PebGv0f4x/iOWXWwP7E42xRWsg==} - cpu: [x64] - os: [freebsd] - - lefthook-linux-arm64@2.1.6: - resolution: {integrity: sha512-WDJiQhJdZOvKORZd+kF/ms2l6NSsXzdA9ahflyr65V90AC4jES223W8VtEMbGPUtHuGWMEZ/v/XvwlWv0Ioz9g==} - cpu: [arm64] - os: [linux] - - lefthook-linux-x64@2.1.6: - resolution: {integrity: sha512-C18nCd7nTX1AVL4TcvwMmLAO1VI1OuGluIOTjiPkBQ746Ls1HhL5rl//jMPACmT28YmxIQJ2ZcLPNmhvEVBZvw==} - cpu: [x64] - os: [linux] - - lefthook-openbsd-arm64@2.1.6: - resolution: {integrity: sha512-mZOMxM8HiPxVFXDO3PtCUbH4GB8rkveXhsgXF27oAZTYVzQ3gO9vT6r/pxit6msqRXz3fvcwimLVJgb8eRsa8A==} - cpu: [arm64] - os: [openbsd] - - lefthook-openbsd-x64@2.1.6: - resolution: {integrity: sha512-sG9ALLZSnnMOfXu+B7SmxFhJhuoAh4bqi5En5aaHJET48TqrLOcWWZuH+7ArFM6gr/U5KfSUvdmHFmY8WqCcIg==} - cpu: [x64] - os: [openbsd] - - lefthook-windows-arm64@2.1.6: - resolution: {integrity: sha512-lD8yFWY4Csuljd0Rqs7EQaySC0VvDf7V3rN1FhRMUISTRDHutebIom1Loc8ckQPvKYGC6mftT9k0GvipsS+Brw==} - cpu: [arm64] - os: [win32] - - lefthook-windows-x64@2.1.6: - resolution: {integrity: sha512-q4z2n3xucLscoWiyMwFViEj3N8MDSkPulMwcJYuCYFHoPhP1h+icqNu7QRLGYj6AnVrCQweiUJY3Tb2X+GbD/A==} - cpu: [x64] - os: [win32] - - lefthook@2.1.6: - resolution: {integrity: sha512-w9sBoR0mdN+kJc3SB85VzpiAAl451/rxdCRcZlwW71QLjkeH3EBQFgc4VMj5apePychYDHAlqEWTB8J8JK/j1Q==} - hasBin: true - lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} @@ -3904,28 +4060,24 @@ packages: 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==} @@ -3979,6 +4131,10 @@ packages: resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} engines: {node: 20 || >=22} + lru-cache@11.3.6: + resolution: {integrity: sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -4008,6 +4164,9 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -4094,6 +4253,16 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msw@2.11.2: + resolution: {integrity: sha512-MI54hLCsrMwiflkcqlgYYNJJddY5/+S0SnONvhv1owOplvqohKSQyGejpNdUGyCwgs4IH7PqaNbPw/sKOEze9Q==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} @@ -4127,8 +4296,8 @@ packages: resolution: {integrity: sha512-kOCT/1MCPAxY5iUV3wytNFUMUolzuwd/VF/1KCx7kf6CutrOsTie+84zTGTpgQycjvfLdBBdvBvFLqFD2c0wkQ==} engines: {node: '>=18'} - next@16.2.6: - resolution: {integrity: sha512-qOVgKJg1+At15NpeUP+eJgCHvTCgXsogweq87Ri/Ix7PkqQHg4sdaXmSFqKlgaIXE4kW0g25LE68W87UANlHtw==} + next@16.2.3: + resolution: {integrity: sha512-9V3zV4oZFza3PVev5/poB9g0dEafVcgNyQ8eTRop8GvxZjV2G15FC5ARuG1eFD42QgeYkzJBJzHghNP8Ad9xtA==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -4199,6 +4368,9 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + oxc-parser@0.127.0: resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4255,6 +4427,9 @@ packages: resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} engines: {node: '>=6'} + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + patch-console@2.0.0: resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4283,6 +4458,9 @@ packages: path-to-regexp@3.3.0: resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -4300,6 +4478,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} @@ -4314,16 +4496,6 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - playwright-core@1.51.1: - resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} - engines: {node: '>=18'} - hasBin: true - - playwright@1.51.1: - resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} - engines: {node: '>=18'} - hasBin: true - pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -4355,8 +4527,8 @@ packages: resolution: {integrity: sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.14: - resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + postcss@8.5.13: + resolution: {integrity: sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==} engines: {node: ^10 || ^12 || >=14} powershell-utils@0.1.0: @@ -4433,11 +4605,6 @@ packages: peerDependencies: react: ^19.2.5 - react-dom@19.2.6: - resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} - peerDependencies: - react: ^19.2.6 - react-hook-form@7.71.2: resolution: {integrity: sha512-1CHvcDYzuRUNOflt4MOq3ZM46AronNJtQ1S7tnX6YN4y72qhgiUItpacZUAQ0TyWYci3yz1X+rXaSxiuEm86PA==} engines: {node: '>=18.0.0'} @@ -4478,10 +4645,6 @@ packages: resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} engines: {node: '>=0.10.0'} - react@19.2.6: - resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} - engines: {node: '>=0.10.0'} - read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -4501,6 +4664,10 @@ packages: resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} engines: {node: '>=0.10.0'} + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -4514,8 +4681,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - reselect@5.2.0: - resolution: {integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==} + reselect@5.1.1: + resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} resolve-dependency-path@4.0.1: resolution: {integrity: sha512-YQftIIC4vzO9UMhO/sCgXukNyiwVRCVaxiWskCBy7Zpqkplm8kTAISZ8O1MoKW1ca6xzgLUBjZTcDgypXvXxiQ==} @@ -4559,17 +4726,20 @@ packages: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} + rettime@0.7.0: + resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown-plugin-dts@0.25.1: - resolution: {integrity: sha512-zK82aC/8z1iVW+g0bCnlQZq04Y5bNeL/RcRwTYBwsnU6wH0N+6vpIFkN7JC0kYRS5qKA+pxQyfIPvXJ6Q5xSpQ==} - engines: {node: ^22.18.0 || >=24.0.0} + rolldown-plugin-dts@0.23.2: + resolution: {integrity: sha512-PbSqLawLgZBGcOGT3yqWBGn4cX+wh2nt5FuBGdcMHyOhoukmjbhYAl8NT9sE4U38Cm9tqLOIQeOrvzeayM0DLQ==} + engines: {node: '>=20.19.0'} peerDependencies: '@ts-macro/tsc': ^0.3.6 '@typescript/native-preview': '>=7.0.0-dev.20260325.1' - rolldown: ^1.0.0 + rolldown: ^1.0.0-rc.12 typescript: ^5.0.0 || ^6.0.0 vue-tsc: ~3.2.0 peerDependenciesMeta: @@ -4582,13 +4752,13 @@ packages: vue-tsc: optional: true - rolldown@1.0.0-rc.17: - resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} + rolldown@1.0.0-rc.12: + resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.0.2: - resolution: {integrity: sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g==} + rolldown@1.0.0-rc.17: + resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -4597,6 +4767,9 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -4622,6 +4795,10 @@ packages: engines: {node: '>=18'} hasBin: true + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} @@ -4631,10 +4808,6 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4649,11 +4822,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.8.0: - resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} - engines: {node: '>=10'} - hasBin: true - serve-handler@6.1.7: resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} @@ -4737,6 +4905,13 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + std-env@4.0.0: + resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} + std-env@4.1.0: resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} @@ -4747,6 +4922,9 @@ packages: stream-to-array@2.3.0: resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -4782,10 +4960,6 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} - strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -4832,6 +5006,9 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + table@6.9.0: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} @@ -4840,11 +5017,18 @@ packages: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tailwind-merge@3.6.0: - resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} + tailwind-merge@3.5.0: + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} + + tailwindcss@4.2.2: + resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} - tailwindcss@4.3.0: - resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} + tailwindcss@4.2.4: + resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==} + + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} tapable@2.3.3: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} @@ -4860,10 +5044,14 @@ packages: tinycolor2@1.6.0: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - tinyexec@1.2.2: - resolution: {integrity: sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==} + tinyexec@1.0.4: + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + tinyglobby@0.2.16: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} @@ -4879,10 +5067,25 @@ packages: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} + tldts-core@7.0.30: + resolution: {integrity: sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q==} + + tldts@7.0.30: + resolution: {integrity: sha512-ELrFxuqsDdHUwoh0XxDbxuLD3Wnz49Z57IFvTtvWy1hJdcMZjXLIuonjilCiWHlT2GbE4Wlv1wKVTzDFnXH1aw==} + hasBin: true + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + 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-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -4917,20 +5120,18 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tsdown@0.22.0: - resolution: {integrity: sha512-FgW0hHb27nGQA/+F3d5+U9wKXkfilk9DVkc5+7x/ZqF03g+Hoz/eeApT32jqxATt9eRoR+1jxk7MUMON+O4CXw==} - engines: {node: ^22.18.0 || >=24.0.0} + tsdown@0.21.7: + resolution: {integrity: sha512-ukKIxKQzngkWvOYJAyptudclkm4VQqbjq+9HF5K5qDO8GJsYtMh8gIRwicbnZEnvFPr6mquFwYAVZ8JKt3rY2g==} + engines: {node: '>=20.19.0'} hasBin: true peerDependencies: '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.22.0 - '@tsdown/exe': 0.22.0 + '@tsdown/css': 0.21.7 + '@tsdown/exe': 0.21.7 '@vitejs/devtools': '*' - publint: ^0.3.8 - tsx: '*' + publint: ^0.3.0 typescript: ^5.0.0 || ^6.0.0 unplugin-unused: ^0.5.0 - unrun: '*' peerDependenciesMeta: '@arethetypeswrong/core': optional: true @@ -4942,14 +5143,10 @@ packages: optional: true publint: optional: true - tsx: - optional: true typescript: optional: true unplugin-unused: optional: true - unrun: - optional: true tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -4959,8 +5156,8 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo@2.9.14: - resolution: {integrity: sha512-BQqXRr4UoWI3UPFrtznCLykYHxwxWh53iCB57x092jPMjIlW1wnm3N895g5irpiXmnxUhREBB0n6+y8BHhs4nw==} + turbo@2.9.1: + resolution: {integrity: sha512-TO9du8MwLTAKoXcGezekh9cPJabJUb0+8KxtpMR6kXdRASrmJ8qXf2GkVbCREgzbMQakzfNcux9cZtxheDY4RQ==} hasBin: true tw-animate-css@1.4.0: @@ -5001,8 +5198,8 @@ packages: unconfig-core@7.5.0: resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==} - undici-types@7.24.6: - resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + undici-types@7.19.2: + resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -5012,6 +5209,16 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unrun@0.2.34: + resolution: {integrity: sha512-LyaghRBR++r7svhDK6tnDz2XaYHWdneBOA0jbS8wnRsHerI9MFljX4fIiTgbbNbEVzZ0C9P1OjWLLe1OqoaaEw==} + engines: {node: '>=20.19.0'} + hasBin: true + peerDependencies: + synckit: ^0.11.11 + peerDependenciesMeta: + synckit: + optional: true + update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true @@ -5103,20 +5310,20 @@ packages: yaml: optional: true - vitest@4.1.7: - resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==} + vitest@4.1.4: + resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==} 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.7 - '@vitest/browser-preview': 4.1.7 - '@vitest/browser-webdriverio': 4.1.7 - '@vitest/coverage-istanbul': 4.1.7 - '@vitest/coverage-v8': 4.1.7 - '@vitest/ui': 4.1.7 + '@vitest/browser-playwright': 4.1.4 + '@vitest/browser-preview': 4.1.4 + '@vitest/browser-webdriverio': 4.1.4 + '@vitest/coverage-istanbul': 4.1.4 + '@vitest/coverage-v8': 4.1.4 + '@vitest/ui': 4.1.4 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -5147,6 +5354,10 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + walkdir@0.4.1: resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==} engines: {node: '>=6.0.0'} @@ -5154,10 +5365,31 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + webidl-conversions@8.0.1: + resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} + engines: {node: '>=20'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-mimetype@5.0.0: + resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} + engines: {node: '>=20'} + + whatwg-url@15.1.0: + resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} + engines: {node: '>=20'} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -5183,6 +5415,10 @@ packages: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} @@ -5191,8 +5427,20 @@ packages: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} - ws@8.21.0: - resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5211,12 +5459,36 @@ packages: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + yocto-queue@1.2.2: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} @@ -5232,12 +5504,12 @@ packages: yoga-layout@3.2.1: resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + snapshots: '@0no-co/graphql.web@1.2.0(graphql@16.13.2)': @@ -5251,9 +5523,30 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@babel/code-frame@7.29.7': + '@asamuzakjp/css-color@4.1.2': + dependencies: + '@csstools/css-calc': 3.2.0(@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.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) + '@csstools/css-tokenizer': 4.0.0 + lru-cache: 11.3.6 + optional: true + + '@asamuzakjp/dom-selector@6.8.1': + dependencies: + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.2.1 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.3.6 + optional: true + + '@asamuzakjp/nwsapi@2.3.9': + optional: true + + '@babel/code-frame@7.29.0': dependencies: - '@babel/helper-validator-identifier': 7.29.7 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -5261,12 +5554,12 @@ snapshots: '@babel/core@7.29.0': dependencies: - '@babel/code-frame': 7.29.7 + '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.3 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 @@ -5281,16 +5574,16 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.3 + '@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/generator@8.0.0-rc.5': + '@babel/generator@8.0.0-rc.3': dependencies: - '@babel/parser': 8.0.0-rc.6 - '@babel/types': 8.0.0-rc.6 + '@babel/parser': 8.0.0-rc.3 + '@babel/types': 8.0.0-rc.3 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 '@types/jsesc': 2.5.1 @@ -5317,7 +5610,7 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.29.7 + '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -5326,15 +5619,11 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-string-parser@8.0.0-rc.6': {} + '@babel/helper-string-parser@8.0.0-rc.3': {} '@babel/helper-validator-identifier@7.28.5': {} - '@babel/helper-validator-identifier@7.29.7': {} - - '@babel/helper-validator-identifier@8.0.0-rc.5': {} - - '@babel/helper-validator-identifier@8.0.0-rc.6': {} + '@babel/helper-validator-identifier@8.0.0-rc.3': {} '@babel/helper-validator-option@7.27.1': {} @@ -5343,17 +5632,21 @@ snapshots: '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@babel/parser@7.29.3': + '@babel/parser@7.29.0': + dependencies: + '@babel/types': 7.29.0 + + '@babel/parser@7.29.2': dependencies: '@babel/types': 7.29.0 - '@babel/parser@8.0.0-rc.4': + '@babel/parser@7.29.3': dependencies: - '@babel/types': 8.0.0-rc.6 + '@babel/types': 7.29.0 - '@babel/parser@8.0.0-rc.6': + '@babel/parser@8.0.0-rc.3': dependencies: - '@babel/types': 8.0.0-rc.6 + '@babel/types': 8.0.0-rc.3 '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: @@ -5369,20 +5662,18 @@ snapshots: '@babel/runtime@7.29.2': {} - '@babel/runtime@7.29.7': {} - '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.29.7 - '@babel/parser': 7.29.3 + '@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.7 + '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.3 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -5394,39 +5685,49 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@babel/types@8.0.0-rc.6': + '@babel/types@8.0.0-rc.3': dependencies: - '@babel/helper-string-parser': 8.0.0-rc.6 - '@babel/helper-validator-identifier': 8.0.0-rc.6 + '@babel/helper-string-parser': 8.0.0-rc.3 + '@babel/helper-validator-identifier': 8.0.0-rc.3 '@badgateway/oauth2-client@3.3.1': {} - '@base-ui/react@1.5.0(@types/react@19.2.13)(date-fns@4.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@base-ui/react@1.4.1(@types/react@19.2.13)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@babel/runtime': 7.29.2 - '@base-ui/utils': 0.2.9(@types/react@19.2.13)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@base-ui/utils': 0.2.8(@types/react@19.2.13)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5) '@floating-ui/utils': 0.2.11 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - use-sync-external-store: 1.6.0(react@19.2.6) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + use-sync-external-store: 1.6.0(react@19.2.5) optionalDependencies: '@types/react': 19.2.13 date-fns: 4.1.0 - '@base-ui/utils@0.2.9(@types/react@19.2.13)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@base-ui/utils@0.2.8(@types/react@19.2.13)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@babel/runtime': 7.29.2 '@floating-ui/utils': 0.2.11 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - reselect: 5.2.0 - use-sync-external-store: 1.6.0(react@19.2.6) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + reselect: 5.1.1 + use-sync-external-store: 1.6.0(react@19.2.5) optionalDependencies: '@types/react': 19.2.13 '@bufbuild/protobuf@2.12.0': {} + '@bundled-es-modules/cookie@2.0.1': + dependencies: + cookie: 0.7.2 + optional: true + + '@bundled-es-modules/statuses@1.0.1': + dependencies: + statuses: 2.0.2 + optional: true + '@changesets/apply-release-plan@7.1.1': dependencies: '@changesets/config': 3.1.4 @@ -5456,7 +5757,7 @@ snapshots: dependencies: '@changesets/types': 6.1.0 - '@changesets/cli@2.31.0(@types/node@25.9.1)': + '@changesets/cli@2.31.0(@types/node@25.6.0)': dependencies: '@changesets/apply-release-plan': 7.1.1 '@changesets/assemble-release-plan': 6.0.10 @@ -5472,7 +5773,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@25.9.1) + '@inquirer/external-editor': 1.0.3(@types/node@25.6.0) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 enquirer: 2.4.1 @@ -5579,6 +5880,36 @@ snapshots: dependencies: '@bufbuild/protobuf': 2.12.0 + '@csstools/color-helpers@6.0.2': + optional: true + + '@csstools/css-calc@3.2.0(@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 + optional: true + + '@csstools/css-color-parser@4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/color-helpers': 6.0.2 + '@csstools/css-calc': 3.2.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) + '@csstools/css-tokenizer': 4.0.0 + optional: true + + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + optional: true + + '@csstools/css-syntax-patches-for-csstree@1.1.3(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 + optional: true + + '@csstools/css-tokenizer@4.0.0': + optional: true + '@dependents/detective-less@5.0.3': dependencies: gonzales-pe: 4.3.0 @@ -5601,6 +5932,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.9.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.9.2': dependencies: tslib: 2.8.1 @@ -5611,81 +5947,159 @@ snapshots: tslib: 2.8.1 optional: true + '@esbuild/aix-ppc64@0.27.4': + optional: true + '@esbuild/aix-ppc64@0.27.7': optional: true + '@esbuild/android-arm64@0.27.4': + optional: true + '@esbuild/android-arm64@0.27.7': optional: true + '@esbuild/android-arm@0.27.4': + optional: true + '@esbuild/android-arm@0.27.7': optional: true + '@esbuild/android-x64@0.27.4': + optional: true + '@esbuild/android-x64@0.27.7': optional: true + '@esbuild/darwin-arm64@0.27.4': + optional: true + '@esbuild/darwin-arm64@0.27.7': optional: true + '@esbuild/darwin-x64@0.27.4': + optional: true + '@esbuild/darwin-x64@0.27.7': optional: true + '@esbuild/freebsd-arm64@0.27.4': + optional: true + '@esbuild/freebsd-arm64@0.27.7': optional: true + '@esbuild/freebsd-x64@0.27.4': + optional: true + '@esbuild/freebsd-x64@0.27.7': optional: true + '@esbuild/linux-arm64@0.27.4': + optional: true + '@esbuild/linux-arm64@0.27.7': optional: true + '@esbuild/linux-arm@0.27.4': + optional: true + '@esbuild/linux-arm@0.27.7': optional: true + '@esbuild/linux-ia32@0.27.4': + optional: true + '@esbuild/linux-ia32@0.27.7': optional: true + '@esbuild/linux-loong64@0.27.4': + optional: true + '@esbuild/linux-loong64@0.27.7': optional: true + '@esbuild/linux-mips64el@0.27.4': + optional: true + '@esbuild/linux-mips64el@0.27.7': optional: true + '@esbuild/linux-ppc64@0.27.4': + optional: true + '@esbuild/linux-ppc64@0.27.7': optional: true + '@esbuild/linux-riscv64@0.27.4': + optional: true + '@esbuild/linux-riscv64@0.27.7': optional: true + '@esbuild/linux-s390x@0.27.4': + optional: true + '@esbuild/linux-s390x@0.27.7': optional: true + '@esbuild/linux-x64@0.27.4': + optional: true + '@esbuild/linux-x64@0.27.7': optional: true + '@esbuild/netbsd-arm64@0.27.4': + optional: true + '@esbuild/netbsd-arm64@0.27.7': optional: true + '@esbuild/netbsd-x64@0.27.4': + optional: true + '@esbuild/netbsd-x64@0.27.7': optional: true + '@esbuild/openbsd-arm64@0.27.4': + optional: true + '@esbuild/openbsd-arm64@0.27.7': optional: true + '@esbuild/openbsd-x64@0.27.4': + optional: true + '@esbuild/openbsd-x64@0.27.7': optional: true + '@esbuild/openharmony-arm64@0.27.4': + optional: true + '@esbuild/openharmony-arm64@0.27.7': optional: true + '@esbuild/sunos-x64@0.27.4': + optional: true + '@esbuild/sunos-x64@0.27.7': optional: true + '@esbuild/win32-arm64@0.27.4': + optional: true + '@esbuild/win32-arm64@0.27.7': optional: true + '@esbuild/win32-ia32@0.27.4': + optional: true + '@esbuild/win32-ia32@0.27.7': optional: true + '@esbuild/win32-x64@0.27.4': + optional: true + '@esbuild/win32-x64@0.27.7': optional: true @@ -5698,20 +6112,24 @@ snapshots: '@floating-ui/core': 1.7.5 '@floating-ui/utils': 0.2.11 - '@floating-ui/react-dom@2.1.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@floating-ui/react-dom@2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@floating-ui/dom': 1.7.6 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) '@floating-ui/utils@0.2.11': {} - '@hookform/resolvers@5.4.0(react-hook-form@7.71.2(react@19.2.6))': + '@fontsource-variable/geist@5.2.8': {} + + '@fontsource-variable/inter@5.2.8': {} + + '@hookform/resolvers@5.2.2(react-hook-form@7.71.2(react@19.2.5))': dependencies: '@standard-schema/utils': 0.3.0 - react-hook-form: 7.71.2(react@19.2.6) + react-hook-form: 7.71.2(react@19.2.5) - '@img/colour@1.1.0': + '@img/colour@1.0.0': optional: true '@img/sharp-darwin-arm64@0.34.5': @@ -5796,7 +6214,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.10.0 + '@emnapi/runtime': 1.9.0 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -5812,245 +6230,245 @@ snapshots: '@inquirer/ansi@2.0.5': {} - '@inquirer/checkbox@4.3.2(@types/node@25.9.1)': + '@inquirer/checkbox@4.3.2(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.9.1) + '@inquirer/core': 10.3.2(@types/node@25.6.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.6.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/checkbox@5.1.4(@types/node@25.9.1)': + '@inquirer/checkbox@5.1.4(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/core': 11.1.9(@types/node@25.6.0) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.9.1) + '@inquirer/type': 4.0.5(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/confirm@5.1.21(@types/node@25.9.1)': + '@inquirer/confirm@5.1.21(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/confirm@6.0.12(@types/node@25.9.1)': + '@inquirer/confirm@6.0.12(@types/node@25.6.0)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.9.1) - '@inquirer/type': 4.0.5(@types/node@25.9.1) + '@inquirer/core': 11.1.9(@types/node@25.6.0) + '@inquirer/type': 4.0.5(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/core@10.3.2(@types/node@25.9.1)': + '@inquirer/core@10.3.2(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.6.0) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/core@11.1.9(@types/node@25.9.1)': + '@inquirer/core@11.1.9(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 2.0.5 '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.9.1) + '@inquirer/type': 4.0.5(@types/node@25.6.0) cli-width: 4.1.0 fast-wrap-ansi: 0.2.0 mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/editor@4.2.23(@types/node@25.9.1)': + '@inquirer/editor@4.2.23(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/external-editor': 1.0.3(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/external-editor': 1.0.3(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/editor@5.1.1(@types/node@25.9.1)': + '@inquirer/editor@5.1.1(@types/node@25.6.0)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.9.1) - '@inquirer/external-editor': 3.0.0(@types/node@25.9.1) - '@inquirer/type': 4.0.5(@types/node@25.9.1) + '@inquirer/core': 11.1.9(@types/node@25.6.0) + '@inquirer/external-editor': 3.0.0(@types/node@25.6.0) + '@inquirer/type': 4.0.5(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/expand@4.0.23(@types/node@25.9.1)': + '@inquirer/expand@4.0.23(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/expand@5.0.13(@types/node@25.9.1)': + '@inquirer/expand@5.0.13(@types/node@25.6.0)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.9.1) - '@inquirer/type': 4.0.5(@types/node@25.9.1) + '@inquirer/core': 11.1.9(@types/node@25.6.0) + '@inquirer/type': 4.0.5(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/external-editor@1.0.3(@types/node@25.9.1)': + '@inquirer/external-editor@1.0.3(@types/node@25.6.0)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/external-editor@3.0.0(@types/node@25.9.1)': + '@inquirer/external-editor@3.0.0(@types/node@25.6.0)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 '@inquirer/figures@1.0.15': {} '@inquirer/figures@2.0.5': {} - '@inquirer/input@4.3.1(@types/node@25.9.1)': + '@inquirer/input@4.3.1(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/input@5.0.12(@types/node@25.9.1)': + '@inquirer/input@5.0.12(@types/node@25.6.0)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.9.1) - '@inquirer/type': 4.0.5(@types/node@25.9.1) + '@inquirer/core': 11.1.9(@types/node@25.6.0) + '@inquirer/type': 4.0.5(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/number@3.0.23(@types/node@25.9.1)': + '@inquirer/number@3.0.23(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/number@4.0.12(@types/node@25.9.1)': + '@inquirer/number@4.0.12(@types/node@25.6.0)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.9.1) - '@inquirer/type': 4.0.5(@types/node@25.9.1) + '@inquirer/core': 11.1.9(@types/node@25.6.0) + '@inquirer/type': 4.0.5(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/password@4.0.23(@types/node@25.9.1)': + '@inquirer/password@4.0.23(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/password@5.0.12(@types/node@25.9.1)': + '@inquirer/password@5.0.12(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@25.9.1) - '@inquirer/type': 4.0.5(@types/node@25.9.1) + '@inquirer/core': 11.1.9(@types/node@25.6.0) + '@inquirer/type': 4.0.5(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/prompts@7.10.1(@types/node@25.9.1)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@25.9.1) - '@inquirer/confirm': 5.1.21(@types/node@25.9.1) - '@inquirer/editor': 4.2.23(@types/node@25.9.1) - '@inquirer/expand': 4.0.23(@types/node@25.9.1) - '@inquirer/input': 4.3.1(@types/node@25.9.1) - '@inquirer/number': 3.0.23(@types/node@25.9.1) - '@inquirer/password': 4.0.23(@types/node@25.9.1) - '@inquirer/rawlist': 4.1.11(@types/node@25.9.1) - '@inquirer/search': 3.2.2(@types/node@25.9.1) - '@inquirer/select': 4.4.2(@types/node@25.9.1) + '@types/node': 25.6.0 + + '@inquirer/prompts@7.10.1(@types/node@25.6.0)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@25.6.0) + '@inquirer/confirm': 5.1.21(@types/node@25.6.0) + '@inquirer/editor': 4.2.23(@types/node@25.6.0) + '@inquirer/expand': 4.0.23(@types/node@25.6.0) + '@inquirer/input': 4.3.1(@types/node@25.6.0) + '@inquirer/number': 3.0.23(@types/node@25.6.0) + '@inquirer/password': 4.0.23(@types/node@25.6.0) + '@inquirer/rawlist': 4.1.11(@types/node@25.6.0) + '@inquirer/search': 3.2.2(@types/node@25.6.0) + '@inquirer/select': 4.4.2(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/prompts@8.4.2(@types/node@25.9.1)': - dependencies: - '@inquirer/checkbox': 5.1.4(@types/node@25.9.1) - '@inquirer/confirm': 6.0.12(@types/node@25.9.1) - '@inquirer/editor': 5.1.1(@types/node@25.9.1) - '@inquirer/expand': 5.0.13(@types/node@25.9.1) - '@inquirer/input': 5.0.12(@types/node@25.9.1) - '@inquirer/number': 4.0.12(@types/node@25.9.1) - '@inquirer/password': 5.0.12(@types/node@25.9.1) - '@inquirer/rawlist': 5.2.8(@types/node@25.9.1) - '@inquirer/search': 4.1.8(@types/node@25.9.1) - '@inquirer/select': 5.1.4(@types/node@25.9.1) + '@types/node': 25.6.0 + + '@inquirer/prompts@8.4.2(@types/node@25.6.0)': + dependencies: + '@inquirer/checkbox': 5.1.4(@types/node@25.6.0) + '@inquirer/confirm': 6.0.12(@types/node@25.6.0) + '@inquirer/editor': 5.1.1(@types/node@25.6.0) + '@inquirer/expand': 5.0.13(@types/node@25.6.0) + '@inquirer/input': 5.0.12(@types/node@25.6.0) + '@inquirer/number': 4.0.12(@types/node@25.6.0) + '@inquirer/password': 5.0.12(@types/node@25.6.0) + '@inquirer/rawlist': 5.2.8(@types/node@25.6.0) + '@inquirer/search': 4.1.8(@types/node@25.6.0) + '@inquirer/select': 5.1.4(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/rawlist@4.1.11(@types/node@25.9.1)': + '@inquirer/rawlist@4.1.11(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/rawlist@5.2.8(@types/node@25.9.1)': + '@inquirer/rawlist@5.2.8(@types/node@25.6.0)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.9.1) - '@inquirer/type': 4.0.5(@types/node@25.9.1) + '@inquirer/core': 11.1.9(@types/node@25.6.0) + '@inquirer/type': 4.0.5(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/search@3.2.2(@types/node@25.9.1)': + '@inquirer/search@3.2.2(@types/node@25.6.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) + '@inquirer/core': 10.3.2(@types/node@25.6.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.6.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/search@4.1.8(@types/node@25.9.1)': + '@inquirer/search@4.1.8(@types/node@25.6.0)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/core': 11.1.9(@types/node@25.6.0) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.9.1) + '@inquirer/type': 4.0.5(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/select@4.4.2(@types/node@25.9.1)': + '@inquirer/select@4.4.2(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.9.1) + '@inquirer/core': 10.3.2(@types/node@25.6.0) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.6.0) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/select@5.1.4(@types/node@25.9.1)': + '@inquirer/select@5.1.4(@types/node@25.6.0)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/core': 11.1.9(@types/node@25.6.0) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.9.1) + '@inquirer/type': 4.0.5(@types/node@25.6.0) optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/type@3.0.10(@types/node@25.9.1)': + '@inquirer/type@3.0.10(@types/node@25.6.0)': optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@inquirer/type@4.0.5(@types/node@25.9.1)': + '@inquirer/type@4.0.5(@types/node@25.6.0)': optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 '@isaacs/balanced-match@4.0.1': {} @@ -6079,38 +6497,15 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@liam-hq/cli@0.7.24(@types/node@25.9.1)(@types/react@19.2.13)(typescript@5.9.3)': + '@liam-hq/cli@0.7.24(@types/node@25.6.0)(@types/react@19.2.13)(typescript@5.9.3)': dependencies: '@prisma/internals': 6.8.2(typescript@5.9.3) '@swc/core': 1.12.11 commander: 13.1.0 glob: 11.1.0 ink: 6.0.1(@types/react@19.2.13)(react@19.1.1) - ink-gradient: 3.0.0(ink@6.0.1(@types/react@19.2.13)(react@19.2.6)) - inquirer: 12.6.3(@types/node@25.9.1) - neverthrow: 8.2.0 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - valibot: 1.1.0(typescript@5.9.3) - yoctocolors: 2.1.2 - transitivePeerDependencies: - - '@swc/helpers' - - '@types/node' - - '@types/react' - - bufferutil - - react-devtools-core - - typescript - - utf-8-validate - - '@liam-hq/cli@0.7.24(@types/node@25.9.1)(typescript@5.9.3)': - dependencies: - '@prisma/internals': 6.8.2(typescript@5.9.3) - '@swc/core': 1.12.11 - commander: 13.1.0 - glob: 11.1.0 - ink: 6.0.1(react@19.1.1) - ink-gradient: 3.0.0(ink@6.0.1(react@19.1.1)) - inquirer: 12.6.3(@types/node@25.9.1) + ink-gradient: 3.0.0(ink@6.0.1(@types/react@19.2.13)(react@19.1.1)) + inquirer: 12.6.3(@types/node@25.6.0) neverthrow: 8.2.0 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -6141,23 +6536,23 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@microsoft/api-extractor-model@7.32.2(@types/node@25.9.1)': + '@microsoft/api-extractor-model@7.32.2(@types/node@25.6.0)': dependencies: '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.19.1(@types/node@25.9.1) + '@rushstack/node-core-library': 5.19.1(@types/node@25.6.0) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.55.2(@types/node@25.9.1)': + '@microsoft/api-extractor@7.55.2(@types/node@25.6.0)': dependencies: - '@microsoft/api-extractor-model': 7.32.2(@types/node@25.9.1) + '@microsoft/api-extractor-model': 7.32.2(@types/node@25.6.0) '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.19.1(@types/node@25.9.1) + '@rushstack/node-core-library': 5.19.1(@types/node@25.6.0) '@rushstack/rig-package': 0.6.0 - '@rushstack/terminal': 0.19.5(@types/node@25.9.1) - '@rushstack/ts-command-line': 5.1.5(@types/node@25.9.1) + '@rushstack/terminal': 0.19.5(@types/node@25.6.0) + '@rushstack/ts-command-line': 5.1.5(@types/node@25.6.0) diff: 8.0.2 lodash: 4.17.21 minimatch: 10.0.3 @@ -6177,6 +6572,16 @@ snapshots: '@microsoft/tsdoc@0.16.0': {} + '@mswjs/interceptors@0.39.8': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + optional: true + '@napi-rs/keyring-darwin-arm64@1.2.0': optional: true @@ -6228,6 +6633,13 @@ snapshots: '@napi-rs/keyring-win32-ia32-msvc': 1.2.0 '@napi-rs/keyring-win32-x64-msvc': 1.2.0 + '@napi-rs/wasm-runtime@1.1.1': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.1 + optional: true + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 @@ -6242,30 +6654,30 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@next/env@16.2.6': {} + '@next/env@16.2.3': {} - '@next/swc-darwin-arm64@16.2.6': + '@next/swc-darwin-arm64@16.2.3': optional: true - '@next/swc-darwin-x64@16.2.6': + '@next/swc-darwin-x64@16.2.3': optional: true - '@next/swc-linux-arm64-gnu@16.2.6': + '@next/swc-linux-arm64-gnu@16.2.3': optional: true - '@next/swc-linux-arm64-musl@16.2.6': + '@next/swc-linux-arm64-musl@16.2.3': optional: true - '@next/swc-linux-x64-gnu@16.2.6': + '@next/swc-linux-x64-gnu@16.2.3': optional: true - '@next/swc-linux-x64-musl@16.2.6': + '@next/swc-linux-x64-musl@16.2.3': optional: true - '@next/swc-win32-arm64-msvc@16.2.6': + '@next/swc-win32-arm64-msvc@16.2.3': optional: true - '@next/swc-win32-x64-msvc@16.2.6': + '@next/swc-win32-x64-msvc@16.2.3': optional: true '@nodelib/fs.scandir@2.1.5': @@ -6280,6 +6692,18 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@open-draft/deferred-promise@2.2.0': + optional: true + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + optional: true + + '@open-draft/until@2.1.0': + optional: true + '@opentelemetry/api-logs@0.215.0': dependencies: '@opentelemetry/api': 1.9.1 @@ -6421,9 +6845,9 @@ snapshots: '@oxc-parser/binding-win32-x64-msvc@0.127.0': optional: true - '@oxc-project/types@0.127.0': {} + '@oxc-project/types@0.122.0': {} - '@oxc-project/types@0.132.0': {} + '@oxc-project/types@0.127.0': {} '@oxfmt/binding-android-arm-eabi@0.47.0': optional: true @@ -6539,10 +6963,6 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.64.0': optional: true - '@playwright/test@1.51.1': - dependencies: - playwright: 1.51.1 - '@prisma/config@6.8.2': dependencies: jiti: 2.4.2 @@ -6614,76 +7034,81 @@ snapshots: dependencies: quansync: 1.0.0 + '@rolldown/binding-android-arm64@1.0.0-rc.12': + optional: true + '@rolldown/binding-android-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-android-arm64@1.0.2': + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': optional: true '@rolldown/binding-darwin-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-darwin-arm64@1.0.2': + '@rolldown/binding-darwin-x64@1.0.0-rc.12': optional: true '@rolldown/binding-darwin-x64@1.0.0-rc.17': optional: true - '@rolldown/binding-darwin-x64@1.0.2': + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': optional: true '@rolldown/binding-freebsd-x64@1.0.0-rc.17': optional: true - '@rolldown/binding-freebsd-x64@1.0.2': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.2': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.2': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.2': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': optional: true '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.2': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': optional: true '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.2': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.2': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-x64-musl@1.0.2': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': optional: true '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-openharmony-arm64@1.0.2': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + dependencies: + '@napi-rs/wasm-runtime': 1.1.1 optional: true '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': @@ -6693,36 +7118,29 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-wasm32-wasi@1.0.2': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.2': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': optional: true '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.2': - optional: true + '@rolldown/pluginutils@1.0.0-rc.12': {} '@rolldown/pluginutils@1.0.0-rc.17': {} '@rolldown/pluginutils@1.0.0-rc.3': {} - '@rolldown/pluginutils@1.0.1': {} - '@rollup/pluginutils@5.3.0(rollup@4.60.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.4 + picomatch: 4.0.3 optionalDependencies: rollup: 4.60.0 @@ -6804,7 +7222,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.0': optional: true - '@rushstack/node-core-library@5.19.1(@types/node@25.9.1)': + '@rushstack/node-core-library@5.19.1(@types/node@25.6.0)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -6815,28 +7233,28 @@ snapshots: resolve: 1.22.11 semver: 7.5.4 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@rushstack/problem-matcher@0.1.1(@types/node@25.9.1)': + '@rushstack/problem-matcher@0.1.1(@types/node@25.6.0)': optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 '@rushstack/rig-package@0.6.0': dependencies: resolve: 1.22.11 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.19.5(@types/node@25.9.1)': + '@rushstack/terminal@0.19.5(@types/node@25.6.0)': dependencies: - '@rushstack/node-core-library': 5.19.1(@types/node@25.9.1) - '@rushstack/problem-matcher': 0.1.1(@types/node@25.9.1) + '@rushstack/node-core-library': 5.19.1(@types/node@25.6.0) + '@rushstack/problem-matcher': 0.1.1(@types/node@25.6.0) supports-color: 8.1.1 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 - '@rushstack/ts-command-line@5.1.5(@types/node@25.9.1)': + '@rushstack/ts-command-line@5.1.5(@types/node@25.6.0)': dependencies: - '@rushstack/terminal': 0.19.5(@types/node@25.9.1) + '@rushstack/terminal': 0.19.5(@types/node@25.6.0) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -6913,17 +7331,17 @@ snapshots: '@tailor-platform/function-types@0.8.5': {} - '@tailor-platform/sdk@1.45.1(@types/node@25.9.1)(@types/react@19.2.13)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))': + '@tailor-platform/sdk@1.45.1(@types/node@25.6.0)(@types/react@19.2.13)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))': dependencies: '@0no-co/graphql.web': 1.2.0(graphql@16.13.2) '@badgateway/oauth2-client': 3.3.1 '@bufbuild/protobuf': 2.12.0 '@connectrpc/connect': 2.1.1(@bufbuild/protobuf@2.12.0) '@connectrpc/connect-node': 2.1.1(@bufbuild/protobuf@2.12.0)(@connectrpc/connect@2.1.1(@bufbuild/protobuf@2.12.0)) - '@inquirer/core': 11.1.9(@types/node@25.9.1) - '@inquirer/prompts': 8.4.2(@types/node@25.9.1) + '@inquirer/core': 11.1.9(@types/node@25.6.0) + '@inquirer/prompts': 8.4.2(@types/node@25.6.0) '@jridgewell/trace-mapping': 0.3.31 - '@liam-hq/cli': 0.7.24(@types/node@25.9.1)(@types/react@19.2.13)(typescript@5.9.3) + '@liam-hq/cli': 0.7.24(@types/node@25.6.0)(@types/react@19.2.13)(typescript@5.9.3) '@napi-rs/keyring': 1.2.0 '@opentelemetry/api': 1.9.1 '@opentelemetry/exporter-trace-otlp-proto': 0.215.0(@opentelemetry/api@1.9.1) @@ -6956,7 +7374,7 @@ snapshots: pathe: 2.0.3 pgsql-ast-parser: 12.0.2 pkg-types: 2.3.0 - politty: 0.4.15(@inquirer/prompts@8.4.2(@types/node@25.9.1))(zod@4.3.6) + politty: 0.4.15(@inquirer/prompts@8.4.2(@types/node@25.6.0))(zod@4.3.6) rolldown: 1.0.0-rc.17 semver: 7.7.4 serve: 14.2.6 @@ -6980,153 +7398,147 @@ snapshots: - utf-8-validate - valibot - '@tailor-platform/sdk@1.45.1(@types/node@25.9.1)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))': + '@tailwindcss/node@4.2.2': dependencies: - '@0no-co/graphql.web': 1.2.0(graphql@16.13.2) - '@badgateway/oauth2-client': 3.3.1 - '@bufbuild/protobuf': 2.12.0 - '@connectrpc/connect': 2.1.1(@bufbuild/protobuf@2.12.0) - '@connectrpc/connect-node': 2.1.1(@bufbuild/protobuf@2.12.0)(@connectrpc/connect@2.1.1(@bufbuild/protobuf@2.12.0)) - '@inquirer/core': 11.1.9(@types/node@25.9.1) - '@inquirer/prompts': 8.4.2(@types/node@25.9.1) - '@jridgewell/trace-mapping': 0.3.31 - '@liam-hq/cli': 0.7.24(@types/node@25.9.1)(typescript@5.9.3) - '@napi-rs/keyring': 1.2.0 - '@opentelemetry/api': 1.9.1 - '@opentelemetry/exporter-trace-otlp-proto': 0.215.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-node': 2.7.0(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.40.0 - '@oxc-project/types': 0.127.0 - '@standard-schema/spec': 1.1.0 - '@tailor-platform/function-kysely-tailordb': 0.1.3(kysely@0.28.16) - '@tailor-platform/function-types': 0.8.5 - '@toiroakr/lines-db': 0.9.2(valibot@1.1.0(typescript@5.9.3)) - '@toiroakr/read-multiline': 0.3.2 - '@urql/core': 6.0.1(graphql@16.13.2) - chalk: 5.6.2 - chokidar: 5.0.0 - confbox: 0.2.4 - date-fns: 4.1.0 - es-toolkit: 1.46.0 - find-up-simple: 1.0.1 - globals: 17.5.0 - graphql: 16.13.2 - inflection: 3.0.2 - kysely: 0.28.16 - madge: 8.0.0(typescript@5.9.3) - mime-types: 3.0.2 - open: 11.0.0 - ora: 9.4.0 - oxc-parser: 0.127.0 - p-limit: 7.3.0 - pathe: 2.0.3 - pgsql-ast-parser: 12.0.2 - pkg-types: 2.3.0 - politty: 0.4.15(@inquirer/prompts@8.4.2(@types/node@25.9.1))(zod@4.3.6) - rolldown: 1.0.0-rc.17 - semver: 7.7.4 - serve: 14.2.6 - sql-highlight: 6.1.0 - std-env: 4.1.0 - table: 6.9.0 - ts-cron-validator: 1.1.5 - tsx: 4.21.0 - type-fest: 5.6.0 - xdg-basedir: 5.1.0 - zod: 4.3.6 - transitivePeerDependencies: - - '@clack/prompts' - - '@swc/helpers' - - '@types/node' - - '@types/react' - - bufferutil - - react-devtools-core - - supports-color - - typescript - - utf-8-validate - - valibot + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.20.1 + jiti: 2.6.1 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.2.2 - '@tailwindcss/node@4.3.0': + '@tailwindcss/node@4.2.4': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.21.3 - jiti: 2.7.0 + enhanced-resolve: 5.21.0 + jiti: 2.6.1 lightningcss: 1.32.0 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.3.0 + tailwindcss: 4.2.4 + + '@tailwindcss/oxide-android-arm64@4.2.2': + optional: true + + '@tailwindcss/oxide-android-arm64@4.2.4': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.2.2': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.2.4': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.2.2': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.2.4': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.2.2': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': + optional: true - '@tailwindcss/oxide-android-arm64@4.3.0': + '@tailwindcss/oxide-linux-arm64-musl@4.2.2': optional: true - '@tailwindcss/oxide-darwin-arm64@4.3.0': + '@tailwindcss/oxide-linux-arm64-musl@4.2.4': optional: true - '@tailwindcss/oxide-darwin-x64@4.3.0': + '@tailwindcss/oxide-linux-x64-gnu@4.2.2': optional: true - '@tailwindcss/oxide-freebsd-x64@4.3.0': + '@tailwindcss/oxide-linux-x64-gnu@4.2.4': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + '@tailwindcss/oxide-linux-x64-musl@4.2.2': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + '@tailwindcss/oxide-linux-x64-musl@4.2.4': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + '@tailwindcss/oxide-wasm32-wasi@4.2.2': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + '@tailwindcss/oxide-wasm32-wasi@4.2.4': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.3.0': + '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.3.0': + '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + '@tailwindcss/oxide-win32-x64-msvc@4.2.2': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + '@tailwindcss/oxide-win32-x64-msvc@4.2.4': optional: true - '@tailwindcss/oxide@4.3.0': + '@tailwindcss/oxide@4.2.2': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-arm64': 4.2.2 + '@tailwindcss/oxide-darwin-x64': 4.2.2 + '@tailwindcss/oxide-freebsd-x64': 4.2.2 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 + '@tailwindcss/oxide-linux-x64-musl': 4.2.2 + '@tailwindcss/oxide-wasm32-wasi': 4.2.2 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 + + '@tailwindcss/oxide@4.2.4': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.3.0 - '@tailwindcss/oxide-darwin-arm64': 4.3.0 - '@tailwindcss/oxide-darwin-x64': 4.3.0 - '@tailwindcss/oxide-freebsd-x64': 4.3.0 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0 - '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0 - '@tailwindcss/oxide-linux-arm64-musl': 4.3.0 - '@tailwindcss/oxide-linux-x64-gnu': 4.3.0 - '@tailwindcss/oxide-linux-x64-musl': 4.3.0 - '@tailwindcss/oxide-wasm32-wasi': 4.3.0 - '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 - '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 - - '@tailwindcss/postcss@4.3.0': + '@tailwindcss/oxide-android-arm64': 4.2.4 + '@tailwindcss/oxide-darwin-arm64': 4.2.4 + '@tailwindcss/oxide-darwin-x64': 4.2.4 + '@tailwindcss/oxide-freebsd-x64': 4.2.4 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.4 + '@tailwindcss/oxide-linux-arm64-gnu': 4.2.4 + '@tailwindcss/oxide-linux-arm64-musl': 4.2.4 + '@tailwindcss/oxide-linux-x64-gnu': 4.2.4 + '@tailwindcss/oxide-linux-x64-musl': 4.2.4 + '@tailwindcss/oxide-wasm32-wasi': 4.2.4 + '@tailwindcss/oxide-win32-arm64-msvc': 4.2.4 + '@tailwindcss/oxide-win32-x64-msvc': 4.2.4 + + '@tailwindcss/postcss@4.2.4': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.3.0 - '@tailwindcss/oxide': 4.3.0 - postcss: 8.5.14 - tailwindcss: 4.3.0 + '@tailwindcss/node': 4.2.4 + '@tailwindcss/oxide': 4.2.4 + postcss: 8.5.13 + tailwindcss: 4.2.4 - '@tailwindcss/vite@4.3.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0))': + '@tailwindcss/vite@4.2.2(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0))': dependencies: - '@tailwindcss/node': 4.3.0 - '@tailwindcss/oxide': 4.3.0 - tailwindcss: 4.3.0 - vite: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0) + '@tailwindcss/node': 4.2.2 + '@tailwindcss/oxide': 4.2.2 + tailwindcss: 4.2.2 + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) '@testing-library/dom@10.4.1': dependencies: - '@babel/code-frame': 7.29.7 - '@babel/runtime': 7.29.7 + '@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 @@ -7134,12 +7546,12 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': dependencies: '@babel/runtime': 7.28.6 '@testing-library/dom': 10.4.1 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: '@types/react': 19.2.13 '@types/react-dom': 19.2.3(@types/react@19.2.13) @@ -7179,22 +7591,22 @@ snapshots: path-browserify: 1.0.1 tinyglobby: 0.2.16 - '@turbo/darwin-64@2.9.14': + '@turbo/darwin-64@2.9.1': optional: true - '@turbo/darwin-arm64@2.9.14': + '@turbo/darwin-arm64@2.9.1': optional: true - '@turbo/linux-64@2.9.14': + '@turbo/linux-64@2.9.1': optional: true - '@turbo/linux-arm64@2.9.14': + '@turbo/linux-arm64@2.9.1': optional: true - '@turbo/windows-64@2.9.14': + '@turbo/windows-64@2.9.1': optional: true - '@turbo/windows-arm64@2.9.14': + '@turbo/windows-arm64@2.9.1': optional: true '@tybys/wasm-util@0.10.1': @@ -7208,7 +7620,7 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.3 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 @@ -7220,7 +7632,7 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.3 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': @@ -7232,6 +7644,9 @@ snapshots: '@types/deep-eql': 4.0.2 assertion-error: 2.0.1 + '@types/cookie@0.6.0': + optional: true + '@types/deep-eql@4.0.2': {} '@types/encoding-japanese@2.2.1': {} @@ -7246,13 +7661,13 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@25.9.1': + '@types/node@25.6.0': dependencies: - undici-types: 7.24.6 + undici-types: 7.19.2 '@types/papaparse@5.5.2': dependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 '@types/react-dom@19.2.3(@types/react@19.2.13)': dependencies: @@ -7262,13 +7677,16 @@ snapshots: dependencies: csstype: 3.2.3 + '@types/statuses@2.0.6': + optional: true + '@types/tinycolor2@1.4.6': {} '@types/whatwg-mimetype@3.0.2': {} '@types/ws@8.18.1': dependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 '@typescript-eslint/project-service@8.59.1(typescript@5.9.3)': dependencies: @@ -7293,7 +7711,7 @@ snapshots: '@typescript-eslint/visitor-keys': 8.59.1 debug: 4.4.3 minimatch: 10.2.5 - semver: 7.8.0 + semver: 7.7.4 tinyglobby: 0.2.16 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 @@ -7312,7 +7730,7 @@ snapshots: transitivePeerDependencies: - graphql - '@vitejs/plugin-react@5.2.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0))': + '@vitejs/plugin-react@5.2.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -7320,48 +7738,49 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/expect@4.1.7': + '@vitest/expect@4.1.4': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 + '@vitest/spy': 4.1.4 + '@vitest/utils': 4.1.4 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.7(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0))': + '@vitest/mocker@4.1.4(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0))': dependencies: - '@vitest/spy': 4.1.7 + '@vitest/spy': 4.1.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0) + msw: 2.11.2(@types/node@25.6.0)(typescript@5.9.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) - '@vitest/pretty-format@4.1.7': + '@vitest/pretty-format@4.1.4': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.7': + '@vitest/runner@4.1.4': dependencies: - '@vitest/utils': 4.1.7 + '@vitest/utils': 4.1.4 pathe: 2.0.3 - '@vitest/snapshot@4.1.7': + '@vitest/snapshot@4.1.4': dependencies: - '@vitest/pretty-format': 4.1.7 - '@vitest/utils': 4.1.7 + '@vitest/pretty-format': 4.1.4 + '@vitest/utils': 4.1.4 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.7': {} + '@vitest/spy@4.1.4': {} - '@vitest/utils@4.1.7': + '@vitest/utils@4.1.4': dependencies: - '@vitest/pretty-format': 4.1.7 + '@vitest/pretty-format': 4.1.4 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -7379,7 +7798,7 @@ snapshots: '@vue/compiler-core@3.5.25': dependencies: - '@babel/parser': 7.29.3 + '@babel/parser': 7.29.0 '@vue/shared': 3.5.25 entities: 4.5.0 estree-walker: 2.0.2 @@ -7412,7 +7831,7 @@ snapshots: '@vue/shared': 3.5.33 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.14 + postcss: 8.5.13 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.33': @@ -7448,6 +7867,9 @@ snapshots: acorn@8.16.0: {} + agent-base@7.1.4: + optional: true + ajv-draft-04@1.0.0(ajv@8.13.0): optionalDependencies: ajv: 8.13.0 @@ -7538,7 +7960,7 @@ snapshots: ast-kit@3.0.0-beta.1: dependencies: - '@babel/parser': 8.0.0-rc.6 + '@babel/parser': 8.0.0-rc.3 estree-walker: 3.0.3 pathe: 2.0.3 @@ -7554,12 +7976,17 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.10.30: {} + baseline-browser-mapping@2.9.19: {} better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 + bidi-js@1.0.3: + dependencies: + require-from-string: 2.0.2 + optional: true + birpc@4.0.0: {} bl@4.1.0: @@ -7598,8 +8025,8 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.10.30 - caniuse-lite: 1.0.30001793 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001770 electron-to-chromium: 1.5.286 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -7621,7 +8048,7 @@ snapshots: camelcase@7.0.1: {} - caniuse-lite@1.0.30001793: {} + caniuse-lite@1.0.30001770: {} chai@6.2.2: {} @@ -7683,6 +8110,13 @@ snapshots: execa: 5.1.1 is-wsl: 2.2.0 + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + optional: true + clone@1.0.4: {} clsx@2.1.1: {} @@ -7741,6 +8175,9 @@ snapshots: convert-to-spaces@2.0.1: {} + cookie@0.7.2: + optional: true + cookie@1.1.1: {} cross-spawn@7.0.6: @@ -7749,8 +8186,28 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + optional: true + + cssstyle@5.3.7: + dependencies: + '@asamuzakjp/css-color': 4.1.2 + '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) + css-tree: 3.2.1 + lru-cache: 11.3.6 + optional: true + csstype@3.2.3: {} + data-urls@6.0.1: + dependencies: + whatwg-mimetype: 5.0.0 + whatwg-url: 15.1.0 + optional: true + date-fns@4.1.0: {} de-indent@1.0.2: {} @@ -7763,6 +8220,9 @@ snapshots: dependencies: ms: 2.1.3 + decimal.js@10.6.0: + optional: true + deep-extend@0.6.0: {} default-browser-id@5.0.1: {} @@ -7778,7 +8238,7 @@ snapshots: define-lazy-prop@3.0.0: {} - defu@6.1.7: {} + defu@6.1.4: {} dependency-tree@11.4.3: dependencies: @@ -7811,11 +8271,11 @@ snapshots: dependencies: node-source-walk: 7.0.2 - detective-postcss@7.0.1(postcss@8.5.14): + detective-postcss@7.0.1(postcss@8.5.13): dependencies: is-url: 1.2.4 - postcss: 8.5.14 - postcss-values-parser: 6.0.2(postcss@8.5.14) + postcss: 8.5.13 + postcss-values-parser: 6.0.2(postcss@8.5.13) detective-sass@6.0.2: dependencies: @@ -7861,9 +8321,7 @@ snapshots: dom-accessibility-api@0.5.16: {} - dotenv@16.6.1: {} - - dts-resolver@3.0.0: {} + dts-resolver@2.1.3: {} eastasianwidth@0.2.0: {} @@ -7879,7 +8337,12 @@ snapshots: encoding-japanese@2.2.0: {} - enhanced-resolve@5.21.3: + enhanced-resolve@5.20.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + enhanced-resolve@5.21.0: dependencies: graceful-fs: 4.2.11 tapable: 2.3.3 @@ -7891,6 +8354,9 @@ snapshots: entities@4.5.0: {} + entities@6.0.1: + optional: true + entities@7.0.1: {} environment@1.1.0: {} @@ -7899,8 +8365,39 @@ snapshots: es-module-lexer@2.0.0: {} + es-toolkit@1.45.1: {} + es-toolkit@1.46.0: {} + esbuild@0.27.4: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.4 + '@esbuild/android-arm': 0.27.4 + '@esbuild/android-arm64': 0.27.4 + '@esbuild/android-x64': 0.27.4 + '@esbuild/darwin-arm64': 0.27.4 + '@esbuild/darwin-x64': 0.27.4 + '@esbuild/freebsd-arm64': 0.27.4 + '@esbuild/freebsd-x64': 0.27.4 + '@esbuild/linux-arm': 0.27.4 + '@esbuild/linux-arm64': 0.27.4 + '@esbuild/linux-ia32': 0.27.4 + '@esbuild/linux-loong64': 0.27.4 + '@esbuild/linux-mips64el': 0.27.4 + '@esbuild/linux-ppc64': 0.27.4 + '@esbuild/linux-riscv64': 0.27.4 + '@esbuild/linux-s390x': 0.27.4 + '@esbuild/linux-x64': 0.27.4 + '@esbuild/netbsd-arm64': 0.27.4 + '@esbuild/netbsd-x64': 0.27.4 + '@esbuild/openbsd-arm64': 0.27.4 + '@esbuild/openbsd-x64': 0.27.4 + '@esbuild/openharmony-arm64': 0.27.4 + '@esbuild/sunos-x64': 0.27.4 + '@esbuild/win32-arm64': 0.27.4 + '@esbuild/win32-ia32': 0.27.4 + '@esbuild/win32-x64': 0.27.4 + esbuild@0.27.7: optionalDependencies: '@esbuild/aix-ppc64': 0.27.7 @@ -7972,10 +8469,6 @@ snapshots: exsolve@1.0.8: {} - extend-shallow@2.0.1: - dependencies: - is-extendable: 0.1.1 - extendable-error@0.1.7: {} fast-deep-equal@3.1.3: {} @@ -8004,6 +8497,10 @@ snapshots: dependencies: reusify: 1.1.0 + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 @@ -8012,7 +8509,7 @@ snapshots: dependencies: app-module-path: 2.2.0 commander: 12.1.0 - enhanced-resolve: 5.21.3 + enhanced-resolve: 5.21.0 module-definition: 6.0.2 module-lookup-amd: 9.1.3 resolve: 1.22.12 @@ -8062,9 +8559,6 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 - fsevents@2.3.2: - optional: true - fsevents@2.3.3: optional: true @@ -8077,17 +8571,20 @@ snapshots: ast-module-types: 6.0.1 node-source-walk: 7.0.2 + get-caller-file@2.0.5: + optional: true + get-east-asian-width@1.5.0: {} get-own-enumerable-property-symbols@3.0.2: {} get-stream@6.0.1: {} - get-tsconfig@4.14.0: + get-tsconfig@4.13.7: dependencies: resolve-pkg-maps: 1.0.0 - get-tsconfig@5.0.0-beta.5: + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -8130,21 +8627,17 @@ snapshots: graphql@16.13.2: {} - gray-matter@4.0.3: - dependencies: - js-yaml: 3.14.2 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 + graphql@16.14.0: + optional: true - happy-dom@20.9.0: + happy-dom@20.6.2: dependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 entities: 7.0.1 whatwg-mimetype: 3.0.0 - ws: 8.21.0 + ws: 8.19.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -8157,12 +8650,41 @@ snapshots: he@1.2.0: {} - hookable@6.1.1: {} + headers-polyfill@4.0.3: + optional: true + + hookable@6.1.0: {} + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + optional: true + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + optional: true + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + optional: true human-id@4.1.3: {} human-signals@2.1.0: {} + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + optional: true + iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -8173,7 +8695,7 @@ snapshots: import-lazy@4.0.0: {} - import-without-cache@0.4.0: {} + import-without-cache@0.2.5: {} indent-string@5.0.0: {} @@ -8183,7 +8705,7 @@ snapshots: ini@1.3.8: {} - ink-gradient@3.0.0(ink@6.0.1(@types/react@19.2.13)(react@19.2.6)): + ink-gradient@3.0.0(ink@6.0.1(@types/react@19.2.13)(react@19.1.1)): dependencies: '@types/gradient-string': 1.1.6 gradient-string: 2.0.2 @@ -8191,14 +8713,6 @@ snapshots: prop-types: 15.8.1 strip-ansi: 7.2.0 - ink-gradient@3.0.0(ink@6.0.1(react@19.1.1)): - dependencies: - '@types/gradient-string': 1.1.6 - gradient-string: 2.0.2 - ink: 6.0.1(react@19.1.1) - prop-types: 15.8.1 - strip-ansi: 7.2.0 - ink@6.0.1(@types/react@19.2.13)(react@19.1.1): dependencies: '@alcalzone/ansi-tokenize': 0.1.3 @@ -8224,7 +8738,7 @@ snapshots: type-fest: 4.41.0 widest-line: 5.0.0 wrap-ansi: 9.0.2 - ws: 8.21.0 + ws: 8.20.0 yoga-layout: 3.2.1 optionalDependencies: '@types/react': 19.2.13 @@ -8232,48 +8746,17 @@ snapshots: - bufferutil - utf-8-validate - ink@6.0.1(react@19.1.1): + inquirer@12.6.3(@types/node@25.6.0): dependencies: - '@alcalzone/ansi-tokenize': 0.1.3 - ansi-escapes: 7.3.0 - ansi-styles: 6.2.3 - auto-bind: 5.0.1 - chalk: 5.6.2 - cli-boxes: 3.0.0 - cli-cursor: 4.0.0 - cli-truncate: 4.0.0 - code-excerpt: 4.0.0 - es-toolkit: 1.46.0 - indent-string: 5.0.0 - is-in-ci: 1.0.0 - patch-console: 2.0.0 - react: 19.1.1 - react-reconciler: 0.32.0(react@19.1.1) - scheduler: 0.23.2 - signal-exit: 3.0.7 - slice-ansi: 7.1.2 - stack-utils: 2.0.6 - string-width: 7.2.0 - type-fest: 4.41.0 - widest-line: 5.0.0 - wrap-ansi: 9.0.2 - ws: 8.21.0 - yoga-layout: 3.2.1 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - inquirer@12.6.3(@types/node@25.9.1): - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/prompts': 7.10.1(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) + '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/prompts': 7.10.1(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.6.0) ansi-escapes: 4.3.2 mute-stream: 2.0.0 run-async: 3.0.0 rxjs: 7.8.2 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 is-core-module@2.16.1: dependencies: @@ -8283,8 +8766,6 @@ snapshots: is-docker@3.0.0: {} - is-extendable@0.1.1: {} - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -8311,12 +8792,18 @@ snapshots: is-interactive@2.0.0: {} + is-node-process@1.2.0: + optional: true + is-number@7.0.0: {} is-obj@1.0.1: {} is-port-reachable@4.0.0: {} + is-potential-custom-element-name@1.0.1: + optional: true + is-regexp@1.0.0: {} is-stream@2.0.1: {} @@ -8351,7 +8838,7 @@ snapshots: jiti@2.4.2: {} - jiti@2.7.0: {} + jiti@2.6.1: {} jju@1.4.0: {} @@ -8368,6 +8855,34 @@ snapshots: dependencies: argparse: 2.0.1 + jsdom@27.0.0: + dependencies: + '@asamuzakjp/dom-selector': 6.8.1 + cssstyle: 5.3.7 + data-urls: 6.0.1 + decimal.js: 10.6.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + parse5: 7.3.0 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 6.0.1 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 8.0.1 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 15.1.0 + ws: 8.20.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + optional: true + jsesc@3.1.0: {} json-schema-traverse@1.0.0: {} @@ -8390,57 +8905,12 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - kind-of@6.0.3: {} - kleur@3.0.3: {} kolorist@1.8.0: {} kysely@0.28.16: {} - lefthook-darwin-arm64@2.1.6: - optional: true - - lefthook-darwin-x64@2.1.6: - optional: true - - lefthook-freebsd-arm64@2.1.6: - optional: true - - lefthook-freebsd-x64@2.1.6: - optional: true - - lefthook-linux-arm64@2.1.6: - optional: true - - lefthook-linux-x64@2.1.6: - optional: true - - lefthook-openbsd-arm64@2.1.6: - optional: true - - lefthook-openbsd-x64@2.1.6: - optional: true - - lefthook-windows-arm64@2.1.6: - optional: true - - lefthook-windows-x64@2.1.6: - optional: true - - lefthook@2.1.6: - optionalDependencies: - lefthook-darwin-arm64: 2.1.6 - lefthook-darwin-x64: 2.1.6 - lefthook-freebsd-arm64: 2.1.6 - lefthook-freebsd-x64: 2.1.6 - lefthook-linux-arm64: 2.1.6 - lefthook-linux-x64: 2.1.6 - lefthook-openbsd-arm64: 2.1.6 - lefthook-openbsd-x64: 2.1.6 - lefthook-windows-arm64: 2.1.6 - lefthook-windows-x64: 2.1.6 - lightningcss-android-arm64@1.32.0: optional: true @@ -8524,6 +8994,9 @@ snapshots: lru-cache@11.3.5: {} + lru-cache@11.3.6: + optional: true + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -8532,9 +9005,9 @@ snapshots: dependencies: yallist: 4.0.0 - lucide-react@1.8.0(react@19.2.6): + lucide-react@1.8.0(react@19.2.5): dependencies: - react: 19.2.6 + react: 19.2.5 lz-string@1.5.0: {} @@ -8561,6 +9034,9 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + mdn-data@2.27.1: + optional: true + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -8639,6 +9115,33 @@ snapshots: ms@2.1.3: {} + msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@inquirer/confirm': 5.1.21(@types/node@25.6.0) + '@mswjs/interceptors': 0.39.8 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.6 + graphql: 16.14.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + rettime: 0.7.0 + strict-event-emitter: 0.5.1 + tough-cookie: 6.0.1 + type-fest: 4.41.0 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@types/node' + optional: true + muggle-string@0.4.1: {} mute-stream@2.0.0: {} @@ -8662,27 +9165,26 @@ snapshots: optionalDependencies: '@rollup/rollup-linux-x64-gnu': 4.60.2 - next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.51.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - '@next/env': 16.2.6 + '@next/env': 16.2.3 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.10.30 - caniuse-lite: 1.0.30001793 + baseline-browser-mapping: 2.9.19 + caniuse-lite: 1.0.30001770 postcss: 8.4.31 - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) - styled-jsx: 5.1.6(react@19.2.6) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + styled-jsx: 5.1.6(react@19.2.5) optionalDependencies: - '@next/swc-darwin-arm64': 16.2.6 - '@next/swc-darwin-x64': 16.2.6 - '@next/swc-linux-arm64-gnu': 16.2.6 - '@next/swc-linux-arm64-musl': 16.2.6 - '@next/swc-linux-x64-gnu': 16.2.6 - '@next/swc-linux-x64-musl': 16.2.6 - '@next/swc-win32-arm64-msvc': 16.2.6 - '@next/swc-win32-x64-msvc': 16.2.6 + '@next/swc-darwin-arm64': 16.2.3 + '@next/swc-darwin-x64': 16.2.3 + '@next/swc-linux-arm64-gnu': 16.2.3 + '@next/swc-linux-arm64-musl': 16.2.3 + '@next/swc-linux-x64-gnu': 16.2.3 + '@next/swc-linux-x64-musl': 16.2.3 + '@next/swc-win32-arm64-msvc': 16.2.3 + '@next/swc-win32-x64-msvc': 16.2.3 '@opentelemetry/api': 1.9.1 - '@playwright/test': 1.51.1 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -8753,6 +9255,9 @@ snapshots: outdent@0.5.0: {} + outvariant@1.4.3: + optional: true + oxc-parser@0.127.0: dependencies: '@oxc-project/types': 0.127.0 @@ -8854,6 +9359,11 @@ snapshots: parse-ms@2.1.0: {} + parse5@7.3.0: + dependencies: + entities: 6.0.1 + optional: true + patch-console@2.0.0: {} path-browserify@1.0.1: {} @@ -8873,6 +9383,9 @@ snapshots: path-to-regexp@3.3.0: {} + path-to-regexp@6.3.0: + optional: true + path-type@4.0.0: {} pathe@2.0.3: {} @@ -8886,6 +9399,8 @@ snapshots: picomatch@2.3.1: {} + picomatch@4.0.3: {} + picomatch@4.0.4: {} pify@4.0.1: {} @@ -8902,33 +9417,25 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 - playwright-core@1.51.1: {} - - playwright@1.51.1: - dependencies: - playwright-core: 1.51.1 - optionalDependencies: - fsevents: 2.3.2 - pluralize@8.0.0: {} - politty@0.4.15(@inquirer/prompts@8.4.2(@types/node@25.9.1))(zod@4.3.6): + politty@0.4.15(@inquirer/prompts@8.4.2(@types/node@25.6.0))(zod@4.3.6): dependencies: string-width: 8.2.1 zod: 4.3.6 optionalDependencies: - '@inquirer/prompts': 8.4.2(@types/node@25.9.1) + '@inquirer/prompts': 8.4.2(@types/node@25.6.0) - postcss-values-parser@6.0.2(postcss@8.5.14): + postcss-values-parser@6.0.2(postcss@8.5.13): dependencies: color-name: 1.1.4 is-url-superb: 4.0.0 - postcss: 8.5.14 + postcss: 8.5.13 quote-unquote: 1.0.0 postcss@8.4.31: dependencies: - nanoid: 3.3.12 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -8938,7 +9445,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.14: + postcss@8.5.13: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 @@ -8953,7 +9460,7 @@ snapshots: detective-amd: 6.1.0 detective-cjs: 6.1.1 detective-es6: 5.0.2 - detective-postcss: 7.0.1(postcss@8.5.14) + detective-postcss: 7.0.1(postcss@8.5.13) detective-sass: 6.0.2 detective-scss: 5.0.2 detective-stylus: 5.0.1 @@ -8961,7 +9468,7 @@ snapshots: detective-vue2: 2.3.0(typescript@5.9.3) module-definition: 6.0.2 node-source-walk: 7.0.2 - postcss: 8.5.14 + postcss: 8.5.13 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -8991,7 +9498,7 @@ snapshots: protobufjs@8.0.3: dependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 long: 5.3.2 punycode@2.3.1: {} @@ -9030,14 +9537,9 @@ snapshots: react: 19.2.5 scheduler: 0.27.0 - react-dom@19.2.6(react@19.2.6): - dependencies: - react: 19.2.6 - scheduler: 0.27.0 - - react-hook-form@7.71.2(react@19.2.6): + react-hook-form@7.71.2(react@19.2.5): dependencies: - react: 19.2.6 + react: 19.2.5 react-is@16.13.1: {} @@ -9050,20 +9552,18 @@ snapshots: react-refresh@0.18.0: {} - react-router@7.14.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + react-router@7.14.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: cookie: 1.1.1 - react: 19.2.6 + react: 19.2.5 set-cookie-parser: 2.7.2 optionalDependencies: - react-dom: 19.2.6(react@19.2.6) + react-dom: 19.2.5(react@19.2.5) react@19.1.1: {} react@19.2.5: {} - react@19.2.6: {} - read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -9088,6 +9588,9 @@ snapshots: dependencies: rc: 1.2.8 + require-directory@2.1.1: + optional: true + require-from-string@2.0.2: {} requirejs-config-file@4.0.0: @@ -9097,7 +9600,7 @@ snapshots: requirejs@2.3.8: {} - reselect@5.2.0: {} + reselect@5.1.1: {} resolve-dependency-path@4.0.1: {} @@ -9141,24 +9644,50 @@ snapshots: ret@0.1.15: {} + rettime@0.7.0: + optional: true + reusify@1.1.0: {} - rolldown-plugin-dts@0.25.1(rolldown@1.0.2)(typescript@5.9.3): + rolldown-plugin-dts@0.23.2(rolldown@1.0.0-rc.12)(typescript@5.9.3): dependencies: - '@babel/generator': 8.0.0-rc.5 - '@babel/helper-validator-identifier': 8.0.0-rc.5 - '@babel/parser': 8.0.0-rc.4 + '@babel/generator': 8.0.0-rc.3 + '@babel/helper-validator-identifier': 8.0.0-rc.3 + '@babel/parser': 8.0.0-rc.3 + '@babel/types': 8.0.0-rc.3 ast-kit: 3.0.0-beta.1 birpc: 4.0.0 - dts-resolver: 3.0.0 - get-tsconfig: 5.0.0-beta.5 + dts-resolver: 2.1.3 + get-tsconfig: 4.13.7 obug: 2.1.1 - rolldown: 1.0.2 + picomatch: 4.0.4 + rolldown: 1.0.0-rc.12 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - oxc-resolver + rolldown@1.0.0-rc.12: + dependencies: + '@oxc-project/types': 0.122.0 + '@rolldown/pluginutils': 1.0.0-rc.12 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-x64': 1.0.0-rc.12 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 + rolldown@1.0.0-rc.17: dependencies: '@oxc-project/types': 0.127.0 @@ -9180,27 +9709,6 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17 - rolldown@1.0.2: - dependencies: - '@oxc-project/types': 0.132.0 - '@rolldown/pluginutils': 1.0.1 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.2 - '@rolldown/binding-darwin-arm64': 1.0.2 - '@rolldown/binding-darwin-x64': 1.0.2 - '@rolldown/binding-freebsd-x64': 1.0.2 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.2 - '@rolldown/binding-linux-arm64-gnu': 1.0.2 - '@rolldown/binding-linux-arm64-musl': 1.0.2 - '@rolldown/binding-linux-ppc64-gnu': 1.0.2 - '@rolldown/binding-linux-s390x-gnu': 1.0.2 - '@rolldown/binding-linux-x64-gnu': 1.0.2 - '@rolldown/binding-linux-x64-musl': 1.0.2 - '@rolldown/binding-openharmony-arm64': 1.0.2 - '@rolldown/binding-wasm32-wasi': 1.0.2 - '@rolldown/binding-win32-arm64-msvc': 1.0.2 - '@rolldown/binding-win32-x64-msvc': 1.0.2 - rollup@4.60.0: dependencies: '@types/estree': 1.0.8 @@ -9232,6 +9740,9 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.0 fsevents: 2.3.3 + rrweb-cssom@0.8.0: + optional: true + run-applescript@7.1.0: {} run-async@3.0.0: {} @@ -9251,7 +9762,12 @@ snapshots: sass-lookup@6.1.2: dependencies: commander: 12.1.0 - enhanced-resolve: 5.21.3 + enhanced-resolve: 5.21.0 + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + optional: true scheduler@0.23.2: dependencies: @@ -9261,11 +9777,6 @@ snapshots: scheduler@0.27.0: {} - section-matter@1.0.0: - dependencies: - extend-shallow: 2.0.1 - kind-of: 6.0.3 - semver@6.3.1: {} semver@7.5.4: @@ -9274,8 +9785,6 @@ snapshots: semver@7.7.4: {} - semver@7.8.0: {} - serve-handler@6.1.7: dependencies: bytes: 3.0.0 @@ -9306,9 +9815,9 @@ snapshots: sharp@0.34.5: dependencies: - '@img/colour': 1.1.0 + '@img/colour': 1.0.0 detect-libc: 2.1.2 - semver: 7.8.0 + semver: 7.7.4 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 @@ -9368,10 +9877,10 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - sonner@2.0.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + sonner@2.0.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - react: 19.2.6 - react-dom: 19.2.6(react@19.2.6) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) source-map-js@1.2.1: {} @@ -9392,6 +9901,11 @@ snapshots: stackback@0.0.2: {} + statuses@2.0.2: + optional: true + + std-env@4.0.0: {} + std-env@4.1.0: {} stdin-discarder@0.3.2: {} @@ -9400,6 +9914,9 @@ snapshots: dependencies: any-promise: 1.3.0 + strict-event-emitter@0.5.1: + optional: true + string-argv@0.3.2: {} string-width@4.2.3: @@ -9443,8 +9960,6 @@ snapshots: dependencies: ansi-regex: 6.2.2 - strip-bom-string@1.0.0: {} - strip-bom@3.0.0: {} strip-final-newline@2.0.0: {} @@ -9453,10 +9968,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.2.6): + styled-jsx@5.1.6(react@19.2.5): dependencies: client-only: 0.0.1 - react: 19.2.6 + react: 19.2.5 stylus-lookup@6.1.2: dependencies: @@ -9472,6 +9987,9 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + symbol-tree@3.2.4: + optional: true + table@6.9.0: dependencies: ajv: 8.20.0 @@ -9482,9 +10000,13 @@ snapshots: tagged-tag@1.0.0: {} - tailwind-merge@3.6.0: {} + tailwind-merge@3.5.0: {} + + tailwindcss@4.2.2: {} - tailwindcss@4.3.0: {} + tailwindcss@4.2.4: {} + + tapable@2.3.0: {} tapable@2.3.3: {} @@ -9494,7 +10016,12 @@ snapshots: tinycolor2@1.6.0: {} - tinyexec@1.2.2: {} + tinyexec@1.0.4: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 tinyglobby@0.2.16: dependencies: @@ -9510,10 +10037,28 @@ snapshots: tinyrainbow@3.1.0: {} + tldts-core@7.0.30: + optional: true + + tldts@7.0.30: + dependencies: + tldts-core: 7.0.30 + optional: true + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + tough-cookie@6.0.1: + dependencies: + tldts: 7.0.30 + optional: true + + tr46@6.0.0: + dependencies: + punycode: 2.3.1 + optional: true + tree-kill@1.2.2: {} ts-api-utils@2.5.0(typescript@5.9.3): @@ -9544,30 +10089,31 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdown@0.22.0(tsx@4.21.0)(typescript@5.9.3): + tsdown@0.21.7(typescript@5.9.3): dependencies: ansis: 4.2.0 cac: 7.0.0 - defu: 6.1.7 + defu: 6.1.4 empathic: 2.0.0 - hookable: 6.1.1 - import-without-cache: 0.4.0 + hookable: 6.1.0 + import-without-cache: 0.2.5 obug: 2.1.1 picomatch: 4.0.4 - rolldown: 1.0.2 - rolldown-plugin-dts: 0.25.1(rolldown@1.0.2)(typescript@5.9.3) - semver: 7.8.0 - tinyexec: 1.2.2 - tinyglobby: 0.2.16 + rolldown: 1.0.0-rc.12 + rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.12)(typescript@5.9.3) + semver: 7.7.4 + tinyexec: 1.0.4 + tinyglobby: 0.2.15 tree-kill: 1.2.2 unconfig-core: 7.5.0 + unrun: 0.2.34 optionalDependencies: - tsx: 4.21.0 typescript: 5.9.3 transitivePeerDependencies: - '@ts-macro/tsc' - '@typescript/native-preview' - oxc-resolver + - synckit - vue-tsc tslib@2.8.1: {} @@ -9579,14 +10125,14 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - turbo@2.9.14: + turbo@2.9.1: optionalDependencies: - '@turbo/darwin-64': 2.9.14 - '@turbo/darwin-arm64': 2.9.14 - '@turbo/linux-64': 2.9.14 - '@turbo/linux-arm64': 2.9.14 - '@turbo/windows-64': 2.9.14 - '@turbo/windows-arm64': 2.9.14 + '@turbo/darwin-64': 2.9.1 + '@turbo/darwin-arm64': 2.9.1 + '@turbo/linux-64': 2.9.1 + '@turbo/linux-arm64': 2.9.1 + '@turbo/windows-64': 2.9.1 + '@turbo/windows-arm64': 2.9.1 tw-animate-css@1.4.0: {} @@ -9613,12 +10159,16 @@ snapshots: '@quansync/fs': 1.0.0 quansync: 1.0.0 - undici-types@7.24.6: {} + undici-types@7.19.2: {} universalify@0.1.2: {} universalify@2.0.1: {} + unrun@0.2.34: + dependencies: + rolldown: 1.0.0-rc.12 + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: browserslist: 4.28.1 @@ -9634,9 +10184,9 @@ snapshots: dependencies: punycode: 2.3.1 - use-sync-external-store@1.6.0(react@19.2.6): + use-sync-external-store@1.6.0(react@19.2.5): dependencies: - react: 19.2.6 + react: 19.2.5 util-deprecate@1.0.2: {} @@ -9646,9 +10196,9 @@ snapshots: vary@1.1.2: {} - vite-plugin-dts@4.5.4(@types/node@25.9.1)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)): + vite-plugin-dts@4.5.4(@types/node@25.6.0)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): dependencies: - '@microsoft/api-extractor': 7.55.2(@types/node@25.9.1) + '@microsoft/api-extractor': 7.55.2(@types/node@25.6.0) '@rollup/pluginutils': 5.3.0(rollup@4.60.0) '@volar/typescript': 2.4.27 '@vue/language-core': 2.2.0(typescript@5.9.3) @@ -9659,80 +10209,107 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-externalize-deps@0.10.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)): + vite-plugin-externalize-deps@0.10.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): dependencies: - vite: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) transitivePeerDependencies: - supports-color - typescript - vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0): + vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0): dependencies: - esbuild: 0.27.7 + esbuild: 0.27.4 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - postcss: 8.5.14 + postcss: 8.5.12 rollup: 4.60.0 - tinyglobby: 0.2.16 + tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 25.9.1 + '@types/node': 25.6.0 fsevents: 2.3.3 - jiti: 2.7.0 + jiti: 2.6.1 lightningcss: 1.32.0 tsx: 4.21.0 + yaml: 2.7.0 - vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)): + vitest@4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): dependencies: - '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0)) - '@vitest/pretty-format': 4.1.7 - '@vitest/runner': 4.1.7 - '@vitest/snapshot': 4.1.7 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 + '@vitest/expect': 4.1.4 + '@vitest/mocker': 4.1.4(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) + '@vitest/pretty-format': 4.1.4 + '@vitest/runner': 4.1.4 + '@vitest/snapshot': 4.1.4 + '@vitest/spy': 4.1.4 + '@vitest/utils': 4.1.4 es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.4 - std-env: 4.1.0 + std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 1.2.2 - tinyglobby: 0.2.16 + tinyexec: 1.0.4 + tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.21.0) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@types/node': 25.9.1 - happy-dom: 20.9.0 + '@types/node': 25.6.0 + happy-dom: 20.6.2 + jsdom: 27.0.0 transitivePeerDependencies: - msw vscode-uri@3.1.0: {} + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + optional: true + walkdir@0.4.1: {} wcwidth@1.0.1: dependencies: defaults: 1.0.4 + webidl-conversions@8.0.1: + optional: true + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + optional: true + whatwg-mimetype@3.0.0: {} + whatwg-mimetype@4.0.0: + optional: true + + whatwg-mimetype@5.0.0: + optional: true + + whatwg-url@15.1.0: + dependencies: + tr46: 6.0.0 + webidl-conversions: 8.0.1 + optional: true + which@2.0.2: dependencies: isexe: 2.0.0 @@ -9758,6 +10335,13 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + optional: true + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.3 @@ -9770,7 +10354,9 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 - ws@8.21.0: {} + ws@8.19.0: {} + + ws@8.20.0: {} wsl-utils@0.3.1: dependencies: @@ -9779,10 +10365,36 @@ snapshots: xdg-basedir@5.1.0: {} + xml-name-validator@5.0.0: + optional: true + + xmlchars@2.2.0: + optional: true + + y18n@5.0.8: + optional: true + yallist@3.1.1: {} yallist@4.0.0: {} + yaml@2.7.0: + optional: true + + yargs-parser@21.1.1: + optional: true + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + optional: true + yocto-queue@1.2.2: {} yoctocolors-cjs@2.1.3: {} @@ -9791,6 +10403,6 @@ snapshots: yoga-layout@3.2.1: {} - zod@3.25.76: {} - zod@4.3.6: {} + + zod@4.4.3: {} From 9a220843e41ee438efb2bbd8a972747c93f72373 Mon Sep 17 00:00:00 2001 From: itsprade Date: Fri, 15 May 2026 15:36:29 +0530 Subject: [PATCH 14/20] feat(themes): getInitialAppearanceScript() helper for pre-paint hydration Add a public helper that returns the source of a tiny IIFE consumers inline in `` so the stored theme + font are applied **before** React mounts. Closes the FOUC / hydration-warning gap left by `ThemeProvider`'s post-mount effect. The returned script reads `localStorage`, runs the same legacy-id migration as `parseStoredTheme`, resolves `system` via `matchMedia`, and writes `data-theme`, `data-font`, and `class="light"|"dark"` on ``. Wired into the Next.js example via a ` {children} diff --git a/examples/nextjs-app/src/app/layout.tsx b/examples/nextjs-app/src/app/layout.tsx index fe9a3801..b2c5c4ef 100644 --- a/examples/nextjs-app/src/app/layout.tsx +++ b/examples/nextjs-app/src/app/layout.tsx @@ -1,4 +1,5 @@ import type { Metadata } from "next"; +import Script from "next/script"; import { Geist, Geist_Mono } from "next/font/google"; import { getInitialAppearanceScript } from "@tailor-platform/app-shell/initial-appearance"; import "@tailor-platform/app-shell/styles"; @@ -28,7 +29,9 @@ export default function RootLayout({ {/* Apply stored appearance before paint to avoid FOUC + hydration warnings. */} - {children} From 2746f41fc6e7ad24188f2cb15b5bda5eccf09594 Mon Sep 17 00:00:00 2001 From: IzumiSy Date: Thu, 4 Jun 2026 11:09:16 +0900 Subject: [PATCH 20/20] Update lockfile --- pnpm-lock.yaml | 3023 ++++++++++++++++++++---------------------------- 1 file changed, 1226 insertions(+), 1797 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ea37fd54..93aff0b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,11 +7,11 @@ settings: catalogs: default: '@tailwindcss/postcss': - specifier: ^4.2.4 - version: 4.2.4 + specifier: ^4.3.0 + version: 4.3.0 '@types/node': - specifier: ^25.6.0 - version: 25.6.0 + specifier: ^25.9.1 + version: 25.9.1 '@types/react': specifier: ^19 version: 19.2.13 @@ -21,18 +21,36 @@ catalogs: '@vitejs/plugin-react': specifier: ^5.2.0 version: 5.2.0 + lucide-react: + specifier: ^1.8.0 + version: 1.8.0 oxfmt: specifier: ^0.47.0 version: 0.47.0 oxlint: specifier: ^1.64.0 version: 1.64.0 + react: + specifier: ^19.2.6 + version: 19.2.6 + react-dom: + specifier: ^19.2.6 + version: 19.2.6 tailwindcss: specifier: ^4.2.4 version: 4.2.4 + tsdown: + specifier: ^0.22.0 + version: 0.22.1 + typescript: + specifier: ^5 + version: 5.9.3 vite: specifier: ^7.3.2 version: 7.3.2 + vitest: + specifier: ^4.1.6 + version: 4.1.7 importers: @@ -40,7 +58,10 @@ importers: devDependencies: '@changesets/cli': specifier: ^2.31.0 - version: 2.31.0(@types/node@25.6.0) + version: 2.31.0(@types/node@25.9.1) + lefthook: + specifier: 2.1.6 + version: 2.1.6 oxfmt: specifier: 'catalog:' version: 0.47.0 @@ -48,39 +69,112 @@ importers: specifier: 'catalog:' version: 1.64.0 turbo: - specifier: ^2.8.21 - version: 2.9.1 + specifier: ^2.9.14 + version: 2.9.16 + + catalogue: + dependencies: + '@tailor-platform/app-shell': + specifier: workspace:* + version: link:../packages/core + gray-matter: + specifier: 4.0.3 + version: 4.0.3 + react: + specifier: ^19.0.0 + version: 19.2.5 + react-dom: + specifier: ^19.0.0 + version: 19.2.5(react@19.2.5) + devDependencies: + '@types/react': + specifier: 'catalog:' + version: 19.2.13 + '@types/react-dom': + specifier: 'catalog:' + version: 19.2.3(@types/react@19.2.13) + typescript: + specifier: 'catalog:' + version: 5.9.3 + + e2e: + devDependencies: + '@playwright/test': + specifier: 1.51.1 + version: 1.51.1 + '@tailor-platform/app-shell': + specifier: workspace:* + version: link:../packages/core + '@tailor-platform/sdk': + specifier: ^1.45.1 + version: 1.45.1(@types/node@25.9.1)(@types/react@19.2.13)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3)) + '@tailwindcss/vite': + specifier: ^4.3.0 + version: 4.3.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + '@types/node': + specifier: 'catalog:' + version: 25.9.1 + '@types/react': + specifier: 'catalog:' + version: 19.2.13 + '@types/react-dom': + specifier: 'catalog:' + version: 19.2.3(@types/react@19.2.13) + '@vitejs/plugin-react': + specifier: 'catalog:' + version: 5.2.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + dotenv: + specifier: ^16.5.0 + version: 16.6.1 + react: + specifier: 'catalog:' + version: 19.2.6 + react-dom: + specifier: 'catalog:' + version: 19.2.6(react@19.2.6) + tailwindcss: + specifier: 'catalog:' + version: 4.2.4 + typescript: + specifier: 'catalog:' + version: 5.9.3 + vite: + specifier: 'catalog:' + version: 7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) examples/nextjs-app: dependencies: '@hookform/resolvers': specifier: ^5.2.2 - version: 5.2.2(react-hook-form@7.71.2(react@19.2.5)) + version: 5.2.2(react-hook-form@7.71.2(react@19.2.6)) '@tailor-platform/app-shell': specifier: workspace:* version: link:../../packages/core + lucide-react: + specifier: 'catalog:' + version: 1.8.0(react@19.2.6) next: - specifier: 16.2.3 - version: 16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + specifier: 16.2.6 + version: 16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.51.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react: - specifier: ^19.2.5 - version: 19.2.5 + specifier: 'catalog:' + version: 19.2.6 react-dom: - specifier: ^19.2.5 - version: 19.2.5(react@19.2.5) + specifier: 'catalog:' + version: 19.2.6(react@19.2.6) react-hook-form: specifier: ^7.71.2 - version: 7.71.2(react@19.2.5) + version: 7.71.2(react@19.2.6) zod: - specifier: ^4.4.3 - version: 4.4.3 + specifier: ^3.24.0 + version: 3.25.76 devDependencies: '@tailwindcss/postcss': specifier: 'catalog:' - version: 4.2.4 + version: 4.3.0 '@types/node': specifier: 'catalog:' - version: 25.6.0 + version: 25.9.1 '@types/react': specifier: 'catalog:' version: 19.2.13 @@ -106,21 +200,21 @@ importers: specifier: workspace:* version: link:../../packages/core lucide-react: - specifier: ^1.8.0 - version: 1.8.0(react@19.2.5) + specifier: 'catalog:' + version: 1.8.0(react@19.2.6) react: - specifier: ^19.2.5 - version: 19.2.5 + specifier: 'catalog:' + version: 19.2.6 react-dom: - specifier: ^19.2.5 - version: 19.2.5(react@19.2.5) + specifier: 'catalog:' + version: 19.2.6(react@19.2.6) tailwindcss: specifier: 'catalog:' version: 4.2.4 devDependencies: '@tailwindcss/vite': - specifier: ^4.2.2 - version: 4.2.2(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) + specifier: ^4.3.0 + version: 4.3.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) '@types/react': specifier: 'catalog:' version: 19.2.13 @@ -129,19 +223,19 @@ importers: version: 19.2.3(@types/react@19.2.13) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.2.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) + version: 5.2.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) typescript: specifier: ~5.9.3 version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) + version: 7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) packages/core: dependencies: '@base-ui/react': - specifier: ^1.4.1 - version: 1.4.1(@types/react@19.2.13)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + specifier: ^1.5.0 + version: 1.5.0(@types/react@19.2.13)(date-fns@4.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@fontsource-variable/geist': specifier: ^5.2.8 version: 5.2.8 @@ -169,43 +263,28 @@ importers: encoding-japanese: specifier: ^2.2.0 version: 2.2.0 - es-toolkit: - specifier: ^1.45.1 - version: 1.45.1 - graphql: - specifier: ^16.13.2 - version: 16.13.2 lucide-react: - specifier: ^1.8.0 - version: 1.8.0(react@19.2.5) + specifier: 'catalog:' + version: 1.8.0(react@19.2.6) papaparse: specifier: ^5.5.3 version: 5.5.3 - react: - specifier: ^19.2.5 - version: 19.2.5 - react-dom: - specifier: ^19.2.5 - version: 19.2.5(react@19.2.5) - react-hook-form: - specifier: ^7.71.2 - version: 7.71.2(react@19.2.5) react-router: specifier: ^7.14.1 - version: 7.14.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 7.14.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6) sonner: specifier: ^2.0.7 - version: 2.0.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 2.0.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6) tailwind-merge: - specifier: ^3.5.0 - version: 3.5.0 + specifier: ^3.6.0 + version: 3.6.0 devDependencies: '@tailwindcss/postcss': specifier: 'catalog:' - version: 4.2.4 + version: 4.3.0 '@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.13))(@types/react@19.2.13)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.1) @@ -214,7 +293,7 @@ importers: version: 2.2.1 '@types/node': specifier: 'catalog:' - version: 25.6.0 + version: 25.9.1 '@types/papaparse': specifier: ^5.5.2 version: 5.5.2 @@ -226,13 +305,19 @@ importers: version: 19.2.3(@types/react@19.2.13) '@vitejs/plugin-react': specifier: 'catalog:' - version: 5.2.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) + version: 5.2.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) happy-dom: - specifier: ^20.6.2 - version: 20.6.2 + specifier: ^20.9.0 + version: 20.9.0 postcss: specifier: ^8 version: 8.5.12 + react: + specifier: 'catalog:' + version: 19.2.6 + react-dom: + specifier: 'catalog:' + version: 19.2.6(react@19.2.6) tailwindcss: specifier: 'catalog:' version: 4.2.4 @@ -244,19 +329,19 @@ importers: version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) + version: 7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) vite-plugin-dts: specifier: ^4.5.0 - version: 4.5.4(@types/node@25.6.0)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) + version: 4.5.4(@types/node@25.9.1)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) vite-plugin-externalize-deps: specifier: ^0.10.0 - version: 0.10.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) + version: 0.10.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) vite-tsconfig-paths: specifier: ^6.1.1 - version: 6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) + version: 6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) vitest: - specifier: ^4.1.4 - version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) + specifier: 'catalog:' + version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) packages/sdk-plugin: devDependencies: @@ -265,19 +350,19 @@ importers: version: link:../core '@tailor-platform/sdk': specifier: ^1.45.1 - version: 1.45.1(@types/node@25.6.0)(@types/react@19.2.13)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3)) + version: 1.45.1(@types/node@25.9.1)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3)) oxlint: specifier: 'catalog:' version: 1.64.0 tsdown: - specifier: ^0.21.7 - version: 0.21.7(typescript@5.9.3) + specifier: 'catalog:' + version: 0.22.1(tsx@4.21.0)(typescript@5.9.3) typescript: specifier: ^5 version: 5.9.3 vitest: - specifier: ^4 - version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) + specifier: 'catalog:' + version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) packages/vite-plugin: dependencies: @@ -287,19 +372,19 @@ importers: devDependencies: '@types/node': specifier: 'catalog:' - version: 25.6.0 + version: 25.9.1 tsdown: - specifier: ^0.21.7 - version: 0.21.7(typescript@5.9.3) + specifier: 'catalog:' + version: 0.22.1(tsx@4.21.0)(typescript@5.9.3) typescript: specifier: ^5 version: 5.9.3 vite: specifier: 'catalog:' - version: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) + version: 7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) vitest: - specifier: ^4.1.4 - version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) + specifier: 'catalog:' + version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) packages: @@ -319,15 +404,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@asamuzakjp/css-color@4.1.2': - resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} - - '@asamuzakjp/dom-selector@6.8.1': - resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} - - '@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'} @@ -344,9 +420,9 @@ packages: resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} - '@babel/generator@8.0.0-rc.3': - resolution: {integrity: sha512-em37/13/nR320G4jab/nIIHZgc2Wz2y/D39lxnTyxB4/D/omPQncl/lSdlnJY1OhQcRGugTSIF2l/69o31C9dA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/generator@8.0.0-rc.6': + resolution: {integrity: sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ==} + engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} @@ -378,6 +454,10 @@ packages: resolution: {integrity: sha512-AmwWFx1m8G/a5cXkxLxTiWl+YEoWuoFLUCwqMlNuWO1tqAYITQAbCRPUkyBHv1VOFgfjVOqEj6L3u15J5ZCzTA==} engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-string-parser@8.0.0-rc.6': + resolution: {integrity: sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} @@ -386,6 +466,10 @@ packages: resolution: {integrity: sha512-8AWCJ2VJJyDFlGBep5GpaaQ9AAaE/FjAcrqI7jyssYhtL7WGV0DOKpJsQqM037xDbpRLHXsY8TwU7zDma7coOw==} engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-validator-identifier@8.0.0-rc.6': + resolution: {integrity: sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -394,16 +478,6 @@ packages: resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.29.3': resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} engines: {node: '>=6.0.0'} @@ -414,6 +488,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + '@babel/parser@8.0.0-rc.6': + resolution: {integrity: sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==} + engines: {node: ^22.18.0 || >=24.11.0} + hasBin: true + '@babel/plugin-transform-react-jsx-self@7.27.1': resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} @@ -450,12 +529,16 @@ packages: resolution: {integrity: sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==} engines: {node: ^20.19.0 || >=22.12.0} + '@babel/types@8.0.0-rc.6': + resolution: {integrity: sha512-p7/ABylAYlexb31wtRdIfH9L9A0Z2T/9H6zAqzqndkY2PLkvNNc580wGhp/gGKN4Sp9sQvSkhc6Oga8/O+wTyw==} + engines: {node: ^22.18.0 || >=24.11.0} + '@badgateway/oauth2-client@3.3.1': resolution: {integrity: sha512-7R4mZocEt8nOIMCz9cQyxsrY7n/jhFW9YUW6Er9ySnBzH92wA0KmQUR1cT2encq2Lix6kRD2GyQRAmT1dWtwzg==} engines: {node: '>= 18'} - '@base-ui/react@1.4.1': - resolution: {integrity: sha512-Ab5/LIhcmL8BQcsBUYiOfkSDRdLpvgUBzMK30cu684JPcLclYlztharvCZyNNgzJtbAiREzI9q0pI5erHCMgCw==} + '@base-ui/react@1.5.0': + resolution: {integrity: sha512-z1gSAlced1yY+iM+mHDEtIkD8UI3Ebs52MuBPxvV6f5hRutk+xvCH/wuB7hDqDzK9JG5FoMz5nhrqtSs1wjt1A==} engines: {node: '>=14.0.0'} peerDependencies: '@date-fns/tz': ^1.2.0 @@ -471,8 +554,8 @@ packages: date-fns: optional: true - '@base-ui/utils@0.2.8': - resolution: {integrity: sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ==} + '@base-ui/utils@0.2.9': + resolution: {integrity: sha512-x/PDDCYzoqPpjrdyb3VcyylTI2IjUXEtYDGi5foh7KsnmNJIIaVwA2GLgDH1dps1GgXiJbA60hM+AyuTfQzIvw==} peerDependencies: '@types/react': ^17 || ^18 || ^19 react: ^17 || ^18 || ^19 @@ -484,12 +567,6 @@ packages: '@bufbuild/protobuf@2.12.0': resolution: {integrity: sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA==} - '@bundled-es-modules/cookie@2.0.1': - resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} - - '@bundled-es-modules/statuses@1.0.1': - resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} - '@changesets/apply-release-plan@7.1.1': resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} @@ -557,42 +634,6 @@ packages: peerDependencies: '@bufbuild/protobuf': ^2.7.0 - '@csstools/color-helpers@6.0.2': - resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} - engines: {node: '>=20.19.0'} - - '@csstools/css-calc@3.2.0': - resolution: {integrity: sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==} - 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.0': - resolution: {integrity: sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==} - 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.3': - resolution: {integrity: sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==} - 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'} - '@dependents/detective-less@5.0.3': resolution: {integrity: sha512-v6oD9Ukp+N7V4n6p5I/+mM5fIohSfkrDSGlFm5w/pYmchvbk+sMIHsLxrFJ5Lnujewj1BzWL0K84d88lwZAMQA==} engines: {node: '>=18'} @@ -606,321 +647,162 @@ packages: '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - '@emnapi/runtime@1.9.0': - resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} - '@emnapi/runtime@1.9.2': resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@esbuild/aix-ppc64@0.27.4': - resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.4': - resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.27.7': resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.27.4': - resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.27.7': resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.4': - resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.27.7': resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.4': - resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.27.7': resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.4': - resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.27.7': resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.4': - resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.27.7': resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.4': - resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.27.7': resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.27.4': - resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.27.7': resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.4': - resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.27.7': resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.27.4': - resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.27.7': resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.27.4': - resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.27.7': resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.27.4': - resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.27.7': resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.27.4': - resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.27.7': resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.27.4': - resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.27.7': resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.4': - resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.27.7': resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.4': - resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.27.7': resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.4': - resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.27.7': resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.4': - resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.27.7': resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.4': - resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.27.7': resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.4': - resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.27.7': resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.4': - resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - '@esbuild/openharmony-arm64@0.27.7': resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.4': - resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.27.7': resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.4': - resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.27.7': resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.4': - resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.27.7': resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.4': - resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.27.7': resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} @@ -983,89 +865,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1409,10 +1307,6 @@ packages: '@microsoft/tsdoc@0.16.0': resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} - '@mswjs/interceptors@0.39.8': - resolution: {integrity: sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==} - engines: {node: '>=18'} - '@napi-rs/keyring-darwin-arm64@1.2.0': resolution: {integrity: sha512-CA83rDeyONDADO25JLZsh3eHY8yTEtm/RS6ecPsY+1v+dSawzT9GywBMu2r6uOp1IEhQs/xAfxgybGAFr17lSA==} engines: {node: '>= 10'} @@ -1442,30 +1336,35 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/keyring-linux-arm64-musl@1.2.0': resolution: {integrity: sha512-8TDymrpC4P1a9iDEaegT7RnrkmrJN5eNZh3Im3UEV5PPYGtrb82CRxsuFohthCWQW81O483u1bu+25+XA4nKUw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/keyring-linux-riscv64-gnu@1.2.0': resolution: {integrity: sha512-awsB5XI1MYL7fwfjMDGmKOWvNgJEO7mM7iVEMS0fO39f0kVJnOSjlu7RHcXAF0LOx+0VfF3oxbWqJmZbvRCRHw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/keyring-linux-x64-gnu@1.2.0': resolution: {integrity: sha512-8E+7z4tbxSJXxIBqA+vfB1CGajpCDRyTyqXkBig5NtASrv4YXcntSo96Iah2QDR5zD3dSTsmbqJudcj9rKKuHQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/keyring-linux-x64-musl@1.2.0': resolution: {integrity: sha512-8RZ8yVEnmWr/3BxKgBSzmgntI7lNEsY7xouNfOsQkuVAiCNmxzJwETspzK3PQ2FHtDxgz5vHQDEBVGMyM4hUHA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/keyring-win32-arm64-msvc@1.2.0': resolution: {integrity: sha512-AoqaDZpQ6KPE19VBLpxyORcp+yWmHI9Xs9Oo0PJ4mfHma4nFSLVdhAubJCxdlNptHe5va7ghGCHj3L9Akiv4cQ==} @@ -1489,62 +1388,63 @@ packages: resolution: {integrity: sha512-d0d4Oyxm+v980PEq1ZH2PmS6cvpMIRc17eYpiU47KgW+lzxklMu6+HOEOPmxrpnF/XQZ0+Q78I2mgMhbIIo/dg==} engines: {node: '>= 10'} - '@napi-rs/wasm-runtime@1.1.1': - resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} - '@napi-rs/wasm-runtime@1.1.4': resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 - '@next/env@16.2.3': - resolution: {integrity: sha512-ZWXyj4uNu4GCWQw9cjRxWlbD+33mcDszIo9iQxFnBX3Wmgq9ulaSJcl6VhuWx5pCWqqD+9W6Wfz7N0lM5lYPMA==} + '@next/env@16.2.6': + resolution: {integrity: sha512-gd8HoHN4ufj73WmR3JmVolrpJR47ILK6LouP5xElPglaVxir6e1a7VzvTvDWkOoPXT9rkkTzyCxBu4yeZfZwcw==} - '@next/swc-darwin-arm64@16.2.3': - resolution: {integrity: sha512-u37KDKTKQ+OQLvY+z7SNXixwo4Q2/IAJFDzU1fYe66IbCE51aDSAzkNDkWmLN0yjTUh4BKBd+hb69jYn6qqqSg==} + '@next/swc-darwin-arm64@16.2.6': + resolution: {integrity: sha512-ZJGkkcNfYgrrMkqOdZ7zoLa1TOy0qpcMfk/z4Mh/FKUz40gVO+HNQWqmLxf67Z5WB64DRp0dhEbyHfel+6sJUg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.2.3': - resolution: {integrity: sha512-gHjL/qy6Q6CG3176FWbAKyKh9IfntKZTB3RY/YOJdDFpHGsUDXVH38U4mMNpHVGXmeYW4wj22dMp1lTfmu/bTQ==} + '@next/swc-darwin-x64@16.2.6': + resolution: {integrity: sha512-v/YLBHIY132Ced3puBJ7YJKw1lqsCrgcNo2aRJlCEyQrrCeRJlvGlnmxhPxNQI3KE3N1DN5r9TPNPvka3nq5RQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.2.3': - resolution: {integrity: sha512-U6vtblPtU/P14Y/b/n9ZY0GOxbbIhTFuaFR7F4/uMBidCi2nSdaOFhA0Go81L61Zd6527+yvuX44T4ksnf8T+Q==} + '@next/swc-linux-arm64-gnu@16.2.6': + resolution: {integrity: sha512-RPOvqlYBbcQjkz9VQQDZ2T2bARIjXZV1KFlt+V2Mr6SW/e4I9fcKsaA0hdyf2FHoTlsV2xnBd5Y912rP/1Ce6w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] - '@next/swc-linux-arm64-musl@16.2.3': - resolution: {integrity: sha512-/YV0LgjHUmfhQpn9bVoGc4x4nan64pkhWR5wyEV8yCOfwwrH630KpvRg86olQHTwHIn1z59uh6JwKvHq1h4QEw==} + '@next/swc-linux-arm64-musl@16.2.6': + resolution: {integrity: sha512-URUTu1+dMkxJsPFgm+OeEvq9wf5sujw0EvgYy80TDGHTSLTnIHeqb0Eu8A3sC95IRgjejQL+kC4mw+4yPxiAXA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] - '@next/swc-linux-x64-gnu@16.2.3': - resolution: {integrity: sha512-/HiWEcp+WMZ7VajuiMEFGZ6cg0+aYZPqCJD3YJEfpVWQsKYSjXQG06vJP6F1rdA03COD9Fef4aODs3YxKx+RDQ==} + '@next/swc-linux-x64-gnu@16.2.6': + resolution: {integrity: sha512-DOj182mPV8G3UkrayLoREM5YEYI+Dk5wv7Ox9xl1fFibAELEsFD0lDPfHIeILlutMMfdyhlzYPELG3peuKaurw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] - '@next/swc-linux-x64-musl@16.2.3': - resolution: {integrity: sha512-Kt44hGJfZSefebhk/7nIdivoDr3Ugp5+oNz9VvF3GUtfxutucUIHfIO0ZYO8QlOPDQloUVQn4NVC/9JvHRk9hw==} + '@next/swc-linux-x64-musl@16.2.6': + resolution: {integrity: sha512-HKQ5SP/V/ub73UvF7n/zeJlxk2kLmtL7Wzrg4WfmkjmNos5onJ2tKu7yZOPdL18A6Svfn3max29ym+ry7NkK4g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] - '@next/swc-win32-arm64-msvc@16.2.3': - resolution: {integrity: sha512-O2NZ9ie3Tq6xj5Z5CSwBT3+aWAMW2PIZ4egUi9MaWLkwaehgtB7YZjPm+UpcNpKOme0IQuqDcor7BsW6QBiQBw==} + '@next/swc-win32-arm64-msvc@16.2.6': + resolution: {integrity: sha512-LZXpTlPyS5v7HhSmnvsLGP3iIYgYOBnc8r8ArlT55sGHV89bR2HlDdBjWQ+PY6SJMmk8TuVGFuxalnP3k/0Dwg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.2.3': - resolution: {integrity: sha512-Ibm29/GgB/ab5n7XKqlStkm54qqZE8v2FnijUPBgrd67FWrac45o/RsNlaOWjme/B5UqeWt/8KM4aWBwA1D2Kw==} + '@next/swc-win32-x64-msvc@16.2.6': + resolution: {integrity: sha512-F0+4i0h9J6C4eE3EAPWsoCk7UW/dbzOjyzxY0qnDUOYFu6FFmdZ6l97/XdV3/Nz3VYyO7UWjyEJUXkGqcoXfMA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1561,15 +1461,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@open-draft/deferred-promise@2.2.0': - resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} - - '@open-draft/logger@0.3.0': - resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} - - '@open-draft/until@2.1.0': - resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@opentelemetry/api-logs@0.215.0': resolution: {integrity: sha512-xrFlqhdhUyO8wSRn6DjE0145/HPWSJ5Nm0C7vWua6TdL/FSEAZvEyvdsa9CRXuxo9ebb7j/NEPhEcO62IJ0qUA==} engines: {node: '>=8.0.0'} @@ -1689,48 +1580,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-arm64-musl@0.127.0': resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': resolution: {integrity: sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-riscv64-musl@0.127.0': resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxc-parser/binding-linux-s390x-gnu@0.127.0': resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-gnu@0.127.0': resolution: {integrity: sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-musl@0.127.0': resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxc-parser/binding-openharmony-arm64@0.127.0': resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==} @@ -1761,12 +1660,12 @@ packages: cpu: [x64] os: [win32] - '@oxc-project/types@0.122.0': - resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} - '@oxc-project/types@0.127.0': resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} + '@oxc-project/types@0.133.0': + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@oxfmt/binding-android-arm-eabi@0.47.0': resolution: {integrity: sha512-KrMQRdMi/upr81qT4ijK6X6BNp6jqpMY7FwILQnwIy9QLc3qpnhUx5rsCLGzn4ewsCQ0CNAspN2ogmP1GXLyLw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1814,48 +1713,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-arm64-musl@0.47.0': resolution: {integrity: sha512-IxtQC/sbBi4ubbY+MdwdanRWrG9InQJVZqyMsBa5IUaQcnSg86gQme574HxXMC1p4bo4YhV99zQ+wNnGCvEgzw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxfmt/binding-linux-ppc64-gnu@0.47.0': resolution: {integrity: sha512-EWXEhOMbWO0q6eJSbu0QLkU8cKi0ljlYLngeDs2Ocu/pm1rrLwyQiYzlFbdnMRURI4w9ndr1sI9rSbhlJ5o23Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-riscv64-gnu@0.47.0': resolution: {integrity: sha512-tZrjS11TUiDuEpRaqdk8K9F9xETRyKXfuZKmdeW+Gj7coBnm7+8sBEfyt033EAFEQSlkniAXvBLh+Qja2ioGBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-riscv64-musl@0.47.0': resolution: {integrity: sha512-KBFy+2CFKUCZzYwX2ZOPQKck1vjQbz+hextuc19G4r0WRJwadfAeuQMQRQvB+Ivc8brlbOVg7et8K7E467440g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxfmt/binding-linux-s390x-gnu@0.47.0': resolution: {integrity: sha512-REUPFKVGSiK99B+9eaPhluEVglzaoj/SMykNC5SUiV2RSsBfV5lWN7Y0iCIc251Wz3GaeAGZsJ/zj3gjarxdFg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-x64-gnu@0.47.0': resolution: {integrity: sha512-KVftVSVEDeIfRW3TIeLe3aNI/iY4m1fu5mDwHcisKMZSCMKLkrhFsjowC7o9RoqNPxbbglm2+/6KAKBIts2t0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxfmt/binding-linux-x64-musl@0.47.0': resolution: {integrity: sha512-DTsmGEaA2860Aq5VUyDO8/MT9NFxwVL93RnRYmpMwK6DsSkThmvEpqoUDDljziEpAedMRG19SCogrNbINSbLUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxfmt/binding-openharmony-arm64@0.47.0': resolution: {integrity: sha512-8r5BDro7fLOBoq1JXHLVSs55OlrxQhEso4HVo0TcY7OXJUPYfjPoOaYL5us+yIwqyP9rQwN+rxuiNFSmaxSuOQ==} @@ -1928,48 +1835,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-arm64-musl@1.64.0': resolution: {integrity: sha512-00QQ0h0Y7u0G69BgiH3+ky2aaq/QvkDL6DYok8htIuJHxybiux5aQ8jwmg8qIk9wha6UagUP2BAwAzbemcJbpg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxlint/binding-linux-ppc64-gnu@1.64.0': resolution: {integrity: sha512-2GaimTV6EMW+s5HS0An3oGbQme3BgHswvfVdGk3EB57Xe9+/gyT+Qd7lNVzb3rtir52vbIPzXfaYArzs5b5zcw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-riscv64-gnu@1.64.0': resolution: {integrity: sha512-H46AtFb9wypjoVwGdlxrm0DsD809NGmtiK9HiyPKTxkSte2YjhC4S+00rOIrwCaxcyPiGid3Y3OMXp5KMAkGZw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-riscv64-musl@1.64.0': resolution: {integrity: sha512-HEgsidjjvvyzdg82icYkuFCf7REDV7B9JFwbIMbVwrKLBY0MrXX+bku3POn/hduZ2yW91IyVDUMq0Bf02KwXQw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxlint/binding-linux-s390x-gnu@1.64.0': resolution: {integrity: sha512-Axvm8qryotmKN00P5w4JapaSjvP2LOSbdbBJiX+2SuHd3QzhW7TUc8skqgw+ahQZ5DmzEYeHCqauvW8f32Ns6Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxlint/binding-linux-x64-gnu@1.64.0': resolution: {integrity: sha512-cR60vSd7+m+KRZ3GQGfDxWwahW5RMXg0qlGvAluZr0fTUYvw0H9N9AXAF/M/PMqgytyqvVNmBAkJG9l7U30Y1g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxlint/binding-linux-x64-musl@1.64.0': resolution: {integrity: sha512-2u/aPZ9pEg7HnvZPDsHxUGNnrpr4qaHi+mCgLgpt+LYRzPrS4Px4wPfkIdRdr2GvKnaYyt+XSlto0Vm5sbStTg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxlint/binding-openharmony-arm64@1.64.0': resolution: {integrity: sha512-kfhkGfCdoXLSxEkrhDlJrvBYajGmq+ma4EMc53dsOWTq+rIBOlI0vTBmpZNnM5oH2LY/K/w1HAK+UQEgjgpVUg==} @@ -1995,6 +1910,11 @@ packages: cpu: [x64] os: [win32] + '@playwright/test@1.51.1': + resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==} + engines: {node: '>=18'} + hasBin: true + '@prisma/config@6.8.2': resolution: {integrity: sha512-ZJY1fF4qRBPdLQ/60wxNtX+eu89c3AkYEcP7L3jkp0IPXCNphCYxikTg55kPJLDOG6P0X+QG5tCv6CmsBRZWFQ==} @@ -2045,23 +1965,17 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@rolldown/binding-android-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - '@rolldown/binding-android-arm64@1.0.0-rc.17': resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} + '@rolldown/binding-android-arm64@1.0.3': + resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] - os: [darwin] + os: [android] '@rolldown/binding-darwin-arm64@1.0.0-rc.17': resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==} @@ -2069,10 +1983,10 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.12': - resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} + '@rolldown/binding-darwin-arm64@1.0.3': + resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + cpu: [arm64] os: [darwin] '@rolldown/binding-darwin-x64@1.0.0-rc.17': @@ -2081,11 +1995,11 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': - resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} + '@rolldown/binding-darwin-x64@1.0.3': + resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] - os: [freebsd] + os: [darwin] '@rolldown/binding-freebsd-x64@1.0.0-rc.17': resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==} @@ -2093,11 +2007,11 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': - resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} + '@rolldown/binding-freebsd-x64@1.0.3': + resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] + cpu: [x64] + os: [freebsd] '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==} @@ -2105,10 +2019,10 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] + cpu: [arm] os: [linux] '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': @@ -2116,94 +2030,106 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': - resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} + '@rolldown/binding-linux-arm64-gnu@1.0.3': + resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} + '@rolldown/binding-linux-arm64-musl@1.0.3': + resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] + cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] + cpu: [ppc64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} + '@rolldown/binding-linux-s390x-gnu@1.0.3': + resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': - resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} + '@rolldown/binding-linux-x64-gnu@1.0.3': + resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} + '@rolldown/binding-linux-x64-musl@1.0.3': + resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - + cpu: [x64] + os: [linux] + libc: [musl] + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': - resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] + '@rolldown/binding-openharmony-arm64@1.0.3': + resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': - resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} + '@rolldown/binding-wasm32-wasi@1.0.3': + resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] + cpu: [wasm32] '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==} @@ -2211,10 +2137,10 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': - resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} + '@rolldown/binding-win32-arm64-msvc@1.0.3': + resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] + cpu: [arm64] os: [win32] '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': @@ -2223,8 +2149,11 @@ packages: cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.12': - resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} + '@rolldown/binding-win32-x64-msvc@1.0.3': + resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] '@rolldown/pluginutils@1.0.0-rc.17': resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==} @@ -2232,6 +2161,9 @@ packages: '@rolldown/pluginutils@1.0.0-rc.3': resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} @@ -2275,71 +2207,85 @@ packages: resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.60.0': resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.60.0': resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.60.0': resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.60.0': resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.60.0': resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.60.0': resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.60.0': resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.60.0': resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.60.0': resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.60.0': resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.0': resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.2': resolution: {integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.60.0': resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.60.0': resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==} @@ -2430,24 +2376,28 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.12.11': resolution: {integrity: sha512-LlBxPh/32pyQsu2emMEOFRm7poEFLsw12Y1mPY7FWZiZeptomKSOSHRzKDz9EolMiV4qhK1caP1lvW4vminYgQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-x64-gnu@1.12.11': resolution: {integrity: sha512-bOjiZB8O/1AzHkzjge1jqX62HGRIpOHqFUrGPfAln/NC6NR+Z2A78u3ixV7k5KesWZFhCV0YVGJL+qToL27myA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.12.11': resolution: {integrity: sha512-4dzAtbT/m3/UjF045+33gLiHd8aSXJDoqof7gTtu4q0ZyAf7XJ3HHspz+/AvOJLVo4FHHdFcdXhmo/zi1nFn8A==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.12.11': resolution: {integrity: sha512-h8HiwBZErKvCAmjW92JvQp0iOqm6bncU4ac5jxBGkRApabpUenNJcj3h2g5O6GL5K6T9/WhnXE5gyq/s1fhPQg==} @@ -2501,134 +2451,69 @@ packages: resolution: {integrity: sha512-XRzhSGAa46tdeR8TIfFBXUMHIxU5tMO/vueB+ocVaeC0wjktj+PfXsE1bOD99kP0+ox0Jm8eTpnNwDlSxfGJGg==} hasBin: true - '@tailwindcss/node@4.2.2': - resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} - - '@tailwindcss/node@4.2.4': - resolution: {integrity: sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==} - - '@tailwindcss/oxide-android-arm64@4.2.2': - resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [android] + '@tailwindcss/node@4.3.0': + resolution: {integrity: sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==} - '@tailwindcss/oxide-android-arm64@4.2.4': - resolution: {integrity: sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==} + '@tailwindcss/oxide-android-arm64@4.3.0': + resolution: {integrity: sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==} engines: {node: '>= 20'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.2.2': - resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-arm64@4.2.4': - resolution: {integrity: sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==} + '@tailwindcss/oxide-darwin-arm64@4.3.0': + resolution: {integrity: sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==} engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.2.2': - resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==} - engines: {node: '>= 20'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.2.4': - resolution: {integrity: sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==} + '@tailwindcss/oxide-darwin-x64@4.3.0': + resolution: {integrity: sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==} engines: {node: '>= 20'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.2.2': - resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==} - engines: {node: '>= 20'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-freebsd-x64@4.2.4': - resolution: {integrity: sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==} + '@tailwindcss/oxide-freebsd-x64@4.3.0': + resolution: {integrity: sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==} engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': - resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==} - engines: {node: '>= 20'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': - resolution: {integrity: sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': + resolution: {integrity: sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==} engines: {node: '>= 20'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': - resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': - resolution: {integrity: sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': - resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': + resolution: {integrity: sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] + libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.2.4': - resolution: {integrity: sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==} + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': + resolution: {integrity: sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] + libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': - resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} - engines: {node: '>= 20'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-gnu@4.2.4': - resolution: {integrity: sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==} - engines: {node: '>= 20'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-musl@4.2.2': - resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': + resolution: {integrity: sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==} engines: {node: '>= 20'} cpu: [x64] os: [linux] + libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.2.4': - resolution: {integrity: sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==} + '@tailwindcss/oxide-linux-x64-musl@4.3.0': + resolution: {integrity: sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==} engines: {node: '>= 20'} cpu: [x64] os: [linux] + libc: [musl] - '@tailwindcss/oxide-wasm32-wasi@4.2.2': - resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib - - '@tailwindcss/oxide-wasm32-wasi@4.2.4': - resolution: {integrity: sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==} + '@tailwindcss/oxide-wasm32-wasi@4.3.0': + resolution: {integrity: sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -2639,43 +2524,27 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': - resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==} + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': + resolution: {integrity: sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==} engines: {node: '>= 20'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': - resolution: {integrity: sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': - resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==} - engines: {node: '>= 20'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.2.4': - resolution: {integrity: sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==} + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': + resolution: {integrity: sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==} engines: {node: '>= 20'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.2.2': - resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==} + '@tailwindcss/oxide@4.3.0': + resolution: {integrity: sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==} engines: {node: '>= 20'} - '@tailwindcss/oxide@4.2.4': - resolution: {integrity: sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==} - engines: {node: '>= 20'} - - '@tailwindcss/postcss@4.2.4': - resolution: {integrity: sha512-wgAVj6nUWAolAu8YFvzT2cTBIElWHkjZwFYovF+xsqKsW2ADxM/X2opxj5NsF/qVccAOjRNe8X2IdPzMsWyHTg==} + '@tailwindcss/postcss@4.3.0': + resolution: {integrity: sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w==} - '@tailwindcss/vite@4.2.2': - resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} + '@tailwindcss/vite@4.3.0': + resolution: {integrity: sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 @@ -2735,33 +2604,33 @@ packages: '@ts-morph/common@0.29.0': resolution: {integrity: sha512-35oUmphHbJvQ/+UTwFNme/t2p3FoKiGJ5auTjjpNTop2dyREspirjMy82PLSC1pnDJ8ah1GU98hwpVt64YXQsg==} - '@turbo/darwin-64@2.9.1': - resolution: {integrity: sha512-d1zTcIf6VWT7cdfjhi0X36C2PRsUi2HdEwYzVgkLHmuuYtL+1Y1Zu3JdlouoB/NjG2vX3q4NnKLMNhDOEweoIg==} + '@turbo/darwin-64@2.9.16': + resolution: {integrity: sha512-jLjApWTSNd7JZ5JaLYfelW1ytnGQOvB7ivl+2RD1xQvJTbi8I9gBjzcga7tDZVPyaxpl10YTfJt3BrYXR18KDw==} cpu: [x64] os: [darwin] - '@turbo/darwin-arm64@2.9.1': - resolution: {integrity: sha512-AwJ4mA++Kpem33Lcov093hS1LrgqbKxqq5FCReoqsA8ayEG6eAJAo8ItDd9qQTdBiXxZH8GHCspLAMIe1t3Xyw==} + '@turbo/darwin-arm64@2.9.16': + resolution: {integrity: sha512-YPgrn+5HIGzrx0O2a631SV4MBQUe4W/DafMFUuBVgaU32PW9/OTT0ehviF0QSxTXuRJlHvW2eUTemddF5/spmw==} cpu: [arm64] os: [darwin] - '@turbo/linux-64@2.9.1': - resolution: {integrity: sha512-HT9SjKkjEw9uvlgly/qwCGEm4wOXOwQPSPS+wkg+/O1Qan3F1uU/0PFYzxl3m4lfuV3CP9wr2Dq5dPrUX+B9Ag==} + '@turbo/linux-64@2.9.16': + resolution: {integrity: sha512-vAEf1H6l26lTpl9FJ/peQo1NUB8RC0sbEJJz5mPcUhHA2bPDup2x3CZPgo/bH8S4cUcBLm4FN3UHd5iUO2RAew==} cpu: [x64] os: [linux] - '@turbo/linux-arm64@2.9.1': - resolution: {integrity: sha512-+4s5GZs3kjxc1KMhLBhoQy4UBkXjOhgidA9ipNllkA4JLivSqUCuOgU1Xbyp6vzYrsqHJ9vvwo/2mXgEtD6ZHg==} + '@turbo/linux-arm64@2.9.16': + resolution: {integrity: sha512-xDBLR2PZg4BrQOchfG6svgpv5FCNJ2TOtT2psLdEJcdKo1BH+pnPs9Xj6pvUjgfkHbuvBOfeE4R6tvxMoQKDHQ==} cpu: [arm64] os: [linux] - '@turbo/windows-64@2.9.1': - resolution: {integrity: sha512-ZO7GCyQd5HV564XWHc9KysjanFfM3DmnWquyEByu+hQMq42g9OMU/fYOCfHS6Xj2aXkIg2FHJeRV+iAck2YrbQ==} + '@turbo/windows-64@2.9.16': + resolution: {integrity: sha512-NBAJnaUiGdgkSzQwUIdOvkCkcpTSu58G/sBGa0mvBtzfvFOOgrQwepKOOQ8cp6sWM6OcKDNFj2p1dsZA1OWjPg==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.9.1': - resolution: {integrity: sha512-BjX2fdz38mBb/H94JXrD5cJ+mEq8NmsCbYdC42JzQebJ0X8EdNgyFoEhOydPGViOmaRmhhdZnPZKKn6wahSpcA==} + '@turbo/windows-arm64@2.9.16': + resolution: {integrity: sha512-Y7SJppD0Z8wjO3Ec0ZGd9KQ4Yv0BMnA8CIowj5Vp+OEVsosXDG2weK6/t1RRLfJmc2Ozrnd6y4DOgQys+mn3WQ==} cpu: [arm64] os: [win32] @@ -2789,9 +2658,6 @@ packages: '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -2813,6 +2679,9 @@ packages: '@types/node@25.6.0': resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + '@types/node@25.9.1': + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} + '@types/papaparse@5.5.2': resolution: {integrity: sha512-gFnFp/JMzLHCwRf7tQHrNnfhN4eYBVYYI897CGX4MY1tzY9l2aLkVyx2IlKZ/SAqDbB3I1AOZW5gTMGGsqWliA==} @@ -2824,9 +2693,6 @@ packages: '@types/react@19.2.13': resolution: {integrity: sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==} - '@types/statuses@2.0.6': - resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} - '@types/tinycolor2@1.4.6': resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} @@ -2871,11 +2737,11 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - '@vitest/expect@4.1.4': - resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==} + '@vitest/expect@4.1.7': + resolution: {integrity: sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==} - '@vitest/mocker@4.1.4': - resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==} + '@vitest/mocker@4.1.7': + resolution: {integrity: sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2885,20 +2751,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.4': - resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==} + '@vitest/pretty-format@4.1.7': + resolution: {integrity: sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==} - '@vitest/runner@4.1.4': - resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==} + '@vitest/runner@4.1.7': + resolution: {integrity: sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==} - '@vitest/snapshot@4.1.4': - resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==} + '@vitest/snapshot@4.1.7': + resolution: {integrity: sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==} - '@vitest/spy@4.1.4': - resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==} + '@vitest/spy@4.1.7': + resolution: {integrity: sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==} - '@vitest/utils@4.1.4': - resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} + '@vitest/utils@4.1.7': + resolution: {integrity: sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==} '@volar/language-core@2.4.27': resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} @@ -2957,10 +2823,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - ajv-draft-04@1.0.0: resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: @@ -3027,8 +2889,8 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - ansis@4.2.0: - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + ansis@4.3.1: + resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==} engines: {node: '>=14'} any-promise@1.3.0: @@ -3094,9 +2956,6 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} - bidi-js@1.0.3: - resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} - birpc@4.0.0: resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} @@ -3224,10 +3083,6 @@ packages: resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -3303,10 +3158,6 @@ packages: resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - cookie@1.1.1: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} @@ -3315,21 +3166,9 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-tree@3.2.1: - resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - cssstyle@5.3.7: - resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==} - engines: {node: '>=20'} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - data-urls@6.0.1: - resolution: {integrity: sha512-euIQENZg6x8mj3fO6o9+fOW8MimUI4PpD/fZBhJfeioZVy9TUpM4UY7KjQNVZFlqwJ0UdzRDzkycB997HEq1BQ==} - engines: {node: '>=20'} - date-fns@4.1.0: resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} @@ -3353,9 +3192,6 @@ packages: supports-color: optional: true - decimal.js@10.6.0: - resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -3375,8 +3211,8 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} dependency-tree@11.4.3: resolution: {integrity: sha512-Y2gzOJ2Rb2X7MN6pT9llWpXxl5J5s5/11CBpJ5b85DjEqZH7jv3T9RO6HRV/PI/3MDmaKn/g7uoYdYmSb9vLlw==} @@ -3452,9 +3288,13 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dts-resolver@2.1.3: - resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} - engines: {node: '>=20.19.0'} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dts-resolver@3.0.0: + resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==} + engines: {node: ^22.18.0 || >=24.0.0} peerDependencies: oxc-resolver: '>=11.0.0' peerDependenciesMeta: @@ -3476,18 +3316,14 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - empathic@2.0.0: - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + empathic@2.0.1: + resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} engines: {node: '>=14'} encoding-japanese@2.2.0: resolution: {integrity: sha512-EuJWwlHPZ1LbADuKTClvHtwbaFn4rOD+dRAbWysqEOXRc2Uui0hJInNJrsdH0c+OhJA4nrCBdSkW4DD5YxAo6A==} engines: {node: '>=8.10.0'} - enhanced-resolve@5.20.1: - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} - engines: {node: '>=10.13.0'} - enhanced-resolve@5.21.0: resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==} engines: {node: '>=10.13.0'} @@ -3500,10 +3336,6 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - entities@7.0.1: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} @@ -3519,17 +3351,9 @@ packages: es-module-lexer@2.0.0: resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} - es-toolkit@1.45.1: - resolution: {integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==} - es-toolkit@1.46.0: resolution: {integrity: sha512-IToJ6ct9OLl5zz6WsC/1vZEwfSZ7Myil+ygl5Tf30Xjn9AEkzNB4kqp2G7VUJKF1DtTx/ra5M5KLlXvzOg51BA==} - esbuild@0.27.4: - resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.27.7: resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} @@ -3582,6 +3406,10 @@ packages: exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -3653,6 +3481,11 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3669,10 +3502,6 @@ packages: resolution: {integrity: sha512-7zShVYAYtMnj9S65CfN+hvpBCByfuB1OY8xID01nZEzXTZbx4YyysAfi+nMl95JSR6odt4q8TCj2W63KAoyVLQ==} engines: {node: '>=18'} - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.5.0: resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} @@ -3684,12 +3513,13 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-tsconfig@4.13.7: - resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} - get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + get-tsconfig@5.0.0-beta.5: + resolution: {integrity: sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==} + engines: {node: '>=20.20.0'} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3727,12 +3557,12 @@ packages: resolution: {integrity: sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - graphql@16.14.0: - resolution: {integrity: sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} - happy-dom@20.6.2: - resolution: {integrity: sha512-Xk/Y0cuq9ngN/my8uvK4gKoyDl6sBKkIl8A/hJ0IabZVH7E5SJLHNE7uKRPVmSrQbhJaLIHTEcvTct4GgNtsRA==} + happy-dom@20.9.0: + resolution: {integrity: sha512-GZZ9mKe8r646NUAf/zemnGbjYh4Bt8/MqASJY+pSm5ZDtc3YQox+4gsLI7yi1hba6o+eCsGxpHn5+iEVn31/FQ==} engines: {node: '>=20.0.0'} has-flag@4.0.0: @@ -3747,23 +3577,8 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - headers-polyfill@4.0.3: - resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} - - hookable@6.1.0: - resolution: {integrity: sha512-ZoKZSJgu8voGK2geJS+6YtYjvIzu9AOM/KZXsBxr83uhLL++e9pEv/dlgwgy3dvHg06kTz6JOh1hk3C8Ceiymw==} - - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + hookable@6.1.1: + resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==} human-id@4.1.3: resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} @@ -3773,10 +3588,6 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - iconv-lite@0.7.2: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} @@ -3792,9 +3603,9 @@ packages: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} - import-without-cache@0.2.5: - resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==} - engines: {node: '>=20.19.0'} + import-without-cache@0.4.0: + resolution: {integrity: sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==} + engines: {node: ^22.18.0 || >=24.0.0} indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} @@ -3852,6 +3663,10 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3894,9 +3709,6 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} - is-node-process@1.2.0: - resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3909,9 +3721,6 @@ packages: resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - is-regexp@1.0.0: resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} engines: {node: '>=0.10.0'} @@ -3983,15 +3792,6 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdom@27.0.0: - resolution: {integrity: sha512-lIHeR1qlIRrIN5VMccd8tI2Sgw6ieYXSVktcSHaNe3Z5nE/tcPQYQWOq00wxMvYOsz+73eAkNenVvmPC6bba9A==} - engines: {node: '>=20'} - peerDependencies: - canvas: ^3.0.0 - peerDependenciesMeta: - canvas: - optional: true - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -4014,6 +3814,10 @@ packages: jsonfile@6.2.1: resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -4025,6 +3829,60 @@ packages: resolution: {integrity: sha512-3i5pmOiZvMDj00qhrIVbH0AnioVTx22DMP7Vn5At4yJO46iy+FM8Y/g61ltenLVSo3fiO8h8Q3QOFgf/gQ72ww==} engines: {node: '>=20.0.0'} + lefthook-darwin-arm64@2.1.6: + resolution: {integrity: sha512-hyB7eeiX78BS66f70byTJacDLC/xV1vgMv9n+idFUsrM7J3Udd/ag9Ag5NP3t0eN0EqQqAtrNnt35EH01lxnRQ==} + cpu: [arm64] + os: [darwin] + + lefthook-darwin-x64@2.1.6: + resolution: {integrity: sha512-5Ka6cFxiH83krt+OMRQtmS6zqoZR5SLXSudLjTbZA1c3ZqF0+dqkeb4XcB6plx6WR0GFizabuc6Bi3iXPIe1eQ==} + cpu: [x64] + os: [darwin] + + lefthook-freebsd-arm64@2.1.6: + resolution: {integrity: sha512-VswyOg5CVN3rMaOJ2HtnkltiMKgFHW/wouWxXsV8RxSa4tgWOKxM0EmSXi8qc2jX+LRga6B0uOY6toXS01zWxA==} + cpu: [arm64] + os: [freebsd] + + lefthook-freebsd-x64@2.1.6: + resolution: {integrity: sha512-vXsCUFYuVwrVWwcypB7Zt2Hf+5pl1V1la7ZfvGYZaTRURu0zF/XUnMF/nOz/PebGv0f4x/iOWXWwP7E42xRWsg==} + cpu: [x64] + os: [freebsd] + + lefthook-linux-arm64@2.1.6: + resolution: {integrity: sha512-WDJiQhJdZOvKORZd+kF/ms2l6NSsXzdA9ahflyr65V90AC4jES223W8VtEMbGPUtHuGWMEZ/v/XvwlWv0Ioz9g==} + cpu: [arm64] + os: [linux] + + lefthook-linux-x64@2.1.6: + resolution: {integrity: sha512-C18nCd7nTX1AVL4TcvwMmLAO1VI1OuGluIOTjiPkBQ746Ls1HhL5rl//jMPACmT28YmxIQJ2ZcLPNmhvEVBZvw==} + cpu: [x64] + os: [linux] + + lefthook-openbsd-arm64@2.1.6: + resolution: {integrity: sha512-mZOMxM8HiPxVFXDO3PtCUbH4GB8rkveXhsgXF27oAZTYVzQ3gO9vT6r/pxit6msqRXz3fvcwimLVJgb8eRsa8A==} + cpu: [arm64] + os: [openbsd] + + lefthook-openbsd-x64@2.1.6: + resolution: {integrity: sha512-sG9ALLZSnnMOfXu+B7SmxFhJhuoAh4bqi5En5aaHJET48TqrLOcWWZuH+7ArFM6gr/U5KfSUvdmHFmY8WqCcIg==} + cpu: [x64] + os: [openbsd] + + lefthook-windows-arm64@2.1.6: + resolution: {integrity: sha512-lD8yFWY4Csuljd0Rqs7EQaySC0VvDf7V3rN1FhRMUISTRDHutebIom1Loc8ckQPvKYGC6mftT9k0GvipsS+Brw==} + cpu: [arm64] + os: [win32] + + lefthook-windows-x64@2.1.6: + resolution: {integrity: sha512-q4z2n3xucLscoWiyMwFViEj3N8MDSkPulMwcJYuCYFHoPhP1h+icqNu7QRLGYj6AnVrCQweiUJY3Tb2X+GbD/A==} + cpu: [x64] + os: [win32] + + lefthook@2.1.6: + resolution: {integrity: sha512-w9sBoR0mdN+kJc3SB85VzpiAAl451/rxdCRcZlwW71QLjkeH3EBQFgc4VMj5apePychYDHAlqEWTB8J8JK/j1Q==} + hasBin: true + lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} @@ -4060,24 +3918,28 @@ packages: 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==} @@ -4127,10 +3989,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - lru-cache@11.3.5: - resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} - engines: {node: 20 || >=22} - lru-cache@11.3.6: resolution: {integrity: sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==} engines: {node: 20 || >=22} @@ -4164,9 +4022,6 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - mdn-data@2.27.1: - resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -4253,16 +4108,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.11.2: - resolution: {integrity: sha512-MI54hLCsrMwiflkcqlgYYNJJddY5/+S0SnONvhv1owOplvqohKSQyGejpNdUGyCwgs4IH7PqaNbPw/sKOEze9Q==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - typescript: '>= 4.8.x' - peerDependenciesMeta: - typescript: - optional: true - muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} @@ -4296,8 +4141,8 @@ packages: resolution: {integrity: sha512-kOCT/1MCPAxY5iUV3wytNFUMUolzuwd/VF/1KCx7kf6CutrOsTie+84zTGTpgQycjvfLdBBdvBvFLqFD2c0wkQ==} engines: {node: '>=18'} - next@16.2.3: - resolution: {integrity: sha512-9V3zV4oZFza3PVev5/poB9g0dEafVcgNyQ8eTRop8GvxZjV2G15FC5ARuG1eFD42QgeYkzJBJzHghNP8Ad9xtA==} + next@16.2.6: + resolution: {integrity: sha512-qOVgKJg1+At15NpeUP+eJgCHvTCgXsogweq87Ri/Ix7PkqQHg4sdaXmSFqKlgaIXE4kW0g25LE68W87UANlHtw==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -4368,9 +4213,6 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - outvariant@1.4.3: - resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - oxc-parser@0.127.0: resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4427,9 +4269,6 @@ packages: resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} engines: {node: '>=6'} - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - patch-console@2.0.0: resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4458,9 +4297,6 @@ packages: path-to-regexp@3.3.0: resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -4478,10 +4314,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} @@ -4496,6 +4328,16 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + playwright-core@1.51.1: + resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.51.1: + resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} + engines: {node: '>=18'} + hasBin: true + pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -4605,6 +4447,11 @@ packages: peerDependencies: react: ^19.2.5 + react-dom@19.2.6: + resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} + peerDependencies: + react: ^19.2.6 + react-hook-form@7.71.2: resolution: {integrity: sha512-1CHvcDYzuRUNOflt4MOq3ZM46AronNJtQ1S7tnX6YN4y72qhgiUItpacZUAQ0TyWYci3yz1X+rXaSxiuEm86PA==} engines: {node: '>=18.0.0'} @@ -4645,6 +4492,10 @@ packages: resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} engines: {node: '>=0.10.0'} + react@19.2.6: + resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} + engines: {node: '>=0.10.0'} + read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -4664,10 +4515,6 @@ packages: resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} engines: {node: '>=0.10.0'} - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -4726,20 +4573,17 @@ packages: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} - rettime@0.7.0: - resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==} - reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown-plugin-dts@0.23.2: - resolution: {integrity: sha512-PbSqLawLgZBGcOGT3yqWBGn4cX+wh2nt5FuBGdcMHyOhoukmjbhYAl8NT9sE4U38Cm9tqLOIQeOrvzeayM0DLQ==} - engines: {node: '>=20.19.0'} + rolldown-plugin-dts@0.25.2: + resolution: {integrity: sha512-nMhN/R+vmR8GM45ZW1FWMSjRTSDDn/6w4GTf8RNrEFCBdl8B1kySWrU1ixPtbwzXoRlcO+R/S88VgXuJQwfdDg==} + engines: {node: ^22.18.0 || >=24.0.0} peerDependencies: '@ts-macro/tsc': ^0.3.6 '@typescript/native-preview': '>=7.0.0-dev.20260325.1' - rolldown: ^1.0.0-rc.12 + rolldown: ^1.0.0 typescript: ^5.0.0 || ^6.0.0 vue-tsc: ~3.2.0 peerDependenciesMeta: @@ -4752,13 +4596,13 @@ packages: vue-tsc: optional: true - rolldown@1.0.0-rc.12: - resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} + rolldown@1.0.0-rc.17: + resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.0.0-rc.17: - resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} + rolldown@1.0.3: + resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -4767,9 +4611,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rrweb-cssom@0.8.0: - resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} - run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -4795,10 +4636,6 @@ packages: engines: {node: '>=18'} hasBin: true - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} @@ -4808,6 +4645,10 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4822,6 +4663,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.1: + resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} + engines: {node: '>=10'} + hasBin: true + serve-handler@6.1.7: resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} @@ -4905,13 +4751,6 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} - - std-env@4.0.0: - resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} - std-env@4.1.0: resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} @@ -4922,9 +4761,6 @@ packages: stream-to-array@2.3.0: resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} - strict-event-emitter@0.5.1: - resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} - string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -4960,6 +4796,10 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} + strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -5006,9 +4846,6 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - table@6.9.0: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} @@ -5017,18 +4854,14 @@ packages: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} engines: {node: '>=20'} - tailwind-merge@3.5.0: - resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} - - tailwindcss@4.2.2: - resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} + tailwind-merge@3.6.0: + resolution: {integrity: sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==} tailwindcss@4.2.4: resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} - engines: {node: '>=6'} + tailwindcss@4.3.0: + resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} tapable@2.3.3: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} @@ -5048,9 +4881,9 @@ packages: resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} + tinyexec@1.2.4: + resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + engines: {node: '>=18'} tinyglobby@0.2.16: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} @@ -5067,25 +4900,10 @@ packages: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} - tldts-core@7.0.30: - resolution: {integrity: sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q==} - - tldts@7.0.30: - resolution: {integrity: sha512-ELrFxuqsDdHUwoh0XxDbxuLD3Wnz49Z57IFvTtvWy1hJdcMZjXLIuonjilCiWHlT2GbE4Wlv1wKVTzDFnXH1aw==} - hasBin: true - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - 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-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -5120,18 +4938,20 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tsdown@0.21.7: - resolution: {integrity: sha512-ukKIxKQzngkWvOYJAyptudclkm4VQqbjq+9HF5K5qDO8GJsYtMh8gIRwicbnZEnvFPr6mquFwYAVZ8JKt3rY2g==} - engines: {node: '>=20.19.0'} + tsdown@0.22.1: + resolution: {integrity: sha512-Ldx1jLyDFEzsN/fMBi2TBVaZe4fuEJhIiHjQhX0pV7oa5uYz5Imdivs5mNzEXOrMEtFRR6C9BQ2YqLoroffB+Q==} + engines: {node: ^22.18.0 || >=24.0.0} hasBin: true peerDependencies: '@arethetypeswrong/core': ^0.18.1 - '@tsdown/css': 0.21.7 - '@tsdown/exe': 0.21.7 + '@tsdown/css': 0.22.1 + '@tsdown/exe': 0.22.1 '@vitejs/devtools': '*' - publint: ^0.3.0 + publint: ^0.3.8 + tsx: '*' typescript: ^5.0.0 || ^6.0.0 unplugin-unused: ^0.5.0 + unrun: '*' peerDependenciesMeta: '@arethetypeswrong/core': optional: true @@ -5143,10 +4963,14 @@ packages: optional: true publint: optional: true + tsx: + optional: true typescript: optional: true unplugin-unused: optional: true + unrun: + optional: true tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -5156,8 +4980,8 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo@2.9.1: - resolution: {integrity: sha512-TO9du8MwLTAKoXcGezekh9cPJabJUb0+8KxtpMR6kXdRASrmJ8qXf2GkVbCREgzbMQakzfNcux9cZtxheDY4RQ==} + turbo@2.9.16: + resolution: {integrity: sha512-NqgRQy6j6dPYcdSdv0q1g9QsZg7SWg87RERM8otw/1AtKU2yTFVClOM7cbwKzOonZr/Ek1blTBucw64L9H0Bwg==} hasBin: true tw-animate-css@1.4.0: @@ -5201,6 +5025,9 @@ packages: undici-types@7.19.2: resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -5209,16 +5036,6 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - unrun@0.2.34: - resolution: {integrity: sha512-LyaghRBR++r7svhDK6tnDz2XaYHWdneBOA0jbS8wnRsHerI9MFljX4fIiTgbbNbEVzZ0C9P1OjWLLe1OqoaaEw==} - engines: {node: '>=20.19.0'} - hasBin: true - peerDependencies: - synckit: ^0.11.11 - peerDependenciesMeta: - synckit: - optional: true - update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true @@ -5310,20 +5127,20 @@ packages: yaml: optional: true - vitest@4.1.4: - resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==} + vitest@4.1.7: + resolution: {integrity: sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==} 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.4 - '@vitest/browser-preview': 4.1.4 - '@vitest/browser-webdriverio': 4.1.4 - '@vitest/coverage-istanbul': 4.1.4 - '@vitest/coverage-v8': 4.1.4 - '@vitest/ui': 4.1.4 + '@vitest/browser-playwright': 4.1.7 + '@vitest/browser-preview': 4.1.7 + '@vitest/browser-webdriverio': 4.1.7 + '@vitest/coverage-istanbul': 4.1.7 + '@vitest/coverage-v8': 4.1.7 + '@vitest/ui': 4.1.7 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -5354,10 +5171,6 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - walkdir@0.4.1: resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==} engines: {node: '>=6.0.0'} @@ -5365,31 +5178,10 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - webidl-conversions@8.0.1: - resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} - engines: {node: '>=20'} - - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - - whatwg-mimetype@5.0.0: - resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} - engines: {node: '>=20'} - - whatwg-url@15.1.0: - resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} - engines: {node: '>=20'} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -5415,10 +5207,6 @@ packages: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} @@ -5427,20 +5215,8 @@ packages: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5459,36 +5235,12 @@ packages: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} - xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} - engines: {node: '>= 14'} - hasBin: true - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - yocto-queue@1.2.2: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} @@ -5504,12 +5256,12 @@ packages: yoga-layout@3.2.1: resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} - zod@4.4.3: - resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} - snapshots: '@0no-co/graphql.web@1.2.0(graphql@16.13.2)': @@ -5523,27 +5275,6 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@asamuzakjp/css-color@4.1.2': - dependencies: - '@csstools/css-calc': 3.2.0(@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.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) - '@csstools/css-tokenizer': 4.0.0 - lru-cache: 11.3.6 - optional: true - - '@asamuzakjp/dom-selector@6.8.1': - dependencies: - '@asamuzakjp/nwsapi': 2.3.9 - bidi-js: 1.0.3 - css-tree: 3.2.1 - is-potential-custom-element-name: 1.0.1 - lru-cache: 11.3.6 - optional: true - - '@asamuzakjp/nwsapi@2.3.9': - optional: true - '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -5559,7 +5290,7 @@ snapshots: '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 @@ -5574,16 +5305,16 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/generator@8.0.0-rc.3': + '@babel/generator@8.0.0-rc.6': dependencies: - '@babel/parser': 8.0.0-rc.3 - '@babel/types': 8.0.0-rc.3 + '@babel/parser': 8.0.0-rc.6 + '@babel/types': 8.0.0-rc.6 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 '@types/jsesc': 2.5.1 @@ -5621,10 +5352,14 @@ snapshots: '@babel/helper-string-parser@8.0.0-rc.3': {} + '@babel/helper-string-parser@8.0.0-rc.6': {} + '@babel/helper-validator-identifier@7.28.5': {} '@babel/helper-validator-identifier@8.0.0-rc.3': {} + '@babel/helper-validator-identifier@8.0.0-rc.6': {} + '@babel/helper-validator-option@7.27.1': {} '@babel/helpers@7.28.6': @@ -5632,14 +5367,6 @@ snapshots: '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@babel/parser@7.29.0': - dependencies: - '@babel/types': 7.29.0 - - '@babel/parser@7.29.2': - dependencies: - '@babel/types': 7.29.0 - '@babel/parser@7.29.3': dependencies: '@babel/types': 7.29.0 @@ -5648,6 +5375,10 @@ snapshots: dependencies: '@babel/types': 8.0.0-rc.3 + '@babel/parser@8.0.0-rc.6': + dependencies: + '@babel/types': 8.0.0-rc.6 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -5665,7 +5396,7 @@ snapshots: '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -5673,7 +5404,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3 @@ -5690,44 +5421,39 @@ snapshots: '@babel/helper-string-parser': 8.0.0-rc.3 '@babel/helper-validator-identifier': 8.0.0-rc.3 + '@babel/types@8.0.0-rc.6': + dependencies: + '@babel/helper-string-parser': 8.0.0-rc.6 + '@babel/helper-validator-identifier': 8.0.0-rc.6 + '@badgateway/oauth2-client@3.3.1': {} - '@base-ui/react@1.4.1(@types/react@19.2.13)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@base-ui/react@1.5.0(@types/react@19.2.13)(date-fns@4.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@babel/runtime': 7.29.2 - '@base-ui/utils': 0.2.8(@types/react@19.2.13)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) - '@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@base-ui/utils': 0.2.9(@types/react@19.2.13)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@floating-ui/utils': 0.2.11 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) - use-sync-external-store: 1.6.0(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + use-sync-external-store: 1.6.0(react@19.2.6) optionalDependencies: '@types/react': 19.2.13 date-fns: 4.1.0 - '@base-ui/utils@0.2.8(@types/react@19.2.13)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@base-ui/utils@0.2.9(@types/react@19.2.13)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@babel/runtime': 7.29.2 '@floating-ui/utils': 0.2.11 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) reselect: 5.1.1 - use-sync-external-store: 1.6.0(react@19.2.5) + use-sync-external-store: 1.6.0(react@19.2.6) optionalDependencies: '@types/react': 19.2.13 '@bufbuild/protobuf@2.12.0': {} - '@bundled-es-modules/cookie@2.0.1': - dependencies: - cookie: 0.7.2 - optional: true - - '@bundled-es-modules/statuses@1.0.1': - dependencies: - statuses: 2.0.2 - optional: true - '@changesets/apply-release-plan@7.1.1': dependencies: '@changesets/config': 3.1.4 @@ -5757,7 +5483,7 @@ snapshots: dependencies: '@changesets/types': 6.1.0 - '@changesets/cli@2.31.0(@types/node@25.6.0)': + '@changesets/cli@2.31.0(@types/node@25.9.1)': dependencies: '@changesets/apply-release-plan': 7.1.1 '@changesets/assemble-release-plan': 6.0.10 @@ -5773,7 +5499,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@25.6.0) + '@inquirer/external-editor': 1.0.3(@types/node@25.9.1) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 enquirer: 2.4.1 @@ -5880,36 +5606,6 @@ snapshots: dependencies: '@bufbuild/protobuf': 2.12.0 - '@csstools/color-helpers@6.0.2': - optional: true - - '@csstools/css-calc@3.2.0(@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 - optional: true - - '@csstools/css-color-parser@4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/color-helpers': 6.0.2 - '@csstools/css-calc': 3.2.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) - '@csstools/css-tokenizer': 4.0.0 - optional: true - - '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': - dependencies: - '@csstools/css-tokenizer': 4.0.0 - optional: true - - '@csstools/css-syntax-patches-for-csstree@1.1.3(css-tree@3.2.1)': - optionalDependencies: - css-tree: 3.2.1 - optional: true - - '@csstools/css-tokenizer@4.0.0': - optional: true - '@dependents/detective-less@5.0.3': dependencies: gonzales-pe: 4.3.0 @@ -5932,11 +5628,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.0': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.9.2': dependencies: tslib: 2.8.1 @@ -5947,159 +5638,81 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.27.4': - optional: true - '@esbuild/aix-ppc64@0.27.7': optional: true - '@esbuild/android-arm64@0.27.4': - optional: true - '@esbuild/android-arm64@0.27.7': optional: true - '@esbuild/android-arm@0.27.4': - optional: true - '@esbuild/android-arm@0.27.7': optional: true - '@esbuild/android-x64@0.27.4': - optional: true - '@esbuild/android-x64@0.27.7': optional: true - '@esbuild/darwin-arm64@0.27.4': - optional: true - '@esbuild/darwin-arm64@0.27.7': optional: true - '@esbuild/darwin-x64@0.27.4': - optional: true - '@esbuild/darwin-x64@0.27.7': optional: true - '@esbuild/freebsd-arm64@0.27.4': - optional: true - '@esbuild/freebsd-arm64@0.27.7': optional: true - '@esbuild/freebsd-x64@0.27.4': - optional: true - '@esbuild/freebsd-x64@0.27.7': optional: true - '@esbuild/linux-arm64@0.27.4': - optional: true - '@esbuild/linux-arm64@0.27.7': optional: true - '@esbuild/linux-arm@0.27.4': - optional: true - '@esbuild/linux-arm@0.27.7': optional: true - '@esbuild/linux-ia32@0.27.4': - optional: true - '@esbuild/linux-ia32@0.27.7': optional: true - '@esbuild/linux-loong64@0.27.4': - optional: true - '@esbuild/linux-loong64@0.27.7': optional: true - '@esbuild/linux-mips64el@0.27.4': - optional: true - '@esbuild/linux-mips64el@0.27.7': optional: true - '@esbuild/linux-ppc64@0.27.4': - optional: true - '@esbuild/linux-ppc64@0.27.7': optional: true - '@esbuild/linux-riscv64@0.27.4': - optional: true - '@esbuild/linux-riscv64@0.27.7': optional: true - '@esbuild/linux-s390x@0.27.4': - optional: true - '@esbuild/linux-s390x@0.27.7': optional: true - '@esbuild/linux-x64@0.27.4': - optional: true - '@esbuild/linux-x64@0.27.7': optional: true - '@esbuild/netbsd-arm64@0.27.4': - optional: true - '@esbuild/netbsd-arm64@0.27.7': optional: true - '@esbuild/netbsd-x64@0.27.4': - optional: true - '@esbuild/netbsd-x64@0.27.7': optional: true - '@esbuild/openbsd-arm64@0.27.4': - optional: true - '@esbuild/openbsd-arm64@0.27.7': optional: true - '@esbuild/openbsd-x64@0.27.4': - optional: true - '@esbuild/openbsd-x64@0.27.7': optional: true - '@esbuild/openharmony-arm64@0.27.4': - optional: true - '@esbuild/openharmony-arm64@0.27.7': optional: true - '@esbuild/sunos-x64@0.27.4': - optional: true - '@esbuild/sunos-x64@0.27.7': optional: true - '@esbuild/win32-arm64@0.27.4': - optional: true - '@esbuild/win32-arm64@0.27.7': optional: true - '@esbuild/win32-ia32@0.27.4': - optional: true - '@esbuild/win32-ia32@0.27.7': optional: true - '@esbuild/win32-x64@0.27.4': - optional: true - '@esbuild/win32-x64@0.27.7': optional: true @@ -6112,11 +5725,11 @@ snapshots: '@floating-ui/core': 1.7.5 '@floating-ui/utils': 0.2.11 - '@floating-ui/react-dom@2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@floating-ui/react-dom@2.1.8(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@floating-ui/dom': 1.7.6 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) '@floating-ui/utils@0.2.11': {} @@ -6124,10 +5737,10 @@ snapshots: '@fontsource-variable/inter@5.2.8': {} - '@hookform/resolvers@5.2.2(react-hook-form@7.71.2(react@19.2.5))': + '@hookform/resolvers@5.2.2(react-hook-form@7.71.2(react@19.2.6))': dependencies: '@standard-schema/utils': 0.3.0 - react-hook-form: 7.71.2(react@19.2.5) + react-hook-form: 7.71.2(react@19.2.6) '@img/colour@1.0.0': optional: true @@ -6214,7 +5827,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.9.0 + '@emnapi/runtime': 1.10.0 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -6230,245 +5843,245 @@ snapshots: '@inquirer/ansi@2.0.5': {} - '@inquirer/checkbox@4.3.2(@types/node@25.6.0)': + '@inquirer/checkbox@4.3.2(@types/node@25.9.1)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/core': 10.3.2(@types/node@25.9.1) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.9.1) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/checkbox@5.1.4(@types/node@25.6.0)': + '@inquirer/checkbox@5.1.4(@types/node@25.9.1)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@25.6.0) + '@inquirer/core': 11.1.9(@types/node@25.9.1) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.6.0) + '@inquirer/type': 4.0.5(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/confirm@5.1.21(@types/node@25.6.0)': + '@inquirer/confirm@5.1.21(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.6.0) - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/core': 10.3.2(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/confirm@6.0.12(@types/node@25.6.0)': + '@inquirer/confirm@6.0.12(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.0) - '@inquirer/type': 4.0.5(@types/node@25.6.0) + '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/type': 4.0.5(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/core@10.3.2(@types/node@25.6.0)': + '@inquirer/core@10.3.2(@types/node@25.9.1)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.9.1) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/core@11.1.9(@types/node@25.6.0)': + '@inquirer/core@11.1.9(@types/node@25.9.1)': dependencies: '@inquirer/ansi': 2.0.5 '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.6.0) + '@inquirer/type': 4.0.5(@types/node@25.9.1) cli-width: 4.1.0 fast-wrap-ansi: 0.2.0 mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/editor@4.2.23(@types/node@25.6.0)': + '@inquirer/editor@4.2.23(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.6.0) - '@inquirer/external-editor': 1.0.3(@types/node@25.6.0) - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/core': 10.3.2(@types/node@25.9.1) + '@inquirer/external-editor': 1.0.3(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/editor@5.1.1(@types/node@25.6.0)': + '@inquirer/editor@5.1.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.0) - '@inquirer/external-editor': 3.0.0(@types/node@25.6.0) - '@inquirer/type': 4.0.5(@types/node@25.6.0) + '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/external-editor': 3.0.0(@types/node@25.9.1) + '@inquirer/type': 4.0.5(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/expand@4.0.23(@types/node@25.6.0)': + '@inquirer/expand@4.0.23(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.6.0) - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/core': 10.3.2(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.9.1) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/expand@5.0.13(@types/node@25.6.0)': + '@inquirer/expand@5.0.13(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.0) - '@inquirer/type': 4.0.5(@types/node@25.6.0) + '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/type': 4.0.5(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/external-editor@1.0.3(@types/node@25.6.0)': + '@inquirer/external-editor@1.0.3(@types/node@25.9.1)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/external-editor@3.0.0(@types/node@25.6.0)': + '@inquirer/external-editor@3.0.0(@types/node@25.9.1)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 '@inquirer/figures@1.0.15': {} '@inquirer/figures@2.0.5': {} - '@inquirer/input@4.3.1(@types/node@25.6.0)': + '@inquirer/input@4.3.1(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.6.0) - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/core': 10.3.2(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/input@5.0.12(@types/node@25.6.0)': + '@inquirer/input@5.0.12(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.0) - '@inquirer/type': 4.0.5(@types/node@25.6.0) + '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/type': 4.0.5(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/number@3.0.23(@types/node@25.6.0)': + '@inquirer/number@3.0.23(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.6.0) - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/core': 10.3.2(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/number@4.0.12(@types/node@25.6.0)': + '@inquirer/number@4.0.12(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.0) - '@inquirer/type': 4.0.5(@types/node@25.6.0) + '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/type': 4.0.5(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/password@4.0.23(@types/node@25.6.0)': + '@inquirer/password@4.0.23(@types/node@25.9.1)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.6.0) - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/core': 10.3.2(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/password@5.0.12(@types/node@25.6.0)': + '@inquirer/password@5.0.12(@types/node@25.9.1)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@25.6.0) - '@inquirer/type': 4.0.5(@types/node@25.6.0) + '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/type': 4.0.5(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 - - '@inquirer/prompts@7.10.1(@types/node@25.6.0)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@25.6.0) - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) - '@inquirer/editor': 4.2.23(@types/node@25.6.0) - '@inquirer/expand': 4.0.23(@types/node@25.6.0) - '@inquirer/input': 4.3.1(@types/node@25.6.0) - '@inquirer/number': 3.0.23(@types/node@25.6.0) - '@inquirer/password': 4.0.23(@types/node@25.6.0) - '@inquirer/rawlist': 4.1.11(@types/node@25.6.0) - '@inquirer/search': 3.2.2(@types/node@25.6.0) - '@inquirer/select': 4.4.2(@types/node@25.6.0) + '@types/node': 25.9.1 + + '@inquirer/prompts@7.10.1(@types/node@25.9.1)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@25.9.1) + '@inquirer/confirm': 5.1.21(@types/node@25.9.1) + '@inquirer/editor': 4.2.23(@types/node@25.9.1) + '@inquirer/expand': 4.0.23(@types/node@25.9.1) + '@inquirer/input': 4.3.1(@types/node@25.9.1) + '@inquirer/number': 3.0.23(@types/node@25.9.1) + '@inquirer/password': 4.0.23(@types/node@25.9.1) + '@inquirer/rawlist': 4.1.11(@types/node@25.9.1) + '@inquirer/search': 3.2.2(@types/node@25.9.1) + '@inquirer/select': 4.4.2(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 - - '@inquirer/prompts@8.4.2(@types/node@25.6.0)': - dependencies: - '@inquirer/checkbox': 5.1.4(@types/node@25.6.0) - '@inquirer/confirm': 6.0.12(@types/node@25.6.0) - '@inquirer/editor': 5.1.1(@types/node@25.6.0) - '@inquirer/expand': 5.0.13(@types/node@25.6.0) - '@inquirer/input': 5.0.12(@types/node@25.6.0) - '@inquirer/number': 4.0.12(@types/node@25.6.0) - '@inquirer/password': 5.0.12(@types/node@25.6.0) - '@inquirer/rawlist': 5.2.8(@types/node@25.6.0) - '@inquirer/search': 4.1.8(@types/node@25.6.0) - '@inquirer/select': 5.1.4(@types/node@25.6.0) + '@types/node': 25.9.1 + + '@inquirer/prompts@8.4.2(@types/node@25.9.1)': + dependencies: + '@inquirer/checkbox': 5.1.4(@types/node@25.9.1) + '@inquirer/confirm': 6.0.12(@types/node@25.9.1) + '@inquirer/editor': 5.1.1(@types/node@25.9.1) + '@inquirer/expand': 5.0.13(@types/node@25.9.1) + '@inquirer/input': 5.0.12(@types/node@25.9.1) + '@inquirer/number': 4.0.12(@types/node@25.9.1) + '@inquirer/password': 5.0.12(@types/node@25.9.1) + '@inquirer/rawlist': 5.2.8(@types/node@25.9.1) + '@inquirer/search': 4.1.8(@types/node@25.9.1) + '@inquirer/select': 5.1.4(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/rawlist@4.1.11(@types/node@25.6.0)': + '@inquirer/rawlist@4.1.11(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.6.0) - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/core': 10.3.2(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.9.1) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/rawlist@5.2.8(@types/node@25.6.0)': + '@inquirer/rawlist@5.2.8(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.0) - '@inquirer/type': 4.0.5(@types/node@25.6.0) + '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/type': 4.0.5(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/search@3.2.2(@types/node@25.6.0)': + '@inquirer/search@3.2.2(@types/node@25.9.1)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/core': 10.3.2(@types/node@25.9.1) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.9.1) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/search@4.1.8(@types/node@25.6.0)': + '@inquirer/search@4.1.8(@types/node@25.9.1)': dependencies: - '@inquirer/core': 11.1.9(@types/node@25.6.0) + '@inquirer/core': 11.1.9(@types/node@25.9.1) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.6.0) + '@inquirer/type': 4.0.5(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/select@4.4.2(@types/node@25.6.0)': + '@inquirer/select@4.4.2(@types/node@25.9.1)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.6.0) + '@inquirer/core': 10.3.2(@types/node@25.9.1) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/type': 3.0.10(@types/node@25.9.1) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/select@5.1.4(@types/node@25.6.0)': + '@inquirer/select@5.1.4(@types/node@25.9.1)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@25.6.0) + '@inquirer/core': 11.1.9(@types/node@25.9.1) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@25.6.0) + '@inquirer/type': 4.0.5(@types/node@25.9.1) optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/type@3.0.10(@types/node@25.6.0)': + '@inquirer/type@3.0.10(@types/node@25.9.1)': optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@inquirer/type@4.0.5(@types/node@25.6.0)': + '@inquirer/type@4.0.5(@types/node@25.9.1)': optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 '@isaacs/balanced-match@4.0.1': {} @@ -6497,15 +6110,38 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@liam-hq/cli@0.7.24(@types/node@25.6.0)(@types/react@19.2.13)(typescript@5.9.3)': + '@liam-hq/cli@0.7.24(@types/node@25.9.1)(@types/react@19.2.13)(typescript@5.9.3)': dependencies: '@prisma/internals': 6.8.2(typescript@5.9.3) '@swc/core': 1.12.11 commander: 13.1.0 glob: 11.1.0 ink: 6.0.1(@types/react@19.2.13)(react@19.1.1) - ink-gradient: 3.0.0(ink@6.0.1(@types/react@19.2.13)(react@19.1.1)) - inquirer: 12.6.3(@types/node@25.6.0) + ink-gradient: 3.0.0(ink@6.0.1(@types/react@19.2.13)(react@19.2.6)) + inquirer: 12.6.3(@types/node@25.9.1) + neverthrow: 8.2.0 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + valibot: 1.1.0(typescript@5.9.3) + yoctocolors: 2.1.2 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/node' + - '@types/react' + - bufferutil + - react-devtools-core + - typescript + - utf-8-validate + + '@liam-hq/cli@0.7.24(@types/node@25.9.1)(typescript@5.9.3)': + dependencies: + '@prisma/internals': 6.8.2(typescript@5.9.3) + '@swc/core': 1.12.11 + commander: 13.1.0 + glob: 11.1.0 + ink: 6.0.1(react@19.1.1) + ink-gradient: 3.0.0(ink@6.0.1(react@19.1.1)) + inquirer: 12.6.3(@types/node@25.9.1) neverthrow: 8.2.0 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -6536,23 +6172,23 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@microsoft/api-extractor-model@7.32.2(@types/node@25.6.0)': + '@microsoft/api-extractor-model@7.32.2(@types/node@25.9.1)': dependencies: '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.19.1(@types/node@25.6.0) + '@rushstack/node-core-library': 5.19.1(@types/node@25.9.1) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.55.2(@types/node@25.6.0)': + '@microsoft/api-extractor@7.55.2(@types/node@25.9.1)': dependencies: - '@microsoft/api-extractor-model': 7.32.2(@types/node@25.6.0) + '@microsoft/api-extractor-model': 7.32.2(@types/node@25.9.1) '@microsoft/tsdoc': 0.16.0 '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.19.1(@types/node@25.6.0) + '@rushstack/node-core-library': 5.19.1(@types/node@25.9.1) '@rushstack/rig-package': 0.6.0 - '@rushstack/terminal': 0.19.5(@types/node@25.6.0) - '@rushstack/ts-command-line': 5.1.5(@types/node@25.6.0) + '@rushstack/terminal': 0.19.5(@types/node@25.9.1) + '@rushstack/ts-command-line': 5.1.5(@types/node@25.9.1) diff: 8.0.2 lodash: 4.17.21 minimatch: 10.0.3 @@ -6572,16 +6208,6 @@ snapshots: '@microsoft/tsdoc@0.16.0': {} - '@mswjs/interceptors@0.39.8': - dependencies: - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/logger': 0.3.0 - '@open-draft/until': 2.1.0 - is-node-process: 1.2.0 - outvariant: 1.4.3 - strict-event-emitter: 0.5.1 - optional: true - '@napi-rs/keyring-darwin-arm64@1.2.0': optional: true @@ -6633,13 +6259,6 @@ snapshots: '@napi-rs/keyring-win32-ia32-msvc': 1.2.0 '@napi-rs/keyring-win32-x64-msvc': 1.2.0 - '@napi-rs/wasm-runtime@1.1.1': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.1 - optional: true - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 @@ -6654,30 +6273,30 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@next/env@16.2.3': {} + '@next/env@16.2.6': {} - '@next/swc-darwin-arm64@16.2.3': + '@next/swc-darwin-arm64@16.2.6': optional: true - '@next/swc-darwin-x64@16.2.3': + '@next/swc-darwin-x64@16.2.6': optional: true - '@next/swc-linux-arm64-gnu@16.2.3': + '@next/swc-linux-arm64-gnu@16.2.6': optional: true - '@next/swc-linux-arm64-musl@16.2.3': + '@next/swc-linux-arm64-musl@16.2.6': optional: true - '@next/swc-linux-x64-gnu@16.2.3': + '@next/swc-linux-x64-gnu@16.2.6': optional: true - '@next/swc-linux-x64-musl@16.2.3': + '@next/swc-linux-x64-musl@16.2.6': optional: true - '@next/swc-win32-arm64-msvc@16.2.3': + '@next/swc-win32-arm64-msvc@16.2.6': optional: true - '@next/swc-win32-x64-msvc@16.2.3': + '@next/swc-win32-x64-msvc@16.2.6': optional: true '@nodelib/fs.scandir@2.1.5': @@ -6692,18 +6311,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@open-draft/deferred-promise@2.2.0': - optional: true - - '@open-draft/logger@0.3.0': - dependencies: - is-node-process: 1.2.0 - outvariant: 1.4.3 - optional: true - - '@open-draft/until@2.1.0': - optional: true - '@opentelemetry/api-logs@0.215.0': dependencies: '@opentelemetry/api': 1.9.1 @@ -6845,10 +6452,10 @@ snapshots: '@oxc-parser/binding-win32-x64-msvc@0.127.0': optional: true - '@oxc-project/types@0.122.0': {} - '@oxc-project/types@0.127.0': {} + '@oxc-project/types@0.133.0': {} + '@oxfmt/binding-android-arm-eabi@0.47.0': optional: true @@ -6963,6 +6570,10 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.64.0': optional: true + '@playwright/test@1.51.1': + dependencies: + playwright: 1.51.1 + '@prisma/config@6.8.2': dependencies: jiti: 2.4.2 @@ -7034,81 +6645,76 @@ snapshots: dependencies: quansync: 1.0.0 - '@rolldown/binding-android-arm64@1.0.0-rc.12': - optional: true - '@rolldown/binding-android-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + '@rolldown/binding-android-arm64@1.0.3': optional: true '@rolldown/binding-darwin-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.12': + '@rolldown/binding-darwin-arm64@1.0.3': optional: true '@rolldown/binding-darwin-x64@1.0.0-rc.17': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + '@rolldown/binding-darwin-x64@1.0.3': optional: true '@rolldown/binding-freebsd-x64@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + '@rolldown/binding-freebsd-x64@1.0.3': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + '@rolldown/binding-linux-arm64-gnu@1.0.3': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-arm64-musl@1.0.3': optional: true '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-ppc64-gnu@1.0.3': optional: true '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-s390x-gnu@1.0.3': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + '@rolldown/binding-linux-x64-gnu@1.0.3': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + '@rolldown/binding-linux-x64-musl@1.0.3': optional: true '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': - dependencies: - '@napi-rs/wasm-runtime': 1.1.1 + '@rolldown/binding-openharmony-arm64@1.0.3': optional: true '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': @@ -7118,29 +6724,36 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + '@rolldown/binding-wasm32-wasi@1.0.3': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + '@rolldown/binding-win32-arm64-msvc@1.0.3': optional: true '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': optional: true - '@rolldown/pluginutils@1.0.0-rc.12': {} + '@rolldown/binding-win32-x64-msvc@1.0.3': + optional: true '@rolldown/pluginutils@1.0.0-rc.17': {} '@rolldown/pluginutils@1.0.0-rc.3': {} + '@rolldown/pluginutils@1.0.1': {} + '@rollup/pluginutils@5.3.0(rollup@4.60.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.3 + picomatch: 4.0.4 optionalDependencies: rollup: 4.60.0 @@ -7222,7 +6835,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.0': optional: true - '@rushstack/node-core-library@5.19.1(@types/node@25.6.0)': + '@rushstack/node-core-library@5.19.1(@types/node@25.9.1)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -7233,28 +6846,28 @@ snapshots: resolve: 1.22.11 semver: 7.5.4 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@rushstack/problem-matcher@0.1.1(@types/node@25.6.0)': + '@rushstack/problem-matcher@0.1.1(@types/node@25.9.1)': optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 '@rushstack/rig-package@0.6.0': dependencies: resolve: 1.22.11 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.19.5(@types/node@25.6.0)': + '@rushstack/terminal@0.19.5(@types/node@25.9.1)': dependencies: - '@rushstack/node-core-library': 5.19.1(@types/node@25.6.0) - '@rushstack/problem-matcher': 0.1.1(@types/node@25.6.0) + '@rushstack/node-core-library': 5.19.1(@types/node@25.9.1) + '@rushstack/problem-matcher': 0.1.1(@types/node@25.9.1) supports-color: 8.1.1 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 - '@rushstack/ts-command-line@5.1.5(@types/node@25.6.0)': + '@rushstack/ts-command-line@5.1.5(@types/node@25.9.1)': dependencies: - '@rushstack/terminal': 0.19.5(@types/node@25.6.0) + '@rushstack/terminal': 0.19.5(@types/node@25.9.1) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -7331,17 +6944,17 @@ snapshots: '@tailor-platform/function-types@0.8.5': {} - '@tailor-platform/sdk@1.45.1(@types/node@25.6.0)(@types/react@19.2.13)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))': + '@tailor-platform/sdk@1.45.1(@types/node@25.9.1)(@types/react@19.2.13)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))': dependencies: '@0no-co/graphql.web': 1.2.0(graphql@16.13.2) '@badgateway/oauth2-client': 3.3.1 '@bufbuild/protobuf': 2.12.0 '@connectrpc/connect': 2.1.1(@bufbuild/protobuf@2.12.0) '@connectrpc/connect-node': 2.1.1(@bufbuild/protobuf@2.12.0)(@connectrpc/connect@2.1.1(@bufbuild/protobuf@2.12.0)) - '@inquirer/core': 11.1.9(@types/node@25.6.0) - '@inquirer/prompts': 8.4.2(@types/node@25.6.0) + '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/prompts': 8.4.2(@types/node@25.9.1) '@jridgewell/trace-mapping': 0.3.31 - '@liam-hq/cli': 0.7.24(@types/node@25.6.0)(@types/react@19.2.13)(typescript@5.9.3) + '@liam-hq/cli': 0.7.24(@types/node@25.9.1)(@types/react@19.2.13)(typescript@5.9.3) '@napi-rs/keyring': 1.2.0 '@opentelemetry/api': 1.9.1 '@opentelemetry/exporter-trace-otlp-proto': 0.215.0(@opentelemetry/api@1.9.1) @@ -7374,7 +6987,7 @@ snapshots: pathe: 2.0.3 pgsql-ast-parser: 12.0.2 pkg-types: 2.3.0 - politty: 0.4.15(@inquirer/prompts@8.4.2(@types/node@25.6.0))(zod@4.3.6) + politty: 0.4.15(@inquirer/prompts@8.4.2(@types/node@25.9.1))(zod@4.3.6) rolldown: 1.0.0-rc.17 semver: 7.7.4 serve: 14.2.6 @@ -7398,17 +7011,74 @@ snapshots: - utf-8-validate - valibot - '@tailwindcss/node@4.2.2': + '@tailor-platform/sdk@1.45.1(@types/node@25.9.1)(typescript@5.9.3)(valibot@1.1.0(typescript@5.9.3))': dependencies: - '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.20.1 - jiti: 2.6.1 - lightningcss: 1.32.0 - magic-string: 0.30.21 - source-map-js: 1.2.1 - tailwindcss: 4.2.2 + '@0no-co/graphql.web': 1.2.0(graphql@16.13.2) + '@badgateway/oauth2-client': 3.3.1 + '@bufbuild/protobuf': 2.12.0 + '@connectrpc/connect': 2.1.1(@bufbuild/protobuf@2.12.0) + '@connectrpc/connect-node': 2.1.1(@bufbuild/protobuf@2.12.0)(@connectrpc/connect@2.1.1(@bufbuild/protobuf@2.12.0)) + '@inquirer/core': 11.1.9(@types/node@25.9.1) + '@inquirer/prompts': 8.4.2(@types/node@25.9.1) + '@jridgewell/trace-mapping': 0.3.31 + '@liam-hq/cli': 0.7.24(@types/node@25.9.1)(typescript@5.9.3) + '@napi-rs/keyring': 1.2.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/exporter-trace-otlp-proto': 0.215.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-node': 2.7.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.40.0 + '@oxc-project/types': 0.127.0 + '@standard-schema/spec': 1.1.0 + '@tailor-platform/function-kysely-tailordb': 0.1.3(kysely@0.28.16) + '@tailor-platform/function-types': 0.8.5 + '@toiroakr/lines-db': 0.9.2(valibot@1.1.0(typescript@5.9.3)) + '@toiroakr/read-multiline': 0.3.2 + '@urql/core': 6.0.1(graphql@16.13.2) + chalk: 5.6.2 + chokidar: 5.0.0 + confbox: 0.2.4 + date-fns: 4.1.0 + es-toolkit: 1.46.0 + find-up-simple: 1.0.1 + globals: 17.5.0 + graphql: 16.13.2 + inflection: 3.0.2 + kysely: 0.28.16 + madge: 8.0.0(typescript@5.9.3) + mime-types: 3.0.2 + open: 11.0.0 + ora: 9.4.0 + oxc-parser: 0.127.0 + p-limit: 7.3.0 + pathe: 2.0.3 + pgsql-ast-parser: 12.0.2 + pkg-types: 2.3.0 + politty: 0.4.15(@inquirer/prompts@8.4.2(@types/node@25.9.1))(zod@4.3.6) + rolldown: 1.0.0-rc.17 + semver: 7.7.4 + serve: 14.2.6 + sql-highlight: 6.1.0 + std-env: 4.1.0 + table: 6.9.0 + ts-cron-validator: 1.1.5 + tsx: 4.21.0 + type-fest: 5.6.0 + xdg-basedir: 5.1.0 + zod: 4.3.6 + transitivePeerDependencies: + - '@clack/prompts' + - '@swc/helpers' + - '@types/node' + - '@types/react' + - bufferutil + - react-devtools-core + - supports-color + - typescript + - utf-8-validate + - valibot - '@tailwindcss/node@4.2.4': + '@tailwindcss/node@4.3.0': dependencies: '@jridgewell/remapping': 2.3.5 enhanced-resolve: 5.21.0 @@ -7416,124 +7086,73 @@ snapshots: lightningcss: 1.32.0 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.2.4 - - '@tailwindcss/oxide-android-arm64@4.2.2': - optional: true - - '@tailwindcss/oxide-android-arm64@4.2.4': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.2.2': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.2.4': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.2.2': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.2.4': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.2.2': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.2.4': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': - optional: true + tailwindcss: 4.3.0 - '@tailwindcss/oxide-linux-arm64-gnu@4.2.4': + '@tailwindcss/oxide-android-arm64@4.3.0': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + '@tailwindcss/oxide-darwin-arm64@4.3.0': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.2.4': + '@tailwindcss/oxide-darwin-x64@4.3.0': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + '@tailwindcss/oxide-freebsd-x64@4.3.0': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.2.4': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.2.2': + '@tailwindcss/oxide-linux-arm64-gnu@4.3.0': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.2.4': + '@tailwindcss/oxide-linux-arm64-musl@4.3.0': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.2.2': + '@tailwindcss/oxide-linux-x64-gnu@4.3.0': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.2.4': + '@tailwindcss/oxide-linux-x64-musl@4.3.0': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + '@tailwindcss/oxide-wasm32-wasi@4.3.0': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.2.4': + '@tailwindcss/oxide-win32-arm64-msvc@4.3.0': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + '@tailwindcss/oxide-win32-x64-msvc@4.3.0': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.2.4': - optional: true - - '@tailwindcss/oxide@4.2.2': - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.2.2 - '@tailwindcss/oxide-darwin-arm64': 4.2.2 - '@tailwindcss/oxide-darwin-x64': 4.2.2 - '@tailwindcss/oxide-freebsd-x64': 4.2.2 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 - '@tailwindcss/oxide-linux-x64-musl': 4.2.2 - '@tailwindcss/oxide-wasm32-wasi': 4.2.2 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - - '@tailwindcss/oxide@4.2.4': + '@tailwindcss/oxide@4.3.0': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.2.4 - '@tailwindcss/oxide-darwin-arm64': 4.2.4 - '@tailwindcss/oxide-darwin-x64': 4.2.4 - '@tailwindcss/oxide-freebsd-x64': 4.2.4 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.4 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.4 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.4 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.4 - '@tailwindcss/oxide-linux-x64-musl': 4.2.4 - '@tailwindcss/oxide-wasm32-wasi': 4.2.4 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.4 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.4 - - '@tailwindcss/postcss@4.2.4': + '@tailwindcss/oxide-android-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-arm64': 4.3.0 + '@tailwindcss/oxide-darwin-x64': 4.3.0 + '@tailwindcss/oxide-freebsd-x64': 4.3.0 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.0 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.0 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.0 + '@tailwindcss/oxide-linux-x64-musl': 4.3.0 + '@tailwindcss/oxide-wasm32-wasi': 4.3.0 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.0 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.0 + + '@tailwindcss/postcss@4.3.0': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.2.4 - '@tailwindcss/oxide': 4.2.4 + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 postcss: 8.5.13 - tailwindcss: 4.2.4 + tailwindcss: 4.3.0 - '@tailwindcss/vite@4.2.2(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0))': + '@tailwindcss/vite@4.3.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': dependencies: - '@tailwindcss/node': 4.2.2 - '@tailwindcss/oxide': 4.2.2 - tailwindcss: 4.2.2 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) + '@tailwindcss/node': 4.3.0 + '@tailwindcss/oxide': 4.3.0 + tailwindcss: 4.3.0 + vite: 7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) '@testing-library/dom@10.4.1': dependencies: @@ -7546,12 +7165,12 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: '@babel/runtime': 7.28.6 '@testing-library/dom': 10.4.1 - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) optionalDependencies: '@types/react': 19.2.13 '@types/react-dom': 19.2.3(@types/react@19.2.13) @@ -7591,22 +7210,22 @@ snapshots: path-browserify: 1.0.1 tinyglobby: 0.2.16 - '@turbo/darwin-64@2.9.1': + '@turbo/darwin-64@2.9.16': optional: true - '@turbo/darwin-arm64@2.9.1': + '@turbo/darwin-arm64@2.9.16': optional: true - '@turbo/linux-64@2.9.1': + '@turbo/linux-64@2.9.16': optional: true - '@turbo/linux-arm64@2.9.1': + '@turbo/linux-arm64@2.9.16': optional: true - '@turbo/windows-64@2.9.1': + '@turbo/windows-64@2.9.16': optional: true - '@turbo/windows-arm64@2.9.1': + '@turbo/windows-arm64@2.9.16': optional: true '@tybys/wasm-util@0.10.1': @@ -7620,7 +7239,7 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 @@ -7632,7 +7251,7 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.3 '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': @@ -7644,9 +7263,6 @@ snapshots: '@types/deep-eql': 4.0.2 assertion-error: 2.0.1 - '@types/cookie@0.6.0': - optional: true - '@types/deep-eql@4.0.2': {} '@types/encoding-japanese@2.2.1': {} @@ -7665,6 +7281,10 @@ snapshots: dependencies: undici-types: 7.19.2 + '@types/node@25.9.1': + dependencies: + undici-types: 7.24.6 + '@types/papaparse@5.5.2': dependencies: '@types/node': 25.6.0 @@ -7677,9 +7297,6 @@ snapshots: dependencies: csstype: 3.2.3 - '@types/statuses@2.0.6': - optional: true - '@types/tinycolor2@1.4.6': {} '@types/whatwg-mimetype@3.0.2': {} @@ -7730,7 +7347,7 @@ snapshots: transitivePeerDependencies: - graphql - '@vitejs/plugin-react@5.2.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0))': + '@vitejs/plugin-react@5.2.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -7738,49 +7355,48 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) + vite: 7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) transitivePeerDependencies: - supports-color - '@vitest/expect@4.1.4': + '@vitest/expect@4.1.7': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.4 - '@vitest/utils': 4.1.4 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.4(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0))': + '@vitest/mocker@4.1.7(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0))': dependencies: - '@vitest/spy': 4.1.4 + '@vitest/spy': 4.1.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.11.2(@types/node@25.6.0)(typescript@5.9.3) - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) + vite: 7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) - '@vitest/pretty-format@4.1.4': + '@vitest/pretty-format@4.1.7': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.4': + '@vitest/runner@4.1.7': dependencies: - '@vitest/utils': 4.1.4 + '@vitest/utils': 4.1.7 pathe: 2.0.3 - '@vitest/snapshot@4.1.4': + '@vitest/snapshot@4.1.7': dependencies: - '@vitest/pretty-format': 4.1.4 - '@vitest/utils': 4.1.4 + '@vitest/pretty-format': 4.1.7 + '@vitest/utils': 4.1.7 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.4': {} + '@vitest/spy@4.1.7': {} - '@vitest/utils@4.1.4': + '@vitest/utils@4.1.7': dependencies: - '@vitest/pretty-format': 4.1.4 + '@vitest/pretty-format': 4.1.7 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -7798,7 +7414,7 @@ snapshots: '@vue/compiler-core@3.5.25': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.3 '@vue/shared': 3.5.25 entities: 4.5.0 estree-walker: 2.0.2 @@ -7867,9 +7483,6 @@ snapshots: acorn@8.16.0: {} - agent-base@7.1.4: - optional: true - ajv-draft-04@1.0.0(ajv@8.13.0): optionalDependencies: ajv: 8.13.0 @@ -7934,7 +7547,7 @@ snapshots: ansi-styles@6.2.3: {} - ansis@4.2.0: {} + ansis@4.3.1: {} any-promise@1.3.0: {} @@ -7982,11 +7595,6 @@ snapshots: dependencies: is-windows: 1.0.2 - bidi-js@1.0.3: - dependencies: - require-from-string: 2.0.2 - optional: true - birpc@4.0.0: {} bl@4.1.0: @@ -8110,13 +7718,6 @@ snapshots: execa: 5.1.1 is-wsl: 2.2.0 - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - optional: true - clone@1.0.4: {} clsx@2.1.1: {} @@ -8175,9 +7776,6 @@ snapshots: convert-to-spaces@2.0.1: {} - cookie@0.7.2: - optional: true - cookie@1.1.1: {} cross-spawn@7.0.6: @@ -8186,28 +7784,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-tree@3.2.1: - dependencies: - mdn-data: 2.27.1 - source-map-js: 1.2.1 - optional: true - - cssstyle@5.3.7: - dependencies: - '@asamuzakjp/css-color': 4.1.2 - '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) - css-tree: 3.2.1 - lru-cache: 11.3.6 - optional: true - - csstype@3.2.3: {} - - data-urls@6.0.1: - dependencies: - whatwg-mimetype: 5.0.0 - whatwg-url: 15.1.0 - optional: true - + csstype@3.2.3: {} + date-fns@4.1.0: {} de-indent@1.0.2: {} @@ -8220,9 +7798,6 @@ snapshots: dependencies: ms: 2.1.3 - decimal.js@10.6.0: - optional: true - deep-extend@0.6.0: {} default-browser-id@5.0.1: {} @@ -8238,7 +7813,7 @@ snapshots: define-lazy-prop@3.0.0: {} - defu@6.1.4: {} + defu@6.1.7: {} dependency-tree@11.4.3: dependencies: @@ -8321,7 +7896,9 @@ snapshots: dom-accessibility-api@0.5.16: {} - dts-resolver@2.1.3: {} + dotenv@16.6.1: {} + + dts-resolver@3.0.0: {} eastasianwidth@0.2.0: {} @@ -8333,15 +7910,10 @@ snapshots: emoji-regex@9.2.2: {} - empathic@2.0.0: {} + empathic@2.0.1: {} encoding-japanese@2.2.0: {} - enhanced-resolve@5.20.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 - enhanced-resolve@5.21.0: dependencies: graceful-fs: 4.2.11 @@ -8354,9 +7926,6 @@ snapshots: entities@4.5.0: {} - entities@6.0.1: - optional: true - entities@7.0.1: {} environment@1.1.0: {} @@ -8365,39 +7934,8 @@ snapshots: es-module-lexer@2.0.0: {} - es-toolkit@1.45.1: {} - es-toolkit@1.46.0: {} - esbuild@0.27.4: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.4 - '@esbuild/android-arm': 0.27.4 - '@esbuild/android-arm64': 0.27.4 - '@esbuild/android-x64': 0.27.4 - '@esbuild/darwin-arm64': 0.27.4 - '@esbuild/darwin-x64': 0.27.4 - '@esbuild/freebsd-arm64': 0.27.4 - '@esbuild/freebsd-x64': 0.27.4 - '@esbuild/linux-arm': 0.27.4 - '@esbuild/linux-arm64': 0.27.4 - '@esbuild/linux-ia32': 0.27.4 - '@esbuild/linux-loong64': 0.27.4 - '@esbuild/linux-mips64el': 0.27.4 - '@esbuild/linux-ppc64': 0.27.4 - '@esbuild/linux-riscv64': 0.27.4 - '@esbuild/linux-s390x': 0.27.4 - '@esbuild/linux-x64': 0.27.4 - '@esbuild/netbsd-arm64': 0.27.4 - '@esbuild/netbsd-x64': 0.27.4 - '@esbuild/openbsd-arm64': 0.27.4 - '@esbuild/openbsd-x64': 0.27.4 - '@esbuild/openharmony-arm64': 0.27.4 - '@esbuild/sunos-x64': 0.27.4 - '@esbuild/win32-arm64': 0.27.4 - '@esbuild/win32-ia32': 0.27.4 - '@esbuild/win32-x64': 0.27.4 - esbuild@0.27.7: optionalDependencies: '@esbuild/aix-ppc64': 0.27.7 @@ -8469,6 +8007,10 @@ snapshots: exsolve@1.0.8: {} + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + extendable-error@0.1.7: {} fast-deep-equal@3.1.3: {} @@ -8497,10 +8039,6 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 @@ -8559,6 +8097,9 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -8571,20 +8112,17 @@ snapshots: ast-module-types: 6.0.1 node-source-walk: 7.0.2 - get-caller-file@2.0.5: - optional: true - get-east-asian-width@1.5.0: {} get-own-enumerable-property-symbols@3.0.2: {} get-stream@6.0.1: {} - get-tsconfig@4.13.7: + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 - get-tsconfig@4.14.0: + get-tsconfig@5.0.0-beta.5: dependencies: resolve-pkg-maps: 1.0.0 @@ -8627,17 +8165,21 @@ snapshots: graphql@16.13.2: {} - graphql@16.14.0: - optional: true + gray-matter@4.0.3: + dependencies: + js-yaml: 3.14.2 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 - happy-dom@20.6.2: + happy-dom@20.9.0: dependencies: '@types/node': 25.6.0 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 entities: 7.0.1 whatwg-mimetype: 3.0.0 - ws: 8.19.0 + ws: 8.20.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -8650,41 +8192,12 @@ snapshots: he@1.2.0: {} - headers-polyfill@4.0.3: - optional: true - - hookable@6.1.0: {} - - html-encoding-sniffer@4.0.0: - dependencies: - whatwg-encoding: 3.1.1 - optional: true - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - optional: true - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - optional: true + hookable@6.1.1: {} human-id@4.1.3: {} human-signals@2.1.0: {} - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - optional: true - iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 @@ -8695,7 +8208,7 @@ snapshots: import-lazy@4.0.0: {} - import-without-cache@0.2.5: {} + import-without-cache@0.4.0: {} indent-string@5.0.0: {} @@ -8705,7 +8218,7 @@ snapshots: ini@1.3.8: {} - ink-gradient@3.0.0(ink@6.0.1(@types/react@19.2.13)(react@19.1.1)): + ink-gradient@3.0.0(ink@6.0.1(@types/react@19.2.13)(react@19.2.6)): dependencies: '@types/gradient-string': 1.1.6 gradient-string: 2.0.2 @@ -8713,6 +8226,14 @@ snapshots: prop-types: 15.8.1 strip-ansi: 7.2.0 + ink-gradient@3.0.0(ink@6.0.1(react@19.1.1)): + dependencies: + '@types/gradient-string': 1.1.6 + gradient-string: 2.0.2 + ink: 6.0.1(react@19.1.1) + prop-types: 15.8.1 + strip-ansi: 7.2.0 + ink@6.0.1(@types/react@19.2.13)(react@19.1.1): dependencies: '@alcalzone/ansi-tokenize': 0.1.3 @@ -8746,17 +8267,48 @@ snapshots: - bufferutil - utf-8-validate - inquirer@12.6.3(@types/node@25.6.0): + ink@6.0.1(react@19.1.1): + dependencies: + '@alcalzone/ansi-tokenize': 0.1.3 + ansi-escapes: 7.3.0 + ansi-styles: 6.2.3 + auto-bind: 5.0.1 + chalk: 5.6.2 + cli-boxes: 3.0.0 + cli-cursor: 4.0.0 + cli-truncate: 4.0.0 + code-excerpt: 4.0.0 + es-toolkit: 1.46.0 + indent-string: 5.0.0 + is-in-ci: 1.0.0 + patch-console: 2.0.0 + react: 19.1.1 + react-reconciler: 0.32.0(react@19.1.1) + scheduler: 0.23.2 + signal-exit: 3.0.7 + slice-ansi: 7.1.2 + stack-utils: 2.0.6 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + ws: 8.20.0 + yoga-layout: 3.2.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + inquirer@12.6.3(@types/node@25.9.1): dependencies: - '@inquirer/core': 10.3.2(@types/node@25.6.0) - '@inquirer/prompts': 7.10.1(@types/node@25.6.0) - '@inquirer/type': 3.0.10(@types/node@25.6.0) + '@inquirer/core': 10.3.2(@types/node@25.9.1) + '@inquirer/prompts': 7.10.1(@types/node@25.9.1) + '@inquirer/type': 3.0.10(@types/node@25.9.1) ansi-escapes: 4.3.2 mute-stream: 2.0.0 run-async: 3.0.0 rxjs: 7.8.2 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 is-core-module@2.16.1: dependencies: @@ -8766,6 +8318,8 @@ snapshots: is-docker@3.0.0: {} + is-extendable@0.1.1: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -8792,18 +8346,12 @@ snapshots: is-interactive@2.0.0: {} - is-node-process@1.2.0: - optional: true - is-number@7.0.0: {} is-obj@1.0.1: {} is-port-reachable@4.0.0: {} - is-potential-custom-element-name@1.0.1: - optional: true - is-regexp@1.0.0: {} is-stream@2.0.1: {} @@ -8855,34 +8403,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@27.0.0: - dependencies: - '@asamuzakjp/dom-selector': 6.8.1 - cssstyle: 5.3.7 - data-urls: 6.0.1 - decimal.js: 10.6.0 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - is-potential-custom-element-name: 1.0.1 - parse5: 7.3.0 - rrweb-cssom: 0.8.0 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 6.0.1 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 8.0.1 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 15.1.0 - ws: 8.20.0 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - optional: true - jsesc@3.1.0: {} json-schema-traverse@1.0.0: {} @@ -8905,12 +8425,57 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + kind-of@6.0.3: {} + kleur@3.0.3: {} kolorist@1.8.0: {} kysely@0.28.16: {} + lefthook-darwin-arm64@2.1.6: + optional: true + + lefthook-darwin-x64@2.1.6: + optional: true + + lefthook-freebsd-arm64@2.1.6: + optional: true + + lefthook-freebsd-x64@2.1.6: + optional: true + + lefthook-linux-arm64@2.1.6: + optional: true + + lefthook-linux-x64@2.1.6: + optional: true + + lefthook-openbsd-arm64@2.1.6: + optional: true + + lefthook-openbsd-x64@2.1.6: + optional: true + + lefthook-windows-arm64@2.1.6: + optional: true + + lefthook-windows-x64@2.1.6: + optional: true + + lefthook@2.1.6: + optionalDependencies: + lefthook-darwin-arm64: 2.1.6 + lefthook-darwin-x64: 2.1.6 + lefthook-freebsd-arm64: 2.1.6 + lefthook-freebsd-x64: 2.1.6 + lefthook-linux-arm64: 2.1.6 + lefthook-linux-x64: 2.1.6 + lefthook-openbsd-arm64: 2.1.6 + lefthook-openbsd-x64: 2.1.6 + lefthook-windows-arm64: 2.1.6 + lefthook-windows-x64: 2.1.6 + lightningcss-android-arm64@1.32.0: optional: true @@ -8992,10 +8557,7 @@ snapshots: dependencies: js-tokens: 4.0.0 - lru-cache@11.3.5: {} - - lru-cache@11.3.6: - optional: true + lru-cache@11.3.6: {} lru-cache@5.1.1: dependencies: @@ -9005,9 +8567,9 @@ snapshots: dependencies: yallist: 4.0.0 - lucide-react@1.8.0(react@19.2.5): + lucide-react@1.8.0(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 lz-string@1.5.0: {} @@ -9034,9 +8596,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - mdn-data@2.27.1: - optional: true - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -9115,33 +8674,6 @@ snapshots: ms@2.1.3: {} - msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3): - dependencies: - '@bundled-es-modules/cookie': 2.0.1 - '@bundled-es-modules/statuses': 1.0.1 - '@inquirer/confirm': 5.1.21(@types/node@25.6.0) - '@mswjs/interceptors': 0.39.8 - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/until': 2.1.0 - '@types/cookie': 0.6.0 - '@types/statuses': 2.0.6 - graphql: 16.14.0 - headers-polyfill: 4.0.3 - is-node-process: 1.2.0 - outvariant: 1.4.3 - path-to-regexp: 6.3.0 - picocolors: 1.1.1 - rettime: 0.7.0 - strict-event-emitter: 0.5.1 - tough-cookie: 6.0.1 - type-fest: 4.41.0 - yargs: 17.7.2 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/node' - optional: true - muggle-string@0.4.1: {} mute-stream@2.0.0: {} @@ -9165,26 +8697,27 @@ snapshots: optionalDependencies: '@rollup/rollup-linux-x64-gnu': 4.60.2 - next@16.2.3(@opentelemetry/api@1.9.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + next@16.2.6(@opentelemetry/api@1.9.1)(@playwright/test@1.51.1)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - '@next/env': 16.2.3 + '@next/env': 16.2.6 '@swc/helpers': 0.5.15 baseline-browser-mapping: 2.9.19 caniuse-lite: 1.0.30001770 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.6 + react-dom: 19.2.6(react@19.2.6) + styled-jsx: 5.1.6(react@19.2.6) optionalDependencies: - '@next/swc-darwin-arm64': 16.2.3 - '@next/swc-darwin-x64': 16.2.3 - '@next/swc-linux-arm64-gnu': 16.2.3 - '@next/swc-linux-arm64-musl': 16.2.3 - '@next/swc-linux-x64-gnu': 16.2.3 - '@next/swc-linux-x64-musl': 16.2.3 - '@next/swc-win32-arm64-msvc': 16.2.3 - '@next/swc-win32-x64-msvc': 16.2.3 + '@next/swc-darwin-arm64': 16.2.6 + '@next/swc-darwin-x64': 16.2.6 + '@next/swc-linux-arm64-gnu': 16.2.6 + '@next/swc-linux-arm64-musl': 16.2.6 + '@next/swc-linux-x64-gnu': 16.2.6 + '@next/swc-linux-x64-musl': 16.2.6 + '@next/swc-win32-arm64-msvc': 16.2.6 + '@next/swc-win32-x64-msvc': 16.2.6 '@opentelemetry/api': 1.9.1 + '@playwright/test': 1.51.1 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -9255,9 +8788,6 @@ snapshots: outdent@0.5.0: {} - outvariant@1.4.3: - optional: true - oxc-parser@0.127.0: dependencies: '@oxc-project/types': 0.127.0 @@ -9359,11 +8889,6 @@ snapshots: parse-ms@2.1.0: {} - parse5@7.3.0: - dependencies: - entities: 6.0.1 - optional: true - patch-console@2.0.0: {} path-browserify@1.0.1: {} @@ -9378,14 +8903,11 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.3.5 + lru-cache: 11.3.6 minipass: 7.1.3 path-to-regexp@3.3.0: {} - path-to-regexp@6.3.0: - optional: true - path-type@4.0.0: {} pathe@2.0.3: {} @@ -9399,8 +8921,6 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.3: {} - picomatch@4.0.4: {} pify@4.0.1: {} @@ -9417,14 +8937,22 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 + playwright-core@1.51.1: {} + + playwright@1.51.1: + dependencies: + playwright-core: 1.51.1 + optionalDependencies: + fsevents: 2.3.2 + pluralize@8.0.0: {} - politty@0.4.15(@inquirer/prompts@8.4.2(@types/node@25.6.0))(zod@4.3.6): + politty@0.4.15(@inquirer/prompts@8.4.2(@types/node@25.9.1))(zod@4.3.6): dependencies: string-width: 8.2.1 zod: 4.3.6 optionalDependencies: - '@inquirer/prompts': 8.4.2(@types/node@25.6.0) + '@inquirer/prompts': 8.4.2(@types/node@25.9.1) postcss-values-parser@6.0.2(postcss@8.5.13): dependencies: @@ -9435,7 +8963,7 @@ snapshots: postcss@8.4.31: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -9537,9 +9065,14 @@ snapshots: react: 19.2.5 scheduler: 0.27.0 - react-hook-form@7.71.2(react@19.2.5): + react-dom@19.2.6(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 + scheduler: 0.27.0 + + react-hook-form@7.71.2(react@19.2.6): + dependencies: + react: 19.2.6 react-is@16.13.1: {} @@ -9552,18 +9085,20 @@ snapshots: react-refresh@0.18.0: {} - react-router@7.14.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + react-router@7.14.1(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: cookie: 1.1.1 - react: 19.2.5 + react: 19.2.6 set-cookie-parser: 2.7.2 optionalDependencies: - react-dom: 19.2.5(react@19.2.5) + react-dom: 19.2.6(react@19.2.6) react@19.1.1: {} react@19.2.5: {} + react@19.2.6: {} + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -9588,9 +9123,6 @@ snapshots: dependencies: rc: 1.2.8 - require-directory@2.1.1: - optional: true - require-from-string@2.0.2: {} requirejs-config-file@4.0.0: @@ -9644,50 +9176,24 @@ snapshots: ret@0.1.15: {} - rettime@0.7.0: - optional: true - reusify@1.1.0: {} - rolldown-plugin-dts@0.23.2(rolldown@1.0.0-rc.12)(typescript@5.9.3): + rolldown-plugin-dts@0.25.2(rolldown@1.0.3)(typescript@5.9.3): dependencies: - '@babel/generator': 8.0.0-rc.3 - '@babel/helper-validator-identifier': 8.0.0-rc.3 - '@babel/parser': 8.0.0-rc.3 - '@babel/types': 8.0.0-rc.3 + '@babel/generator': 8.0.0-rc.6 + '@babel/helper-validator-identifier': 8.0.0-rc.6 + '@babel/parser': 8.0.0-rc.6 ast-kit: 3.0.0-beta.1 birpc: 4.0.0 - dts-resolver: 2.1.3 - get-tsconfig: 4.13.7 + dts-resolver: 3.0.0 + get-tsconfig: 5.0.0-beta.5 obug: 2.1.1 - picomatch: 4.0.4 - rolldown: 1.0.0-rc.12 + rolldown: 1.0.3 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - oxc-resolver - rolldown@1.0.0-rc.12: - dependencies: - '@oxc-project/types': 0.122.0 - '@rolldown/pluginutils': 1.0.0-rc.12 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.12 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 - '@rolldown/binding-darwin-x64': 1.0.0-rc.12 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 - rolldown@1.0.0-rc.17: dependencies: '@oxc-project/types': 0.127.0 @@ -9709,6 +9215,27 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17 + rolldown@1.0.3: + dependencies: + '@oxc-project/types': 0.133.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.3 + '@rolldown/binding-darwin-arm64': 1.0.3 + '@rolldown/binding-darwin-x64': 1.0.3 + '@rolldown/binding-freebsd-x64': 1.0.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 + '@rolldown/binding-linux-arm64-gnu': 1.0.3 + '@rolldown/binding-linux-arm64-musl': 1.0.3 + '@rolldown/binding-linux-ppc64-gnu': 1.0.3 + '@rolldown/binding-linux-s390x-gnu': 1.0.3 + '@rolldown/binding-linux-x64-gnu': 1.0.3 + '@rolldown/binding-linux-x64-musl': 1.0.3 + '@rolldown/binding-openharmony-arm64': 1.0.3 + '@rolldown/binding-wasm32-wasi': 1.0.3 + '@rolldown/binding-win32-arm64-msvc': 1.0.3 + '@rolldown/binding-win32-x64-msvc': 1.0.3 + rollup@4.60.0: dependencies: '@types/estree': 1.0.8 @@ -9740,9 +9267,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.0 fsevents: 2.3.3 - rrweb-cssom@0.8.0: - optional: true - run-applescript@7.1.0: {} run-async@3.0.0: {} @@ -9764,11 +9288,6 @@ snapshots: commander: 12.1.0 enhanced-resolve: 5.21.0 - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - optional: true - scheduler@0.23.2: dependencies: loose-envify: 1.4.0 @@ -9777,6 +9296,11 @@ snapshots: scheduler@0.27.0: {} + section-matter@1.0.0: + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + semver@6.3.1: {} semver@7.5.4: @@ -9785,6 +9309,8 @@ snapshots: semver@7.7.4: {} + semver@7.8.1: {} + serve-handler@6.1.7: dependencies: bytes: 3.0.0 @@ -9877,10 +9403,10 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 - sonner@2.0.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + sonner@2.0.7(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - react: 19.2.5 - react-dom: 19.2.5(react@19.2.5) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) source-map-js@1.2.1: {} @@ -9901,11 +9427,6 @@ snapshots: stackback@0.0.2: {} - statuses@2.0.2: - optional: true - - std-env@4.0.0: {} - std-env@4.1.0: {} stdin-discarder@0.3.2: {} @@ -9914,9 +9435,6 @@ snapshots: dependencies: any-promise: 1.3.0 - strict-event-emitter@0.5.1: - optional: true - string-argv@0.3.2: {} string-width@4.2.3: @@ -9960,6 +9478,8 @@ snapshots: dependencies: ansi-regex: 6.2.2 + strip-bom-string@1.0.0: {} + strip-bom@3.0.0: {} strip-final-newline@2.0.0: {} @@ -9968,10 +9488,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.2.5): + styled-jsx@5.1.6(react@19.2.6): dependencies: client-only: 0.0.1 - react: 19.2.5 + react: 19.2.6 stylus-lookup@6.1.2: dependencies: @@ -9987,9 +9507,6 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - symbol-tree@3.2.4: - optional: true - table@6.9.0: dependencies: ajv: 8.20.0 @@ -10000,13 +9517,11 @@ snapshots: tagged-tag@1.0.0: {} - tailwind-merge@3.5.0: {} - - tailwindcss@4.2.2: {} + tailwind-merge@3.6.0: {} tailwindcss@4.2.4: {} - tapable@2.3.0: {} + tailwindcss@4.3.0: {} tapable@2.3.3: {} @@ -10018,10 +9533,7 @@ snapshots: tinyexec@1.0.4: {} - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + tinyexec@1.2.4: {} tinyglobby@0.2.16: dependencies: @@ -10037,28 +9549,10 @@ snapshots: tinyrainbow@3.1.0: {} - tldts-core@7.0.30: - optional: true - - tldts@7.0.30: - dependencies: - tldts-core: 7.0.30 - optional: true - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - tough-cookie@6.0.1: - dependencies: - tldts: 7.0.30 - optional: true - - tr46@6.0.0: - dependencies: - punycode: 2.3.1 - optional: true - tree-kill@1.2.2: {} ts-api-utils@2.5.0(typescript@5.9.3): @@ -10089,31 +9583,30 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdown@0.21.7(typescript@5.9.3): + tsdown@0.22.1(tsx@4.21.0)(typescript@5.9.3): dependencies: - ansis: 4.2.0 + ansis: 4.3.1 cac: 7.0.0 - defu: 6.1.4 - empathic: 2.0.0 - hookable: 6.1.0 - import-without-cache: 0.2.5 + defu: 6.1.7 + empathic: 2.0.1 + hookable: 6.1.1 + import-without-cache: 0.4.0 obug: 2.1.1 picomatch: 4.0.4 - rolldown: 1.0.0-rc.12 - rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.12)(typescript@5.9.3) - semver: 7.7.4 - tinyexec: 1.0.4 - tinyglobby: 0.2.15 + rolldown: 1.0.3 + rolldown-plugin-dts: 0.25.2(rolldown@1.0.3)(typescript@5.9.3) + semver: 7.8.1 + tinyexec: 1.2.4 + tinyglobby: 0.2.16 tree-kill: 1.2.2 unconfig-core: 7.5.0 - unrun: 0.2.34 optionalDependencies: + tsx: 4.21.0 typescript: 5.9.3 transitivePeerDependencies: - '@ts-macro/tsc' - '@typescript/native-preview' - oxc-resolver - - synckit - vue-tsc tslib@2.8.1: {} @@ -10125,14 +9618,14 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - turbo@2.9.1: + turbo@2.9.16: optionalDependencies: - '@turbo/darwin-64': 2.9.1 - '@turbo/darwin-arm64': 2.9.1 - '@turbo/linux-64': 2.9.1 - '@turbo/linux-arm64': 2.9.1 - '@turbo/windows-64': 2.9.1 - '@turbo/windows-arm64': 2.9.1 + '@turbo/darwin-64': 2.9.16 + '@turbo/darwin-arm64': 2.9.16 + '@turbo/linux-64': 2.9.16 + '@turbo/linux-arm64': 2.9.16 + '@turbo/windows-64': 2.9.16 + '@turbo/windows-arm64': 2.9.16 tw-animate-css@1.4.0: {} @@ -10161,14 +9654,12 @@ snapshots: undici-types@7.19.2: {} + undici-types@7.24.6: {} + universalify@0.1.2: {} universalify@2.0.1: {} - unrun@0.2.34: - dependencies: - rolldown: 1.0.0-rc.12 - update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: browserslist: 4.28.1 @@ -10184,9 +9675,9 @@ snapshots: dependencies: punycode: 2.3.1 - use-sync-external-store@1.6.0(react@19.2.5): + use-sync-external-store@1.6.0(react@19.2.6): dependencies: - react: 19.2.5 + react: 19.2.6 util-deprecate@1.0.2: {} @@ -10196,9 +9687,9 @@ snapshots: vary@1.1.2: {} - vite-plugin-dts@4.5.4(@types/node@25.6.0)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): + vite-plugin-dts@4.5.4(@types/node@25.9.1)(rollup@4.60.0)(typescript@5.9.3)(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)): dependencies: - '@microsoft/api-extractor': 7.55.2(@types/node@25.6.0) + '@microsoft/api-extractor': 7.55.2(@types/node@25.9.1) '@rollup/pluginutils': 5.3.0(rollup@4.60.0) '@volar/typescript': 2.4.27 '@vue/language-core': 2.2.0(typescript@5.9.3) @@ -10209,107 +9700,80 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) + vite: 7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-externalize-deps@0.10.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): + vite-plugin-externalize-deps@0.10.0(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)): dependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) + vite: 7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) - vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): + vite-tsconfig-paths@6.1.1(typescript@5.9.3)(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) + vite: 7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) transitivePeerDependencies: - supports-color - typescript - vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0): + vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0): dependencies: - esbuild: 0.27.4 + esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - postcss: 8.5.12 + postcss: 8.5.13 rollup: 4.60.0 - tinyglobby: 0.2.15 + tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 25.9.1 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 tsx: 4.21.0 - yaml: 2.7.0 - vitest@4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(happy-dom@20.6.2)(jsdom@27.0.0)(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)): + vitest@4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.9.1)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)): dependencies: - '@vitest/expect': 4.1.4 - '@vitest/mocker': 4.1.4(msw@2.11.2(@types/node@25.6.0)(typescript@5.9.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0)) - '@vitest/pretty-format': 4.1.4 - '@vitest/runner': 4.1.4 - '@vitest/snapshot': 4.1.4 - '@vitest/spy': 4.1.4 - '@vitest/utils': 4.1.4 + '@vitest/expect': 4.1.7 + '@vitest/mocker': 4.1.7(vite@7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)) + '@vitest/pretty-format': 4.1.7 + '@vitest/runner': 4.1.7 + '@vitest/snapshot': 4.1.7 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.4 - std-env: 4.0.0 + std-env: 4.1.0 tinybench: 2.9.0 tinyexec: 1.0.4 - tinyglobby: 0.2.15 + tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.7.0) + vite: 7.3.2(@types/node@25.9.1)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@types/node': 25.6.0 - happy-dom: 20.6.2 - jsdom: 27.0.0 + '@types/node': 25.9.1 + happy-dom: 20.9.0 transitivePeerDependencies: - msw vscode-uri@3.1.0: {} - w3c-xmlserializer@5.0.0: - dependencies: - xml-name-validator: 5.0.0 - optional: true - walkdir@0.4.1: {} wcwidth@1.0.1: dependencies: defaults: 1.0.4 - webidl-conversions@8.0.1: - optional: true - - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - optional: true - whatwg-mimetype@3.0.0: {} - whatwg-mimetype@4.0.0: - optional: true - - whatwg-mimetype@5.0.0: - optional: true - - whatwg-url@15.1.0: - dependencies: - tr46: 6.0.0 - webidl-conversions: 8.0.1 - optional: true - which@2.0.2: dependencies: isexe: 2.0.0 @@ -10335,13 +9799,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - optional: true - wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.3 @@ -10354,8 +9811,6 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 - ws@8.19.0: {} - ws@8.20.0: {} wsl-utils@0.3.1: @@ -10365,36 +9820,10 @@ snapshots: xdg-basedir@5.1.0: {} - xml-name-validator@5.0.0: - optional: true - - xmlchars@2.2.0: - optional: true - - y18n@5.0.8: - optional: true - yallist@3.1.1: {} yallist@4.0.0: {} - yaml@2.7.0: - optional: true - - yargs-parser@21.1.1: - optional: true - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - optional: true - yocto-queue@1.2.2: {} yoctocolors-cjs@2.1.3: {} @@ -10403,6 +9832,6 @@ snapshots: yoga-layout@3.2.1: {} - zod@4.3.6: {} + zod@3.25.76: {} - zod@4.4.3: {} + zod@4.3.6: {}