@aortl/admin-react 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdminRoot.d.ts +1 -1
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/Button.d.ts +7 -6
- package/dist/Button.d.ts.map +1 -1
- package/dist/ButtonGroup.d.ts +7 -1
- package/dist/ButtonGroup.d.ts.map +1 -1
- package/dist/Input.d.ts +1 -1
- package/dist/Input.d.ts.map +1 -1
- package/dist/Link.d.ts +21 -0
- package/dist/Link.d.ts.map +1 -0
- package/dist/Textarea.d.ts +15 -2
- package/dist/Textarea.d.ts.map +1 -1
- package/dist/admin.scoped.css +122 -1
- package/dist/hotkey-parse.d.ts +9 -6
- package/dist/hotkey-parse.d.ts.map +1 -1
- package/dist/hotkey-registry.d.ts +5 -4
- package/dist/hotkey-registry.d.ts.map +1 -1
- package/dist/index.cjs +104 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +105 -29
- package/dist/index.mjs.map +1 -1
- package/dist/portal-context.d.ts +7 -4
- package/dist/portal-context.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../src/cn.ts","../src/Accordion.tsx","../src/AdminRoot.tsx","../src/icon.ts","../src/Alert.tsx","../src/AppShell.tsx","../src/Badge.tsx","../src/BrandTile.tsx","../src/hotkey-parse.ts","../src/Kbd.tsx","../src/hotkey-registry.ts","../src/useHotkey.ts","../src/Button.tsx","../src/ButtonGroup.tsx","../src/Breadcrumbs.tsx","../src/Input.tsx","../src/FileInput.tsx","../src/InputGroup.tsx","../src/Indicator.tsx","../src/Pagination.tsx","../src/Textarea.tsx","../src/Checkbox.tsx","../src/Radio.tsx","../src/Progress.tsx","../src/Spinner.tsx","../src/Switch.tsx","../src/portal-context.ts","../src/Select.tsx","../src/Container.tsx","../src/Card.tsx","../src/StatCard.tsx","../src/Dialog.tsx","../src/Field.tsx","../src/Footer.tsx","../src/Menu.tsx","../src/Navbar.tsx","../src/Tabs.tsx","../src/CodeBlock.tsx","../src/Tooltip.tsx","../src/PropertyList.tsx","../src/Table.tsx","../src/Sidebar.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\n\n/**\n * Every admin class name is prefixed so the bundle can coexist with a host\n * page's CSS without colliding on common names like `.btn` or `.card`. The\n * matching CSS lives in `@aortl/admin-css/admin.scoped.css` (built by\n * `wrap-scoped.mjs`), which carries the same prefix on every selector.\n */\nconst PREFIX = \"_ao-\";\n\nfunction prefixTokens(value: string): string {\n if (!value) return \"\";\n return value\n .split(/\\s+/)\n .filter(Boolean)\n .map((token) => `${PREFIX}${token}`)\n .join(\" \");\n}\n\nfunction join(...parts: Array<string | undefined>): string {\n return parts.filter(Boolean).join(\" \");\n}\n\n/**\n * className merger that preserves Base UI's render-prop className form.\n *\n * `base` carries admin's own classes (e.g. `[\"btn\", \"btn-primary\"]`) and is\n * always prefixed with `_ao-`. `className` is the consumer-supplied prop and\n * passes through verbatim — it lives in the caller's namespace.\n *\n * Base UI components accept `className: string | ((state) => string | undefined)`.\n * The function form has to be deferred until Base UI invokes it with the\n * component state.\n */\nexport function cn(base: ClassValue, className: string | undefined): string;\nexport function cn<TState>(\n base: ClassValue,\n className: (state: TState) => string | undefined,\n): (state: TState) => string;\nexport function cn<TState>(\n base: ClassValue,\n className: string | ((state: TState) => string | undefined) | undefined,\n): string | ((state: TState) => string);\nexport function cn<TState>(\n base: ClassValue,\n className: string | ((state: TState) => string | undefined) | undefined,\n): string | ((state: TState) => string) {\n const baseClasses = prefixTokens(clsx(base));\n if (typeof className === \"function\") {\n return (state) => join(baseClasses, className(state) ?? undefined);\n }\n return join(baseClasses, className);\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type AccordionProps = ComponentProps<\"div\">;\n\nfunction AccordionRoot({ className, ...rest }: AccordionProps) {\n return <div className={cn(\"accordion\", className)} {...rest} />;\n}\n\nexport type AccordionItemProps = ComponentProps<\"details\">;\n\nfunction AccordionItem({ className, ...rest }: AccordionItemProps) {\n return <details className={cn(\"accordion-item\", className)} {...rest} />;\n}\n\nexport type AccordionSummaryProps = ComponentProps<\"summary\">;\n\nfunction AccordionSummary({ className, ...rest }: AccordionSummaryProps) {\n return <summary className={cn(\"accordion-summary\", className)} {...rest} />;\n}\n\nexport type AccordionContentProps = ComponentProps<\"div\">;\n\nfunction AccordionContent({ className, ...rest }: AccordionContentProps) {\n return <div className={cn(\"accordion-content\", className)} {...rest} />;\n}\n\nexport const Accordion = Object.assign(AccordionRoot, {\n Item: AccordionItem,\n Summary: AccordionSummary,\n Content: AccordionContent,\n});\n","import type { CSSProperties, ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport interface AdminRootProps extends ComponentProps<\"div\"> {\n /**\n * Force a color scheme for this subtree. Sets `data-theme`, which flips the\n * semantic tokens and `color-scheme`. Omit to follow the OS preference.\n */\n theme?: \"light\" | \"dark\";\n /**\n * CSS color (e.g. `var(--color-purple-600)`) applied as `--color-system-accent`\n * to brand-shift the navbar + footer stripes and `<BrandTile>`. See\n * [Customize › System accent](https://digital-udvikling.github.io/admin-design-system/basics/customize/#system-accent).\n */\n systemAccent?: string;\n}\n\nexport function AdminRoot({ className, theme, systemAccent, style, ...rest }: AdminRootProps) {\n const rootStyle =\n systemAccent !== undefined\n ? ({ ...style, \"--color-system-accent\": systemAccent } as CSSProperties)\n : style;\n\n return (\n <div\n className={cn(\"admin-root\", className)}\n style={rootStyle}\n {...rest}\n {...(theme !== undefined && { \"data-theme\": theme })}\n />\n );\n}\n","import { createElement, isValidElement } from \"react\";\nimport type { ComponentType, ReactElement, ReactNode } from \"react\";\n\n/**\n * Props every icon component is expected to accept. Matches `@tabler/icons-react`\n * (size + standard SVG attributes), but loose enough to accept other libraries.\n */\nexport interface IconRenderProps {\n size?: number | string;\n \"aria-hidden\"?: boolean | \"true\" | \"false\";\n}\n\nexport type IconComponent = ComponentType<IconRenderProps>;\n\n/**\n * The value a component prop named `icon` will accept. Either:\n * - a component reference (`icon={IconHome}`) — rendered with `size=\"1em\" aria-hidden`,\n * - or an already-instantiated React element (`icon={<IconHome size={20} />}`) — rendered as-is.\n */\nexport type IconProp = IconComponent | ReactElement | null | undefined;\n\n/**\n * Render an `IconProp` to a React node, defaulting to `size=\"1em\" aria-hidden`\n * when given a component reference. The `\"1em\"` default makes SVG icons inherit\n * the host's `font-size`, matching how the Tabler webfont (`<i class=\"ti …\">`)\n * renders in the vanilla bundle — so both previews end up the same size.\n *\n * Anything that is not `null`/`undefined` and not already a React element is\n * treated as a component type — `createElement` accepts function components,\n * `forwardRef`s (e.g. `@tabler/icons-react`), `memo`, etc.\n */\nexport function renderIcon(icon: IconProp, size: number | string = \"1em\"): ReactNode {\n if (icon == null) return null;\n if (isValidElement(icon)) return icon;\n return createElement(icon as IconComponent, { size, \"aria-hidden\": true });\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport type AlertVariant = \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface AlertProps extends Omit<ComponentProps<\"div\">, \"title\"> {\n variant: AlertVariant;\n /** Leading icon. Rendered as the first child so the CSS grid kicks in. */\n icon?: IconProp;\n /** Renders as `<Alert.Title>`. */\n title?: ReactNode;\n /** Renders as `<Alert.Description>`. */\n description?: ReactNode;\n}\n\nfunction AlertRoot({\n variant,\n icon,\n title,\n description,\n className,\n role,\n children,\n ...rest\n}: AlertProps) {\n const defaultRole = variant === \"danger\" || variant === \"warning\" ? \"alert\" : \"status\";\n return (\n <div\n role={role ?? defaultRole}\n className={cn([\"alert\", `alert-${variant}`], className)}\n {...rest}\n >\n {renderIcon(icon)}\n {title !== undefined ? <AlertTitle>{title}</AlertTitle> : null}\n {description !== undefined ? <AlertDescription>{description}</AlertDescription> : null}\n {children}\n </div>\n );\n}\n\nexport type AlertTitleProps = ComponentProps<\"strong\">;\nfunction AlertTitle({ className, ...rest }: AlertTitleProps) {\n return <strong className={cn(\"alert-title\", className)} {...rest} />;\n}\n\nexport type AlertDescriptionProps = ComponentProps<\"p\">;\nfunction AlertDescription({ className, ...rest }: AlertDescriptionProps) {\n return <p className={cn(\"alert-description\", className)} {...rest} />;\n}\n\nexport const Alert = Object.assign(AlertRoot, {\n Title: AlertTitle,\n Description: AlertDescription,\n});\n","import { createContext, useContext, useMemo, useState } from \"react\";\nimport type { CSSProperties, ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"./cn\";\n\ninterface AppShellContextValue {\n mobileDrawerOpen: boolean;\n setMobileDrawerOpen: (open: boolean) => void;\n hasSidebar: boolean;\n}\n\nconst AppShellContext = createContext<AppShellContextValue | null>(null);\n\nexport function useAppShell(): AppShellContextValue | null {\n return useContext(AppShellContext);\n}\n\nexport interface AppShellProps extends ComponentProps<\"div\"> {\n hasSidebar?: boolean;\n hasFooter?: boolean;\n mobileDrawerOpen?: boolean;\n defaultMobileDrawerOpen?: boolean;\n onMobileDrawerOpenChange?: (open: boolean) => void;\n /**\n * CSS color (e.g. `var(--color-purple-600)`) applied as `--color-system-accent`\n * to the shell root. See [Customize › System accent](https://digital-udvikling.github.io/admin-design-system/basics/customize/#system-accent).\n */\n systemAccent?: string;\n children?: ReactNode;\n}\n\nfunction AppShellRoot({\n hasSidebar = false,\n hasFooter = false,\n mobileDrawerOpen,\n defaultMobileDrawerOpen = false,\n onMobileDrawerOpenChange,\n systemAccent,\n className,\n style,\n children,\n ...rest\n}: AppShellProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultMobileDrawerOpen);\n const isControlled = mobileDrawerOpen !== undefined;\n const open = isControlled ? mobileDrawerOpen : uncontrolledOpen;\n\n const value = useMemo<AppShellContextValue>(\n () => ({\n mobileDrawerOpen: open,\n setMobileDrawerOpen: (next) => {\n if (!isControlled) setUncontrolledOpen(next);\n onMobileDrawerOpenChange?.(next);\n },\n hasSidebar,\n }),\n [open, isControlled, onMobileDrawerOpenChange, hasSidebar],\n );\n\n const rootStyle =\n systemAccent !== undefined\n ? ({ ...style, \"--color-system-accent\": systemAccent } as CSSProperties)\n : style;\n\n return (\n <AppShellContext.Provider value={value}>\n <div\n className={cn(\n [\n \"app-shell\",\n hasSidebar && \"app-shell-with-sidebar\",\n hasFooter && \"app-shell-with-footer\",\n ],\n className,\n )}\n style={rootStyle}\n {...rest}\n >\n {children}\n </div>\n </AppShellContext.Provider>\n );\n}\n\nexport type AppShellMainProps = ComponentProps<\"main\">;\n\nfunction AppShellMain({ className, ...rest }: AppShellMainProps) {\n return <main className={cn(\"app-shell-main\", className)} {...rest} />;\n}\n\nexport const AppShell = Object.assign(AppShellRoot, {\n Main: AppShellMain,\n});\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport type BadgeVariant = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\" | \"primary\";\nexport type BadgeSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface BadgeProps extends ComponentProps<\"span\"> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n /** Leading icon. */\n icon?: IconProp;\n}\n\nexport function Badge({\n variant = \"neutral\",\n size = \"md\",\n icon,\n className,\n children,\n ...rest\n}: BadgeProps) {\n return (\n <span\n className={cn(\n [\"badge\", variant !== \"neutral\" && `badge-${variant}`, size !== \"md\" && `badge-${size}`],\n className,\n )}\n {...rest}\n >\n {renderIcon(icon, size === \"sm\" ? 10 : 12)}\n {children}\n </span>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport interface BrandTileProps extends ComponentProps<\"span\"> {\n /** 1–2 letter monogram. Ignored if `icon` is provided. */\n monogram?: string;\n /** Icon component or element. Takes precedence over `monogram`. */\n icon?: IconProp;\n}\n\nexport function BrandTile({ monogram, icon, className, children, ...rest }: BrandTileProps) {\n return (\n <span className={cn(\"brand-tile\", className)} aria-hidden {...rest}>\n {icon ? renderIcon(icon, 14) : (children ?? monogram)}\n </span>\n );\n}\n","/**\n * Pure helpers for the hotkey system. Chord syntax: `<mod>+<mod>+…+<key>`\n *\n * Examples: `mod+s`, `shift+?`, `escape`, `mod+shift+k`, `arrowup`.\n *\n * Modifiers are case-insensitive. `mod` is an alias for `ctrl` on every\n * platform — display and binding both render as `Ctrl`. The key is whatever\n * `KeyboardEvent.key` produces, lowercased. So pressing `shift+/` (which\n * yields `event.key === \"?\"`) is canonically `shift+?` — match it by\n * binding either `\"shift+?\"`.\n */\n\nexport type Modifier = \"ctrl\" | \"shift\" | \"alt\" | \"meta\";\n\nexport interface ParsedChord {\n mods: ReadonlySet<Modifier>;\n key: string;\n}\n\nconst MOD_ORDER: readonly Modifier[] = [\"ctrl\", \"shift\", \"alt\", \"meta\"];\n\nfunction tokenToMod(token: string): Modifier | null {\n switch (token) {\n case \"mod\":\n case \"ctrl\":\n case \"control\":\n return \"ctrl\";\n case \"shift\":\n return \"shift\";\n case \"alt\":\n return \"alt\";\n case \"meta\":\n return \"meta\";\n default:\n return null;\n }\n}\n\nexport function parseChord(input: string): ParsedChord {\n const tokens = input\n .trim()\n .toLowerCase()\n .split(\"+\")\n .map((t) => t.trim())\n .filter(Boolean);\n if (tokens.length === 0) {\n throw new Error(`Invalid hotkey: empty string`);\n }\n const mods = new Set<Modifier>();\n let key: string | null = null;\n for (const token of tokens) {\n const mod = tokenToMod(token);\n if (mod !== null) {\n mods.add(mod);\n continue;\n }\n if (key !== null) {\n throw new Error(`Invalid hotkey \"${input}\": multiple non-modifier keys`);\n }\n key = token;\n }\n if (key === null) {\n throw new Error(`Invalid hotkey \"${input}\": missing key`);\n }\n return { mods, key };\n}\n\nexport function parseKeys(keys: string | readonly string[]): ParsedChord[] {\n const list = typeof keys === \"string\" ? [keys] : keys;\n return list.map(parseChord);\n}\n\n/** Canonical wire form used as a map key in the registry. */\nexport function canonicalize(chord: ParsedChord): string {\n const parts: string[] = [];\n for (const mod of MOD_ORDER) {\n if (chord.mods.has(mod)) parts.push(mod);\n }\n parts.push(chord.key);\n return parts.join(\"+\");\n}\n\n/**\n * Normalize a keyboard event to its canonical chord string. Returns `null`\n * if the event is a bare modifier press (`Shift` by itself, etc.) so callers\n * can short-circuit before a map lookup.\n */\nexport function normalizeEvent(e: KeyboardEvent): string | null {\n const key = e.key.toLowerCase();\n if (key === \"control\" || key === \"shift\" || key === \"alt\" || key === \"meta\") {\n return null;\n }\n const mods = new Set<Modifier>();\n if (e.ctrlKey) mods.add(\"ctrl\");\n if (e.shiftKey) mods.add(\"shift\");\n if (e.altKey) mods.add(\"alt\");\n if (e.metaKey) mods.add(\"meta\");\n return canonicalize({ mods, key });\n}\n\nconst SPECIAL_KEY_LABELS: Record<string, string> = {\n escape: \"Esc\",\n esc: \"Esc\",\n enter: \"Enter\",\n return: \"Enter\",\n tab: \"Tab\",\n \" \": \"Space\",\n space: \"Space\",\n arrowup: \"↑\",\n arrowdown: \"↓\",\n arrowleft: \"←\",\n arrowright: \"→\",\n backspace: \"Backspace\",\n delete: \"Del\",\n};\n\nconst MOD_LABELS: Record<Modifier, string> = {\n ctrl: \"Ctrl\",\n shift: \"Shift\",\n alt: \"Alt\",\n meta: \"Meta\",\n};\n\n/** Visual chips for a chord — one entry per modifier and the final key. */\nexport function formatChord(chord: ParsedChord): string[] {\n const parts: string[] = [];\n for (const mod of MOD_ORDER) {\n if (chord.mods.has(mod)) parts.push(MOD_LABELS[mod]);\n }\n const special = SPECIAL_KEY_LABELS[chord.key];\n if (special !== undefined) {\n parts.push(special);\n } else if (chord.key.length === 1) {\n parts.push(chord.key.toUpperCase());\n } else {\n parts.push(chord.key.charAt(0).toUpperCase() + chord.key.slice(1));\n }\n return parts;\n}\n\nconst ARIA_MOD_LABELS: Record<Modifier, string> = {\n ctrl: \"Control\",\n shift: \"Shift\",\n alt: \"Alt\",\n meta: \"Meta\",\n};\n\nfunction toAriaPart(chord: ParsedChord): string {\n const parts: string[] = [];\n for (const mod of MOD_ORDER) {\n if (chord.mods.has(mod)) parts.push(ARIA_MOD_LABELS[mod]);\n }\n parts.push(chord.key.length === 1 ? chord.key.toUpperCase() : chord.key);\n return parts.join(\"+\");\n}\n\n/**\n * Serialize one or more chords to the `aria-keyshortcuts` format\n * (space-separated alternatives, modifiers as `Control`/`Shift`/etc.).\n */\nexport function toAriaKeyShortcuts(chords: readonly ParsedChord[]): string {\n return chords.map(toAriaPart).join(\" \");\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { formatChord, parseKeys } from \"./hotkey-parse\";\n\nexport interface KbdProps extends Omit<ComponentProps<\"span\">, \"children\"> {\n /**\n * Hotkey chord(s) to render as styled `<kbd>` chips. Same syntax as the\n * `hotkey` prop / `useHotkey` (e.g. `\"mod+s\"`, `\"shift+?\"`, `\"escape\"`).\n * When multiple alternatives are passed, only the first is rendered —\n * matches platform menu convention of showing the primary binding.\n */\n keys?: string | readonly string[];\n /** Literal text rendered as a single chip — for inline use in tooltips/prose. */\n children?: string;\n}\n\n/**\n * Visual representation of a keyboard shortcut. Two shapes:\n *\n * ```tsx\n * <Kbd keys=\"mod+s\" /> // parsed: <Ctrl><S> in a .kbd-group\n * <Kbd>Esc</Kbd> // literal: single <kbd>Esc</kbd>\n * ```\n *\n * Render outside of action surfaces (tooltips, help dialogs) or inside them\n * via the `hotkey` prop on `<Button>` / `<Menu.Item>`.\n */\nexport function Kbd({ keys, children, className, ...rest }: KbdProps) {\n if (keys != null) {\n const chord = parseKeys(keys)[0];\n if (!chord) {\n return null;\n }\n const parts = formatChord(chord);\n return (\n <span className={cn(\"kbd-group\", className)} {...rest}>\n {parts.map((part, i) => (\n <kbd key={`${i}-${part}`} className={cn(\"kbd\", undefined)}>\n {part}\n </kbd>\n ))}\n </span>\n );\n }\n return (\n <kbd className={cn(\"kbd\", className)} {...rest}>\n {children}\n </kbd>\n );\n}\n","import type { RefObject } from \"react\";\nimport { normalizeEvent } from \"./hotkey-parse\";\n\n/**\n * Module-level keyboard shortcut registry. One window keydown listener,\n * attached on first registration and detached when the registry empties.\n *\n * On keydown:\n * 1. Normalize the event to a canonical chord string.\n * 2. Look up the bucket. Skip if empty.\n * 3. Apply input suppression — bare-key chords are skipped while focus is\n * in an editable element, except for `escape`.\n * 4. `preventDefault()`, then invoke every surviving handler (bag semantics).\n */\n\nexport type HotkeyHandler = (e: KeyboardEvent) => void;\n\nexport interface HotkeyEntry {\n handlerRef: RefObject<HotkeyHandler>;\n}\n\nconst registry = new Map<string, Set<HotkeyEntry>>();\nlet listenerAttached = false;\n\nfunction ensureListener(): void {\n if (listenerAttached || typeof window === \"undefined\") return;\n window.addEventListener(\"keydown\", dispatch);\n listenerAttached = true;\n}\n\nfunction maybeDetachListener(): void {\n if (!listenerAttached || typeof window === \"undefined\") return;\n if (registry.size > 0) return;\n window.removeEventListener(\"keydown\", dispatch);\n listenerAttached = false;\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n const tag = target.tagName;\n return tag === \"INPUT\" || tag === \"TEXTAREA\";\n}\n\nfunction dispatch(e: KeyboardEvent): void {\n const chord = normalizeEvent(e);\n if (chord === null) return;\n const bucket = registry.get(chord);\n if (!bucket || bucket.size === 0) return;\n\n // Input suppression: bare-key chords (no `+`) are silent while focused in\n // an editable element. `escape` is always allowed to fire so dialogs can\n // close even from a focused input.\n if (isEditableTarget(e.target) && !chord.includes(\"+\") && chord !== \"escape\") return;\n\n e.preventDefault();\n for (const entry of bucket) {\n entry.handlerRef.current?.(e);\n }\n}\n\n/**\n * Register a hotkey entry under each of its canonical chord strings.\n * Returns an unregister function that removes the entry from every bucket\n * and detaches the listener if the registry is empty.\n */\nexport function register(canonicalChords: readonly string[], entry: HotkeyEntry): () => void {\n for (const chord of canonicalChords) {\n let bucket = registry.get(chord);\n if (!bucket) {\n bucket = new Set();\n registry.set(chord, bucket);\n }\n bucket.add(entry);\n }\n ensureListener();\n return () => {\n for (const chord of canonicalChords) {\n const bucket = registry.get(chord);\n if (!bucket) continue;\n bucket.delete(entry);\n if (bucket.size === 0) registry.delete(chord);\n }\n maybeDetachListener();\n };\n}\n\n/** Test-only: empty the registry and detach the listener. */\nexport function __resetRegistry(): void {\n registry.clear();\n maybeDetachListener();\n}\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { canonicalize, parseKeys, toAriaKeyShortcuts } from \"./hotkey-parse\";\nimport { register, type HotkeyEntry, type HotkeyHandler } from \"./hotkey-registry\";\n\nexport interface HotkeyOptions {\n /** When false, the binding is not registered. Defaults to true. */\n enabled?: boolean;\n}\n\nexport interface HotkeyInfo {\n /**\n * Pre-serialized `aria-keyshortcuts` attribute value (e.g. `\"Control+S\"`).\n * Undefined when `keys` is nullish. Apply to the element that owns the\n * binding so screen readers announce the shortcut alongside the name.\n */\n ariaKeyShortcuts: string | undefined;\n /**\n * Canonical form of the first alternative — feed to `<Kbd keys={primaryChord} />`\n * to render the matching visual chip. Undefined when `keys` is nullish.\n */\n primaryChord: string | undefined;\n /** All canonical chord strings, used internally for registration. */\n canonicalChords: readonly string[];\n}\n\n/**\n * Register a keyboard shortcut. The handler is latched in a ref internally so\n * callers don't need to memoize it. Passing nullish `keys` is a no-op, so\n * the hook is safe to call unconditionally from components that may or may\n * not have a binding (e.g. the `hotkey` prop on `<Button>`).\n *\n * @example\n * useHotkey(\"mod+s\", save);\n * useHotkey([\"mod+s\", \"mod+enter\"], save, { enabled: !isLoading });\n *\n * Returns derived strings for rendering — see {@link HotkeyInfo}.\n */\nexport function useHotkey(\n keys: string | readonly string[] | null | undefined,\n handler: HotkeyHandler,\n options?: HotkeyOptions,\n): HotkeyInfo {\n const enabled = options?.enabled ?? true;\n const handlerRef = useRef<HotkeyHandler>(handler);\n handlerRef.current = handler;\n\n // Reduce `keys` to a stable string ID; downstream deps key off this so\n // re-renders with the same logical bindings don't re-register. Nullish\n // collapses to `\"\"` which downstream treats as \"no binding\".\n const keyId = keys == null ? \"\" : Array.isArray(keys) ? keys.join(\"|\") : (keys as string);\n\n const derived = useMemo<HotkeyInfo>(() => {\n if (keyId === \"\") {\n return { canonicalChords: [], ariaKeyShortcuts: undefined, primaryChord: undefined };\n }\n const parsed = parseKeys(keys as string | readonly string[]);\n const cans = parsed.map(canonicalize);\n return {\n canonicalChords: cans,\n ariaKeyShortcuts: toAriaKeyShortcuts(parsed),\n primaryChord: cans[0],\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [keyId]);\n\n useEffect(() => {\n if (!enabled || derived.canonicalChords.length === 0) return;\n const entry: HotkeyEntry = { handlerRef };\n return register(derived.canonicalChords, entry);\n }, [derived, enabled]);\n\n return derived;\n}\n","import { Button as BaseButton } from \"@base-ui/react/button\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\nimport { Kbd } from \"./Kbd\";\nimport { useHotkey } from \"./useHotkey\";\n\nexport type ButtonVariant = \"default\" | \"primary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ComponentProps<typeof BaseButton> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n fullWidth?: boolean;\n /** Shows a spinner in place of the leading icon and disables interaction.\n * Sets `aria-busy=\"true\"` and the native `disabled` attribute. */\n loading?: boolean;\n /** Leading icon. Pass a component (`icon={IconPlus}`) or an element. */\n icon?: IconProp;\n /** Trailing icon. Pass a component (`iconTrailing={IconArrowRight}`) or an element. */\n iconTrailing?: IconProp;\n /**\n * Keyboard shortcut bound to this button. Pressing the chord invokes the\n * button's `onClick` handler — not a real DOM click, so `type=\"submit\"`\n * form submission and other native side effects only happen if `onClick`\n * triggers them itself. Same syntax as `useHotkey`. Pass an array for\n * alternatives — only the first is rendered as a visual chip.\n */\n hotkey?: string | readonly string[];\n}\n\nexport function Button({\n variant = \"default\",\n size = \"md\",\n fullWidth,\n loading,\n icon,\n iconTrailing,\n hotkey,\n className,\n type = \"button\",\n disabled,\n children,\n onClick,\n ...rest\n}: ButtonProps) {\n type OnClickEvent = Parameters<NonNullable<typeof onClick>>[0];\n const { ariaKeyShortcuts, primaryChord } = useHotkey(\n hotkey,\n (e) => onClick?.(e as unknown as OnClickEvent),\n { enabled: !disabled && !loading },\n );\n\n const iconOnly = children == null && (icon != null || iconTrailing != null);\n\n return (\n <BaseButton\n onClick={onClick}\n type={type}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n aria-keyshortcuts={ariaKeyShortcuts}\n className={cn(\n [\n \"btn\",\n variant !== \"default\" && `btn-${variant}`,\n size !== \"md\" && `btn-${size}`,\n fullWidth && \"btn-full-width\",\n loading && \"btn-loading\",\n iconOnly && \"btn-square\",\n ],\n className,\n )}\n {...rest}\n >\n {loading ? null : renderIcon(icon)}\n {children}\n {renderIcon(iconTrailing)}\n {primaryChord !== undefined ? <Kbd keys={primaryChord} /> : null}\n </BaseButton>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type ButtonGroupOrientation = \"horizontal\" | \"vertical\";\n\nexport interface ButtonGroupProps extends ComponentProps<\"div\"> {\n orientation?: ButtonGroupOrientation;\n}\n\nexport function ButtonGroup({\n orientation = \"horizontal\",\n role = \"group\",\n className,\n ...rest\n}: ButtonGroupProps) {\n return (\n <div\n role={role}\n className={cn([\"btn-group\", orientation === \"vertical\" && \"btn-group-vertical\"], className)}\n {...rest}\n />\n );\n}\n","import { Children, Fragment, isValidElement, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport interface BreadcrumbsProps extends ComponentProps<\"nav\"> {\n /** Custom separator between items. Defaults to \"/\" from CSS. */\n separator?: ReactNode;\n /** Accessible label for the nav landmark. */\n \"aria-label\"?: string;\n}\n\nfunction BreadcrumbsRoot({\n separator,\n className,\n children,\n \"aria-label\": ariaLabel = \"Breadcrumb\",\n ...rest\n}: BreadcrumbsProps) {\n const items = Children.toArray(children).filter(isValidElement);\n return (\n <nav aria-label={ariaLabel} className={cn(\"breadcrumbs\", className)} {...rest}>\n <ol>\n {items.map((child, i) => (\n <Fragment key={child.key ?? i}>\n {child}\n {i < items.length - 1 ? <BreadcrumbSeparator>{separator}</BreadcrumbSeparator> : null}\n </Fragment>\n ))}\n </ol>\n </nav>\n );\n}\n\ntype BreadcrumbItemAsLink = ComponentProps<\"a\"> & {\n href: string;\n current?: boolean;\n icon?: IconProp;\n};\ntype BreadcrumbItemAsSpan = ComponentProps<\"span\"> & {\n href?: undefined;\n current?: boolean;\n icon?: IconProp;\n};\n\nexport type BreadcrumbItemProps = BreadcrumbItemAsLink | BreadcrumbItemAsSpan;\n\nfunction BreadcrumbItem(props: BreadcrumbItemProps) {\n if (props.href !== undefined) {\n const { className, current, icon, children, ...rest } = props;\n return (\n <li>\n <a\n className={cn(\"breadcrumb-item\", className)}\n aria-current={current ? \"page\" : undefined}\n {...rest}\n >\n {renderIcon(icon, 14)}\n {children}\n </a>\n </li>\n );\n }\n const { className, current, icon, children, ...rest } = props;\n return (\n <li>\n <span\n className={cn(\"breadcrumb-item\", className)}\n aria-current={current ? \"page\" : undefined}\n {...rest}\n >\n {renderIcon(icon, 14)}\n {children}\n </span>\n </li>\n );\n}\n\nexport type BreadcrumbSeparatorProps = ComponentProps<\"li\">;\n\n// `role=\"presentation\"` so the separator doesn't get announced as a list item;\n// `<li>` so the markup is valid inside `<ol>`.\nfunction BreadcrumbSeparator({ className, children, ...rest }: BreadcrumbSeparatorProps) {\n return (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"breadcrumb-separator\", className)}\n {...rest}\n >\n {children}\n </li>\n );\n}\n\nexport const Breadcrumbs = Object.assign(BreadcrumbsRoot, {\n Item: BreadcrumbItem,\n Separator: BreadcrumbSeparator,\n});\n","import { Input as BaseInput } from \"@base-ui/react/input\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type InputVariant = \"bordered\" | \"ghost\" | \"danger\";\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\ntype BaseInputProps = Omit<ComponentProps<typeof BaseInput>, \"size\">;\n\nexport interface InputProps extends BaseInputProps {\n variant?: InputVariant;\n inputSize?: InputSize;\n}\n\nexport function Input({\n variant = \"bordered\",\n inputSize = \"md\",\n className,\n type = \"text\",\n ...rest\n}: InputProps) {\n return (\n <BaseInput\n type={type}\n className={cn(\n [\n \"input\",\n variant !== \"bordered\" && `input-${variant}`,\n inputSize !== \"md\" && `input-${inputSize}`,\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n","import { Input as BaseInput } from \"@base-ui/react/input\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type FileInputVariant = \"bordered\" | \"ghost\" | \"danger\";\nexport type FileInputSize = \"sm\" | \"md\" | \"lg\";\n\ntype BaseInputProps = Omit<ComponentProps<typeof BaseInput>, \"size\" | \"type\">;\n\nexport interface FileInputProps extends BaseInputProps {\n variant?: FileInputVariant;\n inputSize?: FileInputSize;\n}\n\nexport function FileInput({\n variant = \"bordered\",\n inputSize = \"md\",\n className,\n ...rest\n}: FileInputProps) {\n return (\n <BaseInput\n type=\"file\"\n className={cn(\n [\n \"file-input\",\n variant !== \"bordered\" && `file-input-${variant}`,\n inputSize !== \"md\" && `file-input-${inputSize}`,\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type InputGroupProps = ComponentProps<\"div\">;\n\nfunction InputGroupRoot({ className, ...rest }: InputGroupProps) {\n return <div className={cn(\"input-group\", className)} {...rest} />;\n}\n\nexport type InputGroupAddonProps = ComponentProps<\"span\">;\n\nfunction InputGroupAddon({ className, ...rest }: InputGroupAddonProps) {\n return <span className={cn(\"input-group-addon\", className)} {...rest} />;\n}\n\nexport const InputGroup = Object.assign(InputGroupRoot, {\n Addon: InputGroupAddon,\n});\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { Badge, type BadgeSize, type BadgeVariant } from \"./Badge\";\nimport { cn } from \"./cn\";\nimport type { IconProp } from \"./icon\";\n\nexport type IndicatorVertical = \"top\" | \"middle\" | \"bottom\";\nexport type IndicatorHorizontal = \"start\" | \"center\" | \"end\";\nexport type IndicatorPlacement = `${IndicatorVertical}-${IndicatorHorizontal}`;\n\nexport interface IndicatorProps {\n /** Badge content (count, \"!\", text). Omit for a label-less status dot. */\n label?: ReactNode;\n /** Variant for both the badge and the dot. Defaults to `\"neutral\"`. */\n variant?: BadgeVariant;\n /** Badge size. Ignored when rendering a dot. Defaults to `\"sm\"`. */\n size?: BadgeSize;\n /** Leading icon for the badge. Implies the badge form (no dot fallback). */\n icon?: IconProp;\n /** Where the indicator sits relative to children. Default `\"top-end\"`. */\n placement?: IndicatorPlacement;\n /**\n * Pulls the indicator toward the anchor's center along the placement direction.\n * Useful for rounded anchors so the indicator aligns with the visual corner —\n * e.g. `offset={4}` for a `rounded-md` button. Pixels.\n */\n offset?: number;\n /** className on the outer `.indicator` wrapper. */\n className?: string;\n /** Accessible label for the indicator — required when rendering a dot. */\n \"aria-label\"?: string;\n /** The anchor element the indicator floats on. */\n children?: ReactNode;\n}\n\nexport function Indicator({\n label,\n variant = \"neutral\",\n size = \"sm\",\n icon,\n placement = \"top-end\",\n offset,\n className,\n \"aria-label\": ariaLabel,\n children,\n}: IndicatorProps) {\n const [vertical, horizontal] = placement.split(\"-\") as [IndicatorVertical, IndicatorHorizontal];\n const placementClasses = [\n \"indicator-item\",\n vertical !== \"top\" && `indicator-${vertical}`,\n horizontal !== \"end\" && `indicator-${horizontal}`,\n ];\n const hasContent = label !== undefined || icon !== undefined;\n const style =\n offset !== undefined ? ({ \"--indicator-offset\": `${offset}px` } as CSSProperties) : undefined;\n return (\n <div className={cn(\"indicator\", className)} style={style}>\n {hasContent ? (\n <Badge\n className={cn(placementClasses, undefined)}\n variant={variant}\n size={size}\n icon={icon}\n aria-label={ariaLabel}\n >\n {label}\n </Badge>\n ) : (\n <span\n className={cn(\n [\n ...placementClasses,\n \"indicator-dot\",\n variant !== \"neutral\" && `indicator-dot-${variant}`,\n ],\n undefined,\n )}\n role={ariaLabel !== undefined ? \"status\" : undefined}\n aria-label={ariaLabel}\n />\n )}\n {children}\n </div>\n );\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport type PaginationItem =\n | { type: \"page\"; page: number; selected: boolean }\n | { type: \"previous\"; page: number; disabled: boolean }\n | { type: \"next\"; page: number; disabled: boolean }\n | { type: \"ellipsis\"; key: \"start\" | \"end\" };\n\nexport interface PaginationProps extends Omit<ComponentProps<\"nav\">, \"onChange\"> {\n /** Current page, 1-based. */\n page: number;\n /** Total number of pages. */\n total: number;\n /** Called when a page number, prev, or next button is activated. */\n onPageChange: (page: number) => void;\n /** Pages shown either side of `page`. Default 1. */\n siblingCount?: number;\n /** Pages always shown at the start and end. Default 1. */\n boundaryCount?: number;\n /** Icon for the previous-page control. Defaults to a built-in chevron. */\n previousIcon?: IconProp;\n /** Icon for the next-page control. Defaults to a built-in chevron. */\n nextIcon?: IconProp;\n /** Override the renderer for one item — useful for routing libraries that\n * expect their own Link component (Next.js, TanStack Router, etc.). */\n renderItem?: (item: PaginationItem) => ReactNode;\n}\n\n/**\n * Compute the items to render for a given `page` / `total`. Always returns:\n * previous, ...numbers/ellipses, next\n * with `boundaryCount` items on each end and `siblingCount` items around `page`.\n * Pure: no React state, safe to call during render.\n */\nexport function getPaginationItems({\n page,\n total,\n siblingCount = 1,\n boundaryCount = 1,\n}: {\n page: number;\n total: number;\n siblingCount?: number;\n boundaryCount?: number;\n}): PaginationItem[] {\n if (total <= 0) {\n return [\n { type: \"previous\", page: 1, disabled: true },\n { type: \"next\", page: 1, disabled: true },\n ];\n }\n const clampedPage = Math.min(Math.max(1, page), total);\n const items: PaginationItem[] = [];\n items.push({ type: \"previous\", page: clampedPage - 1, disabled: clampedPage === 1 });\n\n const startPages = range(1, Math.min(boundaryCount, total));\n const endPages = range(Math.max(total - boundaryCount + 1, boundaryCount + 1), total);\n\n const siblingsStart = Math.max(\n Math.min(clampedPage - siblingCount, total - boundaryCount - siblingCount * 2 - 1),\n boundaryCount + 2,\n );\n const siblingsEnd = Math.min(\n Math.max(clampedPage + siblingCount, boundaryCount + siblingCount * 2 + 2),\n endPages.length > 0 ? (endPages[0] as number) - 2 : total - 1,\n );\n\n const middle: (number | \"ellipsis-start\" | \"ellipsis-end\")[] = [];\n // Start ellipsis (or extra page when gap is exactly 1)\n if (siblingsStart > boundaryCount + 2) {\n middle.push(\"ellipsis-start\");\n } else if (boundaryCount + 1 < total - boundaryCount) {\n middle.push(boundaryCount + 1);\n }\n\n middle.push(...range(siblingsStart, siblingsEnd));\n\n // End ellipsis (or extra page when gap is exactly 1)\n if (siblingsEnd < total - boundaryCount - 1) {\n middle.push(\"ellipsis-end\");\n } else if (total - boundaryCount > boundaryCount) {\n middle.push(total - boundaryCount);\n }\n\n const seen = new Set<number>();\n const pushNumber = (n: number) => {\n if (n < 1 || n > total || seen.has(n)) return;\n seen.add(n);\n items.push({ type: \"page\", page: n, selected: n === clampedPage });\n };\n\n for (const n of startPages) pushNumber(n);\n for (const entry of middle) {\n if (entry === \"ellipsis-start\") {\n items.push({ type: \"ellipsis\", key: \"start\" });\n } else if (entry === \"ellipsis-end\") {\n items.push({ type: \"ellipsis\", key: \"end\" });\n } else {\n pushNumber(entry);\n }\n }\n for (const n of endPages) pushNumber(n);\n\n items.push({ type: \"next\", page: clampedPage + 1, disabled: clampedPage === total });\n return items;\n}\n\nfunction range(start: number, end: number): number[] {\n if (end < start) return [];\n const out: number[] = [];\n for (let i = start; i <= end; i++) out.push(i);\n return out;\n}\n\nexport function Pagination({\n page,\n total,\n onPageChange,\n siblingCount = 1,\n boundaryCount = 1,\n previousIcon,\n nextIcon,\n renderItem,\n className,\n \"aria-label\": ariaLabel = \"Pagination\",\n ...rest\n}: PaginationProps) {\n const items = getPaginationItems({ page, total, siblingCount, boundaryCount });\n const prev = previousIcon !== undefined ? renderIcon(previousIcon, 16) : <ChevronLeftIcon />;\n const next = nextIcon !== undefined ? renderIcon(nextIcon, 16) : <ChevronRightIcon />;\n return (\n <nav aria-label={ariaLabel} className={cn(\"pagination\", className)} {...rest}>\n <ul>\n {items.map((item, i) => (\n <li key={paginationItemKey(item, i)} className={cn(\"page-item\", undefined)}>\n {renderItem ? renderItem(item) : defaultRender(item, onPageChange, prev, next)}\n </li>\n ))}\n </ul>\n </nav>\n );\n}\n\nfunction ChevronLeftIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M15 6l-6 6 6 6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M9 6l6 6-6 6\" />\n </svg>\n );\n}\n\nfunction paginationItemKey(item: PaginationItem, index: number): string {\n switch (item.type) {\n case \"previous\":\n return \"previous\";\n case \"next\":\n return \"next\";\n case \"ellipsis\":\n return `ellipsis-${item.key}`;\n case \"page\":\n return `page-${item.page}`;\n default:\n return `${index}`;\n }\n}\n\nfunction defaultRender(\n item: PaginationItem,\n onPageChange: (n: number) => void,\n prev: ReactNode,\n next: ReactNode,\n): ReactNode {\n switch (item.type) {\n case \"previous\":\n return (\n <button\n type=\"button\"\n className={cn(\"page-link\", undefined)}\n aria-label=\"Previous page\"\n aria-disabled={item.disabled || undefined}\n disabled={item.disabled}\n onClick={() => onPageChange(item.page)}\n >\n {prev}\n </button>\n );\n case \"next\":\n return (\n <button\n type=\"button\"\n className={cn(\"page-link\", undefined)}\n aria-label=\"Next page\"\n aria-disabled={item.disabled || undefined}\n disabled={item.disabled}\n onClick={() => onPageChange(item.page)}\n >\n {next}\n </button>\n );\n case \"ellipsis\":\n return (\n <span className={cn(\"page-ellipsis\", undefined)} aria-hidden=\"true\">\n …\n </span>\n );\n case \"page\":\n return (\n <button\n type=\"button\"\n className={cn([\"page-link\", item.selected && \"active\"], undefined)}\n aria-current={item.selected ? \"page\" : undefined}\n aria-label={`Page ${item.page}`}\n onClick={() => onPageChange(item.page)}\n >\n {item.page}\n </button>\n );\n }\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type TextareaVariant = \"bordered\" | \"ghost\" | \"danger\";\nexport type TextareaSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface TextareaProps extends Omit<ComponentProps<\"textarea\">, \"size\"> {\n variant?: TextareaVariant;\n textareaSize?: TextareaSize;\n}\n\nexport function Textarea({\n variant = \"bordered\",\n textareaSize = \"md\",\n className,\n ...rest\n}: TextareaProps) {\n return (\n <textarea\n className={cn(\n [\n \"textarea\",\n variant !== \"bordered\" && `textarea-${variant}`,\n textareaSize !== \"md\" && `textarea-${textareaSize}`,\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n","import { Checkbox as BaseCheckbox } from \"@base-ui/react/checkbox\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type CheckboxProps = ComponentProps<typeof BaseCheckbox.Root>;\n\nfunction CheckboxRoot({ className, children, ...rest }: CheckboxProps) {\n return (\n <BaseCheckbox.Root className={cn(\"checkbox\", className)} {...rest}>\n {children ?? (\n <CheckboxIndicator>\n <CheckIcon />\n </CheckboxIndicator>\n )}\n </BaseCheckbox.Root>\n );\n}\n\nexport type CheckboxIndicatorProps = ComponentProps<typeof BaseCheckbox.Indicator>;\n\nfunction CheckboxIndicator({ className, ...rest }: CheckboxIndicatorProps) {\n return <BaseCheckbox.Indicator className={cn(\"checkbox-indicator\", className)} {...rest} />;\n}\n\nfunction CheckIcon() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width=\"100%\"\n height=\"100%\"\n aria-hidden\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nexport const Checkbox = Object.assign(CheckboxRoot, {\n Indicator: CheckboxIndicator,\n});\n","import { Radio as BaseRadio } from \"@base-ui/react/radio\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type RadioProps = ComponentProps<typeof BaseRadio.Root>;\n\nfunction RadioRoot({ className, children, ...rest }: RadioProps) {\n return (\n <BaseRadio.Root className={cn(\"radio\", className)} {...rest}>\n {children ?? <RadioIndicator />}\n </BaseRadio.Root>\n );\n}\n\nexport type RadioIndicatorProps = ComponentProps<typeof BaseRadio.Indicator>;\n\nfunction RadioIndicator({ className, ...rest }: RadioIndicatorProps) {\n return <BaseRadio.Indicator className={cn(\"radio-indicator\", className)} {...rest} />;\n}\n\nexport const Radio = Object.assign(RadioRoot, {\n Indicator: RadioIndicator,\n});\n\nexport type RadioGroupOrientation = \"horizontal\" | \"vertical\";\n\nexport interface RadioGroupProps extends ComponentProps<typeof BaseRadioGroup> {\n orientation?: RadioGroupOrientation;\n}\n\nexport function RadioGroup({ orientation = \"horizontal\", className, ...rest }: RadioGroupProps) {\n return (\n <BaseRadioGroup\n className={cn(\n [\"radio-group\", orientation === \"vertical\" && \"radio-group-vertical\"],\n className,\n )}\n {...rest}\n />\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type ProgressVariant = \"primary\" | \"success\" | \"warning\" | \"danger\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps extends Omit<ComponentProps<\"progress\">, \"value\"> {\n /** Current value in `[0, max]`. Omit (or pass `undefined`) for an indeterminate bar. */\n value?: number;\n max?: number;\n variant?: ProgressVariant;\n size?: ProgressSize;\n}\n\nexport function Progress({\n value,\n max = 100,\n variant = \"primary\",\n size = \"md\",\n className,\n ...rest\n}: ProgressProps) {\n return (\n <progress\n value={value}\n max={max}\n className={cn(\n [\n \"progress\",\n variant !== \"primary\" && `progress-${variant}`,\n size !== \"md\" && `progress-${size}`,\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SpinnerProps extends ComponentProps<\"output\"> {\n size?: SpinnerSize;\n /** Accessible label announced by screen readers. Defaults to \"Loading\". */\n label?: string;\n}\n\n// `<output>` has an implicit `role=\"status\"`, so screen readers announce the\n// `aria-label` politely when the spinner appears. Pure CSS handles the visual.\nexport function Spinner({ size = \"md\", label = \"Loading\", className, ...rest }: SpinnerProps) {\n return (\n <output\n aria-label={label}\n className={cn([\"spinner\", size !== \"md\" && `spinner-${size}`], className)}\n {...rest}\n />\n );\n}\n","import { Switch as BaseSwitch } from \"@base-ui/react/switch\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type SwitchProps = ComponentProps<typeof BaseSwitch.Root>;\n\nfunction SwitchRoot({ className, children, ...rest }: SwitchProps) {\n return (\n <BaseSwitch.Root className={cn(\"switch\", className)} {...rest}>\n {children ?? <SwitchThumb />}\n </BaseSwitch.Root>\n );\n}\n\nexport type SwitchThumbProps = ComponentProps<typeof BaseSwitch.Thumb>;\n\nfunction SwitchThumb({ className, ...rest }: SwitchThumbProps) {\n return <BaseSwitch.Thumb className={cn(\"switch-thumb\", className)} {...rest} />;\n}\n\nexport const Switch = Object.assign(SwitchRoot, {\n Thumb: SwitchThumb,\n});\n","import { createContext, type RefObject } from \"react\";\n\n/**\n * Container that Base UI popups (Select, Tooltip, etc.) should portal into.\n * When a `<Dialog>` ancestor publishes its `<dialog>` element through this\n * context, popups render inside that top-layer dialog so they paint above\n * the backdrop and escape its `overflow: hidden`. Outside a dialog the\n * context is null and popups portal to `document.body` as before.\n */\nexport const PortalContainerContext = createContext<RefObject<HTMLElement | null> | null>(null);\n","import { Select as BaseSelect } from \"@base-ui/react/select\";\nimport { useContext, type ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { PortalContainerContext } from \"./portal-context\";\n\nexport type SelectProps = ComponentProps<typeof BaseSelect.Root>;\n\nfunction SelectRoot(props: SelectProps) {\n return <BaseSelect.Root {...props} />;\n}\n\nexport type SelectTriggerVariant = \"bordered\" | \"ghost\" | \"danger\";\nexport type SelectTriggerSize = \"sm\" | \"md\" | \"lg\";\n\ntype BaseSelectTriggerProps = Omit<ComponentProps<typeof BaseSelect.Trigger>, \"size\">;\n\nexport interface SelectTriggerProps extends BaseSelectTriggerProps {\n variant?: SelectTriggerVariant;\n triggerSize?: SelectTriggerSize;\n}\n\nfunction SelectTrigger({\n variant = \"bordered\",\n triggerSize = \"md\",\n className,\n ...rest\n}: SelectTriggerProps) {\n return (\n <BaseSelect.Trigger\n className={cn(\n [\n \"select\",\n variant !== \"bordered\" && `select-${variant}`,\n triggerSize !== \"md\" && `select-${triggerSize}`,\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n\nexport type SelectValueProps = ComponentProps<typeof BaseSelect.Value>;\n\nfunction SelectValue(props: SelectValueProps) {\n return <BaseSelect.Value {...props} />;\n}\n\nexport type SelectIconProps = ComponentProps<typeof BaseSelect.Icon>;\n\nfunction SelectIcon({ className, children, ...rest }: SelectIconProps) {\n return (\n <BaseSelect.Icon className={cn(\"select-icon\", className)} {...rest}>\n {children ?? <ChevronDownIcon />}\n </BaseSelect.Icon>\n );\n}\n\nexport interface SelectPopupProps extends ComponentProps<typeof BaseSelect.Popup> {\n sideOffset?: number;\n}\n\nfunction SelectPopup({ className, sideOffset = 4, children, ...rest }: SelectPopupProps) {\n const portalContainer = useContext(PortalContainerContext);\n return (\n <BaseSelect.Portal container={portalContainer ?? undefined}>\n {/*\n * `alignItemWithTrigger={false}` opts out of Base UI's macOS-style\n * alignment (selected item overlaid on the trigger, popup expanding\n * both directions). Standard web dropdown placement — below the\n * trigger — is what readers expect on admin surfaces, and the macOS\n * mode collapses the parent dialog's flex layout when used inside\n * `<Dialog>`.\n */}\n <BaseSelect.Positioner sideOffset={sideOffset} alignItemWithTrigger={false}>\n <BaseSelect.Popup className={cn(\"select-popup\", className)} {...rest}>\n {children}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n );\n}\n\nexport type SelectItemProps = ComponentProps<typeof BaseSelect.Item>;\n\nfunction SelectItem({ className, ...rest }: SelectItemProps) {\n return <BaseSelect.Item className={cn(\"select-item\", className)} {...rest} />;\n}\n\nexport type SelectItemTextProps = ComponentProps<typeof BaseSelect.ItemText>;\n\nfunction SelectItemText(props: SelectItemTextProps) {\n return <BaseSelect.ItemText {...props} />;\n}\n\nexport type SelectItemIndicatorProps = ComponentProps<typeof BaseSelect.ItemIndicator>;\n\nfunction SelectItemIndicator({ className, children, ...rest }: SelectItemIndicatorProps) {\n return (\n <BaseSelect.ItemIndicator className={cn(\"select-item-indicator\", className)} {...rest}>\n {children ?? <CheckIcon />}\n </BaseSelect.ItemIndicator>\n );\n}\n\nexport type SelectGroupProps = ComponentProps<typeof BaseSelect.Group>;\n\nfunction SelectGroup(props: SelectGroupProps) {\n return <BaseSelect.Group {...props} />;\n}\n\nexport type SelectGroupLabelProps = ComponentProps<typeof BaseSelect.GroupLabel>;\n\nfunction SelectGroupLabel({ className, ...rest }: SelectGroupLabelProps) {\n return <BaseSelect.GroupLabel className={cn(\"select-group-label\", className)} {...rest} />;\n}\n\nfunction CheckIcon() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width=\"100%\"\n height=\"100%\"\n aria-hidden\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction ChevronDownIcon() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width=\"100%\"\n height=\"100%\"\n aria-hidden\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nexport const Select = Object.assign(SelectRoot, {\n Trigger: SelectTrigger,\n Value: SelectValue,\n Icon: SelectIcon,\n Popup: SelectPopup,\n Item: SelectItem,\n ItemText: SelectItemText,\n ItemIndicator: SelectItemIndicator,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n});\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type ContainerSize = \"sm\" | \"md\" | \"lg\" | \"fluid\";\n\nexport interface ContainerProps extends ComponentProps<\"div\"> {\n /** Width preset. `md` (default) ≈ 90rem; `fluid` removes the max-width. */\n size?: ContainerSize;\n /** Tighter vertical rhythm and block padding for dense screens. */\n compact?: boolean;\n}\n\n/**\n * Page content region: a centered, max-width column that also owns the\n * vertical gap between stacked sections. Place inside `<AppShell.Main>`,\n * which provides no padding of its own. Distinct from the `.Container`\n * escape hatch (e.g. `Card.Container`) — this is a standalone page region.\n */\nexport function Container({ size = \"md\", compact, className, ...rest }: ContainerProps) {\n return (\n <div\n className={cn(\n [\"container\", size !== \"md\" && `container-${size}`, compact && \"container-compact\"],\n className,\n )}\n {...rest}\n />\n );\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport type CardVariant =\n | \"default\"\n | \"muted\"\n | \"primary\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport interface CardContainerProps extends ComponentProps<\"div\"> {\n /** Tinted surface + matching border. Defaults to the neutral surface. */\n variant?: CardVariant;\n bordered?: boolean;\n compact?: boolean;\n}\n\n/**\n * The bare `.card` container — no body, no title. Use this when you need to\n * compose the internals yourself (e.g. a media block above the body).\n */\nfunction CardContainer({\n variant = \"default\",\n bordered,\n compact,\n className,\n ...rest\n}: CardContainerProps) {\n return (\n <div\n className={cn(\n [\n \"card\",\n variant !== \"default\" && `card-${variant}`,\n bordered && \"card-bordered\",\n compact && \"card-compact\",\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n\nexport interface CardProps extends Omit<ComponentProps<\"div\">, \"title\"> {\n /** Tinted surface + matching border. Defaults to the neutral surface. */\n variant?: CardVariant;\n bordered?: boolean;\n compact?: boolean;\n /** Leading icon for the title row. */\n icon?: IconProp;\n /** Renders as `<Card.Title>`. */\n title?: ReactNode;\n /** Renders as `<Card.Description>`. */\n description?: ReactNode;\n /** Trailing header controls (close, edit, …). Renders as `<Card.Toolbar>`. */\n toolbar?: ReactNode;\n /** Renders as `<Card.Actions>`. */\n actions?: ReactNode;\n}\n\n/**\n * Standard card: a `.card` container with a single `.card-body` that lays out\n * an optional title (with icon), description, children, and actions. For\n * anything outside that shape, use `<Card.Container>` and compose by hand.\n */\nfunction CardRoot({\n variant,\n bordered,\n compact,\n icon,\n title,\n description,\n toolbar,\n actions,\n className,\n children,\n ...rest\n}: CardProps) {\n const hasTitle = icon !== undefined || title !== undefined;\n const titleEl = hasTitle ? <CardTitle icon={icon}>{title}</CardTitle> : null;\n return (\n <CardContainer\n variant={variant}\n bordered={bordered}\n compact={compact}\n className={className}\n {...rest}\n >\n <CardBody>\n {toolbar !== undefined ? (\n <CardHeader>\n {titleEl}\n <CardToolbar>{toolbar}</CardToolbar>\n </CardHeader>\n ) : (\n titleEl\n )}\n {description !== undefined ? <CardDescription>{description}</CardDescription> : null}\n {children}\n {actions !== undefined ? <CardActions>{actions}</CardActions> : null}\n </CardBody>\n </CardContainer>\n );\n}\n\nexport type CardBodyProps = ComponentProps<\"div\">;\nfunction CardBody({ className, ...rest }: CardBodyProps) {\n return <div className={cn(\"card-body\", className)} {...rest} />;\n}\n\nexport type CardHeaderProps = ComponentProps<\"div\">;\nfunction CardHeader({ className, ...rest }: CardHeaderProps) {\n return <div className={cn(\"card-header\", className)} {...rest} />;\n}\n\nexport type CardToolbarProps = ComponentProps<\"div\">;\nfunction CardToolbar({ className, ...rest }: CardToolbarProps) {\n return <div className={cn(\"card-toolbar\", className)} {...rest} />;\n}\n\nexport interface CardTitleProps extends ComponentProps<\"h3\"> {\n /** Leading icon. */\n icon?: IconProp;\n}\nfunction CardTitle({ icon, className, children, ...rest }: CardTitleProps) {\n return (\n <h3 className={cn(\"card-title\", className)} {...rest}>\n {renderIcon(icon)}\n {children}\n </h3>\n );\n}\n\nexport type CardDescriptionProps = ComponentProps<\"p\">;\nfunction CardDescription({ className, ...rest }: CardDescriptionProps) {\n return <p className={cn(\"card-description\", className)} {...rest} />;\n}\n\nexport type CardActionsProps = ComponentProps<\"div\">;\nfunction CardActions({ className, ...rest }: CardActionsProps) {\n return <div className={cn(\"card-actions\", className)} {...rest} />;\n}\n\nexport const Card = Object.assign(CardRoot, {\n Container: CardContainer,\n Body: CardBody,\n Header: CardHeader,\n Toolbar: CardToolbar,\n Title: CardTitle,\n Description: CardDescription,\n Actions: CardActions,\n});\n","import type { ComponentProps, ReactNode } from \"react\";\nimport type { CardVariant } from \"./Card\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport interface StatCardProps extends Omit<ComponentProps<\"div\">, \"label\"> {\n /** Tinted surface + matching border, shared with `<Card>`. The value picks up the accent (except `warning`). Defaults to the neutral surface. */\n variant?: CardVariant;\n /** Small annotation above the value (e.g. \"Total Generations\"). */\n label?: ReactNode;\n /** The headline metric. Rendered with `tabular-nums` so digits don't shift between values. */\n value?: ReactNode;\n /** Subordinate line under the value (e.g. \"42 completed / 12 pending\"). */\n detail?: ReactNode;\n /** Leading icon in the label row. */\n icon?: IconProp;\n compact?: boolean;\n bordered?: boolean;\n}\n\n/**\n * Compact KPI tile — `label / value / detail`. Renders a `.card` shell (so it\n * shares the surface, border, radius, shadow, and every card modifier) with an\n * inverted inner hierarchy: the value dominates, the label is a small\n * annotation. `compact`/`bordered` map to the shared `.card-compact`/\n * `.card-bordered` modifiers. For free-form tiles, use `<Card>`; for\n * label/value tables, use `<PropertyList>`.\n */\nexport function StatCard({\n variant = \"default\",\n label,\n value,\n detail,\n icon,\n compact,\n bordered,\n className,\n children,\n ...rest\n}: StatCardProps) {\n const hasLabel = icon !== undefined || label !== undefined;\n return (\n <div\n className={cn(\n [\n \"card\",\n \"stat-card\",\n variant !== \"default\" && `card-${variant}`,\n compact && \"card-compact\",\n bordered && \"card-bordered\",\n ],\n className,\n )}\n {...rest}\n >\n {hasLabel ? (\n <p className={cn(\"stat-card-label\", undefined)}>\n {renderIcon(icon)}\n {label}\n </p>\n ) : null}\n {value !== undefined ? <p className={cn(\"stat-card-value\", undefined)}>{value}</p> : null}\n {detail !== undefined ? <p className={cn(\"stat-card-detail\", undefined)}>{detail}</p> : null}\n {children}\n </div>\n );\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useRef,\n type ComponentProps,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\nimport { PortalContainerContext } from \"./portal-context\";\n\nexport type DialogSize = \"sm\" | \"md\" | \"lg\";\nexport type DialogClosedBy = \"any\" | \"closerequest\" | \"none\";\n\ninterface DialogContextValue {\n close: () => void;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nfunction DefaultCloseIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport interface DialogContainerProps extends Omit<ComponentProps<\"dialog\">, \"open\"> {\n /** Controlled open state. Omit for uncontrolled (e.g. driven by Invoker Commands). */\n open?: boolean;\n /** Fires when the dialog closes (Esc, backdrop, close button, form method=\"dialog\"). */\n onOpenChange?: (open: boolean) => void;\n /** Width preset. Default: `\"md\"`. */\n size?: DialogSize;\n /**\n * Native `closedby` attribute. `\"any\"` allows Esc + backdrop click,\n * `\"closerequest\"` only Esc, `\"none\"` neither. Default: `\"any\"`.\n */\n closedby?: DialogClosedBy;\n}\n\n/**\n * The bare `<dialog>` primitive — no opinions about header, body, or footer.\n * Use this when the default `<Dialog>` layout doesn't fit (custom header,\n * media block, multi-step content).\n */\nfunction DialogContainer({\n open,\n onOpenChange,\n size = \"md\",\n closedby = \"any\",\n className,\n children,\n ...rest\n}: DialogContainerProps) {\n const ref = useRef<HTMLDialogElement | null>(null);\n const onOpenChangeRef = useRef(onOpenChange);\n onOpenChangeRef.current = onOpenChange;\n\n useEffect(() => {\n const el = ref.current;\n if (!el || open === undefined) return;\n if (open && !el.open) el.showModal();\n else if (!open && el.open) el.close();\n }, [open]);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const handleClose = () => onOpenChangeRef.current?.(false);\n el.addEventListener(\"close\", handleClose);\n return () => el.removeEventListener(\"close\", handleClose);\n }, []);\n\n const ctx: DialogContextValue = {\n close: () => ref.current?.close(),\n };\n\n return (\n <DialogContext.Provider value={ctx}>\n <PortalContainerContext.Provider value={ref}>\n <dialog\n ref={ref}\n className={cn([\"dialog\", size !== \"md\" && `dialog-${size}`], className)}\n closedby={closedby}\n {...rest}\n >\n {children}\n </dialog>\n </PortalContainerContext.Provider>\n </DialogContext.Provider>\n );\n}\n\nexport type DialogHeaderProps = ComponentProps<\"div\">;\n\nfunction DialogHeader({ className, ...rest }: DialogHeaderProps) {\n return <div className={cn(\"dialog-header\", className)} {...rest} />;\n}\n\nexport interface DialogTitleProps extends ComponentProps<\"h2\"> {\n /** Leading icon. */\n icon?: IconProp;\n}\n\nfunction DialogTitle({ icon, className, children, ...rest }: DialogTitleProps) {\n return (\n <h2 className={cn(\"dialog-title\", className)} {...rest}>\n {renderIcon(icon)}\n {children}\n </h2>\n );\n}\n\nexport type DialogDescriptionProps = ComponentProps<\"p\">;\n\nfunction DialogDescription({ className, ...rest }: DialogDescriptionProps) {\n return <p className={cn(\"dialog-description\", className)} {...rest} />;\n}\n\nexport type DialogBodyProps = ComponentProps<\"div\">;\n\nfunction DialogBody({ className, ...rest }: DialogBodyProps) {\n return <div className={cn(\"dialog-body\", className)} {...rest} />;\n}\n\nexport type DialogFooterProps = ComponentProps<\"div\">;\n\nfunction DialogFooter({ className, ...rest }: DialogFooterProps) {\n return <div className={cn(\"dialog-footer\", className)} {...rest} />;\n}\n\nexport interface DialogCloseButtonProps extends ComponentProps<\"button\"> {\n /** Override the default X icon. */\n icon?: IconProp;\n}\n\nfunction DialogCloseButton({\n icon,\n className,\n children,\n onClick,\n type = \"button\",\n \"aria-label\": ariaLabel = \"Close\",\n ...rest\n}: DialogCloseButtonProps) {\n const ctx = useContext(DialogContext);\n return (\n <button\n type={type}\n className={cn(\"dialog-close\", className)}\n aria-label={ariaLabel}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) ctx?.close();\n }}\n {...rest}\n >\n {children ?? (icon !== undefined ? renderIcon(icon) : <DefaultCloseIcon />)}\n </button>\n );\n}\n\nexport interface DialogProps extends Omit<DialogContainerProps, \"title\" | \"children\"> {\n /** Leading icon for the title row. */\n icon?: IconProp;\n /** Renders as `<Dialog.Title>`. */\n title?: ReactNode;\n /** Renders as `<Dialog.Description>`. */\n description?: ReactNode;\n /** Renders as `<Dialog.Footer>`. */\n actions?: ReactNode;\n /** Show the X close button in the header. Default: `true`. */\n dismissible?: boolean;\n /** aria-label for the close button. Default: `\"Close\"`. */\n closeLabel?: string;\n children?: ReactNode;\n}\n\n/**\n * Standard modal: a `<dialog>` with an opinionated header / body / footer\n * layout driven by shorthand props. For anything outside that shape, use\n * `<Dialog.Container>` and compose by hand.\n */\nfunction DialogRoot({\n icon,\n title,\n description,\n actions,\n dismissible = true,\n closeLabel = \"Close\",\n children,\n ...containerProps\n}: DialogProps) {\n const hasTitle = title !== undefined || icon !== undefined;\n const showHeader = hasTitle || dismissible;\n return (\n <DialogContainer {...containerProps}>\n {showHeader ? (\n <DialogHeader>\n {hasTitle ? (\n <DialogTitle icon={icon}>{title}</DialogTitle>\n ) : (\n <span className={cn(\"flex-1\", undefined)} />\n )}\n {dismissible ? <DialogCloseButton aria-label={closeLabel} /> : null}\n </DialogHeader>\n ) : null}\n {description !== undefined ? <DialogDescription>{description}</DialogDescription> : null}\n {children !== undefined ? <DialogBody>{children}</DialogBody> : null}\n {actions !== undefined ? <DialogFooter>{actions}</DialogFooter> : null}\n </DialogContainer>\n );\n}\n\nexport const Dialog = Object.assign(DialogRoot, {\n Container: DialogContainer,\n Header: DialogHeader,\n Title: DialogTitle,\n Description: DialogDescription,\n Body: DialogBody,\n Footer: DialogFooter,\n CloseButton: DialogCloseButton,\n});\n","import { Field as BaseField } from \"@base-ui/react/field\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"./cn\";\n\n/**\n * Thin wrappers around Base UI's Field primitives that apply the design\n * system's class names.\n */\n\nexport type FieldContainerProps = ComponentProps<typeof BaseField.Root>;\n\n/**\n * The bare `.field` container. Use this when the default layout doesn't fit —\n * multiple validity-keyed `<Field.Error>` messages, a control that needs to\n * sit between description and error, etc.\n */\nfunction FieldContainer({ className, ...rest }: FieldContainerProps) {\n return <BaseField.Root className={cn(\"field\", className)} {...rest} />;\n}\n\nexport interface FieldProps extends FieldContainerProps {\n /** Renders as `<Field.Label>`. */\n label?: ReactNode;\n /** Renders as `<Field.Description>`. */\n description?: ReactNode;\n /**\n * Single-message error. Renders as `<Field.Error match={true}>` — shown\n * whenever the contained control fails validation. For per-`ValidityState`\n * messages, use `<Field.Container>` and compose `<Field.Error>` directly.\n */\n error?: ReactNode;\n /** Marks the label with a red asterisk via `data-required`. */\n required?: boolean;\n /**\n * Inline layout — control sits beside its label rather than above it.\n * Pairs with switches and single checkboxes. Applies `.field-row`.\n */\n inline?: boolean;\n}\n\n/**\n * Standard field: a `.field` container that lays out an optional label, the\n * control passed as `children`, an optional description, and an optional\n * single-message error. For anything outside that shape, use\n * `<Field.Container>` and compose by hand.\n */\nfunction FieldRoot({\n label,\n description,\n error,\n required,\n inline,\n className,\n children,\n ...rest\n}: FieldProps) {\n const labelEl = label !== undefined ? <FieldLabel required={required}>{label}</FieldLabel> : null;\n const descriptionEl =\n description !== undefined ? <FieldDescription>{description}</FieldDescription> : null;\n const errorEl = error !== undefined ? <FieldError match={true}>{error}</FieldError> : null;\n return (\n <FieldContainer className={cn(inline && \"field-row\", className)} {...rest}>\n {inline ? (\n <>\n {children}\n {labelEl}\n </>\n ) : (\n <>\n {labelEl}\n {children}\n </>\n )}\n {descriptionEl}\n {errorEl}\n </FieldContainer>\n );\n}\n\nexport type FieldLabelProps = ComponentProps<typeof BaseField.Label> & {\n /** Renders a red asterisk after the label text via `data-required`. */\n required?: boolean;\n};\n\nfunction FieldLabel({ className, required, ...rest }: FieldLabelProps) {\n return (\n <BaseField.Label\n data-required={required ? \"\" : undefined}\n className={cn(\"field-label\", className)}\n {...rest}\n />\n );\n}\n\nexport type FieldDescriptionProps = ComponentProps<typeof BaseField.Description>;\n\nfunction FieldDescription({ className, ...rest }: FieldDescriptionProps) {\n return <BaseField.Description className={cn(\"field-description\", className)} {...rest} />;\n}\n\nexport type FieldErrorProps = ComponentProps<typeof BaseField.Error>;\n\nfunction FieldError({ className, ...rest }: FieldErrorProps) {\n return <BaseField.Error className={cn(\"field-error\", className)} {...rest} />;\n}\n\nexport const Field = Object.assign(FieldRoot, {\n Container: FieldContainer,\n Label: FieldLabel,\n Description: FieldDescription,\n Error: FieldError,\n});\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type FooterProps = ComponentProps<\"footer\">;\n\nfunction FooterRoot({ className, ...rest }: FooterProps) {\n return <footer className={cn(\"footer\", className)} {...rest} />;\n}\n\nexport type FooterLinksProps = ComponentProps<\"div\">;\n\nfunction FooterLinks({ className, ...rest }: FooterLinksProps) {\n return <div className={cn(\"footer-links\", className)} {...rest} />;\n}\n\nexport type FooterLinkProps = ComponentProps<\"a\">;\n\nfunction FooterLink({ className, children, ...rest }: FooterLinkProps) {\n return (\n <a className={cn(\"footer-link\", className)} {...rest}>\n {children}\n </a>\n );\n}\n\nexport type FooterMetaProps = ComponentProps<\"div\">;\n\nfunction FooterMeta({ className, ...rest }: FooterMetaProps) {\n return <div className={cn(\"footer-meta\", className)} {...rest} />;\n}\n\nexport const Footer = Object.assign(FooterRoot, {\n Links: FooterLinks,\n Link: FooterLink,\n Meta: FooterMeta,\n});\n","import { useRef, type ComponentProps, type Ref } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\nimport { Kbd } from \"./Kbd\";\nimport { useHotkey } from \"./useHotkey\";\n\nexport interface MenuProps extends ComponentProps<\"details\"> {}\n\nfunction MenuRoot({ className, ...rest }: MenuProps) {\n return <details className={cn(\"menu\", className)} {...rest} />;\n}\n\nexport type MenuTriggerProps = ComponentProps<\"summary\">;\n\nfunction MenuTrigger({ className, ...rest }: MenuTriggerProps) {\n return <summary className={cn(\"menu-trigger\", className)} {...rest} />;\n}\n\nexport type MenuPopupProps = ComponentProps<\"div\">;\n\nfunction MenuPopup({ className, role = \"menu\", ...rest }: MenuPopupProps) {\n return <div role={role} className={cn(\"menu-popup\", className)} {...rest} />;\n}\n\ninterface MenuItemHotkeyProp {\n /**\n * Keyboard shortcut bound to this item. Pressing the chord synthesizes a\n * click on this item. Right-pinned visually inside the menu row. Same\n * syntax as `useHotkey`.\n */\n hotkey?: string | readonly string[];\n}\n\ntype MenuItemAsButton = ComponentProps<\"button\"> &\n MenuItemHotkeyProp & { href?: undefined; icon?: IconProp };\ntype MenuItemAsLink = ComponentProps<\"a\"> & MenuItemHotkeyProp & { href: string; icon?: IconProp };\n\nexport type MenuItemProps = MenuItemAsButton | MenuItemAsLink;\n\nfunction MenuItem(props: MenuItemProps) {\n const ref = useRef<HTMLElement | null>(null);\n const hotkey = props.hotkey;\n\n const { ariaKeyShortcuts, primaryChord } = useHotkey(hotkey, () => ref.current?.click(), {\n enabled: !(\"disabled\" in props && props.disabled),\n });\n\n if (props.href !== undefined) {\n const { className, role = \"menuitem\", icon, children, hotkey: _hk, ...rest } = props;\n return (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n role={role}\n aria-keyshortcuts={ariaKeyShortcuts}\n className={cn(\"menu-item\", className)}\n {...rest}\n >\n {renderIcon(icon)}\n {children}\n {primaryChord !== undefined ? <Kbd keys={primaryChord} /> : null}\n </a>\n );\n }\n const {\n className,\n type = \"button\",\n role = \"menuitem\",\n icon,\n children,\n hotkey: _hk,\n ...rest\n } = props;\n return (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type={type}\n role={role}\n aria-keyshortcuts={ariaKeyShortcuts}\n className={cn(\"menu-item\", className)}\n {...rest}\n >\n {renderIcon(icon)}\n {children}\n {primaryChord !== undefined ? <Kbd keys={primaryChord} /> : null}\n </button>\n );\n}\n\nexport type MenuSeparatorProps = ComponentProps<\"hr\">;\n\nfunction MenuSeparator({ className, ...rest }: MenuSeparatorProps) {\n return <hr className={cn(\"menu-separator\", className)} {...rest} />;\n}\n\nexport type MenuGroupProps = ComponentProps<\"div\">;\n\nfunction MenuGroup({ className, role = \"group\", ...rest }: MenuGroupProps) {\n return <div role={role} className={cn(\"menu-group\", className)} {...rest} />;\n}\n\nexport type MenuGroupLabelProps = ComponentProps<\"div\">;\n\nfunction MenuGroupLabel({ className, ...rest }: MenuGroupLabelProps) {\n return <div className={cn(\"menu-group-label\", className)} {...rest} />;\n}\n\nexport const Menu = Object.assign(MenuRoot, {\n Trigger: MenuTrigger,\n Popup: MenuPopup,\n Item: MenuItem,\n Separator: MenuSeparator,\n Group: MenuGroup,\n GroupLabel: MenuGroupLabel,\n});\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { useAppShell } from \"./AppShell\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\nimport { Menu } from \"./Menu\";\n\nexport type NavbarProps = ComponentProps<\"header\">;\n\nfunction NavbarRoot({ className, ...rest }: NavbarProps) {\n return <header className={cn(\"navbar\", className)} {...rest} />;\n}\n\nexport type NavbarBrandProps = ComponentProps<\"div\">;\n\nfunction NavbarBrand({ className, ...rest }: NavbarBrandProps) {\n return <div className={cn(\"navbar-brand\", className)} {...rest} />;\n}\n\nexport type NavbarItemsProps = ComponentProps<\"nav\">;\n\nfunction NavbarItems({ className, ...rest }: NavbarItemsProps) {\n return <nav className={cn(\"navbar-items\", className)} {...rest} />;\n}\n\nexport interface NavbarItemProps extends ComponentProps<\"a\"> {\n active?: boolean;\n /** Leading icon. */\n icon?: IconProp;\n}\n\nfunction NavbarItem({ active, icon, className, children, ...rest }: NavbarItemProps) {\n return (\n <a\n className={cn(\"navbar-item\", className)}\n aria-current={active ? \"page\" : undefined}\n {...rest}\n >\n {renderIcon(icon)}\n {children}\n </a>\n );\n}\n\nexport interface NavbarDropdownProps extends Omit<ComponentProps<\"details\">, \"title\"> {\n /** Text shown in the trigger. */\n label: ReactNode;\n}\n\nfunction NavbarDropdown({ label, className, children, ...rest }: NavbarDropdownProps) {\n return (\n <Menu className={className} {...rest}>\n <Menu.Trigger className={cn(\"navbar-item\", undefined)}>{label}</Menu.Trigger>\n <Menu.Popup>{children}</Menu.Popup>\n </Menu>\n );\n}\n\nexport type NavbarActionsProps = ComponentProps<\"div\">;\n\nfunction NavbarActions({ className, ...rest }: NavbarActionsProps) {\n return <div className={cn(\"navbar-actions\", className)} {...rest} />;\n}\n\nexport interface NavbarMobileToggleProps extends Omit<\n ComponentProps<\"button\">,\n \"onClick\" | \"children\"\n> {\n /** Accessible label for the toggle. Default: \"Open menu\". */\n label?: string;\n}\n\nfunction NavbarMobileToggle({\n label = \"Open menu\",\n className,\n type = \"button\",\n ...rest\n}: NavbarMobileToggleProps) {\n const shell = useAppShell();\n const open = shell?.mobileDrawerOpen ?? false;\n\n return (\n <button\n type={type}\n aria-label={label}\n aria-expanded={open}\n onClick={() => shell?.setMobileDrawerOpen(!open)}\n className={cn(\"navbar-mobile-toggle\", className)}\n {...rest}\n />\n );\n}\n\nexport const Navbar = Object.assign(NavbarRoot, {\n Brand: NavbarBrand,\n Items: NavbarItems,\n Item: NavbarItem,\n Dropdown: NavbarDropdown,\n Actions: NavbarActions,\n MobileToggle: NavbarMobileToggle,\n});\n","import { Tabs as BaseTabs } from \"@base-ui/react/tabs\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type TabsVariant = \"bordered\" | \"boxed\";\nexport type TabsSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface TabsProps extends ComponentProps<typeof BaseTabs.Root> {\n variant?: TabsVariant;\n size?: TabsSize;\n fullWidth?: boolean;\n}\n\nfunction TabsRoot({\n variant = \"bordered\",\n size = \"md\",\n fullWidth = false,\n className,\n ...rest\n}: TabsProps) {\n return (\n <BaseTabs.Root\n className={cn(\n [\n \"tabs\",\n variant !== \"bordered\" && `tabs-${variant}`,\n size !== \"md\" && `tabs-${size}`,\n fullWidth && \"tabs-full-width\",\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n\nexport type TabsListProps = ComponentProps<typeof BaseTabs.List>;\n\nfunction TabsList({ className, ...rest }: TabsListProps) {\n return <BaseTabs.List className={cn(\"tab-list\", className)} {...rest} />;\n}\n\nexport type TabsTabProps = ComponentProps<typeof BaseTabs.Tab>;\n\nfunction TabsTab({ className, ...rest }: TabsTabProps) {\n return <BaseTabs.Tab className={cn(\"tab\", className)} {...rest} />;\n}\n\nexport type TabsPanelProps = ComponentProps<typeof BaseTabs.Panel>;\n\nfunction TabsPanel({ className, ...rest }: TabsPanelProps) {\n return <BaseTabs.Panel className={cn(\"tab-panel\", className)} {...rest} />;\n}\n\nexport type TabsIndicatorProps = ComponentProps<typeof BaseTabs.Indicator>;\n\nfunction TabsIndicator({ className, ...rest }: TabsIndicatorProps) {\n return <BaseTabs.Indicator className={cn(\"tab-indicator\", className)} {...rest} />;\n}\n\nexport const Tabs = Object.assign(TabsRoot, {\n List: TabsList,\n Tab: TabsTab,\n Panel: TabsPanel,\n Indicator: TabsIndicator,\n});\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport interface CodeBlockProps extends ComponentProps<\"pre\"> {\n /** Don't wrap long lines — let them overflow horizontally instead. Pair\n * with an inline `max-height` to clamp vertical growth. */\n nowrap?: boolean;\n}\n\n/**\n * Styled `<pre>` for logs, JSON dumps, terminal output, raw model output.\n * Theme-following surface via `--color-code-surface` / `--color-code-text`.\n * Wraps by default; opt out with `nowrap`. No syntax highlighting — layer\n * Shiki/Prism on a nested `<code>` if needed.\n */\nexport function CodeBlock({ nowrap, className, ...rest }: CodeBlockProps) {\n return <pre className={cn([\"code-block\", nowrap && \"code-block-nowrap\"], className)} {...rest} />;\n}\n","import { Tooltip as BaseTooltip } from \"@base-ui/react/tooltip\";\nimport { useContext, type ComponentProps, type ReactElement, type ReactNode } from \"react\";\nimport { cn } from \"./cn\";\nimport { PortalContainerContext } from \"./portal-context\";\n\nexport type TooltipProviderProps = ComponentProps<typeof BaseTooltip.Provider>;\n\nfunction TooltipProvider(props: TooltipProviderProps) {\n return <BaseTooltip.Provider {...props} />;\n}\n\nexport type TooltipRootProps = ComponentProps<typeof BaseTooltip.Root>;\n\nfunction TooltipRoot(props: TooltipRootProps) {\n return <BaseTooltip.Root {...props} />;\n}\n\nexport type TooltipTriggerProps = ComponentProps<typeof BaseTooltip.Trigger>;\n\nfunction TooltipTrigger(props: TooltipTriggerProps) {\n return <BaseTooltip.Trigger {...props} />;\n}\n\nexport type TooltipSize = \"sm\" | \"md\";\n\ntype TooltipPositionerProps = ComponentProps<typeof BaseTooltip.Positioner>;\n\nexport interface TooltipPopupProps extends ComponentProps<typeof BaseTooltip.Popup> {\n size?: TooltipSize;\n side?: TooltipPositionerProps[\"side\"];\n align?: TooltipPositionerProps[\"align\"];\n sideOffset?: TooltipPositionerProps[\"sideOffset\"];\n}\n\nfunction TooltipPopup({\n size = \"md\",\n side = \"top\",\n align = \"center\",\n sideOffset = 6,\n role = \"tooltip\",\n className,\n children,\n ...rest\n}: TooltipPopupProps) {\n const portalContainer = useContext(PortalContainerContext);\n return (\n <BaseTooltip.Portal container={portalContainer ?? undefined}>\n <BaseTooltip.Positioner sideOffset={sideOffset} side={side} align={align}>\n <BaseTooltip.Popup\n role={role}\n className={cn([\"tooltip\", size !== \"md\" && `tooltip-${size}`], className)}\n {...rest}\n >\n {children}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n );\n}\n\nexport interface TooltipProps extends Omit<TooltipRootProps, \"children\"> {\n /** Tooltip body — string or rich node. */\n content: ReactNode;\n side?: TooltipPopupProps[\"side\"];\n align?: TooltipPopupProps[\"align\"];\n sideOffset?: TooltipPopupProps[\"sideOffset\"];\n size?: TooltipSize;\n /** The trigger element. Must be a single React element so Base UI can merge trigger props/refs into it. */\n children: ReactElement;\n}\n\nfunction TooltipShorthand({\n content,\n side,\n align,\n sideOffset,\n size,\n children,\n ...rootProps\n}: TooltipProps) {\n return (\n <TooltipRoot {...rootProps}>\n <BaseTooltip.Trigger render={children} />\n <TooltipPopup side={side} align={align} sideOffset={sideOffset} size={size}>\n {content}\n </TooltipPopup>\n </TooltipRoot>\n );\n}\n\nexport const Tooltip = Object.assign(TooltipShorthand, {\n Provider: TooltipProvider,\n Root: TooltipRoot,\n Trigger: TooltipTrigger,\n Popup: TooltipPopup,\n});\n","import { useRef, useState, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"./cn\";\n\n// Inline SVGs match Tabler's stroke conventions (24px viewBox, stroke-width 2,\n// round caps + joins, currentColor). admin-react stays icon-library-agnostic;\n// consumers don't need @tabler/icons-react or the Tabler webfont.\nfunction CopyGlyph({ className }: { className: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"M7 7m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z\" />\n <path d=\"M15 7v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2\" />\n </svg>\n );\n}\n\nfunction CheckGlyph({ className }: { className: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"M5 12l5 5l10 -10\" />\n </svg>\n );\n}\n\nexport interface PropertyListProps extends Omit<ComponentProps<\"section\">, \"title\"> {\n striped?: boolean;\n /** Tightens row height and padding for very dense panels. */\n compact?: boolean;\n /** Collapses the whole section when every item rendered the auto em-dash\n * fallback for an empty value. */\n hideIfAllEmpty?: boolean;\n /** Optional section heading rendered as `<h3 class=\"property-list-title\">`\n * above the items grid. */\n title?: ReactNode;\n}\n\nfunction PropertyListRoot({\n striped,\n compact,\n hideIfAllEmpty,\n title,\n className,\n children,\n ...rest\n}: PropertyListProps) {\n return (\n <section\n className={cn(\n [\n \"property-list\",\n striped && \"property-list-striped\",\n compact && \"property-list-compact\",\n hideIfAllEmpty && \"property-list-hide-if-empty\",\n ],\n className,\n )}\n {...rest}\n >\n {title !== undefined ? (\n <h3 className={cn(\"property-list-title\", undefined)}>{title}</h3>\n ) : null}\n <dl className={cn(\"property-list-items\", undefined)}>{children}</dl>\n </section>\n );\n}\n\nexport interface PropertyListItemProps extends Omit<ComponentProps<\"dd\">, \"title\" | \"label\"> {\n label?: ReactNode;\n value?: ReactNode;\n /** Right-aligns the value cell + applies `tabular-nums`. Mirrors `Table.Cell.numeric`. */\n numeric?: boolean;\n /** Opts this row into the copy affordance regardless of list-level `copyable`. */\n copyable?: boolean;\n /** Overrides the text the copy button writes to the clipboard. */\n copyValue?: string;\n}\n\nfunction isEmptyValue(value: ReactNode): boolean {\n if (value == null) return true;\n if (typeof value === \"string\") return value.trim() === \"\";\n return false;\n}\n\n// Item is a thin wrapper that emits a <dt>/<dd> pair as siblings (no host\n// element). In shorthand mode it generates the subparts; in children mode it\n// renders them verbatim. Either way, no extra DOM wrapper is introduced.\nfunction PropertyListItem({\n label,\n value,\n numeric,\n copyable,\n copyValue,\n children,\n ...rest\n}: PropertyListItemProps) {\n if (children !== undefined) {\n return <>{children}</>;\n }\n const empty = isEmptyValue(value);\n return (\n <>\n <PropertyListLabel>{label}</PropertyListLabel>\n <PropertyListValue\n numeric={numeric}\n copyable={copyable}\n empty={empty}\n copyValue={copyValue ?? (typeof value === \"string\" ? value : undefined)}\n {...rest}\n >\n {empty ? \"—\" : value}\n </PropertyListValue>\n </>\n );\n}\n\nexport type PropertyListLabelProps = ComponentProps<\"dt\">;\nfunction PropertyListLabel({ className, ...rest }: PropertyListLabelProps) {\n return <dt className={cn(\"property-list-label\", className)} {...rest} />;\n}\n\nexport interface PropertyListValueProps extends ComponentProps<\"dd\"> {\n numeric?: boolean;\n copyable?: boolean;\n /** Marks the cell as carrying an auto-rendered em-dash. The list-level\n * `hideIfAllEmpty` collapses the section when every value is empty. */\n empty?: boolean;\n /** Overrides the text the copy button writes to the clipboard. */\n copyValue?: string;\n}\n\nfunction PropertyListValue({\n numeric,\n copyable,\n empty,\n copyValue,\n className,\n children,\n ...rest\n}: PropertyListValueProps) {\n const ddRef = useRef<HTMLElement | null>(null);\n const [copied, setCopied] = useState(false);\n\n async function handleCopy() {\n const text = copyValue ?? ddRef.current?.textContent?.trim() ?? \"\";\n if (!text) return;\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 1200);\n } catch {\n // Permission denied or unsupported — fail silently.\n }\n }\n\n return (\n <dd\n ref={ddRef}\n className={cn(\n [\n \"property-list-value\",\n numeric && \"property-list-value-numeric\",\n copyable && \"property-list-value-copyable\",\n empty && \"property-list-value-empty\",\n ],\n className,\n )}\n {...rest}\n >\n {children}\n <button\n type=\"button\"\n aria-label=\"Copy\"\n className={cn(\"property-list-copy\", undefined)}\n onClick={handleCopy}\n data-copied={copied ? \"true\" : undefined}\n >\n <CopyGlyph className={cn(\"property-list-copy-icon\", undefined)} />\n <CheckGlyph className={cn(\"property-list-copy-icon-copied\", undefined)} />\n </button>\n </dd>\n );\n}\n\nexport const PropertyList = Object.assign(PropertyListRoot, {\n Item: PropertyListItem,\n Label: PropertyListLabel,\n Value: PropertyListValue,\n});\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type TableAlign = \"left\" | \"right\" | \"center\";\n\nexport interface TableProps extends ComponentProps<\"table\"> {\n striped?: boolean;\n bordered?: boolean;\n relaxed?: boolean;\n /** Pins `<thead>` while the surrounding scroll container scrolls.\n * Requires an overflowing ancestor — wrap the table in\n * `<div style=\"overflow:auto; max-height: …\">`. */\n sticky?: boolean;\n}\n\nfunction TableRoot({ striped, bordered, relaxed, sticky, className, ...rest }: TableProps) {\n return (\n <table\n className={cn(\n [\n \"table\",\n striped && \"table-striped\",\n bordered && \"table-bordered\",\n relaxed && \"table-relaxed\",\n sticky && \"table-sticky\",\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n\nexport type TableHeadProps = ComponentProps<\"thead\">;\nfunction TableHead({ className, ...rest }: TableHeadProps) {\n return <thead className={className} {...rest} />;\n}\n\nexport type TableBodyProps = ComponentProps<\"tbody\">;\nfunction TableBody({ className, ...rest }: TableBodyProps) {\n return <tbody className={className} {...rest} />;\n}\n\nexport type TableFootProps = ComponentProps<\"tfoot\">;\nfunction TableFoot({ className, ...rest }: TableFootProps) {\n return <tfoot className={className} {...rest} />;\n}\n\nexport interface TableRowProps extends ComponentProps<\"tr\"> {\n /** Visually marks the row as selected. Independent of the CSS rule that\n * tints rows containing a checked checkbox — use this for programmatic\n * selection (single-select on row click, server-driven highlight, …). */\n selected?: boolean;\n /** Applies `.table-row-link` so the first `<a>` inside the row expands to\n * fill the row. The consumer still supplies the anchor — this just adds\n * the CSS hook so the hit-area covers the whole row. */\n asLink?: boolean;\n}\nfunction TableRow({ selected, asLink, className, ...rest }: TableRowProps) {\n return (\n <tr\n className={cn(asLink && \"table-row-link\", className)}\n data-selected={selected || undefined}\n {...rest}\n />\n );\n}\n\nexport interface TableHeaderCellProps extends Omit<ComponentProps<\"th\">, \"align\"> {\n align?: TableAlign;\n /** Narrow first-column gutter — mirrors the body cell `gutter` modifier so\n * the column lines up. Use for status-icon columns and select-all\n * checkboxes. */\n gutter?: boolean;\n}\nfunction TableHeaderCell({ align, gutter, className, scope, ...rest }: TableHeaderCellProps) {\n return (\n <th\n className={cn([\"table-header-cell\", gutter && \"table-cell-gutter\"], className)}\n data-align={align && align !== \"left\" ? align : undefined}\n scope={scope ?? \"col\"}\n {...rest}\n />\n );\n}\n\nexport interface TableCellProps extends Omit<ComponentProps<\"td\">, \"align\"> {\n align?: TableAlign;\n /** Narrow first-column gutter for row-level status icons. */\n gutter?: boolean;\n /** `text-right` + `tabular-nums` for currency/totals columns. */\n numeric?: boolean;\n}\nfunction TableCell({ align, gutter, numeric, className, ...rest }: TableCellProps) {\n return (\n <td\n className={cn(\n [\"table-cell\", gutter && \"table-cell-gutter\", numeric && \"table-cell-numeric\"],\n className,\n )}\n data-align={align && align !== \"left\" ? align : undefined}\n {...rest}\n />\n );\n}\n\nexport const Table = Object.assign(TableRoot, {\n Head: TableHead,\n Body: TableBody,\n Foot: TableFoot,\n Row: TableRow,\n HeaderCell: TableHeaderCell,\n Cell: TableCell,\n});\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { createContext, useContext, useState } from \"react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { useAppShell } from \"./AppShell\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\ninterface SidebarContextValue {\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null);\n\nexport interface SidebarProps extends Omit<ComponentProps<\"aside\">, \"onChange\"> {\n /** Controlled collapsed state. Pair with `onCollapsedChange`. */\n collapsed?: boolean;\n /** Uncontrolled initial state. */\n defaultCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Accessible label for the mobile drawer dialog. Default: \"Navigation\". */\n drawerLabel?: string;\n}\n\nfunction SidebarRoot({\n collapsed,\n defaultCollapsed,\n onCollapsedChange,\n drawerLabel = \"Navigation\",\n className,\n children,\n ...rest\n}: SidebarProps) {\n const shell = useAppShell();\n const drawerOpen = shell?.mobileDrawerOpen ?? false;\n\n return (\n <SidebarContext.Provider value={{ collapsed, defaultCollapsed, onCollapsedChange }}>\n <aside className={cn(\"sidebar\", className)} {...rest}>\n {drawerOpen ? null : children}\n </aside>\n {shell ? (\n <BaseDialog.Root open={drawerOpen} onOpenChange={(open) => shell.setMobileDrawerOpen(open)}>\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className={cn(\"sidebar-drawer-backdrop\", undefined)} />\n <BaseDialog.Popup\n className={cn(\"sidebar-drawer\", undefined)}\n aria-label={drawerLabel}\n onClick={(event) => {\n const target = event.target as HTMLElement;\n if (target.closest(\"a, [data-drawer-close]\")) {\n shell.setMobileDrawerOpen(false);\n }\n }}\n >\n {children}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n ) : null}\n </SidebarContext.Provider>\n );\n}\n\nexport type SidebarHeaderProps = ComponentProps<\"div\">;\n\nfunction SidebarHeader({ className, ...rest }: SidebarHeaderProps) {\n return <div className={cn(\"sidebar-header\", className)} {...rest} />;\n}\n\nexport type SidebarNavProps = ComponentProps<\"nav\">;\n\nfunction SidebarNav({ className, ...rest }: SidebarNavProps) {\n return <nav className={cn(\"sidebar-nav\", className)} {...rest} />;\n}\n\nexport type SidebarGroupProps = ComponentProps<\"div\">;\n\nfunction SidebarGroup({ className, ...rest }: SidebarGroupProps) {\n return <div className={cn(\"sidebar-group\", className)} {...rest} />;\n}\n\nexport type SidebarGroupLabelProps = ComponentProps<\"div\">;\n\nfunction SidebarGroupLabel({ className, ...rest }: SidebarGroupLabelProps) {\n return <div className={cn(\"sidebar-group-label\", className)} {...rest} />;\n}\n\nexport interface SidebarItemProps extends ComponentProps<\"a\"> {\n active?: boolean;\n /** Leading icon. Rendered inside `<Sidebar.Icon>`. */\n icon?: IconProp;\n /** Trailing badge. Rendered inside `<Sidebar.Badge>`. */\n badge?: ReactNode;\n}\n\nfunction SidebarItem({ active, icon, badge, className, children, ...rest }: SidebarItemProps) {\n return (\n <a\n className={cn(\"sidebar-item\", className)}\n aria-current={active ? \"page\" : undefined}\n {...rest}\n >\n {icon != null ? <SidebarIcon>{renderIcon(icon)}</SidebarIcon> : null}\n {children !== undefined ? <SidebarLabel>{children}</SidebarLabel> : null}\n {badge !== undefined ? <SidebarBadge>{badge}</SidebarBadge> : null}\n </a>\n );\n}\n\nexport type SidebarIconProps = ComponentProps<\"span\">;\n\nfunction SidebarIcon({ className, ...rest }: SidebarIconProps) {\n return <span aria-hidden className={cn(\"sidebar-icon\", className)} {...rest} />;\n}\n\nexport type SidebarLabelProps = ComponentProps<\"span\">;\n\nfunction SidebarLabel({ className, ...rest }: SidebarLabelProps) {\n return <span className={cn(\"sidebar-label\", className)} {...rest} />;\n}\n\nexport type SidebarBadgeProps = ComponentProps<\"span\">;\n\nfunction SidebarBadge({ className, ...rest }: SidebarBadgeProps) {\n return <span className={cn(\"sidebar-badge\", className)} {...rest} />;\n}\n\nexport interface SidebarCollapsibleProps extends Omit<\n ComponentProps<\"details\">,\n \"onToggle\" | \"open\"\n> {\n /** Leading icon for the trigger. Rendered inside `<Sidebar.Icon>`. */\n icon?: IconProp;\n /** Label shown next to the icon. Rendered inside `<Sidebar.Label>`. */\n label?: ReactNode;\n /** Full trigger content. Overrides `icon` + `label`. */\n trigger?: ReactNode;\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n /** Fires when the panel toggles open/closed. */\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction SidebarCollapsible({\n icon,\n label,\n trigger,\n children,\n className,\n open,\n defaultOpen,\n onOpenChange,\n ...rest\n}: SidebarCollapsibleProps) {\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const isOpen = isControlled ? open : internalOpen;\n\n const triggerContent = trigger ?? (\n <>\n {icon != null ? <SidebarIcon>{renderIcon(icon)}</SidebarIcon> : null}\n {label !== undefined ? <SidebarLabel>{label}</SidebarLabel> : null}\n </>\n );\n\n return (\n <details\n className={cn(\"sidebar-collapsible\", className)}\n open={isOpen}\n onToggle={(event) => {\n const next = (event.currentTarget as HTMLDetailsElement).open;\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n }}\n {...rest}\n >\n <summary className={cn(\"sidebar-collapsible-trigger\", undefined)}>{triggerContent}</summary>\n <div className={cn(\"sidebar-collapsible-panel\", undefined)}>{children}</div>\n </details>\n );\n}\n\nexport interface SidebarSubItemProps extends ComponentProps<\"a\"> {\n active?: boolean;\n /** Leading icon. */\n icon?: IconProp;\n badge?: ReactNode;\n}\n\nfunction SidebarSubItem({\n active,\n icon,\n badge,\n className,\n children,\n ...rest\n}: SidebarSubItemProps) {\n return (\n <a\n className={cn(\"sidebar-subitem\", className)}\n aria-current={active ? \"page\" : undefined}\n {...rest}\n >\n {icon != null ? <SidebarIcon>{renderIcon(icon)}</SidebarIcon> : null}\n {children}\n {badge !== undefined ? <SidebarBadge>{badge}</SidebarBadge> : null}\n </a>\n );\n}\n\nexport type SidebarFooterProps = ComponentProps<\"div\">;\n\nfunction SidebarFooter({ className, ...rest }: SidebarFooterProps) {\n return <div className={cn(\"sidebar-footer\", className)} {...rest} />;\n}\n\nexport interface SidebarCollapseToggleProps extends Omit<ComponentProps<\"label\">, \"htmlFor\"> {\n /** Accessible label for the checkbox. Default: \"Toggle sidebar\". */\n label?: string;\n}\n\nfunction SidebarCollapseToggle({\n label = \"Toggle sidebar\",\n className,\n children,\n ...rest\n}: SidebarCollapseToggleProps) {\n const ctx = useContext(SidebarContext);\n const controlledChecked = ctx?.collapsed;\n const isControlled = controlledChecked !== undefined;\n\n return (\n <label className={cn(\"sidebar-collapse-toggle\", className)} {...rest}>\n <input\n type=\"checkbox\"\n className={cn(\"sidebar-toggle\", undefined)}\n aria-label={label}\n {...(isControlled\n ? { checked: controlledChecked }\n : { defaultChecked: ctx?.defaultCollapsed })}\n onChange={(event) => ctx?.onCollapsedChange?.(event.currentTarget.checked)}\n />\n <span className={cn(\"sr-only\", undefined)}>{label}</span>\n {children}\n </label>\n );\n}\n\nexport const Sidebar = Object.assign(SidebarRoot, {\n Header: SidebarHeader,\n Nav: SidebarNav,\n Group: SidebarGroup,\n GroupLabel: SidebarGroupLabel,\n Item: SidebarItem,\n Icon: SidebarIcon,\n Label: SidebarLabel,\n Badge: SidebarBadge,\n Collapsible: SidebarCollapsible,\n SubItem: SidebarSubItem,\n Footer: SidebarFooter,\n CollapseToggle: SidebarCollapseToggle,\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAQA,IAAM,SAAS;AAEf,SAAS,aAAa,OAAuB;CAC3C,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO,MACJ,MAAM,KAAK,EACX,OAAO,OAAO,EACd,KAAK,UAAU,GAAG,SAAS,OAAO,EAClC,KAAK,GAAG;AACb;AAEA,SAAS,KAAK,GAAG,OAA0C;CACzD,OAAO,MAAM,OAAO,OAAO,EAAE,KAAK,GAAG;AACvC;AAsBA,SAAgB,GACd,MACA,WACsC;CACtC,MAAM,cAAc,cAAA,GAAA,KAAA,MAAkB,IAAI,CAAC;CAC3C,IAAI,OAAO,cAAc,YACvB,QAAQ,UAAU,KAAK,aAAa,UAAU,KAAK,KAAK,KAAA,CAAS;CAEnE,OAAO,KAAK,aAAa,SAAS;AACpC;;;AC/CA,SAAS,cAAc,EAAE,WAAW,GAAG,QAAwB;CAC7D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,aAAa,SAAS;EAAG,GAAI;CAAO,CAAA;AAChE;AAIA,SAAS,cAAc,EAAE,WAAW,GAAG,QAA4B;CACjE,OAAO,iBAAA,GAAA,kBAAA,KAAC,WAAD;EAAS,WAAW,GAAG,kBAAkB,SAAS;EAAG,GAAI;CAAO,CAAA;AACzE;AAIA,SAAS,iBAAiB,EAAE,WAAW,GAAG,QAA+B;CACvE,OAAO,iBAAA,GAAA,kBAAA,KAAC,WAAD;EAAS,WAAW,GAAG,qBAAqB,SAAS;EAAG,GAAI;CAAO,CAAA;AAC5E;AAIA,SAAS,iBAAiB,EAAE,WAAW,GAAG,QAA+B;CACvE,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,qBAAqB,SAAS;EAAG,GAAI;CAAO,CAAA;AACxE;AAEA,IAAa,YAAY,OAAO,OAAO,eAAe;CACpD,MAAM;CACN,SAAS;CACT,SAAS;AACX,CAAC;;;ACdD,SAAgB,UAAU,EAAE,WAAW,OAAO,cAAc,OAAO,GAAG,QAAwB;CAC5F,MAAM,YACJ,iBAAiB,KAAA,IACZ;EAAE,GAAG;EAAO,yBAAyB;CAAa,IACnD;CAEN,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,WAAW,GAAG,cAAc,SAAS;EACrC,OAAO;EACP,GAAI;EACJ,GAAK,UAAU,KAAA,KAAa,EAAE,cAAc,MAAM;CACnD,CAAA;AAEL;;;;;;;;;;;;;ACAA,SAAgB,WAAW,MAAgB,OAAwB,OAAkB;CACnF,IAAI,QAAQ,MAAM,OAAO;CACzB,KAAA,GAAA,MAAA,gBAAmB,IAAI,GAAG,OAAO;CACjC,QAAA,GAAA,MAAA,eAAqB,MAAuB;EAAE;EAAM,eAAe;CAAK,CAAC;AAC3E;;;ACnBA,SAAS,UAAU,EACjB,SACA,MACA,OACA,aACA,WACA,MACA,UACA,GAAG,QACU;CAEb,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,MAAM,SAHU,YAAY,YAAY,YAAY,YAAY,UAAU;EAI1E,WAAW,GAAG,CAAC,SAAS,SAAS,SAAS,GAAG,SAAS;EACtD,GAAI;YAHN;GAKG,WAAW,IAAI;GACf,UAAU,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,YAAD,EAAA,UAAa,MAAkB,CAAA,IAAI;GACzD,gBAAgB,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,kBAAD,EAAA,UAAmB,YAA8B,CAAA,IAAI;GACjF;EACE;;AAET;AAGA,SAAS,WAAW,EAAE,WAAW,GAAG,QAAyB;CAC3D,OAAO,iBAAA,GAAA,kBAAA,KAAC,UAAD;EAAQ,WAAW,GAAG,eAAe,SAAS;EAAG,GAAI;CAAO,CAAA;AACrE;AAGA,SAAS,iBAAiB,EAAE,WAAW,GAAG,QAA+B;CACvE,OAAO,iBAAA,GAAA,kBAAA,KAAC,KAAD;EAAG,WAAW,GAAG,qBAAqB,SAAS;EAAG,GAAI;CAAO,CAAA;AACtE;AAEA,IAAa,QAAQ,OAAO,OAAO,WAAW;CAC5C,OAAO;CACP,aAAa;AACf,CAAC;;;AC5CD,IAAM,mBAAA,GAAA,MAAA,eAA6D,IAAI;AAEvE,SAAgB,cAA2C;CACzD,QAAA,GAAA,MAAA,YAAkB,eAAe;AACnC;AAgBA,SAAS,aAAa,EACpB,aAAa,OACb,YAAY,OACZ,kBACA,0BAA0B,OAC1B,0BACA,cACA,WACA,OACA,UACA,GAAG,QACa;CAChB,MAAM,CAAC,kBAAkB,wBAAA,GAAA,MAAA,UAAgC,uBAAuB;CAChF,MAAM,eAAe,qBAAqB,KAAA;CAC1C,MAAM,OAAO,eAAe,mBAAmB;CAE/C,MAAM,SAAA,GAAA,MAAA,gBACG;EACL,kBAAkB;EAClB,sBAAsB,SAAS;GAC7B,IAAI,CAAC,cAAc,oBAAoB,IAAI;GAC3C,2BAA2B,IAAI;EACjC;EACA;CACF,IACA;EAAC;EAAM;EAAc;EAA0B;CAAU,CAC3D;CAEA,MAAM,YACJ,iBAAiB,KAAA,IACZ;EAAE,GAAG;EAAO,yBAAyB;CAAa,IACnD;CAEN,OACE,iBAAA,GAAA,kBAAA,KAAC,gBAAgB,UAAjB;EAAiC;YAC/B,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,WAAW,GACT;IACE;IACA,cAAc;IACd,aAAa;GACf,GACA,SACF;GACA,OAAO;GACP,GAAI;GAEH;EACE,CAAA;CACmB,CAAA;AAE9B;AAIA,SAAS,aAAa,EAAE,WAAW,GAAG,QAA2B;CAC/D,OAAO,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,WAAW,GAAG,kBAAkB,SAAS;EAAG,GAAI;CAAO,CAAA;AACtE;AAEA,IAAa,WAAW,OAAO,OAAO,cAAc,EAClD,MAAM,aACR,CAAC;;;AC7ED,SAAgB,MAAM,EACpB,UAAU,WACV,OAAO,MACP,MACA,WACA,UACA,GAAG,QACU;CACb,OACE,iBAAA,GAAA,kBAAA,MAAC,QAAD;EACE,WAAW,GACT;GAAC;GAAS,YAAY,aAAa,SAAS;GAAW,SAAS,QAAQ,SAAS;EAAM,GACvF,SACF;EACA,GAAI;YALN,CAOG,WAAW,MAAM,SAAS,OAAO,KAAK,EAAE,GACxC,QACG;;AAEV;;;ACvBA,SAAgB,UAAU,EAAE,UAAU,MAAM,WAAW,UAAU,GAAG,QAAwB;CAC1F,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,WAAW,GAAG,cAAc,SAAS;EAAG,eAAA;EAAY,GAAI;YAC3D,OAAO,WAAW,MAAM,EAAE,IAAK,YAAY;CACxC,CAAA;AAEV;;;ACEA,IAAM,YAAiC;CAAC;CAAQ;CAAS;CAAO;AAAM;AAEtE,SAAS,WAAW,OAAgC;CAClD,QAAQ,OAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK,WACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,KAAK,QACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAAgB,WAAW,OAA4B;CACrD,MAAM,SAAS,MACZ,KAAK,EACL,YAAY,EACZ,MAAM,GAAG,EACT,KAAK,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;CACjB,IAAI,OAAO,WAAW,GACpB,MAAM,IAAI,MAAM,8BAA8B;CAEhD,MAAM,uBAAO,IAAI,IAAc;CAC/B,IAAI,MAAqB;CACzB,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,MAAM,WAAW,KAAK;EAC5B,IAAI,QAAQ,MAAM;GAChB,KAAK,IAAI,GAAG;GACZ;EACF;EACA,IAAI,QAAQ,MACV,MAAM,IAAI,MAAM,mBAAmB,MAAM,8BAA8B;EAEzE,MAAM;CACR;CACA,IAAI,QAAQ,MACV,MAAM,IAAI,MAAM,mBAAmB,MAAM,eAAe;CAE1D,OAAO;EAAE;EAAM;CAAI;AACrB;AAEA,SAAgB,UAAU,MAAiD;CAEzE,QADa,OAAO,SAAS,WAAW,CAAC,IAAI,IAAI,MACrC,IAAI,UAAU;AAC5B;;AAGA,SAAgB,aAAa,OAA4B;CACvD,MAAM,QAAkB,CAAC;CACzB,KAAK,MAAM,OAAO,WAChB,IAAI,MAAM,KAAK,IAAI,GAAG,GAAG,MAAM,KAAK,GAAG;CAEzC,MAAM,KAAK,MAAM,GAAG;CACpB,OAAO,MAAM,KAAK,GAAG;AACvB;;;;;;AAOA,SAAgB,eAAe,GAAiC;CAC9D,MAAM,MAAM,EAAE,IAAI,YAAY;CAC9B,IAAI,QAAQ,aAAa,QAAQ,WAAW,QAAQ,SAAS,QAAQ,QACnE,OAAO;CAET,MAAM,uBAAO,IAAI,IAAc;CAC/B,IAAI,EAAE,SAAS,KAAK,IAAI,MAAM;CAC9B,IAAI,EAAE,UAAU,KAAK,IAAI,OAAO;CAChC,IAAI,EAAE,QAAQ,KAAK,IAAI,KAAK;CAC5B,IAAI,EAAE,SAAS,KAAK,IAAI,MAAM;CAC9B,OAAO,aAAa;EAAE;EAAM;CAAI,CAAC;AACnC;AAEA,IAAM,qBAA6C;CACjD,QAAQ;CACR,KAAK;CACL,OAAO;CACP,QAAQ;CACR,KAAK;CACL,KAAK;CACL,OAAO;CACP,SAAS;CACT,WAAW;CACX,WAAW;CACX,YAAY;CACZ,WAAW;CACX,QAAQ;AACV;AAEA,IAAM,aAAuC;CAC3C,MAAM;CACN,OAAO;CACP,KAAK;CACL,MAAM;AACR;;AAGA,SAAgB,YAAY,OAA8B;CACxD,MAAM,QAAkB,CAAC;CACzB,KAAK,MAAM,OAAO,WAChB,IAAI,MAAM,KAAK,IAAI,GAAG,GAAG,MAAM,KAAK,WAAW,IAAI;CAErD,MAAM,UAAU,mBAAmB,MAAM;CACzC,IAAI,YAAY,KAAA,GACd,MAAM,KAAK,OAAO;MACb,IAAI,MAAM,IAAI,WAAW,GAC9B,MAAM,KAAK,MAAM,IAAI,YAAY,CAAC;MAElC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC;CAEnE,OAAO;AACT;AAEA,IAAM,kBAA4C;CAChD,MAAM;CACN,OAAO;CACP,KAAK;CACL,MAAM;AACR;AAEA,SAAS,WAAW,OAA4B;CAC9C,MAAM,QAAkB,CAAC;CACzB,KAAK,MAAM,OAAO,WAChB,IAAI,MAAM,KAAK,IAAI,GAAG,GAAG,MAAM,KAAK,gBAAgB,IAAI;CAE1D,MAAM,KAAK,MAAM,IAAI,WAAW,IAAI,MAAM,IAAI,YAAY,IAAI,MAAM,GAAG;CACvE,OAAO,MAAM,KAAK,GAAG;AACvB;;;;;AAMA,SAAgB,mBAAmB,QAAwC;CACzE,OAAO,OAAO,IAAI,UAAU,EAAE,KAAK,GAAG;AACxC;;;;;;;;;;;;;;ACvIA,SAAgB,IAAI,EAAE,MAAM,UAAU,WAAW,GAAG,QAAkB;CACpE,IAAI,QAAQ,MAAM;EAChB,MAAM,QAAQ,UAAU,IAAI,EAAE;EAC9B,IAAI,CAAC,OACH,OAAO;EAET,MAAM,QAAQ,YAAY,KAAK;EAC/B,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;GAAM,WAAW,GAAG,aAAa,SAAS;GAAG,GAAI;aAC9C,MAAM,KAAK,MAAM,MAChB,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAA0B,WAAW,GAAG,OAAO,KAAA,CAAS;cACrD;GACE,GAFK,GAAG,EAAE,GAAG,MAEb,CACN;EACG,CAAA;CAEV;CACA,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,OAAO,SAAS;EAAG,GAAI;EACvC;CACE,CAAA;AAET;;;AC5BA,IAAM,2BAAW,IAAI,IAA8B;AACnD,IAAI,mBAAmB;AAEvB,SAAS,iBAAuB;CAC9B,IAAI,oBAAoB,OAAO,WAAW,aAAa;CACvD,OAAO,iBAAiB,WAAW,QAAQ;CAC3C,mBAAmB;AACrB;AAEA,SAAS,sBAA4B;CACnC,IAAI,CAAC,oBAAoB,OAAO,WAAW,aAAa;CACxD,IAAI,SAAS,OAAO,GAAG;CACvB,OAAO,oBAAoB,WAAW,QAAQ;CAC9C,mBAAmB;AACrB;AAEA,SAAS,iBAAiB,QAAqC;CAC7D,IAAI,EAAE,kBAAkB,cAAc,OAAO;CAC7C,IAAI,OAAO,mBAAmB,OAAO;CACrC,MAAM,MAAM,OAAO;CACnB,OAAO,QAAQ,WAAW,QAAQ;AACpC;AAEA,SAAS,SAAS,GAAwB;CACxC,MAAM,QAAQ,eAAe,CAAC;CAC9B,IAAI,UAAU,MAAM;CACpB,MAAM,SAAS,SAAS,IAAI,KAAK;CACjC,IAAI,CAAC,UAAU,OAAO,SAAS,GAAG;CAKlC,IAAI,iBAAiB,EAAE,MAAM,KAAK,CAAC,MAAM,SAAS,GAAG,KAAK,UAAU,UAAU;CAE9E,EAAE,eAAe;CACjB,KAAK,MAAM,SAAS,QAClB,MAAM,WAAW,UAAU,CAAC;AAEhC;;;;;;AAOA,SAAgB,SAAS,iBAAoC,OAAgC;CAC3F,KAAK,MAAM,SAAS,iBAAiB;EACnC,IAAI,SAAS,SAAS,IAAI,KAAK;EAC/B,IAAI,CAAC,QAAQ;GACX,yBAAS,IAAI,IAAI;GACjB,SAAS,IAAI,OAAO,MAAM;EAC5B;EACA,OAAO,IAAI,KAAK;CAClB;CACA,eAAe;CACf,aAAa;EACX,KAAK,MAAM,SAAS,iBAAiB;GACnC,MAAM,SAAS,SAAS,IAAI,KAAK;GACjC,IAAI,CAAC,QAAQ;GACb,OAAO,OAAO,KAAK;GACnB,IAAI,OAAO,SAAS,GAAG,SAAS,OAAO,KAAK;EAC9C;EACA,oBAAoB;CACtB;AACF;;;;;;;;;;;;;;;AChDA,SAAgB,UACd,MACA,SACA,SACY;CACZ,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,cAAA,GAAA,MAAA,QAAmC,OAAO;CAChD,WAAW,UAAU;CAKrB,MAAM,QAAQ,QAAQ,OAAO,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAK,KAAK,GAAG,IAAK;CAE1E,MAAM,WAAA,GAAA,MAAA,eAAoC;EACxC,IAAI,UAAU,IACZ,OAAO;GAAE,iBAAiB,CAAC;GAAG,kBAAkB,KAAA;GAAW,cAAc,KAAA;EAAU;EAErF,MAAM,SAAS,UAAU,IAAkC;EAC3D,MAAM,OAAO,OAAO,IAAI,YAAY;EACpC,OAAO;GACL,iBAAiB;GACjB,kBAAkB,mBAAmB,MAAM;GAC3C,cAAc,KAAK;EACrB;CAEF,GAAG,CAAC,KAAK,CAAC;CAEV,CAAA,GAAA,MAAA,iBAAgB;EACd,IAAI,CAAC,WAAW,QAAQ,gBAAgB,WAAW,GAAG;EACtD,MAAM,QAAqB,EAAE,WAAW;EACxC,OAAO,SAAS,QAAQ,iBAAiB,KAAK;CAChD,GAAG,CAAC,SAAS,OAAO,CAAC;CAErB,OAAO;AACT;;;ACzCA,SAAgB,OAAO,EACrB,UAAU,WACV,OAAO,MACP,WACA,SACA,MACA,cACA,QACA,WACA,OAAO,UACP,UACA,UACA,SACA,GAAG,QACW;CAEd,MAAM,EAAE,kBAAkB,iBAAiB,UACzC,SACC,MAAM,UAAU,CAA4B,GAC7C,EAAE,SAAS,CAAC,YAAY,CAAC,QAAQ,CACnC;CAEA,MAAM,WAAW,YAAY,SAAS,QAAQ,QAAQ,gBAAgB;CAEtE,OACE,iBAAA,GAAA,kBAAA,MAAC,sBAAA,QAAD;EACW;EACH;EACN,UAAU,YAAY;EACtB,aAAW,WAAW,KAAA;EACtB,qBAAmB;EACnB,WAAW,GACT;GACE;GACA,YAAY,aAAa,OAAO;GAChC,SAAS,QAAQ,OAAO;GACxB,aAAa;GACb,WAAW;GACX,YAAY;EACd,GACA,SACF;EACA,GAAI;YAjBN;GAmBG,UAAU,OAAO,WAAW,IAAI;GAChC;GACA,WAAW,YAAY;GACvB,iBAAiB,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,KAAD,EAAK,MAAM,aAAe,CAAA,IAAI;EAClD;;AAEhB;;;ACxEA,SAAgB,YAAY,EAC1B,cAAc,cACd,OAAO,SACP,WACA,GAAG,QACgB;CACnB,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACQ;EACN,WAAW,GAAG,CAAC,aAAa,gBAAgB,cAAc,oBAAoB,GAAG,SAAS;EAC1F,GAAI;CACL,CAAA;AAEL;;;ACXA,SAAS,gBAAgB,EACvB,WACA,WACA,UACA,cAAc,YAAY,cAC1B,GAAG,QACgB;CACnB,MAAM,QAAQ,MAAA,SAAS,QAAQ,QAAQ,EAAE,OAAO,MAAA,cAAc;CAC9D,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,cAAY;EAAW,WAAW,GAAG,eAAe,SAAS;EAAG,GAAI;YACvE,iBAAA,GAAA,kBAAA,KAAC,MAAD,EAAA,UACG,MAAM,KAAK,OAAO,MACjB,iBAAA,GAAA,kBAAA,MAAC,MAAA,UAAD,EAAA,UAAA,CACG,OACA,IAAI,MAAM,SAAS,IAAI,iBAAA,GAAA,kBAAA,KAAC,qBAAD,EAAA,UAAsB,UAA+B,CAAA,IAAI,IACzE,EAAA,GAHK,MAAM,OAAO,CAGlB,CACX,EACC,CAAA;CACD,CAAA;AAET;AAeA,SAAS,eAAe,OAA4B;CAClD,IAAI,MAAM,SAAS,KAAA,GAAW;EAC5B,MAAM,EAAE,WAAW,SAAS,MAAM,UAAU,GAAG,SAAS;EACxD,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,MAAC,KAAD;GACE,WAAW,GAAG,mBAAmB,SAAS;GAC1C,gBAAc,UAAU,SAAS,KAAA;GACjC,GAAI;aAHN,CAKG,WAAW,MAAM,EAAE,GACnB,QACA;KACD,CAAA;CAER;CACA,MAAM,EAAE,WAAW,SAAS,MAAM,UAAU,GAAG,SAAS;CACxD,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,MAAC,QAAD;EACE,WAAW,GAAG,mBAAmB,SAAS;EAC1C,gBAAc,UAAU,SAAS,KAAA;EACjC,GAAI;YAHN,CAKG,WAAW,MAAM,EAAE,GACnB,QACG;IACJ,CAAA;AAER;AAMA,SAAS,oBAAoB,EAAE,WAAW,UAAU,GAAG,QAAkC;CACvF,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,MAAK;EACL,eAAY;EACZ,WAAW,GAAG,wBAAwB,SAAS;EAC/C,GAAI;EAEH;CACC,CAAA;AAER;AAEA,IAAa,cAAc,OAAO,OAAO,iBAAiB;CACxD,MAAM;CACN,WAAW;AACb,CAAC;;;ACnFD,SAAgB,MAAM,EACpB,UAAU,YACV,YAAY,MACZ,WACA,OAAO,QACP,GAAG,QACU;CACb,OACE,iBAAA,GAAA,kBAAA,KAAC,qBAAA,OAAD;EACQ;EACN,WAAW,GACT;GACE;GACA,YAAY,cAAc,SAAS;GACnC,cAAc,QAAQ,SAAS;EACjC,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;ACrBA,SAAgB,UAAU,EACxB,UAAU,YACV,YAAY,MACZ,WACA,GAAG,QACc;CACjB,OACE,iBAAA,GAAA,kBAAA,KAAC,qBAAA,OAAD;EACE,MAAK;EACL,WAAW,GACT;GACE;GACA,YAAY,cAAc,cAAc;GACxC,cAAc,QAAQ,cAAc;EACtC,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;AC7BA,SAAS,eAAe,EAAE,WAAW,GAAG,QAAyB;CAC/D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,eAAe,SAAS;EAAG,GAAI;CAAO,CAAA;AAClE;AAIA,SAAS,gBAAgB,EAAE,WAAW,GAAG,QAA8B;CACrE,OAAO,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,WAAW,GAAG,qBAAqB,SAAS;EAAG,GAAI;CAAO,CAAA;AACzE;AAEA,IAAa,aAAa,OAAO,OAAO,gBAAgB,EACtD,OAAO,gBACT,CAAC;;;ACiBD,SAAgB,UAAU,EACxB,OACA,UAAU,WACV,OAAO,MACP,MACA,YAAY,WACZ,QACA,WACA,cAAc,WACd,YACiB;CACjB,MAAM,CAAC,UAAU,cAAc,UAAU,MAAM,GAAG;CAClD,MAAM,mBAAmB;EACvB;EACA,aAAa,SAAS,aAAa;EACnC,eAAe,SAAS,aAAa;CACvC;CACA,MAAM,aAAa,UAAU,KAAA,KAAa,SAAS,KAAA;CACnD,MAAM,QACJ,WAAW,KAAA,IAAa,EAAE,sBAAsB,GAAG,OAAO,IAAI,IAAsB,KAAA;CACtF,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAW,GAAG,aAAa,SAAS;EAAU;YAAnD,CACG,aACC,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,WAAW,GAAG,kBAAkB,KAAA,CAAS;GAChC;GACH;GACA;GACN,cAAY;aAEX;EACI,CAAA,IAEP,iBAAA,GAAA,kBAAA,KAAC,QAAD;GACE,WAAW,GACT;IACE,GAAG;IACH;IACA,YAAY,aAAa,iBAAiB;GAC5C,GACA,KAAA,CACF;GACA,MAAM,cAAc,KAAA,IAAY,WAAW,KAAA;GAC3C,cAAY;EACb,CAAA,GAEF,QACE;;AAET;;;;;;;;;AC/CA,SAAgB,mBAAmB,EACjC,MACA,OACA,eAAe,GACf,gBAAgB,KAMG;CACnB,IAAI,SAAS,GACX,OAAO,CACL;EAAE,MAAM;EAAY,MAAM;EAAG,UAAU;CAAK,GAC5C;EAAE,MAAM;EAAQ,MAAM;EAAG,UAAU;CAAK,CAC1C;CAEF,MAAM,cAAc,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK;CACrD,MAAM,QAA0B,CAAC;CACjC,MAAM,KAAK;EAAE,MAAM;EAAY,MAAM,cAAc;EAAG,UAAU,gBAAgB;CAAE,CAAC;CAEnF,MAAM,aAAa,MAAM,GAAG,KAAK,IAAI,eAAe,KAAK,CAAC;CAC1D,MAAM,WAAW,MAAM,KAAK,IAAI,QAAQ,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,KAAK;CAEpF,MAAM,gBAAgB,KAAK,IACzB,KAAK,IAAI,cAAc,cAAc,QAAQ,gBAAgB,eAAe,IAAI,CAAC,GACjF,gBAAgB,CAClB;CACA,MAAM,cAAc,KAAK,IACvB,KAAK,IAAI,cAAc,cAAc,gBAAgB,eAAe,IAAI,CAAC,GACzE,SAAS,SAAS,IAAK,SAAS,KAAgB,IAAI,QAAQ,CAC9D;CAEA,MAAM,SAAyD,CAAC;CAEhE,IAAI,gBAAgB,gBAAgB,GAClC,OAAO,KAAK,gBAAgB;MACvB,IAAI,gBAAgB,IAAI,QAAQ,eACrC,OAAO,KAAK,gBAAgB,CAAC;CAG/B,OAAO,KAAK,GAAG,MAAM,eAAe,WAAW,CAAC;CAGhD,IAAI,cAAc,QAAQ,gBAAgB,GACxC,OAAO,KAAK,cAAc;MACrB,IAAI,QAAQ,gBAAgB,eACjC,OAAO,KAAK,QAAQ,aAAa;CAGnC,MAAM,uBAAO,IAAI,IAAY;CAC7B,MAAM,cAAc,MAAc;EAChC,IAAI,IAAI,KAAK,IAAI,SAAS,KAAK,IAAI,CAAC,GAAG;EACvC,KAAK,IAAI,CAAC;EACV,MAAM,KAAK;GAAE,MAAM;GAAQ,MAAM;GAAG,UAAU,MAAM;EAAY,CAAC;CACnE;CAEA,KAAK,MAAM,KAAK,YAAY,WAAW,CAAC;CACxC,KAAK,MAAM,SAAS,QAClB,IAAI,UAAU,kBACZ,MAAM,KAAK;EAAE,MAAM;EAAY,KAAK;CAAQ,CAAC;MACxC,IAAI,UAAU,gBACnB,MAAM,KAAK;EAAE,MAAM;EAAY,KAAK;CAAM,CAAC;MAE3C,WAAW,KAAK;CAGpB,KAAK,MAAM,KAAK,UAAU,WAAW,CAAC;CAEtC,MAAM,KAAK;EAAE,MAAM;EAAQ,MAAM,cAAc;EAAG,UAAU,gBAAgB;CAAM,CAAC;CACnF,OAAO;AACT;AAEA,SAAS,MAAM,OAAe,KAAuB;CACnD,IAAI,MAAM,OAAO,OAAO,CAAC;CACzB,MAAM,MAAgB,CAAC;CACvB,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC;CAC7C,OAAO;AACT;AAEA,SAAgB,WAAW,EACzB,MACA,OACA,cACA,eAAe,GACf,gBAAgB,GAChB,cACA,UACA,YACA,WACA,cAAc,YAAY,cAC1B,GAAG,QACe;CAClB,MAAM,QAAQ,mBAAmB;EAAE;EAAM;EAAO;EAAc;CAAc,CAAC;CAC7E,MAAM,OAAO,iBAAiB,KAAA,IAAY,WAAW,cAAc,EAAE,IAAI,iBAAA,GAAA,kBAAA,KAAC,iBAAD,CAAkB,CAAA;CAC3F,MAAM,OAAO,aAAa,KAAA,IAAY,WAAW,UAAU,EAAE,IAAI,iBAAA,GAAA,kBAAA,KAAC,kBAAD,CAAmB,CAAA;CACpF,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,cAAY;EAAW,WAAW,GAAG,cAAc,SAAS;EAAG,GAAI;YACtE,iBAAA,GAAA,kBAAA,KAAC,MAAD,EAAA,UACG,MAAM,KAAK,MAAM,MAChB,iBAAA,GAAA,kBAAA,KAAC,MAAD;GAAqC,WAAW,GAAG,aAAa,KAAA,CAAS;aACtE,aAAa,WAAW,IAAI,IAAI,cAAc,MAAM,cAAc,MAAM,IAAI;EAC3E,GAFK,kBAAkB,MAAM,CAAC,CAE9B,CACL,EACC,CAAA;CACD,CAAA;AAET;AAEA,SAAS,kBAAkB;CACzB,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAY;EACZ,eAAc;EACd,gBAAe;EACf,eAAY;YAEZ,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAM,GAAE,iBAAkB,CAAA;CACvB,CAAA;AAET;AAEA,SAAS,mBAAmB;CAC1B,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAY;EACZ,eAAc;EACd,gBAAe;EACf,eAAY;YAEZ,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAM,GAAE,eAAgB,CAAA;CACrB,CAAA;AAET;AAEA,SAAS,kBAAkB,MAAsB,OAAuB;CACtE,QAAQ,KAAK,MAAb;EACE,KAAK,YACH,OAAO;EACT,KAAK,QACH,OAAO;EACT,KAAK,YACH,OAAO,YAAY,KAAK;EAC1B,KAAK,QACH,OAAO,QAAQ,KAAK;EACtB,SACE,OAAO,GAAG;CACd;AACF;AAEA,SAAS,cACP,MACA,cACA,MACA,MACW;CACX,QAAQ,KAAK,MAAb;EACE,KAAK,YACH,OACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;GACE,MAAK;GACL,WAAW,GAAG,aAAa,KAAA,CAAS;GACpC,cAAW;GACX,iBAAe,KAAK,YAAY,KAAA;GAChC,UAAU,KAAK;GACf,eAAe,aAAa,KAAK,IAAI;aAEpC;EACK,CAAA;EAEZ,KAAK,QACH,OACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;GACE,MAAK;GACL,WAAW,GAAG,aAAa,KAAA,CAAS;GACpC,cAAW;GACX,iBAAe,KAAK,YAAY,KAAA;GAChC,UAAU,KAAK;GACf,eAAe,aAAa,KAAK,IAAI;aAEpC;EACK,CAAA;EAEZ,KAAK,YACH,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;GAAM,WAAW,GAAG,iBAAiB,KAAA,CAAS;GAAG,eAAY;aAAO;EAE9D,CAAA;EAEV,KAAK,QACH,OACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;GACE,MAAK;GACL,WAAW,GAAG,CAAC,aAAa,KAAK,YAAY,QAAQ,GAAG,KAAA,CAAS;GACjE,gBAAc,KAAK,WAAW,SAAS,KAAA;GACvC,cAAY,QAAQ,KAAK;GACzB,eAAe,aAAa,KAAK,IAAI;aAEpC,KAAK;EACA,CAAA;CAEd;AACF;;;AC7OA,SAAgB,SAAS,EACvB,UAAU,YACV,eAAe,MACf,WACA,GAAG,QACa;CAChB,OACE,iBAAA,GAAA,kBAAA,KAAC,YAAD;EACE,WAAW,GACT;GACE;GACA,YAAY,cAAc,YAAY;GACtC,iBAAiB,QAAQ,YAAY;EACvC,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;ACxBA,SAAS,aAAa,EAAE,WAAW,UAAU,GAAG,QAAuB;CACrE,OACE,iBAAA,GAAA,kBAAA,KAAC,wBAAA,SAAa,MAAd;EAAmB,WAAW,GAAG,YAAY,SAAS;EAAG,GAAI;YAC1D,YACC,iBAAA,GAAA,kBAAA,KAAC,mBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAC,aAAD,CAAY,CAAA,EACK,CAAA;CAEJ,CAAA;AAEvB;AAIA,SAAS,kBAAkB,EAAE,WAAW,GAAG,QAAgC;CACzE,OAAO,iBAAA,GAAA,kBAAA,KAAC,wBAAA,SAAa,WAAd;EAAwB,WAAW,GAAG,sBAAsB,SAAS;EAAG,GAAI;CAAO,CAAA;AAC5F;AAEA,SAAS,cAAY;CACnB,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAa;EACb,eAAc;EACd,gBAAe;EACf,OAAM;EACN,QAAO;EACP,eAAA;YAEA,iBAAA,GAAA,kBAAA,KAAC,YAAD,EAAU,QAAO,iBAAkB,CAAA;CAChC,CAAA;AAET;AAEA,IAAa,WAAW,OAAO,OAAO,cAAc,EAClD,WAAW,kBACb,CAAC;;;ACrCD,SAAS,UAAU,EAAE,WAAW,UAAU,GAAG,QAAoB;CAC/D,OACE,iBAAA,GAAA,kBAAA,KAAC,qBAAA,MAAU,MAAX;EAAgB,WAAW,GAAG,SAAS,SAAS;EAAG,GAAI;YACpD,YAAY,iBAAA,GAAA,kBAAA,KAAC,gBAAD,CAAiB,CAAA;CAChB,CAAA;AAEpB;AAIA,SAAS,eAAe,EAAE,WAAW,GAAG,QAA6B;CACnE,OAAO,iBAAA,GAAA,kBAAA,KAAC,qBAAA,MAAU,WAAX;EAAqB,WAAW,GAAG,mBAAmB,SAAS;EAAG,GAAI;CAAO,CAAA;AACtF;AAEA,IAAa,QAAQ,OAAO,OAAO,WAAW,EAC5C,WAAW,eACb,CAAC;AAQD,SAAgB,WAAW,EAAE,cAAc,cAAc,WAAW,GAAG,QAAyB;CAC9F,OACE,iBAAA,GAAA,kBAAA,KAAC,2BAAA,YAAD;EACE,WAAW,GACT,CAAC,eAAe,gBAAgB,cAAc,sBAAsB,GACpE,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;AC3BA,SAAgB,SAAS,EACvB,OACA,MAAM,KACN,UAAU,WACV,OAAO,MACP,WACA,GAAG,QACa;CAChB,OACE,iBAAA,GAAA,kBAAA,KAAC,YAAD;EACS;EACF;EACL,WAAW,GACT;GACE;GACA,YAAY,aAAa,YAAY;GACrC,SAAS,QAAQ,YAAY;EAC/B,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;ACxBA,SAAgB,QAAQ,EAAE,OAAO,MAAM,QAAQ,WAAW,WAAW,GAAG,QAAsB;CAC5F,OACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;EACE,cAAY;EACZ,WAAW,GAAG,CAAC,WAAW,SAAS,QAAQ,WAAW,MAAM,GAAG,SAAS;EACxE,GAAI;CACL,CAAA;AAEL;;;ACfA,SAAS,WAAW,EAAE,WAAW,UAAU,GAAG,QAAqB;CACjE,OACE,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,MAAZ;EAAiB,WAAW,GAAG,UAAU,SAAS;EAAG,GAAI;YACtD,YAAY,iBAAA,GAAA,kBAAA,KAAC,aAAD,CAAc,CAAA;CACZ,CAAA;AAErB;AAIA,SAAS,YAAY,EAAE,WAAW,GAAG,QAA0B;CAC7D,OAAO,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,OAAZ;EAAkB,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAO,CAAA;AAChF;AAEA,IAAa,SAAS,OAAO,OAAO,YAAY,EAC9C,OAAO,YACT,CAAC;;;;;;;;;;ACbD,IAAa,0BAAA,GAAA,MAAA,eAA6E,IAAI;;;ACF9F,SAAS,WAAW,OAAoB;CACtC,OAAO,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,MAAZ,EAAiB,GAAI,MAAQ,CAAA;AACtC;AAYA,SAAS,cAAc,EACrB,UAAU,YACV,cAAc,MACd,WACA,GAAG,QACkB;CACrB,OACE,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,SAAZ;EACE,WAAW,GACT;GACE;GACA,YAAY,cAAc,UAAU;GACpC,gBAAgB,QAAQ,UAAU;EACpC,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAIA,SAAS,YAAY,OAAyB;CAC5C,OAAO,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,OAAZ,EAAkB,GAAI,MAAQ,CAAA;AACvC;AAIA,SAAS,WAAW,EAAE,WAAW,UAAU,GAAG,QAAyB;CACrE,OACE,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,MAAZ;EAAiB,WAAW,GAAG,eAAe,SAAS;EAAG,GAAI;YAC3D,YAAY,iBAAA,GAAA,kBAAA,KAAC,iBAAD,CAAkB,CAAA;CAChB,CAAA;AAErB;AAMA,SAAS,YAAY,EAAE,WAAW,aAAa,GAAG,UAAU,GAAG,QAA0B;CACvF,MAAM,mBAAA,GAAA,MAAA,YAA6B,sBAAsB;CACzD,OACE,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,QAAZ;EAAmB,WAAW,mBAAmB,KAAA;YAS/C,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,YAAZ;GAAmC;GAAY,sBAAsB;aACnE,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,OAAZ;IAAkB,WAAW,GAAG,gBAAgB,SAAS;IAAG,GAAI;IAC7D;GACe,CAAA;EACG,CAAA;CACN,CAAA;AAEvB;AAIA,SAAS,WAAW,EAAE,WAAW,GAAG,QAAyB;CAC3D,OAAO,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,MAAZ;EAAiB,WAAW,GAAG,eAAe,SAAS;EAAG,GAAI;CAAO,CAAA;AAC9E;AAIA,SAAS,eAAe,OAA4B;CAClD,OAAO,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,UAAZ,EAAqB,GAAI,MAAQ,CAAA;AAC1C;AAIA,SAAS,oBAAoB,EAAE,WAAW,UAAU,GAAG,QAAkC;CACvF,OACE,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,eAAZ;EAA0B,WAAW,GAAG,yBAAyB,SAAS;EAAG,GAAI;YAC9E,YAAY,iBAAA,GAAA,kBAAA,KAAC,WAAD,CAAY,CAAA;CACD,CAAA;AAE9B;AAIA,SAAS,YAAY,OAAyB;CAC5C,OAAO,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,OAAZ,EAAkB,GAAI,MAAQ,CAAA;AACvC;AAIA,SAAS,iBAAiB,EAAE,WAAW,GAAG,QAA+B;CACvE,OAAO,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,YAAZ;EAAuB,WAAW,GAAG,sBAAsB,SAAS;EAAG,GAAI;CAAO,CAAA;AAC3F;AAEA,SAAS,YAAY;CACnB,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAa;EACb,eAAc;EACd,gBAAe;EACf,OAAM;EACN,QAAO;EACP,eAAA;YAEA,iBAAA,GAAA,kBAAA,KAAC,YAAD,EAAU,QAAO,iBAAkB,CAAA;CAChC,CAAA;AAET;AAEA,SAAS,kBAAkB;CACzB,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAa;EACb,eAAc;EACd,gBAAe;EACf,OAAM;EACN,QAAO;EACP,eAAA;YAEA,iBAAA,GAAA,kBAAA,KAAC,YAAD,EAAU,QAAO,iBAAkB,CAAA;CAChC,CAAA;AAET;AAEA,IAAa,SAAS,OAAO,OAAO,YAAY;CAC9C,SAAS;CACT,OAAO;CACP,MAAM;CACN,OAAO;CACP,MAAM;CACN,UAAU;CACV,eAAe;CACf,OAAO;CACP,YAAY;AACd,CAAC;;;;;;;;;ACjJD,SAAgB,UAAU,EAAE,OAAO,MAAM,SAAS,WAAW,GAAG,QAAwB;CACtF,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,WAAW,GACT;GAAC;GAAa,SAAS,QAAQ,aAAa;GAAQ,WAAW;EAAmB,GAClF,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;;;;;ACJA,SAAS,cAAc,EACrB,UAAU,WACV,UACA,SACA,WACA,GAAG,QACkB;CACrB,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,WAAW,GACT;GACE;GACA,YAAY,aAAa,QAAQ;GACjC,YAAY;GACZ,WAAW;EACb,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;;;;AAwBA,SAAS,SAAS,EAChB,SACA,UACA,SACA,MACA,OACA,aACA,SACA,SACA,WACA,UACA,GAAG,QACS;CAEZ,MAAM,UADW,SAAS,KAAA,KAAa,UAAU,KAAA,IACtB,iBAAA,GAAA,kBAAA,KAAC,WAAD;EAAiB;YAAO;CAAiB,CAAA,IAAI;CACxE,OACE,iBAAA,GAAA,kBAAA,KAAC,eAAD;EACW;EACC;EACD;EACE;EACX,GAAI;YAEJ,iBAAA,GAAA,kBAAA,MAAC,UAAD,EAAA,UAAA;GACG,YAAY,KAAA,IACX,iBAAA,GAAA,kBAAA,MAAC,YAAD,EAAA,UAAA,CACG,SACD,iBAAA,GAAA,kBAAA,KAAC,aAAD,EAAA,UAAc,QAAqB,CAAA,CACzB,EAAA,CAAA,IAEZ;GAED,gBAAgB,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,iBAAD,EAAA,UAAkB,YAA6B,CAAA,IAAI;GAC/E;GACA,YAAY,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,aAAD,EAAA,UAAc,QAAqB,CAAA,IAAI;EACxD,EAAA,CAAA;CACG,CAAA;AAEnB;AAGA,SAAS,SAAS,EAAE,WAAW,GAAG,QAAuB;CACvD,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,aAAa,SAAS;EAAG,GAAI;CAAO,CAAA;AAChE;AAGA,SAAS,WAAW,EAAE,WAAW,GAAG,QAAyB;CAC3D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,eAAe,SAAS;EAAG,GAAI;CAAO,CAAA;AAClE;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,QAA0B;CAC7D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAO,CAAA;AACnE;AAMA,SAAS,UAAU,EAAE,MAAM,WAAW,UAAU,GAAG,QAAwB;CACzE,OACE,iBAAA,GAAA,kBAAA,MAAC,MAAD;EAAI,WAAW,GAAG,cAAc,SAAS;EAAG,GAAI;YAAhD,CACG,WAAW,IAAI,GACf,QACC;;AAER;AAGA,SAAS,gBAAgB,EAAE,WAAW,GAAG,QAA8B;CACrE,OAAO,iBAAA,GAAA,kBAAA,KAAC,KAAD;EAAG,WAAW,GAAG,oBAAoB,SAAS;EAAG,GAAI;CAAO,CAAA;AACrE;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,QAA0B;CAC7D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAO,CAAA;AACnE;AAEA,IAAa,OAAO,OAAO,OAAO,UAAU;CAC1C,WAAW;CACX,MAAM;CACN,QAAQ;CACR,SAAS;CACT,OAAO;CACP,aAAa;CACb,SAAS;AACX,CAAC;;;;;;;;;;;AC/HD,SAAgB,SAAS,EACvB,UAAU,WACV,OACA,OACA,QACA,MACA,SACA,UACA,WACA,UACA,GAAG,QACa;CAChB,MAAM,WAAW,SAAS,KAAA,KAAa,UAAU,KAAA;CACjD,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,WAAW,GACT;GACE;GACA;GACA,YAAY,aAAa,QAAQ;GACjC,WAAW;GACX,YAAY;EACd,GACA,SACF;EACA,GAAI;YAXN;GAaG,WACC,iBAAA,GAAA,kBAAA,MAAC,KAAD;IAAG,WAAW,GAAG,mBAAmB,KAAA,CAAS;cAA7C,CACG,WAAW,IAAI,GACf,KACA;QACD;GACH,UAAU,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,KAAD;IAAG,WAAW,GAAG,mBAAmB,KAAA,CAAS;cAAI;GAAS,CAAA,IAAI;GACpF,WAAW,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,KAAD;IAAG,WAAW,GAAG,oBAAoB,KAAA,CAAS;cAAI;GAAU,CAAA,IAAI;GACvF;EACE;;AAET;;;AC/CA,IAAM,iBAAA,GAAA,MAAA,eAAyD,IAAI;AAEnE,SAAS,mBAAmB;CAC1B,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAY;EACZ,eAAc;EACd,gBAAe;EACf,eAAY;YATd,CAWE,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAM,GAAE,aAAc,CAAA,GACtB,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAM,GAAE,aAAc,CAAA,CACnB;;AAET;;;;;;AAqBA,SAAS,gBAAgB,EACvB,MACA,cACA,OAAO,MACP,WAAW,OACX,WACA,UACA,GAAG,QACoB;CACvB,MAAM,OAAA,GAAA,MAAA,QAAuC,IAAI;CACjD,MAAM,mBAAA,GAAA,MAAA,QAAyB,YAAY;CAC3C,gBAAgB,UAAU;CAE1B,CAAA,GAAA,MAAA,iBAAgB;EACd,MAAM,KAAK,IAAI;EACf,IAAI,CAAC,MAAM,SAAS,KAAA,GAAW;EAC/B,IAAI,QAAQ,CAAC,GAAG,MAAM,GAAG,UAAU;OAC9B,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,MAAM;CACtC,GAAG,CAAC,IAAI,CAAC;CAET,CAAA,GAAA,MAAA,iBAAgB;EACd,MAAM,KAAK,IAAI;EACf,IAAI,CAAC,IAAI;EACT,MAAM,oBAAoB,gBAAgB,UAAU,KAAK;EACzD,GAAG,iBAAiB,SAAS,WAAW;EACxC,aAAa,GAAG,oBAAoB,SAAS,WAAW;CAC1D,GAAG,CAAC,CAAC;CAML,OACE,iBAAA,GAAA,kBAAA,KAAC,cAAc,UAAf;EAAwB,OAAO,EAJ/B,aAAa,IAAI,SAAS,MAAM,EAID;YAC7B,iBAAA,GAAA,kBAAA,KAAC,uBAAuB,UAAxB;GAAiC,OAAO;aACtC,iBAAA,GAAA,kBAAA,KAAC,UAAD;IACO;IACL,WAAW,GAAG,CAAC,UAAU,SAAS,QAAQ,UAAU,MAAM,GAAG,SAAS;IAC5D;IACV,GAAI;IAEH;GACK,CAAA;EACuB,CAAA;CACX,CAAA;AAE5B;AAIA,SAAS,aAAa,EAAE,WAAW,GAAG,QAA2B;CAC/D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,iBAAiB,SAAS;EAAG,GAAI;CAAO,CAAA;AACpE;AAOA,SAAS,YAAY,EAAE,MAAM,WAAW,UAAU,GAAG,QAA0B;CAC7E,OACE,iBAAA,GAAA,kBAAA,MAAC,MAAD;EAAI,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;YAAlD,CACG,WAAW,IAAI,GACf,QACC;;AAER;AAIA,SAAS,kBAAkB,EAAE,WAAW,GAAG,QAAgC;CACzE,OAAO,iBAAA,GAAA,kBAAA,KAAC,KAAD;EAAG,WAAW,GAAG,sBAAsB,SAAS;EAAG,GAAI;CAAO,CAAA;AACvE;AAIA,SAAS,WAAW,EAAE,WAAW,GAAG,QAAyB;CAC3D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,eAAe,SAAS;EAAG,GAAI;CAAO,CAAA;AAClE;AAIA,SAAS,aAAa,EAAE,WAAW,GAAG,QAA2B;CAC/D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,iBAAiB,SAAS;EAAG,GAAI;CAAO,CAAA;AACpE;AAOA,SAAS,kBAAkB,EACzB,MACA,WACA,UACA,SACA,OAAO,UACP,cAAc,YAAY,SAC1B,GAAG,QACsB;CACzB,MAAM,OAAA,GAAA,MAAA,YAAiB,aAAa;CACpC,OACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;EACQ;EACN,WAAW,GAAG,gBAAgB,SAAS;EACvC,cAAY;EACZ,UAAU,UAAU;GAClB,UAAU,KAAK;GACf,IAAI,CAAC,MAAM,kBAAkB,KAAK,MAAM;EAC1C;EACA,GAAI;YAEH,aAAa,SAAS,KAAA,IAAY,WAAW,IAAI,IAAI,iBAAA,GAAA,kBAAA,KAAC,kBAAD,CAAmB,CAAA;CACnE,CAAA;AAEZ;;;;;;AAuBA,SAAS,WAAW,EAClB,MACA,OACA,aACA,SACA,cAAc,MACd,aAAa,SACb,UACA,GAAG,kBACW;CACd,MAAM,WAAW,UAAU,KAAA,KAAa,SAAS,KAAA;CACjD,MAAM,aAAa,YAAY;CAC/B,OACE,iBAAA,GAAA,kBAAA,MAAC,iBAAD;EAAiB,GAAI;YAArB;GACG,aACC,iBAAA,GAAA,kBAAA,MAAC,cAAD,EAAA,UAAA,CACG,WACC,iBAAA,GAAA,kBAAA,KAAC,aAAD;IAAmB;cAAO;GAAmB,CAAA,IAE7C,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAM,WAAW,GAAG,UAAU,KAAA,CAAS,EAAI,CAAA,GAE5C,cAAc,iBAAA,GAAA,kBAAA,KAAC,mBAAD,EAAmB,cAAY,WAAa,CAAA,IAAI,IACnD,EAAA,CAAA,IACZ;GACH,gBAAgB,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,mBAAD,EAAA,UAAoB,YAA+B,CAAA,IAAI;GACnF,aAAa,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,YAAD,EAAa,SAAqB,CAAA,IAAI;GAC/D,YAAY,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,cAAD,EAAA,UAAe,QAAsB,CAAA,IAAI;EACnD;;AAErB;AAEA,IAAa,SAAS,OAAO,OAAO,YAAY;CAC9C,WAAW;CACX,QAAQ;CACR,OAAO;CACP,aAAa;CACb,MAAM;CACN,QAAQ;CACR,aAAa;AACf,CAAC;;;;;;;;AC5ND,SAAS,eAAe,EAAE,WAAW,GAAG,QAA6B;CACnE,OAAO,iBAAA,GAAA,kBAAA,KAAC,qBAAA,MAAU,MAAX;EAAgB,WAAW,GAAG,SAAS,SAAS;EAAG,GAAI;CAAO,CAAA;AACvE;;;;;;;AA4BA,SAAS,UAAU,EACjB,OACA,aACA,OACA,UACA,QACA,WACA,UACA,GAAG,QACU;CACb,MAAM,UAAU,UAAU,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,YAAD;EAAsB;YAAW;CAAkB,CAAA,IAAI;CAC7F,MAAM,gBACJ,gBAAgB,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,kBAAD,EAAA,UAAmB,YAA8B,CAAA,IAAI;CACnF,MAAM,UAAU,UAAU,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,YAAD;EAAY,OAAO;YAAO;CAAkB,CAAA,IAAI;CACtF,OACE,iBAAA,GAAA,kBAAA,MAAC,gBAAD;EAAgB,WAAW,GAAG,UAAU,aAAa,SAAS;EAAG,GAAI;YAArE;GACG,SACC,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACG,UACA,OACD,EAAA,CAAA,IAEF,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACG,SACA,QACD,EAAA,CAAA;GAEH;GACA;EACa;;AAEpB;AAOA,SAAS,WAAW,EAAE,WAAW,UAAU,GAAG,QAAyB;CACrE,OACE,iBAAA,GAAA,kBAAA,KAAC,qBAAA,MAAU,OAAX;EACE,iBAAe,WAAW,KAAK,KAAA;EAC/B,WAAW,GAAG,eAAe,SAAS;EACtC,GAAI;CACL,CAAA;AAEL;AAIA,SAAS,iBAAiB,EAAE,WAAW,GAAG,QAA+B;CACvE,OAAO,iBAAA,GAAA,kBAAA,KAAC,qBAAA,MAAU,aAAX;EAAuB,WAAW,GAAG,qBAAqB,SAAS;EAAG,GAAI;CAAO,CAAA;AAC1F;AAIA,SAAS,WAAW,EAAE,WAAW,GAAG,QAAyB;CAC3D,OAAO,iBAAA,GAAA,kBAAA,KAAC,qBAAA,MAAU,OAAX;EAAiB,WAAW,GAAG,eAAe,SAAS;EAAG,GAAI;CAAO,CAAA;AAC9E;AAEA,IAAa,QAAQ,OAAO,OAAO,WAAW;CAC5C,WAAW;CACX,OAAO;CACP,aAAa;CACb,OAAO;AACT,CAAC;;;AC1GD,SAAS,WAAW,EAAE,WAAW,GAAG,QAAqB;CACvD,OAAO,iBAAA,GAAA,kBAAA,KAAC,UAAD;EAAQ,WAAW,GAAG,UAAU,SAAS;EAAG,GAAI;CAAO,CAAA;AAChE;AAIA,SAAS,YAAY,EAAE,WAAW,GAAG,QAA0B;CAC7D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAO,CAAA;AACnE;AAIA,SAAS,WAAW,EAAE,WAAW,UAAU,GAAG,QAAyB;CACrE,OACE,iBAAA,GAAA,kBAAA,KAAC,KAAD;EAAG,WAAW,GAAG,eAAe,SAAS;EAAG,GAAI;EAC7C;CACA,CAAA;AAEP;AAIA,SAAS,WAAW,EAAE,WAAW,GAAG,QAAyB;CAC3D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,eAAe,SAAS;EAAG,GAAI;CAAO,CAAA;AAClE;AAEA,IAAa,SAAS,OAAO,OAAO,YAAY;CAC9C,OAAO;CACP,MAAM;CACN,MAAM;AACR,CAAC;;;AC3BD,SAAS,SAAS,EAAE,WAAW,GAAG,QAAmB;CACnD,OAAO,iBAAA,GAAA,kBAAA,KAAC,WAAD;EAAS,WAAW,GAAG,QAAQ,SAAS;EAAG,GAAI;CAAO,CAAA;AAC/D;AAIA,SAAS,YAAY,EAAE,WAAW,GAAG,QAA0B;CAC7D,OAAO,iBAAA,GAAA,kBAAA,KAAC,WAAD;EAAS,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAO,CAAA;AACvE;AAIA,SAAS,UAAU,EAAE,WAAW,OAAO,QAAQ,GAAG,QAAwB;CACxE,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAW;EAAM,WAAW,GAAG,cAAc,SAAS;EAAG,GAAI;CAAO,CAAA;AAC7E;AAiBA,SAAS,SAAS,OAAsB;CACtC,MAAM,OAAA,GAAA,MAAA,QAAiC,IAAI;CAC3C,MAAM,SAAS,MAAM;CAErB,MAAM,EAAE,kBAAkB,iBAAiB,UAAU,cAAc,IAAI,SAAS,MAAM,GAAG,EACvF,SAAS,EAAE,cAAc,SAAS,MAAM,UAC1C,CAAC;CAED,IAAI,MAAM,SAAS,KAAA,GAAW;EAC5B,MAAM,EAAE,WAAW,OAAO,YAAY,MAAM,UAAU,QAAQ,KAAK,GAAG,SAAS;EAC/E,OACE,iBAAA,GAAA,kBAAA,MAAC,KAAD;GACO;GACC;GACN,qBAAmB;GACnB,WAAW,GAAG,aAAa,SAAS;GACpC,GAAI;aALN;IAOG,WAAW,IAAI;IACf;IACA,iBAAiB,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,KAAD,EAAK,MAAM,aAAe,CAAA,IAAI;GAC3D;;CAEP;CACA,MAAM,EACJ,WACA,OAAO,UACP,OAAO,YACP,MACA,UACA,QAAQ,KACR,GAAG,SACD;CACJ,OACE,iBAAA,GAAA,kBAAA,MAAC,UAAD;EACO;EACC;EACA;EACN,qBAAmB;EACnB,WAAW,GAAG,aAAa,SAAS;EACpC,GAAI;YANN;GAQG,WAAW,IAAI;GACf;GACA,iBAAiB,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,KAAD,EAAK,MAAM,aAAe,CAAA,IAAI;EACtD;;AAEZ;AAIA,SAAS,cAAc,EAAE,WAAW,GAAG,QAA4B;CACjE,OAAO,iBAAA,GAAA,kBAAA,KAAC,MAAD;EAAI,WAAW,GAAG,kBAAkB,SAAS;EAAG,GAAI;CAAO,CAAA;AACpE;AAIA,SAAS,UAAU,EAAE,WAAW,OAAO,SAAS,GAAG,QAAwB;CACzE,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAW;EAAM,WAAW,GAAG,cAAc,SAAS;EAAG,GAAI;CAAO,CAAA;AAC7E;AAIA,SAAS,eAAe,EAAE,WAAW,GAAG,QAA6B;CACnE,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,oBAAoB,SAAS;EAAG,GAAI;CAAO,CAAA;AACvE;AAEA,IAAa,OAAO,OAAO,OAAO,UAAU;CAC1C,SAAS;CACT,OAAO;CACP,MAAM;CACN,WAAW;CACX,OAAO;CACP,YAAY;AACd,CAAC;;;ACzGD,SAAS,WAAW,EAAE,WAAW,GAAG,QAAqB;CACvD,OAAO,iBAAA,GAAA,kBAAA,KAAC,UAAD;EAAQ,WAAW,GAAG,UAAU,SAAS;EAAG,GAAI;CAAO,CAAA;AAChE;AAIA,SAAS,YAAY,EAAE,WAAW,GAAG,QAA0B;CAC7D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAO,CAAA;AACnE;AAIA,SAAS,YAAY,EAAE,WAAW,GAAG,QAA0B;CAC7D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAO,CAAA;AACnE;AAQA,SAAS,WAAW,EAAE,QAAQ,MAAM,WAAW,UAAU,GAAG,QAAyB;CACnF,OACE,iBAAA,GAAA,kBAAA,MAAC,KAAD;EACE,WAAW,GAAG,eAAe,SAAS;EACtC,gBAAc,SAAS,SAAS,KAAA;EAChC,GAAI;YAHN,CAKG,WAAW,IAAI,GACf,QACA;;AAEP;AAOA,SAAS,eAAe,EAAE,OAAO,WAAW,UAAU,GAAG,QAA6B;CACpF,OACE,iBAAA,GAAA,kBAAA,MAAC,MAAD;EAAiB;EAAW,GAAI;YAAhC,CACE,iBAAA,GAAA,kBAAA,KAAC,KAAK,SAAN;GAAc,WAAW,GAAG,eAAe,KAAA,CAAS;aAAI;EAAoB,CAAA,GAC5E,iBAAA,GAAA,kBAAA,KAAC,KAAK,OAAN,EAAa,SAAqB,CAAA,CAC9B;;AAEV;AAIA,SAAS,cAAc,EAAE,WAAW,GAAG,QAA4B;CACjE,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,kBAAkB,SAAS;EAAG,GAAI;CAAO,CAAA;AACrE;AAUA,SAAS,mBAAmB,EAC1B,QAAQ,aACR,WACA,OAAO,UACP,GAAG,QACuB;CAC1B,MAAM,QAAQ,YAAY;CAC1B,MAAM,OAAO,OAAO,oBAAoB;CAExC,OACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;EACQ;EACN,cAAY;EACZ,iBAAe;EACf,eAAe,OAAO,oBAAoB,CAAC,IAAI;EAC/C,WAAW,GAAG,wBAAwB,SAAS;EAC/C,GAAI;CACL,CAAA;AAEL;AAEA,IAAa,SAAS,OAAO,OAAO,YAAY;CAC9C,OAAO;CACP,OAAO;CACP,MAAM;CACN,UAAU;CACV,SAAS;CACT,cAAc;AAChB,CAAC;;;ACtFD,SAAS,SAAS,EAChB,UAAU,YACV,OAAO,MACP,YAAY,OACZ,WACA,GAAG,QACS;CACZ,OACE,iBAAA,GAAA,kBAAA,KAAC,oBAAA,KAAS,MAAV;EACE,WAAW,GACT;GACE;GACA,YAAY,cAAc,QAAQ;GAClC,SAAS,QAAQ,QAAQ;GACzB,aAAa;EACf,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAIA,SAAS,SAAS,EAAE,WAAW,GAAG,QAAuB;CACvD,OAAO,iBAAA,GAAA,kBAAA,KAAC,oBAAA,KAAS,MAAV;EAAe,WAAW,GAAG,YAAY,SAAS;EAAG,GAAI;CAAO,CAAA;AACzE;AAIA,SAAS,QAAQ,EAAE,WAAW,GAAG,QAAsB;CACrD,OAAO,iBAAA,GAAA,kBAAA,KAAC,oBAAA,KAAS,KAAV;EAAc,WAAW,GAAG,OAAO,SAAS;EAAG,GAAI;CAAO,CAAA;AACnE;AAIA,SAAS,UAAU,EAAE,WAAW,GAAG,QAAwB;CACzD,OAAO,iBAAA,GAAA,kBAAA,KAAC,oBAAA,KAAS,OAAV;EAAgB,WAAW,GAAG,aAAa,SAAS;EAAG,GAAI;CAAO,CAAA;AAC3E;AAIA,SAAS,cAAc,EAAE,WAAW,GAAG,QAA4B;CACjE,OAAO,iBAAA,GAAA,kBAAA,KAAC,oBAAA,KAAS,WAAV;EAAoB,WAAW,GAAG,iBAAiB,SAAS;EAAG,GAAI;CAAO,CAAA;AACnF;AAEA,IAAa,OAAO,OAAO,OAAO,UAAU;CAC1C,MAAM;CACN,KAAK;CACL,OAAO;CACP,WAAW;AACb,CAAC;;;;;;;;;AClDD,SAAgB,UAAU,EAAE,QAAQ,WAAW,GAAG,QAAwB;CACxE,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,CAAC,cAAc,UAAU,mBAAmB,GAAG,SAAS;EAAG,GAAI;CAAO,CAAA;AAClG;;;ACVA,SAAS,gBAAgB,OAA6B;CACpD,OAAO,iBAAA,GAAA,kBAAA,KAAC,uBAAA,QAAY,UAAb,EAAsB,GAAI,MAAQ,CAAA;AAC3C;AAIA,SAAS,YAAY,OAAyB;CAC5C,OAAO,iBAAA,GAAA,kBAAA,KAAC,uBAAA,QAAY,MAAb,EAAkB,GAAI,MAAQ,CAAA;AACvC;AAIA,SAAS,eAAe,OAA4B;CAClD,OAAO,iBAAA,GAAA,kBAAA,KAAC,uBAAA,QAAY,SAAb,EAAqB,GAAI,MAAQ,CAAA;AAC1C;AAaA,SAAS,aAAa,EACpB,OAAO,MACP,OAAO,OACP,QAAQ,UACR,aAAa,GACb,OAAO,WACP,WACA,UACA,GAAG,QACiB;CACpB,MAAM,mBAAA,GAAA,MAAA,YAA6B,sBAAsB;CACzD,OACE,iBAAA,GAAA,kBAAA,KAAC,uBAAA,QAAY,QAAb;EAAoB,WAAW,mBAAmB,KAAA;YAChD,iBAAA,GAAA,kBAAA,KAAC,uBAAA,QAAY,YAAb;GAAoC;GAAkB;GAAa;aACjE,iBAAA,GAAA,kBAAA,KAAC,uBAAA,QAAY,OAAb;IACQ;IACN,WAAW,GAAG,CAAC,WAAW,SAAS,QAAQ,WAAW,MAAM,GAAG,SAAS;IACxE,GAAI;IAEH;GACgB,CAAA;EACG,CAAA;CACN,CAAA;AAExB;AAaA,SAAS,iBAAiB,EACxB,SACA,MACA,OACA,YACA,MACA,UACA,GAAG,aACY;CACf,OACE,iBAAA,GAAA,kBAAA,MAAC,aAAD;EAAa,GAAI;YAAjB,CACE,iBAAA,GAAA,kBAAA,KAAC,uBAAA,QAAY,SAAb,EAAqB,QAAQ,SAAW,CAAA,GACxC,iBAAA,GAAA,kBAAA,KAAC,cAAD;GAAoB;GAAa;GAAmB;GAAkB;aACnE;EACW,CAAA,CACH;;AAEjB;AAEA,IAAa,UAAU,OAAO,OAAO,kBAAkB;CACrD,UAAU;CACV,MAAM;CACN,SAAS;CACT,OAAO;AACT,CAAC;;;ACzFD,SAAS,UAAU,EAAE,aAAoC;CACvD,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,OAAM;EACN,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAY;EACZ,eAAc;EACd,gBAAe;EACf,eAAY;EACD;YAXb,CAaE,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAM,GAAE,+EAAgF,CAAA,GACxF,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAM,GAAE,+DAAgE,CAAA,CACrE;;AAET;AAEA,SAAS,WAAW,EAAE,aAAoC;CACxD,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,OAAM;EACN,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAY;EACZ,eAAc;EACd,gBAAe;EACf,eAAY;EACD;YAEX,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAM,GAAE,mBAAoB,CAAA;CACzB,CAAA;AAET;AAcA,SAAS,iBAAiB,EACxB,SACA,SACA,gBACA,OACA,WACA,UACA,GAAG,QACiB;CACpB,OACE,iBAAA,GAAA,kBAAA,MAAC,WAAD;EACE,WAAW,GACT;GACE;GACA,WAAW;GACX,WAAW;GACX,kBAAkB;EACpB,GACA,SACF;EACA,GAAI;YAVN,CAYG,UAAU,KAAA,IACT,iBAAA,GAAA,kBAAA,KAAC,MAAD;GAAI,WAAW,GAAG,uBAAuB,KAAA,CAAS;aAAI;EAAU,CAAA,IAC9D,MACJ,iBAAA,GAAA,kBAAA,KAAC,MAAD;GAAI,WAAW,GAAG,uBAAuB,KAAA,CAAS;GAAI;EAAa,CAAA,CAC5D;;AAEb;AAaA,SAAS,aAAa,OAA2B;CAC/C,IAAI,SAAS,MAAM,OAAO;CAC1B,IAAI,OAAO,UAAU,UAAU,OAAO,MAAM,KAAK,MAAM;CACvD,OAAO;AACT;AAKA,SAAS,iBAAiB,EACxB,OACA,OACA,SACA,UACA,WACA,UACA,GAAG,QACqB;CACxB,IAAI,aAAa,KAAA,GACf,OAAO,iBAAA,GAAA,kBAAA,KAAA,kBAAA,UAAA,EAAG,SAAW,CAAA;CAEvB,MAAM,QAAQ,aAAa,KAAK;CAChC,OACE,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,mBAAD,EAAA,UAAoB,MAAyB,CAAA,GAC7C,iBAAA,GAAA,kBAAA,KAAC,mBAAD;EACW;EACC;EACH;EACP,WAAW,cAAc,OAAO,UAAU,WAAW,QAAQ,KAAA;EAC7D,GAAI;YAEH,QAAQ,MAAM;CACE,CAAA,CACnB,EAAA,CAAA;AAEN;AAGA,SAAS,kBAAkB,EAAE,WAAW,GAAG,QAAgC;CACzE,OAAO,iBAAA,GAAA,kBAAA,KAAC,MAAD;EAAI,WAAW,GAAG,uBAAuB,SAAS;EAAG,GAAI;CAAO,CAAA;AACzE;AAYA,SAAS,kBAAkB,EACzB,SACA,UACA,OACA,WACA,WACA,UACA,GAAG,QACsB;CACzB,MAAM,SAAA,GAAA,MAAA,QAAmC,IAAI;CAC7C,MAAM,CAAC,QAAQ,cAAA,GAAA,MAAA,UAAsB,KAAK;CAE1C,eAAe,aAAa;EAC1B,MAAM,OAAO,aAAa,MAAM,SAAS,aAAa,KAAK,KAAK;EAChE,IAAI,CAAC,MAAM;EACX,IAAI;GACF,MAAM,UAAU,UAAU,UAAU,IAAI;GACxC,UAAU,IAAI;GACd,iBAAiB,UAAU,KAAK,GAAG,IAAI;EACzC,QAAQ,CAER;CACF;CAEA,OACE,iBAAA,GAAA,kBAAA,MAAC,MAAD;EACE,KAAK;EACL,WAAW,GACT;GACE;GACA,WAAW;GACX,YAAY;GACZ,SAAS;EACX,GACA,SACF;EACA,GAAI;YAXN,CAaG,UACD,iBAAA,GAAA,kBAAA,MAAC,UAAD;GACE,MAAK;GACL,cAAW;GACX,WAAW,GAAG,sBAAsB,KAAA,CAAS;GAC7C,SAAS;GACT,eAAa,SAAS,SAAS,KAAA;aALjC,CAOE,iBAAA,GAAA,kBAAA,KAAC,WAAD,EAAW,WAAW,GAAG,2BAA2B,KAAA,CAAS,EAAI,CAAA,GACjE,iBAAA,GAAA,kBAAA,KAAC,YAAD,EAAY,WAAW,GAAG,kCAAkC,KAAA,CAAS,EAAI,CAAA,CACnE;IACN;;AAER;AAEA,IAAa,eAAe,OAAO,OAAO,kBAAkB;CAC1D,MAAM;CACN,OAAO;CACP,OAAO;AACT,CAAC;;;ACnMD,SAAS,UAAU,EAAE,SAAS,UAAU,SAAS,QAAQ,WAAW,GAAG,QAAoB;CACzF,OACE,iBAAA,GAAA,kBAAA,KAAC,SAAD;EACE,WAAW,GACT;GACE;GACA,WAAW;GACX,YAAY;GACZ,WAAW;GACX,UAAU;EACZ,GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAGA,SAAS,UAAU,EAAE,WAAW,GAAG,QAAwB;CACzD,OAAO,iBAAA,GAAA,kBAAA,KAAC,SAAD;EAAkB;EAAW,GAAI;CAAO,CAAA;AACjD;AAGA,SAAS,UAAU,EAAE,WAAW,GAAG,QAAwB;CACzD,OAAO,iBAAA,GAAA,kBAAA,KAAC,SAAD;EAAkB;EAAW,GAAI;CAAO,CAAA;AACjD;AAGA,SAAS,UAAU,EAAE,WAAW,GAAG,QAAwB;CACzD,OAAO,iBAAA,GAAA,kBAAA,KAAC,SAAD;EAAkB;EAAW,GAAI;CAAO,CAAA;AACjD;AAYA,SAAS,SAAS,EAAE,UAAU,QAAQ,WAAW,GAAG,QAAuB;CACzE,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,WAAW,GAAG,UAAU,kBAAkB,SAAS;EACnD,iBAAe,YAAY,KAAA;EAC3B,GAAI;CACL,CAAA;AAEL;AASA,SAAS,gBAAgB,EAAE,OAAO,QAAQ,WAAW,OAAO,GAAG,QAA8B;CAC3F,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,WAAW,GAAG,CAAC,qBAAqB,UAAU,mBAAmB,GAAG,SAAS;EAC7E,cAAY,SAAS,UAAU,SAAS,QAAQ,KAAA;EAChD,OAAO,SAAS;EAChB,GAAI;CACL,CAAA;AAEL;AASA,SAAS,UAAU,EAAE,OAAO,QAAQ,SAAS,WAAW,GAAG,QAAwB;CACjF,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,WAAW,GACT;GAAC;GAAc,UAAU;GAAqB,WAAW;EAAoB,GAC7E,SACF;EACA,cAAY,SAAS,UAAU,SAAS,QAAQ,KAAA;EAChD,GAAI;CACL,CAAA;AAEL;AAEA,IAAa,QAAQ,OAAO,OAAO,WAAW;CAC5C,MAAM;CACN,MAAM;CACN,MAAM;CACN,KAAK;CACL,YAAY;CACZ,MAAM;AACR,CAAC;;;ACpGD,IAAM,kBAAA,GAAA,MAAA,eAA2D,IAAI;AAYrE,SAAS,YAAY,EACnB,WACA,kBACA,mBACA,cAAc,cACd,WACA,UACA,GAAG,QACY;CACf,MAAM,QAAQ,YAAY;CAC1B,MAAM,aAAa,OAAO,oBAAoB;CAE9C,OACE,iBAAA,GAAA,kBAAA,MAAC,eAAe,UAAhB;EAAyB,OAAO;GAAE;GAAW;GAAkB;EAAkB;YAAjF,CACE,iBAAA,GAAA,kBAAA,KAAC,SAAD;GAAO,WAAW,GAAG,WAAW,SAAS;GAAG,GAAI;aAC7C,aAAa,OAAO;EAChB,CAAA,GACN,QACC,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,MAAZ;GAAiB,MAAM;GAAY,eAAe,SAAS,MAAM,oBAAoB,IAAI;aACvF,iBAAA,GAAA,kBAAA,MAAC,sBAAA,OAAW,QAAZ,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,UAAZ,EAAqB,WAAW,GAAG,2BAA2B,KAAA,CAAS,EAAI,CAAA,GAC3E,iBAAA,GAAA,kBAAA,KAAC,sBAAA,OAAW,OAAZ;IACE,WAAW,GAAG,kBAAkB,KAAA,CAAS;IACzC,cAAY;IACZ,UAAU,UAAU;KAElB,IADe,MAAM,OACV,QAAQ,wBAAwB,GACzC,MAAM,oBAAoB,KAAK;IAEnC;IAEC;GACe,CAAA,CACD,EAAA,CAAA;EACJ,CAAA,IACf,IACmB;;AAE7B;AAIA,SAAS,cAAc,EAAE,WAAW,GAAG,QAA4B;CACjE,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,kBAAkB,SAAS;EAAG,GAAI;CAAO,CAAA;AACrE;AAIA,SAAS,WAAW,EAAE,WAAW,GAAG,QAAyB;CAC3D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,eAAe,SAAS;EAAG,GAAI;CAAO,CAAA;AAClE;AAIA,SAAS,aAAa,EAAE,WAAW,GAAG,QAA2B;CAC/D,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,iBAAiB,SAAS;EAAG,GAAI;CAAO,CAAA;AACpE;AAIA,SAAS,kBAAkB,EAAE,WAAW,GAAG,QAAgC;CACzE,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,uBAAuB,SAAS;EAAG,GAAI;CAAO,CAAA;AAC1E;AAUA,SAAS,YAAY,EAAE,QAAQ,MAAM,OAAO,WAAW,UAAU,GAAG,QAA0B;CAC5F,OACE,iBAAA,GAAA,kBAAA,MAAC,KAAD;EACE,WAAW,GAAG,gBAAgB,SAAS;EACvC,gBAAc,SAAS,SAAS,KAAA;EAChC,GAAI;YAHN;GAKG,QAAQ,OAAO,iBAAA,GAAA,kBAAA,KAAC,aAAD,EAAA,UAAc,WAAW,IAAI,EAAe,CAAA,IAAI;GAC/D,aAAa,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,cAAD,EAAe,SAAuB,CAAA,IAAI;GACnE,UAAU,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,cAAD,EAAA,UAAe,MAAoB,CAAA,IAAI;EAC7D;;AAEP;AAIA,SAAS,YAAY,EAAE,WAAW,GAAG,QAA0B;CAC7D,OAAO,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,eAAA;EAAY,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAO,CAAA;AAChF;AAIA,SAAS,aAAa,EAAE,WAAW,GAAG,QAA2B;CAC/D,OAAO,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,WAAW,GAAG,iBAAiB,SAAS;EAAG,GAAI;CAAO,CAAA;AACrE;AAIA,SAAS,aAAa,EAAE,WAAW,GAAG,QAA2B;CAC/D,OAAO,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,WAAW,GAAG,iBAAiB,SAAS;EAAG,GAAI;CAAO,CAAA;AACrE;AAoBA,SAAS,mBAAmB,EAC1B,MACA,OACA,SACA,UACA,WACA,MACA,aACA,cACA,GAAG,QACuB;CAC1B,MAAM,eAAe,SAAS,KAAA;CAC9B,MAAM,CAAC,cAAc,oBAAA,GAAA,MAAA,UAA4B,eAAe,KAAK;CACrE,MAAM,SAAS,eAAe,OAAO;CAErC,MAAM,iBAAiB,WACrB,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACG,QAAQ,OAAO,iBAAA,GAAA,kBAAA,KAAC,aAAD,EAAA,UAAc,WAAW,IAAI,EAAe,CAAA,IAAI,MAC/D,UAAU,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,cAAD,EAAA,UAAe,MAAoB,CAAA,IAAI,IAC9D,EAAA,CAAA;CAGJ,OACE,iBAAA,GAAA,kBAAA,MAAC,WAAD;EACE,WAAW,GAAG,uBAAuB,SAAS;EAC9C,MAAM;EACN,WAAW,UAAU;GACnB,MAAM,OAAQ,MAAM,cAAqC;GACzD,IAAI,CAAC,cAAc,gBAAgB,IAAI;GACvC,eAAe,IAAI;EACrB;EACA,GAAI;YARN,CAUE,iBAAA,GAAA,kBAAA,KAAC,WAAD;GAAS,WAAW,GAAG,+BAA+B,KAAA,CAAS;aAAI;EAAwB,CAAA,GAC3F,iBAAA,GAAA,kBAAA,KAAC,OAAD;GAAK,WAAW,GAAG,6BAA6B,KAAA,CAAS;GAAI;EAAc,CAAA,CACpE;;AAEb;AASA,SAAS,eAAe,EACtB,QACA,MACA,OACA,WACA,UACA,GAAG,QACmB;CACtB,OACE,iBAAA,GAAA,kBAAA,MAAC,KAAD;EACE,WAAW,GAAG,mBAAmB,SAAS;EAC1C,gBAAc,SAAS,SAAS,KAAA;EAChC,GAAI;YAHN;GAKG,QAAQ,OAAO,iBAAA,GAAA,kBAAA,KAAC,aAAD,EAAA,UAAc,WAAW,IAAI,EAAe,CAAA,IAAI;GAC/D;GACA,UAAU,KAAA,IAAY,iBAAA,GAAA,kBAAA,KAAC,cAAD,EAAA,UAAe,MAAoB,CAAA,IAAI;EAC7D;;AAEP;AAIA,SAAS,cAAc,EAAE,WAAW,GAAG,QAA4B;CACjE,OAAO,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAW,GAAG,kBAAkB,SAAS;EAAG,GAAI;CAAO,CAAA;AACrE;AAOA,SAAS,sBAAsB,EAC7B,QAAQ,kBACR,WACA,UACA,GAAG,QAC0B;CAC7B,MAAM,OAAA,GAAA,MAAA,YAAiB,cAAc;CACrC,MAAM,oBAAoB,KAAK;CAC/B,MAAM,eAAe,sBAAsB,KAAA;CAE3C,OACE,iBAAA,GAAA,kBAAA,MAAC,SAAD;EAAO,WAAW,GAAG,2BAA2B,SAAS;EAAG,GAAI;YAAhE;GACE,iBAAA,GAAA,kBAAA,KAAC,SAAD;IACE,MAAK;IACL,WAAW,GAAG,kBAAkB,KAAA,CAAS;IACzC,cAAY;IACZ,GAAK,eACD,EAAE,SAAS,kBAAkB,IAC7B,EAAE,gBAAgB,KAAK,iBAAiB;IAC5C,WAAW,UAAU,KAAK,oBAAoB,MAAM,cAAc,OAAO;GAC1E,CAAA;GACD,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,WAAW,GAAG,WAAW,KAAA,CAAS;cAAI;GAAY,CAAA;GACvD;EACI;;AAEX;AAEA,IAAa,UAAU,OAAO,OAAO,aAAa;CAChD,QAAQ;CACR,KAAK;CACL,OAAO;CACP,YAAY;CACZ,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CACP,aAAa;CACb,SAAS;CACT,QAAQ;CACR,gBAAgB;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../src/cn.ts","../src/Accordion.tsx","../src/portal-context.ts","../src/AdminRoot.tsx","../src/icon.ts","../src/Alert.tsx","../src/AppShell.tsx","../src/Badge.tsx","../src/BrandTile.tsx","../src/hotkey-parse.ts","../src/Kbd.tsx","../src/hotkey-registry.ts","../src/useHotkey.ts","../src/Button.tsx","../src/ButtonGroup.tsx","../src/Breadcrumbs.tsx","../src/Input.tsx","../src/FileInput.tsx","../src/InputGroup.tsx","../src/Indicator.tsx","../src/Link.tsx","../src/Pagination.tsx","../src/Textarea.tsx","../src/Checkbox.tsx","../src/Radio.tsx","../src/Progress.tsx","../src/Spinner.tsx","../src/Switch.tsx","../src/Select.tsx","../src/Container.tsx","../src/Card.tsx","../src/StatCard.tsx","../src/Dialog.tsx","../src/Field.tsx","../src/Footer.tsx","../src/Menu.tsx","../src/Navbar.tsx","../src/Tabs.tsx","../src/CodeBlock.tsx","../src/Tooltip.tsx","../src/PropertyList.tsx","../src/Table.tsx","../src/Sidebar.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\n\n/**\n * Every admin class name is prefixed so the bundle can coexist with a host\n * page's CSS without colliding on common names like `.btn` or `.card`. The\n * matching CSS lives in `@aortl/admin-css/admin.scoped.css` (built by\n * `wrap-scoped.mjs`), which carries the same prefix on every selector.\n */\nconst PREFIX = \"_ao-\";\n\nfunction prefixTokens(value: string): string {\n if (!value) return \"\";\n return value\n .split(/\\s+/)\n .filter(Boolean)\n .map((token) => `${PREFIX}${token}`)\n .join(\" \");\n}\n\nfunction join(...parts: Array<string | undefined>): string {\n return parts.filter(Boolean).join(\" \");\n}\n\n/**\n * className merger that preserves Base UI's render-prop className form.\n *\n * `base` carries admin's own classes (e.g. `[\"btn\", \"btn-primary\"]`) and is\n * always prefixed with `_ao-`. `className` is the consumer-supplied prop and\n * passes through verbatim — it lives in the caller's namespace.\n *\n * Base UI components accept `className: string | ((state) => string | undefined)`.\n * The function form has to be deferred until Base UI invokes it with the\n * component state.\n */\nexport function cn(base: ClassValue, className: string | undefined): string;\nexport function cn<TState>(\n base: ClassValue,\n className: (state: TState) => string | undefined,\n): (state: TState) => string;\nexport function cn<TState>(\n base: ClassValue,\n className: string | ((state: TState) => string | undefined) | undefined,\n): string | ((state: TState) => string);\nexport function cn<TState>(\n base: ClassValue,\n className: string | ((state: TState) => string | undefined) | undefined,\n): string | ((state: TState) => string) {\n const baseClasses = prefixTokens(clsx(base));\n if (typeof className === \"function\") {\n return (state) => join(baseClasses, className(state) ?? undefined);\n }\n return join(baseClasses, className);\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type AccordionProps = ComponentProps<\"div\">;\n\nfunction AccordionRoot({ className, ...rest }: AccordionProps) {\n return <div className={cn(\"accordion\", className)} {...rest} />;\n}\n\nexport type AccordionItemProps = ComponentProps<\"details\">;\n\nfunction AccordionItem({ className, ...rest }: AccordionItemProps) {\n return <details className={cn(\"accordion-item\", className)} {...rest} />;\n}\n\nexport type AccordionSummaryProps = ComponentProps<\"summary\">;\n\nfunction AccordionSummary({ className, ...rest }: AccordionSummaryProps) {\n return <summary className={cn(\"accordion-summary\", className)} {...rest} />;\n}\n\nexport type AccordionContentProps = ComponentProps<\"div\">;\n\nfunction AccordionContent({ className, ...rest }: AccordionContentProps) {\n return <div className={cn(\"accordion-content\", className)} {...rest} />;\n}\n\nexport const Accordion = Object.assign(AccordionRoot, {\n Item: AccordionItem,\n Summary: AccordionSummary,\n Content: AccordionContent,\n});\n","import { createContext, type RefObject } from \"react\";\n\n/**\n * Container that Base UI popups (Select, Tooltip, etc.) should portal into.\n * `<AdminRoot>` publishes its own element here so popups render inside the\n * scoped subtree and match the `@scope (._ao-admin-root)` CSS — without it\n * they portal to `document.body`, outside the scope, and render unstyled. A\n * `<Dialog>` ancestor overrides it with its own `<dialog>` element so popups\n * join the top layer, painting above the backdrop and escaping its\n * `overflow: hidden`. With no provider the context is null and popups fall\n * back to `document.body`.\n */\nexport const PortalContainerContext = createContext<RefObject<HTMLElement | null> | null>(null);\n","import { useCallback, useRef, type CSSProperties, type ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { PortalContainerContext } from \"./portal-context\";\n\nexport interface AdminRootProps extends ComponentProps<\"div\"> {\n /**\n * Force a color scheme for this subtree. Sets `data-theme`, which flips the\n * semantic tokens and `color-scheme`. Omit to follow the OS preference.\n */\n theme?: \"light\" | \"dark\";\n /**\n * CSS color (e.g. `var(--color-purple-600)`) applied as `--color-system-accent`\n * to brand-shift the navbar + footer stripes and `<BrandTile>`. See\n * [Customize › System accent](https://digital-udvikling.github.io/admin-design-system/basics/customize/#system-accent).\n */\n systemAccent?: string;\n}\n\nexport function AdminRoot({ className, theme, systemAccent, style, ref, ...rest }: AdminRootProps) {\n const rootStyle =\n systemAccent !== undefined\n ? ({ ...style, \"--color-system-accent\": systemAccent } as CSSProperties)\n : style;\n\n // Publish this element as the portal container so Base UI popups (Select,\n // Tooltip, …) render inside the scoped subtree and match admin's\n // `@scope (._ao-admin-root)` rules. Without this they portal to\n // `document.body` — outside the scope — and render unstyled. A `<Dialog>`\n // ancestor overrides this with its own top-layer `<dialog>`.\n const portalRef = useRef<HTMLElement | null>(null);\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n portalRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n return (\n <PortalContainerContext.Provider value={portalRef}>\n <div\n ref={setRef}\n className={cn(\"admin-root\", className)}\n style={rootStyle}\n {...rest}\n {...(theme !== undefined && { \"data-theme\": theme })}\n />\n </PortalContainerContext.Provider>\n );\n}\n","import { createElement, isValidElement } from \"react\";\nimport type { ComponentType, ReactElement, ReactNode } from \"react\";\n\n/**\n * Props every icon component is expected to accept. Matches `@tabler/icons-react`\n * (size + standard SVG attributes), but loose enough to accept other libraries.\n */\nexport interface IconRenderProps {\n size?: number | string;\n \"aria-hidden\"?: boolean | \"true\" | \"false\";\n}\n\nexport type IconComponent = ComponentType<IconRenderProps>;\n\n/**\n * The value a component prop named `icon` will accept. Either:\n * - a component reference (`icon={IconHome}`) — rendered with `size=\"1em\" aria-hidden`,\n * - or an already-instantiated React element (`icon={<IconHome size={20} />}`) — rendered as-is.\n */\nexport type IconProp = IconComponent | ReactElement | null | undefined;\n\n/**\n * Render an `IconProp` to a React node, defaulting to `size=\"1em\" aria-hidden`\n * when given a component reference. The `\"1em\"` default makes SVG icons inherit\n * the host's `font-size`, matching how the Tabler webfont (`<i class=\"ti …\">`)\n * renders in the vanilla bundle — so both previews end up the same size.\n *\n * Anything that is not `null`/`undefined` and not already a React element is\n * treated as a component type — `createElement` accepts function components,\n * `forwardRef`s (e.g. `@tabler/icons-react`), `memo`, etc.\n */\nexport function renderIcon(icon: IconProp, size: number | string = \"1em\"): ReactNode {\n if (icon == null) return null;\n if (isValidElement(icon)) return icon;\n return createElement(icon as IconComponent, { size, \"aria-hidden\": true });\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport type AlertVariant = \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface AlertProps extends Omit<ComponentProps<\"div\">, \"title\"> {\n variant: AlertVariant;\n /** Leading icon. Rendered as the first child so the CSS grid kicks in. */\n icon?: IconProp;\n /** Renders as `<Alert.Title>`. */\n title?: ReactNode;\n /** Renders as `<Alert.Description>`. */\n description?: ReactNode;\n}\n\nfunction AlertRoot({\n variant,\n icon,\n title,\n description,\n className,\n role,\n children,\n ...rest\n}: AlertProps) {\n const defaultRole = variant === \"danger\" || variant === \"warning\" ? \"alert\" : \"status\";\n return (\n <div\n role={role ?? defaultRole}\n className={cn([\"alert\", `alert-${variant}`], className)}\n {...rest}\n >\n {renderIcon(icon)}\n {title !== undefined ? <AlertTitle>{title}</AlertTitle> : null}\n {description !== undefined ? <AlertDescription>{description}</AlertDescription> : null}\n {children}\n </div>\n );\n}\n\nexport type AlertTitleProps = ComponentProps<\"strong\">;\nfunction AlertTitle({ className, ...rest }: AlertTitleProps) {\n return <strong className={cn(\"alert-title\", className)} {...rest} />;\n}\n\nexport type AlertDescriptionProps = ComponentProps<\"p\">;\nfunction AlertDescription({ className, ...rest }: AlertDescriptionProps) {\n return <p className={cn(\"alert-description\", className)} {...rest} />;\n}\n\nexport const Alert = Object.assign(AlertRoot, {\n Title: AlertTitle,\n Description: AlertDescription,\n});\n","import { createContext, useContext, useMemo, useState } from \"react\";\nimport type { CSSProperties, ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"./cn\";\n\ninterface AppShellContextValue {\n mobileDrawerOpen: boolean;\n setMobileDrawerOpen: (open: boolean) => void;\n hasSidebar: boolean;\n}\n\nconst AppShellContext = createContext<AppShellContextValue | null>(null);\n\nexport function useAppShell(): AppShellContextValue | null {\n return useContext(AppShellContext);\n}\n\nexport interface AppShellProps extends ComponentProps<\"div\"> {\n hasSidebar?: boolean;\n hasFooter?: boolean;\n mobileDrawerOpen?: boolean;\n defaultMobileDrawerOpen?: boolean;\n onMobileDrawerOpenChange?: (open: boolean) => void;\n /**\n * CSS color (e.g. `var(--color-purple-600)`) applied as `--color-system-accent`\n * to the shell root. See [Customize › System accent](https://digital-udvikling.github.io/admin-design-system/basics/customize/#system-accent).\n */\n systemAccent?: string;\n children?: ReactNode;\n}\n\nfunction AppShellRoot({\n hasSidebar = false,\n hasFooter = false,\n mobileDrawerOpen,\n defaultMobileDrawerOpen = false,\n onMobileDrawerOpenChange,\n systemAccent,\n className,\n style,\n children,\n ...rest\n}: AppShellProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultMobileDrawerOpen);\n const isControlled = mobileDrawerOpen !== undefined;\n const open = isControlled ? mobileDrawerOpen : uncontrolledOpen;\n\n const value = useMemo<AppShellContextValue>(\n () => ({\n mobileDrawerOpen: open,\n setMobileDrawerOpen: (next) => {\n if (!isControlled) setUncontrolledOpen(next);\n onMobileDrawerOpenChange?.(next);\n },\n hasSidebar,\n }),\n [open, isControlled, onMobileDrawerOpenChange, hasSidebar],\n );\n\n const rootStyle =\n systemAccent !== undefined\n ? ({ ...style, \"--color-system-accent\": systemAccent } as CSSProperties)\n : style;\n\n return (\n <AppShellContext.Provider value={value}>\n <div\n className={cn(\n [\n \"app-shell\",\n hasSidebar && \"app-shell-with-sidebar\",\n hasFooter && \"app-shell-with-footer\",\n ],\n className,\n )}\n style={rootStyle}\n {...rest}\n >\n {children}\n </div>\n </AppShellContext.Provider>\n );\n}\n\nexport type AppShellMainProps = ComponentProps<\"main\">;\n\nfunction AppShellMain({ className, ...rest }: AppShellMainProps) {\n return <main className={cn(\"app-shell-main\", className)} {...rest} />;\n}\n\nexport const AppShell = Object.assign(AppShellRoot, {\n Main: AppShellMain,\n});\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport type BadgeVariant = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\" | \"primary\";\nexport type BadgeSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface BadgeProps extends ComponentProps<\"span\"> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n /** Leading icon. */\n icon?: IconProp;\n}\n\nexport function Badge({\n variant = \"neutral\",\n size = \"md\",\n icon,\n className,\n children,\n ...rest\n}: BadgeProps) {\n return (\n <span\n className={cn(\n [\"badge\", variant !== \"neutral\" && `badge-${variant}`, size !== \"md\" && `badge-${size}`],\n className,\n )}\n {...rest}\n >\n {renderIcon(icon, size === \"sm\" ? 10 : 12)}\n {children}\n </span>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport interface BrandTileProps extends ComponentProps<\"span\"> {\n /** 1–2 letter monogram. Ignored if `icon` is provided. */\n monogram?: string;\n /** Icon component or element. Takes precedence over `monogram`. */\n icon?: IconProp;\n}\n\nexport function BrandTile({ monogram, icon, className, children, ...rest }: BrandTileProps) {\n return (\n <span className={cn(\"brand-tile\", className)} aria-hidden {...rest}>\n {icon ? renderIcon(icon, 14) : (children ?? monogram)}\n </span>\n );\n}\n","/**\n * Pure helpers for the hotkey system. Chord syntax: `<mod>+<mod>+…+<key>`\n *\n * Examples: `mod+s`, `?`, `escape`, `mod+shift+k`, `arrowup`.\n *\n * Modifiers are case-insensitive. `mod` resolves to the platform's primary\n * command modifier — ⌘ (`meta`) on Apple platforms, `Ctrl` elsewhere — so\n * `mod+s` fires on the OS-native gesture (Cmd+S on macOS, Ctrl+S otherwise)\n * and the `<Kbd>` chip follows suit. The key is whatever\n * `KeyboardEvent.key` produces, lowercased. A shifted printable symbol already\n * encodes Shift in the character it produces, so bind `\"?\"` (not `\"shift+?\"`)\n * to catch `shift+/`; `shift` stays explicit for letters and named keys, so\n * `shift+a` and `shift+tab` remain distinct chords.\n */\n\nexport type Modifier = \"ctrl\" | \"shift\" | \"alt\" | \"meta\";\n\nexport interface ParsedChord {\n mods: ReadonlySet<Modifier>;\n key: string;\n}\n\nconst MOD_ORDER: readonly Modifier[] = [\"ctrl\", \"shift\", \"alt\", \"meta\"];\n\n/**\n * Resolve the modifier `mod` aliases to. Apple platforms use ⌘ (`meta`) as the\n * primary command modifier; everywhere else it's Ctrl. Detected once at module\n * load (SSR-safe — the registry never dispatches server-side) and shared by the\n * parse and display layers so the binding and its `<Kbd>` chip always agree.\n */\nfunction detectApplePlatform(): boolean {\n if (typeof navigator === \"undefined\") return false;\n const uaData = (navigator as Navigator & { userAgentData?: { platform?: string } }).userAgentData;\n const platform = uaData?.platform || navigator.platform || \"\";\n return /^(mac|iphone|ipad|ipod)/i.test(platform);\n}\n\nconst IS_APPLE = detectApplePlatform();\nconst MOD_TARGET: Modifier = IS_APPLE ? \"meta\" : \"ctrl\";\n\nfunction tokenToMod(token: string): Modifier | null {\n switch (token) {\n case \"mod\":\n return MOD_TARGET;\n case \"ctrl\":\n case \"control\":\n return \"ctrl\";\n case \"shift\":\n return \"shift\";\n case \"alt\":\n return \"alt\";\n case \"meta\":\n return \"meta\";\n default:\n return null;\n }\n}\n\nexport function parseChord(input: string): ParsedChord {\n const tokens = input\n .trim()\n .toLowerCase()\n .split(\"+\")\n .map((t) => t.trim())\n .filter(Boolean);\n if (tokens.length === 0) {\n throw new Error(`Invalid hotkey: empty string`);\n }\n const mods = new Set<Modifier>();\n let key: string | null = null;\n for (const token of tokens) {\n const mod = tokenToMod(token);\n if (mod !== null) {\n mods.add(mod);\n continue;\n }\n if (key !== null) {\n throw new Error(`Invalid hotkey \"${input}\": multiple non-modifier keys`);\n }\n key = token;\n }\n if (key === null) {\n throw new Error(`Invalid hotkey \"${input}\": missing key`);\n }\n return { mods, key };\n}\n\nexport function parseKeys(keys: string | readonly string[]): ParsedChord[] {\n const list = typeof keys === \"string\" ? [keys] : keys;\n return list.map(parseChord);\n}\n\n/** Canonical wire form used as a map key in the registry. */\nexport function canonicalize(chord: ParsedChord): string {\n const parts: string[] = [];\n for (const mod of MOD_ORDER) {\n if (chord.mods.has(mod)) parts.push(mod);\n }\n parts.push(chord.key);\n return parts.join(\"+\");\n}\n\n/**\n * Normalize a keyboard event to its canonical chord string. Returns `null`\n * if the event is a bare modifier press (`Shift` by itself, etc.) so callers\n * can short-circuit before a map lookup.\n */\nexport function normalizeEvent(e: KeyboardEvent): string | null {\n const key = e.key.toLowerCase();\n if (key === \"control\" || key === \"shift\" || key === \"alt\" || key === \"meta\") {\n return null;\n }\n const mods = new Set<Modifier>();\n if (e.ctrlKey) mods.add(\"ctrl\");\n // A shifted printable symbol (`?`, `:`, `+`, `~`, …) already encodes Shift in\n // the character it produces, so a bare `useHotkey(\"?\")` should match without\n // the caller also writing `shift+?`. Fold Shift into single non-alphanumeric\n // keys; letters and named keys (arrows, `tab`) keep it, so `shift+a` and\n // `shift+tab` stay distinct chords.\n if (e.shiftKey && !isShiftedSymbol(key)) mods.add(\"shift\");\n if (e.altKey) mods.add(\"alt\");\n if (e.metaKey) mods.add(\"meta\");\n return canonicalize({ mods, key });\n}\n\n/** A single printable symbol (`?`, `+`, `:`, …) — not a letter, digit, or named key. */\nfunction isShiftedSymbol(key: string): boolean {\n return key.length === 1 && !/[a-z0-9]/.test(key);\n}\n\nconst SPECIAL_KEY_LABELS: Record<string, string> = {\n escape: \"Esc\",\n esc: \"Esc\",\n enter: \"Enter\",\n return: \"Enter\",\n tab: \"Tab\",\n \" \": \"Space\",\n space: \"Space\",\n arrowup: \"↑\",\n arrowdown: \"↓\",\n arrowleft: \"←\",\n arrowright: \"→\",\n backspace: \"Backspace\",\n delete: \"Del\",\n};\n\n// Apple renders chords as glyphs (⌃⇧⌥⌘); other platforms spell them out.\nconst MOD_LABELS: Record<Modifier, string> = IS_APPLE\n ? { ctrl: \"⌃\", shift: \"⇧\", alt: \"⌥\", meta: \"⌘\" }\n : { ctrl: \"Ctrl\", shift: \"Shift\", alt: \"Alt\", meta: \"Meta\" };\n\n/** Visual chips for a chord — one entry per modifier and the final key. */\nexport function formatChord(chord: ParsedChord): string[] {\n const parts: string[] = [];\n for (const mod of MOD_ORDER) {\n if (chord.mods.has(mod)) parts.push(MOD_LABELS[mod]);\n }\n const special = SPECIAL_KEY_LABELS[chord.key];\n if (special !== undefined) {\n parts.push(special);\n } else if (chord.key.length === 1) {\n parts.push(chord.key.toUpperCase());\n } else {\n parts.push(chord.key.charAt(0).toUpperCase() + chord.key.slice(1));\n }\n return parts;\n}\n\nconst ARIA_MOD_LABELS: Record<Modifier, string> = {\n ctrl: \"Control\",\n shift: \"Shift\",\n alt: \"Alt\",\n meta: \"Meta\",\n};\n\nfunction toAriaPart(chord: ParsedChord): string {\n const parts: string[] = [];\n for (const mod of MOD_ORDER) {\n if (chord.mods.has(mod)) parts.push(ARIA_MOD_LABELS[mod]);\n }\n parts.push(chord.key.length === 1 ? chord.key.toUpperCase() : chord.key);\n return parts.join(\"+\");\n}\n\n/**\n * Serialize one or more chords to the `aria-keyshortcuts` format\n * (space-separated alternatives, modifiers as `Control`/`Shift`/etc.).\n */\nexport function toAriaKeyShortcuts(chords: readonly ParsedChord[]): string {\n return chords.map(toAriaPart).join(\" \");\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { formatChord, parseKeys } from \"./hotkey-parse\";\n\nexport interface KbdProps extends Omit<ComponentProps<\"span\">, \"children\"> {\n /**\n * Hotkey chord(s) to render as styled `<kbd>` chips. Same syntax as the\n * `hotkey` prop / `useHotkey` (e.g. `\"mod+s\"`, `\"shift+?\"`, `\"escape\"`).\n * When multiple alternatives are passed, only the first is rendered —\n * matches platform menu convention of showing the primary binding.\n */\n keys?: string | readonly string[];\n /** Literal text rendered as a single chip — for inline use in tooltips/prose. */\n children?: string;\n}\n\n/**\n * Visual representation of a keyboard shortcut. Two shapes:\n *\n * ```tsx\n * <Kbd keys=\"mod+s\" /> // parsed: <Ctrl><S> in a .kbd-group\n * <Kbd>Esc</Kbd> // literal: single <kbd>Esc</kbd>\n * ```\n *\n * Render outside of action surfaces (tooltips, help dialogs) or inside them\n * via the `hotkey` prop on `<Button>` / `<Menu.Item>`.\n */\nexport function Kbd({ keys, children, className, ...rest }: KbdProps) {\n if (keys != null) {\n const chord = parseKeys(keys)[0];\n if (!chord) {\n return null;\n }\n const parts = formatChord(chord);\n return (\n <span className={cn(\"kbd-group\", className)} {...rest}>\n {parts.map((part, i) => (\n <kbd key={`${i}-${part}`} className={cn(\"kbd\", undefined)}>\n {part}\n </kbd>\n ))}\n </span>\n );\n }\n return (\n <kbd className={cn(\"kbd\", className)} {...rest}>\n {children}\n </kbd>\n );\n}\n","import type { RefObject } from \"react\";\nimport { normalizeEvent } from \"./hotkey-parse\";\n\n/**\n * Module-level keyboard shortcut registry. One window keydown listener,\n * attached on first registration and detached when the registry empties.\n *\n * On keydown:\n * 1. Ignore OS autorepeat (`e.repeat`) so a held chord fires once, not per tick.\n * 2. Normalize the event to a canonical chord string.\n * 3. Look up the bucket. Skip if empty.\n * 4. Apply input suppression — bare-key chords are skipped while focus is\n * in an editable element, except for `escape`.\n * 5. `preventDefault()`, then invoke every surviving handler (bag semantics).\n */\n\nexport type HotkeyHandler = (e: KeyboardEvent) => void;\n\nexport interface HotkeyEntry {\n handlerRef: RefObject<HotkeyHandler>;\n}\n\nconst registry = new Map<string, Set<HotkeyEntry>>();\nlet listenerAttached = false;\n\nfunction ensureListener(): void {\n if (listenerAttached || typeof window === \"undefined\") return;\n window.addEventListener(\"keydown\", dispatch);\n listenerAttached = true;\n}\n\nfunction maybeDetachListener(): void {\n if (!listenerAttached || typeof window === \"undefined\") return;\n if (registry.size > 0) return;\n window.removeEventListener(\"keydown\", dispatch);\n listenerAttached = false;\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n if (target.isContentEditable) return true;\n const tag = target.tagName;\n return tag === \"INPUT\" || tag === \"TEXTAREA\";\n}\n\nfunction dispatch(e: KeyboardEvent): void {\n // Edge-triggered: a held chord autorepeats keydown, but the bound action\n // (save, open a dialog, navigate) should fire once per press.\n if (e.repeat) return;\n const chord = normalizeEvent(e);\n if (chord === null) return;\n const bucket = registry.get(chord);\n if (!bucket || bucket.size === 0) return;\n\n // Input suppression: bare-key chords (no `+`) are silent while focused in\n // an editable element. `escape` is always allowed to fire so dialogs can\n // close even from a focused input.\n if (isEditableTarget(e.target) && !chord.includes(\"+\") && chord !== \"escape\") return;\n\n e.preventDefault();\n for (const entry of bucket) {\n entry.handlerRef.current?.(e);\n }\n}\n\n/**\n * Register a hotkey entry under each of its canonical chord strings.\n * Returns an unregister function that removes the entry from every bucket\n * and detaches the listener if the registry is empty.\n */\nexport function register(canonicalChords: readonly string[], entry: HotkeyEntry): () => void {\n for (const chord of canonicalChords) {\n let bucket = registry.get(chord);\n if (!bucket) {\n bucket = new Set();\n registry.set(chord, bucket);\n }\n bucket.add(entry);\n }\n ensureListener();\n return () => {\n for (const chord of canonicalChords) {\n const bucket = registry.get(chord);\n if (!bucket) continue;\n bucket.delete(entry);\n if (bucket.size === 0) registry.delete(chord);\n }\n maybeDetachListener();\n };\n}\n\n/** Test-only: empty the registry and detach the listener. */\nexport function __resetRegistry(): void {\n registry.clear();\n maybeDetachListener();\n}\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { canonicalize, parseKeys, toAriaKeyShortcuts } from \"./hotkey-parse\";\nimport { register, type HotkeyEntry, type HotkeyHandler } from \"./hotkey-registry\";\n\nexport interface HotkeyOptions {\n /** When false, the binding is not registered. Defaults to true. */\n enabled?: boolean;\n}\n\nexport interface HotkeyInfo {\n /**\n * Pre-serialized `aria-keyshortcuts` attribute value (e.g. `\"Control+S\"`).\n * Undefined when `keys` is nullish. Apply to the element that owns the\n * binding so screen readers announce the shortcut alongside the name.\n */\n ariaKeyShortcuts: string | undefined;\n /**\n * Canonical form of the first alternative — feed to `<Kbd keys={primaryChord} />`\n * to render the matching visual chip. Undefined when `keys` is nullish.\n */\n primaryChord: string | undefined;\n /** All canonical chord strings, used internally for registration. */\n canonicalChords: readonly string[];\n}\n\n/**\n * Register a keyboard shortcut. The handler is latched in a ref internally so\n * callers don't need to memoize it. Passing nullish `keys` is a no-op, so\n * the hook is safe to call unconditionally from components that may or may\n * not have a binding (e.g. the `hotkey` prop on `<Button>`).\n *\n * @example\n * useHotkey(\"mod+s\", save);\n * useHotkey([\"mod+s\", \"mod+enter\"], save, { enabled: !isLoading });\n *\n * Returns derived strings for rendering — see {@link HotkeyInfo}.\n */\nexport function useHotkey(\n keys: string | readonly string[] | null | undefined,\n handler: HotkeyHandler,\n options?: HotkeyOptions,\n): HotkeyInfo {\n const enabled = options?.enabled ?? true;\n const handlerRef = useRef<HotkeyHandler>(handler);\n handlerRef.current = handler;\n\n // Reduce `keys` to a stable string ID; downstream deps key off this so\n // re-renders with the same logical bindings don't re-register. Nullish\n // collapses to `\"\"` which downstream treats as \"no binding\".\n const keyId = keys == null ? \"\" : Array.isArray(keys) ? keys.join(\"|\") : (keys as string);\n\n const derived = useMemo<HotkeyInfo>(() => {\n if (keyId === \"\") {\n return { canonicalChords: [], ariaKeyShortcuts: undefined, primaryChord: undefined };\n }\n const parsed = parseKeys(keys as string | readonly string[]);\n const cans = parsed.map(canonicalize);\n return {\n canonicalChords: cans,\n ariaKeyShortcuts: toAriaKeyShortcuts(parsed),\n primaryChord: cans[0],\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [keyId]);\n\n useEffect(() => {\n if (!enabled || derived.canonicalChords.length === 0) return;\n const entry: HotkeyEntry = { handlerRef };\n return register(derived.canonicalChords, entry);\n }, [derived, enabled]);\n\n return derived;\n}\n","import { Button as BaseButton } from \"@base-ui/react/button\";\nimport { useCallback, useRef, type ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\nimport { Kbd } from \"./Kbd\";\nimport { useHotkey } from \"./useHotkey\";\n\nexport type ButtonVariant = \"default\" | \"primary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ComponentProps<typeof BaseButton> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n fullWidth?: boolean;\n /** Shows a spinner in place of the leading icon and disables interaction.\n * Sets `aria-busy=\"true\"` and the native `disabled` attribute. */\n loading?: boolean;\n /** Leading icon. Pass a component (`icon={IconPlus}`) or an element. */\n icon?: IconProp;\n /** Trailing icon. Pass a component (`iconTrailing={IconArrowRight}`) or an element. */\n iconTrailing?: IconProp;\n /**\n * Keyboard shortcut bound to this button. Pressing the chord dispatches a\n * native click on the underlying element, so `onClick` fires, `type=\"submit\"`\n * submits the form, and an anchor-rendered button (`render={<a href>}`)\n * navigates — all the native side effects of a real click. Same syntax as\n * `useHotkey`. Pass an array for alternatives — only the first is rendered as\n * a visual chip.\n */\n hotkey?: string | readonly string[];\n}\n\nexport function Button({\n variant = \"default\",\n size = \"md\",\n fullWidth,\n loading,\n icon,\n iconTrailing,\n hotkey,\n className,\n type = \"button\",\n disabled,\n children,\n onClick,\n ref,\n ...rest\n}: ButtonProps) {\n // Latch the rendered element so the hotkey can dispatch a real `.click()` on\n // it (native side effects: form submit, anchor navigation). Merge with any\n // consumer-supplied `ref` so passing one still works.\n const elementRef = useRef<HTMLElement | null>(null);\n const setRef = useCallback(\n (node: HTMLElement | null) => {\n elementRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n },\n [ref],\n );\n\n const { ariaKeyShortcuts, primaryChord } = useHotkey(hotkey, () => elementRef.current?.click(), {\n enabled: !disabled && !loading,\n });\n\n const iconOnly = children == null && (icon != null || iconTrailing != null);\n\n return (\n <BaseButton\n ref={setRef}\n onClick={onClick}\n type={type}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n aria-keyshortcuts={ariaKeyShortcuts}\n className={cn(\n [\n \"btn\",\n variant !== \"default\" && `btn-${variant}`,\n size !== \"md\" && `btn-${size}`,\n fullWidth && \"btn-full-width\",\n loading && \"btn-loading\",\n iconOnly && \"btn-square\",\n ],\n className,\n )}\n {...rest}\n >\n {loading ? null : renderIcon(icon)}\n {children}\n {renderIcon(iconTrailing)}\n {primaryChord !== undefined ? <Kbd keys={primaryChord} /> : null}\n </BaseButton>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type ButtonGroupOrientation = \"horizontal\" | \"vertical\";\n\nexport interface ButtonGroupProps extends ComponentProps<\"div\"> {\n orientation?: ButtonGroupOrientation;\n /**\n * Stretch the group across its container. Horizontal groups split the row\n * evenly so every button is the same width; vertical groups fill the\n * container width.\n */\n fullWidth?: boolean;\n}\n\nexport function ButtonGroup({\n orientation = \"horizontal\",\n fullWidth = false,\n role = \"group\",\n className,\n ...rest\n}: ButtonGroupProps) {\n return (\n <div\n role={role}\n className={cn(\n [\n \"btn-group\",\n orientation === \"vertical\" && \"btn-group-vertical\",\n fullWidth && \"btn-group-full-width\",\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n","import { Children, Fragment, isValidElement, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport interface BreadcrumbsProps extends ComponentProps<\"nav\"> {\n /** Custom separator between items. Defaults to \"/\" from CSS. */\n separator?: ReactNode;\n /** Accessible label for the nav landmark. */\n \"aria-label\"?: string;\n}\n\nfunction BreadcrumbsRoot({\n separator,\n className,\n children,\n \"aria-label\": ariaLabel = \"Breadcrumb\",\n ...rest\n}: BreadcrumbsProps) {\n const items = Children.toArray(children).filter(isValidElement);\n return (\n <nav aria-label={ariaLabel} className={cn(\"breadcrumbs\", className)} {...rest}>\n <ol>\n {items.map((child, i) => (\n <Fragment key={child.key ?? i}>\n {child}\n {i < items.length - 1 ? <BreadcrumbSeparator>{separator}</BreadcrumbSeparator> : null}\n </Fragment>\n ))}\n </ol>\n </nav>\n );\n}\n\ntype BreadcrumbItemAsLink = ComponentProps<\"a\"> & {\n href: string;\n current?: boolean;\n icon?: IconProp;\n};\ntype BreadcrumbItemAsSpan = ComponentProps<\"span\"> & {\n href?: undefined;\n current?: boolean;\n icon?: IconProp;\n};\n\nexport type BreadcrumbItemProps = BreadcrumbItemAsLink | BreadcrumbItemAsSpan;\n\nfunction BreadcrumbItem(props: BreadcrumbItemProps) {\n if (props.href !== undefined) {\n const { className, current, icon, children, ...rest } = props;\n return (\n <li>\n <a\n className={cn(\"breadcrumb-item\", className)}\n aria-current={current ? \"page\" : undefined}\n {...rest}\n >\n {renderIcon(icon, 14)}\n {children}\n </a>\n </li>\n );\n }\n const { className, current, icon, children, ...rest } = props;\n return (\n <li>\n <span\n className={cn(\"breadcrumb-item\", className)}\n aria-current={current ? \"page\" : undefined}\n {...rest}\n >\n {renderIcon(icon, 14)}\n {children}\n </span>\n </li>\n );\n}\n\nexport type BreadcrumbSeparatorProps = ComponentProps<\"li\">;\n\n// `role=\"presentation\"` so the separator doesn't get announced as a list item;\n// `<li>` so the markup is valid inside `<ol>`.\nfunction BreadcrumbSeparator({ className, children, ...rest }: BreadcrumbSeparatorProps) {\n return (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"breadcrumb-separator\", className)}\n {...rest}\n >\n {children}\n </li>\n );\n}\n\nexport const Breadcrumbs = Object.assign(BreadcrumbsRoot, {\n Item: BreadcrumbItem,\n Separator: BreadcrumbSeparator,\n});\n","import { Input as BaseInput } from \"@base-ui/react/input\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type InputVariant = \"bordered\" | \"ghost\" | \"danger\" | \"info\" | \"success\" | \"warning\";\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\ntype BaseInputProps = Omit<ComponentProps<typeof BaseInput>, \"size\">;\n\nexport interface InputProps extends BaseInputProps {\n variant?: InputVariant;\n inputSize?: InputSize;\n}\n\nexport function Input({\n variant = \"bordered\",\n inputSize = \"md\",\n className,\n type = \"text\",\n ...rest\n}: InputProps) {\n return (\n <BaseInput\n type={type}\n className={cn(\n [\n \"input\",\n variant !== \"bordered\" && `input-${variant}`,\n inputSize !== \"md\" && `input-${inputSize}`,\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n","import { Input as BaseInput } from \"@base-ui/react/input\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type FileInputVariant = \"bordered\" | \"ghost\" | \"danger\";\nexport type FileInputSize = \"sm\" | \"md\" | \"lg\";\n\ntype BaseInputProps = Omit<ComponentProps<typeof BaseInput>, \"size\" | \"type\">;\n\nexport interface FileInputProps extends BaseInputProps {\n variant?: FileInputVariant;\n inputSize?: FileInputSize;\n}\n\nexport function FileInput({\n variant = \"bordered\",\n inputSize = \"md\",\n className,\n ...rest\n}: FileInputProps) {\n return (\n <BaseInput\n type=\"file\"\n className={cn(\n [\n \"file-input\",\n variant !== \"bordered\" && `file-input-${variant}`,\n inputSize !== \"md\" && `file-input-${inputSize}`,\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type InputGroupProps = ComponentProps<\"div\">;\n\nfunction InputGroupRoot({ className, ...rest }: InputGroupProps) {\n return <div className={cn(\"input-group\", className)} {...rest} />;\n}\n\nexport type InputGroupAddonProps = ComponentProps<\"span\">;\n\nfunction InputGroupAddon({ className, ...rest }: InputGroupAddonProps) {\n return <span className={cn(\"input-group-addon\", className)} {...rest} />;\n}\n\nexport const InputGroup = Object.assign(InputGroupRoot, {\n Addon: InputGroupAddon,\n});\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { Badge, type BadgeSize, type BadgeVariant } from \"./Badge\";\nimport { cn } from \"./cn\";\nimport type { IconProp } from \"./icon\";\n\nexport type IndicatorVertical = \"top\" | \"middle\" | \"bottom\";\nexport type IndicatorHorizontal = \"start\" | \"center\" | \"end\";\nexport type IndicatorPlacement = `${IndicatorVertical}-${IndicatorHorizontal}`;\n\nexport interface IndicatorProps {\n /** Badge content (count, \"!\", text). Omit for a label-less status dot. */\n label?: ReactNode;\n /** Variant for both the badge and the dot. Defaults to `\"neutral\"`. */\n variant?: BadgeVariant;\n /** Badge size. Ignored when rendering a dot. Defaults to `\"sm\"`. */\n size?: BadgeSize;\n /** Leading icon for the badge. Implies the badge form (no dot fallback). */\n icon?: IconProp;\n /** Where the indicator sits relative to children. Default `\"top-end\"`. */\n placement?: IndicatorPlacement;\n /**\n * Pulls the indicator toward the anchor's center along the placement direction.\n * Useful for rounded anchors so the indicator aligns with the visual corner —\n * e.g. `offset={4}` for a `rounded-md` button. Pixels.\n */\n offset?: number;\n /** className on the outer `.indicator` wrapper. */\n className?: string;\n /** Accessible label for the indicator — required when rendering a dot. */\n \"aria-label\"?: string;\n /** The anchor element the indicator floats on. */\n children?: ReactNode;\n}\n\nexport function Indicator({\n label,\n variant = \"neutral\",\n size = \"sm\",\n icon,\n placement = \"top-end\",\n offset,\n className,\n \"aria-label\": ariaLabel,\n children,\n}: IndicatorProps) {\n const [vertical, horizontal] = placement.split(\"-\") as [IndicatorVertical, IndicatorHorizontal];\n const placementClasses = [\n \"indicator-item\",\n vertical !== \"top\" && `indicator-${vertical}`,\n horizontal !== \"end\" && `indicator-${horizontal}`,\n ];\n const hasContent = label !== undefined || icon !== undefined;\n const style =\n offset !== undefined ? ({ \"--indicator-offset\": `${offset}px` } as CSSProperties) : undefined;\n return (\n <div className={cn(\"indicator\", className)} style={style}>\n {hasContent ? (\n <Badge\n className={cn(placementClasses, undefined)}\n variant={variant}\n size={size}\n icon={icon}\n aria-label={ariaLabel}\n >\n {label}\n </Badge>\n ) : (\n <span\n className={cn(\n [\n ...placementClasses,\n \"indicator-dot\",\n variant !== \"neutral\" && `indicator-dot-${variant}`,\n ],\n undefined,\n )}\n role={ariaLabel !== undefined ? \"status\" : undefined}\n aria-label={ariaLabel}\n />\n )}\n {children}\n </div>\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport interface LinkProps extends ComponentProps<\"a\"> {\n /**\n * Marks the link as leaving the app: renders a trailing ↗ affordance and\n * defaults `target=\"_blank\"` + `rel=\"noopener noreferrer\"`. Explicit\n * `target`/`rel` props win, so you can keep the icon while overriding either.\n */\n external?: boolean;\n /** Leading icon. Pass a component (`icon={IconHome}`) or an element. */\n icon?: IconProp;\n /** Trailing icon. Independent of `external`'s ↗ affordance. */\n iconTrailing?: IconProp;\n}\n\n/**\n * A text link — a plain `<a>` with the design system's link styling: primary\n * color, hover shift, underline, and a focus-visible ring. Pass `external` for\n * the new-tab affordance.\n */\nexport function Link({\n external,\n icon,\n iconTrailing,\n className,\n target,\n rel,\n children,\n ...rest\n}: LinkProps) {\n return (\n <a\n target={target ?? (external ? \"_blank\" : undefined)}\n rel={rel ?? (external ? \"noopener noreferrer\" : undefined)}\n className={cn([\"link\", external && \"link-external\"], className)}\n {...rest}\n >\n {renderIcon(icon)}\n {children}\n {renderIcon(iconTrailing)}\n </a>\n );\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport type PaginationItem =\n | { type: \"page\"; page: number; selected: boolean }\n | { type: \"previous\"; page: number; disabled: boolean }\n | { type: \"next\"; page: number; disabled: boolean }\n | { type: \"ellipsis\"; key: \"start\" | \"end\" };\n\nexport interface PaginationProps extends Omit<ComponentProps<\"nav\">, \"onChange\"> {\n /** Current page, 1-based. */\n page: number;\n /** Total number of pages. */\n total: number;\n /** Called when a page number, prev, or next button is activated. */\n onPageChange: (page: number) => void;\n /** Pages shown either side of `page`. Default 1. */\n siblingCount?: number;\n /** Pages always shown at the start and end. Default 1. */\n boundaryCount?: number;\n /** Icon for the previous-page control. Defaults to a built-in chevron. */\n previousIcon?: IconProp;\n /** Icon for the next-page control. Defaults to a built-in chevron. */\n nextIcon?: IconProp;\n /** Override the renderer for one item — useful for routing libraries that\n * expect their own Link component (Next.js, TanStack Router, etc.). */\n renderItem?: (item: PaginationItem) => ReactNode;\n}\n\n/**\n * Compute the items to render for a given `page` / `total`. Always returns:\n * previous, ...numbers/ellipses, next\n * with `boundaryCount` items on each end and `siblingCount` items around `page`.\n * Pure: no React state, safe to call during render.\n */\nexport function getPaginationItems({\n page,\n total,\n siblingCount = 1,\n boundaryCount = 1,\n}: {\n page: number;\n total: number;\n siblingCount?: number;\n boundaryCount?: number;\n}): PaginationItem[] {\n if (total <= 0) {\n return [\n { type: \"previous\", page: 1, disabled: true },\n { type: \"next\", page: 1, disabled: true },\n ];\n }\n const clampedPage = Math.min(Math.max(1, page), total);\n const items: PaginationItem[] = [];\n items.push({ type: \"previous\", page: clampedPage - 1, disabled: clampedPage === 1 });\n\n const startPages = range(1, Math.min(boundaryCount, total));\n const endPages = range(Math.max(total - boundaryCount + 1, boundaryCount + 1), total);\n\n const siblingsStart = Math.max(\n Math.min(clampedPage - siblingCount, total - boundaryCount - siblingCount * 2 - 1),\n boundaryCount + 2,\n );\n const siblingsEnd = Math.min(\n Math.max(clampedPage + siblingCount, boundaryCount + siblingCount * 2 + 2),\n endPages.length > 0 ? (endPages[0] as number) - 2 : total - 1,\n );\n\n const middle: (number | \"ellipsis-start\" | \"ellipsis-end\")[] = [];\n // Start ellipsis (or extra page when gap is exactly 1)\n if (siblingsStart > boundaryCount + 2) {\n middle.push(\"ellipsis-start\");\n } else if (boundaryCount + 1 < total - boundaryCount) {\n middle.push(boundaryCount + 1);\n }\n\n middle.push(...range(siblingsStart, siblingsEnd));\n\n // End ellipsis (or extra page when gap is exactly 1)\n if (siblingsEnd < total - boundaryCount - 1) {\n middle.push(\"ellipsis-end\");\n } else if (total - boundaryCount > boundaryCount) {\n middle.push(total - boundaryCount);\n }\n\n const seen = new Set<number>();\n const pushNumber = (n: number) => {\n if (n < 1 || n > total || seen.has(n)) return;\n seen.add(n);\n items.push({ type: \"page\", page: n, selected: n === clampedPage });\n };\n\n for (const n of startPages) pushNumber(n);\n for (const entry of middle) {\n if (entry === \"ellipsis-start\") {\n items.push({ type: \"ellipsis\", key: \"start\" });\n } else if (entry === \"ellipsis-end\") {\n items.push({ type: \"ellipsis\", key: \"end\" });\n } else {\n pushNumber(entry);\n }\n }\n for (const n of endPages) pushNumber(n);\n\n items.push({ type: \"next\", page: clampedPage + 1, disabled: clampedPage === total });\n return items;\n}\n\nfunction range(start: number, end: number): number[] {\n if (end < start) return [];\n const out: number[] = [];\n for (let i = start; i <= end; i++) out.push(i);\n return out;\n}\n\nexport function Pagination({\n page,\n total,\n onPageChange,\n siblingCount = 1,\n boundaryCount = 1,\n previousIcon,\n nextIcon,\n renderItem,\n className,\n \"aria-label\": ariaLabel = \"Pagination\",\n ...rest\n}: PaginationProps) {\n const items = getPaginationItems({ page, total, siblingCount, boundaryCount });\n const prev = previousIcon !== undefined ? renderIcon(previousIcon, 16) : <ChevronLeftIcon />;\n const next = nextIcon !== undefined ? renderIcon(nextIcon, 16) : <ChevronRightIcon />;\n return (\n <nav aria-label={ariaLabel} className={cn(\"pagination\", className)} {...rest}>\n <ul>\n {items.map((item, i) => (\n <li key={paginationItemKey(item, i)} className={cn(\"page-item\", undefined)}>\n {renderItem ? renderItem(item) : defaultRender(item, onPageChange, prev, next)}\n </li>\n ))}\n </ul>\n </nav>\n );\n}\n\nfunction ChevronLeftIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M15 6l-6 6 6 6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M9 6l6 6-6 6\" />\n </svg>\n );\n}\n\nfunction paginationItemKey(item: PaginationItem, index: number): string {\n switch (item.type) {\n case \"previous\":\n return \"previous\";\n case \"next\":\n return \"next\";\n case \"ellipsis\":\n return `ellipsis-${item.key}`;\n case \"page\":\n return `page-${item.page}`;\n default:\n return `${index}`;\n }\n}\n\nfunction defaultRender(\n item: PaginationItem,\n onPageChange: (n: number) => void,\n prev: ReactNode,\n next: ReactNode,\n): ReactNode {\n switch (item.type) {\n case \"previous\":\n return (\n <button\n type=\"button\"\n className={cn(\"page-link\", undefined)}\n aria-label=\"Previous page\"\n aria-disabled={item.disabled || undefined}\n disabled={item.disabled}\n onClick={() => onPageChange(item.page)}\n >\n {prev}\n </button>\n );\n case \"next\":\n return (\n <button\n type=\"button\"\n className={cn(\"page-link\", undefined)}\n aria-label=\"Next page\"\n aria-disabled={item.disabled || undefined}\n disabled={item.disabled}\n onClick={() => onPageChange(item.page)}\n >\n {next}\n </button>\n );\n case \"ellipsis\":\n return (\n <span className={cn(\"page-ellipsis\", undefined)} aria-hidden=\"true\">\n …\n </span>\n );\n case \"page\":\n return (\n <button\n type=\"button\"\n className={cn([\"page-link\", item.selected && \"active\"], undefined)}\n aria-current={item.selected ? \"page\" : undefined}\n aria-label={`Page ${item.page}`}\n onClick={() => onPageChange(item.page)}\n >\n {item.page}\n </button>\n );\n }\n}\n","import { Field as BaseField } from \"@base-ui/react/field\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type TextareaVariant = \"bordered\" | \"ghost\" | \"danger\" | \"info\" | \"success\" | \"warning\";\nexport type TextareaSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface TextareaProps extends Omit<ComponentProps<\"textarea\">, \"size\"> {\n variant?: TextareaVariant;\n textareaSize?: TextareaSize;\n /**\n * Height tracks content via CSS `field-sizing` (Chromium-only today; other\n * browsers keep a fixed, resizable box). `rows`/min-height is the floor —\n * set `max-height` via `className`/`style` for a ceiling.\n */\n autoResize?: boolean;\n}\n\n/**\n * Multi-line text input. Rendered through Base UI's `Field.Control` with a\n * `<textarea>` swapped in for the default `<input>`, so inside a `<Field>` it\n * gets the same wiring as `<Input>`: a generated id, label `htmlFor`\n * association, and validity-driven `:user-valid` / `<Field.Error>`. Works\n * standalone too — `Field.Control` falls back to a default context.\n */\nexport function Textarea({\n variant = \"bordered\",\n textareaSize = \"md\",\n autoResize,\n className,\n ...rest\n}: TextareaProps) {\n return (\n <BaseField.Control\n // Field.Control is typed for <input>; swap the rendered element for a\n // <textarea>, spreading Base UI's merged props (id, ref, value, handlers)\n // onto it so it registers with the surrounding Field.\n render={(props) => <textarea {...props} />}\n className={cn(\n [\n \"textarea\",\n variant !== \"bordered\" && `textarea-${variant}`,\n textareaSize !== \"md\" && `textarea-${textareaSize}`,\n autoResize && \"textarea-autosize\",\n ],\n className,\n )}\n {...(rest as ComponentProps<typeof BaseField.Control>)}\n />\n );\n}\n","import { Checkbox as BaseCheckbox } from \"@base-ui/react/checkbox\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type CheckboxProps = ComponentProps<typeof BaseCheckbox.Root>;\n\nfunction CheckboxRoot({ className, children, ...rest }: CheckboxProps) {\n return (\n <BaseCheckbox.Root className={cn(\"checkbox\", className)} {...rest}>\n {children ?? (\n <CheckboxIndicator>\n <CheckIcon />\n </CheckboxIndicator>\n )}\n </BaseCheckbox.Root>\n );\n}\n\nexport type CheckboxIndicatorProps = ComponentProps<typeof BaseCheckbox.Indicator>;\n\nfunction CheckboxIndicator({ className, ...rest }: CheckboxIndicatorProps) {\n return <BaseCheckbox.Indicator className={cn(\"checkbox-indicator\", className)} {...rest} />;\n}\n\nfunction CheckIcon() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width=\"100%\"\n height=\"100%\"\n aria-hidden\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nexport const Checkbox = Object.assign(CheckboxRoot, {\n Indicator: CheckboxIndicator,\n});\n","import { Radio as BaseRadio } from \"@base-ui/react/radio\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type RadioProps = ComponentProps<typeof BaseRadio.Root>;\n\nfunction RadioRoot({ className, children, ...rest }: RadioProps) {\n return (\n <BaseRadio.Root className={cn(\"radio\", className)} {...rest}>\n {children ?? <RadioIndicator />}\n </BaseRadio.Root>\n );\n}\n\nexport type RadioIndicatorProps = ComponentProps<typeof BaseRadio.Indicator>;\n\nfunction RadioIndicator({ className, ...rest }: RadioIndicatorProps) {\n return <BaseRadio.Indicator className={cn(\"radio-indicator\", className)} {...rest} />;\n}\n\nexport const Radio = Object.assign(RadioRoot, {\n Indicator: RadioIndicator,\n});\n\nexport type RadioGroupOrientation = \"horizontal\" | \"vertical\";\n\nexport interface RadioGroupProps extends ComponentProps<typeof BaseRadioGroup> {\n orientation?: RadioGroupOrientation;\n}\n\nexport function RadioGroup({ orientation = \"horizontal\", className, ...rest }: RadioGroupProps) {\n return (\n <BaseRadioGroup\n className={cn(\n [\"radio-group\", orientation === \"vertical\" && \"radio-group-vertical\"],\n className,\n )}\n {...rest}\n />\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type ProgressVariant = \"primary\" | \"success\" | \"warning\" | \"danger\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps extends Omit<ComponentProps<\"progress\">, \"value\"> {\n /** Current value in `[0, max]`. Omit (or pass `undefined`) for an indeterminate bar. */\n value?: number;\n max?: number;\n variant?: ProgressVariant;\n size?: ProgressSize;\n}\n\nexport function Progress({\n value,\n max = 100,\n variant = \"primary\",\n size = \"md\",\n className,\n ...rest\n}: ProgressProps) {\n return (\n <progress\n value={value}\n max={max}\n className={cn(\n [\n \"progress\",\n variant !== \"primary\" && `progress-${variant}`,\n size !== \"md\" && `progress-${size}`,\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SpinnerProps extends ComponentProps<\"output\"> {\n size?: SpinnerSize;\n /** Accessible label announced by screen readers. Defaults to \"Loading\". */\n label?: string;\n}\n\n// `<output>` has an implicit `role=\"status\"`, so screen readers announce the\n// `aria-label` politely when the spinner appears. Pure CSS handles the visual.\nexport function Spinner({ size = \"md\", label = \"Loading\", className, ...rest }: SpinnerProps) {\n return (\n <output\n aria-label={label}\n className={cn([\"spinner\", size !== \"md\" && `spinner-${size}`], className)}\n {...rest}\n />\n );\n}\n","import { Switch as BaseSwitch } from \"@base-ui/react/switch\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type SwitchProps = ComponentProps<typeof BaseSwitch.Root>;\n\nfunction SwitchRoot({ className, children, ...rest }: SwitchProps) {\n return (\n <BaseSwitch.Root className={cn(\"switch\", className)} {...rest}>\n {children ?? <SwitchThumb />}\n </BaseSwitch.Root>\n );\n}\n\nexport type SwitchThumbProps = ComponentProps<typeof BaseSwitch.Thumb>;\n\nfunction SwitchThumb({ className, ...rest }: SwitchThumbProps) {\n return <BaseSwitch.Thumb className={cn(\"switch-thumb\", className)} {...rest} />;\n}\n\nexport const Switch = Object.assign(SwitchRoot, {\n Thumb: SwitchThumb,\n});\n","import { Select as BaseSelect } from \"@base-ui/react/select\";\nimport { useContext, type ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\nimport { PortalContainerContext } from \"./portal-context\";\n\nexport type SelectProps = ComponentProps<typeof BaseSelect.Root>;\n\nfunction SelectRoot(props: SelectProps) {\n return <BaseSelect.Root {...props} />;\n}\n\nexport type SelectTriggerVariant = \"bordered\" | \"ghost\" | \"danger\";\nexport type SelectTriggerSize = \"sm\" | \"md\" | \"lg\";\n\ntype BaseSelectTriggerProps = Omit<ComponentProps<typeof BaseSelect.Trigger>, \"size\">;\n\nexport interface SelectTriggerProps extends BaseSelectTriggerProps {\n variant?: SelectTriggerVariant;\n triggerSize?: SelectTriggerSize;\n}\n\nfunction SelectTrigger({\n variant = \"bordered\",\n triggerSize = \"md\",\n className,\n ...rest\n}: SelectTriggerProps) {\n return (\n <BaseSelect.Trigger\n className={cn(\n [\n \"select\",\n variant !== \"bordered\" && `select-${variant}`,\n triggerSize !== \"md\" && `select-${triggerSize}`,\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n\nexport type SelectValueProps = ComponentProps<typeof BaseSelect.Value>;\n\nfunction SelectValue(props: SelectValueProps) {\n return <BaseSelect.Value {...props} />;\n}\n\nexport type SelectIconProps = ComponentProps<typeof BaseSelect.Icon>;\n\nfunction SelectIcon({ className, children, ...rest }: SelectIconProps) {\n return (\n <BaseSelect.Icon className={cn(\"select-icon\", className)} {...rest}>\n {children ?? <ChevronDownIcon />}\n </BaseSelect.Icon>\n );\n}\n\nexport interface SelectPopupProps extends ComponentProps<typeof BaseSelect.Popup> {\n sideOffset?: number;\n}\n\nfunction SelectPopup({ className, sideOffset = 4, children, ...rest }: SelectPopupProps) {\n const portalContainer = useContext(PortalContainerContext);\n return (\n <BaseSelect.Portal container={portalContainer ?? undefined}>\n {/*\n * `alignItemWithTrigger={false}` opts out of Base UI's macOS-style\n * alignment (selected item overlaid on the trigger, popup expanding\n * both directions). Standard web dropdown placement — below the\n * trigger — is what readers expect on admin surfaces, and the macOS\n * mode collapses the parent dialog's flex layout when used inside\n * `<Dialog>`.\n */}\n <BaseSelect.Positioner sideOffset={sideOffset} alignItemWithTrigger={false}>\n <BaseSelect.Popup className={cn(\"select-popup\", className)} {...rest}>\n {children}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n );\n}\n\nexport type SelectItemProps = ComponentProps<typeof BaseSelect.Item>;\n\nfunction SelectItem({ className, ...rest }: SelectItemProps) {\n return <BaseSelect.Item className={cn(\"select-item\", className)} {...rest} />;\n}\n\nexport type SelectItemTextProps = ComponentProps<typeof BaseSelect.ItemText>;\n\nfunction SelectItemText(props: SelectItemTextProps) {\n return <BaseSelect.ItemText {...props} />;\n}\n\nexport type SelectItemIndicatorProps = ComponentProps<typeof BaseSelect.ItemIndicator>;\n\nfunction SelectItemIndicator({ className, children, ...rest }: SelectItemIndicatorProps) {\n return (\n <BaseSelect.ItemIndicator className={cn(\"select-item-indicator\", className)} {...rest}>\n {children ?? <CheckIcon />}\n </BaseSelect.ItemIndicator>\n );\n}\n\nexport type SelectGroupProps = ComponentProps<typeof BaseSelect.Group>;\n\nfunction SelectGroup(props: SelectGroupProps) {\n return <BaseSelect.Group {...props} />;\n}\n\nexport type SelectGroupLabelProps = ComponentProps<typeof BaseSelect.GroupLabel>;\n\nfunction SelectGroupLabel({ className, ...rest }: SelectGroupLabelProps) {\n return <BaseSelect.GroupLabel className={cn(\"select-group-label\", className)} {...rest} />;\n}\n\nfunction CheckIcon() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width=\"100%\"\n height=\"100%\"\n aria-hidden\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction ChevronDownIcon() {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width=\"100%\"\n height=\"100%\"\n aria-hidden\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nexport const Select = Object.assign(SelectRoot, {\n Trigger: SelectTrigger,\n Value: SelectValue,\n Icon: SelectIcon,\n Popup: SelectPopup,\n Item: SelectItem,\n ItemText: SelectItemText,\n ItemIndicator: SelectItemIndicator,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n});\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type ContainerSize = \"sm\" | \"md\" | \"lg\" | \"fluid\";\n\nexport interface ContainerProps extends ComponentProps<\"div\"> {\n /** Width preset. `md` (default) ≈ 90rem; `fluid` removes the max-width. */\n size?: ContainerSize;\n /** Tighter vertical rhythm and block padding for dense screens. */\n compact?: boolean;\n}\n\n/**\n * Page content region: a centered, max-width column that also owns the\n * vertical gap between stacked sections. Place inside `<AppShell.Main>`,\n * which provides no padding of its own. Distinct from the `.Container`\n * escape hatch (e.g. `Card.Container`) — this is a standalone page region.\n */\nexport function Container({ size = \"md\", compact, className, ...rest }: ContainerProps) {\n return (\n <div\n className={cn(\n [\"container\", size !== \"md\" && `container-${size}`, compact && \"container-compact\"],\n className,\n )}\n {...rest}\n />\n );\n}\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport type CardVariant =\n | \"default\"\n | \"muted\"\n | \"primary\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport interface CardContainerProps extends ComponentProps<\"div\"> {\n /** Tinted surface + matching border. Defaults to the neutral surface. */\n variant?: CardVariant;\n bordered?: boolean;\n compact?: boolean;\n}\n\n/**\n * The bare `.card` container — no body, no title. Use this when you need to\n * compose the internals yourself (e.g. a media block above the body).\n */\nfunction CardContainer({\n variant = \"default\",\n bordered,\n compact,\n className,\n ...rest\n}: CardContainerProps) {\n return (\n <div\n className={cn(\n [\n \"card\",\n variant !== \"default\" && `card-${variant}`,\n bordered && \"card-bordered\",\n compact && \"card-compact\",\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n\nexport interface CardProps extends Omit<ComponentProps<\"div\">, \"title\"> {\n /** Tinted surface + matching border. Defaults to the neutral surface. */\n variant?: CardVariant;\n bordered?: boolean;\n compact?: boolean;\n /** Leading icon for the title row. */\n icon?: IconProp;\n /** Renders as `<Card.Title>`. */\n title?: ReactNode;\n /** Renders as `<Card.Description>`. */\n description?: ReactNode;\n /** Trailing header controls (close, edit, …). Renders as `<Card.Toolbar>`. */\n toolbar?: ReactNode;\n /** Renders as `<Card.Actions>`. */\n actions?: ReactNode;\n}\n\n/**\n * Standard card: a `.card` container with a single `.card-body` that lays out\n * an optional title (with icon), description, children, and actions. For\n * anything outside that shape, use `<Card.Container>` and compose by hand.\n */\nfunction CardRoot({\n variant,\n bordered,\n compact,\n icon,\n title,\n description,\n toolbar,\n actions,\n className,\n children,\n ...rest\n}: CardProps) {\n const hasTitle = icon !== undefined || title !== undefined;\n const titleEl = hasTitle ? <CardTitle icon={icon}>{title}</CardTitle> : null;\n return (\n <CardContainer\n variant={variant}\n bordered={bordered}\n compact={compact}\n className={className}\n {...rest}\n >\n <CardBody>\n {toolbar !== undefined ? (\n <CardHeader>\n {titleEl}\n <CardToolbar>{toolbar}</CardToolbar>\n </CardHeader>\n ) : (\n titleEl\n )}\n {description !== undefined ? <CardDescription>{description}</CardDescription> : null}\n {children}\n {actions !== undefined ? <CardActions>{actions}</CardActions> : null}\n </CardBody>\n </CardContainer>\n );\n}\n\nexport type CardBodyProps = ComponentProps<\"div\">;\nfunction CardBody({ className, ...rest }: CardBodyProps) {\n return <div className={cn(\"card-body\", className)} {...rest} />;\n}\n\nexport type CardHeaderProps = ComponentProps<\"div\">;\nfunction CardHeader({ className, ...rest }: CardHeaderProps) {\n return <div className={cn(\"card-header\", className)} {...rest} />;\n}\n\nexport type CardToolbarProps = ComponentProps<\"div\">;\nfunction CardToolbar({ className, ...rest }: CardToolbarProps) {\n return <div className={cn(\"card-toolbar\", className)} {...rest} />;\n}\n\nexport interface CardTitleProps extends ComponentProps<\"h3\"> {\n /** Leading icon. */\n icon?: IconProp;\n}\nfunction CardTitle({ icon, className, children, ...rest }: CardTitleProps) {\n return (\n <h3 className={cn(\"card-title\", className)} {...rest}>\n {renderIcon(icon)}\n {children}\n </h3>\n );\n}\n\nexport type CardDescriptionProps = ComponentProps<\"p\">;\nfunction CardDescription({ className, ...rest }: CardDescriptionProps) {\n return <p className={cn(\"card-description\", className)} {...rest} />;\n}\n\nexport type CardActionsProps = ComponentProps<\"div\">;\nfunction CardActions({ className, ...rest }: CardActionsProps) {\n return <div className={cn(\"card-actions\", className)} {...rest} />;\n}\n\nexport const Card = Object.assign(CardRoot, {\n Container: CardContainer,\n Body: CardBody,\n Header: CardHeader,\n Toolbar: CardToolbar,\n Title: CardTitle,\n Description: CardDescription,\n Actions: CardActions,\n});\n","import type { ComponentProps, ReactNode } from \"react\";\nimport type { CardVariant } from \"./Card\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\nexport interface StatCardProps extends Omit<ComponentProps<\"div\">, \"label\"> {\n /** Tinted surface + matching border, shared with `<Card>`. The value picks up the accent (except `warning`). Defaults to the neutral surface. */\n variant?: CardVariant;\n /** Small annotation above the value (e.g. \"Total Generations\"). */\n label?: ReactNode;\n /** The headline metric. Rendered with `tabular-nums` so digits don't shift between values. */\n value?: ReactNode;\n /** Subordinate line under the value (e.g. \"42 completed / 12 pending\"). */\n detail?: ReactNode;\n /** Leading icon in the label row. */\n icon?: IconProp;\n compact?: boolean;\n bordered?: boolean;\n}\n\n/**\n * Compact KPI tile — `label / value / detail`. Renders a `.card` shell (so it\n * shares the surface, border, radius, shadow, and every card modifier) with an\n * inverted inner hierarchy: the value dominates, the label is a small\n * annotation. `compact`/`bordered` map to the shared `.card-compact`/\n * `.card-bordered` modifiers. For free-form tiles, use `<Card>`; for\n * label/value tables, use `<PropertyList>`.\n */\nexport function StatCard({\n variant = \"default\",\n label,\n value,\n detail,\n icon,\n compact,\n bordered,\n className,\n children,\n ...rest\n}: StatCardProps) {\n const hasLabel = icon !== undefined || label !== undefined;\n return (\n <div\n className={cn(\n [\n \"card\",\n \"stat-card\",\n variant !== \"default\" && `card-${variant}`,\n compact && \"card-compact\",\n bordered && \"card-bordered\",\n ],\n className,\n )}\n {...rest}\n >\n {hasLabel ? (\n <p className={cn(\"stat-card-label\", undefined)}>\n {renderIcon(icon)}\n {label}\n </p>\n ) : null}\n {value !== undefined ? <p className={cn(\"stat-card-value\", undefined)}>{value}</p> : null}\n {detail !== undefined ? <p className={cn(\"stat-card-detail\", undefined)}>{detail}</p> : null}\n {children}\n </div>\n );\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useRef,\n type ComponentProps,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\nimport { PortalContainerContext } from \"./portal-context\";\n\nexport type DialogSize = \"sm\" | \"md\" | \"lg\";\nexport type DialogClosedBy = \"any\" | \"closerequest\" | \"none\";\n\ninterface DialogContextValue {\n close: () => void;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nfunction DefaultCloseIcon() {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport interface DialogContainerProps extends Omit<ComponentProps<\"dialog\">, \"open\"> {\n /** Controlled open state. Omit for uncontrolled (e.g. driven by Invoker Commands). */\n open?: boolean;\n /** Fires when the dialog closes (Esc, backdrop, close button, form method=\"dialog\"). */\n onOpenChange?: (open: boolean) => void;\n /** Width preset. Default: `\"md\"`. */\n size?: DialogSize;\n /**\n * Native `closedby` attribute. `\"any\"` allows Esc + backdrop click,\n * `\"closerequest\"` only Esc, `\"none\"` neither. Default: `\"any\"`.\n */\n closedby?: DialogClosedBy;\n}\n\n/**\n * The bare `<dialog>` primitive — no opinions about header, body, or footer.\n * Use this when the default `<Dialog>` layout doesn't fit (custom header,\n * media block, multi-step content).\n */\nfunction DialogContainer({\n open,\n onOpenChange,\n size = \"md\",\n closedby = \"any\",\n className,\n children,\n ...rest\n}: DialogContainerProps) {\n const ref = useRef<HTMLDialogElement | null>(null);\n const onOpenChangeRef = useRef(onOpenChange);\n onOpenChangeRef.current = onOpenChange;\n\n useEffect(() => {\n const el = ref.current;\n if (!el || open === undefined) return;\n if (open && !el.open) el.showModal();\n else if (!open && el.open) el.close();\n }, [open]);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const handleClose = () => onOpenChangeRef.current?.(false);\n el.addEventListener(\"close\", handleClose);\n return () => el.removeEventListener(\"close\", handleClose);\n }, []);\n\n const ctx: DialogContextValue = {\n close: () => ref.current?.close(),\n };\n\n return (\n <DialogContext.Provider value={ctx}>\n <PortalContainerContext.Provider value={ref}>\n <dialog\n ref={ref}\n className={cn([\"dialog\", size !== \"md\" && `dialog-${size}`], className)}\n closedby={closedby}\n {...rest}\n >\n {children}\n </dialog>\n </PortalContainerContext.Provider>\n </DialogContext.Provider>\n );\n}\n\nexport type DialogHeaderProps = ComponentProps<\"div\">;\n\nfunction DialogHeader({ className, ...rest }: DialogHeaderProps) {\n return <div className={cn(\"dialog-header\", className)} {...rest} />;\n}\n\nexport interface DialogTitleProps extends ComponentProps<\"h2\"> {\n /** Leading icon. */\n icon?: IconProp;\n}\n\nfunction DialogTitle({ icon, className, children, ...rest }: DialogTitleProps) {\n return (\n <h2 className={cn(\"dialog-title\", className)} {...rest}>\n {renderIcon(icon)}\n {children}\n </h2>\n );\n}\n\nexport type DialogDescriptionProps = ComponentProps<\"p\">;\n\nfunction DialogDescription({ className, ...rest }: DialogDescriptionProps) {\n return <p className={cn(\"dialog-description\", className)} {...rest} />;\n}\n\nexport type DialogBodyProps = ComponentProps<\"div\">;\n\nfunction DialogBody({ className, ...rest }: DialogBodyProps) {\n return <div className={cn(\"dialog-body\", className)} {...rest} />;\n}\n\nexport type DialogFooterProps = ComponentProps<\"div\">;\n\nfunction DialogFooter({ className, ...rest }: DialogFooterProps) {\n return <div className={cn(\"dialog-footer\", className)} {...rest} />;\n}\n\nexport interface DialogCloseButtonProps extends ComponentProps<\"button\"> {\n /** Override the default X icon. */\n icon?: IconProp;\n}\n\nfunction DialogCloseButton({\n icon,\n className,\n children,\n onClick,\n type = \"button\",\n \"aria-label\": ariaLabel = \"Close\",\n ...rest\n}: DialogCloseButtonProps) {\n const ctx = useContext(DialogContext);\n return (\n <button\n type={type}\n className={cn(\"dialog-close\", className)}\n aria-label={ariaLabel}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) ctx?.close();\n }}\n {...rest}\n >\n {children ?? (icon !== undefined ? renderIcon(icon) : <DefaultCloseIcon />)}\n </button>\n );\n}\n\nexport interface DialogProps extends Omit<DialogContainerProps, \"title\" | \"children\"> {\n /** Leading icon for the title row. */\n icon?: IconProp;\n /** Renders as `<Dialog.Title>`. */\n title?: ReactNode;\n /** Renders as `<Dialog.Description>`. */\n description?: ReactNode;\n /** Renders as `<Dialog.Footer>`. */\n actions?: ReactNode;\n /** Show the X close button in the header. Default: `true`. */\n dismissible?: boolean;\n /** aria-label for the close button. Default: `\"Close\"`. */\n closeLabel?: string;\n children?: ReactNode;\n}\n\n/**\n * Standard modal: a `<dialog>` with an opinionated header / body / footer\n * layout driven by shorthand props. For anything outside that shape, use\n * `<Dialog.Container>` and compose by hand.\n */\nfunction DialogRoot({\n icon,\n title,\n description,\n actions,\n dismissible = true,\n closeLabel = \"Close\",\n children,\n ...containerProps\n}: DialogProps) {\n const hasTitle = title !== undefined || icon !== undefined;\n const showHeader = hasTitle || dismissible;\n return (\n <DialogContainer {...containerProps}>\n {showHeader ? (\n <DialogHeader>\n {hasTitle ? (\n <DialogTitle icon={icon}>{title}</DialogTitle>\n ) : (\n <span className={cn(\"flex-1\", undefined)} />\n )}\n {dismissible ? <DialogCloseButton aria-label={closeLabel} /> : null}\n </DialogHeader>\n ) : null}\n {description !== undefined ? <DialogDescription>{description}</DialogDescription> : null}\n {children !== undefined ? <DialogBody>{children}</DialogBody> : null}\n {actions !== undefined ? <DialogFooter>{actions}</DialogFooter> : null}\n </DialogContainer>\n );\n}\n\nexport const Dialog = Object.assign(DialogRoot, {\n Container: DialogContainer,\n Header: DialogHeader,\n Title: DialogTitle,\n Description: DialogDescription,\n Body: DialogBody,\n Footer: DialogFooter,\n CloseButton: DialogCloseButton,\n});\n","import { Field as BaseField } from \"@base-ui/react/field\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { cn } from \"./cn\";\n\n/**\n * Thin wrappers around Base UI's Field primitives that apply the design\n * system's class names.\n */\n\nexport type FieldContainerProps = ComponentProps<typeof BaseField.Root>;\n\n/**\n * The bare `.field` container. Use this when the default layout doesn't fit —\n * multiple validity-keyed `<Field.Error>` messages, a control that needs to\n * sit between description and error, etc.\n */\nfunction FieldContainer({ className, ...rest }: FieldContainerProps) {\n return <BaseField.Root className={cn(\"field\", className)} {...rest} />;\n}\n\nexport interface FieldProps extends FieldContainerProps {\n /** Renders as `<Field.Label>`. */\n label?: ReactNode;\n /** Renders as `<Field.Description>`. */\n description?: ReactNode;\n /**\n * Single-message error. Renders as `<Field.Error match={true}>` — shown\n * whenever the contained control fails validation. For per-`ValidityState`\n * messages, use `<Field.Container>` and compose `<Field.Error>` directly.\n */\n error?: ReactNode;\n /** Marks the label with a red asterisk via `data-required`. */\n required?: boolean;\n /**\n * Inline layout — control sits beside its label rather than above it.\n * Pairs with switches and single checkboxes. Applies `.field-row`.\n */\n inline?: boolean;\n}\n\n/**\n * Standard field: a `.field` container that lays out an optional label, the\n * control passed as `children`, an optional description, and an optional\n * single-message error. For anything outside that shape, use\n * `<Field.Container>` and compose by hand.\n */\nfunction FieldRoot({\n label,\n description,\n error,\n required,\n inline,\n className,\n children,\n ...rest\n}: FieldProps) {\n const labelEl = label !== undefined ? <FieldLabel required={required}>{label}</FieldLabel> : null;\n const descriptionEl =\n description !== undefined ? <FieldDescription>{description}</FieldDescription> : null;\n const errorEl = error !== undefined ? <FieldError match={true}>{error}</FieldError> : null;\n return (\n <FieldContainer className={cn(inline && \"field-row\", className)} {...rest}>\n {inline ? (\n <>\n {children}\n {labelEl}\n </>\n ) : (\n <>\n {labelEl}\n {children}\n </>\n )}\n {descriptionEl}\n {errorEl}\n </FieldContainer>\n );\n}\n\nexport type FieldLabelProps = ComponentProps<typeof BaseField.Label> & {\n /** Renders a red asterisk after the label text via `data-required`. */\n required?: boolean;\n};\n\nfunction FieldLabel({ className, required, ...rest }: FieldLabelProps) {\n return (\n <BaseField.Label\n data-required={required ? \"\" : undefined}\n className={cn(\"field-label\", className)}\n {...rest}\n />\n );\n}\n\nexport type FieldDescriptionProps = ComponentProps<typeof BaseField.Description>;\n\nfunction FieldDescription({ className, ...rest }: FieldDescriptionProps) {\n return <BaseField.Description className={cn(\"field-description\", className)} {...rest} />;\n}\n\nexport type FieldErrorProps = ComponentProps<typeof BaseField.Error>;\n\nfunction FieldError({ className, ...rest }: FieldErrorProps) {\n return <BaseField.Error className={cn(\"field-error\", className)} {...rest} />;\n}\n\nexport const Field = Object.assign(FieldRoot, {\n Container: FieldContainer,\n Label: FieldLabel,\n Description: FieldDescription,\n Error: FieldError,\n});\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type FooterProps = ComponentProps<\"footer\">;\n\nfunction FooterRoot({ className, ...rest }: FooterProps) {\n return <footer className={cn(\"footer\", className)} {...rest} />;\n}\n\nexport type FooterLinksProps = ComponentProps<\"div\">;\n\nfunction FooterLinks({ className, ...rest }: FooterLinksProps) {\n return <div className={cn(\"footer-links\", className)} {...rest} />;\n}\n\nexport type FooterLinkProps = ComponentProps<\"a\">;\n\nfunction FooterLink({ className, children, ...rest }: FooterLinkProps) {\n return (\n <a className={cn(\"footer-link\", className)} {...rest}>\n {children}\n </a>\n );\n}\n\nexport type FooterMetaProps = ComponentProps<\"div\">;\n\nfunction FooterMeta({ className, ...rest }: FooterMetaProps) {\n return <div className={cn(\"footer-meta\", className)} {...rest} />;\n}\n\nexport const Footer = Object.assign(FooterRoot, {\n Links: FooterLinks,\n Link: FooterLink,\n Meta: FooterMeta,\n});\n","import { useRef, type ComponentProps, type Ref } from \"react\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\nimport { Kbd } from \"./Kbd\";\nimport { useHotkey } from \"./useHotkey\";\n\nexport interface MenuProps extends ComponentProps<\"details\"> {}\n\nfunction MenuRoot({ className, ...rest }: MenuProps) {\n return <details className={cn(\"menu\", className)} {...rest} />;\n}\n\nexport type MenuTriggerProps = ComponentProps<\"summary\">;\n\nfunction MenuTrigger({ className, ...rest }: MenuTriggerProps) {\n return <summary className={cn(\"menu-trigger\", className)} {...rest} />;\n}\n\nexport type MenuPopupProps = ComponentProps<\"div\">;\n\nfunction MenuPopup({ className, role = \"menu\", ...rest }: MenuPopupProps) {\n return <div role={role} className={cn(\"menu-popup\", className)} {...rest} />;\n}\n\ninterface MenuItemHotkeyProp {\n /**\n * Keyboard shortcut bound to this item. Pressing the chord synthesizes a\n * click on this item. Right-pinned visually inside the menu row. Same\n * syntax as `useHotkey`.\n */\n hotkey?: string | readonly string[];\n}\n\ntype MenuItemAsButton = ComponentProps<\"button\"> &\n MenuItemHotkeyProp & { href?: undefined; icon?: IconProp };\ntype MenuItemAsLink = ComponentProps<\"a\"> & MenuItemHotkeyProp & { href: string; icon?: IconProp };\n\nexport type MenuItemProps = MenuItemAsButton | MenuItemAsLink;\n\nfunction MenuItem(props: MenuItemProps) {\n const ref = useRef<HTMLElement | null>(null);\n const hotkey = props.hotkey;\n\n const { ariaKeyShortcuts, primaryChord } = useHotkey(hotkey, () => ref.current?.click(), {\n enabled: !(\"disabled\" in props && props.disabled),\n });\n\n if (props.href !== undefined) {\n const { className, role = \"menuitem\", icon, children, hotkey: _hk, ...rest } = props;\n return (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n role={role}\n aria-keyshortcuts={ariaKeyShortcuts}\n className={cn(\"menu-item\", className)}\n {...rest}\n >\n {renderIcon(icon)}\n {children}\n {primaryChord !== undefined ? <Kbd keys={primaryChord} /> : null}\n </a>\n );\n }\n const {\n className,\n type = \"button\",\n role = \"menuitem\",\n icon,\n children,\n hotkey: _hk,\n ...rest\n } = props;\n return (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type={type}\n role={role}\n aria-keyshortcuts={ariaKeyShortcuts}\n className={cn(\"menu-item\", className)}\n {...rest}\n >\n {renderIcon(icon)}\n {children}\n {primaryChord !== undefined ? <Kbd keys={primaryChord} /> : null}\n </button>\n );\n}\n\nexport type MenuSeparatorProps = ComponentProps<\"hr\">;\n\nfunction MenuSeparator({ className, ...rest }: MenuSeparatorProps) {\n return <hr className={cn(\"menu-separator\", className)} {...rest} />;\n}\n\nexport type MenuGroupProps = ComponentProps<\"div\">;\n\nfunction MenuGroup({ className, role = \"group\", ...rest }: MenuGroupProps) {\n return <div role={role} className={cn(\"menu-group\", className)} {...rest} />;\n}\n\nexport type MenuGroupLabelProps = ComponentProps<\"div\">;\n\nfunction MenuGroupLabel({ className, ...rest }: MenuGroupLabelProps) {\n return <div className={cn(\"menu-group-label\", className)} {...rest} />;\n}\n\nexport const Menu = Object.assign(MenuRoot, {\n Trigger: MenuTrigger,\n Popup: MenuPopup,\n Item: MenuItem,\n Separator: MenuSeparator,\n Group: MenuGroup,\n GroupLabel: MenuGroupLabel,\n});\n","import type { ComponentProps, ReactNode } from \"react\";\nimport { useAppShell } from \"./AppShell\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\nimport { Menu } from \"./Menu\";\n\nexport type NavbarProps = ComponentProps<\"header\">;\n\nfunction NavbarRoot({ className, ...rest }: NavbarProps) {\n return <header className={cn(\"navbar\", className)} {...rest} />;\n}\n\nexport type NavbarBrandProps = ComponentProps<\"div\">;\n\nfunction NavbarBrand({ className, ...rest }: NavbarBrandProps) {\n return <div className={cn(\"navbar-brand\", className)} {...rest} />;\n}\n\nexport type NavbarItemsProps = ComponentProps<\"nav\">;\n\nfunction NavbarItems({ className, ...rest }: NavbarItemsProps) {\n return <nav className={cn(\"navbar-items\", className)} {...rest} />;\n}\n\nexport interface NavbarItemProps extends ComponentProps<\"a\"> {\n active?: boolean;\n /** Leading icon. */\n icon?: IconProp;\n}\n\nfunction NavbarItem({ active, icon, className, children, ...rest }: NavbarItemProps) {\n return (\n <a\n className={cn(\"navbar-item\", className)}\n aria-current={active ? \"page\" : undefined}\n {...rest}\n >\n {renderIcon(icon)}\n {children}\n </a>\n );\n}\n\nexport interface NavbarDropdownProps extends Omit<ComponentProps<\"details\">, \"title\"> {\n /** Text shown in the trigger. */\n label: ReactNode;\n}\n\nfunction NavbarDropdown({ label, className, children, ...rest }: NavbarDropdownProps) {\n return (\n <Menu className={className} {...rest}>\n <Menu.Trigger className={cn(\"navbar-item\", undefined)}>{label}</Menu.Trigger>\n <Menu.Popup>{children}</Menu.Popup>\n </Menu>\n );\n}\n\nexport type NavbarActionsProps = ComponentProps<\"div\">;\n\nfunction NavbarActions({ className, ...rest }: NavbarActionsProps) {\n return <div className={cn(\"navbar-actions\", className)} {...rest} />;\n}\n\nexport interface NavbarMobileToggleProps extends Omit<\n ComponentProps<\"button\">,\n \"onClick\" | \"children\"\n> {\n /** Accessible label for the toggle. Default: \"Open menu\". */\n label?: string;\n}\n\nfunction NavbarMobileToggle({\n label = \"Open menu\",\n className,\n type = \"button\",\n ...rest\n}: NavbarMobileToggleProps) {\n const shell = useAppShell();\n const open = shell?.mobileDrawerOpen ?? false;\n\n return (\n <button\n type={type}\n aria-label={label}\n aria-expanded={open}\n onClick={() => shell?.setMobileDrawerOpen(!open)}\n className={cn(\"navbar-mobile-toggle\", className)}\n {...rest}\n />\n );\n}\n\nexport const Navbar = Object.assign(NavbarRoot, {\n Brand: NavbarBrand,\n Items: NavbarItems,\n Item: NavbarItem,\n Dropdown: NavbarDropdown,\n Actions: NavbarActions,\n MobileToggle: NavbarMobileToggle,\n});\n","import { Tabs as BaseTabs } from \"@base-ui/react/tabs\";\nimport type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type TabsVariant = \"bordered\" | \"boxed\";\nexport type TabsSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface TabsProps extends ComponentProps<typeof BaseTabs.Root> {\n variant?: TabsVariant;\n size?: TabsSize;\n fullWidth?: boolean;\n}\n\nfunction TabsRoot({\n variant = \"bordered\",\n size = \"md\",\n fullWidth = false,\n className,\n ...rest\n}: TabsProps) {\n return (\n <BaseTabs.Root\n className={cn(\n [\n \"tabs\",\n variant !== \"bordered\" && `tabs-${variant}`,\n size !== \"md\" && `tabs-${size}`,\n fullWidth && \"tabs-full-width\",\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n\nexport type TabsListProps = ComponentProps<typeof BaseTabs.List>;\n\nfunction TabsList({ className, ...rest }: TabsListProps) {\n return <BaseTabs.List className={cn(\"tab-list\", className)} {...rest} />;\n}\n\nexport type TabsTabProps = ComponentProps<typeof BaseTabs.Tab>;\n\nfunction TabsTab({ className, ...rest }: TabsTabProps) {\n return <BaseTabs.Tab className={cn(\"tab\", className)} {...rest} />;\n}\n\nexport type TabsPanelProps = ComponentProps<typeof BaseTabs.Panel>;\n\nfunction TabsPanel({ className, ...rest }: TabsPanelProps) {\n return <BaseTabs.Panel className={cn(\"tab-panel\", className)} {...rest} />;\n}\n\nexport type TabsIndicatorProps = ComponentProps<typeof BaseTabs.Indicator>;\n\nfunction TabsIndicator({ className, ...rest }: TabsIndicatorProps) {\n return <BaseTabs.Indicator className={cn(\"tab-indicator\", className)} {...rest} />;\n}\n\nexport const Tabs = Object.assign(TabsRoot, {\n List: TabsList,\n Tab: TabsTab,\n Panel: TabsPanel,\n Indicator: TabsIndicator,\n});\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport interface CodeBlockProps extends ComponentProps<\"pre\"> {\n /** Don't wrap long lines — let them overflow horizontally instead. Pair\n * with an inline `max-height` to clamp vertical growth. */\n nowrap?: boolean;\n}\n\n/**\n * Styled `<pre>` for logs, JSON dumps, terminal output, raw model output.\n * Theme-following surface via `--color-code-surface` / `--color-code-text`.\n * Wraps by default; opt out with `nowrap`. No syntax highlighting — layer\n * Shiki/Prism on a nested `<code>` if needed.\n */\nexport function CodeBlock({ nowrap, className, ...rest }: CodeBlockProps) {\n return <pre className={cn([\"code-block\", nowrap && \"code-block-nowrap\"], className)} {...rest} />;\n}\n","import { Tooltip as BaseTooltip } from \"@base-ui/react/tooltip\";\nimport { useContext, type ComponentProps, type ReactElement, type ReactNode } from \"react\";\nimport { cn } from \"./cn\";\nimport { PortalContainerContext } from \"./portal-context\";\n\nexport type TooltipProviderProps = ComponentProps<typeof BaseTooltip.Provider>;\n\nfunction TooltipProvider(props: TooltipProviderProps) {\n return <BaseTooltip.Provider {...props} />;\n}\n\nexport type TooltipRootProps = ComponentProps<typeof BaseTooltip.Root>;\n\nfunction TooltipRoot(props: TooltipRootProps) {\n return <BaseTooltip.Root {...props} />;\n}\n\nexport type TooltipTriggerProps = ComponentProps<typeof BaseTooltip.Trigger>;\n\nfunction TooltipTrigger(props: TooltipTriggerProps) {\n return <BaseTooltip.Trigger {...props} />;\n}\n\nexport type TooltipSize = \"sm\" | \"md\";\n\ntype TooltipPositionerProps = ComponentProps<typeof BaseTooltip.Positioner>;\n\nexport interface TooltipPopupProps extends ComponentProps<typeof BaseTooltip.Popup> {\n size?: TooltipSize;\n side?: TooltipPositionerProps[\"side\"];\n align?: TooltipPositionerProps[\"align\"];\n sideOffset?: TooltipPositionerProps[\"sideOffset\"];\n}\n\nfunction TooltipPopup({\n size = \"md\",\n side = \"top\",\n align = \"center\",\n sideOffset = 6,\n role = \"tooltip\",\n className,\n children,\n ...rest\n}: TooltipPopupProps) {\n const portalContainer = useContext(PortalContainerContext);\n return (\n <BaseTooltip.Portal container={portalContainer ?? undefined}>\n <BaseTooltip.Positioner sideOffset={sideOffset} side={side} align={align}>\n <BaseTooltip.Popup\n role={role}\n className={cn([\"tooltip\", size !== \"md\" && `tooltip-${size}`], className)}\n {...rest}\n >\n {children}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n );\n}\n\nexport interface TooltipProps extends Omit<TooltipRootProps, \"children\"> {\n /** Tooltip body — string or rich node. */\n content: ReactNode;\n side?: TooltipPopupProps[\"side\"];\n align?: TooltipPopupProps[\"align\"];\n sideOffset?: TooltipPopupProps[\"sideOffset\"];\n size?: TooltipSize;\n /** The trigger element. Must be a single React element so Base UI can merge trigger props/refs into it. */\n children: ReactElement;\n}\n\nfunction TooltipShorthand({\n content,\n side,\n align,\n sideOffset,\n size,\n children,\n ...rootProps\n}: TooltipProps) {\n return (\n <TooltipRoot {...rootProps}>\n <BaseTooltip.Trigger render={children} />\n <TooltipPopup side={side} align={align} sideOffset={sideOffset} size={size}>\n {content}\n </TooltipPopup>\n </TooltipRoot>\n );\n}\n\nexport const Tooltip = Object.assign(TooltipShorthand, {\n Provider: TooltipProvider,\n Root: TooltipRoot,\n Trigger: TooltipTrigger,\n Popup: TooltipPopup,\n});\n","import { useRef, useState, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"./cn\";\n\n// Inline SVGs match Tabler's stroke conventions (24px viewBox, stroke-width 2,\n// round caps + joins, currentColor). admin-react stays icon-library-agnostic;\n// consumers don't need @tabler/icons-react or the Tabler webfont.\nfunction CopyGlyph({ className }: { className: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"M7 7m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z\" />\n <path d=\"M15 7v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2\" />\n </svg>\n );\n}\n\nfunction CheckGlyph({ className }: { className: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n >\n <path d=\"M5 12l5 5l10 -10\" />\n </svg>\n );\n}\n\nexport interface PropertyListProps extends Omit<ComponentProps<\"section\">, \"title\"> {\n striped?: boolean;\n /** Tightens row height and padding for very dense panels. */\n compact?: boolean;\n /** Collapses the whole section when every item rendered the auto em-dash\n * fallback for an empty value. */\n hideIfAllEmpty?: boolean;\n /** Optional section heading rendered as `<h3 class=\"property-list-title\">`\n * above the items grid. */\n title?: ReactNode;\n}\n\nfunction PropertyListRoot({\n striped,\n compact,\n hideIfAllEmpty,\n title,\n className,\n children,\n ...rest\n}: PropertyListProps) {\n return (\n <section\n className={cn(\n [\n \"property-list\",\n striped && \"property-list-striped\",\n compact && \"property-list-compact\",\n hideIfAllEmpty && \"property-list-hide-if-empty\",\n ],\n className,\n )}\n {...rest}\n >\n {title !== undefined ? (\n <h3 className={cn(\"property-list-title\", undefined)}>{title}</h3>\n ) : null}\n <dl className={cn(\"property-list-items\", undefined)}>{children}</dl>\n </section>\n );\n}\n\nexport interface PropertyListItemProps extends Omit<ComponentProps<\"dd\">, \"title\" | \"label\"> {\n label?: ReactNode;\n value?: ReactNode;\n /** Right-aligns the value cell + applies `tabular-nums`. Mirrors `Table.Cell.numeric`. */\n numeric?: boolean;\n /** Opts this row into the copy affordance regardless of list-level `copyable`. */\n copyable?: boolean;\n /** Overrides the text the copy button writes to the clipboard. */\n copyValue?: string;\n}\n\nfunction isEmptyValue(value: ReactNode): boolean {\n if (value == null) return true;\n if (typeof value === \"string\") return value.trim() === \"\";\n return false;\n}\n\n// Item is a thin wrapper that emits a <dt>/<dd> pair as siblings (no host\n// element). In shorthand mode it generates the subparts; in children mode it\n// renders them verbatim. Either way, no extra DOM wrapper is introduced.\nfunction PropertyListItem({\n label,\n value,\n numeric,\n copyable,\n copyValue,\n children,\n ...rest\n}: PropertyListItemProps) {\n if (children !== undefined) {\n return <>{children}</>;\n }\n const empty = isEmptyValue(value);\n return (\n <>\n <PropertyListLabel>{label}</PropertyListLabel>\n <PropertyListValue\n numeric={numeric}\n copyable={copyable}\n empty={empty}\n copyValue={copyValue ?? (typeof value === \"string\" ? value : undefined)}\n {...rest}\n >\n {empty ? \"—\" : value}\n </PropertyListValue>\n </>\n );\n}\n\nexport type PropertyListLabelProps = ComponentProps<\"dt\">;\nfunction PropertyListLabel({ className, ...rest }: PropertyListLabelProps) {\n return <dt className={cn(\"property-list-label\", className)} {...rest} />;\n}\n\nexport interface PropertyListValueProps extends ComponentProps<\"dd\"> {\n numeric?: boolean;\n copyable?: boolean;\n /** Marks the cell as carrying an auto-rendered em-dash. The list-level\n * `hideIfAllEmpty` collapses the section when every value is empty. */\n empty?: boolean;\n /** Overrides the text the copy button writes to the clipboard. */\n copyValue?: string;\n}\n\nfunction PropertyListValue({\n numeric,\n copyable,\n empty,\n copyValue,\n className,\n children,\n ...rest\n}: PropertyListValueProps) {\n const ddRef = useRef<HTMLElement | null>(null);\n const [copied, setCopied] = useState(false);\n\n async function handleCopy() {\n const text = copyValue ?? ddRef.current?.textContent?.trim() ?? \"\";\n if (!text) return;\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 1200);\n } catch {\n // Permission denied or unsupported — fail silently.\n }\n }\n\n return (\n <dd\n ref={ddRef}\n className={cn(\n [\n \"property-list-value\",\n numeric && \"property-list-value-numeric\",\n copyable && \"property-list-value-copyable\",\n empty && \"property-list-value-empty\",\n ],\n className,\n )}\n {...rest}\n >\n {children}\n <button\n type=\"button\"\n aria-label=\"Copy\"\n className={cn(\"property-list-copy\", undefined)}\n onClick={handleCopy}\n data-copied={copied ? \"true\" : undefined}\n >\n <CopyGlyph className={cn(\"property-list-copy-icon\", undefined)} />\n <CheckGlyph className={cn(\"property-list-copy-icon-copied\", undefined)} />\n </button>\n </dd>\n );\n}\n\nexport const PropertyList = Object.assign(PropertyListRoot, {\n Item: PropertyListItem,\n Label: PropertyListLabel,\n Value: PropertyListValue,\n});\n","import type { ComponentProps } from \"react\";\nimport { cn } from \"./cn\";\n\nexport type TableAlign = \"left\" | \"right\" | \"center\";\n\nexport interface TableProps extends ComponentProps<\"table\"> {\n striped?: boolean;\n bordered?: boolean;\n relaxed?: boolean;\n /** Pins `<thead>` while the surrounding scroll container scrolls.\n * Requires an overflowing ancestor — wrap the table in\n * `<div style=\"overflow:auto; max-height: …\">`. */\n sticky?: boolean;\n}\n\nfunction TableRoot({ striped, bordered, relaxed, sticky, className, ...rest }: TableProps) {\n return (\n <table\n className={cn(\n [\n \"table\",\n striped && \"table-striped\",\n bordered && \"table-bordered\",\n relaxed && \"table-relaxed\",\n sticky && \"table-sticky\",\n ],\n className,\n )}\n {...rest}\n />\n );\n}\n\nexport type TableHeadProps = ComponentProps<\"thead\">;\nfunction TableHead({ className, ...rest }: TableHeadProps) {\n return <thead className={className} {...rest} />;\n}\n\nexport type TableBodyProps = ComponentProps<\"tbody\">;\nfunction TableBody({ className, ...rest }: TableBodyProps) {\n return <tbody className={className} {...rest} />;\n}\n\nexport type TableFootProps = ComponentProps<\"tfoot\">;\nfunction TableFoot({ className, ...rest }: TableFootProps) {\n return <tfoot className={className} {...rest} />;\n}\n\nexport interface TableRowProps extends ComponentProps<\"tr\"> {\n /** Visually marks the row as selected. Independent of the CSS rule that\n * tints rows containing a checked checkbox — use this for programmatic\n * selection (single-select on row click, server-driven highlight, …). */\n selected?: boolean;\n /** Applies `.table-row-link` so the first `<a>` inside the row expands to\n * fill the row. The consumer still supplies the anchor — this just adds\n * the CSS hook so the hit-area covers the whole row. */\n asLink?: boolean;\n}\nfunction TableRow({ selected, asLink, className, ...rest }: TableRowProps) {\n return (\n <tr\n className={cn(asLink && \"table-row-link\", className)}\n data-selected={selected || undefined}\n {...rest}\n />\n );\n}\n\nexport interface TableHeaderCellProps extends Omit<ComponentProps<\"th\">, \"align\"> {\n align?: TableAlign;\n /** Narrow first-column gutter — mirrors the body cell `gutter` modifier so\n * the column lines up. Use for status-icon columns and select-all\n * checkboxes. */\n gutter?: boolean;\n}\nfunction TableHeaderCell({ align, gutter, className, scope, ...rest }: TableHeaderCellProps) {\n return (\n <th\n className={cn([\"table-header-cell\", gutter && \"table-cell-gutter\"], className)}\n data-align={align && align !== \"left\" ? align : undefined}\n scope={scope ?? \"col\"}\n {...rest}\n />\n );\n}\n\nexport interface TableCellProps extends Omit<ComponentProps<\"td\">, \"align\"> {\n align?: TableAlign;\n /** Narrow first-column gutter for row-level status icons. */\n gutter?: boolean;\n /** `text-right` + `tabular-nums` for currency/totals columns. */\n numeric?: boolean;\n}\nfunction TableCell({ align, gutter, numeric, className, ...rest }: TableCellProps) {\n return (\n <td\n className={cn(\n [\"table-cell\", gutter && \"table-cell-gutter\", numeric && \"table-cell-numeric\"],\n className,\n )}\n data-align={align && align !== \"left\" ? align : undefined}\n {...rest}\n />\n );\n}\n\nexport const Table = Object.assign(TableRoot, {\n Head: TableHead,\n Body: TableBody,\n Foot: TableFoot,\n Row: TableRow,\n HeaderCell: TableHeaderCell,\n Cell: TableCell,\n});\n","import { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { createContext, useContext, useState } from \"react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { useAppShell } from \"./AppShell\";\nimport { cn } from \"./cn\";\nimport { renderIcon, type IconProp } from \"./icon\";\n\ninterface SidebarContextValue {\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null);\n\nexport interface SidebarProps extends Omit<ComponentProps<\"aside\">, \"onChange\"> {\n /** Controlled collapsed state. Pair with `onCollapsedChange`. */\n collapsed?: boolean;\n /** Uncontrolled initial state. */\n defaultCollapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n /** Accessible label for the mobile drawer dialog. Default: \"Navigation\". */\n drawerLabel?: string;\n}\n\nfunction SidebarRoot({\n collapsed,\n defaultCollapsed,\n onCollapsedChange,\n drawerLabel = \"Navigation\",\n className,\n children,\n ...rest\n}: SidebarProps) {\n const shell = useAppShell();\n const drawerOpen = shell?.mobileDrawerOpen ?? false;\n\n return (\n <SidebarContext.Provider value={{ collapsed, defaultCollapsed, onCollapsedChange }}>\n <aside className={cn(\"sidebar\", className)} {...rest}>\n {drawerOpen ? null : children}\n </aside>\n {shell ? (\n <BaseDialog.Root open={drawerOpen} onOpenChange={(open) => shell.setMobileDrawerOpen(open)}>\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className={cn(\"sidebar-drawer-backdrop\", undefined)} />\n <BaseDialog.Popup\n className={cn(\"sidebar-drawer\", undefined)}\n aria-label={drawerLabel}\n onClick={(event) => {\n const target = event.target as HTMLElement;\n if (target.closest(\"a, [data-drawer-close]\")) {\n shell.setMobileDrawerOpen(false);\n }\n }}\n >\n {children}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n ) : null}\n </SidebarContext.Provider>\n );\n}\n\nexport type SidebarHeaderProps = ComponentProps<\"div\">;\n\nfunction SidebarHeader({ className, ...rest }: SidebarHeaderProps) {\n return <div className={cn(\"sidebar-header\", className)} {...rest} />;\n}\n\nexport type SidebarNavProps = ComponentProps<\"nav\">;\n\nfunction SidebarNav({ className, ...rest }: SidebarNavProps) {\n return <nav className={cn(\"sidebar-nav\", className)} {...rest} />;\n}\n\nexport type SidebarGroupProps = ComponentProps<\"div\">;\n\nfunction SidebarGroup({ className, ...rest }: SidebarGroupProps) {\n return <div className={cn(\"sidebar-group\", className)} {...rest} />;\n}\n\nexport type SidebarGroupLabelProps = ComponentProps<\"div\">;\n\nfunction SidebarGroupLabel({ className, ...rest }: SidebarGroupLabelProps) {\n return <div className={cn(\"sidebar-group-label\", className)} {...rest} />;\n}\n\nexport interface SidebarItemProps extends ComponentProps<\"a\"> {\n active?: boolean;\n /** Leading icon. Rendered inside `<Sidebar.Icon>`. */\n icon?: IconProp;\n /** Trailing badge. Rendered inside `<Sidebar.Badge>`. */\n badge?: ReactNode;\n}\n\nfunction SidebarItem({ active, icon, badge, className, children, ...rest }: SidebarItemProps) {\n return (\n <a\n className={cn(\"sidebar-item\", className)}\n aria-current={active ? \"page\" : undefined}\n {...rest}\n >\n {icon != null ? <SidebarIcon>{renderIcon(icon)}</SidebarIcon> : null}\n {children !== undefined ? <SidebarLabel>{children}</SidebarLabel> : null}\n {badge !== undefined ? <SidebarBadge>{badge}</SidebarBadge> : null}\n </a>\n );\n}\n\nexport type SidebarIconProps = ComponentProps<\"span\">;\n\nfunction SidebarIcon({ className, ...rest }: SidebarIconProps) {\n return <span aria-hidden className={cn(\"sidebar-icon\", className)} {...rest} />;\n}\n\nexport type SidebarLabelProps = ComponentProps<\"span\">;\n\nfunction SidebarLabel({ className, ...rest }: SidebarLabelProps) {\n return <span className={cn(\"sidebar-label\", className)} {...rest} />;\n}\n\nexport type SidebarBadgeProps = ComponentProps<\"span\">;\n\nfunction SidebarBadge({ className, ...rest }: SidebarBadgeProps) {\n return <span className={cn(\"sidebar-badge\", className)} {...rest} />;\n}\n\nexport interface SidebarCollapsibleProps extends Omit<\n ComponentProps<\"details\">,\n \"onToggle\" | \"open\"\n> {\n /** Leading icon for the trigger. Rendered inside `<Sidebar.Icon>`. */\n icon?: IconProp;\n /** Label shown next to the icon. Rendered inside `<Sidebar.Label>`. */\n label?: ReactNode;\n /** Full trigger content. Overrides `icon` + `label`. */\n trigger?: ReactNode;\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n /** Fires when the panel toggles open/closed. */\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction SidebarCollapsible({\n icon,\n label,\n trigger,\n children,\n className,\n open,\n defaultOpen,\n onOpenChange,\n ...rest\n}: SidebarCollapsibleProps) {\n const isControlled = open !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const isOpen = isControlled ? open : internalOpen;\n\n const triggerContent = trigger ?? (\n <>\n {icon != null ? <SidebarIcon>{renderIcon(icon)}</SidebarIcon> : null}\n {label !== undefined ? <SidebarLabel>{label}</SidebarLabel> : null}\n </>\n );\n\n return (\n <details\n className={cn(\"sidebar-collapsible\", className)}\n open={isOpen}\n onToggle={(event) => {\n const next = (event.currentTarget as HTMLDetailsElement).open;\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n }}\n {...rest}\n >\n <summary className={cn(\"sidebar-collapsible-trigger\", undefined)}>{triggerContent}</summary>\n <div className={cn(\"sidebar-collapsible-panel\", undefined)}>{children}</div>\n </details>\n );\n}\n\nexport interface SidebarSubItemProps extends ComponentProps<\"a\"> {\n active?: boolean;\n /** Leading icon. */\n icon?: IconProp;\n badge?: ReactNode;\n}\n\nfunction SidebarSubItem({\n active,\n icon,\n badge,\n className,\n children,\n ...rest\n}: SidebarSubItemProps) {\n return (\n <a\n className={cn(\"sidebar-subitem\", className)}\n aria-current={active ? \"page\" : undefined}\n {...rest}\n >\n {icon != null ? <SidebarIcon>{renderIcon(icon)}</SidebarIcon> : null}\n {children}\n {badge !== undefined ? <SidebarBadge>{badge}</SidebarBadge> : null}\n </a>\n );\n}\n\nexport type SidebarFooterProps = ComponentProps<\"div\">;\n\nfunction SidebarFooter({ className, ...rest }: SidebarFooterProps) {\n return <div className={cn(\"sidebar-footer\", className)} {...rest} />;\n}\n\nexport interface SidebarCollapseToggleProps extends Omit<ComponentProps<\"label\">, \"htmlFor\"> {\n /** Accessible label for the checkbox. Default: \"Toggle sidebar\". */\n label?: string;\n}\n\nfunction SidebarCollapseToggle({\n label = \"Toggle sidebar\",\n className,\n children,\n ...rest\n}: SidebarCollapseToggleProps) {\n const ctx = useContext(SidebarContext);\n const controlledChecked = ctx?.collapsed;\n const isControlled = controlledChecked !== undefined;\n\n return (\n <label className={cn(\"sidebar-collapse-toggle\", className)} {...rest}>\n <input\n type=\"checkbox\"\n className={cn(\"sidebar-toggle\", undefined)}\n aria-label={label}\n {...(isControlled\n ? { checked: controlledChecked }\n : { defaultChecked: ctx?.defaultCollapsed })}\n onChange={(event) => ctx?.onCollapsedChange?.(event.currentTarget.checked)}\n />\n <span className={cn(\"sr-only\", undefined)}>{label}</span>\n {children}\n </label>\n );\n}\n\nexport const Sidebar = Object.assign(SidebarRoot, {\n Header: SidebarHeader,\n Nav: SidebarNav,\n Group: SidebarGroup,\n GroupLabel: SidebarGroupLabel,\n Item: SidebarItem,\n Icon: SidebarIcon,\n Label: SidebarLabel,\n Badge: SidebarBadge,\n Collapsible: SidebarCollapsible,\n SubItem: SidebarSubItem,\n Footer: SidebarFooter,\n CollapseToggle: SidebarCollapseToggle,\n});\n"],"mappings":"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"}
|