diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cb4f12a9..f2d4b166 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -106,6 +106,10 @@ jobs: FOSSILIZE_PLATFORMS: linux-x64,linux-arm64,win-x64,darwin-x64,darwin-arm64 FOSSILIZE_SIGN: ${{ github.event_name == 'push' && (github.ref_name == 'main' || startsWith(github.ref_name, 'release/')) && 'y' || 'n' }} run: pnpm build + + - name: Build component registry + working-directory: packages/spotlight + run: pnpm registry:build - name: Checking npx run: npx ./packages/spotlight --help diff --git a/packages/docs/.gitignore b/packages/docs/.gitignore new file mode 100644 index 00000000..55a12ae7 --- /dev/null +++ b/packages/docs/.gitignore @@ -0,0 +1,28 @@ +# deps +/node_modules + +# generated content +.contentlayer +.content-collections +.source + +# test & build +/coverage +/.next/ +/out/ +/build +*.tsbuildinfo + +# misc +.DS_Store +*.pem +/.pnp +.pnp.js +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# others +.env*.local +.vercel +next-env.d.ts \ No newline at end of file diff --git a/packages/docs/components.json b/packages/docs/components.json new file mode 100644 index 00000000..779ec9a0 --- /dev/null +++ b/packages/docs/components.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/app/global.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "registries": {} +} diff --git a/packages/docs/content/docs/components/span-tree.mdx b/packages/docs/content/docs/components/span-tree.mdx new file mode 100644 index 00000000..f290c542 --- /dev/null +++ b/packages/docs/content/docs/components/span-tree.mdx @@ -0,0 +1,146 @@ +--- +title: SpanTree +description: Hierarchical waterfall visualization for distributed trace spans +--- + +# SpanTree + +A hierarchical waterfall visualization component for distributed trace spans. Displays timing information and parent-child relationships between spans. + + + +## Installation + + + +## Usage + +```tsx +import { SpanTree } from "@/components/ui/span-tree"; +``` + +```tsx + setSelectedId(spanId)} +/> +``` + +## Examples + +### Basic Usage + +```tsx +import { SpanTree } from "@/components/ui/span-tree"; +import type { SpanData } from "@/components/ui/span-tree/types"; + +const spans: SpanData[] = [ + { + span_id: "span-001", + op: "http.server", + description: "GET /api/users", + start_timestamp: 1700000000000, + timestamp: 1700000000450, + status: "ok", + children: [], + }, +]; + +export function BasicExample() { + return ( + + ); +} +``` + +### With Selection + +```tsx +import { SpanTree } from "@/components/ui/span-tree"; +import { useState } from "react"; + +export function SelectionExample() { + const [selectedSpanId, setSelectedSpanId] = useState(); + + return ( + { + setSelectedSpanId(spanId); + console.log("Selected span:", span); + }} + /> + ); +} +``` + +### With Highlighting + +```tsx +import { SpanTree } from "@/components/ui/span-tree"; + +const highlightedIds = new Set(["span-002", "span-003"]); + +export function HighlightExample() { + return ( + + ); +} +``` + +## API Reference + +### SpanTree + +The main component for rendering a span tree visualization. + + void", description: "Callback when a span is clicked" }, + { name: "highlightedSpanIds", type: "Set", description: "Set of span IDs to highlight" }, + { name: "initialNodeWidth", type: "number", default: "50", description: "Initial width percentage of span name column" }, + { name: "className", type: "string", description: "Custom class name for the root element" } +]} /> + +### SpanData Type + +```tsx +interface SpanData { + span_id: string; + trace_id?: string; + parent_span_id?: string | null; + op?: string | null; + description?: string | null; + start_timestamp: number; + timestamp: number; + status?: "ok" | "error" | string; + children?: SpanData[]; + data?: Record; + tags?: Record; +} +``` + +## Notes + +- The component uses a resizable column layout - drag the divider between the span name and waterfall columns +- Spans with many children (more than 10) or deep nesting (depth 10 or more) are auto-collapsed for performance +- Duration colors indicate performance: green (under 100ms), yellow (100-500ms), orange (500ms-1s), red (over 1s) +- The component is fully keyboard accessible - use Tab to navigate and Enter/Space to select diff --git a/packages/docs/content/docs/components/trace-item.mdx b/packages/docs/content/docs/components/trace-item.mdx new file mode 100644 index 00000000..74e78339 --- /dev/null +++ b/packages/docs/content/docs/components/trace-item.mdx @@ -0,0 +1,178 @@ +--- +title: TraceItem +description: Summary row component for displaying distributed trace information +--- + +# TraceItem + +A summary row component for displaying distributed trace information. Perfect for trace lists and overviews. + + + +## Installation + + + +## Usage + +```tsx +import { TraceItem } from "@/components/ui/trace-item"; +``` + +```tsx + setSelectedId(traceId)} +/> +``` + +## Examples + +### Basic Usage + +```tsx +import { TraceItem } from "@/components/ui/trace-item"; +import type { TraceData } from "@/components/ui/trace-item/types"; + +const trace: TraceData = { + trace_id: "abc123def456", + start_timestamp: Date.now() - 120000, + timestamp: Date.now() - 119550, + status: "ok", + spans: new Map(), + spanTree: [], + rootTransactionName: "/api/users", + rootTransactionMethod: "GET", + environment: "production", +}; + +export function BasicExample() { + return ; +} +``` + +### With Selection + +```tsx +import { TraceItem } from "@/components/ui/trace-item"; +import { useState } from "react"; + +export function SelectionExample() { + const [selectedId, setSelectedId] = useState(); + + return ( + { + setSelectedId(traceId); + console.log("Selected trace:", trace); + }} + /> + ); +} +``` + +### Trace List + +```tsx +import { TraceItem } from "@/components/ui/trace-item"; +import { useState } from "react"; + +export function TraceList({ traces }) { + const [selectedId, setSelectedId] = useState(); + + return ( +
+ {traces.map((trace) => ( + setSelectedId(traceId)} + /> + ))} +
+ ); +} +``` + +## API Reference + +### TraceItem + +The main component for rendering a trace summary row. + + void", description: "Callback when trace is clicked" }, + { name: "className", type: "string", description: "Custom class name" } +]} /> + +### TraceData Type + +```tsx +interface TraceData { + trace_id: string; + start_timestamp: number; + timestamp: number; + status?: "ok" | "error" | string; + spans: Map; + spanTree: SpanData[]; + rootTransactionName: string; + rootTransactionMethod?: string; + transactionCount?: number; + spanCount?: number; + platform?: string; + environment?: string; +} +``` + +### Additional Components + +The trace-item package also includes helper components: + +#### StatusBadge + +```tsx +import { StatusBadge } from "@/components/ui/trace-item"; + + + +``` + +#### MethodBadge + +```tsx +import { MethodBadge } from "@/components/ui/trace-item"; + + + +``` + +#### EnvironmentBadge + +```tsx +import { EnvironmentBadge } from "@/components/ui/trace-item"; + + + +``` + +#### TimeSince + +```tsx +import { TimeSince } from "@/components/ui/trace-item"; + + +``` + +## Notes + +- The component displays a truncated trace ID (first 8 characters) +- Relative time ("2 minutes ago") updates automatically every 5 seconds by default +- Error traces are highlighted with a red icon and status badge +- The component is fully keyboard accessible - use Tab to navigate and Enter/Space to select +- Duration is calculated from `timestamp - start_timestamp` diff --git a/packages/docs/content/docs/index.mdx b/packages/docs/content/docs/index.mdx new file mode 100644 index 00000000..dd26f2b4 --- /dev/null +++ b/packages/docs/content/docs/index.mdx @@ -0,0 +1,40 @@ +--- +title: Introduction +description: Beautiful UI components for observability and distributed tracing +--- + +# Spotlight UI + +Spotlight UI is a component library built on top of shadcn/ui to help you build observability and distributed tracing experiences faster. It provides pre-built components for trace visualization, span trees, and more. + +Components are available via the shadcn CLI with our custom registry: + +```bash +pnpm dlx shadcn@latest add span-tree -r https://spotlightjs.com/registry.json +``` + +## Features + +- **Trace Visualization** - Display distributed traces with hierarchical span trees +- **Interactive Components** - Click, select, and explore trace data +- **Customizable** - Built with Tailwind CSS and fully customizable +- **shadcn/ui Compatible** - Uses the same design tokens and patterns + +## Getting Started + +1. **Setup your project** - Make sure you have shadcn/ui set up in your project +2. **Install components** - Use the CLI to add components to your project +3. **Use components** - Import and use components in your application + +Check out the [Setup](/docs/setup) guide to get started. + +## Components + + + + Hierarchical waterfall visualization for distributed trace spans + + + Summary row component for displaying distributed trace information + + diff --git a/packages/docs/content/docs/meta.json b/packages/docs/content/docs/meta.json new file mode 100644 index 00000000..77031b2e --- /dev/null +++ b/packages/docs/content/docs/meta.json @@ -0,0 +1,12 @@ +{ + "title": "Documentation", + "pages": [ + "---Getting Started---", + "index", + "setup", + "usage", + "---Components---", + "./components/span-tree", + "./components/trace-item" + ] +} diff --git a/packages/docs/content/docs/setup.mdx b/packages/docs/content/docs/setup.mdx new file mode 100644 index 00000000..bf8f2926 --- /dev/null +++ b/packages/docs/content/docs/setup.mdx @@ -0,0 +1,129 @@ +--- +title: Setup +description: Getting started with Spotlight UI +--- + +# Setup + +Getting started with Spotlight UI components is straightforward. You can use the shadcn CLI with our custom registry for the fastest setup, or manually copy the component files. + +## Prerequisites + +Before installing Spotlight UI, make sure your environment meets the following requirements: + +- [Node.js](https://nodejs.org/) version 18 or later +- A [Next.js](https://nextjs.org/) project (or any React framework) +- [Tailwind CSS](https://tailwindcss.com/) configured in your project +- [shadcn/ui](https://ui.shadcn.com/) setup in your project (or let the CLI set it up) + +### Setting up shadcn/ui + +If you don't have shadcn/ui set up yet, you can initialize it first: + +```bash +pnpm dlx shadcn@latest init +``` + +Follow the prompts to configure your project. The CLI will: +- Set up your `components.json` configuration +- Configure path aliases in `tsconfig.json` +- Add the `cn` utility function to `lib/utils.ts` +- Set up CSS variables for theming + +## Installing Components + +### Using the CLI (Recommended) + +The fastest way to add components is using the shadcn CLI with our custom registry: + +```bash +pnpm dlx shadcn@latest add -r https://spotlightjs.com/registry.json +``` + +For example, to install the SpanTree component: + +```bash +pnpm dlx shadcn@latest add span-tree -r https://spotlightjs.com/registry.json +``` + +The CLI will: +1. Download all component files to your `components/ui` directory +2. Install any required npm dependencies (like `lucide-react`) +3. Add any required CSS styles + +### Manual Installation + +If you prefer to manually install components: + +1. **Install dependencies** - Each component lists its npm dependencies +2. **Copy component files** - Download files from the registry +3. **Add CSS** - Copy any required CSS to your global styles +4. **Update imports** - Adjust import paths to match your project + +See each component's documentation page for specific manual installation steps. + +## Project Structure + +After installing components, your project structure should look like: + +``` +your-project/ +├── components/ +│ └── ui/ +│ ├── span-tree/ +│ │ ├── span-tree.tsx +│ │ ├── span-item.tsx +│ │ ├── span-resizer.tsx +│ │ ├── types.ts +│ │ └── duration.ts +│ └── trace-item/ +│ └── ... +├── lib/ +│ └── utils.ts # cn() utility function +└── app/ + └── globals.css # Global styles including component CSS +``` + +## Required Utilities + +Spotlight UI components use the `cn` utility from shadcn/ui for class merging: + +```tsx title="lib/utils.ts" +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} +``` + +Make sure this utility is available at `@/lib/utils` (or update component imports accordingly). + +## Troubleshooting + +### "Module not found" errors + +Make sure your `tsconfig.json` has the correct path aliases: + +```json +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./*"] + } + } +} +``` + +### Components not styled correctly + +Ensure you've imported the component CSS in your global stylesheet. Some components (like SpanTree) require specific CSS for the waterfall layout. + +### "use client" errors + +Spotlight UI components are client components. If you see hydration errors, make sure you're using them within client component boundaries. + +## Next Steps + +Once you have components installed, check out the [Usage](/docs/usage) guide to learn how to use them in your application. diff --git a/packages/docs/content/docs/usage.mdx b/packages/docs/content/docs/usage.mdx new file mode 100644 index 00000000..e1a0fbbf --- /dev/null +++ b/packages/docs/content/docs/usage.mdx @@ -0,0 +1,228 @@ +--- +title: Usage +description: How to use Spotlight UI components in your application +--- + +# Usage + +Once a Spotlight UI component is installed, you can import it and use it in your application like any other React component. The components are added as part of your codebase (not hidden in a library), so you can edit them to suit your specific needs. + +## Basic Example + +After installing Spotlight UI components, you can use them in your application. Here's an example using the SpanTree component: + +```tsx +"use client"; + +import { SpanTree } from "@/components/ui/span-tree"; +import type { SpanData } from "@/components/ui/span-tree/types"; +import { useState } from "react"; + +const spans: SpanData[] = [ + { + span_id: "span-001", + op: "http.server", + description: "GET /api/users", + start_timestamp: 1700000000000, + timestamp: 1700000000450, + status: "ok", + children: [ + { + span_id: "span-002", + op: "db.query", + description: "SELECT * FROM users", + start_timestamp: 1700000000050, + timestamp: 1700000000200, + status: "ok", + }, + ], + }, +]; + +export default function TracePage() { + const [selectedSpanId, setSelectedSpanId] = useState(); + + return ( + setSelectedSpanId(spanId)} + /> + ); +} +``` + +## Working with Trace Data + +Spotlight UI components work with standard trace/span data structures. Here's how to integrate with common observability backends: + +### From Sentry SDK + +```tsx +import { SpanTree } from "@/components/ui/span-tree"; + +// Transform Sentry span data to SpanData format +function transformSentrySpans(sentrySpans) { + return sentrySpans.map(span => ({ + span_id: span.spanId, + trace_id: span.traceId, + parent_span_id: span.parentSpanId, + op: span.op, + description: span.description, + start_timestamp: span.startTimestamp * 1000, + timestamp: span.endTimestamp * 1000, + status: span.status, + children: transformSentrySpans(span.children || []), + })); +} +``` + +### From OpenTelemetry + +```tsx +// Transform OTLP spans to SpanData format +function transformOTLPSpans(otlpSpans) { + return otlpSpans.map(span => ({ + span_id: span.spanId, + trace_id: span.traceId, + parent_span_id: span.parentSpanId, + op: span.name, + description: span.attributes?.["http.url"] || span.name, + start_timestamp: Number(span.startTimeUnixNano) / 1_000_000, + timestamp: Number(span.endTimeUnixNano) / 1_000_000, + status: span.status?.code === 2 ? "error" : "ok", + children: [], + })); +} +``` + +## Customization + +Since the component code is added directly to your project, you have full control: + +### Styling + +Modify Tailwind classes to match your design system: + +```tsx +// In span-tree.tsx, customize the container +
    1 && "deep", + // Add your custom classes + "bg-card rounded-lg p-4", + className +)}> +``` + +### Behavior + +Add new props or change existing behavior: + +```tsx +// Add a new prop for compact mode +interface SpanTreeProps { + // ... existing props + compact?: boolean; +} + +export function SpanTree({ compact = false, ...props }: SpanTreeProps) { + return ( +
      + {/* ... */} +
    + ); +} +``` + +### Types + +Extend the TypeScript interfaces for your use case: + +```tsx +// In types.ts, extend SpanData with custom fields +interface SpanData { + // ... existing fields + + // Custom fields for your application + customMetadata?: { + team: string; + service: string; + }; +} +``` + +## TypeScript Support + +All components come with full TypeScript support. Types are exported from each component's `types.ts` file: + +```tsx +import type { SpanData, SpanTreeProps } from "@/components/ui/span-tree/types"; +import type { TraceData, TraceItemProps } from "@/components/ui/trace-item/types"; +``` + +## Server Components + +Most Spotlight UI components are client components (marked with `"use client"`) because they require interactivity. Make sure to use them within client component boundaries in your Next.js app. + +```tsx +// app/traces/page.tsx (Server Component) +import TraceViewer from "./trace-viewer"; + +export default async function TracesPage() { + const traces = await fetchTraces(); + + return ( +
    +

    Traces

    + {/* Client component handles interactivity */} + +
    + ); +} + +// app/traces/trace-viewer.tsx (Client Component) +"use client"; + +import { SpanTree } from "@/components/ui/span-tree"; + +export default function TraceViewer({ traces }) { + // ... interactive logic +} +``` + +## Performance Tips + +### Large Traces + +For traces with many spans (100+), consider: + +1. **Virtualization** - Only render visible spans +2. **Lazy loading** - Load children on demand +3. **Pagination** - Split large traces into pages + +### Re-renders + +The components use `React.memo` and `useCallback` internally, but you should also: + +```tsx +// Memoize span data to prevent unnecessary re-renders +const spans = useMemo(() => transformSpans(rawData), [rawData]); + +// Memoize callbacks +const handleSelect = useCallback((spanId: string) => { + setSelectedSpanId(spanId); +}, []); +``` + +## Accessibility + +Spotlight UI components include accessibility features: + +- **Keyboard navigation** - Tab to navigate, Enter/Space to select +- **ARIA attributes** - Proper roles and labels +- **Focus management** - Visible focus indicators + +See each component's documentation for specific accessibility details. diff --git a/packages/docs/next.config.mjs b/packages/docs/next.config.mjs new file mode 100644 index 00000000..50894e97 --- /dev/null +++ b/packages/docs/next.config.mjs @@ -0,0 +1,10 @@ +import { createMDX } from "fumadocs-mdx/next"; + +const withMDX = createMDX(); + +/** @type {import('next').NextConfig} */ +const config = { + reactStrictMode: true, +}; + +export default withMDX(config); diff --git a/packages/docs/package.json b/packages/docs/package.json new file mode 100644 index 00000000..27b57673 --- /dev/null +++ b/packages/docs/package.json @@ -0,0 +1,45 @@ +{ + "name": "docs", + "version": "0.0.0", + "private": true, + "scripts": { + "build": "next build", + "dev": "next dev --turbo", + "format": "biome check --write .", + "start": "next start", + "postinstall": "fumadocs-mdx", + "registry:build": "shadcn build" + }, + "dependencies": { + "@radix-ui/react-hover-card": "^1.1.14", + "@radix-ui/react-tabs": "^1.1.12", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "dayjs": "^1.11.13", + "fumadocs-core": "15.6.1", + "fumadocs-mdx": "11.6.10", + "fumadocs-typescript": "^4.0.6", + "fumadocs-ui": "15.6.1", + "lucide-react": "^0.525.0", + "next": "15.3.8", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "react-icons": "^5.5.0", + "shiki": "^3.7.0", + "ts-morph": "^26.0.0" + }, + "devDependencies": { + "@biomejs/biome": "^2.0.6", + "shadcn": "^2.5.0", + "@tailwindcss/postcss": "^4.1.11", + "@types/mdx": "^2.0.13", + "@types/node": "24.0.7", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "postcss": "^8.5.6", + "tailwind-merge": "^3.4.0", + "tailwindcss": "^4.1.11", + "tw-animate-css": "^1.4.0", + "typescript": "^5.8.3" + } +} diff --git a/packages/docs/postcss.config.mjs b/packages/docs/postcss.config.mjs new file mode 100644 index 00000000..c2ddf748 --- /dev/null +++ b/packages/docs/postcss.config.mjs @@ -0,0 +1,5 @@ +export default { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; diff --git a/packages/docs/public/favicon.ico b/packages/docs/public/favicon.ico new file mode 100644 index 00000000..43f71262 Binary files /dev/null and b/packages/docs/public/favicon.ico differ diff --git a/packages/docs/registry.json b/packages/docs/registry.json new file mode 100644 index 00000000..b5abd9ee --- /dev/null +++ b/packages/docs/registry.json @@ -0,0 +1,96 @@ +{ + "$schema": "https://ui.shadcn.com/schema/registry.json", + "name": "spotlight", + "homepage": "https://spotlightjs.com", + "items": [ + { + "name": "span-tree", + "type": "registry:block", + "title": "Span Tree", + "description": "A hierarchical waterfall visualization for distributed trace spans with collapsible nodes and resizable columns.", + "dependencies": ["lucide-react"], + "registryDependencies": [], + "categories": ["traces", "observability"], + "files": [ + { "path": "registry/new-york/span-tree/span-tree.tsx", "type": "registry:component" }, + { "path": "registry/new-york/span-tree/span-item.tsx", "type": "registry:component" }, + { "path": "registry/new-york/span-tree/span-resizer.tsx", "type": "registry:component" }, + { "path": "registry/new-york/span-tree/types.ts", "type": "registry:lib" }, + { "path": "registry/new-york/span-tree/duration.ts", "type": "registry:lib" } + ], + "css": { + "@layer components": { + ".span-tree": { + "position": "relative" + }, + ".span-tree .span-tree": { + "position": "static" + }, + ".span-tree, .span-tree ul": { + "list-style": "none", + "margin": "0", + "padding": "0" + }, + ".span-tree.deep > li > ul": { + "margin-left": "8px" + }, + ".span-tree.deep > li": { + "border-left": "1px solid hsl(var(--border))", + "padding-left": "1rem", + "margin-left": "1rem" + }, + ".span-tree li:last-child": { + "border-left": "0" + }, + ".span-tree > li:first-child:before": { + "display": "none" + }, + ".span-tree.deep > li:before, .span-tree .span-tree > li:before": { + "content": "\"\"", + "display": "inline-block", + "position": "absolute", + "height": "15px", + "width": "12px", + "margin-left": "-16px", + "border-bottom": "1px solid hsl(var(--border))" + }, + ".span-tree li:last-child:before": { + "border-left": "1px solid hsl(var(--border))" + }, + ".span-tree .node": { + "display": "flex", + "align-items": "center", + "column-gap": "0.25rem", + "overflow": "hidden", + "padding": "0.25rem 0", + "padding-left": "0.25rem" + }, + ".span-tree .waterfall": { + "position": "absolute", + "right": "0", + "height": "1.75rem", + "border-left": "2px solid hsl(var(--border))", + "padding": "0.25rem 0", + "padding-left": "0.25rem" + } + } + } + }, + { + "name": "trace-item", + "type": "registry:block", + "title": "Trace Item", + "description": "A trace summary row component showing ID, duration, status, and transaction name for distributed traces.", + "dependencies": ["lucide-react", "dayjs"], + "registryDependencies": [], + "categories": ["traces", "observability"], + "files": [ + { "path": "registry/new-york/trace-item/trace-item.tsx", "type": "registry:component" }, + { "path": "registry/new-york/trace-item/trace-badge.tsx", "type": "registry:component" }, + { "path": "registry/new-york/trace-item/time-since.tsx", "type": "registry:component" }, + { "path": "registry/new-york/trace-item/types.ts", "type": "registry:lib" }, + { "path": "registry/new-york/trace-item/duration.ts", "type": "registry:lib" } + ] + } + ] +} diff --git a/packages/docs/registry/new-york/span-tree/duration.ts b/packages/docs/registry/new-york/span-tree/duration.ts new file mode 100644 index 00000000..edd44633 --- /dev/null +++ b/packages/docs/registry/new-york/span-tree/duration.ts @@ -0,0 +1,99 @@ +/** + * Duration formatting utilities for trace visualization. + * Converts millisecond durations to human-readable strings. + */ + +/** + * Labels for duration units, keyed by millisecond thresholds. + */ +export const DURATION_LABELS: Record = { + 31557600000: "yr", + 2629800000: "mo", + 604800000: "wk", + 86400000: "d", + 3600000: "hr", + 60000: "min", + 1000: "s", +}; + +/** + * Sorted duration thresholds from largest to smallest. + */ +const DURATIONS = Object.keys(DURATION_LABELS) + .map(Number) + .sort((a, b) => b - a); + +/** + * Returns a Tailwind class name for coloring duration text based on thresholds. + * Uses shadcn-compatible color tokens. + * + * @param duration - Duration in milliseconds + * @returns Tailwind class name for text color + * + * @example + * getDurationClassName(1500) // "text-destructive" (> 1s) + * getDurationClassName(600) // "text-orange-500" (> 500ms) + * getDurationClassName(150) // "text-yellow-500" (> 100ms) + * getDurationClassName(50) // "text-muted-foreground" (< 100ms) + */ +export function getDurationClassName(duration: number): string { + if (duration > 1000) return "text-destructive"; + if (duration > 500) return "text-orange-500"; + if (duration > 100) return "text-yellow-500"; + return "text-muted-foreground"; +} + +/** + * Formats a number with specified decimal places, removing trailing zeros. + * + * @param num - Number to format + * @param decimalPlaces - Number of decimal places (default: 2) + * @returns Formatted number string + * + * @example + * formatNumber(1.5, 2) // "1.5" + * formatNumber(2.0, 2) // "2" + * formatNumber(3.14159, 2) // "3.14" + */ +export function formatNumber(num: number, decimalPlaces = 2): string { + return num.toFixed(decimalPlaces).replace(/\.?0+$/, ""); +} + +/** + * Formats a duration in milliseconds to a human-readable string. + * Automatically selects the most appropriate unit. + * + * @param duration - Duration in milliseconds + * @returns Formatted duration string with unit + * + * @example + * formatDuration(500) // "500ms" + * formatDuration(1500) // "1.5s" + * formatDuration(65000) // "1.08min" + * formatDuration(3700000) // "1.03hr" + */ +export function formatDuration(duration: number): string { + for (const limit of DURATIONS) { + if (duration >= limit) { + const num = formatNumber(duration / limit); + return `${num}${DURATION_LABELS[limit]}`; + } + } + return `${formatNumber(duration)}ms`; +} + +/** + * Calculates and formats the duration of a span. + * + * @param span - Object with start_timestamp and timestamp properties + * @returns Formatted duration string + * + * @example + * formatSpanDuration({ start_timestamp: 1000, timestamp: 1500 }) // "500ms" + */ +export function formatSpanDuration(span: { + timestamp: number; + start_timestamp: number; +}): string { + return formatDuration(span.timestamp - span.start_timestamp); +} diff --git a/packages/docs/registry/new-york/span-tree/span-item.tsx b/packages/docs/registry/new-york/span-tree/span-item.tsx new file mode 100644 index 00000000..68b4bef6 --- /dev/null +++ b/packages/docs/registry/new-york/span-tree/span-item.tsx @@ -0,0 +1,186 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import { formatDuration, getDurationClassName } from "@/registry/new-york/span-tree/duration"; +import { SpanResizer } from "@/registry/new-york/span-tree/span-resizer"; +import { SpanTree } from "@/registry/new-york/span-tree/span-tree"; +import type { SpanItemProps } from "@/registry/new-york/span-tree/types"; +import { ChevronDown } from "lucide-react"; +import { useCallback, useMemo, useRef, useState } from "react"; + +/** + * SpanItem renders a single span row in the waterfall visualization. + * It displays the span name, operation, and a timing bar showing duration + * relative to the total trace duration. + * + * Features: + * - Collapsible children with expand/collapse button + * - Resizable split between name and waterfall columns + * - Highlight support for search results + * - Click selection with callback + * + * @example + * ```tsx + * setSelectedSpan(span)} + * spanNodeWidth={50} + * onNodeWidthChange={setNodeWidth} + * /> + * ``` + */ +export function SpanItem({ + span, + startTimestamp, + totalDuration, + depth = 1, + selectedSpanId, + highlightedSpanIds, + onSpanSelect, + spanNodeWidth, + onNodeWidthChange, +}: SpanItemProps) { + const containerRef = useRef(null); + const childrenCount = span.children?.length ?? 0; + + // Auto-collapse based on depth or child count + const [isCollapsed, setIsCollapsed] = useState(depth >= 10 || childrenCount > 10); + const [isResizing, setIsResizing] = useState(false); + + const spanDuration = span.timestamp - span.start_timestamp; + const isSelected = selectedSpanId === span.span_id; + const isHighlighted = highlightedSpanIds?.has(span.span_id); + const hasError = span.status && span.status !== "ok"; + + // Memoize timing bar styles for performance with large traces + const timingBarStyle = useMemo(() => { + const leftPercent = ((span.start_timestamp - startTimestamp) / totalDuration) * 100; + const widthPercent = (spanDuration / totalDuration) * 100; + return { + left: `${Math.min(leftPercent, 95)}%`, + width: `${Math.max(1, Math.min(widthPercent, 100 - leftPercent))}%`, + }; + }, [span.start_timestamp, startTimestamp, totalDuration, spanDuration]); + + const handleResize = useCallback( + (e: MouseEvent) => { + if (containerRef.current && onNodeWidthChange) { + const rect = containerRef.current.getBoundingClientRect(); + const newWidth = ((e.clientX - rect.left) / rect.width) * 100; + // Clamp width between 20% and 80% + onNodeWidthChange(Math.min(Math.max(newWidth, 20), 80)); + } + }, + [onNodeWidthChange], + ); + + const handleClick = useCallback(() => { + onSpanSelect?.(span.span_id, span); + }, [onSpanSelect, span]); + + const handleKeyDown = useCallback( + (e: React.KeyboardEvent) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + onSpanSelect?.(span.span_id, span); + } + }, + [onSpanSelect, span], + ); + + const handleToggleCollapse = useCallback((e: React.MouseEvent) => { + e.stopPropagation(); + setIsCollapsed(prev => !prev); + }, []); + + return ( +
  • +
    + {/* Span name column */} +
    + {/* Collapse/expand button for spans with children */} + {childrenCount > 0 && ( + + )} + + {/* Operation name */} + {span.op && ( + <> + {span.op} + + + )} + + {/* Span description or ID */} + + {span.description || span.span_id} + +
    + + {/* Waterfall column */} +
    + + + {/* Timing bar */} +
    + + {formatDuration(spanDuration)} + +
    +
    +
    + + {/* Render children recursively */} + {!isCollapsed && childrenCount > 0 && ( + + )} +
  • + ); +} + +export default SpanItem; diff --git a/packages/docs/registry/new-york/span-tree/span-resizer.tsx b/packages/docs/registry/new-york/span-tree/span-resizer.tsx new file mode 100644 index 00000000..8d07d41e --- /dev/null +++ b/packages/docs/registry/new-york/span-tree/span-resizer.tsx @@ -0,0 +1,82 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import type { SpanResizerProps } from "@/registry/new-york/span-tree/types"; +import { memo, useCallback, useEffect, useRef, useState } from "react"; + +/** + * SpanResizer component provides a draggable handle for resizing + * the span name column width in the waterfall visualization. + */ +function SpanResizerComponent({ handleResize, isResizing, setIsResizing }: SpanResizerProps) { + const [isHovered, setIsHovered] = useState(false); + const lastUpdateRef = useRef(0); + const cleanupRef = useRef<(() => void) | null>(null); + + // Cleanup event listeners on unmount to prevent memory leaks + useEffect(() => { + return () => { + if (cleanupRef.current) { + cleanupRef.current(); + cleanupRef.current = null; + } + }; + }, []); + + const onMouseDown = useCallback( + (e: React.MouseEvent) => { + e.preventDefault(); + setIsResizing(true); + + const onMouseMove = (e: MouseEvent) => { + const now = Date.now(); + // Throttle to ~60fps for smooth performance + if (now - lastUpdateRef.current < 16) return; + lastUpdateRef.current = now; + requestAnimationFrame(() => handleResize(e)); + }; + + const onMouseUp = () => { + setIsResizing(false); + document.removeEventListener("mousemove", onMouseMove); + document.removeEventListener("mouseup", onMouseUp); + cleanupRef.current = null; + }; + + // Store cleanup function for unmount scenario + cleanupRef.current = () => { + document.removeEventListener("mousemove", onMouseMove); + document.removeEventListener("mouseup", onMouseUp); + }; + + document.addEventListener("mousemove", onMouseMove); + document.addEventListener("mouseup", onMouseUp); + }, + [handleResize, setIsResizing], + ); + + const handleMouseEnter = useCallback(() => setIsHovered(true), []); + const handleMouseLeave = useCallback(() => setIsHovered(false), []); + + return ( +
    + ); +} + +export const SpanResizer = memo(SpanResizerComponent); +export default SpanResizer; diff --git a/packages/docs/registry/new-york/span-tree/span-tree.tsx b/packages/docs/registry/new-york/span-tree/span-tree.tsx new file mode 100644 index 00000000..9819d082 --- /dev/null +++ b/packages/docs/registry/new-york/span-tree/span-tree.tsx @@ -0,0 +1,83 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import { SpanItem } from "@/registry/new-york/span-tree/span-item"; +import type { SpanTreeProps } from "@/registry/new-york/span-tree/types"; +import { useState } from "react"; + +/** + * SpanTree renders a hierarchical waterfall visualization for distributed trace spans. + * + * Features: + * - Hierarchical display of parent-child span relationships + * - Resizable split between span name and waterfall timing columns + * - Timing bars showing span duration relative to total trace + * - Collapsible nodes for deep traces + * - Optional highlighting for search/filter results + * - Click selection with callback support + * + * @example + * ```tsx + * { + * console.log("Selected span:", span); + * setSelectedId(id); + * }} + * /> + * ``` + * + * @example With highlighting + * ```tsx + * const matchingSpanIds = new Set( + * spans.filter(s => s.op?.includes(searchQuery)).map(s => s.span_id) + * ); + * + * + * ``` + */ +export function SpanTree({ + spans, + traceStartTimestamp, + traceDuration, + selectedSpanId, + onSpanSelect, + highlightedSpanIds, + initialNodeWidth = 50, + className, +}: SpanTreeProps) { + const [spanNodeWidth, setSpanNodeWidth] = useState(initialNodeWidth); + + if (!spans || spans.length === 0) { + return null; + } + + return ( +
      1 && "deep", className)}> + {spans.map(span => ( + + ))} +
    + ); +} + +export default SpanTree; diff --git a/packages/docs/registry/new-york/span-tree/types.ts b/packages/docs/registry/new-york/span-tree/types.ts new file mode 100644 index 00000000..6ecbc80d --- /dev/null +++ b/packages/docs/registry/new-york/span-tree/types.ts @@ -0,0 +1,89 @@ +/** + * Generic span interface compatible with OpenTelemetry trace data. + * This represents a single unit of work within a distributed trace. + */ +export interface SpanData { + /** Unique identifier for this span */ + span_id: string; + /** Trace ID this span belongs to */ + trace_id?: string; + /** Parent span ID, null for root spans */ + parent_span_id?: string | null; + /** Operation name (e.g., "http.request", "db.query") */ + op?: string | null; + /** Human-readable description of the span */ + description?: string | null; + /** Start time as Unix timestamp in milliseconds */ + start_timestamp: number; + /** End time as Unix timestamp in milliseconds */ + timestamp: number; + /** Span status ("ok", "error", or custom string) */ + status?: "ok" | "error" | string; + /** Child spans */ + children?: SpanData[]; + /** Additional span attributes/data */ + data?: Record; + /** Key-value tags for filtering and categorization */ + tags?: Record; +} + +/** + * Props for the SpanTree component. + * Renders a hierarchical waterfall visualization of spans. + */ +export interface SpanTreeProps { + /** Array of root spans (with children populated) */ + spans: SpanData[]; + /** Start timestamp of the entire trace (for waterfall positioning) */ + traceStartTimestamp: number; + /** Total duration of the trace in milliseconds */ + traceDuration: number; + /** Currently selected span ID */ + selectedSpanId?: string; + /** Callback when a span is clicked */ + onSpanSelect?: (spanId: string, span: SpanData) => void; + /** Optional: Set of span IDs to highlight (e.g., search results) */ + highlightedSpanIds?: Set; + /** Initial width percentage of the span name column (default: 50) */ + initialNodeWidth?: number; + /** Custom class name for the root element */ + className?: string; +} + +/** + * Props for individual SpanItem component. + * Renders a single span row with timing bar and children. + */ +export interface SpanItemProps { + /** The span data to render */ + span: SpanData; + /** Start timestamp of the entire trace */ + startTimestamp: number; + /** Total duration of the trace in milliseconds */ + totalDuration: number; + /** Current nesting depth (used for auto-collapse) */ + depth?: number; + /** Currently selected span ID */ + selectedSpanId?: string; + /** Set of span IDs to highlight */ + highlightedSpanIds?: Set; + /** Callback when this span is clicked */ + onSpanSelect?: (spanId: string, span: SpanData) => void; + /** Current width of the span name column (percentage) */ + spanNodeWidth: number; + /** Callback to update the span name column width */ + onNodeWidthChange?: (width: number) => void; +} + +/** + * Props for the SpanResizer component. + * Handles draggable resize of the span name column. + */ +export interface SpanResizerProps { + /** Callback during resize with mouse event */ + handleResize: (e: MouseEvent) => void; + /** Whether currently resizing */ + isResizing: boolean; + /** Callback to set resizing state */ + setIsResizing: (val: boolean) => void; +} diff --git a/packages/docs/registry/new-york/trace-item/duration.ts b/packages/docs/registry/new-york/trace-item/duration.ts new file mode 100644 index 00000000..6bfcbf55 --- /dev/null +++ b/packages/docs/registry/new-york/trace-item/duration.ts @@ -0,0 +1,52 @@ +/** + * Duration formatting utilities for trace visualization. + * Converts millisecond durations to human-readable strings. + */ + +/** + * Labels for duration units, keyed by millisecond thresholds. + */ +export const DURATION_LABELS: Record = { + 31557600000: "yr", + 2629800000: "mo", + 604800000: "wk", + 86400000: "d", + 3600000: "hr", + 60000: "min", + 1000: "s", +}; + +/** + * Sorted duration thresholds from largest to smallest. + */ +const DURATIONS = Object.keys(DURATION_LABELS) + .map(Number) + .sort((a, b) => b - a); + +/** + * Formats a number with specified decimal places, removing trailing zeros. + * + * @param num - Number to format + * @param decimalPlaces - Number of decimal places (default: 2) + * @returns Formatted number string + */ +export function formatNumber(num: number, decimalPlaces = 2): string { + return num.toFixed(decimalPlaces).replace(/\.?0+$/, ""); +} + +/** + * Formats a duration in milliseconds to a human-readable string. + * Automatically selects the most appropriate unit. + * + * @param duration - Duration in milliseconds + * @returns Formatted duration string with unit + */ +export function formatDuration(duration: number): string { + for (const limit of DURATIONS) { + if (duration >= limit) { + const num = formatNumber(duration / limit); + return `${num}${DURATION_LABELS[limit]}`; + } + } + return `${formatNumber(duration)}ms`; +} diff --git a/packages/docs/registry/new-york/trace-item/time-since.tsx b/packages/docs/registry/new-york/trace-item/time-since.tsx new file mode 100644 index 00000000..7679bb7c --- /dev/null +++ b/packages/docs/registry/new-york/trace-item/time-since.tsx @@ -0,0 +1,48 @@ +"use client"; + +import type { TimeSinceProps } from "@/registry/new-york/trace-item/types"; +import dayjs from "dayjs"; +import relativeTime from "dayjs/plugin/relativeTime"; +import { memo, useEffect, useState } from "react"; + +// Extend dayjs with relative time plugin +dayjs.extend(relativeTime); + +/** + * TimeSince component displays a relative time string that automatically + * updates at a configurable interval. + */ +function TimeSinceComponent({ date, refreshInterval = 5000, ...props }: TimeSinceProps) { + // Initialize with null to avoid hydration mismatch between server and client + const [value, setValue] = useState(null); + + useEffect(() => { + if (!date) { + setValue(null); + return; + } + + // Set initial value on client only + setValue(dayjs(date).fromNow()); + + // Set up interval to refresh the relative time + const timer = setInterval(() => { + setValue(dayjs(date).fromNow()); + }, refreshInterval); + + return () => clearInterval(timer); + }, [date, refreshInterval]); + + if (!date || !value) return null; + + const dateTimeString = date instanceof Date ? date.toISOString() : String(date); + + return ( + + ); +} + +export const TimeSince = memo(TimeSinceComponent); +export default TimeSince; diff --git a/packages/docs/registry/new-york/trace-item/trace-badge.tsx b/packages/docs/registry/new-york/trace-item/trace-badge.tsx new file mode 100644 index 00000000..5c0465d8 --- /dev/null +++ b/packages/docs/registry/new-york/trace-item/trace-badge.tsx @@ -0,0 +1,89 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import type { TraceBadgeProps } from "@/registry/new-york/trace-item/types"; +import { memo } from "react"; + +/** + * Returns appropriate classes based on status value. + */ +function getStatusClasses(status: string): string { + const normalizedStatus = status.toLowerCase(); + + if (normalizedStatus === "ok") { + return "border-green-500/30 bg-green-500/20 text-green-500"; + } + + if (normalizedStatus === "error" || normalizedStatus === "internal_error" || normalizedStatus === "cancelled") { + return "border-destructive/30 bg-destructive/20 text-destructive"; + } + + // Default/unknown status + return "border-muted-foreground/30 bg-muted text-muted-foreground"; +} + +/** + * TraceBadge displays contextual badges for trace visualization. + * Supports different variants for status, HTTP method, and environment. + */ +function TraceBadgeComponent({ variant, value, className }: TraceBadgeProps) { + if (!value) return null; + + const baseClasses = + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-medium transition-colors"; + + const variantClasses = { + status: getStatusClasses(value), + method: "border-transparent bg-muted text-foreground font-mono", + environment: "border-transparent bg-secondary text-secondary-foreground", + }; + + return ( + + {variant === "status" ? value.toUpperCase() : value} + + ); +} + +export const TraceBadge = memo(TraceBadgeComponent); + +/** + * StatusBadge is a convenience wrapper for status variant. + */ +export const StatusBadge = memo(function StatusBadge({ + status, + className, +}: { + status: string; + className?: string; +}) { + return ; +}); + +/** + * MethodBadge is a convenience wrapper for HTTP method variant. + */ +export const MethodBadge = memo(function MethodBadge({ + method, + className, +}: { + method: string; + className?: string; +}) { + return ; +}); + +/** + * EnvironmentBadge is a convenience wrapper for environment variant. + */ +export const EnvironmentBadge = memo(function EnvironmentBadge({ + environment, + className, +}: { + environment: string; + className?: string; +}) { + return ; +}); + +export default TraceBadge; diff --git a/packages/docs/registry/new-york/trace-item/trace-item.tsx b/packages/docs/registry/new-york/trace-item/trace-item.tsx new file mode 100644 index 00000000..2cad2d1e --- /dev/null +++ b/packages/docs/registry/new-york/trace-item/trace-item.tsx @@ -0,0 +1,127 @@ +"use client"; + +import { cn, truncateId } from "@/lib/utils"; +import { formatDuration } from "@/registry/new-york/trace-item/duration"; +import { TimeSince } from "@/registry/new-york/trace-item/time-since"; +import { EnvironmentBadge, MethodBadge, StatusBadge } from "@/registry/new-york/trace-item/trace-badge"; +import type { TraceItemProps } from "@/registry/new-york/trace-item/types"; +import { Activity, AlertCircle } from "lucide-react"; +import { memo, useCallback, useMemo } from "react"; + +/** + * TraceItem renders a summary row for a single distributed trace. + * It displays the trace ID, timing, status, and transaction name. + * + * Features: + * - Status icon (Activity for ok, AlertCircle for errors) + * - Truncated trace ID with relative timestamp + * - Transaction method and name display + * - Duration and span count stats + * - Optional environment badge + * + * @example + * ```tsx + * { + * setSelectedTraceId(id); + * console.log("Selected trace:", trace); + * }} + * /> + * ``` + * + * @example In a list + * ```tsx + *
    + * {traces.map((trace) => ( + * + * ))} + *
    + * ``` + */ +function TraceItemComponent({ trace, isSelected = false, onSelect, className }: TraceItemProps) { + const handleClick = useCallback(() => { + onSelect?.(trace.trace_id, trace); + }, [onSelect, trace]); + + const handleKeyDown = useCallback( + (e: React.KeyboardEvent) => { + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + onSelect?.(trace.trace_id, trace); + } + }, + [onSelect, trace], + ); + + const duration = useMemo( + () => formatDuration(trace.timestamp - trace.start_timestamp), + [trace.timestamp, trace.start_timestamp], + ); + const spanCount = trace.spans.size; + const hasError = trace.status && trace.status !== "ok"; + const truncatedId = truncateId(trace.trace_id); + + return ( +
    + {/* Status Icon */} + + + {/* Trace ID and Time */} +
    +
    + {truncatedId} + {trace.environment && } +
    + +
    + + {/* Transaction Name */} +
    +
    + {trace.rootTransactionMethod && } + + {trace.rootTransactionName} + +
    +
    + + {/* Stats */} +
    + {hasError ? : ok} + + {duration} + + {spanCount.toLocaleString()} spans +
    +
    + ); +} + +export const TraceItem = memo(TraceItemComponent); +export default TraceItem; diff --git a/packages/docs/registry/new-york/trace-item/types.ts b/packages/docs/registry/new-york/trace-item/types.ts new file mode 100644 index 00000000..0df9bec5 --- /dev/null +++ b/packages/docs/registry/new-york/trace-item/types.ts @@ -0,0 +1,102 @@ +/** + * Generic span interface compatible with OpenTelemetry trace data. + * This represents a single unit of work within a distributed trace. + */ +export interface SpanData { + /** Unique identifier for this span */ + span_id: string; + /** Trace ID this span belongs to */ + trace_id?: string; + /** Parent span ID, null for root spans */ + parent_span_id?: string | null; + /** Operation name (e.g., "http.request", "db.query") */ + op?: string | null; + /** Human-readable description of the span */ + description?: string | null; + /** Start time as Unix timestamp in milliseconds */ + start_timestamp: number; + /** End time as Unix timestamp in milliseconds */ + timestamp: number; + /** Span status ("ok", "error", or custom string) */ + status?: "ok" | "error" | string; + /** Child spans */ + children?: SpanData[]; + /** Additional span attributes/data */ + data?: Record; + /** Key-value tags for filtering and categorization */ + tags?: Record; +} + +/** + * Generic trace interface representing a complete distributed trace. + * Contains all spans and metadata for a single trace. + */ +export interface TraceData { + /** Unique trace identifier */ + trace_id: string; + /** Start time of the trace (earliest span start) */ + start_timestamp: number; + /** End time of the trace (latest span end) */ + timestamp: number; + /** Overall trace status */ + status?: "ok" | "error" | string; + /** Map of span_id to SpanData for quick lookups */ + spans: Map; + /** Hierarchical tree of spans with children populated */ + spanTree: SpanData[]; + /** Name of the root transaction/operation */ + rootTransactionName: string; + /** HTTP method if applicable (GET, POST, etc.) */ + rootTransactionMethod?: string; + /** Number of transactions in this trace */ + transactionCount?: number; + /** Total number of spans */ + spanCount?: number; + /** Platform identifier (e.g., "javascript", "python") */ + platform?: string; + /** Environment (e.g., "production", "development") */ + environment?: string; +} + +/** + * Props for the TraceItem component. + * Renders a summary row for a single trace. + */ +export interface TraceItemProps { + /** The trace data to render */ + trace: TraceData; + /** Whether this trace is currently selected */ + isSelected?: boolean; + /** Callback when trace is clicked */ + onSelect?: (traceId: string, trace: TraceData) => void; + /** Custom class name */ + className?: string; +} + +/** + * Props for the TimeSince component. + * Displays relative time (e.g., "2 minutes ago"). + */ +export interface TimeSinceProps extends React.HTMLAttributes { + /** The date/timestamp to show relative time for */ + date: string | number | Date; + /** How often to refresh the display in milliseconds (default: 5000) */ + refreshInterval?: number; +} + +/** + * Variant types for trace badges. + */ +export type TraceBadgeVariant = "status" | "method" | "environment"; + +/** + * Props for TraceBadge component. + */ +export interface TraceBadgeProps { + /** The badge variant */ + variant: TraceBadgeVariant; + /** The value to display */ + value: string; + /** Custom class name */ + className?: string; +} diff --git a/packages/docs/source.config.ts b/packages/docs/source.config.ts new file mode 100644 index 00000000..0a9078f3 --- /dev/null +++ b/packages/docs/source.config.ts @@ -0,0 +1,18 @@ +import { defineConfig, defineDocs, frontmatterSchema, metaSchema } from "fumadocs-mdx/config"; + +// You can customise Zod schemas for frontmatter and `meta.json` here +// see https://fumadocs.vercel.app/docs/mdx/collections#define-docs +export const docs = defineDocs({ + docs: { + schema: frontmatterSchema, + }, + meta: { + schema: metaSchema, + }, +}); + +export default defineConfig({ + mdxOptions: { + // MDX options + }, +}); diff --git a/packages/docs/src/app/(home)/layout.tsx b/packages/docs/src/app/(home)/layout.tsx new file mode 100644 index 00000000..d21adf63 --- /dev/null +++ b/packages/docs/src/app/(home)/layout.tsx @@ -0,0 +1,7 @@ +import { baseOptions } from "@/app/layout.config"; +import { HomeLayout } from "fumadocs-ui/layouts/home"; +import type { ReactNode } from "react"; + +export default function Layout({ children }: { children: ReactNode }) { + return {children}; +} diff --git a/packages/docs/src/app/(home)/page.tsx b/packages/docs/src/app/(home)/page.tsx new file mode 100644 index 00000000..67e0db91 --- /dev/null +++ b/packages/docs/src/app/(home)/page.tsx @@ -0,0 +1,96 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import { ArrowRight, Check, Copy } from "lucide-react"; +import Link from "next/link"; +import { useState } from "react"; + +function CopyButton({ text }: { text: string }) { + const [copied, setCopied] = useState(false); + + const handleCopy = async () => { + await navigator.clipboard.writeText(text); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + + return ( + + ); +} + +const installCommand = "pnpm dlx shadcn@latest add span-tree -r https://spotlightjs.com/registry.json"; + +export default function HomePage() { + return ( +
    + {/* Hero Section */} +
    +

    Spotlight UI

    +

    + Beautiful, customizable components for building observability and distributed tracing experiences. Built on + shadcn/ui. +

    + + {/* Install Command */} +
    + $ + {installCommand} + +
    + + {/* CTA Buttons */} +
    + + Get Started + + + + View Components + +
    +
    + + {/* Footer */} + +
    + ); +} diff --git a/packages/docs/src/app/docs/[[...slug]]/page.tsx b/packages/docs/src/app/docs/[[...slug]]/page.tsx new file mode 100644 index 00000000..9306e44c --- /dev/null +++ b/packages/docs/src/app/docs/[[...slug]]/page.tsx @@ -0,0 +1,66 @@ +import path from "node:path"; +import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card"; +import { source } from "@/lib/source"; +import { getMDXComponents } from "@/mdx-components"; +import Link from "fumadocs-core/link"; +import { DocsBody, DocsDescription, DocsPage, DocsTitle } from "fumadocs-ui/page"; +import { notFound } from "next/navigation"; + +export default async function Page(props: { + params: Promise<{ slug?: string[] }>; +}) { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + const MDXContent = page.data.body; + + return ( + + {page.data.title} + {page.data.description} + + { + const found = source.getPageByHref(href ?? "", { + dir: path.dirname(page.path), + }); + + if (!found) return ; + + return ( + + + + + +

    {found.page.data.title}

    +

    {found.page.data.description}

    +
    +
    + ); + }, + })} + /> +
    +
    + ); +} + +export async function generateStaticParams() { + return source.generateParams(); +} + +export async function generateMetadata(props: { + params: Promise<{ slug?: string[] }>; +}) { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + return { + title: page.data.title, + description: page.data.description, + }; +} diff --git a/packages/docs/src/app/docs/layout.tsx b/packages/docs/src/app/docs/layout.tsx new file mode 100644 index 00000000..0eb0f4e1 --- /dev/null +++ b/packages/docs/src/app/docs/layout.tsx @@ -0,0 +1,12 @@ +import { baseOptions } from "@/app/layout.config"; +import { source } from "@/lib/source"; +import { DocsLayout } from "fumadocs-ui/layouts/docs"; +import type { ReactNode } from "react"; + +export default function Layout({ children }: { children: ReactNode }) { + return ( + + {children} + + ); +} diff --git a/packages/docs/src/app/global.css b/packages/docs/src/app/global.css new file mode 100644 index 00000000..31b460ad --- /dev/null +++ b/packages/docs/src/app/global.css @@ -0,0 +1,167 @@ +@import "tailwindcss"; +@import "fumadocs-ui/css/neutral.css"; +@import "fumadocs-ui/css/preset.css"; +@import "tw-animate-css"; + +@custom-variant dark (&:is(.dark *)); + +@theme inline { + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --radius-2xl: calc(var(--radius) + 8px); + --radius-3xl: calc(var(--radius) + 12px); + --radius-4xl: calc(var(--radius) + 16px); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); +} + +:root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.141 0.005 285.823); + --card: oklch(1 0 0); + --card-foreground: oklch(0.141 0.005 285.823); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.141 0.005 285.823); + --primary: oklch(0.21 0.006 285.885); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.967 0.001 286.375); + --secondary-foreground: oklch(0.21 0.006 285.885); + --muted: oklch(0.967 0.001 286.375); + --muted-foreground: oklch(0.552 0.016 285.938); + --accent: oklch(0.967 0.001 286.375); + --accent-foreground: oklch(0.21 0.006 285.885); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.92 0.004 286.32); + --input: oklch(0.92 0.004 286.32); + --ring: oklch(0.705 0.015 286.067); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.141 0.005 285.823); + --sidebar-primary: oklch(0.21 0.006 285.885); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.967 0.001 286.375); + --sidebar-accent-foreground: oklch(0.21 0.006 285.885); + --sidebar-border: oklch(0.92 0.004 286.32); + --sidebar-ring: oklch(0.705 0.015 286.067); +} + +.dark { + --background: oklch(0.141 0.005 285.823); + --foreground: oklch(0.985 0 0); + --card: oklch(0.21 0.006 285.885); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.21 0.006 285.885); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.92 0.004 286.32); + --primary-foreground: oklch(0.21 0.006 285.885); + --secondary: oklch(0.274 0.006 286.033); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.274 0.006 286.033); + --muted-foreground: oklch(0.705 0.015 286.067); + --accent: oklch(0.274 0.006 286.033); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.552 0.016 285.938); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.21 0.006 285.885); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.274 0.006 286.033); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.552 0.016 285.938); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} + +/* SpanTree component styles */ +.span-tree { + list-style: none; + padding: 0; + margin: 0; + width: 100%; + overflow: hidden; +} + +.span-tree > li { + position: relative; + width: 100%; +} + +.span-tree.deep > li::before { + content: ""; + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 1px; + background: var(--border); +} + +.span-tree > li > .span-tree { + padding-left: 1rem; +} + +.span-tree .node { + position: relative; + padding: 0.25rem 0.5rem; + flex-shrink: 0; +} + +.span-tree .waterfall { + position: relative; + flex: 1; + min-width: 0; + height: 1.5rem; + overflow: hidden; +} diff --git a/packages/docs/src/app/layout.config.tsx b/packages/docs/src/app/layout.config.tsx new file mode 100644 index 00000000..11e1d4b4 --- /dev/null +++ b/packages/docs/src/app/layout.config.tsx @@ -0,0 +1,24 @@ +import Logo from "@/components/Logo"; +import type { BaseLayoutProps } from "fumadocs-ui/layouts/shared"; +import { FaDiscord, FaXTwitter } from "react-icons/fa6"; + +export const baseOptions: BaseLayoutProps = { + nav: { + title: , + }, + links: [ + { + type: "icon", + icon: , + text: "X", + url: "https://x.com/gaborcsapo", + }, + { + type: "icon", + icon: , + text: "Discord", + url: "https://discord.gg/sentry", + }, + ], + githubUrl: "https://github.com/getsentry/spotlight", +}; diff --git a/packages/docs/src/app/layout.tsx b/packages/docs/src/app/layout.tsx new file mode 100644 index 00000000..7acd1b7a --- /dev/null +++ b/packages/docs/src/app/layout.tsx @@ -0,0 +1,51 @@ +import "./global.css"; +import { RootProvider } from "fumadocs-ui/provider"; +import type { Metadata } from "next"; +import { Inter } from "next/font/google"; +import type { ReactNode } from "react"; + +const inter = Inter({ + subsets: ["latin"], +}); + +export function generateMetadata(): Metadata { + const title = { + template: "%s | Spotlight UI", + default: "Spotlight UI - Observability Components", + }; + const description = "Beautiful UI components for observability and distributed tracing. Built on shadcn/ui."; + + return { + title, + description, + keywords: ["observability", "tracing", "components", "react", "typescript", "shadcn", "spotlight"], + metadataBase: new URL("https://spotlightjs.com"), + category: "development", + twitter: { + card: "summary_large_image", + title, + description, + }, + openGraph: { + title, + description, + siteName: "Spotlight UI", + url: "/", + locale: "en_US", + type: "website", + }, + }; +} + +export default function Layout({ children }: { children: ReactNode }) { + return ( + + + + + + {children} + + + ); +} diff --git a/packages/docs/src/components/Logo.tsx b/packages/docs/src/components/Logo.tsx new file mode 100644 index 00000000..f2e6a92d --- /dev/null +++ b/packages/docs/src/components/Logo.tsx @@ -0,0 +1,28 @@ +import { cn } from "@/lib/utils"; + +interface LogoProps { + className?: string; +} + +export function Logo({ className }: LogoProps) { + return ( +
    + + Spotlight Logo + + + + + Spotlight UI +
    + ); +} + +export default Logo; diff --git a/packages/docs/src/components/demos/span-tree-demo.tsx b/packages/docs/src/components/demos/span-tree-demo.tsx new file mode 100644 index 00000000..11572a34 --- /dev/null +++ b/packages/docs/src/components/demos/span-tree-demo.tsx @@ -0,0 +1,163 @@ +"use client"; + +import { ComponentPreview } from "@/components/docs/component-preview"; +import { SpanTree } from "@/registry/new-york/span-tree/span-tree"; +import type { SpanData } from "@/registry/new-york/span-tree/types"; +import { useMemo, useState } from "react"; + +// Mock span data representing a typical web request +const mockSpans: SpanData[] = [ + { + span_id: "span-001", + trace_id: "trace-abc123", + op: "http.server", + description: "GET /api/users", + start_timestamp: 1700000000000, + timestamp: 1700000000450, + status: "ok", + children: [ + { + span_id: "span-002", + trace_id: "trace-abc123", + parent_span_id: "span-001", + op: "db.query", + description: "SELECT * FROM users WHERE active = true", + start_timestamp: 1700000000050, + timestamp: 1700000000200, + status: "ok", + children: [], + }, + { + span_id: "span-003", + trace_id: "trace-abc123", + parent_span_id: "span-001", + op: "cache.get", + description: "Redis GET user:settings", + start_timestamp: 1700000000210, + timestamp: 1700000000230, + status: "ok", + children: [], + }, + { + span_id: "span-004", + trace_id: "trace-abc123", + parent_span_id: "span-001", + op: "http.client", + description: "POST /internal/analytics", + start_timestamp: 1700000000240, + timestamp: 1700000000420, + status: "ok", + children: [ + { + span_id: "span-005", + trace_id: "trace-abc123", + parent_span_id: "span-004", + op: "serialize", + description: "JSON.stringify(payload)", + start_timestamp: 1700000000250, + timestamp: 1700000000260, + status: "ok", + children: [], + }, + ], + }, + ], + }, +]; + +const traceStartTimestamp = 1700000000000; +const traceDuration = 450; + +// IDs of database and cache spans to highlight +const dbSpanIds = new Set(["span-002", "span-003"]); + +const demoCode = `"use client"; + +import { SpanTree } from "@/components/ui/span-tree"; +import type { SpanData } from "@/components/ui/span-tree/types"; +import { useState } from "react"; + +const spans: SpanData[] = [ + { + span_id: "span-001", + op: "http.server", + description: "GET /api/users", + start_timestamp: 1700000000000, + timestamp: 1700000000450, + status: "ok", + children: [ + { + span_id: "span-002", + op: "db.query", + description: "SELECT * FROM users", + start_timestamp: 1700000000050, + timestamp: 1700000000200, + status: "ok", + }, + ], + }, +]; + +export function MyComponent() { + const [selectedSpanId, setSelectedSpanId] = useState(); + + return ( + setSelectedSpanId(spanId)} + /> + ); +}`; + +function SpanTreeDemoInner() { + const [selectedSpanId, setSelectedSpanId] = useState(); + const [highlightEnabled, setHighlightEnabled] = useState(false); + + const highlightedSpanIds = useMemo(() => (highlightEnabled ? dbSpanIds : undefined), [highlightEnabled]); + + return ( +
    +
    + +
    + + setSelectedSpanId(spanId)} + className="text-sm" + /> + + {selectedSpanId && ( +

    + Selected span: {selectedSpanId} +

    + )} +
    + ); +} + +/** Standalone demo component for use in MDX */ +export function SpanTreeDemo() { + return ( + + + + ); +} + +export default SpanTreeDemo; diff --git a/packages/docs/src/components/demos/trace-item-demo.tsx b/packages/docs/src/components/demos/trace-item-demo.tsx new file mode 100644 index 00000000..4e419fc1 --- /dev/null +++ b/packages/docs/src/components/demos/trace-item-demo.tsx @@ -0,0 +1,108 @@ +"use client"; + +import { ComponentPreview } from "@/components/docs/component-preview"; +import { TraceItem } from "@/registry/new-york/trace-item/trace-item"; +import type { TraceData } from "@/registry/new-york/trace-item/types"; +import { useState } from "react"; + +// Mock trace data +const mockTraces: TraceData[] = [ + { + trace_id: "abc123def456ghi789", + start_timestamp: Date.now() - 120000, + timestamp: Date.now() - 119550, + status: "ok", + spans: new Map(), + spanTree: [], + rootTransactionName: "/api/users", + rootTransactionMethod: "GET", + environment: "production", + }, + { + trace_id: "xyz789abc123def456", + start_timestamp: Date.now() - 300000, + timestamp: Date.now() - 298200, + status: "error", + spans: new Map(), + spanTree: [], + rootTransactionName: "/api/orders/checkout", + rootTransactionMethod: "POST", + environment: "production", + }, + { + trace_id: "qrs456tuv789wxy012", + start_timestamp: Date.now() - 60000, + timestamp: Date.now() - 59800, + status: "ok", + spans: new Map(), + spanTree: [], + rootTransactionName: "/health", + rootTransactionMethod: "GET", + environment: "staging", + }, +]; + +const demoCode = `"use client"; + +import { TraceItem } from "@/components/ui/trace-item"; +import type { TraceData } from "@/components/ui/trace-item/types"; +import { useState } from "react"; + +const traces: TraceData[] = [ + { + trace_id: "abc123def456", + start_timestamp: Date.now() - 120000, + timestamp: Date.now() - 119550, + status: "ok", + spans: new Map(), + spanTree: [], + rootTransactionName: "/api/users", + rootTransactionMethod: "GET", + environment: "production", + }, +]; + +export function MyComponent() { + const [selectedId, setSelectedId] = useState(); + + return ( +
    + {traces.map((trace) => ( + setSelectedId(traceId)} + /> + ))} +
    + ); +}`; + +function TraceItemDemoInner() { + const [selectedTraceId, setSelectedTraceId] = useState(); + + return ( +
    + {mockTraces.map(trace => ( + setSelectedTraceId(traceId)} + /> + ))} +
    + ); +} + +/** Standalone demo component for use in MDX */ +export function TraceItemDemo() { + return ( + + + + ); +} + +export default TraceItemDemo; diff --git a/packages/docs/src/components/docs/api-table.tsx b/packages/docs/src/components/docs/api-table.tsx new file mode 100644 index 00000000..1bc7e8e1 --- /dev/null +++ b/packages/docs/src/components/docs/api-table.tsx @@ -0,0 +1,56 @@ +import { cn } from "@/lib/utils"; + +interface PropDefinition { + name: string; + type: string; + default?: string; + description: string; + required?: boolean; +} + +interface APITableProps { + props: PropDefinition[]; + className?: string; +} + +export function APITable({ props, className }: APITableProps) { + return ( +
    + + + + + + + + + + + {props.map(prop => ( + + + + + + + ))} + +
    PropTypeDefaultDescription
    + + {prop.name} + {prop.required && *} + + + {prop.type} + + {prop.default ? ( + {prop.default} + ) : ( + - + )} + {prop.description}
    +
    + ); +} + +export default APITable; diff --git a/packages/docs/src/components/docs/component-preview.tsx b/packages/docs/src/components/docs/component-preview.tsx new file mode 100644 index 00000000..acd2ea3a --- /dev/null +++ b/packages/docs/src/components/docs/component-preview.tsx @@ -0,0 +1,65 @@ +"use client"; + +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { cn } from "@/lib/utils"; +import { DynamicCodeBlock } from "fumadocs-ui/components/dynamic-codeblock"; + +interface ComponentPreviewProps { + children: React.ReactNode; + code?: string; + className?: string; +} + +export function ComponentPreview({ children, code, className }: ComponentPreviewProps) { + if (!code) { + // If no code provided, just render the preview + return ( +
    + {children} +
    + ); + } + + return ( + + + + Preview + + + Code + + + + +
    + {children} +
    +
    + + + + +
    + ); +} + +export default ComponentPreview; diff --git a/packages/docs/src/components/docs/installation-tabs.tsx b/packages/docs/src/components/docs/installation-tabs.tsx new file mode 100644 index 00000000..0bd69113 --- /dev/null +++ b/packages/docs/src/components/docs/installation-tabs.tsx @@ -0,0 +1,138 @@ +"use client"; + +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { DynamicCodeBlock } from "fumadocs-ui/components/dynamic-codeblock"; +import { useMemo } from "react"; +import registryData from "../../../registry.json"; + +// Transform registry.json into component metadata lookup +type ComponentMetadata = { + title: string; + description: string; + files: { path: string; type: string }[]; + dependencies: string[]; +}; + +function getComponentMetadata(componentName: string): ComponentMetadata | null { + const item = registryData.items.find(item => item.name === componentName); + if (!item) return null; + + return { + title: item.title, + description: item.description, + files: item.files.map(f => ({ + // Convert registry paths to user-facing paths + path: f.path.replace("registry/new-york/", "components/ui/"), + type: f.type.replace("registry:", ""), + })), + dependencies: item.dependencies || [], + }; +} + +interface InstallationTabsProps { + component: string; + registryUrl?: string; +} + +function PackageManagerTabs({ component, registryUrl }: { component: string; registryUrl: string }) { + const commands = useMemo( + () => ({ + pnpm: `pnpm dlx shadcn@latest add ${component} -r ${registryUrl}`, + npm: `npx shadcn@latest add ${component} -r ${registryUrl}`, + yarn: `npx shadcn@latest add ${component} -r ${registryUrl}`, + bun: `bunx shadcn@latest add ${component} -r ${registryUrl}`, + }), + [component, registryUrl], + ); + + return ( + + + {Object.keys(commands).map(pm => ( + + {pm} + + ))} + + {Object.entries(commands).map(([pm, cmd]) => ( + + + + ))} + + ); +} + +function ManualInstallation({ component }: { component: string }) { + const metadata = getComponentMetadata(component); + if (!metadata) { + return

    Component "{component}" not found in registry.

    ; + } + + const dependencyCommand = metadata.dependencies.length > 0 ? `pnpm add ${metadata.dependencies.join(" ")}` : null; + + return ( +
    + {dependencyCommand && ( +
    +

    1. Install dependencies

    + +
    + )} + +
    +

    + {dependencyCommand ? "2. Copy the component files" : "1. Copy the component files"} +

    +

    Copy the following files to your project:

    +
    +
      + {metadata.files.map(file => ( +
    • + + {file.path} +
    • + ))} +
    +
    +
    + +
    +

    {dependencyCommand ? "3. Update imports" : "2. Update imports"}

    +

    + Update the import paths in the copied files to match your project structure. Make sure you have a{" "} + cn utility function at{" "} + @/lib/utils. +

    +
    +
    + ); +} + +export function InstallationTabs({ + component, + registryUrl = "https://spotlightjs.com/registry.json", +}: InstallationTabsProps) { + return ( + + + CLI + Manual + + + + + + + + + + + ); +} + +export default InstallationTabs; diff --git a/packages/docs/src/components/ui/hover-card.tsx b/packages/docs/src/components/ui/hover-card.tsx new file mode 100644 index 00000000..ee08aee7 --- /dev/null +++ b/packages/docs/src/components/ui/hover-card.tsx @@ -0,0 +1,31 @@ +"use client"; + +import * as HoverCardPrimitive from "@radix-ui/react-hover-card"; +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const HoverCard = HoverCardPrimitive.Root; + +const HoverCardTrigger = HoverCardPrimitive.Trigger; + +const HoverCardContent = React.forwardRef< + React.ComponentRef, + React.ComponentPropsWithoutRef +>(({ className, align = "center", sideOffset = 4, ...props }, ref) => ( + + + +)); +HoverCardContent.displayName = HoverCardPrimitive.Content.displayName; + +export { HoverCard, HoverCardTrigger, HoverCardContent }; diff --git a/packages/docs/src/components/ui/tabs.tsx b/packages/docs/src/components/ui/tabs.tsx new file mode 100644 index 00000000..f2bc9849 --- /dev/null +++ b/packages/docs/src/components/ui/tabs.tsx @@ -0,0 +1,55 @@ +"use client"; + +import * as TabsPrimitive from "@radix-ui/react-tabs"; +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const Tabs = TabsPrimitive.Root; + +const TabsList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsList.displayName = TabsPrimitive.List.displayName; + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName; + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsContent.displayName = TabsPrimitive.Content.displayName; + +export { Tabs, TabsList, TabsTrigger, TabsContent }; diff --git a/packages/docs/src/lib/source.ts b/packages/docs/src/lib/source.ts new file mode 100644 index 00000000..a307bc49 --- /dev/null +++ b/packages/docs/src/lib/source.ts @@ -0,0 +1,14 @@ +import { docs } from "@/.source"; +import { loader } from "fumadocs-core/source"; +import { icons } from "lucide-react"; +import { createElement } from "react"; + +// See https://fumadocs.vercel.app/docs/headless/source-api for more info +export const source = loader({ + // it assigns a URL to your pages + baseUrl: "/docs", + source: docs.toFumadocsSource(), + icon(icon) { + if (icon && icon in icons) return createElement(icons[icon as keyof typeof icons]); + }, +}); diff --git a/packages/docs/src/lib/utils.ts b/packages/docs/src/lib/utils.ts new file mode 100644 index 00000000..8d4a644a --- /dev/null +++ b/packages/docs/src/lib/utils.ts @@ -0,0 +1,33 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +/** + * Utility function to merge Tailwind CSS classes with conditional support. + * Combines clsx for conditional classes and tailwind-merge for deduplication. + * + * @param inputs - Class values to merge (strings, objects, arrays) + * @returns Merged class string + * + * @example + * cn("px-4 py-2", isActive && "bg-primary", "hover:bg-muted") + * // Returns: "px-4 py-2 bg-primary hover:bg-muted" (if isActive is true) + */ +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} + +/** + * Truncates an ID string to a specified length. + * Useful for displaying shortened trace/span IDs. + * + * @param id - The ID string to truncate + * @param length - Maximum length (default: 8) + * @returns Truncated ID string + * + * @example + * truncateId("abc123def456ghi789") // "abc123de" + * truncateId("abc123def456ghi789", 4) // "abc1" + */ +export function truncateId(id = "", length = 8): string { + return id.substring(0, length); +} diff --git a/packages/docs/src/mdx-components.tsx b/packages/docs/src/mdx-components.tsx new file mode 100644 index 00000000..9d23d9eb --- /dev/null +++ b/packages/docs/src/mdx-components.tsx @@ -0,0 +1,37 @@ +// import { createGenerator } from "fumadocs-typescript"; +// import { AutoTypeTable } from "fumadocs-typescript/ui"; +import { ImageZoom } from "fumadocs-ui/components/image-zoom"; +import * as TabsComponents from "fumadocs-ui/components/tabs"; +import defaultMdxComponents from "fumadocs-ui/mdx"; +import * as icons from "lucide-react"; +import type { MDXComponents } from "mdx/types"; + +import { APITable } from "@/components/docs/api-table"; +import { ComponentPreview } from "@/components/docs/component-preview"; +// Documentation components +import { InstallationTabs } from "@/components/docs/installation-tabs"; + +// Demo components (these include ComponentPreview internally) +import { SpanTreeDemo } from "@/components/demos/span-tree-demo"; +import { TraceItemDemo } from "@/components/demos/trace-item-demo"; + +// const generator = createGenerator(); + +// use this function to get MDX components, you will need it for rendering MDX +export function getMDXComponents(components?: MDXComponents): MDXComponents { + return { + ...(icons as unknown as MDXComponents), + ...defaultMdxComponents, + ...TabsComponents, + img: props => , + // AutoTypeTable: props => , + // Documentation components + InstallationTabs, + ComponentPreview, + APITable, + // Demo components + SpanTreeDemo, + TraceItemDemo, + ...components, + }; +} diff --git a/packages/docs/tsconfig.json b/packages/docs/tsconfig.json new file mode 100644 index 00000000..eeeb1922 --- /dev/null +++ b/packages/docs/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "ESNext", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "paths": { + "@/.source": ["./.source/index.ts"], + "@/*": ["./src/*"], + "@/registry/*": ["./registry/*"], + "@/lib/*": ["./src/lib/*"] + }, + "plugins": [ + { + "name": "next" + } + ] + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/spotlight/package.json b/packages/spotlight/package.json index 90ab3be4..3a2b1d58 100644 --- a/packages/spotlight/package.json +++ b/packages/spotlight/package.json @@ -32,9 +32,7 @@ "test:e2e:electron": "playwright test tests/electron.test.ts", "sample": "node ./_fixtures/send_to_sidecar.cjs" }, - "files": [ - "dist" - ], + "files": ["dist"], "bin": { "spotlight": "./dist/run.js" }, diff --git a/packages/spotlight/src/sentry-config.ts b/packages/spotlight/src/sentry-config.ts index 7f2db93c..f9c07863 100644 --- a/packages/spotlight/src/sentry-config.ts +++ b/packages/spotlight/src/sentry-config.ts @@ -3,8 +3,7 @@ const isCI = process.env.CI === "true" || process.env.GITHUB_ACTIONS === "true"; // Use build-time injected version for fossilized binaries, fallback to env var for npm/npx runs declare const __SPOTLIGHT_VERSION__: string | undefined; -const version = - typeof __SPOTLIGHT_VERSION__ !== "undefined" ? __SPOTLIGHT_VERSION__ : process.env.npm_package_version; +const version = typeof __SPOTLIGHT_VERSION__ !== "undefined" ? __SPOTLIGHT_VERSION__ : process.env.npm_package_version; export const sentryBaseConfig = { enabled: Boolean(process.env.NODE_ENV) && process.env.NODE_ENV !== "development", diff --git a/packages/spotlight/src/server/cli/server.ts b/packages/spotlight/src/server/cli/server.ts index b6736dba..1bfb92e6 100644 --- a/packages/spotlight/src/server/cli/server.ts +++ b/packages/spotlight/src/server/cli/server.ts @@ -1,6 +1,6 @@ import type { AddressInfo } from "node:net"; -import { PortInUseError, setupSpotlight } from "../main.ts"; import { logger } from "../logger.ts"; +import { PortInUseError, setupSpotlight } from "../main.ts"; import type { CLIHandlerOptions, Command, CommandMeta } from "../types/cli.ts"; import { openInBrowser } from "../utils/extras.ts"; diff --git a/packages/spotlight/src/ui/telemetry/components/insights/webVitals/WebVitalsDetail.tsx b/packages/spotlight/src/ui/telemetry/components/insights/webVitals/WebVitalsDetail.tsx index 230f5c7c..a6a6b8f0 100644 --- a/packages/spotlight/src/ui/telemetry/components/insights/webVitals/WebVitalsDetail.tsx +++ b/packages/spotlight/src/ui/telemetry/components/insights/webVitals/WebVitalsDetail.tsx @@ -14,7 +14,7 @@ import PerformanceChart from "./PerformanceChart"; const WebVitalsDetail = () => { const events = useSentryEvents(); const { page } = useParams(); - + let measurementEvent: SentryEventWithPerformanceData | undefined; for (const event of events) { if (event.event_id === page && event.measurements && event?.contexts?.trace?.op === "pageload") { diff --git a/packages/spotlight/vite.electron.config.ts b/packages/spotlight/vite.electron.config.ts index da02153d..11689c2c 100644 --- a/packages/spotlight/vite.electron.config.ts +++ b/packages/spotlight/vite.electron.config.ts @@ -2,13 +2,7 @@ import { sentryVitePlugin } from "@sentry/vite-plugin"; import sourcemaps from "rollup-plugin-sourcemaps2"; import { defineConfig } from "vite"; import electron from "vite-plugin-electron/simple"; -import { - aliases, - defineDevelopment, - defineProduction, - reactPlugins, - sentryPluginOptions, -} from "./vite.config.base"; +import { aliases, defineDevelopment, defineProduction, reactPlugins, sentryPluginOptions } from "./vite.config.base"; export default defineConfig(({ mode }) => { const isDev = mode === "development"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba4c16cf..a99f60f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -89,6 +89,94 @@ importers: specifier: 'catalog:' version: 5.9.2 + packages/docs: + dependencies: + '@radix-ui/react-hover-card': + specifier: ^1.1.14 + version: 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-tabs': + specifier: ^1.1.12 + version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + dayjs: + specifier: ^1.11.13 + version: 1.11.13 + fumadocs-core: + specifier: 15.6.1 + version: 15.6.1(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + fumadocs-mdx: + specifier: 11.6.10 + version: 11.6.10(fumadocs-core@15.6.1(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@6.4.1(@types/node@24.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)) + fumadocs-typescript: + specifier: ^4.0.6 + version: 4.0.14(@types/react@19.2.9)(fumadocs-core@15.6.1(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(fumadocs-ui@15.6.1(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18))(typescript@5.9.3) + fumadocs-ui: + specifier: 15.6.1 + version: 15.6.1(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18) + lucide-react: + specifier: ^0.525.0 + version: 0.525.0(react@19.2.3) + next: + specifier: ^15.4.8 + version: 15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: + specifier: ^19.2.3 + version: 19.2.3 + react-dom: + specifier: ^19.2.3 + version: 19.2.3(react@19.2.3) + react-icons: + specifier: ^5.5.0 + version: 5.5.0(react@19.2.3) + shiki: + specifier: ^3.7.0 + version: 3.21.0 + ts-morph: + specifier: ^26.0.0 + version: 26.0.0 + devDependencies: + '@biomejs/biome': + specifier: ^2.0.6 + version: 2.3.13 + '@tailwindcss/postcss': + specifier: ^4.1.11 + version: 4.1.18 + '@types/mdx': + specifier: ^2.0.13 + version: 2.0.13 + '@types/node': + specifier: 24.0.7 + version: 24.0.7 + '@types/react': + specifier: ^19.2.7 + version: 19.2.9 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.9) + postcss: + specifier: ^8.5.6 + version: 8.5.6 + shadcn: + specifier: ^2.5.0 + version: 2.10.0(@types/node@24.0.7)(typescript@5.9.3) + tailwind-merge: + specifier: ^3.4.0 + version: 3.4.0 + tailwindcss: + specifier: ^4.1.11 + version: 4.1.18 + tw-animate-css: + specifier: ^1.4.0 + version: 1.4.0 + typescript: + specifier: ^5.8.3 + version: 5.9.3 + packages/spotlight: dependencies: '@hono/mcp': @@ -184,7 +272,7 @@ importers: version: 3.13.0 '@tailwindcss/vite': specifier: 'catalog:' - version: 4.1.11(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1)) + version: 4.1.11(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1)) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 @@ -217,10 +305,10 @@ importers: version: 6.21.0(eslint@8.57.1)(typescript@5.9.2) '@vitejs/plugin-react': specifier: ^4.3.2 - version: 4.4.1(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1)) + version: 4.4.1(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1)) '@vitest/coverage-v8': specifier: ^0.34.6 - version: 0.34.6(vitest@0.34.6(happy-dom@20.0.2)(lightningcss@1.30.1)(playwright@1.56.1)(terser@5.43.1)) + version: 0.34.6(vitest@0.34.6(happy-dom@20.0.2)(jsdom@26.1.0)(lightningcss@1.30.2)(playwright@1.56.1)(terser@5.43.1)) autoprefixer: specifier: ^10.4.20 version: 10.4.21(postcss@8.5.6) @@ -322,19 +410,19 @@ importers: version: 2.16.0(react@18.3.1) vite: specifier: 'catalog:' - version: 5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1) + version: 5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1) vite-plugin-dts: specifier: ^4.5.4 - version: 4.5.4(@types/node@22.15.28)(rollup@4.53.3)(typescript@5.9.2)(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1)) + version: 4.5.4(@types/node@22.15.28)(rollup@4.53.3)(typescript@5.9.2)(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1)) vite-plugin-electron: specifier: ^0.29.0 version: 0.29.0 vite-plugin-svgr: specifier: ^3.3.0 - version: 3.3.0(rollup@4.53.3)(typescript@5.9.2)(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1)) + version: 3.3.0(rollup@4.53.3)(typescript@5.9.2)(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1)) vitest: specifier: 'catalog:' - version: 0.34.6(happy-dom@20.0.2)(lightningcss@1.30.1)(playwright@1.56.1)(terser@5.43.1) + version: 0.34.6(happy-dom@20.0.2)(jsdom@26.1.0)(lightningcss@1.30.2)(playwright@1.56.1)(terser@5.43.1) zustand: specifier: ^5.0.3 version: 5.0.3(@types/react@18.3.20)(react@18.3.1) @@ -343,25 +431,25 @@ importers: dependencies: '@astrojs/react': specifier: ^4.2.0 - version: 4.2.7(@types/node@24.10.1)(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(jiti@2.4.2)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) + version: 4.2.7(@types/node@25.0.10)(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) '@astrojs/starlight': specifier: ^0.32.4 - version: 0.32.6(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)) + version: 0.32.6(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)) '@astrojs/starlight-tailwind': specifier: ^3.0.1 - version: 3.0.1(@astrojs/starlight@0.32.6(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)))(@astrojs/tailwind@6.0.2(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(tailwindcss@4.1.11))(tailwindcss@4.1.11) + version: 3.0.1(@astrojs/starlight@0.32.6(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)))(@astrojs/tailwind@6.0.2(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(tailwindcss@4.1.11))(tailwindcss@4.1.11) '@astrojs/vercel': specifier: ^8.0.8 - version: 8.1.4(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(react@18.3.1)(rollup@4.53.3)(svelte@4.2.19) + version: 8.1.4(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(next@15.5.9(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.53.3)(svelte@4.2.19) '@fontsource/raleway': specifier: 'catalog:' version: 5.2.5 '@sentry/astro': specifier: 'catalog:' - version: 10.32.1(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)) + version: 10.32.1(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)) '@tailwindcss/vite': specifier: 'catalog:' - version: 4.1.11(vite@6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)) + version: 4.1.11(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)) '@types/react': specifier: 'catalog:' version: 18.3.20 @@ -370,10 +458,10 @@ importers: version: 18.3.7(@types/react@18.3.20) '@vercel/analytics': specifier: ^1.6.1 - version: 1.6.1(react@18.3.1)(svelte@4.2.19) + version: 1.6.1(next@15.5.9(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(svelte@4.2.19) astro: specifier: ^5.15.9 - version: 5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) + version: 5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) react: specifier: 'catalog:' version: 18.3.1 @@ -401,7 +489,7 @@ importers: version: 5.9.2 vite-plugin-inspect: specifier: ^0.7.42 - version: 0.7.42(rollup@4.53.3)(vite@6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)) + version: 0.7.42(rollup@4.53.3)(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)) packages: @@ -411,10 +499,18 @@ packages: '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@antfu/ni@23.3.1': + resolution: {integrity: sha512-C90iyzm/jLV7Lomv2UzwWUzRv9WZr1oRsFRKsX5HjQL4EXrbi9H/RtBkjCP+NF+ABZXUKpAa4F1dkoTaea4zHg==} + hasBin: true + '@antfu/utils@0.7.10': resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} @@ -424,6 +520,9 @@ packages: '@apm-js-collab/tracing-hooks@0.3.1': resolution: {integrity: sha512-Vu1CbmPURlN5fTboVuKMoJjbO5qcq9fA5YXpskx3dXe/zTBvjODFoerw+69rVBlRLrJpwPqSDqEuJDEKIrTldw==} + '@asamuzakjp/css-color@3.2.0': + resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} + '@astrojs/compiler@2.13.0': resolution: {integrity: sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==} @@ -503,32 +602,94 @@ packages: resolution: {integrity: sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.28.6': + resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.27.1': resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} engines: {node: '>=6.9.0'} + '@babel/core@7.28.6': + resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.27.1': resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} engines: {node: '>=6.9.0'} + '@babel/generator@7.28.6': + resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.27.1': resolution: {integrity: sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.28.6': + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.27.1': resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.27.1': resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.27.1': resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -549,6 +710,10 @@ packages: resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.28.4': resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} @@ -559,6 +724,17 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.6': + resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-typescript@7.28.6': + resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.27.1': resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} @@ -571,6 +747,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@7.28.6': + resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.27.1': resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} engines: {node: '>=6.9.0'} @@ -583,10 +765,18 @@ packages: resolution: {integrity: sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg==} engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.27.1': resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.28.6': + resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} + engines: {node: '>=6.9.0'} + '@babel/types@7.28.4': resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} @@ -595,6 +785,10 @@ packages: resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.6': + resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -603,58 +797,139 @@ packages: engines: {node: '>=14.21.3'} hasBin: true + '@biomejs/biome@2.3.13': + resolution: {integrity: sha512-Fw7UsV0UAtWIBIm0M7g5CRerpu1eKyKAXIazzxhbXYUyMkwNrkX/KLkGI7b+uVDQ5cLUMfOC9vR60q9IDYDstA==} + engines: {node: '>=14.21.3'} + hasBin: true + '@biomejs/cli-darwin-arm64@1.9.4': resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] + '@biomejs/cli-darwin-arm64@2.3.13': + resolution: {integrity: sha512-0OCwP0/BoKzyJHnFdaTk/i7hIP9JHH9oJJq6hrSCPmJPo8JWcJhprK4gQlhFzrwdTBAW4Bjt/RmCf3ZZe59gwQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + '@biomejs/cli-darwin-x64@1.9.4': resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] + '@biomejs/cli-darwin-x64@2.3.13': + resolution: {integrity: sha512-AGr8OoemT/ejynbIu56qeil2+F2WLkIjn2d8jGK1JkchxnMUhYOfnqc9sVzcRxpG9Ycvw4weQ5sprRvtb7Yhcw==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + '@biomejs/cli-linux-arm64-musl@1.9.4': resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + '@biomejs/cli-linux-arm64-musl@2.3.13': + resolution: {integrity: sha512-TUdDCSY+Eo/EHjhJz7P2GnWwfqet+lFxBZzGHldrvULr59AgahamLs/N85SC4+bdF86EhqDuuw9rYLvLFWWlXA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + '@biomejs/cli-linux-arm64@1.9.4': resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + '@biomejs/cli-linux-arm64@2.3.13': + resolution: {integrity: sha512-xvOiFkrDNu607MPMBUQ6huHmBG1PZLOrqhtK6pXJW3GjfVqJg0Z/qpTdhXfcqWdSZHcT+Nct2fOgewZvytESkw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + '@biomejs/cli-linux-x64-musl@1.9.4': resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + '@biomejs/cli-linux-x64-musl@2.3.13': + resolution: {integrity: sha512-0bdwFVSbbM//Sds6OjtnmQGp4eUjOTt6kHvR/1P0ieR9GcTUAlPNvPC3DiavTqq302W34Ae2T6u5VVNGuQtGlQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + '@biomejs/cli-linux-x64@1.9.4': resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + '@biomejs/cli-linux-x64@2.3.13': + resolution: {integrity: sha512-s+YsZlgiXNq8XkgHs6xdvKDFOj/bwTEevqEY6rC2I3cBHbxXYU1LOZstH3Ffw9hE5tE1sqT7U23C00MzkXztMw==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + '@biomejs/cli-win32-arm64@1.9.4': resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] + '@biomejs/cli-win32-arm64@2.3.13': + resolution: {integrity: sha512-QweDxY89fq0VvrxME+wS/BXKmqMrOTZlN9SqQ79kQSIc3FrEwvW/PvUegQF6XIVaekncDykB5dzPqjbwSKs9DA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + '@biomejs/cli-win32-x64@1.9.4': resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] + '@biomejs/cli-win32-x64@2.3.13': + resolution: {integrity: sha512-trDw2ogdM2lyav9WFQsdsfdVy1dvZALymRpgmWsvSez0BJzBjulhOT/t+wyKeh3pZWvwP3VMs1SoOKwO3wecMQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@capsizecss/unpack@3.0.1': resolution: {integrity: sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg==} engines: {node: '>=18'} + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + '@ctrl/tinycolor@4.1.0': resolution: {integrity: sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==} engines: {node: '>=14'} @@ -1385,6 +1660,9 @@ packages: '@fontsource/raleway@5.2.5': resolution: {integrity: sha512-gVFV8Yi8Y5h8sQw0U/F6TQID53DVIWPuRxqBLOBxwLbQma42JAwqTZ+pi3eDjpm20/rjS2XoVJH5hnMx1KFB+g==} + '@formatjs/intl-localematcher@0.6.2': + resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} + '@hono/mcp@0.2.2': resolution: {integrity: sha512-h1yHXsv08OWT8bXyIOoZVXw0qU1UmSDwm014fPnFXiyeS9iMMHftn907wNXTh07IorlGqPbZArev4nBz9Q3oKQ==} peerDependencies: @@ -1660,6 +1938,49 @@ packages: cpu: [x64] os: [win32] + '@inquirer/ansi@1.0.2': + resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} + engines: {node: '>=18'} + + '@inquirer/confirm@5.1.21': + resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.3.2': + resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} + + '@inquirer/type@3.0.10': + resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1679,6 +2000,9 @@ packages: '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -1738,6 +2062,61 @@ packages: '@cfworker/json-schema': optional: true + '@mswjs/interceptors@0.40.0': + resolution: {integrity: sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==} + engines: {node: '>=18'} + + '@next/env@15.5.9': + resolution: {integrity: sha512-4GlTZ+EJM7WaW2HEZcyU317tIQDjkQIyENDLxYJfSWlfqguN+dHkZgyQTV/7ykvobU7yEH5gKvreNrH4B6QgIg==} + + '@next/swc-darwin-arm64@15.5.7': + resolution: {integrity: sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.5.7': + resolution: {integrity: sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@15.5.7': + resolution: {integrity: sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@15.5.7': + resolution: {integrity: sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@15.5.7': + resolution: {integrity: sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@15.5.7': + resolution: {integrity: sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@15.5.7': + resolution: {integrity: sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.5.7': + resolution: {integrity: sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1753,6 +2132,15 @@ packages: '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} + '@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.208.0': resolution: {integrity: sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==} engines: {node: '>=8.0.0'} @@ -1937,6 +2325,10 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 + '@orama/orama@3.1.18': + resolution: {integrity: sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==} + engines: {node: '>= 20.0.0'} + '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} @@ -1985,9 +2377,28 @@ packages: peerDependencies: '@opentelemetry/api': ^1.8 + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + '@radix-ui/primitive@1.1.2': resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-accordion@1.2.12': + resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-arrow@1.1.7': resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: @@ -2001,6 +2412,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-collapsible@1.1.12': + resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-collection@1.1.7': resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: @@ -2032,6 +2456,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-direction@1.1.1': resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} peerDependencies: @@ -2054,6 +2491,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-dropdown-menu@2.1.15': resolution: {integrity: sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==} peerDependencies: @@ -2076,6 +2526,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-focus-scope@1.1.7': resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} peerDependencies: @@ -2089,17 +2548,121 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + '@radix-ui/react-hover-card@1.1.15': + resolution: {integrity: sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-menu@2.1.15': + resolution: {integrity: sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-navigation-menu@1.2.14': + resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.7': + resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.4': + resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true - '@radix-ui/react-menu@2.1.15': - resolution: {integrity: sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==} + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2111,8 +2674,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-popper@1.2.7': - resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==} + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2124,8 +2687,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-portal@1.1.9': - resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + '@radix-ui/react-roving-focus@1.1.10': + resolution: {integrity: sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2137,8 +2700,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.1.4': - resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2150,8 +2713,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + '@radix-ui/react-scroll-area@1.2.10': + resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -2163,27 +2726,36 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-roving-focus@1.1.10': - resolution: {integrity: sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==} + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} peerDependencies: '@types/react': '*' - '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true - '@types/react-dom': + + '@radix-ui/react-slot@1.2.4': + resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': optional: true - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true + '@types/react-dom': + optional: true '@radix-ui/react-tooltip@1.2.7': resolution: {integrity: sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==} @@ -2243,6 +2815,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-rect@1.1.1': resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} peerDependencies: @@ -2281,6 +2862,9 @@ packages: resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==} engines: {node: '>=14.0.0'} + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} + '@rollup/pluginutils@5.1.2': resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} engines: {node: '>=14.0.0'} @@ -2688,8 +3272,8 @@ packages: '@shikijs/core@3.13.0': resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==} - '@shikijs/core@3.15.0': - resolution: {integrity: sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg==} + '@shikijs/core@3.21.0': + resolution: {integrity: sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA==} '@shikijs/engine-javascript@1.29.2': resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} @@ -2697,8 +3281,8 @@ packages: '@shikijs/engine-javascript@3.13.0': resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==} - '@shikijs/engine-javascript@3.15.0': - resolution: {integrity: sha512-ZedbOFpopibdLmvTz2sJPJgns8Xvyabe2QbmqMTz07kt1pTzfEvKZc5IqPVO/XFiEbbNyaOpjPBkkr1vlwS+qg==} + '@shikijs/engine-javascript@3.21.0': + resolution: {integrity: sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ==} '@shikijs/engine-oniguruma@1.29.2': resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} @@ -2706,8 +3290,8 @@ packages: '@shikijs/engine-oniguruma@3.13.0': resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==} - '@shikijs/engine-oniguruma@3.15.0': - resolution: {integrity: sha512-HnqFsV11skAHvOArMZdLBZZApRSYS4LSztk2K3016Y9VCyZISnlYUYsL2hzlS7tPqKHvNqmI5JSUJZprXloMvA==} + '@shikijs/engine-oniguruma@3.21.0': + resolution: {integrity: sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==} '@shikijs/langs@1.29.2': resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} @@ -2715,8 +3299,11 @@ packages: '@shikijs/langs@3.13.0': resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==} - '@shikijs/langs@3.15.0': - resolution: {integrity: sha512-WpRvEFvkVvO65uKYW4Rzxs+IG0gToyM8SARQMtGGsH4GDMNZrr60qdggXrFOsdfOVssG/QQGEl3FnJ3EZ+8w8A==} + '@shikijs/langs@3.21.0': + resolution: {integrity: sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==} + + '@shikijs/rehype@3.21.0': + resolution: {integrity: sha512-fTQvwsZL67QdosMFdTgQ5SNjW3nxaPplRy//312hqOctRbIwviTV0nAbhv3NfnztHXvFli2zLYNKsTz/f9tbpQ==} '@shikijs/themes@1.29.2': resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} @@ -2724,20 +3311,23 @@ packages: '@shikijs/themes@3.13.0': resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==} - '@shikijs/themes@3.15.0': - resolution: {integrity: sha512-8ow2zWb1IDvCKjYb0KiLNrK4offFdkfNVPXb1OZykpLCzRU6j+efkY+Y7VQjNlNFXonSw+4AOdGYtmqykDbRiQ==} + '@shikijs/themes@3.21.0': + resolution: {integrity: sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==} '@shikijs/transformers@3.13.0': resolution: {integrity: sha512-833lcuVzcRiG+fXvgslWsM2f4gHpjEgui1ipIknSizRuTgMkNZupiXE5/TVJ6eSYfhNBFhBZKkReKWO2GgYmqA==} + '@shikijs/transformers@3.21.0': + resolution: {integrity: sha512-CZwvCWWIiRRiFk9/JKzdEooakAP8mQDtBOQ1TKiCaS2E1bYtyBCOkUzS8akO34/7ufICQ29oeSfkb3tT5KtrhA==} + '@shikijs/types@1.29.2': resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} '@shikijs/types@3.13.0': resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==} - '@shikijs/types@3.15.0': - resolution: {integrity: sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw==} + '@shikijs/types@3.21.0': + resolution: {integrity: sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -2749,6 +3339,9 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@stricli/auto-complete@1.1.1': resolution: {integrity: sha512-UGXVgdfaanfJIw5Wtv3fvZjfLTDBNcYuy3VSSSMt8RznJ9YOgK0uFZyQig4tCr2DENb1dVIGMdDAAi3f9oTLcg==} hasBin: true @@ -2824,6 +3417,9 @@ packages: peerDependencies: '@svgr/core': '*' + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} @@ -2834,60 +3430,117 @@ packages: '@tailwindcss/node@4.1.11': resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} + '@tailwindcss/node@4.1.18': + resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} + '@tailwindcss/oxide-android-arm64@4.1.11': resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} engines: {node: '>= 10'} cpu: [arm64] os: [android] + '@tailwindcss/oxide-android-arm64@4.1.18': + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + '@tailwindcss/oxide-darwin-arm64@4.1.11': resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] + '@tailwindcss/oxide-darwin-arm64@4.1.18': + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + '@tailwindcss/oxide-darwin-x64@4.1.11': resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] + '@tailwindcss/oxide-darwin-x64@4.1.18': + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + '@tailwindcss/oxide-freebsd-x64@4.1.11': resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] + '@tailwindcss/oxide-freebsd-x64@4.1.18': + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@tailwindcss/oxide-linux-x64-musl@4.1.11': resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@tailwindcss/oxide-wasm32-wasi@4.1.11': resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} engines: {node: '>=14.0.0'} @@ -2900,22 +3553,53 @@ packages: - '@emnapi/wasi-threads' - tslib + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} + 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-win32-arm64-msvc@4.1.11': resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@tailwindcss/oxide@4.1.11': resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} engines: {node: '>= 10'} + '@tailwindcss/oxide@4.1.18': + resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.18': + resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==} + '@tailwindcss/typography@0.5.16': resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} peerDependencies: @@ -2953,6 +3637,15 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + '@ts-morph/common@0.19.0': + resolution: {integrity: sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==} + + '@ts-morph/common@0.27.0': + resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==} + + '@ts-morph/common@0.28.1': + resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==} + '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -3070,11 +3763,11 @@ packages: '@types/node@22.18.0': resolution: {integrity: sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ==} - '@types/node@24.10.1': - resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/node@24.0.7': + resolution: {integrity: sha512-YIEUUr4yf8q8oQoXPpSlnvKNVKDQlPMWrmOcgzoduo7kvA2UF0/BwJ/eMKFTiTtkNL17I0M6Xe2tvwFU7be6iw==} - '@types/node@24.7.2': - resolution: {integrity: sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==} + '@types/node@25.0.10': + resolution: {integrity: sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -3096,9 +3789,17 @@ packages: peerDependencies: '@types/react': ^18.0.0 + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + '@types/react@18.3.20': resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} + '@types/react@19.2.9': + resolution: {integrity: sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==} + '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -3108,6 +3809,9 @@ packages: '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + '@types/statuses@2.0.6': + resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} + '@types/tedious@4.0.14': resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} @@ -3231,6 +3935,12 @@ packages: peerDependencies: vite: '>=6.3.6' + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: '>=6.3.6' + '@vitest/coverage-v8@0.34.6': resolution: {integrity: sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw==} peerDependencies: @@ -3449,6 +4159,10 @@ packages: assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -3558,6 +4272,9 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + bluebird-lst@1.0.9: resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==} @@ -3616,6 +4333,9 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + builder-util-runtime@9.2.4: resolution: {integrity: sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==} engines: {node: '>=12.0.0'} @@ -3739,10 +4459,18 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + cli-truncate@2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} @@ -3751,6 +4479,13 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -3758,6 +4493,10 @@ packages: clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clone@2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} @@ -3766,6 +4505,12 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + code-block-writer@12.0.0: + resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} + + code-block-writer@13.0.3: + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + code-red@1.0.4: resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} @@ -3838,6 +4583,9 @@ packages: resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} engines: {node: '>= 10'} + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} @@ -3961,9 +4709,24 @@ packages: engines: {node: '>=4'} hasBin: true + cssstyle@4.6.0: + resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} + engines: {node: '>=18'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} @@ -4001,6 +4764,9 @@ packages: supports-color: optional: true + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} @@ -4015,6 +4781,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + default-browser-id@3.0.0: resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} engines: {node: '>=12'} @@ -4023,6 +4793,9 @@ packages: resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} engines: {node: '>=14.16'} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -4222,6 +4995,10 @@ packages: resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} engines: {node: '>=10.13.0'} + enhanced-resolve@5.18.4: + resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} + engines: {node: '>=10.13.0'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -4343,6 +5120,11 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -4370,6 +5152,9 @@ packages: estree-util-to-js@2.0.0: resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + estree-util-value-to-estree@3.5.0: + resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==} + estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} @@ -4459,6 +5244,10 @@ packages: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -4491,6 +5280,10 @@ packages: picomatch: optional: true + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + fetch-event-stream@0.1.5: resolution: {integrity: sha512-V1PWovkspxQfssq/NnxoEyQo1DV+MRK/laPuPblIZmSjMN8P5u46OhlFQznSr9p/t0Sp8Uc6SbM3yCMfr0KU8g==} @@ -4544,6 +5337,10 @@ packages: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + forwarded-parse@2.1.2: resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} @@ -4602,6 +5399,74 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + fumadocs-core@15.6.1: + resolution: {integrity: sha512-5DXVptT+LN145xUHzUy07IAtaBYBoWOVMAKbUQQhcGNxhXPvbVAT9bIHnfjklU+yyosc8Rhn/gxSrKdlrn9HtQ==} + peerDependencies: + '@oramacloud/client': 1.x.x || 2.x.x + '@types/react': '*' + algoliasearch: 5.x.x + next: ^15.4.8 + react: 18.x.x || 19.x.x + react-dom: 18.x.x || 19.x.x + peerDependenciesMeta: + '@oramacloud/client': + optional: true + '@types/react': + optional: true + algoliasearch: + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + + fumadocs-mdx@11.6.10: + resolution: {integrity: sha512-W13mGPKDviKHq1FdxJqbBmA8vQ0niEISUUREJU8u3q1g5lQgnZ9whZjTnvijnqiGNbBsjb8CmjU20OlmwG6nhA==} + hasBin: true + peerDependencies: + '@fumadocs/mdx-remote': ^1.2.0 + fumadocs-core: ^14.0.0 || ^15.0.0 + next: ^15.4.8 + vite: '>=6.3.6' + peerDependenciesMeta: + '@fumadocs/mdx-remote': + optional: true + next: + optional: true + vite: + optional: true + + fumadocs-typescript@4.0.14: + resolution: {integrity: sha512-Jx2ldrFP2jEKUeczHuj1OCaCXNxJbVX/bseYaGA3+DY5BK0otaozfs2bJK75TfbGPF3grAZdSe+0KGP1DOTYqQ==} + peerDependencies: + '@types/react': '*' + fumadocs-core: ^15.7.0 || ^16.0.0 + fumadocs-ui: ^15.7.0 || ^16.0.0 + typescript: '*' + peerDependenciesMeta: + '@types/react': + optional: true + fumadocs-ui: + optional: true + + fumadocs-ui@15.6.1: + resolution: {integrity: sha512-3O0uTMeU1ohVQE7HTV7+8I/1IIlgJPIBFOHjoQkRaXTf41LJ7EKfNHue80BOuhG4vyeL/Sx184v2hjljuKrX3Q==} + peerDependencies: + '@types/react': '*' + next: ^15.4.8 + react: 18.x.x || 19.x.x + react-dom: 18.x.x || 19.x.x + tailwindcss: ^3.4.14 || ^4.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + next: + optional: true + tailwindcss: + optional: true + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -4628,6 +5493,10 @@ packages: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} + get-own-enumerable-keys@1.0.0: + resolution: {integrity: sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==} + engines: {node: '>=14.16'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -4718,6 +5587,10 @@ packages: graphemesplit@2.6.0: resolution: {integrity: sha512-rG9w2wAfkpg0DILa1pjnjNfucng3usON360shisqIMUBw/87pojcBSrHmeE4UwryAuBih7g8m1oilf5/u8EWdQ==} + graphql@16.12.0: + resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + h3@1.15.5: resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} @@ -4783,12 +5656,18 @@ packages: hast-util-to-estree@3.1.0: resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + hast-util-to-html@9.0.5: resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} hast-util-to-jsx-runtime@2.3.0: resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} @@ -4808,6 +5687,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -4824,6 +5706,10 @@ packages: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -4851,6 +5737,10 @@ packages: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} @@ -4859,6 +5749,10 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@6.2.1: + resolution: {integrity: sha512-ONsE3+yfZF2caH5+bJlcddtWqNI3Gvs5A38+ngvljxaBiRXRswym2c7yf8UAeFpRFKjFNHIFEHqR/OLAWJzyiA==} + engines: {node: '>= 14'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -4898,6 +5792,11 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + image-size@2.0.2: + resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} + engines: {node: '>=16.x'} + hasBin: true + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -4936,6 +5835,9 @@ packages: inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -5008,10 +5910,21 @@ packages: engines: {node: '>=14.16'} hasBin: true + is-interactive@2.0.0: + 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'} + is-obj@3.0.0: + resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==} + engines: {node: '>=12'} + is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -5020,12 +5933,19 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + is-regexp@3.1.0: + resolution: {integrity: sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==} + engines: {node: '>=12'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -5034,6 +5954,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -5084,6 +6008,10 @@ packages: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -5109,6 +6037,15 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -5178,20 +6115,44 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + lightningcss-darwin-arm64@1.30.1: resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + lightningcss-darwin-x64@1.30.1: resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.30.1: - resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.1: + resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] @@ -5202,46 +6163,92 @@ packages: cpu: [arm] os: [linux] + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + lightningcss-linux-arm64-gnu@1.30.1: resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + lightningcss-linux-arm64-musl@1.30.1: resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + lightningcss-linux-x64-gnu@1.30.1: resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + lightningcss-linux-x64-musl@1.30.1: resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + lightningcss-win32-arm64-msvc@1.30.1: resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + lightningcss-win32-x64-msvc@1.30.1: resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + lightningcss@1.30.1: resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -5310,6 +6317,10 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@5.1.0: + resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} + engines: {node: '>=12'} + log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} @@ -5338,6 +6349,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.2.5: + resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -5345,6 +6360,11 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + lucide-react@0.525.0: + resolution: {integrity: sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -5621,6 +6641,10 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + engines: {node: 20 || >=22} + minimatch@3.0.8: resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} @@ -5631,6 +6655,10 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} + minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} @@ -5662,6 +6690,11 @@ packages: resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} + mkdirp@2.1.6: + resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} + engines: {node: '>=10'} + hasBin: true + mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} @@ -5678,9 +6711,23 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msw@2.12.7: + resolution: {integrity: sha512-retd5i3xCZDVWMYjHEVuKTmhqY8lSsxujjVrZiGbbdoxxIBg5S7rCuYy/YQpfrTYIxpd/o0Kyb/3H+1udBMoYg==} + 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==} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + mylas@2.1.13: resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==} engines: {node: '>=12.0.0'} @@ -5708,6 +6755,33 @@ packages: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@15.5.9: + resolution: {integrity: sha512-agNLK89seZEtC5zUHwtut0+tNrc0Xw4FT/Dg+B/VLEo9pAcS9rtTKpek3V6kVcVwsB2YlqMaHdfZL4eLEVYuCg==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} @@ -5717,6 +6791,11 @@ packages: node-addon-api@1.7.2: resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -5729,6 +6808,10 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-gyp-build@4.8.2: resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} hasBin: true @@ -5775,9 +6858,16 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-to-yarn@3.0.1: + resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nwsapi@2.2.23: + resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -5824,6 +6914,9 @@ packages: oniguruma-to-es@4.3.3: resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + oniguruma-to-es@4.3.4: + resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==} + open@9.1.0: resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} engines: {node: '>=14.16'} @@ -5832,6 +6925,13 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@6.3.1: + resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -6039,9 +7139,17 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -6175,6 +7283,16 @@ packages: peerDependencies: react: ^18.3.1 + react-dom@19.2.3: + resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} + peerDependencies: + react: ^19.2.3 + + react-icons@5.5.0: + resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} + peerDependencies: + react: '*' + react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -6187,6 +7305,12 @@ packages: react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + react-medium-image-zoom@5.4.0: + resolution: {integrity: sha512-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-refresh@0.17.0: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} @@ -6211,6 +7335,16 @@ packages: '@types/react': optional: true + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + react-router-dom@6.30.3: resolution: {integrity: sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==} engines: {node: '>=14.0.0'} @@ -6244,6 +7378,10 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + react@19.2.3: + resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} + engines: {node: '>=0.10.0'} + read-config-file@6.3.2: resolution: {integrity: sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==} engines: {node: '>=12.0.0'} @@ -6266,6 +7404,10 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + recast@0.23.11: + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} + recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -6340,6 +7482,9 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -6374,6 +7519,10 @@ packages: responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -6401,6 +7550,9 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} + rettime@0.7.0: + resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -6436,6 +7588,9 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} engines: {node: '>=12'} @@ -6461,9 +7616,19 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} @@ -6496,6 +7661,10 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + shadcn@2.10.0: + resolution: {integrity: sha512-/zxjmHGbaYVFtI6bUridFVV7VFStIv3vU/w1h7xenhz7KRzc9pqHsyFvcExZprG7dlA5kW9knRgv8+Cl/H7w9w==} + hasBin: true + sharp@0.33.5: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -6522,8 +7691,8 @@ packages: shiki@3.13.0: resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==} - shiki@3.15.0: - resolution: {integrity: sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw==} + shiki@3.21.0: + resolution: {integrity: sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -6651,12 +7820,19 @@ packages: std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + stdin-discarder@0.1.0: + resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + stream-replace-string@2.0.0: resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} streamx@2.22.0: resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + 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'} @@ -6682,6 +7858,10 @@ packages: stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + stringify-object@5.0.0: + resolution: {integrity: sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==} + engines: {node: '>=14.16'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -6690,6 +7870,10 @@ packages: resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -6712,12 +7896,31 @@ packages: stubborn-fs@1.2.5: resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} @@ -6744,12 +7947,25 @@ packages: svg-parser@2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + tailwind-merge@3.3.0: resolution: {integrity: sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ==} + tailwind-merge@3.4.0: + resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} + tailwindcss@4.1.11: resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} + tailwindcss@4.1.18: + resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} + tapable@2.2.2: resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} engines: {node: '>=6'} @@ -6789,6 +8005,9 @@ packages: tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tiny-typed-emitter@2.1.0: resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} @@ -6819,6 +8038,20 @@ packages: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + + tldts-core@7.0.19: + resolution: {integrity: sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==} + + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + hasBin: true + + tldts@7.0.19: + resolution: {integrity: sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==} + hasBin: true + tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} @@ -6838,9 +8071,21 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + + tough-cookie@6.0.0: + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} + engines: {node: '>=18'} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -6860,6 +8105,15 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-morph@18.0.0: + resolution: {integrity: sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==} + + ts-morph@26.0.0: + resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==} + + ts-morph@27.0.2: + resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} + tsc-alias@1.8.16: resolution: {integrity: sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g==} engines: {node: '>=16.20.2'} @@ -6875,6 +8129,10 @@ packages: typescript: optional: true + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -6920,6 +8178,9 @@ packages: tw-animate-css@1.3.5: resolution: {integrity: sha512-t3u+0YNoloIhj1mMXs779P6MO9q3p3mvGn4k1n3nJPqJw/glZcuijG2qTSN4z4mgNRfW5ZC3aXJFLwDtiipZXA==} + tw-animate-css@1.4.0: + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -6940,6 +8201,10 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-fest@5.4.1: + resolution: {integrity: sha512-xygQcmneDyzsEuKZrFbRMne5HDqMs++aFzefrJTgEIKjQ3rekM+RPfFCVq2Gp1VIDqddoYeppCj4Pcb+RZW0GQ==} + engines: {node: '>=20'} + type-is@2.0.1: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} @@ -6957,6 +8222,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} @@ -6976,12 +8246,12 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.14.0: - resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} - undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + unicode-properties@1.4.1: resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} @@ -7027,6 +8297,9 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -7104,6 +8377,9 @@ packages: uploadthing: optional: true + until-async@3.0.2: + resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} + untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} @@ -7357,12 +8633,27 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} @@ -7370,10 +8661,23 @@ packages: webpack-virtual-modules@0.5.0: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + 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-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -7402,6 +8706,10 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: + 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'} @@ -7417,10 +8725,29 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + 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 + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + xmlbuilder@15.1.1: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -7487,6 +8814,10 @@ packages: resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==} engines: {node: '>=18.19'} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + yoctocolors@2.1.2: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} @@ -7544,11 +8875,15 @@ snapshots: '@adobe/css-tools@4.4.4': {} + '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 + '@antfu/ni@23.3.1': {} + '@antfu/utils@0.7.10': {} '@apm-js-collab/code-transformer@0.8.2': {} @@ -7561,6 +8896,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@asamuzakjp/css-color@3.2.0': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + lru-cache: 10.4.3 + optional: true + '@astrojs/compiler@2.13.0': {} '@astrojs/internal-helpers@0.6.1': {} @@ -7585,7 +8929,7 @@ snapshots: remark-parse: 11.0.0 remark-rehype: 11.1.2 remark-smartypants: 3.0.2 - shiki: 3.15.0 + shiki: 3.21.0 smol-toml: 1.5.2 unified: 11.0.5 unist-util-remove-position: 5.0.0 @@ -7611,22 +8955,22 @@ snapshots: remark-parse: 11.0.0 remark-rehype: 11.1.2 remark-smartypants: 3.0.2 - shiki: 3.15.0 + shiki: 3.21.0 smol-toml: 1.5.2 unified: 11.0.5 unist-util-remove-position: 5.0.0 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 unist-util-visit-parents: 6.0.2 vfile: 6.0.3 transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.6(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))': + '@astrojs/mdx@4.3.6(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))': dependencies: '@astrojs/markdown-remark': 6.3.7 '@mdx-js/mdx': 3.1.1 acorn: 8.15.0 - astro: 5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) + astro: 5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -7644,15 +8988,15 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/react@4.2.7(@types/node@24.10.1)(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(jiti@2.4.2)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)': + '@astrojs/react@4.2.7(@types/node@25.0.10)(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)': dependencies: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) - '@vitejs/plugin-react': 4.4.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)) + '@vitejs/plugin-react': 4.7.0(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) ultrahtml: 1.6.0 - vite: 6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -7673,22 +9017,22 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.25.76 - '@astrojs/starlight-tailwind@3.0.1(@astrojs/starlight@0.32.6(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)))(@astrojs/tailwind@6.0.2(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(tailwindcss@4.1.11))(tailwindcss@4.1.11)': + '@astrojs/starlight-tailwind@3.0.1(@astrojs/starlight@0.32.6(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)))(@astrojs/tailwind@6.0.2(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(tailwindcss@4.1.11))(tailwindcss@4.1.11)': dependencies: - '@astrojs/starlight': 0.32.6(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)) - '@astrojs/tailwind': 6.0.2(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(tailwindcss@4.1.11) + '@astrojs/starlight': 0.32.6(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)) + '@astrojs/tailwind': 6.0.2(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(tailwindcss@4.1.11) tailwindcss: 4.1.11 - '@astrojs/starlight@0.32.6(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))': + '@astrojs/starlight@0.32.6(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))': dependencies: - '@astrojs/mdx': 4.3.6(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)) + '@astrojs/mdx': 4.3.6(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)) '@astrojs/sitemap': 3.6.0 '@pagefind/default-ui': 1.3.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) - astro-expressive-code: 0.40.2(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)) + astro: 5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) + astro-expressive-code: 0.40.2(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.2 @@ -7710,9 +9054,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/tailwind@6.0.2(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(tailwindcss@4.1.11)': + '@astrojs/tailwind@6.0.2(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(tailwindcss@4.1.11)': dependencies: - astro: 5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) + astro: 5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) autoprefixer: 10.4.23(postcss@8.5.6) postcss: 8.5.6 postcss-load-config: 4.0.2(postcss@8.5.6) @@ -7732,14 +9076,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/vercel@8.1.4(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(react@18.3.1)(rollup@4.53.3)(svelte@4.2.19)': + '@astrojs/vercel@8.1.4(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))(next@15.5.9(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.53.3)(svelte@4.2.19)': dependencies: '@astrojs/internal-helpers': 0.6.1 - '@vercel/analytics': 1.6.1(react@18.3.1)(svelte@4.2.19) + '@vercel/analytics': 1.6.1(next@15.5.9(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(svelte@4.2.19) '@vercel/edge': 1.2.1 '@vercel/nft': 0.29.2(rollup@4.53.3) '@vercel/routing-utils': 5.0.4 - astro: 5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) + astro: 5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) esbuild: 0.25.3 tinyglobby: 0.2.12 transitivePeerDependencies: @@ -7768,6 +9112,8 @@ snapshots: '@babel/compat-data@7.27.1': {} + '@babel/compat-data@7.28.6': {} + '@babel/core@7.27.1': dependencies: '@ampproject/remapping': 2.3.0 @@ -7788,6 +9134,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.28.6': + dependencies: + '@babel/code-frame': 7.28.6 + '@babel/generator': 7.28.6 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.28.6 + '@babel/template': 7.28.6 + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.27.1': dependencies: '@babel/parser': 7.28.4 @@ -7796,6 +9162,18 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/generator@7.28.6': + dependencies: + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.5 + '@babel/helper-compilation-targets@7.27.1': dependencies: '@babel/compat-data': 7.27.1 @@ -7804,24 +9182,92 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-module-imports@7.27.1': + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.27.1) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.6 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.27.1 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.28.6 + '@babel/types': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.28.5 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.27.1)': dependencies: - '@babel/traverse': 7.27.1 - '@babel/types': 7.28.5 + '@babel/core': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 '@babel/traverse': 7.27.1 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.27.1': {} @@ -7835,6 +9281,11 @@ snapshots: '@babel/template': 7.27.1 '@babel/types': 7.28.4 + '@babel/helpers@7.28.6': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.28.6 + '@babel/parser@7.28.4': dependencies: '@babel/types': 7.28.4 @@ -7843,16 +9294,46 @@ snapshots: dependencies: '@babel/types': 7.28.5 + '@babel/parser@7.28.6': + dependencies: + '@babel/types': 7.28.6 + + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.1)': dependencies: '@babel/core': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.6)': + dependencies: + '@babel/core': 7.28.6 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.27.1) + transitivePeerDependencies: + - supports-color + '@babel/runtime@7.27.1': {} '@babel/runtime@7.28.6': {} @@ -7863,6 +9344,12 @@ snapshots: '@babel/parser': 7.28.4 '@babel/types': 7.28.4 + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.28.6 + '@babel/parser': 7.28.6 + '@babel/types': 7.28.6 + '@babel/traverse@7.27.1': dependencies: '@babel/code-frame': 7.27.1 @@ -7875,6 +9362,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.28.6': + dependencies: + '@babel/code-frame': 7.28.6 + '@babel/generator': 7.28.6 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.6 + '@babel/template': 7.28.6 + '@babel/types': 7.28.6 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -7885,6 +9384,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.28.6': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@bcoe/v8-coverage@0.2.3': {} '@biomejs/biome@1.9.4': @@ -7898,34 +9402,94 @@ snapshots: '@biomejs/cli-win32-arm64': 1.9.4 '@biomejs/cli-win32-x64': 1.9.4 + '@biomejs/biome@2.3.13': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.3.13 + '@biomejs/cli-darwin-x64': 2.3.13 + '@biomejs/cli-linux-arm64': 2.3.13 + '@biomejs/cli-linux-arm64-musl': 2.3.13 + '@biomejs/cli-linux-x64': 2.3.13 + '@biomejs/cli-linux-x64-musl': 2.3.13 + '@biomejs/cli-win32-arm64': 2.3.13 + '@biomejs/cli-win32-x64': 2.3.13 + '@biomejs/cli-darwin-arm64@1.9.4': optional: true + '@biomejs/cli-darwin-arm64@2.3.13': + optional: true + '@biomejs/cli-darwin-x64@1.9.4': optional: true + '@biomejs/cli-darwin-x64@2.3.13': + optional: true + '@biomejs/cli-linux-arm64-musl@1.9.4': optional: true + '@biomejs/cli-linux-arm64-musl@2.3.13': + optional: true + '@biomejs/cli-linux-arm64@1.9.4': optional: true + '@biomejs/cli-linux-arm64@2.3.13': + optional: true + '@biomejs/cli-linux-x64-musl@1.9.4': optional: true + '@biomejs/cli-linux-x64-musl@2.3.13': + optional: true + '@biomejs/cli-linux-x64@1.9.4': optional: true + '@biomejs/cli-linux-x64@2.3.13': + optional: true + '@biomejs/cli-win32-arm64@1.9.4': optional: true + '@biomejs/cli-win32-arm64@2.3.13': + optional: true + '@biomejs/cli-win32-x64@1.9.4': optional: true + '@biomejs/cli-win32-x64@2.3.13': + optional: true + '@capsizecss/unpack@3.0.1': dependencies: fontkit: 2.0.4 + '@csstools/color-helpers@5.1.0': + optional: true + + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + optional: true + + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/color-helpers': 5.1.0 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + optional: true + + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + optional: true + + '@csstools/css-tokenizer@3.0.4': + optional: true + '@ctrl/tinycolor@4.1.0': {} '@develar/schema-utils@2.6.5': @@ -8426,10 +9990,20 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@floating-ui/react-dom@2.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@floating-ui/dom': 1.7.0 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + '@floating-ui/utils@0.2.9': {} '@fontsource/raleway@5.2.5': {} + '@formatjs/intl-localematcher@0.6.2': + dependencies: + tslib: 2.8.1 + '@hono/mcp@0.2.2(@modelcontextprotocol/sdk@1.25.2(hono@4.11.4)(zod@4.1.13))(hono-rate-limiter@0.4.2(hono@4.11.4))(hono@4.11.4)(zod@4.1.13)': dependencies: '@modelcontextprotocol/sdk': 1.25.2(hono@4.11.4)(zod@4.1.13) @@ -8630,6 +10204,40 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true + '@inquirer/ansi@1.0.2': {} + + '@inquirer/confirm@5.1.21(@types/node@24.0.7)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.0.7) + '@inquirer/type': 3.0.10(@types/node@24.0.7) + optionalDependencies: + '@types/node': 24.0.7 + + '@inquirer/core@10.3.2(@types/node@24.0.7)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@24.0.7) + 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': 24.0.7 + + '@inquirer/figures@1.0.15': {} + + '@inquirer/type@3.0.10(@types/node@24.0.7)': + optionalDependencies: + '@types/node': 24.0.7 + + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -8654,6 +10262,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/source-map@0.3.11': @@ -8792,6 +10405,63 @@ snapshots: - hono - supports-color + '@modelcontextprotocol/sdk@1.25.2(zod@3.25.76)': + dependencies: + '@hono/node-server': 1.19.7(hono@4.11.4) + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.0.6 + express: 5.2.1 + express-rate-limit: 7.5.1(express@5.2.1) + jose: 6.1.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) + transitivePeerDependencies: + - hono + - supports-color + + '@mswjs/interceptors@0.40.0': + 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 + + '@next/env@15.5.9': {} + + '@next/swc-darwin-arm64@15.5.7': + optional: true + + '@next/swc-darwin-x64@15.5.7': + optional: true + + '@next/swc-linux-arm64-gnu@15.5.7': + optional: true + + '@next/swc-linux-arm64-musl@15.5.7': + optional: true + + '@next/swc-linux-x64-gnu@15.5.7': + optional: true + + '@next/swc-linux-x64-musl@15.5.7': + optional: true + + '@next/swc-win32-arm64-msvc@15.5.7': + optional: true + + '@next/swc-win32-x64-msvc@15.5.7': + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8806,6 +10476,15 @@ snapshots: '@one-ini/wasm@0.1.1': {} + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + '@opentelemetry/api-logs@0.208.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -9037,6 +10716,8 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@orama/orama@3.1.18': {} + '@oslojs/encoding@1.1.0': {} '@pagefind/darwin-arm64@1.3.0': @@ -9072,8 +10753,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@radix-ui/number@1.1.1': {} + '@radix-ui/primitive@1.1.2': {} + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-arrow@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -9083,6 +10785,31 @@ snapshots: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.20)(react@18.3.1) @@ -9095,24 +10822,76 @@ snapshots: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.9)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + '@radix-ui/react-context@1.1.2(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-context@1.1.2(@types/react@19.2.9)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.9)(react@19.2.3) + aria-hidden: 1.2.6 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-remove-scroll: 2.7.0(@types/react@19.2.9)(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-direction@1.1.1(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-direction@1.1.1(@types/react@19.2.9)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -9126,6 +10905,19 @@ snapshots: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -9147,6 +10939,12 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.9)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.20)(react@18.3.1) @@ -9158,6 +10956,34 @@ snapshots: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + + '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-id@1.1.1(@types/react@18.3.20)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.20)(react@18.3.1) @@ -9165,6 +10991,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-id@1.1.1(@types/react@19.2.9)(react@19.2.3)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + '@radix-ui/react-menu@2.1.15(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -9191,6 +11024,51 @@ snapshots: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.9)(react@19.2.3) + aria-hidden: 1.2.6 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-remove-scroll: 2.7.0(@types/react@19.2.9)(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-popper@1.2.7(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -9209,6 +11087,24 @@ snapshots: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/rect': 1.1.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -9219,6 +11115,16 @@ snapshots: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-presence@1.1.4(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.20)(react@18.3.1) @@ -9229,6 +11135,16 @@ snapshots: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.2.3(@types/react@18.3.20)(react@18.3.1) @@ -9238,6 +11154,15 @@ snapshots: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -9255,6 +11180,40 @@ snapshots: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-slot@1.2.3(@types/react@18.3.20)(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.20)(react@18.3.1) @@ -9262,6 +11221,36 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-slot@1.2.3(@types/react@19.2.9)(react@19.2.3)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + + '@radix-ui/react-slot@1.2.4(@types/react@19.2.9)(react@19.2.3)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/react-tooltip@1.2.7(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -9288,6 +11277,12 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.9)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.20)(react@18.3.1)': dependencies: '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.20)(react@18.3.1) @@ -9296,6 +11291,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.9)(react@19.2.3)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.20)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.20)(react@18.3.1) @@ -9303,6 +11306,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.9)(react@19.2.3)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.20)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.20)(react@18.3.1) @@ -9310,12 +11320,31 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.9)(react@19.2.3)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.20)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.9)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + + '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.9)(react@19.2.3)': + dependencies: + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.20)(react@18.3.1)': dependencies: '@radix-ui/rect': 1.1.1 @@ -9323,6 +11352,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.9)(react@19.2.3)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + '@radix-ui/react-use-size@1.1.1(@types/react@18.3.20)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.20)(react@18.3.1) @@ -9330,6 +11366,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + '@radix-ui/react-use-size@1.1.1(@types/react@19.2.9)(react@19.2.3)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3) + react: 19.2.3 + optionalDependencies: + '@types/react': 19.2.9 + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.20))(@types/react@18.3.20)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -9339,10 +11382,21 @@ snapshots: '@types/react': 18.3.20 '@types/react-dom': 18.3.7(@types/react@18.3.20) + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + '@types/react-dom': 19.2.3(@types/react@19.2.9) + '@radix-ui/rect@1.1.1': {} '@remix-run/router@1.23.2': {} + '@rolldown/pluginutils@1.0.0-beta.27': {} + '@rollup/pluginutils@5.1.2(rollup@4.53.3)': dependencies: '@types/estree': 1.0.8 @@ -9503,13 +11557,13 @@ snapshots: '@sentry-internal/browser-utils': 10.32.1 '@sentry/core': 10.32.1 - '@sentry/astro@10.32.1(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))': + '@sentry/astro@10.32.1(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2))': dependencies: '@sentry/browser': 10.32.1 '@sentry/core': 10.32.1 '@sentry/node': 10.32.1 '@sentry/vite-plugin': 4.6.1 - astro: 5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) + astro: 5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) transitivePeerDependencies: - encoding - supports-color @@ -9827,9 +11881,9 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/core@3.15.0': + '@shikijs/core@3.21.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.21.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 @@ -9846,11 +11900,11 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-javascript@3.15.0': + '@shikijs/engine-javascript@3.21.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.21.0 '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.3 + oniguruma-to-es: 4.3.4 '@shikijs/engine-oniguruma@1.29.2': dependencies: @@ -9862,9 +11916,9 @@ snapshots: '@shikijs/types': 3.13.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@3.15.0': + '@shikijs/engine-oniguruma@3.21.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.21.0 '@shikijs/vscode-textmate': 10.0.2 '@shikijs/langs@1.29.2': @@ -9875,9 +11929,18 @@ snapshots: dependencies: '@shikijs/types': 3.13.0 - '@shikijs/langs@3.15.0': + '@shikijs/langs@3.21.0': + dependencies: + '@shikijs/types': 3.21.0 + + '@shikijs/rehype@3.21.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.21.0 + '@types/hast': 3.0.4 + hast-util-to-string: 3.0.1 + shiki: 3.21.0 + unified: 11.0.5 + unist-util-visit: 5.1.0 '@shikijs/themes@1.29.2': dependencies: @@ -9887,15 +11950,20 @@ snapshots: dependencies: '@shikijs/types': 3.13.0 - '@shikijs/themes@3.15.0': + '@shikijs/themes@3.21.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.21.0 '@shikijs/transformers@3.13.0': dependencies: '@shikijs/core': 3.13.0 '@shikijs/types': 3.13.0 + '@shikijs/transformers@3.21.0': + dependencies: + '@shikijs/core': 3.21.0 + '@shikijs/types': 3.21.0 + '@shikijs/types@1.29.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 @@ -9906,7 +11974,7 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/types@3.15.0': + '@shikijs/types@3.21.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -9917,6 +11985,8 @@ snapshots: '@sindresorhus/is@4.6.0': {} + '@standard-schema/spec@1.1.0': {} + '@stricli/auto-complete@1.1.1': dependencies: '@stricli/core': 1.1.1 @@ -9993,6 +12063,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 @@ -10011,42 +12085,88 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.1.11 + '@tailwindcss/node@4.1.18': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.4 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.18 + '@tailwindcss/oxide-android-arm64@4.1.11': optional: true + '@tailwindcss/oxide-android-arm64@4.1.18': + optional: true + '@tailwindcss/oxide-darwin-arm64@4.1.11': optional: true + '@tailwindcss/oxide-darwin-arm64@4.1.18': + optional: true + '@tailwindcss/oxide-darwin-x64@4.1.11': optional: true + '@tailwindcss/oxide-darwin-x64@4.1.18': + optional: true + '@tailwindcss/oxide-freebsd-x64@4.1.11': optional: true + '@tailwindcss/oxide-freebsd-x64@4.1.18': + optional: true + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': optional: true + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + optional: true + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': optional: true + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + optional: true + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': optional: true + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + optional: true + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': optional: true + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + optional: true + '@tailwindcss/oxide-linux-x64-musl@4.1.11': optional: true + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + optional: true + '@tailwindcss/oxide-wasm32-wasi@4.1.11': optional: true + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + optional: true + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': optional: true + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + optional: true + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': optional: true + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + optional: true + '@tailwindcss/oxide@4.1.11': dependencies: detect-libc: 2.1.2 @@ -10065,6 +12185,29 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 + '@tailwindcss/oxide@4.1.18': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-x64': 4.1.18 + '@tailwindcss/oxide-freebsd-x64': 4.1.18 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-x64-musl': 4.1.18 + '@tailwindcss/oxide-wasm32-wasi': 4.1.18 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 + + '@tailwindcss/postcss@4.1.18': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.18 + '@tailwindcss/oxide': 4.1.18 + postcss: 8.5.6 + tailwindcss: 4.1.18 + '@tailwindcss/typography@0.5.16(tailwindcss@4.1.11)': dependencies: lodash.castarray: 4.4.0 @@ -10073,19 +12216,19 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.1.11 - '@tailwindcss/vite@4.1.11(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1))': + '@tailwindcss/vite@4.1.11(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1) + vite: 5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1) - '@tailwindcss/vite@4.1.11(vite@6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2))': + '@tailwindcss/vite@4.1.11(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) '@testing-library/dom@10.4.1': dependencies: @@ -10119,6 +12262,25 @@ snapshots: '@tootallnate/once@2.0.0': {} + '@ts-morph/common@0.19.0': + dependencies: + fast-glob: 3.3.2 + minimatch: 7.4.6 + mkdirp: 2.1.6 + path-browserify: 1.0.1 + + '@ts-morph/common@0.27.0': + dependencies: + fast-glob: 3.3.3 + minimatch: 10.1.1 + path-browserify: 1.0.1 + + '@ts-morph/common@0.28.1': + dependencies: + minimatch: 10.1.1 + path-browserify: 1.0.1 + tinyglobby: 0.2.15 + '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.8 @@ -10156,7 +12318,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 24.10.1 + '@types/node': 20.19.21 '@types/responselike': 1.0.3 '@types/chai-subset@1.3.5': @@ -10171,7 +12333,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 24.10.1 + '@types/node': 20.19.21 '@types/debug@4.1.12': dependencies: @@ -10187,16 +12349,16 @@ snapshots: '@types/fontkit@2.0.8': dependencies: - '@types/node': 24.10.1 + '@types/node': 20.19.21 '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.10.1 + '@types/node': 20.19.21 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 24.10.1 + '@types/node': 20.19.21 '@types/hast@3.0.4': dependencies: @@ -10212,13 +12374,13 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 24.10.1 + '@types/node': 20.19.21 '@types/lodash@4.17.13': {} '@types/logfmt@1.2.6': dependencies: - '@types/node': 24.7.2 + '@types/node': 20.19.21 '@types/mdast@4.0.4': dependencies: @@ -10232,7 +12394,7 @@ snapshots: '@types/mysql@2.15.27': dependencies: - '@types/node': 24.10.1 + '@types/node': 20.19.21 '@types/nlcst@2.0.3': dependencies: @@ -10252,13 +12414,14 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@24.10.1': + '@types/node@24.0.7': dependencies: - undici-types: 7.16.0 + undici-types: 7.8.0 - '@types/node@24.7.2': + '@types/node@25.0.10': dependencies: - undici-types: 7.14.0 + undici-types: 7.16.0 + optional: true '@types/parse-json@4.0.2': {} @@ -10268,13 +12431,13 @@ snapshots: '@types/pg@8.15.6': dependencies: - '@types/node': 24.10.1 + '@types/node': 20.19.21 pg-protocol: 1.9.5 pg-types: 2.2.0 '@types/plist@3.0.5': dependencies: - '@types/node': 24.7.2 + '@types/node': 20.19.21 xmlbuilder: 15.1.1 optional: true @@ -10284,24 +12447,34 @@ snapshots: dependencies: '@types/react': 18.3.20 + '@types/react-dom@19.2.3(@types/react@19.2.9)': + dependencies: + '@types/react': 19.2.9 + '@types/react@18.3.20': dependencies: '@types/prop-types': 15.7.13 csstype: 3.1.3 + '@types/react@19.2.9': + dependencies: + csstype: 3.2.3 + '@types/responselike@1.0.3': dependencies: - '@types/node': 24.10.1 + '@types/node': 20.19.21 '@types/sax@1.2.7': dependencies: - '@types/node': 24.10.1 + '@types/node': 20.19.21 '@types/semver@7.7.1': {} + '@types/statuses@2.0.6': {} + '@types/tedious@4.0.14': dependencies: - '@types/node': 24.10.1 + '@types/node': 20.19.21 '@types/unist@2.0.11': {} @@ -10314,7 +12487,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.7.2 + '@types/node': 20.19.21 optional: true '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2)': @@ -10405,8 +12578,9 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vercel/analytics@1.6.1(react@18.3.1)(svelte@4.2.19)': + '@vercel/analytics@1.6.1(next@15.5.9(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(svelte@4.2.19)': optionalDependencies: + next: 15.5.9(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 svelte: 4.2.19 @@ -10438,29 +12612,30 @@ snapshots: optionalDependencies: ajv: 6.12.6 - '@vitejs/plugin-react@4.4.1(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1))': + '@vitejs/plugin-react@4.4.1(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1))': dependencies: '@babel/core': 7.27.1 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.1) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.1) '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1) + vite: 5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.4.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2))': + '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2))': dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.6 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.6) + '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@0.34.6(vitest@0.34.6(happy-dom@20.0.2)(lightningcss@1.30.1)(playwright@1.56.1)(terser@5.43.1))': + '@vitest/coverage-v8@0.34.6(vitest@0.34.6(happy-dom@20.0.2)(jsdom@26.1.0)(lightningcss@1.30.2)(playwright@1.56.1)(terser@5.43.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -10473,7 +12648,7 @@ snapshots: std-env: 3.9.0 test-exclude: 6.0.0 v8-to-istanbul: 9.3.0 - vitest: 0.34.6(happy-dom@20.0.2)(lightningcss@1.30.1)(playwright@1.56.1)(terser@5.43.1) + vitest: 0.34.6(happy-dom@20.0.2)(jsdom@26.1.0)(lightningcss@1.30.2)(playwright@1.56.1)(terser@5.43.1) transitivePeerDependencies: - supports-color @@ -10755,17 +12930,21 @@ snapshots: assertion-error@1.1.0: {} + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + astral-regex@2.0.0: optional: true astring@1.9.0: {} - astro-expressive-code@0.40.2(astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)): + astro-expressive-code@0.40.2(astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2)): dependencies: - astro: 5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) + astro: 5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2) rehype-expressive-code: 0.40.2 - astro@5.15.9(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2): + astro@5.15.9(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.53.3)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.2): dependencies: '@astrojs/compiler': 2.13.0 '@astrojs/internal-helpers': 0.7.5 @@ -10811,7 +12990,7 @@ snapshots: prompts: 2.4.2 rehype: 13.0.2 semver: 7.7.3 - shiki: 3.15.0 + shiki: 3.21.0 smol-toml: 1.5.2 tinyexec: 1.0.2 tinyglobby: 0.2.15 @@ -10821,8 +13000,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.17.2 vfile: 6.0.3 - vite: 6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) - vitefu: 1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) + vitefu: 1.1.1(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -10953,6 +13132,12 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bl@5.1.0: + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.2 + bluebird-lst@1.0.9: dependencies: bluebird: 3.7.2 @@ -11031,6 +13216,11 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + builder-util-runtime@9.2.4: dependencies: debug: 4.4.3 @@ -11171,10 +13361,16 @@ snapshots: cli-boxes@3.0.0: {} + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 + cli-spinners@2.9.2: {} + cli-truncate@2.1.0: dependencies: slice-ansi: 3.0.0 @@ -11186,6 +13382,10 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.2.0 + cli-width@4.1.0: {} + + client-only@0.0.1: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -11196,10 +13396,16 @@ snapshots: dependencies: mimic-response: 1.0.1 + clone@1.0.4: {} + clone@2.1.2: {} clsx@2.1.1: {} + code-block-writer@12.0.0: {} + + code-block-writer@13.0.3: {} + code-red@1.0.4: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -11269,6 +13475,8 @@ snapshots: normalize-path: 3.0.0 readable-stream: 3.6.2 + compute-scroll-into-view@3.1.1: {} + concat-stream@1.6.2: dependencies: buffer-from: 1.1.2 @@ -11309,7 +13517,7 @@ snapshots: config-file-ts@0.2.6: dependencies: glob: 10.4.5 - typescript: 5.9.2 + typescript: 5.9.3 consola@3.4.0: {} @@ -11356,6 +13564,15 @@ snapshots: optionalDependencies: typescript: 5.9.2 + cosmiconfig@8.3.6(typescript@5.9.3): + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.1 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.9.3 + crc-32@1.2.2: {} crc32-stream@4.0.3: @@ -11397,8 +13614,24 @@ snapshots: cssesc@3.0.0: {} + cssstyle@4.6.0: + dependencies: + '@asamuzakjp/css-color': 3.2.0 + rrweb-cssom: 0.8.0 + optional: true + csstype@3.1.3: {} + csstype@3.2.3: {} + + data-uri-to-buffer@4.0.1: {} + + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + optional: true + dayjs@1.11.13: {} de-indent@1.0.2: {} @@ -11419,6 +13652,9 @@ snapshots: dependencies: ms: 2.1.3 + decimal.js@10.6.0: + optional: true + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 @@ -11433,6 +13669,8 @@ snapshots: deep-is@0.1.4: {} + deepmerge@4.3.1: {} + default-browser-id@3.0.0: dependencies: bplist-parser: 0.2.0 @@ -11445,6 +13683,10 @@ snapshots: execa: 7.2.0 titleize: 3.0.0 + defaults@1.0.4: + dependencies: + clone: 1.0.4 + defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -11673,6 +13915,11 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.2 + enhanced-resolve@5.18.4: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.2 + entities@4.5.0: {} entities@6.0.1: {} @@ -11838,7 +14085,6 @@ snapshots: '@esbuild/win32-arm64': 0.27.2 '@esbuild/win32-ia32': 0.27.2 '@esbuild/win32-x64': 0.27.2 - optional: true escalade@3.2.0: {} @@ -11912,6 +14158,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 3.4.3 + esprima@4.0.1: {} + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -11946,6 +14194,10 @@ snapshots: astring: 1.9.0 source-map: 0.7.6 + estree-util-value-to-estree@3.5.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-visit@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -12088,6 +14340,14 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -12110,6 +14370,11 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + fetch-event-stream@0.1.5: {} file-entry-cache@6.0.1: @@ -12184,6 +14449,10 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + forwarded-parse@2.1.2: {} forwarded@0.2.0: {} @@ -12248,6 +14517,104 @@ snapshots: fsevents@2.3.3: optional: true + fumadocs-core@15.6.1(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + '@formatjs/intl-localematcher': 0.6.2 + '@orama/orama': 3.1.18 + '@shikijs/rehype': 3.21.0 + '@shikijs/transformers': 3.21.0 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.3 + hast-util-to-jsx-runtime: 2.3.6 + image-size: 2.0.2 + negotiator: 1.0.0 + npm-to-yarn: 3.0.1 + react-remove-scroll: 2.7.2(@types/react@19.2.9)(react@19.2.3) + remark: 15.0.1 + remark-gfm: 4.0.1 + remark-rehype: 11.1.2 + scroll-into-view-if-needed: 3.1.0 + shiki: 3.21.0 + unist-util-visit: 5.1.0 + optionalDependencies: + '@types/react': 19.2.9 + next: 15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + transitivePeerDependencies: + - supports-color + + fumadocs-mdx@11.6.10(fumadocs-core@15.6.1(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@6.4.1(@types/node@24.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)): + dependencies: + '@mdx-js/mdx': 3.1.1 + '@standard-schema/spec': 1.1.0 + chokidar: 4.0.3 + esbuild: 0.27.2 + estree-util-value-to-estree: 3.5.0 + fumadocs-core: 15.6.1(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + js-yaml: 4.1.1 + lru-cache: 11.2.5 + picocolors: 1.1.1 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + unist-util-visit: 5.1.0 + zod: 3.25.76 + optionalDependencies: + next: 15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + vite: 6.4.1(@types/node@24.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) + transitivePeerDependencies: + - supports-color + + fumadocs-typescript@4.0.14(@types/react@19.2.9)(fumadocs-core@15.6.1(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(fumadocs-ui@15.6.1(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18))(typescript@5.9.3): + dependencies: + estree-util-value-to-estree: 3.5.0 + fumadocs-core: 15.6.1(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + hast-util-to-estree: 3.1.3 + hast-util-to-jsx-runtime: 2.3.6 + remark: 15.0.1 + remark-rehype: 11.1.2 + tinyglobby: 0.2.15 + ts-morph: 27.0.2 + typescript: 5.9.3 + unist-util-visit: 5.1.0 + optionalDependencies: + '@types/react': 19.2.9 + fumadocs-ui: 15.6.1(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18) + transitivePeerDependencies: + - supports-color + + fumadocs-ui@15.6.1(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18): + dependencies: + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-direction': 1.1.1(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-slot': 1.2.4(@types/react@19.2.9)(react@19.2.3) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.9))(@types/react@19.2.9)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + class-variance-authority: 0.7.1 + fumadocs-core: 15.6.1(@types/react@19.2.9)(next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + lodash.merge: 4.6.2 + next-themes: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + postcss-selector-parser: 7.1.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-medium-image-zoom: 5.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + scroll-into-view-if-needed: 3.1.0 + tailwind-merge: 3.4.0 + optionalDependencies: + '@types/react': 19.2.9 + next: 15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + tailwindcss: 4.1.18 + transitivePeerDependencies: + - '@oramacloud/client' + - '@types/react-dom' + - algoliasearch + - supports-color + function-bind@1.1.2: {} gensync@1.0.0-beta.2: {} @@ -12273,6 +14640,8 @@ snapshots: get-nonce@1.0.1: {} + get-own-enumerable-keys@1.0.0: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -12397,6 +14766,8 @@ snapshots: js-base64: 3.7.8 unicode-trie: 2.0.0 + graphql@16.12.0: {} + h3@1.15.5: dependencies: cookie-es: 1.2.2 @@ -12555,6 +14926,27 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + hast-util-to-html@9.0.5: dependencies: '@types/hast': 3.0.4 @@ -12589,6 +14981,26 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + hast-util-to-parse5@8.0.0: dependencies: '@types/hast': 3.0.4 @@ -12624,6 +15036,8 @@ snapshots: he@1.2.0: {} + headers-polyfill@4.0.3: {} + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 @@ -12638,6 +15052,11 @@ snapshots: dependencies: lru-cache: 6.0.0 + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + optional: true + html-escaper@2.0.2: {} html-escaper@3.0.3: {} @@ -12668,6 +15087,14 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + optional: true + http2-wrapper@1.0.3: dependencies: quick-lru: 5.1.1 @@ -12680,6 +15107,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@6.2.1: + dependencies: + agent-base: 7.1.3 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 @@ -12715,6 +15149,8 @@ snapshots: ignore@5.3.2: {} + image-size@2.0.2: {} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 @@ -12748,6 +15184,8 @@ snapshots: inline-style-parser@0.2.4: {} + inline-style-parser@0.2.7: {} + ipaddr.js@1.9.1: {} iron-webcrypto@1.2.1: {} @@ -12801,12 +15239,21 @@ snapshots: dependencies: is-docker: 3.0.0 + is-interactive@2.0.0: {} + + is-node-process@1.2.0: {} + is-number@7.0.0: {} + is-obj@3.0.0: {} + is-path-inside@3.0.3: {} is-plain-obj@4.1.0: {} + is-potential-custom-element-name@1.0.1: + optional: true + is-promise@4.0.0: {} is-reference@3.0.3: @@ -12814,10 +15261,14 @@ snapshots: '@types/estree': 1.0.8 optional: true + is-regexp@3.1.0: {} + is-stream@2.0.1: {} is-stream@3.0.0: {} + is-unicode-supported@1.3.0: {} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -12870,6 +15321,8 @@ snapshots: jiti@2.4.2: {} + jiti@2.6.1: {} + jju@1.4.0: {} jose@6.1.3: {} @@ -12892,6 +15345,34 @@ snapshots: dependencies: argparse: 2.0.1 + jsdom@26.1.0: + dependencies: + cssstyle: 4.6.0 + data-urls: 5.0.0 + 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 + nwsapi: 2.2.23 + parse5: 7.3.0 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.19.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + optional: true + jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -12949,36 +15430,69 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lightningcss-android-arm64@1.30.2: + optional: true + lightningcss-darwin-arm64@1.30.1: optional: true + lightningcss-darwin-arm64@1.30.2: + optional: true + lightningcss-darwin-x64@1.30.1: optional: true + lightningcss-darwin-x64@1.30.2: + optional: true + lightningcss-freebsd-x64@1.30.1: optional: true + lightningcss-freebsd-x64@1.30.2: + optional: true + lightningcss-linux-arm-gnueabihf@1.30.1: optional: true + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + lightningcss-linux-arm64-gnu@1.30.1: optional: true + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + lightningcss-linux-arm64-musl@1.30.1: optional: true + lightningcss-linux-arm64-musl@1.30.2: + optional: true + lightningcss-linux-x64-gnu@1.30.1: optional: true + lightningcss-linux-x64-gnu@1.30.2: + optional: true + lightningcss-linux-x64-musl@1.30.1: optional: true + lightningcss-linux-x64-musl@1.30.2: + optional: true + lightningcss-win32-arm64-msvc@1.30.1: optional: true + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + lightningcss-win32-x64-msvc@1.30.1: optional: true + lightningcss-win32-x64-msvc@1.30.2: + optional: true + lightningcss@1.30.1: dependencies: detect-libc: 2.1.2 @@ -12994,6 +15508,22 @@ snapshots: lightningcss-win32-arm64-msvc: 1.30.1 lightningcss-win32-x64-msvc: 1.30.1 + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -13061,6 +15591,11 @@ snapshots: lodash@4.17.21: {} + log-symbols@5.1.0: + dependencies: + chalk: 5.6.2 + is-unicode-supported: 1.3.0 + log-update@6.1.0: dependencies: ansi-escapes: 7.0.0 @@ -13092,6 +15627,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.2.5: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -13100,6 +15637,10 @@ snapshots: dependencies: yallist: 4.0.0 + lucide-react@0.525.0(react@19.2.3): + dependencies: + react: 19.2.3 + lz-string@1.5.0: {} macho-unsign@2.0.6: {} @@ -13139,7 +15680,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 mdast-util-directive@3.0.0: dependencies: @@ -13639,6 +16180,10 @@ snapshots: min-indent@1.0.1: {} + minimatch@10.1.1: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + minimatch@3.0.8: dependencies: brace-expansion: 2.0.2 @@ -13651,6 +16196,10 @@ snapshots: dependencies: brace-expansion: 2.0.2 + minimatch@7.4.6: + dependencies: + brace-expansion: 2.0.2 + minimatch@8.0.4: dependencies: brace-expansion: 2.0.2 @@ -13677,6 +16226,8 @@ snapshots: dependencies: minipass: 7.1.2 + mkdirp@2.1.6: {} + mlly@1.7.4: dependencies: acorn: 8.15.0 @@ -13692,8 +16243,35 @@ snapshots: ms@2.1.3: {} + msw@2.12.7(@types/node@24.0.7)(typescript@5.9.3): + dependencies: + '@inquirer/confirm': 5.1.21(@types/node@24.0.7) + '@mswjs/interceptors': 0.40.0 + '@open-draft/deferred-promise': 2.2.0 + '@types/statuses': 2.0.6 + cookie: 1.1.1 + graphql: 16.12.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 + statuses: 2.0.2 + strict-event-emitter: 0.5.1 + tough-cookie: 6.0.0 + type-fest: 5.4.1 + until-async: 3.0.2 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@types/node' + muggle-string@0.4.1: {} + mute-stream@2.0.0: {} + mylas@2.1.13: {} nanoid@3.3.11: {} @@ -13713,6 +16291,62 @@ snapshots: neotraverse@0.6.18: {} + next-themes@0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + + next@15.5.9(@babel/core@7.27.1)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + '@next/env': 15.5.9 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001764 + postcss: 8.4.31 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + styled-jsx: 5.1.6(@babel/core@7.27.1)(react@19.2.3) + optionalDependencies: + '@next/swc-darwin-arm64': 15.5.7 + '@next/swc-darwin-x64': 15.5.7 + '@next/swc-linux-arm64-gnu': 15.5.7 + '@next/swc-linux-arm64-musl': 15.5.7 + '@next/swc-linux-x64-gnu': 15.5.7 + '@next/swc-linux-x64-musl': 15.5.7 + '@next/swc-win32-arm64-msvc': 15.5.7 + '@next/swc-win32-x64-msvc': 15.5.7 + '@opentelemetry/api': 1.9.0 + '@playwright/test': 1.56.1 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + next@15.5.9(@babel/core@7.28.6)(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@next/env': 15.5.9 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001764 + postcss: 8.4.31 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.6(@babel/core@7.28.6)(react@18.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 15.5.7 + '@next/swc-darwin-x64': 15.5.7 + '@next/swc-linux-arm64-gnu': 15.5.7 + '@next/swc-linux-arm64-musl': 15.5.7 + '@next/swc-linux-x64-gnu': 15.5.7 + '@next/swc-linux-x64-musl': 15.5.7 + '@next/swc-win32-arm64-msvc': 15.5.7 + '@next/swc-win32-x64-msvc': 15.5.7 + '@opentelemetry/api': 1.9.0 + '@playwright/test': 1.56.1 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + optional: true + nlcst-to-string@4.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -13725,12 +16359,20 @@ snapshots: node-addon-api@1.7.2: optional: true + node-domexception@1.0.0: {} + node-fetch-native@1.6.7: {} node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + node-gyp-build@4.8.2: {} node-mock-http@1.0.4: {} @@ -13763,10 +16405,15 @@ snapshots: dependencies: path-key: 4.0.0 + npm-to-yarn@3.0.1: {} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 + nwsapi@2.2.23: + optional: true + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -13816,6 +16463,12 @@ snapshots: regex: 6.0.1 regex-recursion: 6.0.2 + oniguruma-to-es@4.3.4: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.0.1 + regex-recursion: 6.0.2 + open@9.1.0: dependencies: default-browser: 4.0.0 @@ -13832,6 +16485,20 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@6.3.1: + dependencies: + chalk: 5.6.2 + cli-cursor: 4.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 1.3.0 + log-symbols: 5.1.0 + stdin-discarder: 0.1.0 + strip-ansi: 7.1.2 + wcwidth: 1.0.1 + + outvariant@1.4.3: {} + p-cancelable@2.1.1: {} p-limit@3.1.0: @@ -13984,8 +16651,8 @@ snapshots: platformicons@7.0.5(react@18.3.1): dependencies: - '@types/node': 24.7.2 - '@types/react': 18.3.20 + '@types/node': 20.19.21 + '@types/react': 19.2.9 react: 18.3.1 playwright-core@1.56.1: {} @@ -14030,8 +16697,19 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-value-parser@4.2.0: {} + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -14166,6 +16844,15 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-dom@19.2.3(react@19.2.3): + dependencies: + react: 19.2.3 + scheduler: 0.27.0 + + react-icons@5.5.0(react@19.2.3): + dependencies: + react: 19.2.3 + react-is@16.13.1: {} react-is@17.0.2: {} @@ -14174,6 +16861,11 @@ snapshots: react-lifecycles-compat@3.0.4: {} + react-medium-image-zoom@5.4.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-refresh@0.17.0: {} react-remove-scroll-bar@2.3.8(@types/react@18.3.20)(react@18.3.1): @@ -14184,6 +16876,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + react-remove-scroll-bar@2.3.8(@types/react@19.2.9)(react@19.2.3): + dependencies: + react: 19.2.3 + react-style-singleton: 2.2.3(@types/react@19.2.9)(react@19.2.3) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.9 + react-remove-scroll@2.7.0(@types/react@18.3.20)(react@18.3.1): dependencies: react: 18.3.1 @@ -14195,6 +16895,28 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + react-remove-scroll@2.7.0(@types/react@19.2.9)(react@19.2.3): + dependencies: + react: 19.2.3 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.9)(react@19.2.3) + react-style-singleton: 2.2.3(@types/react@19.2.9)(react@19.2.3) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.9)(react@19.2.3) + use-sidecar: 1.1.3(@types/react@19.2.9)(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + + react-remove-scroll@2.7.2(@types/react@19.2.9)(react@19.2.3): + dependencies: + react: 19.2.3 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.9)(react@19.2.3) + react-style-singleton: 2.2.3(@types/react@19.2.9)(react@19.2.3) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.9)(react@19.2.3) + use-sidecar: 1.1.3(@types/react@19.2.9)(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.9 + react-router-dom@6.30.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@remix-run/router': 1.23.2 @@ -14215,6 +16937,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + react-style-singleton@2.2.3(@types/react@19.2.9)(react@19.2.3): + dependencies: + get-nonce: 1.0.1 + react: 19.2.3 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.9 + react-textarea-autosize@8.5.9(@types/react@18.3.20)(react@18.3.1): dependencies: '@babel/runtime': 7.27.1 @@ -14228,6 +16958,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + react@19.2.3: {} + read-config-file@6.3.2: dependencies: config-file-ts: 0.2.6 @@ -14263,6 +16995,14 @@ snapshots: readdirp@4.1.2: {} + recast@0.23.11: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + recma-build-jsx@1.0.0: dependencies: '@types/estree': 1.0.8 @@ -14416,6 +17156,15 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + remark@15.0.1: + dependencies: + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -14445,6 +17194,11 @@ snapshots: dependencies: lowercase-keys: 2.0.0 + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -14481,6 +17235,8 @@ snapshots: retry@0.12.0: {} + rettime@0.7.0: {} + reusify@1.0.4: {} rfdc@1.4.1: {} @@ -14544,6 +17300,9 @@ snapshots: transitivePeerDependencies: - supports-color + rrweb-cssom@0.8.0: + optional: true + run-applescript@5.0.0: dependencies: execa: 5.1.1 @@ -14568,10 +17327,21 @@ snapshots: sax@1.4.1: {} + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + optional: true + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 + scheduler@0.27.0: {} + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + semver-compare@1.0.0: optional: true @@ -14615,6 +17385,40 @@ snapshots: setprototypeof@1.2.0: {} + shadcn@2.10.0(@types/node@24.0.7)(typescript@5.9.3): + dependencies: + '@antfu/ni': 23.3.1 + '@babel/core': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.27.1) + '@modelcontextprotocol/sdk': 1.25.2(zod@3.25.76) + commander: 10.0.1 + cosmiconfig: 8.3.6(typescript@5.9.3) + deepmerge: 4.3.1 + diff: 8.0.3 + execa: 7.2.0 + fast-glob: 3.3.2 + fs-extra: 11.3.0 + https-proxy-agent: 6.2.1 + kleur: 4.1.5 + msw: 2.12.7(@types/node@24.0.7)(typescript@5.9.3) + node-fetch: 3.3.2 + ora: 6.3.1 + postcss: 8.5.6 + prompts: 2.4.2 + recast: 0.23.11 + stringify-object: 5.0.0 + ts-morph: 18.0.0 + tsconfig-paths: 4.2.0 + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) + transitivePeerDependencies: + - '@cfworker/json-schema' + - '@types/node' + - hono + - supports-color + - typescript + sharp@0.33.5: dependencies: color: 4.2.3 @@ -14703,14 +17507,14 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - shiki@3.15.0: + shiki@3.21.0: dependencies: - '@shikijs/core': 3.15.0 - '@shikijs/engine-javascript': 3.15.0 - '@shikijs/engine-oniguruma': 3.15.0 - '@shikijs/langs': 3.15.0 - '@shikijs/themes': 3.15.0 - '@shikijs/types': 3.15.0 + '@shikijs/core': 3.21.0 + '@shikijs/engine-javascript': 3.21.0 + '@shikijs/engine-oniguruma': 3.21.0 + '@shikijs/langs': 3.21.0 + '@shikijs/themes': 3.21.0 + '@shikijs/types': 3.21.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -14840,6 +17644,10 @@ snapshots: std-env@3.9.0: {} + stdin-discarder@0.1.0: + dependencies: + bl: 5.1.0 + stream-replace-string@2.0.0: {} streamx@2.22.0: @@ -14849,6 +17657,8 @@ snapshots: optionalDependencies: bare-events: 2.5.4 + strict-event-emitter@0.5.1: {} + string-argv@0.3.2: {} string-width@4.2.3: @@ -14882,6 +17692,12 @@ snapshots: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + stringify-object@5.0.0: + dependencies: + get-own-enumerable-keys: 1.0.0 + is-obj: 3.0.0 + is-regexp: 3.1.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -14890,6 +17706,8 @@ snapshots: dependencies: ansi-regex: 6.2.2 + strip-bom@3.0.0: {} + strip-final-newline@2.0.0: {} strip-final-newline@3.0.0: {} @@ -14906,14 +17724,37 @@ snapshots: stubborn-fs@1.2.5: {} + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + style-to-object@1.0.8: dependencies: inline-style-parser: 0.2.4 + styled-jsx@5.1.6(@babel/core@7.27.1)(react@19.2.3): + dependencies: + client-only: 0.0.1 + react: 19.2.3 + optionalDependencies: + '@babel/core': 7.27.1 + + styled-jsx@5.1.6(@babel/core@7.28.6)(react@18.3.1): + dependencies: + client-only: 0.0.1 + react: 18.3.1 + optionalDependencies: + '@babel/core': 7.28.6 + optional: true + stylis@4.2.0: {} sumchecker@3.0.1: @@ -14952,10 +17793,19 @@ snapshots: svg-parser@2.0.4: {} + symbol-tree@3.2.4: + optional: true + + tagged-tag@1.0.0: {} + tailwind-merge@3.3.0: {} + tailwind-merge@3.4.0: {} + tailwindcss@4.1.11: {} + tailwindcss@4.1.18: {} + tapable@2.2.2: {} tar-stream@2.2.0: @@ -15009,6 +17859,8 @@ snapshots: tiny-inflate@1.0.3: {} + tiny-invariant@1.3.3: {} + tiny-typed-emitter@2.1.0: {} tinybench@2.9.0: {} @@ -15031,6 +17883,20 @@ snapshots: titleize@3.0.0: {} + tldts-core@6.1.86: + optional: true + + tldts-core@7.0.19: {} + + tldts@6.1.86: + dependencies: + tldts-core: 6.1.86 + optional: true + + tldts@7.0.19: + dependencies: + tldts-core: 7.0.19 + tmp-promise@3.0.3: dependencies: tmp: 0.2.5 @@ -15045,8 +17911,22 @@ snapshots: totalist@3.0.1: {} + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.86 + optional: true + + tough-cookie@6.0.0: + dependencies: + tldts: 7.0.19 + tr46@0.0.3: {} + tr46@5.1.1: + dependencies: + punycode: 2.3.1 + optional: true + tree-kill@1.2.2: {} trim-lines@3.0.1: {} @@ -15061,6 +17941,21 @@ snapshots: dependencies: typescript: 5.9.2 + ts-morph@18.0.0: + dependencies: + '@ts-morph/common': 0.19.0 + code-block-writer: 12.0.0 + + ts-morph@26.0.0: + dependencies: + '@ts-morph/common': 0.27.0 + code-block-writer: 13.0.3 + + ts-morph@27.0.2: + dependencies: + '@ts-morph/common': 0.28.1 + code-block-writer: 13.0.3 + tsc-alias@1.8.16: dependencies: chokidar: 3.6.0 @@ -15075,6 +17970,12 @@ snapshots: optionalDependencies: typescript: 5.9.2 + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + tslib@2.8.1: {} tsx@4.20.3: @@ -15114,6 +18015,8 @@ snapshots: tw-animate-css@1.3.5: {} + tw-animate-css@1.4.0: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -15127,6 +18030,10 @@ snapshots: type-fest@4.41.0: {} + type-fest@5.4.1: + dependencies: + tagged-tag: 1.0.0 + type-is@2.0.1: dependencies: content-type: 1.0.5 @@ -15139,6 +18046,8 @@ snapshots: typescript@5.9.2: {} + typescript@5.9.3: {} + ufo@1.6.1: {} ufo@1.6.3: {} @@ -15151,9 +18060,10 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.14.0: {} + undici-types@7.16.0: + optional: true - undici-types@7.16.0: {} + undici-types@7.8.0: {} unicode-properties@1.4.1: dependencies: @@ -15206,7 +18116,7 @@ snapshots: unist-util-remove-position@5.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-visit: 5.0.0 + unist-util-visit: 5.1.0 unist-util-stringify-position@4.0.0: dependencies: @@ -15232,6 +18142,12 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + universalify@0.1.2: {} universalify@2.0.1: {} @@ -15256,6 +18172,8 @@ snapshots: ofetch: 1.5.1 ufo: 1.6.1 + until-async@3.0.2: {} + untildify@4.0.0: {} update-browserslist-db@1.1.3(browserslist@4.24.4): @@ -15281,6 +18199,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + use-callback-ref@1.3.3(@types/react@19.2.9)(react@19.2.3): + dependencies: + react: 19.2.3 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.9 + use-composed-ref@1.4.0(@types/react@18.3.20)(react@18.3.1): dependencies: react: 18.3.1 @@ -15308,6 +18233,14 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + use-sidecar@1.1.3(@types/react@19.2.9)(react@19.2.3): + dependencies: + detect-node-es: 1.1.0 + react: 19.2.3 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.9 + usehooks-ts@2.16.0(react@18.3.1): dependencies: lodash.debounce: 4.0.8 @@ -15349,14 +18282,14 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@0.34.6(@types/node@24.7.2)(lightningcss@1.30.1)(terser@5.43.1): + vite-node@0.34.6(@types/node@20.19.21)(lightningcss@1.30.2)(terser@5.43.1): dependencies: cac: 6.7.14 debug: 4.4.3 mlly: 1.7.4 pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.21(@types/node@24.7.2)(lightningcss@1.30.1)(terser@5.43.1) + vite: 5.4.21(@types/node@20.19.21)(lightningcss@1.30.2)(terser@5.43.1) transitivePeerDependencies: - '@types/node' - less @@ -15368,7 +18301,7 @@ snapshots: - supports-color - terser - vite-plugin-dts@4.5.4(@types/node@22.15.28)(rollup@4.53.3)(typescript@5.9.2)(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1)): + vite-plugin-dts@4.5.4(@types/node@22.15.28)(rollup@4.53.3)(typescript@5.9.2)(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1)): dependencies: '@microsoft/api-extractor': 7.52.8(@types/node@22.15.28) '@rollup/pluginutils': 5.3.0(rollup@4.53.3) @@ -15381,7 +18314,7 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.2 optionalDependencies: - vite: 5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1) + vite: 5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1) transitivePeerDependencies: - '@types/node' - rollup @@ -15389,7 +18322,7 @@ snapshots: vite-plugin-electron@0.29.0: {} - vite-plugin-inspect@0.7.42(rollup@4.53.3)(vite@6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)): + vite-plugin-inspect@0.7.42(rollup@4.53.3)(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.1.2(rollup@4.53.3) @@ -15399,23 +18332,34 @@ snapshots: open: 9.1.0 picocolors: 1.1.0 sirv: 2.0.4 - vite: 6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) transitivePeerDependencies: - rollup - supports-color - vite-plugin-svgr@3.3.0(rollup@4.53.3)(typescript@5.9.2)(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1)): + vite-plugin-svgr@3.3.0(rollup@4.53.3)(typescript@5.9.2)(vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1)): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.53.3) '@svgr/core': 8.1.0(typescript@5.9.2) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.2)) - vite: 5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1) + vite: 5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1) transitivePeerDependencies: - rollup - supports-color - typescript - vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.1)(terser@5.43.1): + vite@5.4.21(@types/node@20.19.21)(lightningcss@1.30.2)(terser@5.43.1): + dependencies: + esbuild: 0.25.12 + postcss: 8.5.6 + rollup: 4.53.3 + optionalDependencies: + '@types/node': 20.19.21 + fsevents: 2.3.3 + lightningcss: 1.30.2 + terser: 5.43.1 + + vite@5.4.21(@types/node@22.15.28)(lightningcss@1.30.2)(terser@5.43.1): dependencies: esbuild: 0.25.12 postcss: 8.5.6 @@ -15423,21 +18367,28 @@ snapshots: optionalDependencies: '@types/node': 22.15.28 fsevents: 2.3.3 - lightningcss: 1.30.1 + lightningcss: 1.30.2 terser: 5.43.1 - vite@5.4.21(@types/node@24.7.2)(lightningcss@1.30.1)(terser@5.43.1): + vite@6.4.1(@types/node@24.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2): dependencies: esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 postcss: 8.5.6 rollup: 4.53.3 + tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.7.2 + '@types/node': 24.0.7 fsevents: 2.3.3 - lightningcss: 1.30.1 + jiti: 2.6.1 + lightningcss: 1.30.2 terser: 5.43.1 + tsx: 4.20.3 + yaml: 2.8.2 + optional: true - vite@6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2): + vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -15446,23 +18397,23 @@ snapshots: rollup: 4.53.3 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.1 + '@types/node': 25.0.10 fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.30.1 + jiti: 2.6.1 + lightningcss: 1.30.2 terser: 5.43.1 tsx: 4.20.3 yaml: 2.8.2 - vitefu@1.1.1(vite@6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)): + vitefu@1.1.1(vite@6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2)): optionalDependencies: - vite: 6.4.1(@types/node@24.10.1)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) + vite: 6.4.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.2) - vitest@0.34.6(happy-dom@20.0.2)(lightningcss@1.30.1)(playwright@1.56.1)(terser@5.43.1): + vitest@0.34.6(happy-dom@20.0.2)(jsdom@26.1.0)(lightningcss@1.30.2)(playwright@1.56.1)(terser@5.43.1): dependencies: '@types/chai': 4.3.20 '@types/chai-subset': 1.3.5 - '@types/node': 24.7.2 + '@types/node': 20.19.21 '@vitest/expect': 0.34.6 '@vitest/runner': 0.34.6 '@vitest/snapshot': 0.34.6 @@ -15481,11 +18432,12 @@ snapshots: strip-literal: 1.3.0 tinybench: 2.9.0 tinypool: 0.7.0 - vite: 5.4.21(@types/node@24.7.2)(lightningcss@1.30.1)(terser@5.43.1) - vite-node: 0.34.6(@types/node@24.7.2)(lightningcss@1.30.1)(terser@5.43.1) + vite: 5.4.21(@types/node@20.19.21)(lightningcss@1.30.2)(terser@5.43.1) + vite-node: 0.34.6(@types/node@20.19.21)(lightningcss@1.30.2)(terser@5.43.1) why-is-node-running: 2.3.0 optionalDependencies: happy-dom: 20.0.2 + jsdom: 26.1.0 playwright: 1.56.1 transitivePeerDependencies: - less @@ -15499,16 +18451,44 @@ snapshots: vscode-uri@3.0.8: {} + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + optional: true + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + web-namespaces@2.0.1: {} + web-streams-polyfill@3.3.3: {} + webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: + optional: true + webpack-sources@3.2.3: {} webpack-virtual-modules@0.5.0: {} + 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-url@14.2.0: + dependencies: + tr46: 5.1.1 + webidl-conversions: 7.0.0 + optional: true + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -15533,6 +18513,12 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -15553,8 +18539,17 @@ snapshots: wrappy@1.0.2: {} + ws@8.19.0: + optional: true + + xml-name-validator@5.0.0: + optional: true + xmlbuilder@15.1.1: {} + xmlchars@2.2.0: + optional: true + xtend@4.0.2: {} xxhash-wasm@1.1.0: {} @@ -15605,6 +18600,8 @@ snapshots: dependencies: yoctocolors: 2.1.2 + yoctocolors-cjs@2.1.3: {} + yoctocolors@2.1.2: {} zip-stream@4.1.1: @@ -15617,6 +18614,10 @@ snapshots: dependencies: zod: 3.25.76 + zod-to-json-schema@3.25.1(zod@3.25.76): + dependencies: + zod: 3.25.76 + zod-to-json-schema@3.25.1(zod@4.1.13): dependencies: zod: 4.1.13 diff --git a/turbo.json b/turbo.json index 34ef27f0..addaca1b 100644 --- a/turbo.json +++ b/turbo.json @@ -33,6 +33,11 @@ "dependsOn": ["build"], "cache": false, "persistent": true + }, + "registry:build": { + "dependsOn": ["^build"], + "outputs": ["public/r/**"], + "cache": false } }, "globalDependencies": ["biome.json", "tsconfig.json", "package.json"]