@evinvest/uikit 0.7.0 → 0.8.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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/cn.ts","../src/primitives/slot.tsx","../src/primitives/use-controllable-state.ts","../src/primitives/portal.tsx","../src/primitives/dismissable-layer.tsx","../src/primitives/use-floating.ts","../src/primitives/focus-scope.tsx","../src/primitives/presence.ts","../src/primitives/use-roving-focus.ts","../src/primitives/merge-refs.ts","../src/components/alert.tsx","../src/generated/alert.ts","../src/components/avatar.tsx","../src/generated/avatar.ts","../src/components/badge.tsx","../src/generated/badge.ts","../src/components/breadcrumb.tsx","../src/generated/breadcrumb.ts","../src/components/button.tsx","../src/generated/button.ts","../src/components/button-group.tsx","../src/generated/button-group.ts","../src/components/card.tsx","../src/generated/card.ts","../src/components/empty.tsx","../src/generated/empty.ts","../src/components/field.tsx","../src/components/label.tsx","../src/generated/label.ts","../src/generated/field.ts","../src/components/footer.tsx","../src/components/container.tsx","../src/generated/container.ts","../src/components/logo.tsx","../src/components/input.tsx","../src/generated/input.ts","../src/components/textarea.tsx","../src/generated/textarea.ts","../src/components/input-group.tsx","../src/generated/input-group.ts","../src/components/item.tsx","../src/components/separator.tsx","../src/generated/separator.ts","../src/generated/item.ts","../src/components/kbd.tsx","../src/generated/kbd.ts","../src/components/pagination.tsx","../src/components/progress.tsx","../src/generated/progress.ts","../src/components/skeleton.tsx","../src/generated/skeleton.ts","../src/components/spinner.tsx","../src/components/status-screen.tsx","../src/components/table.tsx","../src/generated/table.ts","../src/components/accordion.tsx","../src/generated/accordion.ts","../src/components/collapsible.tsx","../src/components/tabs.tsx","../src/generated/tabs.ts","../src/components/toggle.tsx","../src/generated/toggle.ts","../src/components/toggle-group.tsx","../src/components/switch.tsx","../src/components/checkbox.tsx","../src/components/radio-group.tsx","../src/generated/radio-group.ts","../src/components/slider.tsx","../src/generated/slider.ts","../src/components/scroll-area.tsx","../src/generated/scroll-area.ts","../src/components/sidebar.tsx","../src/generated/sidebar.ts","../src/components/carousel.tsx","../src/generated/carousel.ts","../src/components/input-otp.tsx","../src/generated/input-otp.ts","../src/components/tooltip.tsx","../src/generated/tooltip.ts","../src/components/popover.tsx","../src/generated/popover.ts","../src/components/hover-card.tsx","../src/generated/hover-card.ts","../src/components/dropdown-menu.tsx","../src/generated/dropdown-menu.ts","../src/components/context-menu.tsx","../src/generated/context-menu.ts","../src/components/menubar.tsx","../src/generated/menubar.ts","../src/components/navigation-menu.tsx","../src/generated/navigation-menu.ts","../src/components/dialog.tsx","../src/generated/dialog.ts","../src/components/alert-dialog.tsx","../src/generated/alert-dialog.ts","../src/components/sheet.tsx","../src/generated/sheet.ts","../src/components/drawer.tsx","../src/generated/drawer.ts","../src/components/select.tsx","../src/components/command.tsx","../src/generated/command.ts","../src/components/chart.tsx","../src/generated/chart.ts","../src/components/calendar.tsx","../src/generated/calendar.ts","../src/components/sonner.tsx","../src/generated/sonner.ts","../src/components/form.tsx","../src/generated/form.ts","../src/components/resizable.tsx","../src/generated/resizable.ts"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Fuses class fragments into one string with real Tailwind conflict resolution:\n * `clsx` drops falsy fragments and joins the rest, `tailwind-merge` resolves\n * conflicting utilities so the rightmost wins (`cn(\"p-4\", \"p-2\") === \"p-2\"`). A\n * caller's `className` override, passed last, therefore beats the base classes.\n *\n * The Rust mirror is the `cn!` macro in `ev::uikit` (`tailwind_fuse::tw_merge!`).\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/**\n * Minimal `asChild` mechanism — the dep-light replacement for\n * `@radix-ui/react-slot`. Renders by cloning its single child, merging the\n * Slot's own props onto it: `className` is fused with `cn`, event handlers are\n * chained (child's runs first, then ours), and `style` objects are shallow\n * merged. Refs are composed so both the caller's and the child's ref fire.\n *\n * There is no Rust counterpart: Dioxus composition is expressed with `children`\n * directly, so `asChild` is a TS-only ergonomic.\n */\nexport interface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>(function Slot(\n { children, ...slotProps },\n forwardedRef,\n) {\n if (!React.isValidElement(children)) {\n return React.Children.count(children) > 1\n ? React.Children.only(null)\n : null;\n }\n\n const child = children as React.ReactElement<Record<string, unknown>>;\n const childProps = child.props;\n\n const merged: Record<string, unknown> = { ...slotProps, ...childProps };\n\n for (const key of Object.keys(slotProps)) {\n const slotValue = (slotProps as Record<string, unknown>)[key];\n const childValue = childProps[key];\n if (/^on[A-Z]/.test(key) && typeof slotValue === \"function\") {\n merged[key] =\n typeof childValue === \"function\"\n ? (...args: unknown[]) => {\n (childValue as (...a: unknown[]) => void)(...args);\n (slotValue as (...a: unknown[]) => void)(...args);\n }\n : slotValue;\n } else if (key === \"style\") {\n merged[key] = { ...(slotValue as object), ...(childValue as object) };\n } else if (key === \"className\") {\n merged[key] = cn(slotValue as string, childValue as string);\n }\n }\n\n merged[\"ref\"] = composeRefs(forwardedRef, (child as { ref?: React.Ref<unknown> }).ref);\n\n return React.cloneElement(child, merged);\n});\n\nfunction composeRefs<T>(...refs: Array<React.Ref<T> | undefined>): React.RefCallback<T> {\n return (node) => {\n for (const ref of refs) {\n if (typeof ref === \"function\") ref(node);\n else if (ref != null) (ref as React.MutableRefObject<T | null>).current = node;\n }\n };\n}\n","import * as React from \"react\";\n\n/**\n * Controlled/uncontrolled state, the dep-light equivalent of Radix's\n * `useControllableState`. When `value` is provided the component is controlled\n * (the hook returns it and routes writes through `onChange`); otherwise it owns\n * an internal `useState` seeded from `defaultValue`.\n *\n * The Rust mirror is `use_controllable_signal` in `ev::uikit`.\n */\nexport function useControllableState<T>(opts: {\n value?: T | undefined;\n defaultValue: T;\n onChange?: ((value: T) => void) | undefined;\n}): [T, (next: T) => void] {\n const { value, defaultValue, onChange } = opts;\n const isControlled = value !== undefined;\n const [uncontrolled, setUncontrolled] = React.useState<T>(defaultValue);\n\n const current = isControlled ? value : uncontrolled;\n\n const onChangeRef = React.useRef(onChange);\n React.useEffect(() => {\n onChangeRef.current = onChange;\n });\n\n const setValue = React.useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [current, setValue];\n}\n","import * as React from \"react\";\nimport { createPortal } from \"react-dom\";\n\n/**\n * Renders its children into `container` (default `document.body`) via\n * `react-dom`'s `createPortal` — the dep-light stand-in for\n * `@radix-ui/react-portal`. SSR-safe: renders nothing until mounted.\n *\n * Rust has no portal counterpart (see the README \"Limitations\"): `ev::uikit`\n * overlays render inline with fixed positioning instead.\n */\nexport interface PortalProps {\n children: React.ReactNode;\n container?: Element | null;\n}\n\nexport function Portal({ children, container }: PortalProps) {\n // Render the portal synchronously on the client so a consumer's ref (e.g. a\n // floating element measured in `useLayoutEffect`) is attached in the same\n // commit. Overlays only render this when open — i.e. after a client event —\n // so there is no server render to mismatch.\n if (typeof document === \"undefined\") return null;\n const target = container ?? document.body;\n return createPortal(children, target);\n}\n","import * as React from \"react\";\n\n/**\n * Calls `onDismiss` on Escape or on a pointer-down outside the layer — the\n * dep-light core of every overlay's \"click away to close\". Pass refs to any\n * nodes that should NOT count as outside (e.g. the trigger), via `exclude`.\n *\n * Mirrors the dismiss behaviour Rust expresses with a full-screen backdrop.\n */\nexport function useDismissableLayer(opts: {\n enabled: boolean;\n onDismiss: () => void;\n exclude?: Array<React.RefObject<Element | null>>;\n}): React.RefObject<HTMLDivElement | null> {\n const { enabled, onDismiss, exclude } = opts;\n const ref = React.useRef<HTMLDivElement | null>(null);\n const onDismissRef = React.useRef(onDismiss);\n React.useEffect(() => {\n onDismissRef.current = onDismiss;\n });\n\n React.useEffect(() => {\n if (!enabled) return;\n\n function onPointerDown(event: PointerEvent) {\n const target = event.target as Node | null;\n if (ref.current && target && ref.current.contains(target)) return;\n for (const r of exclude ?? []) {\n if (r.current && target && r.current.contains(target)) return;\n }\n onDismissRef.current();\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key === \"Escape\") onDismissRef.current();\n }\n\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown, true);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [enabled, exclude]);\n\n return ref;\n}\n","import * as React from \"react\";\n\nexport type Side = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type Align = \"start\" | \"center\" | \"end\";\n\nexport interface FloatingResult {\n floatingRef: React.RefObject<HTMLElement | null>;\n style: React.CSSProperties;\n side: Side;\n align: Align;\n}\n\n/**\n * Positions a floating element against an anchor with `position: fixed` and\n * `getBoundingClientRect` — the dep-light stand-in for `@radix-ui/react-popper`\n * / floating-ui. Supports a preferred `side`/`align`, an `offset`, and a single\n * collision flip onto the opposite side when the preferred side overflows the\n * viewport. Recomputes on scroll and resize while `open`.\n *\n * Rust's overlays use CSS-only placement (`data-side`) and do not measure; see\n * the README \"Limitations\".\n */\nexport function useFloating(opts: {\n anchorRef: React.RefObject<Element | null>;\n open: boolean;\n side?: Side;\n align?: Align;\n offset?: number;\n}): FloatingResult {\n const { anchorRef, open, side = \"bottom\", align = \"center\", offset = 4 } = opts;\n const floatingRef = React.useRef<HTMLElement | null>(null);\n const [style, setStyle] = React.useState<React.CSSProperties>({\n position: \"fixed\",\n top: 0,\n left: 0,\n });\n const [resolved, setResolved] = React.useState<{ side: Side; align: Align }>({\n side,\n align,\n });\n\n React.useLayoutEffect(() => {\n if (!open) return;\n\n function update() {\n const anchor = anchorRef.current;\n const floating = floatingRef.current;\n if (!anchor || !floating) return;\n\n const a = anchor.getBoundingClientRect();\n const f = floating.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n let placed: Side = side;\n if (side === \"bottom\" && a.bottom + offset + f.height > vh && a.top - offset - f.height > 0)\n placed = \"top\";\n else if (side === \"top\" && a.top - offset - f.height < 0 && a.bottom + offset + f.height < vh)\n placed = \"bottom\";\n else if (side === \"right\" && a.right + offset + f.width > vw && a.left - offset - f.width > 0)\n placed = \"left\";\n else if (side === \"left\" && a.left - offset - f.width < 0 && a.right + offset + f.width < vw)\n placed = \"right\";\n\n let top = 0;\n let left = 0;\n const vertical = placed === \"top\" || placed === \"bottom\";\n\n if (placed === \"bottom\") top = a.bottom + offset;\n else if (placed === \"top\") top = a.top - offset - f.height;\n else if (placed === \"right\") left = a.right + offset;\n else left = a.left - offset - f.width;\n\n if (vertical) {\n if (align === \"start\") left = a.left;\n else if (align === \"end\") left = a.right - f.width;\n else left = a.left + a.width / 2 - f.width / 2;\n } else {\n if (align === \"start\") top = a.top;\n else if (align === \"end\") top = a.bottom - f.height;\n else top = a.top + a.height / 2 - f.height / 2;\n }\n\n left = Math.max(offset, Math.min(left, vw - f.width - offset));\n top = Math.max(offset, Math.min(top, vh - f.height - offset));\n\n setStyle({ position: \"fixed\", top: Math.round(top), left: Math.round(left) });\n setResolved({ side: placed, align });\n }\n\n // Throttle scroll/resize repositioning to one update per frame so the\n // overlay tracks its anchor smoothly instead of thrashing.\n let frame = 0;\n function schedule() {\n if (frame) return;\n frame = requestAnimationFrame(() => {\n frame = 0;\n update();\n });\n }\n\n update();\n window.addEventListener(\"scroll\", schedule, true);\n window.addEventListener(\"resize\", schedule);\n return () => {\n if (frame) cancelAnimationFrame(frame);\n window.removeEventListener(\"scroll\", schedule, true);\n window.removeEventListener(\"resize\", schedule);\n };\n }, [open, side, align, offset, anchorRef]);\n\n return { floatingRef, style, side: resolved.side, align: resolved.align };\n}\n","import * as React from \"react\";\n\nconst FOCUSABLE =\n 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\nfunction focusable(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (el) => el.offsetWidth > 0 || el.offsetHeight > 0 || el === document.activeElement,\n );\n}\n\n/**\n * Traps Tab focus inside the returned ref's subtree and restores focus to the\n * previously-focused element on unmount — the dep-light core of dialogs/menus,\n * replacing `@radix-ui/react-focus-scope`. On mount, focuses the first\n * focusable (or the container itself).\n *\n * Rust dialogs rely on the browser's native focus order within a fixed overlay;\n * see the README \"Limitations\".\n */\nexport function useFocusScope(enabled: boolean): React.RefObject<HTMLDivElement | null> {\n const ref = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (!enabled) return;\n const root = ref.current;\n if (!root) return;\n\n const previouslyFocused = document.activeElement as HTMLElement | null;\n const first = focusable(root)[0];\n (first ?? root).focus();\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Tab\" || !root) return;\n const items = focusable(root);\n if (items.length === 0) {\n event.preventDefault();\n return;\n }\n const firstEl = items[0]!;\n const lastEl = items[items.length - 1]!;\n const active = document.activeElement;\n if (event.shiftKey && active === firstEl) {\n event.preventDefault();\n lastEl.focus();\n } else if (!event.shiftKey && active === lastEl) {\n event.preventDefault();\n firstEl.focus();\n }\n }\n\n root.addEventListener(\"keydown\", onKeyDown);\n return () => {\n root.removeEventListener(\"keydown\", onKeyDown);\n previouslyFocused?.focus?.();\n };\n }, [enabled]);\n\n return ref;\n}\n","import * as React from \"react\";\n\n/**\n * Tracks whether an overlay should be mounted. Mount/unmount steps in lockstep\n * with `present`: enter animations (`data-[state=open]:animate-in`) still play\n * on mount, but the kit intentionally does **not** defer unmount for an exit\n * animation — deferring made portaled overlays flicker on close. Pass `ref`\n * through to the animated node (kept for API stability / future use).\n */\nexport function usePresence(present: boolean): {\n isPresent: boolean;\n ref: React.RefObject<HTMLElement | null>;\n} {\n const ref = React.useRef<HTMLElement | null>(null);\n return { isPresent: present, ref };\n}\n","import * as React from \"react\";\n\n/**\n * Arrow-key roving focus over a set of items — the dep-light core of menus,\n * tabs, radio-groups and toolbars (replacing `@radix-ui/react-roving-focus`).\n * Returns an `onKeyDown` to spread on the container and the active index; items\n * should set `tabIndex={index === activeIndex ? 0 : -1}`.\n *\n * Mirrors the keyboard navigation Rust drives with a focused-index signal.\n */\nexport function useRovingFocus(opts: {\n count: number;\n orientation?: \"horizontal\" | \"vertical\" | \"both\";\n loop?: boolean;\n initial?: number;\n}): {\n activeIndex: number;\n setActiveIndex: (i: number) => void;\n onKeyDown: (event: React.KeyboardEvent) => void;\n} {\n const { count, orientation = \"vertical\", loop = true, initial = 0 } = opts;\n const [activeIndex, setActiveIndex] = React.useState(initial);\n\n const next = (dir: 1 | -1) =>\n setActiveIndex((i) => {\n let n = i + dir;\n if (n < 0) n = loop ? count - 1 : 0;\n else if (n >= count) n = loop ? 0 : count - 1;\n return n;\n });\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n const horiz = orientation === \"horizontal\" || orientation === \"both\";\n const vert = orientation === \"vertical\" || orientation === \"both\";\n if (vert && event.key === \"ArrowDown\") {\n event.preventDefault();\n next(1);\n } else if (vert && event.key === \"ArrowUp\") {\n event.preventDefault();\n next(-1);\n } else if (horiz && event.key === \"ArrowRight\") {\n event.preventDefault();\n next(1);\n } else if (horiz && event.key === \"ArrowLeft\") {\n event.preventDefault();\n next(-1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n setActiveIndex(0);\n } else if (event.key === \"End\") {\n event.preventDefault();\n setActiveIndex(count - 1);\n }\n };\n\n return { activeIndex, setActiveIndex, onKeyDown };\n}\n","import * as React from \"react\";\n\n/**\n * Combines several refs into one callback ref so a node can satisfy multiple\n * consumers at once (e.g. an overlay that is both the floating element and the\n * dismissable layer). Used throughout the overlay components.\n */\nexport function mergeRefs<T>(\n ...refs: Array<React.Ref<T> | undefined>\n): React.RefCallback<T> {\n return (node) => {\n for (const ref of refs) {\n if (typeof ref === \"function\") ref(node);\n else if (ref != null) (ref as React.MutableRefObject<T | null>).current = node;\n }\n };\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n ALERT_BASE,\n ALERT_DESCRIPTION,\n ALERT_TITLE,\n alertVariants,\n type AlertVariant,\n} from \"../generated/alert\";\n\nexport type { AlertVariant };\n\nexport interface AlertProps extends React.ComponentProps<\"div\"> {\n variant?: AlertVariant;\n}\n\nexport function Alert({ className, variant = \"default\", ...props }: AlertProps) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(ALERT_BASE, alertVariants[variant], className)}\n {...props}\n />\n );\n}\n\nexport function AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(ALERT_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(ALERT_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const ALERT_BASE = \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\";\n\nexport const alertVariants = {\n \"default\": \"bg-card text-card-foreground\",\n \"destructive\": \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\",\n} as const;\nexport type AlertVariant = keyof typeof alertVariants;\n\nexport const ALERT_TITLE = \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\";\n\nexport const ALERT_DESCRIPTION = \"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { AVATAR, AVATAR_IMAGE, AVATAR_FALLBACK } from \"../generated/avatar\";\n\nexport function Avatar({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar\"\n className={cn(AVATAR, className)}\n {...props}\n />\n );\n}\n\nexport function AvatarImage({\n className,\n onError,\n ...props\n}: React.ComponentProps<\"img\">) {\n const [errored, setErrored] = React.useState(false);\n if (errored) return null;\n return (\n <img\n data-slot=\"avatar-image\"\n className={cn(AVATAR_IMAGE, className)}\n onError={(e) => {\n onError?.(e);\n setErrored(true);\n }}\n {...props}\n />\n );\n}\n\nexport function AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-fallback\"\n className={cn(AVATAR_FALLBACK, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const AVATAR = \"relative flex size-8 shrink-0 overflow-hidden rounded-full\";\n\nexport const AVATAR_IMAGE = \"aspect-square size-full\";\n\nexport const AVATAR_FALLBACK = \"bg-muted flex size-full items-center justify-center rounded-full\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport { BADGE_BASE, badgeVariants, type BadgeVariant } from \"../generated/badge\";\n\nexport type { BadgeVariant };\n\nexport interface BadgeProps extends React.ComponentProps<\"span\"> {\n variant?: BadgeVariant;\n asChild?: boolean;\n}\n\nexport function Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: BadgeProps) {\n const Comp = asChild ? Slot : \"span\";\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(BADGE_BASE, badgeVariants[variant], className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const BADGE_BASE = \"inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 gap-1 overflow-hidden [&>svg]:size-3 [&>svg]:pointer-events-none transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:border-destructive\";\n\nexport const badgeVariants = {\n \"default\": \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n \"secondary\": \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n \"destructive\": \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20\",\n \"outline\": \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n \"success\": \"border-transparent bg-main-accent-t2/20 text-main-accent-t2\",\n} as const;\nexport type BadgeVariant = keyof typeof badgeVariants;\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n BREADCRUMB_ELLIPSIS,\n BREADCRUMB_ITEM,\n BREADCRUMB_LINK,\n BREADCRUMB_LIST,\n BREADCRUMB_PAGE,\n BREADCRUMB_SEPARATOR,\n} from \"../generated/breadcrumb\";\n\nexport function Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />;\n}\n\nexport function BreadcrumbList({\n className,\n ...props\n}: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(BREADCRUMB_LIST, className)}\n {...props}\n />\n );\n}\n\nexport function BreadcrumbItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn(BREADCRUMB_ITEM, className)}\n {...props}\n />\n );\n}\n\nexport interface BreadcrumbLinkProps extends React.ComponentProps<\"a\"> {\n asChild?: boolean;\n}\n\nexport function BreadcrumbLink({\n asChild,\n className,\n ...props\n}: BreadcrumbLinkProps) {\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn(BREADCRUMB_LINK, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function BreadcrumbPage({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(BREADCRUMB_PAGE, className)}\n {...props}\n />\n );\n}\n\nexport function BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(BREADCRUMB_SEPARATOR, className)}\n {...props}\n >\n {children ?? (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n )}\n </li>\n );\n}\n\nexport function BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(BREADCRUMB_ELLIPSIS, className)}\n {...props}\n >\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </svg>\n <span className=\"sr-only\">More</span>\n </span>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const BREADCRUMB_LIST = \"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5\";\n\nexport const BREADCRUMB_ITEM = \"inline-flex items-center gap-1.5\";\n\nexport const BREADCRUMB_LINK = \"hover:text-foreground transition-colors\";\n\nexport const BREADCRUMB_PAGE = \"text-foreground font-normal\";\n\nexport const BREADCRUMB_SEPARATOR = \"[&>svg]:size-3.5\";\n\nexport const BREADCRUMB_ELLIPSIS = \"flex size-9 items-center justify-center\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n BUTTON_BASE,\n buttonSizeClasses,\n buttonVariantClasses,\n type ButtonSize,\n type ButtonVariant,\n} from \"../generated/button\";\n\nexport type { ButtonSize, ButtonVariant };\n\nexport interface ButtonVariantsOptions {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n}\n\n/**\n * Returns the fused canonical button class string. Reused by `pagination` so a\n * non-`Button` element can adopt the same styling, mirroring Rust's\n * `button_classes`.\n */\nexport function buttonVariants({\n variant = \"default\",\n size = \"default\",\n className,\n}: ButtonVariantsOptions = {}): string {\n return cn(BUTTON_BASE, buttonVariantClasses[variant], buttonSizeClasses[size], className);\n}\n\nexport interface ButtonProps extends React.ComponentProps<\"button\"> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n asChild?: boolean;\n}\n\nexport function Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: ButtonProps) {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size }), className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const BUTTON_BASE = \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all cursor-pointer disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:border-destructive\";\n\nexport const buttonVariantClasses = {\n \"default\": \"bg-primary text-primary-foreground hover:bg-primary/90\",\n \"secondary\": \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n \"outline\": \"border bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n \"ghost\": \"hover:bg-accent hover:text-accent-foreground\",\n \"destructive\": \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20\",\n \"link\": \"text-primary underline-offset-4 hover:underline\",\n} as const;\nexport type ButtonVariant = keyof typeof buttonVariantClasses;\n\nexport const buttonSizeClasses = {\n \"default\": \"h-9 px-4 py-2 has-[>svg]:px-3\",\n \"sm\": \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n \"lg\": \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n \"icon\": \"h-9 aspect-square px-0\",\n \"icon-sm\": \"h-8 aspect-square px-0\",\n \"icon-lg\": \"h-10 aspect-square px-0\",\n} as const;\nexport type ButtonSize = keyof typeof buttonSizeClasses;\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n BUTTON_GROUP_BASE,\n BUTTON_GROUP_SEPARATOR_BASE,\n BUTTON_GROUP_TEXT_BASE,\n buttonGroupOrientationClasses,\n type ButtonGroupOrientation,\n} from \"../generated/button-group\";\n\nexport type { ButtonGroupOrientation };\n\nexport interface ButtonGroupProps extends React.ComponentProps<\"div\"> {\n orientation?: ButtonGroupOrientation;\n}\n\nexport function ButtonGroup({\n className,\n orientation = \"horizontal\",\n ...props\n}: ButtonGroupProps) {\n return (\n <div\n role=\"group\"\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(BUTTON_GROUP_BASE, buttonGroupOrientationClasses[orientation], className)}\n {...props}\n />\n );\n}\n\nexport interface ButtonGroupTextProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nexport function ButtonGroupText({\n className,\n asChild = false,\n ...props\n}: ButtonGroupTextProps) {\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp\n className={cn(BUTTON_GROUP_TEXT_BASE, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function ButtonGroupSeparator({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"separator\"\n data-slot=\"button-group-separator\"\n data-orientation=\"vertical\"\n className={cn(BUTTON_GROUP_SEPARATOR_BASE, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const BUTTON_GROUP_BASE = \"flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md has-[>[data-slot=button-group]]:gap-2\";\n\nexport const buttonGroupOrientationClasses = {\n \"horizontal\": \"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\",\n \"vertical\": \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none\",\n} as const;\nexport type ButtonGroupOrientation = keyof typeof buttonGroupOrientationClasses;\n\nexport const BUTTON_GROUP_TEXT_BASE = \"bg-muted flex items-center gap-2 rounded-md border px-4 text-sm font-medium shadow-xs [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\";\n\nexport const BUTTON_GROUP_SEPARATOR_BASE = \"bg-input relative !m-0 self-stretch shrink-0 data-[orientation=vertical]:h-auto\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n CARD,\n CARD_ACTION,\n CARD_CONTENT,\n CARD_DESCRIPTION,\n CARD_FOOTER,\n CARD_HEADER,\n CARD_TITLE,\n} from \"../generated/card\";\n\nexport function Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(CARD, className)}\n {...props}\n />\n );\n}\n\nexport function CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(CARD_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(CARD_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function CardDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(CARD_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport function CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(CARD_ACTION, className)}\n {...props}\n />\n );\n}\n\nexport function CardContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(CARD_CONTENT, className)}\n {...props}\n />\n );\n}\n\nexport function CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(CARD_FOOTER, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CARD = \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\";\n\nexport const CARD_HEADER = \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\";\n\nexport const CARD_TITLE = \"leading-none font-semibold\";\n\nexport const CARD_DESCRIPTION = \"text-muted-foreground text-sm\";\n\nexport const CARD_ACTION = \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\";\n\nexport const CARD_CONTENT = \"px-6\";\n\nexport const CARD_FOOTER = \"flex items-center px-6 [.border-t]:pt-6\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n EMPTY,\n EMPTY_CONTENT,\n EMPTY_DESCRIPTION,\n EMPTY_HEADER,\n EMPTY_MEDIA_BASE,\n EMPTY_TITLE,\n emptyMediaVariants,\n type EmptyMediaVariant,\n} from \"../generated/empty\";\n\nexport type { EmptyMediaVariant };\n\nexport function Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"empty\" className={cn(EMPTY, className)} {...props} />\n );\n}\n\nexport function EmptyHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn(EMPTY_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport interface EmptyMediaProps extends React.ComponentProps<\"div\"> {\n variant?: EmptyMediaVariant;\n}\n\nexport function EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: EmptyMediaProps) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(EMPTY_MEDIA_BASE, emptyMediaVariants[variant], className)}\n {...props}\n />\n );\n}\n\nexport function EmptyTitle({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn(EMPTY_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function EmptyDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(EMPTY_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport function EmptyContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(EMPTY_CONTENT, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const EMPTY = \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12\";\n\nexport const EMPTY_HEADER = \"flex max-w-sm flex-col items-center gap-2 text-center\";\n\nexport const EMPTY_MEDIA_BASE = \"flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0\";\n\nexport const emptyMediaVariants = {\n \"default\": \"bg-transparent\",\n \"icon\": \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\n} as const;\nexport type EmptyMediaVariant = keyof typeof emptyMediaVariants;\n\nexport const EMPTY_TITLE = \"text-lg font-medium tracking-tight\";\n\nexport const EMPTY_DESCRIPTION = \"text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4\";\n\nexport const EMPTY_CONTENT = \"flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Label } from \"./label\";\nimport {\n FIELD_BASE,\n FIELD_SET,\n FIELD_LEGEND,\n FIELD_GROUP,\n FIELD_CONTENT,\n FIELD_LABEL,\n FIELD_TITLE,\n FIELD_DESCRIPTION,\n FIELD_SEPARATOR,\n FIELD_SEPARATOR_LINE,\n FIELD_SEPARATOR_CONTENT,\n FIELD_ERROR,\n fieldOrientation,\n type FieldOrientation,\n} from \"../generated/field\";\n\nexport type { FieldOrientation };\n\nexport function FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(FIELD_SET, className)}\n {...props}\n />\n );\n}\n\nexport function FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(FIELD_LEGEND, className)}\n {...props}\n />\n );\n}\n\nexport function FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(FIELD_GROUP, className)}\n {...props}\n />\n );\n}\n\nexport function Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & { orientation?: FieldOrientation }) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(FIELD_BASE, fieldOrientation[orientation], className)}\n {...props}\n />\n );\n}\n\nexport function FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(FIELD_CONTENT, className)}\n {...props}\n />\n );\n}\n\nexport function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(FIELD_LABEL, className)}\n {...props}\n />\n );\n}\n\nexport function FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(FIELD_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(FIELD_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport function FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & { children?: React.ReactNode }) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(FIELD_SEPARATOR, className)}\n {...props}\n >\n <div role=\"separator\" className={FIELD_SEPARATOR_LINE} />\n {children && (\n <span\n className={FIELD_SEPARATOR_CONTENT}\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n );\n}\n\nexport function FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>;\n}) {\n const content = React.useMemo(() => {\n if (children) {\n return children;\n }\n\n if (!errors) {\n return null;\n }\n\n if (errors?.length === 1 && errors[0]?.message) {\n return errors[0].message;\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {errors.map(\n (error, index) => error?.message && <li key={index}>{error.message}</li>,\n )}\n </ul>\n );\n }, [children, errors]);\n\n if (!content) {\n return null;\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(FIELD_ERROR, className)}\n {...props}\n >\n {content}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { LABEL_BASE } from \"../generated/label\";\n\nexport function Label({ className, ...props }: React.ComponentProps<\"label\">) {\n return <label data-slot=\"label\" className={cn(LABEL_BASE, className)} {...props} />;\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const LABEL_BASE = \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\";\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const FIELD_BASE = \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\";\n\nexport const fieldOrientation = {\n \"vertical\": \"flex-col [&>*]:w-full [&>.sr-only]:w-auto\",\n \"horizontal\": \"flex-row items-center [&>[data-slot=field-label]]:flex-auto has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n \"responsive\": \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto @md/field-group:[&>[data-slot=field-label]]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n} as const;\nexport type FieldOrientation = keyof typeof fieldOrientation;\n\nexport const FIELD_SET = \"flex flex-col gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\";\n\nexport const FIELD_LEGEND = \"mb-3 font-medium data-[variant=legend]:text-base data-[variant=label]:text-sm\";\n\nexport const FIELD_GROUP = \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\";\n\nexport const FIELD_CONTENT = \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\";\n\nexport const FIELD_LABEL = \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4 has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary\";\n\nexport const FIELD_TITLE = \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\";\n\nexport const FIELD_DESCRIPTION = \"text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5 [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\";\n\nexport const FIELD_SEPARATOR = \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\";\n\nexport const FIELD_SEPARATOR_LINE = \"absolute inset-0 top-1/2 shrink-0 bg-border h-px w-full\";\n\nexport const FIELD_SEPARATOR_CONTENT = \"bg-background text-muted-foreground relative mx-auto block w-fit px-2\";\n\nexport const FIELD_ERROR = \"text-destructive text-sm font-normal\";\n","import * as React from \"react\";\nimport { Container } from \"./container\";\nimport { Logo } from \"./logo\";\n\n/**\n * The EV brand chrome footer, ported from site_conductor: a 12-col grid —\n * brand 3 | sitemap groups 2 each | Offices 3 | Newsletter 2 — over the dark\n * field, with the legal links and copyright line. On mobile the sitemap\n * columns sit side by side. All copy is parameterized with the EV defaults so\n * a bare `<Footer nav={…} />` matches the site; only the sitemap groups (and\n * the newsletter form, when wanted) come from the app. `children` render right\n * after the `<footer>` tag — the slot for app-side extras like the\n * build-version easter egg.\n *\n * `linkComponent` lets Next hosts pass `next/link`; everyone else gets `<a>`.\n */\nexport interface FooterLink {\n label: string;\n href: string;\n}\n\nexport interface FooterLinkGroup {\n heading: string;\n links: readonly FooterLink[];\n}\n\nexport interface FooterOffice {\n name: string;\n address: string;\n}\n\nexport interface FooterProps {\n nav: readonly FooterLinkGroup[];\n description?: string;\n offices?: readonly FooterOffice[];\n legalLinks?: readonly FooterLink[];\n /** The newsletter form; the Newsletter column renders only when present. */\n newsletter?: React.ReactNode;\n newsletterBlurb?: string;\n version?: string;\n commitHref?: string;\n tagline?: string;\n linkComponent?: React.ElementType;\n children?: React.ReactNode;\n}\n\nconst DEFAULT_DESCRIPTION =\n \"EV Investment is a registered real estate advisory and investment management fund specializing in premium coastal developments in Quy Nhon, Binh Dinh province, Vietnam.\";\n\nconst DEFAULT_OFFICES: readonly FooterOffice[] = [\n {\n name: \"Quy Nhon Head Office\",\n address: \"102 An Duong Vuong St, Nguyen Van Cu Ward, Quy Nhon City, Vietnam\",\n },\n {\n name: \"Ho Chi Minh Representative\",\n address: \"Deutsches Haus, 33 Le Duan Blvd, District 1, Ho Chi Minh City, Vietnam\",\n },\n];\n\nconst DEFAULT_LEGAL_LINKS: readonly FooterLink[] = [\n { label: \"Privacy Policy\", href: \"#hero\" },\n { label: \"Terms of Service\", href: \"#hero\" },\n];\n\nexport function Footer({\n nav,\n description = DEFAULT_DESCRIPTION,\n offices = DEFAULT_OFFICES,\n legalLinks = DEFAULT_LEGAL_LINKS,\n newsletter,\n newsletterBlurb = \"Subscribe, to receive our macro reports\",\n version,\n commitHref,\n tagline = \"Quy Nhon Fund\",\n linkComponent,\n children,\n}: FooterProps) {\n const L = linkComponent ?? \"a\";\n\n return (\n <footer\n data-slot=\"footer\"\n className=\"bg-main-black border-t border-main-mist/10 py-16\"\n >\n {children}\n <Container>\n <div className=\"grid grid-cols-2 gap-x-8 gap-y-8 lg:grid-cols-12 mb-12\">\n <div className=\"col-span-2 lg:col-span-3\">\n <div className=\"flex items-center gap-3 mb-6\">\n <Logo className=\"w-8 h-8 text-white\" />\n <div className=\"flex flex-col\">\n <span className=\"font-serif-display font-bold text-base tracking-wider text-white\">\n EV INVESTMENT\n </span>\n <span className=\"text-[8px] font-mono-tech tracking-[0.3em] text-main-accent-t1 uppercase\">\n {tagline}\n </span>\n </div>\n </div>\n <p className=\"text-main-mist/40 text-xs font-light max-w-sm leading-relaxed mb-6\">\n {description}\n </p>\n <div className=\"flex gap-4 text-xs font-mono-tech text-main-accent-t1\">\n {legalLinks.map((link, i) => (\n <React.Fragment key={link.label}>\n {i > 0 && <span className=\"text-main-mist/20\">|</span>}\n <L href={link.href} className=\"hover:underline\">\n {link.label}\n </L>\n </React.Fragment>\n ))}\n </div>\n </div>\n\n {nav.map((group) => (\n <nav\n key={group.heading}\n aria-label={`Footer ${group.heading} links`}\n className=\"lg:col-span-2\"\n >\n <h4 className=\"font-mono-tech text-xs text-white uppercase tracking-widest mb-6\">\n {group.heading}\n </h4>\n <ul className=\"space-y-3\">\n {group.links.map((link) => (\n <li key={link.href}>\n <L\n href={link.href}\n className=\"text-xs font-light text-main-mist/70 hover:text-main-accent-t1 transition-colors\"\n >\n {link.label}\n </L>\n </li>\n ))}\n </ul>\n </nav>\n ))}\n\n <div className=\"col-span-2 lg:col-span-3\">\n <h4 className=\"font-mono-tech text-xs text-white uppercase tracking-widest mb-6\">\n Offices\n </h4>\n <ul className=\"space-y-4 text-xs text-main-mist/70 font-light leading-relaxed\">\n {offices.map((office) => (\n <li key={office.name}>\n <strong className=\"text-white block font-mono-tech text-[10px] uppercase tracking-wider mb-1\">\n {office.name}\n </strong>\n {office.address}\n </li>\n ))}\n </ul>\n </div>\n\n {newsletter && (\n <div className=\"col-span-2 lg:col-span-2\">\n <h4 className=\"font-mono-tech text-xs text-white uppercase tracking-widest mb-6\">\n Newsletter\n </h4>\n {/* What the source's <Tier tier=\"alt\"><Text> emits: alt body size\n + the info variant, then the mb-4 the caller adds. */}\n <p className=\"text-sm sm:text-xs font-light leading-relaxed text-main-mist/70 mb-4\">\n {newsletterBlurb}\n </p>\n {newsletter}\n </div>\n )}\n </div>\n\n <div className=\"border-t border-main-mist/10 pt-8 text-[10px] font-mono-tech text-main-mist/40\">\n <p>\n © 2026 EV Investment. All rights reserved.\n {version && (\n <>\n {\" \"}\n <a href={commitHref} className=\"text-main-mist/30\">\n {version}\n </a>\n </>\n )}\n </p>\n </div>\n </Container>\n </footer>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { CONTAINER_BASE } from \"../generated/container\";\n\nexport type ContainerProps = React.ComponentProps<\"div\">;\n\n/**\n * Page-width wrapper: centres content, caps it at `--page-max` and applies the\n * responsive `--page-px` gutter (tighter on mobile, roomier ≥ sm). Standardises\n * the `<div className=\"container\">` consumers were repeating, so the page gutter\n * and max width live in one token-driven place.\n */\nexport function Container({ className, ...props }: ContainerProps) {\n return (\n <div\n data-slot=\"container\"\n className={cn(CONTAINER_BASE, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CONTAINER_BASE = \"mx-auto w-full max-w-[var(--page-max,90rem)] px-[var(--page-px,1rem)]\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/**\n * The EV Investment mark, rendered as a CSS mask (`backgroundColor:\n * currentColor` + `maskImage`) so the monochrome lockup follows the\n * surrounding text color instead of the SVG's baked-in black. The SVG is\n * inlined as a URL-encoded `data:` URI so consumers need no asset pipeline;\n * `src` swaps in an externally hosted mark when one is preferred.\n *\n * `withBackground` paints the clean brand field generated from\n * OKLCH(0.256, 0.1, 260) behind the mark, keeping the chip consistent with\n * the favicon.\n */\nexport interface LogoProps {\n className?: string;\n withBackground?: boolean;\n /** Overrides the inlined data-URI mark with an external SVG URL. */\n src?: string;\n}\n\nconst LOGO_DATA_URI =\n \"data:image/svg+xml,%3Csvg width=%22387%22 height=%22335%22 viewBox=%220 0 387 335%22 fill=%22none%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cpath d=%22M0.120605 130.841L140.84 112.176V61.7481L156.149 65.3501V104.786L163.641 103.662V66.6599L178.625 69.607V102.353L185.791 101.043V61.0932L156.475 48.3224L119.992 60.4383V101.043L0.120605 130.841Z%22 fill=%22black%22/%3E%3Cpath d=%22M213.479 112.176L237.584 114.469L237.258 0.841309L202.078 19.8338V72.8816L213.479 78.1209V112.176Z%22 fill=%22black%22/%3E%3Cpath d=%22M240.841 0.841309L276.347 20.1612V117.743L260.711 115.778V26.3829L240.841 15.9043V0.841309Z%22 fill=%22black%22/%3E%3Cpath d=%22M284.816 118.725L386.121 127.239L304.36 109.884V74.1914L284.816 63.7128V118.725Z%22 fill=%22black%22/%3E%3Cpath d=%22M0.120605 130.841L140.84 112.176V61.7481L156.149 65.3501V104.786L163.641 103.662V66.6599L178.625 69.607V102.353L185.791 101.043V61.0932L156.475 48.3224L119.992 60.4383V101.043L0.120605 130.841Z%22 stroke=%22black%22/%3E%3Cpath d=%22M213.479 112.176L237.584 114.469L237.258 0.841309L202.078 19.8338V72.8816L213.479 78.1209V112.176Z%22 stroke=%22black%22/%3E%3Cpath d=%22M240.841 0.841309L276.347 20.1612V117.743L260.711 115.778V26.3829L240.841 15.9043V0.841309Z%22 stroke=%22black%22/%3E%3Cpath d=%22M284.816 118.725L386.121 127.239L304.36 109.884V74.1914L284.816 63.7128V118.725Z%22 stroke=%22black%22/%3E%3Cpath d=%22M25.1206 333.987H31.6206V306.987H25.1206V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M92.6206 333.987H100.121L110.621 307.487H104.621L96.6206 325.987L88.6206 307.487H81.6206L92.6206 333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M44.6206 333.987H51.6206V318.987L65.1206 333.987H71.6206V307.487H65.1206V322.987L50.6206 307.487H44.6206V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M120.621 333.987H142.121V329.487H127.621V322.987H140.121V318.487H127.621V312.487H142.121V307.487H120.621V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M152.121 331.987L153.621 327.987C165.659 329.418 167.304 330.676 168.121 326.487C168.937 322.297 152.785 322.989 152.621 313.987C152.456 304.984 165.853 306.198 174.121 308.487L173.121 312.487C162.364 310.724 159.121 310.487 159.121 313.987C159.121 317.487 175.621 318.748 175.621 326.487C175.621 334.225 167.278 335.691 152.121 331.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M192.621 333.987H199.621V312.487H208.621V307.487H183.621V312.487H192.621V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M219.121 333.987H225.121V318.987L233.621 329.987H237.621L245.121 318.987V333.987L252.121 333.987V307.487H245.121L235.621 322.487L225.121 307.487H219.121V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M265.121 333.987H286.621V329.487H272.121V322.987H284.621V318.487H272.121V312.487H286.621V307.487H265.121V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M298.621 333.987H305.621V318.987L319.121 333.987H325.621V307.487H319.121V322.987L304.621 307.487H298.621V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M345.121 333.987H352.121V312.487H361.121V307.487H336.121V312.487H345.121V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M25.1206 333.987H31.6206V306.987H25.1206V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M92.6206 333.987H100.121L110.621 307.487H104.621L96.6206 325.987L88.6206 307.487H81.6206L92.6206 333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M44.6206 333.987H51.6206V318.987L65.1206 333.987H71.6206V307.487H65.1206V322.987L50.6206 307.487H44.6206V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M120.621 333.987H142.121V329.487H127.621V322.987H140.121V318.487H127.621V312.487H142.121V307.487H120.621V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M152.121 331.987L153.621 327.987C165.659 329.418 167.304 330.676 168.121 326.487C168.937 322.297 152.785 322.989 152.621 313.987C152.456 304.984 165.853 306.198 174.121 308.487L173.121 312.487C162.364 310.724 159.121 310.487 159.121 313.987C159.121 317.487 175.621 318.748 175.621 326.487C175.621 334.225 167.278 335.691 152.121 331.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M192.621 333.987H199.621V312.487H208.621V307.487H183.621V312.487H192.621V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M219.121 333.987H225.121V318.987L233.621 329.987H237.621L245.121 318.987V333.987L252.121 333.987V307.487H245.121L235.621 322.487L225.121 307.487H219.121V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M265.121 333.987H286.621V329.487H272.121V322.987H284.621V318.487H272.121V312.487H286.621V307.487H265.121V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M298.621 333.987H305.621V318.987L319.121 333.987H325.621V307.487H319.121V322.987L304.621 307.487H298.621V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M345.121 333.987H352.121V312.487H361.121V307.487H336.121V312.487H345.121V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M232.621 276.02L166.121 145.841H204.905L255.905 246.341L306.905 145.841H345.905L279.405 276.02H232.621Z%22 fill=%22black%22 stroke=%22black%22/%3E%3Cpath d=%22M41.1206 276.02H208.336L195.73 251.341H74.8362V220.341H179.894L168.144 197.341H74.8362V170.841L154.352 170.341L141.836 145.841H41.1206V276.02Z%22 fill=%22black%22 stroke=%22black%22/%3E%3C/svg%3E\";\n\nconst LOGO_BG = \"oklch(0.256 0.1 260)\";\n\nexport function Logo({ className, withBackground = false, src }: LogoProps) {\n const maskUrl = `url(\"${src ?? LOGO_DATA_URI}\")`;\n const maskStyle: React.CSSProperties = {\n backgroundColor: \"currentColor\",\n maskImage: maskUrl,\n WebkitMaskImage: maskUrl,\n maskRepeat: \"no-repeat\",\n WebkitMaskRepeat: \"no-repeat\",\n maskPosition: \"center\",\n WebkitMaskPosition: \"center\",\n maskSize: \"contain\",\n WebkitMaskSize: \"contain\",\n };\n\n const mark = (\n <span\n data-slot=\"logo\"\n role=\"img\"\n aria-label=\"EV Investment\"\n style={maskStyle}\n className={cn(\"inline-block\", withBackground ? \"w-3/5 h-3/5\" : className)}\n />\n );\n\n if (!withBackground) return mark;\n\n return (\n <span\n data-slot=\"logo-background\"\n className={cn(\"inline-flex items-center justify-center\", className)}\n style={{ backgroundColor: LOGO_BG }}\n >\n {mark}\n </span>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { INPUT_BASE } from \"../generated/input\";\n\nexport function Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(INPUT_BASE, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const INPUT_BASE = \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:border-destructive\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { TEXTAREA_BASE } from \"../generated/textarea\";\n\nexport function Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea data-slot=\"textarea\" className={cn(TEXTAREA_BASE, className)} {...props} />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TEXTAREA_BASE = \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Button, type ButtonProps } from \"./button\";\nimport { Input } from \"./input\";\nimport { Textarea } from \"./textarea\";\nimport {\n INPUT_GROUP_ADDON_BASE,\n INPUT_GROUP_BASE,\n INPUT_GROUP_BUTTON_BASE,\n INPUT_GROUP_INPUT_CONTROL,\n INPUT_GROUP_TEXT,\n INPUT_GROUP_TEXTAREA_CONTROL,\n inputGroupAddonAligns,\n inputGroupButtonSizes,\n type InputGroupAddonAlign,\n type InputGroupButtonSize,\n} from \"../generated/input-group\";\n\nexport type { InputGroupAddonAlign, InputGroupButtonSize };\n\nexport function InputGroup({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(INPUT_GROUP_BASE, className)}\n {...props}\n />\n );\n}\n\nexport interface InputGroupAddonProps extends React.ComponentProps<\"div\"> {\n align?: InputGroupAddonAlign;\n}\n\nexport function InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: InputGroupAddonProps) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(\n INPUT_GROUP_ADDON_BASE,\n inputGroupAddonAligns[align],\n className,\n )}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) return;\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n }}\n {...props}\n />\n );\n}\n\nexport interface InputGroupButtonProps\n extends Omit<ButtonProps, \"size\"> {\n size?: InputGroupButtonSize;\n}\n\nexport function InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: InputGroupButtonProps) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(\n INPUT_GROUP_BUTTON_BASE,\n inputGroupButtonSizes[size],\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function InputGroupText({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(INPUT_GROUP_TEXT, className)}\n {...props}\n />\n );\n}\n\nexport function InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(INPUT_GROUP_INPUT_CONTROL, className)}\n {...props}\n />\n );\n}\n\nexport function InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(INPUT_GROUP_TEXTAREA_CONTROL, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const INPUT_GROUP_BASE = \"group/input-group border-input relative flex w-full items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none h-9 min-w-0 has-[>textarea]:h-auto has-[>[data-align=inline-start]]:[&>input]:pl-2 has-[>[data-align=inline-end]]:[&>input]:pr-2 has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive\";\n\nexport const INPUT_GROUP_ADDON_BASE = \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50\";\n\nexport const inputGroupAddonAligns = {\n \"inline-start\": \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\": \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\": \"order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\": \"order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5\",\n} as const;\nexport type InputGroupAddonAlign = keyof typeof inputGroupAddonAligns;\n\nexport const INPUT_GROUP_BUTTON_BASE = \"text-sm shadow-none flex gap-2 items-center\";\n\nexport const inputGroupButtonSizes = {\n \"xs\": \"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2\",\n \"sm\": \"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5\",\n \"icon-xs\": \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n} as const;\nexport type InputGroupButtonSize = keyof typeof inputGroupButtonSizes;\n\nexport const INPUT_GROUP_TEXT = \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\";\n\nexport const INPUT_GROUP_INPUT_CONTROL = \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0\";\n\nexport const INPUT_GROUP_TEXTAREA_CONTROL = \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport { Separator } from \"./separator\";\nimport {\n ITEM_ACTIONS,\n ITEM_BASE,\n ITEM_CONTENT,\n ITEM_DESCRIPTION,\n ITEM_FOOTER,\n ITEM_GROUP,\n ITEM_HEADER,\n ITEM_MEDIA_BASE,\n ITEM_SEPARATOR,\n ITEM_TITLE,\n itemMediaVariants,\n itemSizes,\n itemVariants,\n type ItemMediaVariant,\n type ItemSize,\n type ItemVariant,\n} from \"../generated/item\";\n\nexport type { ItemMediaVariant, ItemSize, ItemVariant };\n\nexport function ItemGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"list\"\n data-slot=\"item-group\"\n className={cn(ITEM_GROUP, className)}\n {...props}\n />\n );\n}\n\nexport function ItemSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"item-separator\"\n orientation=\"horizontal\"\n className={cn(ITEM_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport interface ItemProps extends React.ComponentProps<\"div\"> {\n variant?: ItemVariant;\n size?: ItemSize;\n asChild?: boolean;\n}\n\nexport function Item({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: ItemProps) {\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp\n data-slot=\"item\"\n data-variant={variant}\n data-size={size}\n className={cn(ITEM_BASE, itemVariants[variant], itemSizes[size], className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface ItemMediaProps extends React.ComponentProps<\"div\"> {\n variant?: ItemMediaVariant;\n}\n\nexport function ItemMedia({\n className,\n variant = \"default\",\n ...props\n}: ItemMediaProps) {\n return (\n <div\n data-slot=\"item-media\"\n data-variant={variant}\n className={cn(ITEM_MEDIA_BASE, itemMediaVariants[variant], className)}\n {...props}\n />\n );\n}\n\nexport function ItemContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-content\"\n className={cn(ITEM_CONTENT, className)}\n {...props}\n />\n );\n}\n\nexport function ItemTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-title\"\n className={cn(ITEM_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function ItemDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"item-description\"\n className={cn(ITEM_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport function ItemActions({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-actions\"\n className={cn(ITEM_ACTIONS, className)}\n {...props}\n />\n );\n}\n\nexport function ItemHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-header\"\n className={cn(ITEM_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function ItemFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-footer\"\n className={cn(ITEM_FOOTER, className)}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n SEPARATOR_BASE,\n separatorOrientations,\n type SeparatorOrientation,\n} from \"../generated/separator\";\n\nexport type { SeparatorOrientation };\n\nexport interface SeparatorProps extends React.ComponentProps<\"div\"> {\n orientation?: SeparatorOrientation;\n}\n\nexport function Separator({\n className,\n orientation = \"horizontal\",\n ...props\n}: SeparatorProps) {\n return (\n <div\n role=\"separator\"\n data-slot=\"separator\"\n data-orientation={orientation}\n className={cn(\n SEPARATOR_BASE,\n separatorOrientations[orientation],\n className,\n )}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SEPARATOR_BASE = \"bg-border shrink-0\";\n\nexport const separatorOrientations = {\n \"horizontal\": \"data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full\",\n \"vertical\": \"data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n} as const;\nexport type SeparatorOrientation = keyof typeof separatorOrientations;\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const ITEM_GROUP = \"group/item-group flex flex-col\";\n\nexport const ITEM_SEPARATOR = \"my-0\";\n\nexport const ITEM_BASE = \"group/item flex items-center border border-transparent text-sm rounded-md transition-colors [a]:hover:bg-accent/50 [a]:transition-colors duration-100 flex-wrap outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\";\n\nexport const itemVariants = {\n \"default\": \"bg-transparent\",\n \"outline\": \"border-border\",\n \"muted\": \"bg-muted/50\",\n} as const;\nexport type ItemVariant = keyof typeof itemVariants;\n\nexport const itemSizes = {\n \"default\": \"p-4 gap-4\",\n \"sm\": \"py-3 px-4 gap-2.5\",\n} as const;\nexport type ItemSize = keyof typeof itemSizes;\n\nexport const ITEM_MEDIA_BASE = \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none group-has-[[data-slot=item-description]]/item:translate-y-0.5\";\n\nexport const itemMediaVariants = {\n \"default\": \"bg-transparent\",\n \"icon\": \"size-8 border rounded-sm bg-muted [&_svg:not([class*='size-'])]:size-4\",\n \"image\": \"size-10 rounded-sm overflow-hidden [&_img]:size-full [&_img]:object-cover\",\n} as const;\nexport type ItemMediaVariant = keyof typeof itemMediaVariants;\n\nexport const ITEM_CONTENT = \"flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none\";\n\nexport const ITEM_TITLE = \"flex w-fit items-center gap-2 text-sm leading-snug font-medium\";\n\nexport const ITEM_DESCRIPTION = \"text-muted-foreground line-clamp-2 text-sm leading-normal font-normal text-balance [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\";\n\nexport const ITEM_ACTIONS = \"flex items-center gap-2\";\n\nexport const ITEM_HEADER = \"flex basis-full items-center justify-between gap-2\";\n\nexport const ITEM_FOOTER = \"flex basis-full items-center justify-between gap-2\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { KBD_BASE, KBD_GROUP_BASE } from \"../generated/kbd\";\n\nexport function Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\n return (\n <kbd\n data-slot=\"kbd\"\n className={cn(KBD_BASE, className)}\n {...props}\n />\n );\n}\n\nexport function KbdGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <kbd\n data-slot=\"kbd-group\"\n className={cn(KBD_GROUP_BASE, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const KBD_BASE = \"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none [&_svg:not([class*='size-'])]:size-3 [[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background\";\n\nexport const KBD_GROUP_BASE = \"inline-flex items-center gap-1\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { buttonVariants, type ButtonSize } from \"./button\";\n\nexport function Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n );\n}\n\nexport function PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n );\n}\n\nexport function PaginationItem(props: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />;\n}\n\nexport type PaginationLinkProps = {\n isActive?: boolean;\n size?: ButtonSize;\n} & React.ComponentProps<\"a\">;\n\nexport function PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className,\n )}\n {...props}\n />\n );\n}\n\nconst ChevronLeft = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n);\n\nconst ChevronRight = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n);\n\nconst MoreHorizontal = () => (\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </svg>\n);\n\nexport function PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pl-2.5\", className)}\n {...props}\n >\n <ChevronLeft />\n <span className=\"hidden sm:block\">Previous</span>\n </PaginationLink>\n );\n}\n\nexport function PaginationNext({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pr-2.5\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">Next</span>\n <ChevronRight />\n </PaginationLink>\n );\n}\n\nexport function PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal />\n <span className=\"sr-only\">More pages</span>\n </span>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { PROGRESS_TRACK, PROGRESS_INDICATOR } from \"../generated/progress\";\n\nexport interface ProgressProps extends React.ComponentProps<\"div\"> {\n value?: number;\n}\n\nexport function Progress({ className, value = 0, ...props }: ProgressProps) {\n return (\n <div\n data-slot=\"progress\"\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={100}\n className={cn(PROGRESS_TRACK, className)}\n {...props}\n >\n <div\n data-slot=\"progress-indicator\"\n className={PROGRESS_INDICATOR}\n style={{ transform: `translateX(-${100 - value}%)` }}\n />\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const PROGRESS_TRACK = \"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full\";\n\nexport const PROGRESS_INDICATOR = \"bg-primary h-full w-full flex-1 transition-all\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { SKELETON_BASE } from \"../generated/skeleton\";\n\nexport function Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(SKELETON_BASE, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SKELETON_BASE = \"bg-accent animate-pulse rounded-md\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <svg\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"size-4 animate-spin\", className)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n {...props}\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/**\n * The shared 404 / 403 / 500 status surface, ported from site_conductor so every\n * EV app (landing, cabinet) shows the same branded error pages.\n *\n * `StatusScreen` is the generic shell; `NotFound` / `Forbidden` / `ServerError`\n * are the ready-made pages with their copy baked in — a host renders those with\n * its own hrefs. Links default to a plain `<a>` (a full document load, which is\n * what you want off an error page); pass `linkComponent` (e.g. `next/link`) for\n * soft navigation from a client boundary.\n */\nexport type StatusAccent = \"teal\" | \"gold\" | \"red\" | \"blue\";\n\n// Accent → token text colour. Bound to ev/color tokens; \"blue\" is the blueprint\n// accent the design specifies as a raw value (no token equivalent).\nconst ACCENT_TEXT: Record<StatusAccent, string> = {\n teal: \"text-main-accent-t1\",\n gold: \"text-main-accent-t3\",\n red: \"text-destructive\",\n blue: \"text-[#5e9be6]\",\n};\n\nconst BTN_BASE =\n \"inline-flex items-center justify-center rounded-md px-6 py-3.5 font-mono-tech text-xs uppercase tracking-widest transition-colors\";\n\nconst BTN_FILLED: Record<StatusAccent, string> = {\n teal: \"bg-main-accent-t1 text-main-black hover:bg-main-accent-t1/90\",\n gold: \"bg-main-accent-t3 text-main-black hover:bg-main-accent-t3/90\",\n red: \"bg-destructive text-white hover:bg-destructive/90\",\n blue: \"bg-[#5e9be6] text-main-black hover:bg-[#5e9be6]/90\",\n};\n\nconst BTN_OUTLINE: Record<StatusAccent, string> = {\n teal: \"border border-main-accent-t1/40 text-main-accent-t1 hover:bg-main-accent-t1/10\",\n gold: \"border border-main-accent-t3/40 text-main-accent-t3 hover:bg-main-accent-t3/10\",\n red: \"border border-destructive/40 text-destructive hover:bg-destructive/10\",\n blue: \"border border-[#5e9be6]/40 text-[#5e9be6] hover:bg-[#5e9be6]/10\",\n};\n\n/** Class for a status CTA — shared by the nav links and the 500 retry button. */\nexport function statusButtonClass(accent: StatusAccent, variant: \"filled\" | \"outline\") {\n return cn(BTN_BASE, variant === \"filled\" ? BTN_FILLED[accent] : BTN_OUTLINE[accent]);\n}\n\n// The EV skyline crown — the rooftop silhouette of the brand logo (Figma uikit\n// node 17:3, wordmark omitted), filled with `currentColor` so it takes the accent.\nfunction LogoMark({ className }: { className?: string }) {\n return (\n <svg viewBox=\"0 0 140 48\" className={className} aria-hidden>\n <g fill=\"currentColor\">\n <path d=\"M0.0437012 47.3326L50.9499 40.5805V22.3378L56.4881 23.6408V37.9071L59.1984 37.5005V24.1147L64.6189 25.1808V37.0269L67.2113 36.553V22.1009L56.606 17.481L43.408 21.864V36.553L0.0437012 47.3326Z\" />\n <path d=\"M77.2277 40.5804L85.9478 41.4099L85.8299 0.304321L73.1033 7.17499V26.3654L77.2277 28.2608V40.5804Z\" />\n <path d=\"M87.126 0.304321L99.9705 7.29343V42.5943L94.3141 41.8835V9.54417L87.126 5.75347V0.304321Z\" />\n <path d=\"M103.034 42.9496L139.682 46.0296L110.104 39.7513V26.8393L103.034 23.0486V42.9496Z\" />\n </g>\n </svg>\n );\n}\n\n// lucide `arrow-left`, inlined so the kit keeps its zero-icon-dep footprint.\nfunction ArrowLeftIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n );\n}\n\nexport interface StatusLinkData {\n label: string;\n href: string;\n variant?: \"filled\" | \"outline\";\n leadingArrow?: boolean;\n}\n\nexport interface StatusScreenProps {\n accent: StatusAccent;\n eyebrow: string;\n code: string;\n headlineLead: string;\n headlineAccent: string;\n headlineTail?: string;\n subtext: string;\n links?: StatusLinkData[];\n /** Leading action slot, rendered before `links` (e.g. the 500 client retry). */\n children?: React.ReactNode;\n /** CTA element — `next/link` for soft nav; defaults to `<a>` (full load). */\n linkComponent?: React.ElementType;\n}\n\n/**\n * Shared skeleton for the 404 / 403 / 500 status pages: a centred hero with the\n * logo mark, a mono eyebrow, a giant Playfair code, a headline whose final clause\n * is an italic accent, supporting copy, and the CTAs. The accent threads through\n * all four marks. Actions render inline (from `links` data, plus an optional\n * `children` slot) — never passed as a JSX prop through a server boundary.\n */\nexport function StatusScreen({\n accent,\n eyebrow,\n code,\n headlineLead,\n headlineAccent,\n headlineTail = \".\",\n subtext,\n links,\n children,\n linkComponent,\n}: StatusScreenProps) {\n const L = linkComponent ?? \"a\";\n const accentText = ACCENT_TEXT[accent];\n return (\n <section className=\"relative flex min-h-screen flex-col items-center justify-center overflow-hidden bg-main-black px-6 py-32 text-center\">\n <div\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-0 opacity-[0.07] [background:radial-gradient(55%_45%_at_50%_30%,currentColor,transparent_70%)]\",\n accentText,\n )}\n />\n <div className=\"relative z-10 flex w-full max-w-2xl flex-col items-center\">\n <LogoMark className={cn(\"mb-7 h-10 w-auto\", accentText)} />\n <p className={cn(\"mb-6 font-mono-tech text-[11px] uppercase tracking-[0.34em]\", accentText)}>{eyebrow}</p>\n <p className={cn(\"font-serif-display text-[110px] font-medium leading-[0.9] sm:text-[180px]\", accentText)}>{code}</p>\n <h1 className=\"mt-4 font-serif-display text-3xl font-light leading-tight text-white sm:text-5xl\">\n {headlineLead}\n <span className={cn(\"font-serif italic\", accentText)}>{headlineAccent}</span>\n {headlineTail}\n </h1>\n <p className=\"mx-auto mt-5 max-w-md text-sm leading-relaxed text-main-mist/60 sm:text-base\">{subtext}</p>\n <div className=\"mt-9 flex flex-col items-center gap-3 sm:flex-row\">\n {children}\n {links?.map((link) => (\n <L key={link.label} href={link.href} className={statusButtonClass(accent, link.variant ?? \"filled\")}>\n {link.leadingArrow ? <ArrowLeftIcon className=\"mr-2 h-4 w-4\" /> : null}\n {link.label}\n </L>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nexport interface StatusPageProps {\n /** CTA element — `next/link` for soft nav; defaults to `<a>` (full load). */\n linkComponent?: React.ElementType;\n /** \"Back to home\" target — `/` for the landing, `/cabinet` for the cabinet. */\n homeHref?: string;\n /** Secondary CTA target (contact / request access). */\n contactHref?: string;\n}\n\n/** 404 — page not found. */\nexport function NotFound({ linkComponent = \"a\", homeHref = \"/\", contactHref = \"/contact\" }: StatusPageProps) {\n return (\n <StatusScreen\n accent=\"teal\"\n eyebrow=\"Page not found\"\n code=\"404\"\n headlineLead=\"You've reached \"\n headlineAccent=\"open water\"\n subtext=\"The page you're looking for has drifted off our coastline — moved, renamed, or never charted. Let's get you back to shore.\"\n linkComponent={linkComponent}\n links={[\n { label: \"Back to home\", href: homeHref, leadingArrow: true },\n { label: \"Contact the team\", href: contactHref, variant: \"outline\" },\n ]}\n />\n );\n}\n\n/** 403 — access forbidden. */\nexport function Forbidden({ linkComponent = \"a\", homeHref = \"/\", contactHref = \"/contact\" }: StatusPageProps) {\n return (\n <StatusScreen\n accent=\"gold\"\n eyebrow=\"Access forbidden\"\n code=\"403\"\n headlineLead=\"This harbour is \"\n headlineAccent=\"private\"\n subtext=\"You don't have the credentials to view this page. If you believe you should, our team can open the right doors.\"\n linkComponent={linkComponent}\n links={[\n { label: \"Back to home\", href: homeHref, leadingArrow: true },\n { label: \"Request access\", href: contactHref, variant: \"outline\" },\n ]}\n />\n );\n}\n\nexport interface ServerErrorProps {\n /** CTA element — `next/link` for soft nav; defaults to `<a>` (full load). */\n linkComponent?: React.ElementType;\n /** \"Back to home\" target — `/` for the landing, `/cabinet` for the cabinet. */\n homeHref?: string;\n /** Retry handler (e.g. Next's error-boundary `reset`); falls back to a reload. */\n reset?: () => void;\n}\n\n/** 500 — server error. The \"Try again\" button runs `reset` or reloads the page. */\nexport function ServerError({ linkComponent = \"a\", homeHref = \"/\", reset }: ServerErrorProps) {\n return (\n <StatusScreen\n accent=\"red\"\n eyebrow=\"Server error\"\n code=\"500\"\n headlineLead=\"Our systems are \"\n headlineAccent=\"recalibrating\"\n subtext=\"Something broke on our end — not yours. We've been alerted and are restoring service. Please try again in a moment.\"\n linkComponent={linkComponent}\n links={[{ label: \"Back to home\", href: homeHref, variant: \"outline\", leadingArrow: true }]}\n >\n <button\n type=\"button\"\n className={statusButtonClass(\"red\", \"filled\")}\n onClick={() => (reset ? reset() : window.location.reload())}\n >\n Try again\n </button>\n </StatusScreen>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n TABLE,\n TABLE_BODY,\n TABLE_CAPTION,\n TABLE_CELL,\n TABLE_CONTAINER,\n TABLE_FOOTER,\n TABLE_HEAD,\n TABLE_HEADER,\n TABLE_ROW,\n} from \"../generated/table\";\n\nexport function Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className={TABLE_CONTAINER}\n >\n <table\n data-slot=\"table\"\n className={cn(TABLE, className)}\n {...props}\n />\n </div>\n );\n}\n\nexport function TableHeader({\n className,\n ...props\n}: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(TABLE_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function TableBody({\n className,\n ...props\n}: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(TABLE_BODY, className)}\n {...props}\n />\n );\n}\n\nexport function TableFooter({\n className,\n ...props\n}: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(TABLE_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(TABLE_ROW, className)}\n {...props}\n />\n );\n}\n\nexport function TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(TABLE_HEAD, className)}\n {...props}\n />\n );\n}\n\nexport function TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(TABLE_CELL, className)}\n {...props}\n />\n );\n}\n\nexport function TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(TABLE_CAPTION, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TABLE_CONTAINER = \"relative w-full overflow-x-auto\";\n\nexport const TABLE = \"w-full caption-bottom text-sm\";\n\nexport const TABLE_HEADER = \"[&_tr]:border-b\";\n\nexport const TABLE_BODY = \"[&_tr:last-child]:border-0\";\n\nexport const TABLE_FOOTER = \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\";\n\nexport const TABLE_ROW = \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\";\n\nexport const TABLE_HEAD = \"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\";\n\nexport const TABLE_CELL = \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\";\n\nexport const TABLE_CAPTION = \"text-muted-foreground mt-4 text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n ACCORDION_CONTENT,\n ACCORDION_CONTENT_INNER,\n ACCORDION_HEADER,\n ACCORDION_ITEM,\n ACCORDION_TRIGGER,\n} from \"../generated/accordion\";\n\ntype AccordionType = \"single\" | \"multiple\";\n\ninterface AccordionContextValue {\n isOpen: (value: string) => boolean;\n toggle: (value: string) => void;\n}\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nfunction useAccordion(): AccordionContextValue {\n const ctx = React.useContext(AccordionContext);\n if (!ctx) throw new Error(\"Accordion parts must be used within <Accordion>\");\n return ctx;\n}\n\nconst ItemContext = React.createContext<string | null>(null);\n\nfunction useItemValue(): string {\n const value = React.useContext(ItemContext);\n if (value === null)\n throw new Error(\"AccordionTrigger/Content must be used within <AccordionItem>\");\n return value;\n}\n\nexport interface AccordionProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n type?: AccordionType;\n collapsible?: boolean;\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\nexport function Accordion({\n type = \"single\",\n collapsible = false,\n value,\n defaultValue = [],\n onValueChange,\n children,\n ...props\n}: AccordionProps) {\n const [open, setOpen] = useControllableState<string[]>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n\n const isOpen = (v: string) => open.includes(v);\n const toggle = (v: string) => {\n if (type === \"multiple\") {\n setOpen(open.includes(v) ? open.filter((x) => x !== v) : [...open, v]);\n return;\n }\n if (open.includes(v)) setOpen(collapsible ? [] : open);\n else setOpen([v]);\n };\n\n return (\n <AccordionContext.Provider value={{ isOpen, toggle }}>\n <div data-slot=\"accordion\" {...props}>\n {children}\n </div>\n </AccordionContext.Provider>\n );\n}\n\nexport interface AccordionItemProps extends React.ComponentProps<\"div\"> {\n value: string;\n}\n\nexport function AccordionItem({\n className,\n value,\n children,\n ...props\n}: AccordionItemProps) {\n return (\n <ItemContext.Provider value={value}>\n <div\n data-slot=\"accordion-item\"\n className={cn(ACCORDION_ITEM, className)}\n {...props}\n >\n {children}\n </div>\n </ItemContext.Provider>\n );\n}\n\nexport function AccordionTrigger({\n className,\n children,\n onClick,\n ...props\n}: React.ComponentProps<\"button\">) {\n const { isOpen, toggle } = useAccordion();\n const value = useItemValue();\n const open = isOpen(value);\n return (\n <h3 className={ACCORDION_HEADER} data-slot=\"accordion-header\">\n <button\n type=\"button\"\n data-slot=\"accordion-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n aria-expanded={open}\n className={cn(ACCORDION_TRIGGER, className)}\n onClick={(e) => {\n onClick?.(e);\n toggle(value);\n }}\n {...props}\n >\n {children}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </h3>\n );\n}\n\nexport function AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { isOpen } = useAccordion();\n const value = useItemValue();\n if (!isOpen(value)) return null;\n return (\n <div\n data-slot=\"accordion-content\"\n data-state=\"open\"\n className={ACCORDION_CONTENT}\n {...props}\n >\n <div className={cn(ACCORDION_CONTENT_INNER, className)}>{children}</div>\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const ACCORDION_ITEM = \"border-b last:border-b-0\";\n\nexport const ACCORDION_HEADER = \"flex\";\n\nexport const ACCORDION_TRIGGER = \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\";\n\nexport const ACCORDION_CONTENT = \"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\";\n\nexport const ACCORDION_CONTENT_INNER = \"pt-0 pb-4\";\n","import * as React from \"react\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\n\ninterface CollapsibleContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n}\n\nconst CollapsibleContext = React.createContext<CollapsibleContextValue | null>(\n null,\n);\n\nfunction useCollapsible(): CollapsibleContextValue {\n const ctx = React.useContext(CollapsibleContext);\n if (!ctx) throw new Error(\"Collapsible parts must be used within <Collapsible>\");\n return ctx;\n}\n\nexport interface CollapsibleProps extends React.ComponentProps<\"div\"> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function Collapsible({\n open,\n defaultOpen = false,\n onOpenChange,\n children,\n ...props\n}: CollapsibleProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n return (\n <CollapsibleContext.Provider value={{ open: isOpen, setOpen }}>\n <div data-slot=\"collapsible\" data-state={isOpen ? \"open\" : \"closed\"} {...props}>\n {children}\n </div>\n </CollapsibleContext.Provider>\n );\n}\n\nexport function CollapsibleTrigger({\n onClick,\n ...props\n}: React.ComponentProps<\"button\">) {\n const { open, setOpen } = useCollapsible();\n return (\n <button\n type=\"button\"\n data-slot=\"collapsible-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n aria-expanded={open}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...props}\n />\n );\n}\n\nexport function CollapsibleContent({\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { open } = useCollapsible();\n if (!open) return null;\n return (\n <div data-slot=\"collapsible-content\" data-state=\"open\" {...props}>\n {children}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { TABS_ROOT, TABS_LIST, TABS_TRIGGER, TABS_CONTENT } from \"../generated/tabs\";\n\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\ninterface TabsContextValue {\n value: string;\n setValue: (next: string) => void;\n orientation: TabsOrientation;\n}\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null);\n\nfunction useTabs(): TabsContextValue {\n const ctx = React.useContext(TabsContext);\n if (!ctx) throw new Error(\"Tabs parts must be used within <Tabs>\");\n return ctx;\n}\n\nexport interface TabsProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: TabsOrientation;\n}\n\nexport function Tabs({\n className,\n value,\n defaultValue = \"\",\n onValueChange,\n orientation = \"horizontal\",\n children,\n ...props\n}: TabsProps) {\n const [active, setValue] = useControllableState<string>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n return (\n <TabsContext.Provider value={{ value: active, setValue, orientation }}>\n <div\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(TABS_ROOT, className)}\n {...props}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport function TabsList({\n className,\n children,\n onKeyDown,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { orientation } = useTabs();\n const items = React.Children.toArray(children);\n const { activeIndex, setActiveIndex, onKeyDown: rovingKeyDown } =\n useRovingFocus({\n count: items.length,\n orientation: orientation === \"vertical\" ? \"vertical\" : \"horizontal\",\n });\n return (\n <div\n role=\"tablist\"\n data-slot=\"tabs-list\"\n aria-orientation={orientation}\n className={cn(TABS_LIST, className)}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n rovingKeyDown(e);\n }}\n {...props}\n >\n {items.map((child, index) =>\n React.isValidElement(child)\n ? React.cloneElement(child as React.ReactElement<TabsTriggerInternal>, {\n __index: index,\n __isFocusItem: index === activeIndex,\n __onFocusItem: () => setActiveIndex(index),\n })\n : child,\n )}\n </div>\n );\n}\n\ninterface TabsTriggerInternal {\n __index?: number;\n __isFocusItem?: boolean;\n __onFocusItem?: () => void;\n}\n\nexport interface TabsTriggerProps\n extends React.ComponentProps<\"button\">,\n TabsTriggerInternal {\n value: string;\n}\n\nexport function TabsTrigger({\n className,\n value,\n onClick,\n onFocus,\n __isFocusItem,\n __onFocusItem,\n ...props\n}: TabsTriggerProps) {\n const { value: active, setValue } = useTabs();\n const selected = active === value;\n return (\n <button\n type=\"button\"\n role=\"tab\"\n data-slot=\"tabs-trigger\"\n data-state={selected ? \"active\" : \"inactive\"}\n aria-selected={selected}\n tabIndex={__isFocusItem ? 0 : -1}\n className={cn(TABS_TRIGGER, className)}\n onClick={(e) => {\n onClick?.(e);\n __onFocusItem?.();\n setValue(value);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n __onFocusItem?.();\n }}\n {...props}\n />\n );\n}\n\nexport interface TabsContentProps extends React.ComponentProps<\"div\"> {\n value: string;\n}\n\nexport function TabsContent({\n className,\n value,\n children,\n ...props\n}: TabsContentProps) {\n const { value: active } = useTabs();\n if (active !== value) return null;\n return (\n <div\n role=\"tabpanel\"\n data-slot=\"tabs-content\"\n data-state=\"active\"\n className={cn(TABS_CONTENT, className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TABS_ROOT = \"flex flex-col gap-2\";\n\nexport const TABS_LIST = \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]\";\n\nexport const TABS_TRIGGER = \"data-[state=active]:bg-background focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const TABS_CONTENT = \"flex-1 outline-none\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n TOGGLE_BASE,\n toggleSizeClasses,\n toggleVariantClasses,\n type ToggleSize,\n type ToggleVariant,\n} from \"../generated/toggle\";\n\nexport type { ToggleSize, ToggleVariant };\n\nexport interface ToggleVariantsOptions {\n variant?: ToggleVariant;\n size?: ToggleSize;\n className?: string;\n}\n\n/**\n * Returns the fused canonical toggle class string. Reused by `toggle-group` so\n * its items adopt the same styling, mirroring Rust's `toggle_classes`.\n */\nexport function toggleVariants({\n variant = \"default\",\n size = \"default\",\n className,\n}: ToggleVariantsOptions = {}): string {\n return cn(TOGGLE_BASE, toggleVariantClasses[variant], toggleSizeClasses[size], className);\n}\n\nexport interface ToggleProps\n extends Omit<React.ComponentProps<\"button\">, \"onChange\"> {\n variant?: ToggleVariant;\n size?: ToggleSize;\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n}\n\nexport function Toggle({\n className,\n variant = \"default\",\n size = \"default\",\n pressed,\n defaultPressed = false,\n onPressedChange,\n onClick,\n ...props\n}: ToggleProps) {\n const [on, setOn] = useControllableState<boolean>({\n ...(pressed !== undefined ? { value: pressed } : {}),\n defaultValue: defaultPressed,\n ...(onPressedChange ? { onChange: onPressedChange } : {}),\n });\n return (\n <button\n type=\"button\"\n data-slot=\"toggle\"\n data-state={on ? \"on\" : \"off\"}\n aria-pressed={on}\n className={cn(toggleVariants({ variant, size }), className)}\n onClick={(e) => {\n onClick?.(e);\n setOn(!on);\n }}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TOGGLE_BASE = \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 aria-invalid:border-destructive whitespace-nowrap\";\n\nexport const toggleVariantClasses = {\n \"default\": \"bg-transparent\",\n \"outline\": \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n} as const;\nexport type ToggleVariant = keyof typeof toggleVariantClasses;\n\nexport const toggleSizeClasses = {\n \"default\": \"h-9 px-2 min-w-9\",\n \"sm\": \"h-8 px-1.5 min-w-8\",\n \"lg\": \"h-10 px-2.5 min-w-10\",\n} as const;\nexport type ToggleSize = keyof typeof toggleSizeClasses;\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n toggleVariants,\n type ToggleVariant,\n type ToggleSize,\n} from \"./toggle\";\n\ntype ToggleGroupContextValue = {\n variant: ToggleVariant;\n size: ToggleSize;\n value: string[];\n toggle: (itemValue: string) => void;\n};\n\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue>({\n variant: \"default\",\n size: \"default\",\n value: [],\n toggle: () => {},\n});\n\nexport interface ToggleGroupProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n variant?: ToggleVariant;\n size?: ToggleSize;\n type?: \"single\" | \"multiple\";\n value?: string | string[];\n defaultValue?: string | string[];\n onValueChange?: (value: string | string[]) => void;\n}\n\nfunction toArray(v: string | string[] | undefined): string[] {\n if (v === undefined) return [];\n return Array.isArray(v) ? v : v === \"\" ? [] : [v];\n}\n\nexport function ToggleGroup({\n className,\n variant = \"default\",\n size = \"default\",\n type = \"single\",\n value,\n defaultValue,\n onValueChange,\n children,\n ...props\n}: ToggleGroupProps) {\n const [selected, setSelected] = useControllableState<string[]>({\n ...(value !== undefined ? { value: toArray(value) } : {}),\n defaultValue: toArray(defaultValue),\n onChange: (next) =>\n onValueChange?.(type === \"single\" ? (next[0] ?? \"\") : next),\n });\n\n const toggle = React.useCallback(\n (itemValue: string) => {\n if (type === \"single\") {\n setSelected(selected.includes(itemValue) ? [] : [itemValue]);\n } else {\n setSelected(\n selected.includes(itemValue)\n ? selected.filter((v) => v !== itemValue)\n : [...selected, itemValue],\n );\n }\n },\n [type, selected, setSelected],\n );\n\n return (\n <div\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n className={cn(\n \"group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs\",\n className,\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size, value: selected, toggle }}>\n {children}\n </ToggleGroupContext.Provider>\n </div>\n );\n}\n\nexport interface ToggleGroupItemProps\n extends Omit<React.ComponentProps<\"button\">, \"value\" | \"onChange\"> {\n value: string;\n variant?: ToggleVariant;\n size?: ToggleSize;\n}\n\nexport function ToggleGroupItem({\n className,\n children,\n value,\n variant,\n size,\n onClick,\n ...props\n}: ToggleGroupItemProps) {\n const context = React.useContext(ToggleGroupContext);\n const resolvedVariant = context.variant || variant || \"default\";\n const resolvedSize = context.size || size || \"default\";\n const on = context.value.includes(value);\n\n return (\n <button\n type=\"button\"\n data-slot=\"toggle-group-item\"\n data-variant={resolvedVariant}\n data-size={resolvedSize}\n data-state={on ? \"on\" : \"off\"}\n aria-pressed={on}\n className={cn(\n toggleVariants({ variant: resolvedVariant, size: resolvedSize }),\n \"min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l\",\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n context.toggle(value);\n }}\n {...props}\n >\n {children}\n </button>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\n\nexport interface SwitchProps\n extends Omit<React.ComponentProps<\"button\">, \"onChange\"> {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport function Switch({\n className,\n checked,\n defaultChecked = false,\n onCheckedChange,\n onClick,\n disabled,\n ...props\n}: SwitchProps) {\n const [on, setOn] = useControllableState<boolean>({\n ...(checked !== undefined ? { value: checked } : {}),\n defaultValue: defaultChecked,\n ...(onCheckedChange ? { onChange: onCheckedChange } : {}),\n });\n const state = on ? \"checked\" : \"unchecked\";\n return (\n <button\n type=\"button\"\n role=\"switch\"\n data-slot=\"switch\"\n data-state={state}\n aria-checked={on}\n disabled={disabled}\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n setOn(!on);\n }}\n {...props}\n >\n <span\n data-slot=\"switch-thumb\"\n data-state={state}\n className=\"bg-background pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n />\n </button>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\n\nexport interface CheckboxProps\n extends Omit<React.ComponentProps<\"button\">, \"onChange\"> {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport function Checkbox({\n className,\n checked,\n defaultChecked = false,\n onCheckedChange,\n onClick,\n disabled,\n ...props\n}: CheckboxProps) {\n const [on, setOn] = useControllableState<boolean>({\n ...(checked !== undefined ? { value: checked } : {}),\n defaultValue: defaultChecked,\n ...(onCheckedChange ? { onChange: onCheckedChange } : {}),\n });\n const state = on ? \"checked\" : \"unchecked\";\n return (\n <button\n type=\"button\"\n role=\"checkbox\"\n data-slot=\"checkbox\"\n data-state={state}\n aria-checked={on}\n disabled={disabled}\n className={cn(\n \"peer border-input data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n setOn(!on);\n }}\n {...props}\n >\n {on && (\n <span\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current transition-none\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-3.5\"\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </span>\n )}\n </button>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { RADIO_GROUP_ITEM, RADIO_GROUP_ROOT } from \"../generated/radio-group\";\n\ninterface RadioGroupContextValue {\n value: string;\n setValue: (next: string) => void;\n register: (el: HTMLButtonElement | null) => number;\n activeIndex: number;\n setActiveIndex: (i: number) => void;\n}\n\nconst RadioGroupContext = React.createContext<RadioGroupContextValue | null>(\n null,\n);\n\nexport interface RadioGroupProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport function RadioGroup({\n className,\n value,\n defaultValue = \"\",\n onValueChange,\n children,\n onKeyDown,\n ...props\n}: RadioGroupProps) {\n const [current, setCurrent] = useControllableState<string>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n\n const itemsRef = React.useRef<(HTMLButtonElement | null)[]>([]);\n const [count, setCount] = React.useState(0);\n\n const { activeIndex, setActiveIndex, onKeyDown: rovingKeyDown } =\n useRovingFocus({ count, orientation: \"vertical\", loop: true });\n\n const register = React.useCallback((el: HTMLButtonElement | null): number => {\n const list = itemsRef.current;\n let index = list.indexOf(el);\n if (index === -1) {\n index = list.length;\n list[index] = el;\n setCount(list.filter(Boolean).length);\n }\n return index;\n }, []);\n\n const ctx = React.useMemo<RadioGroupContextValue>(\n () => ({ value: current, setValue: setCurrent, register, activeIndex, setActiveIndex }),\n [current, setCurrent, register, activeIndex, setActiveIndex],\n );\n\n return (\n <RadioGroupContext.Provider value={ctx}>\n <div\n data-slot=\"radio-group\"\n role=\"radiogroup\"\n className={cn(RADIO_GROUP_ROOT, className)}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n rovingKeyDown(e);\n }}\n {...props}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n}\n\nexport interface RadioGroupItemProps\n extends Omit<React.ComponentProps<\"button\">, \"value\"> {\n value: string;\n}\n\nexport function RadioGroupItem({\n className,\n value,\n disabled,\n onClick,\n ...props\n}: RadioGroupItemProps) {\n const ctx = React.useContext(RadioGroupContext);\n if (!ctx) throw new Error(\"RadioGroupItem must be used within a RadioGroup\");\n const indexRef = React.useRef(-1);\n const checked = ctx.value === value;\n\n React.useEffect(() => {\n if (checked) ctx.setActiveIndex(indexRef.current);\n }, [checked]);\n\n return (\n <button\n ref={(el) => {\n indexRef.current = ctx.register(el);\n }}\n type=\"button\"\n data-slot=\"radio-group-item\"\n data-state={checked ? \"checked\" : \"unchecked\"}\n role=\"radio\"\n aria-checked={checked}\n disabled={disabled}\n tabIndex={indexRef.current === ctx.activeIndex ? 0 : -1}\n className={cn(RADIO_GROUP_ITEM, className)}\n onClick={(e) => {\n onClick?.(e);\n ctx.setValue(value);\n }}\n {...props}\n >\n {checked ? (\n <span\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <svg\n className=\"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n </span>\n ) : null}\n </button>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const RADIO_GROUP_ROOT = \"grid gap-3\";\n\nexport const RADIO_GROUP_ITEM = \"border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { SLIDER_RANGE, SLIDER_ROOT, SLIDER_THUMB, SLIDER_TRACK } from \"../generated/slider\";\n\ntype Orientation = \"horizontal\" | \"vertical\";\n\nfunction clampStep(value: number, min: number, max: number, step: number): number {\n const clamped = Math.min(max, Math.max(min, value));\n if (step <= 0) return clamped;\n const steps = Math.round((clamped - min) / step);\n return Math.min(max, Math.max(min, min + steps * step));\n}\n\nexport interface SliderProps\n extends Omit<React.ComponentProps<\"span\">, \"defaultValue\" | \"onChange\"> {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n orientation?: Orientation;\n disabled?: boolean;\n}\n\nexport function Slider({\n className,\n value,\n defaultValue = 0,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n orientation = \"horizontal\",\n disabled = false,\n ...props\n}: SliderProps) {\n const [raw, setRaw] = useControllableState<number>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n const current = clampStep(raw, min, max, step);\n const span = Math.max(max - min, Number.EPSILON);\n const percent = Math.min(100, Math.max(0, ((current - min) / span) * 100));\n\n const trackRef = React.useRef<HTMLSpanElement>(null);\n const draggingRef = React.useRef(false);\n\n const valueFromPointer = React.useCallback(\n (clientX: number, clientY: number) => {\n const rect = trackRef.current?.getBoundingClientRect();\n if (!rect) return current;\n const ratio =\n orientation === \"vertical\"\n ? (rect.bottom - clientY) / rect.height\n : (clientX - rect.left) / rect.width;\n return clampStep(min + ratio * (max - min), min, max, step);\n },\n [current, orientation, min, max, step],\n );\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n let next: number;\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n next = current + step;\n break;\n case \"ArrowLeft\":\n case \"ArrowDown\":\n next = current - step;\n break;\n case \"Home\":\n next = min;\n break;\n case \"End\":\n next = max;\n break;\n default:\n return;\n }\n event.preventDefault();\n setRaw(clampStep(next, min, max, step));\n };\n\n const onPointerDown = (event: React.PointerEvent) => {\n if (disabled) return;\n draggingRef.current = true;\n event.currentTarget.setPointerCapture?.(event.pointerId);\n setRaw(valueFromPointer(event.clientX, event.clientY));\n };\n\n const onPointerMove = (event: React.PointerEvent) => {\n if (!draggingRef.current || disabled) return;\n setRaw(valueFromPointer(event.clientX, event.clientY));\n };\n\n const onPointerUp = (event: React.PointerEvent) => {\n draggingRef.current = false;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n };\n\n const rangeStyle: React.CSSProperties =\n orientation === \"vertical\" ? { height: `${percent}%` } : { width: `${percent}%` };\n // The thumb is absolutely positioned within the (relative) root and centered\n // on the value point; without `position:absolute` the `%` offset is ignored and\n // flow layout parks it at the end of the row.\n const thumbStyle: React.CSSProperties =\n orientation === \"vertical\"\n ? { position: \"absolute\", bottom: `${percent}%`, left: \"50%\", transform: \"translate(-50%, 50%)\" }\n : { position: \"absolute\", left: `${percent}%`, top: \"50%\", transform: \"translate(-50%, -50%)\" };\n\n return (\n <span\n data-slot=\"slider\"\n data-orientation={orientation}\n data-disabled={disabled || undefined}\n className={cn(SLIDER_ROOT, className)}\n {...props}\n // Pointer handling lives on the root, not the track: the thumb sits above\n // the track (absolute), so grabbing it must still start a drag.\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n >\n <span\n ref={trackRef}\n data-slot=\"slider-track\"\n data-orientation={orientation}\n className={SLIDER_TRACK}\n >\n <span\n data-slot=\"slider-range\"\n data-orientation={orientation}\n className={SLIDER_RANGE}\n style={rangeStyle}\n />\n </span>\n <span\n data-slot=\"slider-thumb\"\n data-orientation={orientation}\n className={SLIDER_THUMB}\n style={thumbStyle}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuenow={current}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-orientation={orientation}\n aria-disabled={disabled || undefined}\n onKeyDown={onKeyDown}\n />\n </span>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SLIDER_ROOT = \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\";\n\nexport const SLIDER_TRACK = \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\";\n\nexport const SLIDER_RANGE = \"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\";\n\nexport const SLIDER_THUMB = \"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n SCROLL_AREA_THUMB,\n SCROLL_AREA_VIEWPORT,\n SCROLLBAR_BASE,\n scrollBarOrientations,\n type ScrollBarOrientation,\n} from \"../generated/scroll-area\";\n\nexport type { ScrollBarOrientation };\n\n// Dep-light scroll area: a viewport `div` with native `overflow` scrolling.\n// Custom scrollbar thumb tracking is omitted — native overflow does the work;\n// `ScrollBar` is a static decorative element kept for class parity.\n\nexport function ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"scroll-area\" className={cn(\"relative\", className)} {...props}>\n <div data-slot=\"scroll-area-viewport\" className={SCROLL_AREA_VIEWPORT}>\n {children}\n </div>\n <ScrollBar />\n </div>\n );\n}\n\nexport interface ScrollBarProps extends React.ComponentProps<\"div\"> {\n orientation?: ScrollBarOrientation;\n}\n\nexport function ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: ScrollBarProps) {\n return (\n <div\n data-slot=\"scroll-area-scrollbar\"\n data-orientation={orientation}\n className={cn(SCROLLBAR_BASE, scrollBarOrientations[orientation], className)}\n {...props}\n >\n <div data-slot=\"scroll-area-thumb\" className={SCROLL_AREA_THUMB} />\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SCROLL_AREA_VIEWPORT = \"focus-visible:ring-ring/50 size-full rounded-[inherit] overflow-auto transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\";\n\nexport const SCROLL_AREA_THUMB = \"bg-border relative flex-1 rounded-full\";\n\nexport const SCROLLBAR_BASE = \"flex touch-none p-px transition-colors select-none\";\n\nexport const scrollBarOrientations = {\n \"vertical\": \"h-full w-2.5 border-l border-l-transparent\",\n \"horizontal\": \"h-2.5 flex-col border-t border-t-transparent\",\n} as const;\nexport type ScrollBarOrientation = keyof typeof scrollBarOrientations;\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n SIDEBAR_MENU_BUTTON_BASE,\n sidebarMenuButtonVariantClasses,\n sidebarMenuButtonSizeClasses,\n SIDEBAR_WRAPPER,\n SIDEBAR_FLAT,\n SIDEBAR_INNER,\n SIDEBAR_TRIGGER,\n SIDEBAR_RAIL,\n SIDEBAR_INSET,\n SIDEBAR_HEADER,\n SIDEBAR_FOOTER,\n SIDEBAR_SEPARATOR,\n SIDEBAR_CONTENT,\n SIDEBAR_GROUP,\n SIDEBAR_GROUP_LABEL,\n SIDEBAR_GROUP_CONTENT,\n SIDEBAR_MENU,\n SIDEBAR_MENU_ITEM,\n type SidebarMenuButtonVariant,\n type SidebarMenuButtonSize,\n} from \"../generated/sidebar\";\n\nexport type { SidebarMenuButtonVariant, SidebarMenuButtonSize };\n\n// omitted: mobile sheet, cookie, kbd shortcut — see README Limitations\n\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\n\ninterface SidebarContextValue {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n toggleSidebar: () => void;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\nexport function useSidebar(): SidebarContextValue {\n const ctx = React.useContext(SidebarContext);\n if (!ctx) throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n return ctx;\n}\n\nexport interface SidebarProviderProps extends React.ComponentProps<\"div\"> {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange,\n className,\n style,\n children,\n ...props\n}: SidebarProviderProps) {\n const [open, setOpen] = useControllableState<boolean>({\n ...(openProp !== undefined ? { value: openProp } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const toggleSidebar = React.useCallback(\n () => setOpen(!open),\n [open, setOpen],\n );\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextValue>(\n () => ({ state, open, setOpen, toggleSidebar }),\n [state, open, setOpen, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(SIDEBAR_WRAPPER, className)}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n}\n\nexport interface SidebarProps extends React.ComponentProps<\"div\"> {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}\n\nexport function Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: SidebarProps) {\n const { state } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(SIDEBAR_FLAT, className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n <div\n data-slot=\"sidebar-inner\"\n className={cn(SIDEBAR_INNER, className)}\n {...props}\n >\n {children}\n </div>\n </div>\n );\n}\n\nexport function SidebarTrigger({\n className,\n onClick,\n children,\n ...props\n}: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n type=\"button\"\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n aria-label=\"Toggle Sidebar\"\n className={cn(SIDEBAR_TRIGGER, className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n {children}\n <span className=\"sr-only\">Toggle Sidebar</span>\n </button>\n );\n}\n\nexport function SidebarRail({\n className,\n ...props\n}: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n type=\"button\"\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(SIDEBAR_RAIL, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(SIDEBAR_INSET, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(SIDEBAR_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(SIDEBAR_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n role=\"separator\"\n className={cn(SIDEBAR_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(SIDEBAR_CONTENT, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(SIDEBAR_GROUP, className)}\n {...props}\n />\n );\n}\n\nexport interface SidebarGroupLabelProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nexport function SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: SidebarGroupLabelProps) {\n const Comp = asChild ? Slot : \"div\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(SIDEBAR_GROUP_LABEL, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(SIDEBAR_GROUP_CONTENT, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(SIDEBAR_MENU, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(SIDEBAR_MENU_ITEM, className)}\n {...props}\n />\n );\n}\n\nexport interface SidebarMenuButtonProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n isActive?: boolean;\n variant?: SidebarMenuButtonVariant;\n size?: SidebarMenuButtonSize;\n}\n\nexport function SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n className,\n ...props\n}: SidebarMenuButtonProps) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n SIDEBAR_MENU_BUTTON_BASE,\n sidebarMenuButtonVariantClasses[variant],\n sidebarMenuButtonSizeClasses[size],\n className,\n )}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SIDEBAR_MENU_BUTTON_BASE = \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\";\n\nexport const sidebarMenuButtonVariantClasses = {\n \"default\": \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"outline\": \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n} as const;\nexport type SidebarMenuButtonVariant = keyof typeof sidebarMenuButtonVariantClasses;\n\nexport const sidebarMenuButtonSizeClasses = {\n \"default\": \"h-8 text-sm\",\n \"sm\": \"h-7 text-xs\",\n \"lg\": \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n} as const;\nexport type SidebarMenuButtonSize = keyof typeof sidebarMenuButtonSizeClasses;\n\nexport const SIDEBAR_WRAPPER = \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\";\n\nexport const SIDEBAR_FLAT = \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\";\n\nexport const SIDEBAR_INNER = \"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\";\n\nexport const SIDEBAR_TRIGGER = \"inline-flex size-7 items-center justify-center rounded-md hover:bg-accent hover:text-accent-foreground\";\n\nexport const SIDEBAR_RAIL = \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\";\n\nexport const SIDEBAR_INSET = \"bg-background relative flex w-full flex-1 flex-col md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\";\n\nexport const SIDEBAR_HEADER = \"flex flex-col gap-2 p-2\";\n\nexport const SIDEBAR_FOOTER = \"flex flex-col gap-2 p-2\";\n\nexport const SIDEBAR_SEPARATOR = \"bg-sidebar-border mx-2 h-px w-auto shrink-0\";\n\nexport const SIDEBAR_CONTENT = \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\";\n\nexport const SIDEBAR_GROUP = \"relative flex w-full min-w-0 flex-col p-2\";\n\nexport const SIDEBAR_GROUP_LABEL = \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0 group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\";\n\nexport const SIDEBAR_GROUP_CONTENT = \"w-full text-sm\";\n\nexport const SIDEBAR_MENU = \"flex w-full min-w-0 flex-col gap-1\";\n\nexport const SIDEBAR_MENU_ITEM = \"group/menu-item relative\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Button, type ButtonProps } from \"./button\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n CAROUSEL_CONTENT_TRACK,\n CAROUSEL_CONTENT_TRACK_HORIZONTAL,\n CAROUSEL_CONTENT_TRACK_VERTICAL,\n CAROUSEL_CONTENT_VIEWPORT,\n CAROUSEL_EDGE_FADE_NEXT,\n CAROUSEL_EDGE_FADE_PREV,\n CAROUSEL_ITEM,\n CAROUSEL_ITEM_HORIZONTAL,\n CAROUSEL_ITEM_VERTICAL,\n CAROUSEL_NAV,\n CAROUSEL_NEXT_HORIZONTAL,\n CAROUSEL_NEXT_VERTICAL,\n CAROUSEL_PREVIOUS_HORIZONTAL,\n CAROUSEL_PREVIOUS_VERTICAL,\n} from \"../generated/carousel\";\n\ntype CarouselOrientation = \"horizontal\" | \"vertical\";\n\ntype CarouselContextProps = {\n orientation: CarouselOrientation;\n index: number;\n count: number;\n setCount: (count: number) => void;\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n};\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n return context;\n}\n\nexport interface CarouselProps extends React.ComponentProps<\"div\"> {\n orientation?: CarouselOrientation;\n index?: number;\n defaultIndex?: number;\n onIndexChange?: (index: number) => void;\n}\n\nexport function Carousel({\n orientation = \"horizontal\",\n index: indexProp,\n defaultIndex = 0,\n onIndexChange,\n className,\n children,\n onKeyDown,\n ...props\n}: CarouselProps) {\n const [index, setIndex] = useControllableState<number>({\n value: indexProp,\n defaultValue: defaultIndex,\n onChange: onIndexChange,\n });\n const [count, setCount] = React.useState(0);\n\n const canScrollPrev = index > 0;\n const canScrollNext = index < count - 1;\n\n const scrollPrev = React.useCallback(() => {\n if (index > 0) setIndex(index - 1);\n }, [index, setIndex]);\n\n const scrollNext = React.useCallback(() => {\n if (index < count - 1) setIndex(index + 1);\n }, [index, count, setIndex]);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n onKeyDown?.(event);\n };\n\n return (\n <CarouselContext.Provider\n value={{\n orientation,\n index,\n count,\n setCount,\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n tabIndex={0}\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\nexport function CarouselContent({\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { orientation, index, setCount } = useCarousel();\n const childCount = React.Children.count(children);\n\n React.useEffect(() => {\n setCount(childCount);\n }, [childCount, setCount]);\n\n // drag/momentum: omitted vs embla — see README Limitations\n const transform =\n orientation === \"horizontal\"\n ? `translate3d(-${index * 100}%, 0, 0)`\n : `translate3d(0, -${index * 100}%, 0)`;\n\n return (\n <div className={CAROUSEL_CONTENT_VIEWPORT} data-slot=\"carousel-content\">\n <div\n className={cn(\n CAROUSEL_CONTENT_TRACK,\n orientation === \"horizontal\"\n ? CAROUSEL_CONTENT_TRACK_HORIZONTAL\n : CAROUSEL_CONTENT_TRACK_VERTICAL,\n className,\n )}\n style={{ transform }}\n {...props}\n >\n {children}\n </div>\n </div>\n );\n}\n\nexport function CarouselItem({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n CAROUSEL_ITEM,\n orientation === \"horizontal\" ? CAROUSEL_ITEM_HORIZONTAL : CAROUSEL_ITEM_VERTICAL,\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Netflix-style edge scrims that dissolve the current slide into the surface\n * colour, signalling adjacent slides without revealing them. Each side shows\n * only when there is somewhere to scroll. Drop inside a <Carousel>.\n */\nexport function CarouselEdgeFade({\n className,\n}: {\n className?: string;\n}) {\n const { canScrollPrev, canScrollNext } = useCarousel();\n\n return (\n <>\n <div\n aria-hidden\n className={cn(\n CAROUSEL_EDGE_FADE_PREV,\n canScrollPrev ? \"opacity-100\" : \"opacity-0\",\n className,\n )}\n />\n <div\n aria-hidden\n className={cn(\n CAROUSEL_EDGE_FADE_NEXT,\n canScrollNext ? \"opacity-100\" : \"opacity-0\",\n className,\n )}\n />\n </>\n );\n}\n\nexport function CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: ButtonProps) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n CAROUSEL_NAV,\n orientation === \"horizontal\"\n ? CAROUSEL_PREVIOUS_HORIZONTAL\n : CAROUSEL_PREVIOUS_VERTICAL,\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 18-6-6 6-6\" />\n </svg>\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\nexport function CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: ButtonProps) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n CAROUSEL_NAV,\n orientation === \"horizontal\"\n ? CAROUSEL_NEXT_HORIZONTAL\n : CAROUSEL_NEXT_VERTICAL,\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 18 6-6-6-6\" />\n </svg>\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CAROUSEL_CONTENT_VIEWPORT = \"overflow-hidden\";\n\nexport const CAROUSEL_CONTENT_TRACK = \"flex transition-transform\";\n\nexport const CAROUSEL_CONTENT_TRACK_HORIZONTAL = \"-ml-4\";\n\nexport const CAROUSEL_CONTENT_TRACK_VERTICAL = \"-mt-4 flex-col\";\n\nexport const CAROUSEL_ITEM = \"min-w-0 shrink-0 grow-0 basis-full\";\n\nexport const CAROUSEL_ITEM_HORIZONTAL = \"pl-4\";\n\nexport const CAROUSEL_ITEM_VERTICAL = \"pt-4\";\n\nexport const CAROUSEL_NAV = \"absolute size-8 rounded-full\";\n\nexport const CAROUSEL_PREVIOUS_HORIZONTAL = \"top-1/2 -left-12 -translate-y-1/2\";\n\nexport const CAROUSEL_PREVIOUS_VERTICAL = \"-top-12 left-1/2 -translate-x-1/2 rotate-90\";\n\nexport const CAROUSEL_NEXT_HORIZONTAL = \"top-1/2 -right-12 -translate-y-1/2\";\n\nexport const CAROUSEL_NEXT_VERTICAL = \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\";\n\nexport const CAROUSEL_EDGE_FADE_PREV = \"pointer-events-none absolute inset-y-0 left-0 w-20 bg-gradient-to-r from-background via-background/60 to-transparent transition-opacity duration-300\";\n\nexport const CAROUSEL_EDGE_FADE_NEXT = \"pointer-events-none absolute inset-y-0 right-0 w-20 bg-gradient-to-l from-background via-background/60 to-transparent transition-opacity duration-300\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n INPUT_OTP_CONTAINER,\n INPUT_OTP_GROUP,\n INPUT_OTP_INPUT,\n INPUT_OTP_SLOT,\n INPUT_OTP_SLOT_CARET,\n INPUT_OTP_SLOT_CARET_WRAPPER,\n} from \"../generated/input-otp\";\n\ntype InputOTPContextValue = {\n value: string;\n maxLength: number;\n activeIndex: number;\n};\n\nconst InputOTPContext = React.createContext<InputOTPContextValue | null>(null);\n\nfunction useInputOTP() {\n const context = React.useContext(InputOTPContext);\n if (!context) {\n throw new Error(\"InputOTP slots must be used within an <InputOTP />\");\n }\n return context;\n}\n\nexport interface InputOTPProps\n extends Omit<React.ComponentProps<\"input\">, \"value\" | \"defaultValue\" | \"onChange\"> {\n maxLength: number;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n containerClassName?: string;\n children?: React.ReactNode;\n}\n\nexport function InputOTP({\n maxLength,\n value: valueProp,\n defaultValue = \"\",\n onChange,\n className,\n containerClassName,\n children,\n disabled,\n ...props\n}: InputOTPProps) {\n const [value, setValue] = useControllableState<string>({\n value: valueProp,\n defaultValue,\n onChange,\n });\n const [focused, setFocused] = React.useState(false);\n\n const activeIndex = focused ? Math.min(value.length, maxLength - 1) : -1;\n\n return (\n <InputOTPContext.Provider value={{ value, maxLength, activeIndex }}>\n <div\n data-slot=\"input-otp\"\n className={cn(INPUT_OTP_CONTAINER, containerClassName)}\n >\n {children}\n <input\n // drag/momentum: n/a — single visually-hidden input tracks the string\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n maxLength={maxLength}\n value={value}\n disabled={disabled}\n onChange={(e) => setValue(e.target.value.slice(0, maxLength))}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n className={cn(INPUT_OTP_INPUT, className)}\n {...props}\n />\n </div>\n </InputOTPContext.Provider>\n );\n}\n\nexport function InputOTPGroup({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(INPUT_OTP_GROUP, className)}\n {...props}\n />\n );\n}\n\nexport interface InputOTPSlotProps extends React.ComponentProps<\"div\"> {\n index: number;\n}\n\nexport function InputOTPSlot({ index, className, ...props }: InputOTPSlotProps) {\n const { value, activeIndex } = useInputOTP();\n const char = value[index];\n const isActive = activeIndex === index;\n const hasFakeCaret = isActive && char === undefined;\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(INPUT_OTP_SLOT, className)}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className={INPUT_OTP_SLOT_CARET_WRAPPER}>\n <div className={INPUT_OTP_SLOT_CARET} />\n </div>\n )}\n </div>\n );\n}\n\nexport function InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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=\"M5 12h14\" />\n </svg>\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const INPUT_OTP_CONTAINER = \"relative flex items-center gap-2 has-disabled:opacity-50\";\n\nexport const INPUT_OTP_INPUT = \"absolute inset-0 h-full w-full opacity-0 disabled:cursor-not-allowed\";\n\nexport const INPUT_OTP_GROUP = \"flex items-center\";\n\nexport const INPUT_OTP_SLOT = \"data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]\";\n\nexport const INPUT_OTP_SLOT_CARET_WRAPPER = \"pointer-events-none absolute inset-0 flex items-center justify-center\";\n\nexport const INPUT_OTP_SLOT_CARET = \"animate-caret-blink bg-foreground h-4 w-px duration-1000\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport { TOOLTIP_CONTENT } from \"../generated/tooltip\";\n\ninterface TooltipContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null);\n\nfunction useTooltip(): TooltipContextValue {\n const ctx = React.useContext(TooltipContext);\n if (!ctx) throw new Error(\"Tooltip parts must be used within <Tooltip>\");\n return ctx;\n}\n\nexport interface TooltipProviderProps {\n children?: React.ReactNode;\n}\n\nexport function TooltipProvider({ children }: TooltipProviderProps) {\n return <>{children}</>;\n}\n\nexport interface TooltipProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function Tooltip({ open, defaultOpen = false, onOpenChange, children }: TooltipProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n return (\n <TooltipProvider>\n <TooltipContext.Provider value={{ open: isOpen, setOpen, anchorRef }}>\n {children}\n </TooltipContext.Provider>\n </TooltipProvider>\n );\n}\n\nexport interface TooltipTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function TooltipTrigger({\n asChild = false,\n onPointerEnter,\n onPointerLeave,\n onFocus,\n onBlur,\n ...props\n}: TooltipTriggerProps) {\n const { setOpen, anchorRef } = useTooltip();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"tooltip-trigger\"\n ref={anchorRef as React.Ref<never>}\n onPointerEnter={(e: React.PointerEvent<HTMLButtonElement>) => {\n onPointerEnter?.(e);\n setOpen(true);\n }}\n onPointerLeave={(e: React.PointerEvent<HTMLButtonElement>) => {\n onPointerLeave?.(e);\n setOpen(false);\n }}\n onFocus={(e: React.FocusEvent<HTMLButtonElement>) => {\n onFocus?.(e);\n setOpen(true);\n }}\n onBlur={(e: React.FocusEvent<HTMLButtonElement>) => {\n onBlur?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface TooltipContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n}\n\nexport function TooltipContent({\n className,\n side: sideProp = \"top\",\n sideOffset = 0,\n children,\n ...props\n}: TooltipContentProps) {\n const { open, anchorRef } = useTooltip();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: sideProp,\n offset: sideOffset,\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n data-slot=\"tooltip-content\"\n role=\"tooltip\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n ref={mergeRefs(floatingRef, presRef)}\n style={style}\n className={cn(TOOLTIP_CONTENT, className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </Portal>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TOOLTIP_CONTENT = \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport { POPOVER_CONTENT } from \"../generated/popover\";\n\ninterface PopoverContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n}\n\nconst PopoverContext = React.createContext<PopoverContextValue | null>(null);\n\nfunction usePopover(): PopoverContextValue {\n const ctx = React.useContext(PopoverContext);\n if (!ctx) throw new Error(\"Popover parts must be used within <Popover>\");\n return ctx;\n}\n\nexport interface PopoverProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function Popover({ open, defaultOpen = false, onOpenChange, children }: PopoverProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n return (\n <PopoverContext.Provider value={{ open: isOpen, setOpen, anchorRef }}>\n {children}\n </PopoverContext.Provider>\n );\n}\n\nexport interface PopoverTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function PopoverTrigger({ asChild = false, onClick, ...props }: PopoverTriggerProps) {\n const { open, setOpen, anchorRef } = usePopover();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"popover-trigger\"\n aria-expanded={open}\n ref={anchorRef as React.Ref<never>}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface PopoverAnchorProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nexport function PopoverAnchor({ asChild = false, ...props }: PopoverAnchorProps) {\n const { anchorRef } = usePopover();\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp\n data-slot=\"popover-anchor\"\n ref={anchorRef as React.Ref<never>}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface PopoverContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n}\n\nexport function PopoverContent({\n className,\n side: sideProp = \"bottom\",\n align = \"center\",\n sideOffset = 4,\n children,\n ...props\n}: PopoverContentProps) {\n const { open, setOpen, anchorRef } = usePopover();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: sideProp,\n align,\n offset: sideOffset,\n });\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [anchorRef],\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n data-slot=\"popover-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n data-align={align}\n ref={mergeRefs(floatingRef, dismissRef, presRef)}\n style={style}\n className={cn(\n POPOVER_CONTENT,\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </Portal>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const POPOVER_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-hidden\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport { HOVER_CARD_CONTENT } from \"../generated/hover-card\";\n\ninterface HoverCardContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n}\n\nconst HoverCardContext = React.createContext<HoverCardContextValue | null>(null);\n\nfunction useHoverCard(): HoverCardContextValue {\n const ctx = React.useContext(HoverCardContext);\n if (!ctx) throw new Error(\"HoverCard parts must be used within <HoverCard>\");\n return ctx;\n}\n\nexport interface HoverCardProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function HoverCard({ open, defaultOpen = false, onOpenChange, children }: HoverCardProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n return (\n <HoverCardContext.Provider value={{ open: isOpen, setOpen, anchorRef }}>\n {children}\n </HoverCardContext.Provider>\n );\n}\n\nexport interface HoverCardTriggerProps extends React.ComponentProps<\"a\"> {\n asChild?: boolean;\n}\n\nexport function HoverCardTrigger({\n asChild = false,\n onPointerEnter,\n onPointerLeave,\n ...props\n}: HoverCardTriggerProps) {\n const { setOpen, anchorRef } = useHoverCard();\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n data-slot=\"hover-card-trigger\"\n ref={anchorRef as React.Ref<never>}\n onPointerEnter={(e: React.PointerEvent<HTMLAnchorElement>) => {\n onPointerEnter?.(e);\n setOpen(true);\n }}\n onPointerLeave={(e: React.PointerEvent<HTMLAnchorElement>) => {\n onPointerLeave?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface HoverCardContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n}\n\nexport function HoverCardContent({\n className,\n side: sideProp = \"bottom\",\n align = \"center\",\n sideOffset = 4,\n children,\n ...props\n}: HoverCardContentProps) {\n const { open, anchorRef } = useHoverCard();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: sideProp,\n align,\n offset: sideOffset,\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n data-slot=\"hover-card-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n data-align={align}\n ref={mergeRefs(floatingRef, presRef)}\n style={style}\n className={cn(HOVER_CARD_CONTENT, className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </Portal>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const HOVER_CARD_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 rounded-md border p-4 shadow-md outline-hidden\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n DROPDOWN_MENU_CHECK_ITEM,\n DROPDOWN_MENU_CONTENT,\n DROPDOWN_MENU_ITEM,\n DROPDOWN_MENU_ITEM_INDICATOR,\n DROPDOWN_MENU_LABEL,\n DROPDOWN_MENU_SEPARATOR,\n DROPDOWN_MENU_SHORTCUT,\n DROPDOWN_MENU_SUB_CONTENT,\n DROPDOWN_MENU_SUB_TRIGGER,\n} from \"../generated/dropdown-menu\";\n\ninterface DropdownMenuContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n}\n\nconst DropdownMenuContext = React.createContext<DropdownMenuContextValue | null>(\n null,\n);\n\nfunction useDropdownMenu(): DropdownMenuContextValue {\n const ctx = React.useContext(DropdownMenuContext);\n if (!ctx) throw new Error(\"DropdownMenu parts must be used within <DropdownMenu>\");\n return ctx;\n}\n\nexport interface DropdownMenuProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function DropdownMenu({ open, defaultOpen = false, onOpenChange, children }: DropdownMenuProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n return (\n <DropdownMenuContext.Provider value={{ open: isOpen, setOpen, anchorRef }}>\n <div data-slot=\"dropdown-menu\">{children}</div>\n </DropdownMenuContext.Provider>\n );\n}\n\nexport function DropdownMenuPortal({ children }: { children?: React.ReactNode }) {\n return <Portal>{children}</Portal>;\n}\n\nexport interface DropdownMenuTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function DropdownMenuTrigger({ asChild = false, onClick, ...props }: DropdownMenuTriggerProps) {\n const { open, setOpen, anchorRef } = useDropdownMenu();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"dropdown-menu-trigger\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n data-state={open ? \"open\" : \"closed\"}\n ref={anchorRef as React.Ref<HTMLButtonElement>}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface DropdownMenuContentProps extends React.ComponentProps<\"div\"> {\n sideOffset?: number;\n}\n\nexport function DropdownMenuContent({\n className,\n sideOffset = 4,\n children,\n ...props\n}: DropdownMenuContentProps) {\n const { open, setOpen, anchorRef } = useDropdownMenu();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: \"bottom\",\n align: \"start\",\n offset: sideOffset,\n });\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [anchorRef],\n });\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n // Roving focus across rendered menu items: ArrowUp/Down move the active item.\n const items = () =>\n Array.from(\n contentRef.current?.querySelectorAll<HTMLElement>(\"[role^='menuitem']\") ?? [],\n ).filter((el) => el.getAttribute(\"data-disabled\") === null);\n const { activeIndex, onKeyDown: rovingKeyDown } = useRovingFocus({\n count: 64,\n orientation: \"vertical\",\n loop: true,\n });\n React.useEffect(() => {\n if (!open) return;\n items()[activeIndex]?.focus();\n }, [open, activeIndex]);\n // Selecting an item closes the menu: items call this through context.\n const close = React.useCallback(() => setOpen(false), [setOpen]);\n if (!isPresent) return null;\n return (\n <Portal>\n <DropdownMenuCloseContext.Provider value={close}>\n <div\n data-slot=\"dropdown-menu-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n role=\"menu\"\n tabIndex={-1}\n onKeyDown={(e) => {\n rovingKeyDown(e);\n if (e.key === \"Escape\") setOpen(false);\n }}\n ref={mergeRefs(floatingRef, dismissRef, presRef, contentRef)}\n style={style}\n className={cn(\n DROPDOWN_MENU_CONTENT,\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </DropdownMenuCloseContext.Provider>\n </Portal>\n );\n}\n\nconst DropdownMenuCloseContext = React.createContext<() => void>(() => {});\n\nexport function DropdownMenuGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dropdown-menu-group\" role=\"group\" className={className} {...props} />;\n}\n\nexport interface DropdownMenuItemProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n disabled?: boolean;\n}\n\nexport function DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n disabled,\n onClick,\n onKeyDown,\n ...props\n}: DropdownMenuItemProps) {\n const close = React.useContext(DropdownMenuCloseContext);\n return (\n <div\n data-slot=\"dropdown-menu-item\"\n data-inset={inset ? \"\" : undefined}\n data-variant={variant}\n data-disabled={disabled ? \"\" : undefined}\n role=\"menuitem\"\n tabIndex={disabled ? undefined : -1}\n className={cn(\n DROPDOWN_MENU_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n close();\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n (e.currentTarget as HTMLElement).click();\n }\n }}\n {...props}\n />\n );\n}\n\nexport interface DropdownMenuCheckboxItemProps extends React.ComponentProps<\"div\"> {\n checked?: boolean;\n disabled?: boolean;\n}\n\nexport function DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n disabled,\n onClick,\n ...props\n}: DropdownMenuCheckboxItemProps) {\n const close = React.useContext(DropdownMenuCloseContext);\n return (\n <div\n data-slot=\"dropdown-menu-checkbox-item\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled ? \"\" : undefined}\n tabIndex={disabled ? undefined : -1}\n className={cn(\n DROPDOWN_MENU_CHECK_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n close();\n }}\n {...props}\n >\n <span className={DROPDOWN_MENU_ITEM_INDICATOR}>\n {checked ? (\n <svg className=\"size-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ) : null}\n </span>\n {children}\n </div>\n );\n}\n\ninterface DropdownMenuRadioGroupContextValue {\n value: string | undefined;\n setValue: (next: string) => void;\n}\n\nconst DropdownMenuRadioGroupContext =\n React.createContext<DropdownMenuRadioGroupContextValue | null>(null);\n\nexport interface DropdownMenuRadioGroupProps extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport function DropdownMenuRadioGroup({\n className,\n value,\n onValueChange,\n children,\n ...props\n}: DropdownMenuRadioGroupProps) {\n const ctx = React.useMemo<DropdownMenuRadioGroupContextValue>(\n () => ({ value, setValue: (next) => onValueChange?.(next) }),\n [value, onValueChange],\n );\n return (\n <DropdownMenuRadioGroupContext.Provider value={ctx}>\n <div data-slot=\"dropdown-menu-radio-group\" role=\"group\" className={className} {...props}>\n {children}\n </div>\n </DropdownMenuRadioGroupContext.Provider>\n );\n}\n\nexport interface DropdownMenuRadioItemProps extends React.ComponentProps<\"div\"> {\n value: string;\n disabled?: boolean;\n}\n\nexport function DropdownMenuRadioItem({\n className,\n children,\n value,\n disabled,\n onClick,\n ...props\n}: DropdownMenuRadioItemProps) {\n const close = React.useContext(DropdownMenuCloseContext);\n const group = React.useContext(DropdownMenuRadioGroupContext);\n const checked = group?.value === value;\n return (\n <div\n data-slot=\"dropdown-menu-radio-item\"\n role=\"menuitemradio\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled ? \"\" : undefined}\n tabIndex={disabled ? undefined : -1}\n className={cn(\n DROPDOWN_MENU_CHECK_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n group?.setValue(value);\n close();\n }}\n {...props}\n >\n <span className={DROPDOWN_MENU_ITEM_INDICATOR}>\n {checked ? (\n <svg className=\"size-2 fill-current\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n ) : null}\n </span>\n {children}\n </div>\n );\n}\n\nexport interface DropdownMenuLabelProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n}\n\nexport function DropdownMenuLabel({ className, inset, ...props }: DropdownMenuLabelProps) {\n return (\n <div\n data-slot=\"dropdown-menu-label\"\n data-inset={inset ? \"\" : undefined}\n className={cn(DROPDOWN_MENU_LABEL, className)}\n {...props}\n />\n );\n}\n\nexport function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dropdown-menu-separator\"\n role=\"separator\"\n className={cn(DROPDOWN_MENU_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(DROPDOWN_MENU_SHORTCUT, className)}\n {...props}\n />\n );\n}\n\n// Sub-menus render inline (nested) rather than in a separate floating layer: the\n// sub-content is revealed in place when its trigger toggles, simplifying the\n// nesting Radix portals each level. data-state still reflects open/closed.\ninterface DropdownMenuSubContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n}\n\nconst DropdownMenuSubContext = React.createContext<DropdownMenuSubContextValue | null>(null);\n\nexport interface DropdownMenuSubProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function DropdownMenuSub({ open, defaultOpen = false, onOpenChange, children }: DropdownMenuSubProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n return (\n <DropdownMenuSubContext.Provider value={{ open: isOpen, setOpen }}>\n <div data-slot=\"dropdown-menu-sub\">{children}</div>\n </DropdownMenuSubContext.Provider>\n );\n}\n\nexport interface DropdownMenuSubTriggerProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n}\n\nexport function DropdownMenuSubTrigger({ className, inset, children, onClick, ...props }: DropdownMenuSubTriggerProps) {\n const ctx = React.useContext(DropdownMenuSubContext);\n return (\n <div\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset ? \"\" : undefined}\n data-state={ctx?.open ? \"open\" : \"closed\"}\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={ctx?.open}\n tabIndex={-1}\n className={cn(\n DROPDOWN_MENU_SUB_TRIGGER,\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n ctx?.setOpen(!ctx.open);\n }}\n {...props}\n >\n {children}\n <svg className=\"ml-auto size-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </div>\n );\n}\n\nexport function DropdownMenuSubContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const ctx = React.useContext(DropdownMenuSubContext);\n if (!ctx?.open) return null;\n return (\n <div\n data-slot=\"dropdown-menu-sub-content\"\n data-state=\"open\"\n role=\"menu\"\n className={cn(\n DROPDOWN_MENU_SUB_CONTENT,\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const DROPDOWN_MENU_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\";\n\nexport const DROPDOWN_MENU_SUB_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\";\n\nexport const DROPDOWN_MENU_ITEM = \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const DROPDOWN_MENU_CHECK_ITEM = \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const DROPDOWN_MENU_SUB_TRIGGER = \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const DROPDOWN_MENU_ITEM_INDICATOR = \"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\";\n\nexport const DROPDOWN_MENU_LABEL = \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\";\n\nexport const DROPDOWN_MENU_SEPARATOR = \"bg-border -mx-1 my-1 h-px\";\n\nexport const DROPDOWN_MENU_SHORTCUT = \"text-muted-foreground ml-auto text-xs tracking-widest\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n CONTEXT_MENU_CHECK_ITEM,\n CONTEXT_MENU_CONTENT,\n CONTEXT_MENU_ITEM,\n CONTEXT_MENU_LABEL,\n CONTEXT_MENU_SEPARATOR,\n CONTEXT_MENU_SHORTCUT,\n CONTEXT_MENU_SUB_CONTENT,\n CONTEXT_MENU_SUB_TRIGGER,\n} from \"../generated/context-menu\";\n\ninterface ContextMenuContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n point: { x: number; y: number };\n setPoint: (p: { x: number; y: number }) => void;\n}\n\nconst ContextMenuContext = React.createContext<ContextMenuContextValue | null>(null);\n\nfunction useContextMenu(): ContextMenuContextValue {\n const ctx = React.useContext(ContextMenuContext);\n if (!ctx) throw new Error(\"ContextMenu parts must be used within <ContextMenu>\");\n return ctx;\n}\n\nexport interface ContextMenuProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function ContextMenu({ open, defaultOpen = false, onOpenChange, children }: ContextMenuProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const [point, setPoint] = React.useState({ x: 0, y: 0 });\n return (\n <ContextMenuContext.Provider value={{ open: isOpen, setOpen, point, setPoint }}>\n <div data-slot=\"context-menu\">{children}</div>\n </ContextMenuContext.Provider>\n );\n}\n\nexport function ContextMenuPortal({ children }: { children?: React.ReactNode }) {\n return <Portal>{children}</Portal>;\n}\n\nexport interface ContextMenuTriggerProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nexport function ContextMenuTrigger({ asChild = false, onContextMenu, ...props }: ContextMenuTriggerProps) {\n const { setOpen, setPoint } = useContextMenu();\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp\n data-slot=\"context-menu-trigger\"\n onContextMenu={(e: React.MouseEvent<HTMLDivElement>) => {\n onContextMenu?.(e);\n e.preventDefault();\n setPoint({ x: e.clientX, y: e.clientY });\n setOpen(true);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function ContextMenuGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"context-menu-group\" role=\"group\" className={className} {...props} />;\n}\n\nconst ContextMenuCloseContext = React.createContext<() => void>(() => {});\n\nexport function ContextMenuContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const { open, setOpen, point } = useContextMenu();\n const { isPresent, ref: presRef } = usePresence(open);\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n });\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n const items = () =>\n Array.from(\n contentRef.current?.querySelectorAll<HTMLElement>(\"[role^='menuitem']\") ?? [],\n ).filter((el) => el.getAttribute(\"data-disabled\") === null);\n const { activeIndex, onKeyDown: rovingKeyDown } = useRovingFocus({\n count: 64,\n orientation: \"vertical\",\n loop: true,\n });\n React.useEffect(() => {\n if (!open) return;\n items()[activeIndex]?.focus();\n }, [open, activeIndex]);\n const close = React.useCallback(() => setOpen(false), [setOpen]);\n if (!isPresent) return null;\n return (\n <Portal>\n <ContextMenuCloseContext.Provider value={close}>\n <div\n data-slot=\"context-menu-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side=\"bottom\"\n role=\"menu\"\n tabIndex={-1}\n onKeyDown={(e) => {\n rovingKeyDown(e);\n if (e.key === \"Escape\") setOpen(false);\n }}\n ref={mergeRefs(dismissRef, presRef, contentRef)}\n style={{ position: \"fixed\", top: point.y, left: point.x }}\n className={cn(\n CONTEXT_MENU_CONTENT,\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </ContextMenuCloseContext.Provider>\n </Portal>\n );\n}\n\nexport interface ContextMenuItemProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n disabled?: boolean;\n}\n\nexport function ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n disabled,\n onClick,\n onKeyDown,\n ...props\n}: ContextMenuItemProps) {\n const close = React.useContext(ContextMenuCloseContext);\n return (\n <div\n data-slot=\"context-menu-item\"\n data-inset={inset ? \"\" : undefined}\n data-variant={variant}\n data-disabled={disabled ? \"\" : undefined}\n role=\"menuitem\"\n tabIndex={disabled ? undefined : -1}\n className={cn(\n CONTEXT_MENU_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n close();\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n (e.currentTarget as HTMLElement).click();\n }\n }}\n {...props}\n />\n );\n}\n\nexport interface ContextMenuCheckboxItemProps extends React.ComponentProps<\"div\"> {\n checked?: boolean;\n disabled?: boolean;\n}\n\nexport function ContextMenuCheckboxItem({\n className,\n children,\n checked,\n disabled,\n onClick,\n ...props\n}: ContextMenuCheckboxItemProps) {\n const close = React.useContext(ContextMenuCloseContext);\n return (\n <div\n data-slot=\"context-menu-checkbox-item\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled ? \"\" : undefined}\n tabIndex={disabled ? undefined : -1}\n className={cn(\n CONTEXT_MENU_CHECK_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n close();\n }}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n {checked ? (\n <svg className=\"size-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ) : null}\n </span>\n {children}\n </div>\n );\n}\n\ninterface ContextMenuRadioGroupContextValue {\n value: string | undefined;\n setValue: (next: string) => void;\n}\n\nconst ContextMenuRadioGroupContext =\n React.createContext<ContextMenuRadioGroupContextValue | null>(null);\n\nexport interface ContextMenuRadioGroupProps extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport function ContextMenuRadioGroup({\n className,\n value,\n onValueChange,\n children,\n ...props\n}: ContextMenuRadioGroupProps) {\n const ctx = React.useMemo<ContextMenuRadioGroupContextValue>(\n () => ({ value, setValue: (next) => onValueChange?.(next) }),\n [value, onValueChange],\n );\n return (\n <ContextMenuRadioGroupContext.Provider value={ctx}>\n <div data-slot=\"context-menu-radio-group\" role=\"group\" className={className} {...props}>\n {children}\n </div>\n </ContextMenuRadioGroupContext.Provider>\n );\n}\n\nexport interface ContextMenuRadioItemProps extends React.ComponentProps<\"div\"> {\n value: string;\n disabled?: boolean;\n}\n\nexport function ContextMenuRadioItem({\n className,\n children,\n value,\n disabled,\n onClick,\n ...props\n}: ContextMenuRadioItemProps) {\n const close = React.useContext(ContextMenuCloseContext);\n const group = React.useContext(ContextMenuRadioGroupContext);\n const checked = group?.value === value;\n return (\n <div\n data-slot=\"context-menu-radio-item\"\n role=\"menuitemradio\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled ? \"\" : undefined}\n tabIndex={disabled ? undefined : -1}\n className={cn(\n CONTEXT_MENU_CHECK_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n group?.setValue(value);\n close();\n }}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n {checked ? (\n <svg className=\"size-2 fill-current\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n ) : null}\n </span>\n {children}\n </div>\n );\n}\n\nexport interface ContextMenuLabelProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n}\n\nexport function ContextMenuLabel({ className, inset, ...props }: ContextMenuLabelProps) {\n return (\n <div\n data-slot=\"context-menu-label\"\n data-inset={inset ? \"\" : undefined}\n className={cn(CONTEXT_MENU_LABEL, className)}\n {...props}\n />\n );\n}\n\nexport function ContextMenuSeparator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"context-menu-separator\"\n role=\"separator\"\n className={cn(CONTEXT_MENU_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport function ContextMenuShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(CONTEXT_MENU_SHORTCUT, className)}\n {...props}\n />\n );\n}\n\n// Sub-menus render inline (nested) rather than in a separate floating layer:\n// the sub-content is revealed in place when its trigger toggles.\ninterface ContextMenuSubContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n}\n\nconst ContextMenuSubContext = React.createContext<ContextMenuSubContextValue | null>(null);\n\nexport interface ContextMenuSubProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function ContextMenuSub({ open, defaultOpen = false, onOpenChange, children }: ContextMenuSubProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n return (\n <ContextMenuSubContext.Provider value={{ open: isOpen, setOpen }}>\n <div data-slot=\"context-menu-sub\">{children}</div>\n </ContextMenuSubContext.Provider>\n );\n}\n\nexport interface ContextMenuSubTriggerProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n}\n\nexport function ContextMenuSubTrigger({ className, inset, children, onClick, ...props }: ContextMenuSubTriggerProps) {\n const ctx = React.useContext(ContextMenuSubContext);\n return (\n <div\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset ? \"\" : undefined}\n data-state={ctx?.open ? \"open\" : \"closed\"}\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={ctx?.open}\n tabIndex={-1}\n className={cn(\n CONTEXT_MENU_SUB_TRIGGER,\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n ctx?.setOpen(!ctx.open);\n }}\n {...props}\n >\n {children}\n <svg className=\"ml-auto\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </div>\n );\n}\n\nexport function ContextMenuSubContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const ctx = React.useContext(ContextMenuSubContext);\n if (!ctx?.open) return null;\n return (\n <div\n data-slot=\"context-menu-sub-content\"\n data-state=\"open\"\n role=\"menu\"\n className={cn(\n CONTEXT_MENU_SUB_CONTENT,\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CONTEXT_MENU_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\";\n\nexport const CONTEXT_MENU_SUB_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\";\n\nexport const CONTEXT_MENU_ITEM = \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const CONTEXT_MENU_CHECK_ITEM = \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const CONTEXT_MENU_SUB_TRIGGER = \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const CONTEXT_MENU_LABEL = \"text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\";\n\nexport const CONTEXT_MENU_SEPARATOR = \"bg-border -mx-1 my-1 h-px\";\n\nexport const CONTEXT_MENU_SHORTCUT = \"text-muted-foreground ml-auto text-xs tracking-widest\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { Portal } from \"../primitives/portal\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport {\n MENUBAR_CHECKBOX_ITEM,\n MENUBAR_CONTENT,\n MENUBAR_ITEM,\n MENUBAR_ITEM_INDICATOR,\n MENUBAR_LABEL,\n MENUBAR_RADIO_ITEM,\n MENUBAR_ROOT,\n MENUBAR_SEPARATOR,\n MENUBAR_SHORTCUT,\n MENUBAR_SUB_CONTENT,\n MENUBAR_SUB_TRIGGER,\n MENUBAR_TRIGGER,\n} from \"../generated/menubar\";\n\ninterface MenuCtx {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n}\nconst MenubarMenuContext = React.createContext<MenuCtx | null>(null);\nfunction useMenu(): MenuCtx {\n const ctx = React.useContext(MenubarMenuContext);\n if (!ctx) throw new Error(\"Menubar parts must be used within <MenubarMenu>\");\n return ctx;\n}\n\nconst MenubarRadioGroupContext = React.createContext<{\n value: string;\n onValueChange: (value: string) => void;\n} | null>(null);\n\nexport function Menubar({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"menubar\"\n role=\"menubar\"\n className={cn(MENUBAR_ROOT, className)}\n {...props}\n />\n );\n}\n\nexport interface MenubarMenuProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function MenubarMenu({ open, defaultOpen = false, onOpenChange, children }: MenubarMenuProps) {\n const [isOpen, setOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n return (\n <MenubarMenuContext.Provider value={{ open: isOpen, setOpen, triggerRef }}>\n <div data-slot=\"menubar-menu\" className=\"relative\">\n {children}\n </div>\n </MenubarMenuContext.Provider>\n );\n}\n\nexport function MenubarTrigger({ className, onClick, ...props }: React.ComponentProps<\"button\">) {\n const { open, setOpen, triggerRef } = useMenu();\n return (\n <button\n ref={triggerRef}\n type=\"button\"\n data-slot=\"menubar-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n className={cn(MENUBAR_TRIGGER, className)}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...props}\n />\n );\n}\n\nexport function MenubarContent({\n className,\n children,\n align = \"start\",\n ...props\n}: React.ComponentProps<\"div\"> & { align?: \"start\" | \"center\" | \"end\" }) {\n const { open, setOpen, triggerRef } = useMenu();\n const { isPresent, ref: presenceRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef: triggerRef,\n open,\n side: \"bottom\",\n align,\n offset: 8,\n });\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [triggerRef],\n });\n\n const items = React.Children.toArray(children);\n const { onKeyDown } = useRovingFocus({ count: items.length, orientation: \"vertical\" });\n\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n ref={mergeRefs(presenceRef, floatingRef, dismissRef)}\n data-slot=\"menubar-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n role=\"menu\"\n style={style}\n className={cn(MENUBAR_CONTENT, className)}\n onKeyDown={onKeyDown}\n {...props}\n >\n {children}\n </div>\n </Portal>\n );\n}\n\nexport function MenubarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"menubar-group\" role=\"group\" className={className} {...props} />;\n}\n\nexport function MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <div\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n role=\"menuitem\"\n tabIndex={-1}\n className={cn(MENUBAR_ITEM, className)}\n {...props}\n />\n );\n}\n\nexport function MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<\"div\"> & { checked?: boolean }) {\n return (\n <div\n data-slot=\"menubar-checkbox-item\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n tabIndex={-1}\n className={cn(MENUBAR_CHECKBOX_ITEM, className)}\n {...props}\n >\n <span className={MENUBAR_ITEM_INDICATOR}>\n {checked && (\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n )}\n </span>\n {children}\n </div>\n );\n}\n\nexport interface MenubarRadioGroupProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport function MenubarRadioGroup({\n value,\n defaultValue = \"\",\n onValueChange,\n className,\n children,\n}: MenubarRadioGroupProps) {\n const [current, setValue] = useControllableState({\n value,\n defaultValue,\n onChange: onValueChange,\n });\n return (\n <MenubarRadioGroupContext.Provider value={{ value: current, onValueChange: setValue }}>\n <div data-slot=\"menubar-radio-group\" role=\"group\" className={className}>\n {children}\n </div>\n </MenubarRadioGroupContext.Provider>\n );\n}\n\nexport function MenubarRadioItem({\n className,\n children,\n value,\n ...props\n}: React.ComponentProps<\"div\"> & { value: string }) {\n const ctx = React.useContext(MenubarRadioGroupContext);\n const checked = ctx?.value === value;\n return (\n <div\n data-slot=\"menubar-radio-item\"\n role=\"menuitemradio\"\n aria-checked={checked}\n tabIndex={-1}\n className={cn(MENUBAR_RADIO_ITEM, className)}\n onClick={() => ctx?.onValueChange(value)}\n {...props}\n >\n <span className={MENUBAR_ITEM_INDICATOR}>\n {checked && (\n <svg className=\"size-2 fill-current\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n )}\n </span>\n {children}\n </div>\n );\n}\n\nexport function MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<\"div\"> & { inset?: boolean }) {\n return (\n <div\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(MENUBAR_LABEL, className)}\n {...props}\n />\n );\n}\n\nexport function MenubarSeparator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"menubar-separator\"\n role=\"separator\"\n className={cn(MENUBAR_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport function MenubarShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(MENUBAR_SHORTCUT, className)}\n {...props}\n />\n );\n}\n\ninterface SubCtx {\n open: boolean;\n setOpen: (open: boolean) => void;\n}\nconst MenubarSubContext = React.createContext<SubCtx | null>(null);\nfunction useSub(): SubCtx {\n const ctx = React.useContext(MenubarSubContext);\n if (!ctx) throw new Error(\"MenubarSub parts must be used within <MenubarSub>\");\n return ctx;\n}\n\nexport interface MenubarSubProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function MenubarSub({ open, defaultOpen = false, onOpenChange, children }: MenubarSubProps) {\n const [isOpen, setOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n return (\n <MenubarSubContext.Provider value={{ open: isOpen, setOpen }}>\n <div data-slot=\"menubar-sub\" className=\"relative\">\n {children}\n </div>\n </MenubarSubContext.Provider>\n );\n}\n\nexport function MenubarSubTrigger({\n className,\n inset,\n children,\n onClick,\n ...props\n}: React.ComponentProps<\"div\"> & { inset?: boolean }) {\n const { open, setOpen } = useSub();\n return (\n <div\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n data-state={open ? \"open\" : \"closed\"}\n role=\"menuitem\"\n tabIndex={-1}\n className={cn(MENUBAR_SUB_TRIGGER, className)}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...props}\n >\n {children}\n <svg\n className=\"ml-auto h-4 w-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </div>\n );\n}\n\nexport function MenubarSubContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const { open } = useSub();\n const { isPresent, ref } = usePresence(open);\n if (!isPresent) return null;\n return (\n <div\n ref={ref as React.RefObject<HTMLDivElement>}\n data-slot=\"menubar-sub-content\"\n data-state={open ? \"open\" : \"closed\"}\n role=\"menu\"\n className={cn(MENUBAR_SUB_CONTENT, className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const MENUBAR_ROOT = \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\";\n\nexport const MENUBAR_TRIGGER = \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\";\n\nexport const MENUBAR_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 absolute z-50 min-w-[12rem] overflow-hidden rounded-md border p-1 shadow-md\";\n\nexport const MENUBAR_ITEM = \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const MENUBAR_CHECKBOX_ITEM = \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const MENUBAR_RADIO_ITEM = \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const MENUBAR_ITEM_INDICATOR = \"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\";\n\nexport const MENUBAR_LABEL = \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\";\n\nexport const MENUBAR_SEPARATOR = \"bg-border -mx-1 my-1 h-px\";\n\nexport const MENUBAR_SHORTCUT = \"text-muted-foreground ml-auto text-xs tracking-widest\";\n\nexport const MENUBAR_SUB_TRIGGER = \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8\";\n\nexport const MENUBAR_SUB_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 absolute z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-lg\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n NAVIGATION_MENU,\n NAVIGATION_MENU_CONTENT,\n NAVIGATION_MENU_INDICATOR,\n NAVIGATION_MENU_ITEM,\n NAVIGATION_MENU_LINK,\n NAVIGATION_MENU_LIST,\n NAVIGATION_MENU_TRIGGER_STYLE,\n NAVIGATION_MENU_VIEWPORT,\n} from \"../generated/navigation-menu\";\n\n/**\n * Fused canonical trigger class string, the mirror of Rust's\n * `navigation_menu_trigger_style()`. Reuse it to style a plain link the same way\n * a `NavigationMenuTrigger` is styled.\n */\nexport function navigationMenuTriggerStyle(): string {\n return NAVIGATION_MENU_TRIGGER_STYLE;\n}\n\ninterface ItemCtx {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n}\nconst NavigationMenuItemContext = React.createContext<ItemCtx | null>(null);\nfunction useItem(): ItemCtx {\n const ctx = React.useContext(NavigationMenuItemContext);\n if (!ctx) throw new Error(\"NavigationMenu parts must be used within <NavigationMenuItem>\");\n return ctx;\n}\n\nexport function NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: React.ComponentProps<\"nav\"> & { viewport?: boolean }) {\n return (\n <nav\n data-slot=\"navigation-menu\"\n data-viewport={viewport}\n role=\"navigation\"\n className={cn(\n NAVIGATION_MENU,\n className,\n )}\n {...props}\n >\n {children}\n {viewport && <NavigationMenuViewport />}\n </nav>\n );\n}\n\nexport function NavigationMenuList({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"navigation-menu-list\"\n role=\"list\"\n className={cn(\n NAVIGATION_MENU_LIST,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport interface NavigationMenuItemProps extends React.ComponentProps<\"li\"> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function NavigationMenuItem({\n className,\n open,\n defaultOpen = false,\n onOpenChange,\n children,\n ...props\n}: NavigationMenuItemProps) {\n const [isOpen, setOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n return (\n <NavigationMenuItemContext.Provider value={{ open: isOpen, setOpen, triggerRef }}>\n <li data-slot=\"navigation-menu-item\" className={cn(NAVIGATION_MENU_ITEM, className)} {...props}>\n {children}\n </li>\n </NavigationMenuItemContext.Provider>\n );\n}\n\nexport function NavigationMenuTrigger({\n className,\n children,\n onClick,\n ...props\n}: React.ComponentProps<\"button\">) {\n const { open, setOpen, triggerRef } = useItem();\n return (\n <button\n ref={triggerRef}\n type=\"button\"\n data-slot=\"navigation-menu-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...props}\n >\n {children}{\" \"}\n <svg\n className=\"relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\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=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n );\n}\n\nexport function NavigationMenuContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const { open, setOpen, triggerRef } = useItem();\n const { isPresent, ref: presenceRef } = usePresence(open);\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [triggerRef],\n });\n if (!isPresent) return null;\n return (\n <div\n ref={mergeRefs(presenceRef, dismissRef)}\n data-slot=\"navigation-menu-content\"\n data-state={open ? \"open\" : \"closed\"}\n className={cn(\n NAVIGATION_MENU_CONTENT,\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport function NavigationMenuViewport({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div className=\"absolute top-full left-0 isolate z-50 flex justify-center\">\n <div\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n NAVIGATION_MENU_VIEWPORT,\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\nexport function NavigationMenuLink({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"a\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n data-slot=\"navigation-menu-link\"\n className={cn(\n NAVIGATION_MENU_LINK,\n className,\n )}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function NavigationMenuIndicator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n NAVIGATION_MENU_INDICATOR,\n className,\n )}\n {...props}\n >\n <div className=\"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md\" />\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const NAVIGATION_MENU = \"group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\";\n\nexport const NAVIGATION_MENU_LIST = \"group flex flex-1 list-none items-center justify-center gap-1\";\n\nexport const NAVIGATION_MENU_ITEM = \"relative\";\n\nexport const NAVIGATION_MENU_TRIGGER_STYLE = \"group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1\";\n\nexport const NAVIGATION_MENU_CONTENT = \"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none\";\n\nexport const NAVIGATION_MENU_LINK = \"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const NAVIGATION_MENU_INDICATOR = \"data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden\";\n\nexport const NAVIGATION_MENU_VIEWPORT = \"origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { useFocusScope } from \"../primitives/focus-scope\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n DIALOG_CLOSE,\n DIALOG_CONTENT,\n DIALOG_DESCRIPTION,\n DIALOG_FOOTER,\n DIALOG_HEADER,\n DIALOG_OVERLAY,\n DIALOG_TITLE,\n} from \"../generated/dialog\";\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null);\n\nfunction useDialog(): DialogContextValue {\n const ctx = React.useContext(DialogContext);\n if (!ctx) throw new Error(\"Dialog parts must be used within <Dialog>\");\n return ctx;\n}\n\nexport interface DialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function Dialog({ open, defaultOpen = false, onOpenChange, children }: DialogProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const triggerRef = React.useRef<HTMLElement | null>(null);\n return (\n <DialogContext.Provider value={{ open: isOpen, setOpen, triggerRef }}>\n {children}\n </DialogContext.Provider>\n );\n}\n\nexport interface DialogTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function DialogTrigger({ asChild = false, onClick, ...props }: DialogTriggerProps) {\n const { open, setOpen, triggerRef } = useDialog();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"dialog-trigger\"\n aria-expanded={open}\n ref={triggerRef as React.Ref<HTMLButtonElement>}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(true);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport type DialogPortalProps = { children?: React.ReactNode };\n\nexport function DialogPortal({ children }: DialogPortalProps) {\n return <>{children}</>;\n}\n\nexport interface DialogOverlayProps extends React.ComponentProps<\"div\"> {}\n\nexport function DialogOverlay({ className, ...props }: DialogOverlayProps) {\n const { open, setOpen } = useDialog();\n return (\n <div\n data-slot=\"dialog-overlay\"\n data-state={open ? \"open\" : \"closed\"}\n onClick={() => setOpen(false)}\n className={cn(DIALOG_OVERLAY, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nconst XIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n);\n\nexport interface DialogContentProps extends React.ComponentProps<\"div\"> {\n showCloseButton?: boolean;\n}\n\nexport function DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogContentProps) {\n const { open, setOpen, triggerRef } = useDialog();\n const { isPresent, ref: presRef } = usePresence(open);\n const focusRef = useFocusScope(open);\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [triggerRef],\n });\n React.useEffect(() => {\n if (!open) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [open]);\n if (!isPresent) return null;\n return (\n <Portal>\n <DialogOverlay />\n <div\n data-slot=\"dialog-content\"\n role=\"dialog\"\n aria-modal=\"true\"\n data-state={open ? \"open\" : \"closed\"}\n ref={mergeRefs(focusRef, dismissRef, presRef as React.Ref<HTMLDivElement>)}\n className={cn(DIALOG_CONTENT, className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n {showCloseButton && (\n <button\n type=\"button\"\n data-slot=\"dialog-close\"\n onClick={() => setOpen(false)}\n className={DIALOG_CLOSE}\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </button>\n )}\n </div>\n </Portal>\n );\n}\n\nexport interface DialogCloseProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function DialogClose({ asChild = false, onClick, ...props }: DialogCloseProps) {\n const { setOpen } = useDialog();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"dialog-close\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(DIALOG_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(DIALOG_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function DialogTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <h2\n data-slot=\"dialog-title\"\n className={cn(DIALOG_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function DialogDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"dialog-description\"\n className={cn(DIALOG_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const DIALOG_OVERLAY = \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\";\n\nexport const DIALOG_CONTENT = \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\";\n\nexport const DIALOG_CLOSE = \"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const DIALOG_HEADER = \"flex flex-col gap-2 text-center sm:text-left\";\n\nexport const DIALOG_FOOTER = \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\";\n\nexport const DIALOG_TITLE = \"text-lg leading-none font-semibold\";\n\nexport const DIALOG_DESCRIPTION = \"text-muted-foreground text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { buttonVariants } from \"./button\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { useFocusScope } from \"../primitives/focus-scope\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n ALERT_DIALOG_CONTENT,\n ALERT_DIALOG_DESCRIPTION,\n ALERT_DIALOG_FOOTER,\n ALERT_DIALOG_HEADER,\n ALERT_DIALOG_OVERLAY,\n ALERT_DIALOG_TITLE,\n} from \"../generated/alert-dialog\";\n\ninterface AlertDialogContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst AlertDialogContext = React.createContext<AlertDialogContextValue | null>(null);\n\nfunction useAlertDialog(): AlertDialogContextValue {\n const ctx = React.useContext(AlertDialogContext);\n if (!ctx) throw new Error(\"AlertDialog parts must be used within <AlertDialog>\");\n return ctx;\n}\n\nexport interface AlertDialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function AlertDialog({ open, defaultOpen = false, onOpenChange, children }: AlertDialogProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const triggerRef = React.useRef<HTMLElement | null>(null);\n return (\n <AlertDialogContext.Provider value={{ open: isOpen, setOpen, triggerRef }}>\n {children}\n </AlertDialogContext.Provider>\n );\n}\n\nexport interface AlertDialogTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function AlertDialogTrigger({ asChild = false, onClick, ...props }: AlertDialogTriggerProps) {\n const { open, setOpen, triggerRef } = useAlertDialog();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"alert-dialog-trigger\"\n aria-expanded={open}\n ref={triggerRef as React.Ref<HTMLButtonElement>}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(true);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface AlertDialogOverlayProps extends React.ComponentProps<\"div\"> {}\n\nexport function AlertDialogOverlay({ className, ...props }: AlertDialogOverlayProps) {\n const { open, setOpen } = useAlertDialog();\n return (\n <div\n data-slot=\"alert-dialog-overlay\"\n data-state={open ? \"open\" : \"closed\"}\n onClick={() => setOpen(false)}\n className={cn(ALERT_DIALOG_OVERLAY, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface AlertDialogContentProps extends React.ComponentProps<\"div\"> {}\n\nexport function AlertDialogContent({ className, children, ...props }: AlertDialogContentProps) {\n const { open, setOpen, triggerRef } = useAlertDialog();\n const { isPresent, ref: presRef } = usePresence(open);\n const focusRef = useFocusScope(open);\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [triggerRef],\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <AlertDialogOverlay />\n <div\n data-slot=\"alert-dialog-content\"\n role=\"alertdialog\"\n aria-modal=\"true\"\n data-state={open ? \"open\" : \"closed\"}\n ref={mergeRefs(focusRef, dismissRef, presRef as React.Ref<HTMLDivElement>)}\n className={cn(ALERT_DIALOG_CONTENT, className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </Portal>\n );\n}\n\nexport function AlertDialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(ALERT_DIALOG_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(ALERT_DIALOG_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDialogTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <h2\n data-slot=\"alert-dialog-title\"\n className={cn(ALERT_DIALOG_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDialogDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"alert-dialog-description\"\n className={cn(ALERT_DIALOG_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport interface AlertDialogActionProps extends React.ComponentProps<\"button\"> {}\n\nexport function AlertDialogAction({ className, onClick, ...props }: AlertDialogActionProps) {\n const { setOpen } = useAlertDialog();\n return (\n <button\n data-slot=\"alert-dialog-action\"\n className={cn(buttonVariants(), className)}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface AlertDialogCancelProps extends React.ComponentProps<\"button\"> {}\n\nexport function AlertDialogCancel({ className, onClick, ...props }: AlertDialogCancelProps) {\n const { setOpen } = useAlertDialog();\n return (\n <button\n data-slot=\"alert-dialog-cancel\"\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const ALERT_DIALOG_OVERLAY = \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\";\n\nexport const ALERT_DIALOG_CONTENT = \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\";\n\nexport const ALERT_DIALOG_HEADER = \"flex flex-col gap-2 text-center sm:text-left\";\n\nexport const ALERT_DIALOG_FOOTER = \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\";\n\nexport const ALERT_DIALOG_TITLE = \"text-lg font-semibold\";\n\nexport const ALERT_DIALOG_DESCRIPTION = \"text-muted-foreground text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { useFocusScope } from \"../primitives/focus-scope\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n SHEET_CLOSE,\n SHEET_CONTENT,\n SHEET_DESCRIPTION,\n SHEET_FOOTER,\n SHEET_HEADER,\n SHEET_OVERLAY,\n SHEET_SIDE_BOTTOM,\n SHEET_SIDE_LEFT,\n SHEET_SIDE_RIGHT,\n SHEET_SIDE_TOP,\n SHEET_TITLE,\n} from \"../generated/sheet\";\n\ninterface SheetContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst SheetContext = React.createContext<SheetContextValue | null>(null);\n\nfunction useSheet(): SheetContextValue {\n const ctx = React.useContext(SheetContext);\n if (!ctx) throw new Error(\"Sheet parts must be used within <Sheet>\");\n return ctx;\n}\n\nexport interface SheetProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function Sheet({ open, defaultOpen = false, onOpenChange, children }: SheetProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const triggerRef = React.useRef<HTMLElement | null>(null);\n return (\n <SheetContext.Provider value={{ open: isOpen, setOpen, triggerRef }}>\n {children}\n </SheetContext.Provider>\n );\n}\n\nexport interface SheetTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function SheetTrigger({ asChild = false, onClick, ...props }: SheetTriggerProps) {\n const { open, setOpen, triggerRef } = useSheet();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"sheet-trigger\"\n aria-expanded={open}\n ref={triggerRef as React.Ref<HTMLButtonElement>}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(true);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface SheetOverlayProps extends React.ComponentProps<\"div\"> {}\n\nexport function SheetOverlay({ className, ...props }: SheetOverlayProps) {\n const { open, setOpen } = useSheet();\n return (\n <div\n data-slot=\"sheet-overlay\"\n data-state={open ? \"open\" : \"closed\"}\n onClick={() => setOpen(false)}\n className={cn(SHEET_OVERLAY, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nconst sheetSideClasses = {\n right: SHEET_SIDE_RIGHT,\n left: SHEET_SIDE_LEFT,\n top: SHEET_SIDE_TOP,\n bottom: SHEET_SIDE_BOTTOM,\n} as const;\n\nconst XIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n);\n\nexport interface SheetContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}\n\nexport function SheetContent({ className, children, side = \"right\", ...props }: SheetContentProps) {\n const { open, setOpen, triggerRef } = useSheet();\n const { isPresent, ref: presRef } = usePresence(open);\n const focusRef = useFocusScope(open);\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [triggerRef],\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <SheetOverlay />\n <div\n data-slot=\"sheet-content\"\n role=\"dialog\"\n aria-modal=\"true\"\n data-state={open ? \"open\" : \"closed\"}\n ref={mergeRefs(focusRef, dismissRef, presRef as React.Ref<HTMLDivElement>)}\n className={cn(SHEET_CONTENT, sheetSideClasses[side], className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n <button\n type=\"button\"\n data-slot=\"sheet-close\"\n onClick={() => setOpen(false)}\n className={SHEET_CLOSE}\n >\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n </Portal>\n );\n}\n\nexport interface SheetCloseProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function SheetClose({ asChild = false, onClick, ...props }: SheetCloseProps) {\n const { setOpen } = useSheet();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"sheet-close\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(SHEET_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(SHEET_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function SheetTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <h2\n data-slot=\"sheet-title\"\n className={cn(SHEET_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function SheetDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"sheet-description\"\n className={cn(SHEET_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SHEET_OVERLAY = \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\";\n\nexport const SHEET_CONTENT = \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\";\n\nexport const SHEET_CLOSE = \"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\";\n\nexport const SHEET_SIDE_RIGHT = \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\";\n\nexport const SHEET_SIDE_LEFT = \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\";\n\nexport const SHEET_SIDE_TOP = \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\";\n\nexport const SHEET_SIDE_BOTTOM = \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\";\n\nexport const SHEET_HEADER = \"flex flex-col gap-1.5 p-4\";\n\nexport const SHEET_FOOTER = \"mt-auto flex flex-col gap-2 p-4\";\n\nexport const SHEET_TITLE = \"text-foreground font-semibold\";\n\nexport const SHEET_DESCRIPTION = \"text-muted-foreground text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFocusScope } from \"../primitives/focus-scope\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n DRAWER_CONTENT_BASE,\n DRAWER_DESCRIPTION,\n DRAWER_FOOTER,\n DRAWER_HANDLE,\n DRAWER_HEADER,\n DRAWER_OVERLAY,\n DRAWER_TITLE,\n drawerDirectionClasses,\n type DrawerDirection,\n} from \"../generated/drawer\";\n\nexport type { DrawerDirection };\n\n// drag-to-dismiss: omitted vs vaul — see README Limitations\n\ninterface DrawerContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n direction: DrawerDirection;\n}\n\nconst DrawerContext = React.createContext<DrawerContextValue | null>(null);\n\nfunction useDrawer(): DrawerContextValue {\n const ctx = React.useContext(DrawerContext);\n if (!ctx) throw new Error(\"Drawer parts must be used within <Drawer>\");\n return ctx;\n}\n\nexport interface DrawerProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n direction?: DrawerDirection;\n children?: React.ReactNode;\n}\n\nexport function Drawer({\n open,\n defaultOpen = false,\n onOpenChange,\n direction = \"bottom\",\n children,\n}: DrawerProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n return (\n <DrawerContext.Provider value={{ open: isOpen, setOpen, direction }}>\n <div data-slot=\"drawer\">{children}</div>\n </DrawerContext.Provider>\n );\n}\n\nexport interface DrawerTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function DrawerTrigger({ asChild = false, onClick, ...props }: DrawerTriggerProps) {\n const { setOpen } = useDrawer();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"drawer-trigger\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(true);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface DrawerCloseProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function DrawerClose({ asChild = false, onClick, ...props }: DrawerCloseProps) {\n const { setOpen } = useDrawer();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"drawer-close\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function DrawerOverlay({ className, ...props }: React.ComponentProps<\"div\">) {\n const { open, setOpen } = useDrawer();\n if (!open) return null;\n return (\n <div\n data-slot=\"drawer-overlay\"\n data-state=\"open\"\n onClick={() => setOpen(false)}\n className={cn(DRAWER_OVERLAY, className)}\n {...props}\n />\n );\n}\n\nexport function DrawerContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const { open, setOpen, direction } = useDrawer();\n const scopeRef = useFocusScope(open);\n if (!open) return null;\n return (\n <Portal>\n <div\n data-slot=\"drawer-overlay\"\n className={DRAWER_OVERLAY}\n onClick={() => setOpen(false)}\n />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n data-slot=\"drawer-content\"\n data-state=\"open\"\n data-vaul-drawer-direction={direction}\n ref={mergeRefs(scopeRef)}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") setOpen(false);\n }}\n className={cn(DRAWER_CONTENT_BASE, drawerDirectionClasses[direction], className)}\n {...(props as Record<string, unknown>)}\n >\n {direction === \"bottom\" ? (\n <div\n data-slot=\"drawer-handle\"\n className={DRAWER_HANDLE}\n />\n ) : null}\n {children}\n </div>\n </Portal>\n );\n}\n\nexport function DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(DRAWER_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(DRAWER_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function DrawerTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-title\"\n className={cn(DRAWER_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function DrawerDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-description\"\n className={cn(DRAWER_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const DRAWER_CONTENT_BASE = \"bg-background fixed z-50 flex h-auto border\";\n\nexport const drawerDirectionClasses = {\n \"bottom\": \"inset-x-0 bottom-0 mt-24 max-h-[80vh] flex-col rounded-t-lg border-b-0\",\n \"top\": \"inset-x-0 top-0 mb-24 max-h-[80vh] flex-col rounded-b-lg border-t-0\",\n \"left\": \"inset-y-0 left-0 w-3/4 flex-row border-r sm:max-w-sm\",\n \"right\": \"inset-y-0 right-0 w-3/4 flex-row border-l sm:max-w-sm\",\n} as const;\nexport type DrawerDirection = keyof typeof drawerDirectionClasses;\n\nexport const DRAWER_OVERLAY = \"fixed inset-0 z-50 bg-black/50\";\n\nexport const DRAWER_HANDLE = \"bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full\";\n\nexport const DRAWER_HEADER = \"flex flex-col gap-0.5 p-4 text-center sm:gap-1.5 sm:text-left\";\n\nexport const DRAWER_FOOTER = \"mt-auto flex flex-col gap-2 p-4\";\n\nexport const DRAWER_TITLE = \"text-foreground font-semibold\";\n\nexport const DRAWER_DESCRIPTION = \"text-muted-foreground text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\n\ninterface SelectContextValue {\n value: string;\n setValue: (next: string) => void;\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n}\n\nconst SelectContext = React.createContext<SelectContextValue | null>(null);\n\nfunction useSelect(): SelectContextValue {\n const ctx = React.useContext(SelectContext);\n if (!ctx) throw new Error(\"Select parts must be used within <Select>\");\n return ctx;\n}\n\nexport interface SelectProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function Select({\n value,\n defaultValue = \"\",\n onValueChange,\n open,\n defaultOpen = false,\n onOpenChange,\n children,\n}: SelectProps) {\n const [currentValue, setValue] = useControllableState<string>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n return (\n <SelectContext.Provider\n value={{ value: currentValue, setValue, open: isOpen, setOpen, anchorRef }}\n >\n {children}\n </SelectContext.Provider>\n );\n}\n\nexport interface SelectTriggerProps extends React.ComponentProps<\"button\"> {\n size?: \"sm\" | \"default\";\n}\n\nexport function SelectTrigger({\n className,\n size = \"default\",\n onClick,\n children,\n ...props\n}: SelectTriggerProps) {\n const { open, setOpen, anchorRef } = useSelect();\n return (\n <button\n type=\"button\"\n role=\"combobox\"\n data-slot=\"select-trigger\"\n data-size={size}\n data-state={open ? \"open\" : \"closed\"}\n aria-expanded={open}\n ref={anchorRef as React.Ref<HTMLButtonElement>}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n {children}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-4 opacity-50\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n );\n}\n\nexport interface SelectValueProps extends React.ComponentProps<\"span\"> {\n placeholder?: string;\n}\n\nexport function SelectValue({ className, placeholder, ...props }: SelectValueProps) {\n const { value } = useSelect();\n const isEmpty = value === \"\";\n return (\n <span\n data-slot=\"select-value\"\n {...(isEmpty ? { \"data-placeholder\": \"true\" } : {})}\n className={className}\n {...(props as Record<string, unknown>)}\n >\n {isEmpty ? placeholder : value}\n </span>\n );\n}\n\nexport interface SelectContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n}\n\nexport function SelectContent({\n className,\n side: sideProp = \"bottom\",\n align = \"start\",\n sideOffset = 4,\n children,\n ...props\n}: SelectContentProps) {\n const { open, setOpen, anchorRef } = useSelect();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: sideProp,\n align,\n offset: sideOffset,\n });\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [anchorRef],\n });\n const items = React.Children.toArray(children).filter(React.isValidElement);\n const { activeIndex, setActiveIndex, onKeyDown } = useRovingFocus({\n count: items.length,\n orientation: \"vertical\",\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n role=\"listbox\"\n data-slot=\"select-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n ref={mergeRefs(floatingRef, dismissRef, presRef)}\n style={style}\n tabIndex={-1}\n onKeyDown={onKeyDown}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n <div className=\"p-1\">\n {items.map((child, index) =>\n React.cloneElement(child as React.ReactElement<SelectItemContext>, {\n __index: index,\n __active: index === activeIndex,\n __setActive: setActiveIndex,\n }),\n )}\n </div>\n </div>\n </Portal>\n );\n}\n\ninterface SelectItemContext {\n __index?: number;\n __active?: boolean;\n __setActive?: (i: number) => void;\n}\n\nexport interface SelectItemProps\n extends React.ComponentProps<\"div\">,\n SelectItemContext {\n value: string;\n}\n\nexport function SelectItem({\n className,\n value,\n children,\n __index = 0,\n __active = false,\n __setActive,\n ...props\n}: SelectItemProps) {\n const { value: selectedValue, setValue, setOpen } = useSelect();\n const selected = selectedValue === value;\n return (\n <div\n role=\"option\"\n data-slot=\"select-item\"\n aria-selected={selected}\n tabIndex={__active ? 0 : -1}\n onFocus={() => __setActive?.(__index)}\n onClick={() => {\n setValue(value);\n setOpen(false);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setValue(value);\n setOpen(false);\n }\n }}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n {selected ? (\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-4\"\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </span>\n ) : null}\n <span>{children}</span>\n </div>\n );\n}\n\nexport function SelectGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div role=\"group\" data-slot=\"select-group\" className={className} {...props} />;\n}\n\nexport function SelectLabel({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n );\n}\n\nexport function SelectSeparator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFocusScope } from \"../primitives/focus-scope\";\nimport { Portal } from \"../primitives/portal\";\nimport {\n COMMAND_DIALOG_COMMAND,\n COMMAND_DIALOG_CONTENT,\n COMMAND_DIALOG_OVERLAY,\n COMMAND_EMPTY,\n COMMAND_GROUP,\n COMMAND_INPUT,\n COMMAND_INPUT_WRAPPER,\n COMMAND_ITEM,\n COMMAND_LIST,\n COMMAND_ROOT,\n COMMAND_SEPARATOR,\n COMMAND_SHORTCUT,\n} from \"../generated/command\";\n\ninterface CommandContextValue {\n search: string;\n setSearch: (next: string) => void;\n}\n\nconst CommandContext = React.createContext<CommandContextValue | null>(null);\n\nfunction useCommand(): CommandContextValue {\n const ctx = React.useContext(CommandContext);\n if (!ctx) throw new Error(\"Command parts must be used within <Command>\");\n return ctx;\n}\n\nexport interface CommandProps extends React.ComponentProps<\"div\"> {\n search?: string;\n defaultSearch?: string;\n onSearchChange?: (search: string) => void;\n}\n\nexport function Command({\n className,\n search,\n defaultSearch = \"\",\n onSearchChange,\n children,\n ...props\n}: CommandProps) {\n const [currentSearch, setSearch] = useControllableState<string>({\n ...(search !== undefined ? { value: search } : {}),\n defaultValue: defaultSearch,\n ...(onSearchChange ? { onChange: onSearchChange } : {}),\n });\n return (\n <CommandContext.Provider value={{ search: currentSearch, setSearch }}>\n <div\n data-slot=\"command\"\n className={cn(COMMAND_ROOT, className)}\n {...props}\n >\n {children}\n </div>\n </CommandContext.Provider>\n );\n}\n\nexport interface CommandDialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport function CommandDialog({\n open,\n defaultOpen = false,\n onOpenChange,\n className,\n children,\n}: CommandDialogProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const scopeRef = useFocusScope(isOpen);\n if (!isOpen) return null;\n return (\n <Portal>\n <div\n data-slot=\"command-overlay\"\n className={COMMAND_DIALOG_OVERLAY}\n onClick={() => setOpen(false)}\n />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n data-slot=\"command-dialog\"\n ref={scopeRef}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") setOpen(false);\n }}\n className={cn(COMMAND_DIALOG_CONTENT, className)}\n >\n <Command className={COMMAND_DIALOG_COMMAND}>\n {children}\n </Command>\n </div>\n </Portal>\n );\n}\n\nexport function CommandInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n const { search, setSearch } = useCommand();\n return (\n <div className={COMMAND_INPUT_WRAPPER} data-slot=\"command-input-wrapper\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-4 shrink-0 opacity-50\"\n aria-hidden=\"true\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n <input\n type=\"text\"\n role=\"combobox\"\n data-slot=\"command-input\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className={cn(COMMAND_INPUT, className)}\n {...props}\n />\n </div>\n );\n}\n\nexport function CommandList({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"listbox\"\n data-slot=\"command-list\"\n className={cn(COMMAND_LIST, className)}\n {...props}\n />\n );\n}\n\nexport function CommandEmpty({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const { search } = useCommand();\n const hasQuery = search.trim() !== \"\";\n if (!hasQuery) return null;\n return (\n <div\n data-slot=\"command-empty\"\n className={cn(COMMAND_EMPTY, className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport interface CommandGroupProps extends React.ComponentProps<\"div\"> {\n heading?: string;\n}\n\nexport function CommandGroup({ className, heading, children, ...props }: CommandGroupProps) {\n return (\n <div\n role=\"group\"\n data-slot=\"command-group\"\n className={cn(COMMAND_GROUP, className)}\n {...props}\n >\n {heading ? <div data-slot=\"command-group-heading\">{heading}</div> : null}\n {children}\n </div>\n );\n}\n\nexport interface CommandItemProps\n extends Omit<React.ComponentProps<\"div\">, \"onSelect\"> {\n value: string;\n disabled?: boolean;\n onSelect?: (value: string) => void;\n}\n\nexport function CommandItem({\n className,\n value,\n disabled = false,\n onSelect,\n children,\n ...props\n}: CommandItemProps) {\n const { search } = useCommand();\n const query = search.toLowerCase();\n if (query !== \"\" && !value.toLowerCase().includes(query)) return null;\n return (\n <div\n role=\"option\"\n data-slot=\"command-item\"\n data-disabled={disabled}\n aria-disabled={disabled || undefined}\n tabIndex={-1}\n onClick={() => {\n if (!disabled) onSelect?.(value);\n }}\n className={cn(COMMAND_ITEM, className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport function CommandSeparator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"command-separator\"\n className={cn(COMMAND_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport function CommandShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(COMMAND_SHORTCUT, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const COMMAND_ROOT = \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\";\n\nexport const COMMAND_DIALOG_OVERLAY = \"fixed inset-0 z-50 bg-black/50\";\n\nexport const COMMAND_DIALOG_CONTENT = \"fixed top-1/2 left-1/2 z-50 w-full max-w-lg -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-lg border p-0 shadow-lg\";\n\nexport const COMMAND_DIALOG_COMMAND = \"[&_[data-slot=command-input-wrapper]]:h-12 [&_[data-slot=command-input]]:h-12\";\n\nexport const COMMAND_INPUT_WRAPPER = \"flex h-9 items-center gap-2 border-b px-3\";\n\nexport const COMMAND_INPUT = \"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\";\n\nexport const COMMAND_LIST = \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\";\n\nexport const COMMAND_EMPTY = \"py-6 text-center text-sm\";\n\nexport const COMMAND_GROUP = \"text-foreground [&_[data-slot=command-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[data-slot=command-group-heading]]:px-2 [&_[data-slot=command-group-heading]]:py-1.5 [&_[data-slot=command-group-heading]]:text-xs [&_[data-slot=command-group-heading]]:font-medium\";\n\nexport const COMMAND_ITEM = \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const COMMAND_SEPARATOR = \"bg-border -mx-1 h-px\";\n\nexport const COMMAND_SHORTCUT = \"text-muted-foreground ml-auto text-xs tracking-widest\";\n","// Dep-light chart primitives: the shadcn/recharts wrapper minus recharts.\n//\n// Upstream shadcn `chart` is theming + presentational tooltip/legend wrappers\n// around recharts, which does the actual plotting. We keep the wrappers and\n// drop recharts: `ChartContainer` is a themed SVG host that emits per-key\n// `--color-<key>` custom properties from its `config`, and consumers draw their\n// own <svg>/series inside it. `ChartTooltipContent` and `ChartLegendContent`\n// are purely presentational and take explicit `items` instead of a recharts\n// payload. `ChartTooltip`/`ChartLegend` are passthrough wrappers. `dark:*`\n// selectors are dropped; the recharts-specific `[&_.recharts-*]` selectors are\n// dropped from the container base.\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { CHART_CONTAINER, CHART_LEGEND, CHART_TOOLTIP } from \"../generated/chart\";\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n color?: string;\n };\n};\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\");\n }\n\n return context;\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n ...props\n}: React.ComponentProps<\"div\"> & {\n config: ChartConfig;\n}) {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(CHART_CONTAINER, className)}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n {children}\n </div>\n </ChartContext.Provider>\n );\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(([, c]) => c.color);\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: `[data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => ` --color-${key}: ${itemConfig.color};`)\n .join(\"\\n\")}\n}`,\n }}\n />\n );\n};\n\n// One rendered tooltip/legend row. Replaces the recharts payload.\nexport type ChartItem = {\n label?: React.ReactNode;\n value?: React.ReactNode;\n color?: string;\n};\n\nconst ChartTooltip = ({ children }: { children?: React.ReactNode }) => (\n <>{children}</>\n);\n\nfunction ChartTooltipContent({\n className,\n items = [],\n label,\n hideLabel = false,\n hideIndicator = false,\n labelClassName,\n}: React.ComponentProps<\"div\"> & {\n items?: ChartItem[];\n label?: React.ReactNode;\n hideLabel?: boolean;\n hideIndicator?: boolean;\n labelClassName?: string;\n}) {\n useChart();\n\n if (!items.length) {\n return null;\n }\n\n return (\n <div\n data-slot=\"chart-tooltip\"\n className={cn(CHART_TOOLTIP, className)}\n >\n {!hideLabel && label ? (\n <div className={cn(\"font-medium\", labelClassName)}>{label}</div>\n ) : null}\n <div className=\"grid gap-1.5\">\n {items.map((item, index) => (\n <div\n key={index}\n className={cn(\n \"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 items-center\",\n )}\n >\n {!hideIndicator && (\n <div\n className=\"shrink-0 rounded-[2px] h-2.5 w-2.5\"\n style={\n {\n backgroundColor: item.color,\n borderColor: item.color,\n } as React.CSSProperties\n }\n />\n )}\n <div className=\"flex flex-1 justify-between leading-none items-center\">\n <span className=\"text-muted-foreground\">{item.label}</span>\n {item.value !== undefined && (\n <span className=\"text-foreground font-mono font-medium tabular-nums\">\n {item.value}\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nconst ChartLegend = ({ children }: { children?: React.ReactNode }) => (\n <>{children}</>\n);\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n items,\n}: React.ComponentProps<\"div\"> & {\n hideIcon?: boolean;\n items?: ChartItem[];\n}) {\n const { config } = useChart();\n\n const rows: ChartItem[] =\n items ??\n Object.entries(config).map(([key, c]) => ({\n label: c.label ?? key,\n ...(c.color ? { color: c.color } : {}),\n }));\n\n if (!rows.length) {\n return null;\n }\n\n return (\n <div\n data-slot=\"chart-legend\"\n className={cn(CHART_LEGEND, className)}\n >\n {rows.map((item, index) => (\n <div\n key={index}\n className={cn(\n \"[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3\",\n )}\n >\n {!hideIcon && (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{ backgroundColor: item.color }}\n />\n )}\n {item.label}\n </div>\n ))}\n </div>\n );\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n};\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CHART_CONTAINER = \"flex aspect-video justify-center text-xs [&_.recharts-layer]:outline-hidden [&_.recharts-surface]:outline-hidden [&_svg]:outline-hidden\";\n\nexport const CHART_TOOLTIP = \"border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl\";\n\nexport const CHART_LEGEND = \"flex items-center justify-center gap-4\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { buttonVariants } from \"./button\";\nimport {\n CALENDAR_CAPTION,\n CALENDAR_DAY,\n CALENDAR_DAY_CELL,\n CALENDAR_DAY_EMPTY,\n CALENDAR_DAY_SELECTED,\n CALENDAR_DAY_TODAY,\n CALENDAR_GRID,\n CALENDAR_NAV,\n CALENDAR_NAV_BUTTON,\n CALENDAR_ROOT,\n CALENDAR_WEEK,\n CALENDAR_WEEKDAY,\n CALENDAR_WEEKDAY_ROW,\n} from \"../generated/calendar\";\n\nconst MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\n// Week starts Monday.\nconst WEEKDAYS = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"] as const;\n\nconst CHEVRON_LEFT = \"m15 18-6-6 6-6\";\nconst CHEVRON_RIGHT = \"m9 18 6-6-6-6\";\n\nfunction Chevron({ d }: { d: string }) {\n return (\n <svg\n className=\"size-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <path d={d} />\n </svg>\n );\n}\n\nfunction startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\n// Monday = 0 … Sunday = 6 (the built-in `Date.getDay` is Sunday = 0).\nfunction mondayIndex(d: Date): number {\n return (d.getDay() + 6) % 7;\n}\n\nfunction sameDay(a: Date | undefined, b: Date): boolean {\n return (\n !!a &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport interface CalendarProps {\n /** The currently selected day, if any. */\n selected?: Date;\n /** Fired with the day a user activates. */\n onSelect?: (date: Date) => void;\n /** Controlled displayed month (any day in it is fine). */\n month?: Date;\n /** Uncontrolled initial displayed month. */\n defaultMonth?: Date;\n /** Fired when the displayed month changes via the nav buttons. */\n onMonthChange?: (month: Date) => void;\n /** \"Today\", highlighted in the grid; defaults to the real current date. */\n today?: Date;\n className?: string;\n}\n\n/**\n * A dep-light single-month, single-date picker. Mirrors the landing `Calendar`'s\n * class names while replacing `react-day-picker` with a hand-rolled month grid.\n * Uses the built-in `Date` (a language built-in, not a dependency) for the date\n * math; the Rust mirror does the same math by hand.\n *\n * Simplifications versus the source: one month only (no multi-month), a single\n * selected date (no range/multi), and none of the locale/dropdown/caption\n * features — see the package README.\n */\nexport function Calendar({\n selected,\n onSelect,\n month,\n defaultMonth,\n onMonthChange,\n today = new Date(),\n className,\n}: CalendarProps) {\n const [internal, setInternal] = React.useState(() =>\n startOfMonth(defaultMonth ?? new Date()),\n );\n const view = month ? startOfMonth(month) : internal;\n\n const go = (delta: number) => {\n const next = new Date(view.getFullYear(), view.getMonth() + delta, 1);\n if (!month) setInternal(next);\n onMonthChange?.(next);\n };\n\n const year = view.getFullYear();\n const monthIndex = view.getMonth();\n const caption = `${MONTHS[monthIndex]} ${year}`;\n\n const lead = mondayIndex(view);\n const total = new Date(year, monthIndex + 1, 0).getDate();\n\n // Pad leading blanks then the days, padded out to whole weeks of 7.\n const cells: (number | null)[] = [];\n for (let i = 0; i < lead; i += 1) cells.push(null);\n for (let day = 1; day <= total; day += 1) cells.push(day);\n while (cells.length % 7 !== 0) cells.push(null);\n\n const weeks: (number | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));\n\n const navClass = buttonVariants({\n variant: \"ghost\",\n size: \"icon\",\n className: CALENDAR_NAV_BUTTON,\n });\n\n return (\n <div\n data-slot=\"calendar\"\n role=\"application\"\n className={cn(CALENDAR_ROOT, className)}\n >\n <div className={CALENDAR_NAV}>\n <button\n type=\"button\"\n className={navClass}\n aria-label=\"Previous month\"\n onClick={() => go(-1)}\n >\n <Chevron d={CHEVRON_LEFT} />\n </button>\n <div className={CALENDAR_CAPTION}>{caption}</div>\n <button\n type=\"button\"\n className={navClass}\n aria-label=\"Next month\"\n onClick={() => go(1)}\n >\n <Chevron d={CHEVRON_RIGHT} />\n </button>\n </div>\n <table className={CALENDAR_GRID} role=\"grid\">\n <thead>\n <tr className={CALENDAR_WEEKDAY_ROW}>\n {WEEKDAYS.map(wd => (\n <th\n key={wd}\n scope=\"col\"\n className={CALENDAR_WEEKDAY}\n >\n {wd}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((week, wi) => (\n <tr key={wi} className={CALENDAR_WEEK}>\n {week.map((cell, ci) => {\n if (cell === null) {\n return (\n <td\n key={ci}\n className={CALENDAR_DAY_EMPTY}\n />\n );\n }\n const date = new Date(year, monthIndex, cell);\n const isSelected = sameDay(selected, date);\n const isToday = sameDay(today, date);\n return (\n <td\n key={ci}\n role=\"gridcell\"\n aria-selected={isSelected}\n className={CALENDAR_DAY_CELL}\n >\n <button\n type=\"button\"\n data-slot=\"calendar-day\"\n data-selected={isSelected}\n data-today={isToday}\n onClick={() => onSelect?.(date)}\n className={cn(\n buttonVariants({\n variant: \"ghost\",\n size: \"icon\",\n className: CALENDAR_DAY,\n }),\n isSelected\n ? CALENDAR_DAY_SELECTED\n : isToday\n ? CALENDAR_DAY_TODAY\n : undefined,\n )}\n >\n {cell}\n </button>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CALENDAR_ROOT = \"bg-background p-3 w-fit\";\n\nexport const CALENDAR_NAV_BUTTON = \"size-8 p-0 select-none\";\n\nexport const CALENDAR_NAV = \"flex items-center justify-between gap-1 w-full px-1\";\n\nexport const CALENDAR_CAPTION = \"text-sm font-medium select-none\";\n\nexport const CALENDAR_GRID = \"w-full border-collapse mt-4\";\n\nexport const CALENDAR_WEEKDAY_ROW = \"flex\";\n\nexport const CALENDAR_WEEKDAY = \"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none\";\n\nexport const CALENDAR_WEEK = \"flex w-full mt-2\";\n\nexport const CALENDAR_DAY_EMPTY = \"relative w-full h-full p-0 aspect-square select-none\";\n\nexport const CALENDAR_DAY_CELL = \"relative w-full h-full p-0 text-center aspect-square select-none\";\n\nexport const CALENDAR_DAY = \"size-auto w-full aspect-square font-normal leading-none\";\n\nexport const CALENDAR_DAY_SELECTED = \"bg-primary text-primary-foreground\";\n\nexport const CALENDAR_DAY_TODAY = \"bg-accent text-accent-foreground rounded-md\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n TOAST_BASE,\n TOAST_CLOSE,\n TOAST_CONTENT,\n TOAST_TITLE,\n TOASTER_BASE,\n positionClasses,\n toastVariantClasses,\n type ToastPosition,\n type ToastVariant,\n} from \"../generated/sonner\";\n\nexport type { ToastPosition, ToastVariant };\n\n/**\n * Lifecycle phase of a toast. It is added `\"open\"` (plays the enter keyframe);\n * {@link ToastFn.dismiss} flips it to `\"closing\"` (plays the exit keyframe) and\n * the live node is dropped once the exit `animationend` fires. Mirrors Rust's\n * `ToastState` enum and the `data-state` the shared `tokens.css` keys on.\n */\nexport type ToastState = \"open\" | \"closing\";\n\nexport interface ToastOptions {\n description?: React.ReactNode;\n /**\n * Auto-dismiss delay in ms (default 4000). Pass `Infinity` for a **persistent**\n * toast that never times out — it stays until the close button, a swipe, or\n * `toast.dismiss(id)` removes it. Hovering the stack also pauses the countdown.\n */\n duration?: number;\n variant?: ToastVariant;\n}\n\nexport interface Toast {\n id: number;\n message: React.ReactNode;\n description?: React.ReactNode;\n duration: number;\n variant: ToastVariant;\n state: ToastState;\n}\n\nconst DEFAULT_DURATION = 4000;\n\n// Swipe-to-dismiss tuning (pointer physics, TS-only — Rust stays render-only).\n// Values from Sonner: a horizontal drag past 45px, or a flick faster than\n// 0.11px/ms, flings the toast off; anything short snaps back.\nconst SWIPE_THRESHOLD = 45;\nconst SWIPE_VELOCITY = 0.11;\nconst SWIPE_FLING_MS = 200;\n\n/**\n * Module-level toast store: a plain observable holding the live toast array.\n * `toast(...)` mutates it and notifies subscribers; the {@link Toaster}\n * component is the sole subscriber. This is the JS-native global the Rust\n * mirror cannot have — Dioxus has no clean cross-component mutable singleton,\n * so it uses a `ToasterProvider` + `use_toaster()` hook instead.\n */\nconst store = (() => {\n let toasts: Toast[] = [];\n let id = 0;\n const listeners = new Set<(toasts: Toast[]) => void>();\n\n const emit = () => {\n for (const listener of listeners) listener(toasts);\n };\n\n const add = (message: React.ReactNode, opts: ToastOptions = {}): number => {\n const next: Toast = {\n id: ++id,\n message,\n description: opts.description,\n duration: opts.duration ?? DEFAULT_DURATION,\n variant: opts.variant ?? \"default\",\n state: \"open\",\n };\n toasts = [...toasts, next];\n emit();\n return next.id;\n };\n\n // Begins the exit animation: flip the toast to `closing` (`data-state=closed`)\n // and keep it mounted so the exit keyframe can play. The live node is dropped\n // by `remove`, wired to the exit `animationend` — no timer matched to the CSS.\n const dismiss = (toastId: number) => {\n toasts = toasts.map((t) =>\n t.id === toastId ? { ...t, state: \"closing\" as const } : t,\n );\n emit();\n };\n\n // Drops a toast outright. Wired to the exit `animationend`; the guard that it\n // is actually `closing` (the enter `animationend` fires too) lives at the call\n // site in {@link ToastItem}.\n const remove = (toastId: number) => {\n toasts = toasts.filter((t) => t.id !== toastId);\n emit();\n };\n\n const subscribe = (listener: (toasts: Toast[]) => void): (() => void) => {\n listeners.add(listener);\n listener(toasts);\n return () => {\n listeners.delete(listener);\n };\n };\n\n return { add, dismiss, remove, subscribe };\n})();\n\nexport interface ToastFn {\n (message: React.ReactNode, opts?: ToastOptions): number;\n success: (message: React.ReactNode, opts?: ToastOptions) => number;\n error: (message: React.ReactNode, opts?: ToastOptions) => number;\n info: (message: React.ReactNode, opts?: ToastOptions) => number;\n warning: (message: React.ReactNode, opts?: ToastOptions) => number;\n dismiss: (id: number) => void;\n}\n\n/**\n * Global toast handle. `toast(msg)` enqueues a neutral toast; the `.success`,\n * `.error`, `.info` and `.warning` helpers pin the variant; `toast.dismiss(id)`\n * removes one early. Mirrors Rust's `use_toaster()` handle methods.\n */\nexport const toast: ToastFn = Object.assign(\n (message: React.ReactNode, opts?: ToastOptions) => store.add(message, opts),\n {\n success: (message: React.ReactNode, opts?: ToastOptions) =>\n store.add(message, { ...opts, variant: \"success\" }),\n error: (message: React.ReactNode, opts?: ToastOptions) =>\n store.add(message, { ...opts, variant: \"error\" }),\n info: (message: React.ReactNode, opts?: ToastOptions) =>\n store.add(message, { ...opts, variant: \"info\" }),\n warning: (message: React.ReactNode, opts?: ToastOptions) =>\n store.add(message, { ...opts, variant: \"warning\" }),\n dismiss: (id: number) => store.dismiss(id),\n },\n);\n\n// Sonner-style stacking: only the front VISIBLE_TOASTS show collapsed; GAP is\n// the px between them once expanded.\nconst VISIBLE_TOASTS = 3;\nconst GAP = 14;\n\ninterface ToastItemProps {\n toast: Toast;\n index: number; // 0 = front / newest\n total: number;\n offset: number; // px from the pinned edge to this toast's expanded slot\n paused: boolean; // the stack is hovered/focused — hold the auto-dismiss\n reportHeight: (id: number, height: number) => void;\n removeHeight: (id: number) => void;\n}\n\nfunction ToastItem({\n toast: t,\n index,\n total,\n offset,\n paused,\n reportHeight,\n removeHeight,\n}: ToastItemProps) {\n const ref = React.useRef<HTMLLIElement>(null);\n const [height, setHeight] = React.useState(0);\n // remaining auto-dismiss budget (banked across hover pauses), the last start\n // timestamp, and the swipe-fling fallback timer.\n const remainingRef = React.useRef(t.duration);\n const startedRef = React.useRef(0);\n const flingRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined,\n );\n const dragRef = React.useRef<{ x: number; time: number; dx: number } | null>(\n null,\n );\n\n // measure the *natural* height for the stack maths; re-measure on content\n // change. Back toasts are clamped to --front-height by the CSS, so unset the\n // height for the read (Sonner does the same) then hand it back to the CSS.\n React.useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n el.style.height = \"auto\";\n const h = el.getBoundingClientRect().height;\n el.style.height = \"\";\n if (h) {\n setHeight(h);\n reportHeight(t.id, h);\n }\n }, [t.id, t.message, t.description, reportHeight]);\n\n React.useEffect(() => () => removeHeight(t.id), [t.id, removeHeight]);\n\n // Auto-dismiss, pausable on hover. While `paused` (or closing, or a persistent\n // `duration: Infinity`) no timer runs; the cleanup banks the elapsed time so a\n // resume continues from the remaining budget rather than restarting.\n React.useEffect(() => {\n if (t.duration === Infinity || t.state === \"closing\" || paused) return;\n startedRef.current = Date.now();\n const id = setTimeout(() => store.dismiss(t.id), remainingRef.current);\n return () => {\n clearTimeout(id);\n remainingRef.current = Math.max(\n 0,\n remainingRef.current - (Date.now() - startedRef.current),\n );\n };\n }, [paused, t.id, t.duration, t.state]);\n\n // cancel the swipe-fling fallback if the toast unmounts first\n React.useEffect(\n () => () => {\n if (flingRef.current) clearTimeout(flingRef.current);\n },\n [],\n );\n\n // exit rides the transition: a closing toast slides back off and is dropped on\n // the transform's `transitionend` (guarded so stack repositioning never fires\n // it). No host timer — keeps parity with the Dioxus port.\n const onTransitionEnd = (e: React.TransitionEvent<HTMLLIElement>) => {\n if (t.state === \"closing\" && e.propertyName === \"transform\") {\n store.remove(t.id);\n }\n };\n\n // ── swipe-to-dismiss (horizontal pointer drag) ──────────────────────────\n // Tracked through the `--swipe-x` var so it *composes* with the stack\n // transform (`var(--y) translateX(var(--swipe-x))`) instead of overriding it.\n const onPointerDown = (e: React.PointerEvent<HTMLLIElement>) => {\n const el = ref.current;\n if (!el || e.button > 0 || t.state === \"closing\") return;\n if ((e.target as HTMLElement).closest('[data-slot=\"toast-close\"]')) return;\n // auto-dismiss is already paused (a swipe means the pointer is over the stack)\n dragRef.current = { x: e.clientX, time: e.timeStamp, dx: 0 };\n el.setAttribute(\"data-swiping\", \"true\"); // CSS drops the transition for 1:1 tracking\n try {\n el.setPointerCapture?.(e.pointerId);\n } catch {\n // jsdom / unsupported — capture is a nice-to-have, the drag works without it\n }\n };\n\n const onPointerMove = (e: React.PointerEvent<HTMLLIElement>) => {\n const drag = dragRef.current;\n const el = ref.current;\n if (!drag || !el) return;\n const dx = e.clientX - drag.x;\n drag.dx = dx;\n const dist = el.offsetWidth || 256;\n el.style.setProperty(\"--swipe-x\", `${dx}px`);\n el.style.opacity = `${Math.max(0, 1 - Math.abs(dx) / dist)}`;\n };\n\n const onPointerEnd = (e: React.PointerEvent<HTMLLIElement>) => {\n const drag = dragRef.current;\n const el = ref.current;\n if (!drag || !el) return;\n dragRef.current = null;\n el.removeAttribute(\"data-swiping\"); // CSS restores the transition\n const dt = e.timeStamp - drag.time;\n const velocity = dt > 0 ? Math.abs(drag.dx) / dt : 0;\n if (\n drag.dx !== 0 &&\n (Math.abs(drag.dx) >= SWIPE_THRESHOLD || velocity > SWIPE_VELOCITY)\n ) {\n el.style.setProperty(\"--swipe-x\", `${drag.dx > 0 ? 150 : -150}%`);\n el.style.opacity = \"0\";\n const remove = () => store.remove(t.id);\n el.addEventListener(\"transitionend\", remove, { once: true });\n flingRef.current = setTimeout(remove, SWIPE_FLING_MS + 50); // fallback if transitionend is missed\n } else {\n // snap back: clear the swipe offset (the transition carries it home), then\n // hand styling back to the CSS. Auto-dismiss stays paused while hovered and\n // re-arms from the remaining budget once the pointer leaves.\n el.style.setProperty(\"--swipe-x\", \"0px\");\n el.style.opacity = \"1\";\n el.addEventListener(\n \"transitionend\",\n () => {\n el.style.removeProperty(\"--swipe-x\");\n el.style.opacity = \"\";\n },\n { once: true },\n );\n }\n };\n\n return (\n <li\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n data-slot=\"toast\"\n data-variant={t.variant}\n data-state={t.state === \"closing\" ? \"closed\" : \"open\"}\n data-front={index === 0}\n data-visible={index < VISIBLE_TOASTS}\n onTransitionEnd={onTransitionEnd}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerEnd}\n onPointerCancel={onPointerEnd}\n style={\n {\n \"--index\": index,\n \"--z-index\": total - index,\n \"--offset\": `${offset}px`,\n \"--initial-height\": `${height}px`,\n } as React.CSSProperties\n }\n className={cn(\n TOAST_BASE,\n \"touch-pan-y select-none\",\n toastVariantClasses[t.variant],\n )}\n >\n <div className={TOAST_CONTENT}>\n <div className={TOAST_TITLE}>{t.message}</div>\n {t.description ? (\n <div className=\"text-muted-foreground text-sm\">{t.description}</div>\n ) : null}\n </div>\n <button\n type=\"button\"\n aria-label=\"Close\"\n data-slot=\"toast-close\"\n onClick={() => store.dismiss(t.id)}\n className={TOAST_CLOSE}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/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 18M6 6l12 12\" />\n </svg>\n </button>\n </li>\n );\n}\n\nexport interface ToasterProps extends React.ComponentProps<\"ol\"> {\n position?: ToastPosition;\n}\n\n/**\n * Renders the live toast stack from the module store. Fixed-positioned per\n * `position` (default `bottom-right`).\n *\n * Stacking mirrors Sonner: toasts pile up collapsed (the front three peeking,\n * each scaled + lifted by depth and clamped to the front toast's height) and\n * spread into a list on hover / keyboard focus — driven by the measured\n * `--front-height`/`--offset` vars and the `data-stack` CSS in `tokens.css`.\n * Each toast auto-dismisses after its `duration` (default 4000ms) via the same\n * animated `dismiss` as the close button (`data-state=\"closed\"` → slide out →\n * unmount on `transitionend`), and is swipe-to-dismiss (horizontal drag, TS-only\n * pointer physics). Single dark palette — no theme switching.\n */\nexport function Toaster({\n position = \"bottom-right\",\n className,\n ...props\n}: ToasterProps) {\n const [toasts, setToasts] = React.useState<Toast[]>([]);\n const [heights, setHeights] = React.useState<Map<number, number>>(new Map());\n const [paused, setPaused] = React.useState(false);\n\n React.useEffect(() => store.subscribe(setToasts), []);\n\n // Pause auto-dismiss while the stack is hovered or keyboard-focused (Sonner\n // does the same). pointerover/out + focusin/out bubble from the toasts, so they\n // fire even though the <ol> itself is pointer-events:none; the contains() guard\n // keeps it paused while moving *within* the stack.\n const onEnter = () => setPaused(true);\n const onLeave = (e: React.PointerEvent | React.FocusEvent) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) {\n setPaused(false);\n }\n };\n\n const reportHeight = React.useCallback((id: number, h: number) => {\n setHeights((prev) => {\n if (prev.get(id) === h) return prev;\n const next = new Map(prev);\n next.set(id, h);\n return next;\n });\n }, []);\n const removeHeight = React.useCallback((id: number) => {\n setHeights((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Map(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n const yPosition = position.startsWith(\"top\") ? \"top\" : \"bottom\";\n const ordered = [...toasts].reverse(); // newest first → front of the stack\n // front toast's height; until it's measured fall back to the tallest known one\n // so the back toasts don't clamp to 0 for a frame when a new toast arrives\n const known = [...heights.values()];\n const frontHeight = ordered[0]\n ? (heights.get(ordered[0].id) ?? (known.length ? Math.max(...known) : 0))\n : 0;\n\n // cumulative offset: heights of the toasts in front of this one + index * GAP\n let sum = 0;\n const offsets = ordered.map((t, i) => {\n const o = sum + i * GAP;\n sum += heights.get(t.id) ?? 0;\n return o;\n });\n\n return (\n <ol\n data-slot=\"toaster\"\n data-position={position}\n data-y-position={yPosition}\n data-stack=\"\"\n style={\n {\n \"--front-height\": `${frontHeight}px`,\n \"--gap\": `${GAP}px`,\n } as React.CSSProperties\n }\n className={cn(\n TOASTER_BASE,\n positionClasses[position],\n className,\n )}\n {...props}\n onPointerOver={onEnter}\n onPointerOut={onLeave}\n onFocus={onEnter}\n onBlur={onLeave}\n >\n {ordered.map((t, i) => (\n <ToastItem\n key={t.id}\n toast={t}\n index={i}\n total={ordered.length}\n offset={offsets[i]!}\n paused={paused}\n reportHeight={reportHeight}\n removeHeight={removeHeight}\n />\n ))}\n </ol>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TOAST_BASE = \"pointer-events-auto flex w-full items-start gap-3 rounded-md border p-4 text-sm shadow-lg\";\n\nexport const toastVariantClasses = {\n \"default\": \"bg-popover text-popover-foreground border-border\",\n \"success\": \"bg-popover text-popover-foreground border-main-accent-t2/40\",\n \"error\": \"bg-popover text-popover-foreground border-destructive/50\",\n \"info\": \"bg-popover text-popover-foreground border-border\",\n \"warning\": \"bg-popover text-popover-foreground border-border\",\n} as const;\nexport type ToastVariant = keyof typeof toastVariantClasses;\n\nexport const TOASTER_BASE = \"pointer-events-none fixed z-100 w-[calc(100%-2rem)] max-w-sm\";\n\nexport const positionClasses = {\n \"top-left\": \"top-4 left-4\",\n \"top-center\": \"top-4 left-1/2 -translate-x-1/2\",\n \"top-right\": \"top-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n \"bottom-center\": \"bottom-4 left-1/2 -translate-x-1/2\",\n \"bottom-right\": \"bottom-4 right-4\",\n} as const;\nexport type ToastPosition = keyof typeof positionClasses;\n\nexport const TOAST_CLOSE = \"text-foreground/50 hover:text-foreground shrink-0 transition-colors\";\n\nexport const TOAST_CONTENT = \"flex-1 space-y-1\";\n\nexport const TOAST_TITLE = \"font-medium\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Label } from \"./label\";\nimport { Slot } from \"../primitives/slot\";\nimport { FORM_DESCRIPTION, FORM_ITEM, FORM_MESSAGE } from \"../generated/form\";\n\n/**\n * Dep-light, presentational form primitives. We keep the ARIA id-wiring of\n * shadcn's form (label/control/description/message share an id so\n * `aria-describedby`/`id` line up) but drop `react-hook-form`'s state engine:\n * validation and field state are the consumer's job. `FormItem` mints an id via\n * `React.useId` and exposes it through `FormItemContext`.\n */\ntype FormItemContextValue = {\n id: string;\n formItemId: string;\n formDescriptionId: string;\n formMessageId: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue | null>(null);\n\nfunction useFormItem(): FormItemContextValue {\n const ctx = React.useContext(FormItemContext);\n if (!ctx) {\n throw new Error(\"Form parts must be used within <FormItem>\");\n }\n return ctx;\n}\n\nexport function Form({ ...props }: React.ComponentProps<\"form\">) {\n return <form data-slot=\"form\" {...props} />;\n}\n\nexport function FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId();\n const value = React.useMemo<FormItemContextValue>(\n () => ({\n id,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n }),\n [id],\n );\n\n return (\n <FormItemContext.Provider value={value}>\n <div data-slot=\"form-item\" className={cn(FORM_ITEM, className)} {...props} />\n </FormItemContext.Provider>\n );\n}\n\nexport function FormLabel({\n className,\n error,\n ...props\n}: React.ComponentProps<typeof Label> & { error?: boolean }) {\n const { formItemId } = useFormItem();\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nexport function FormControl({\n error,\n ...props\n}: React.ComponentProps<typeof Slot> & { error?: boolean }) {\n const { formItemId, formDescriptionId, formMessageId } = useFormItem();\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nexport function FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormItem();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(FORM_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport function FormMessage({ className, children, ...props }: React.ComponentProps<\"p\">) {\n const { formMessageId } = useFormItem();\n\n if (!children) {\n return null;\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(FORM_MESSAGE, className)}\n {...props}\n >\n {children}\n </p>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const FORM_ITEM = \"grid gap-2\";\n\nexport const FORM_LABEL = \"text-destructive\";\n\nexport const FORM_DESCRIPTION = \"text-muted-foreground text-sm\";\n\nexport const FORM_MESSAGE = \"text-destructive text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n RESIZABLE_GROUP,\n RESIZABLE_HANDLE,\n RESIZABLE_HANDLE_GRIP,\n RESIZABLE_PANEL,\n} from \"../generated/resizable\";\n\nexport type ResizableDirection = \"horizontal\" | \"vertical\";\n\ninterface ResizableContextValue {\n sizes: number[];\n setSizes: React.Dispatch<React.SetStateAction<number[]>>;\n register: (index: number, defaultSize: number) => void;\n direction: ResizableDirection;\n keyboardStep: number;\n groupRef: React.RefObject<HTMLDivElement | null>;\n}\n\nconst ResizableContext = React.createContext<ResizableContextValue | null>(null);\n\nfunction useResizable(): ResizableContextValue {\n const ctx = React.useContext(ResizableContext);\n if (!ctx)\n throw new Error(\"Resizable parts must be used within a ResizablePanelGroup\");\n return ctx;\n}\n\n/** Grows the panel before `index` by `delta` %, shrinking the one after it. */\nfunction redistribute(sizes: number[], index: number, delta: number): number[] {\n const before = sizes[index];\n const after = sizes[index + 1];\n if (before === undefined || after === undefined) return sizes;\n const moved = Math.max(-before, Math.min(after, delta));\n const next = sizes.slice();\n next[index] = before + moved;\n next[index + 1] = after - moved;\n return next;\n}\n\nexport interface ResizablePanelGroupProps\n extends React.ComponentProps<\"div\"> {\n direction?: ResizableDirection;\n keyboardStep?: number;\n onLayout?: (sizes: number[]) => void;\n}\n\nexport function ResizablePanelGroup({\n className,\n direction = \"horizontal\",\n keyboardStep = 10,\n onLayout,\n children,\n ...props\n}: ResizablePanelGroupProps) {\n const [sizes, setSizes] = React.useState<number[]>([]);\n const groupRef = React.useRef<HTMLDivElement>(null);\n\n const register = React.useCallback((index: number, defaultSize: number) => {\n setSizes((prev) => {\n if (prev[index] !== undefined) return prev;\n const next = prev.slice();\n while (next.length <= index) next.push(0);\n next[index] = defaultSize;\n return next;\n });\n }, []);\n\n React.useEffect(() => {\n if (sizes.length) onLayout?.(sizes);\n }, [sizes, onLayout]);\n\n const value = React.useMemo<ResizableContextValue>(\n () => ({ sizes, setSizes, register, direction, keyboardStep, groupRef }),\n [sizes, register, direction, keyboardStep],\n );\n\n return (\n <ResizableContext.Provider value={value}>\n <div\n ref={groupRef}\n data-slot=\"resizable-panel-group\"\n data-panel-group-direction={direction}\n className={cn(RESIZABLE_GROUP, className)}\n {...props}\n >\n {children}\n </div>\n </ResizableContext.Provider>\n );\n}\n\nexport interface ResizablePanelProps extends React.ComponentProps<\"div\"> {\n index: number;\n defaultSize?: number;\n}\n\nexport function ResizablePanel({\n className,\n index,\n defaultSize = 50,\n style,\n children,\n ...props\n}: ResizablePanelProps) {\n const { sizes, register } = useResizable();\n React.useEffect(() => {\n register(index, defaultSize);\n }, [register, index, defaultSize]);\n const basis = sizes[index] ?? defaultSize;\n return (\n <div\n data-slot=\"resizable-panel\"\n className={cn(RESIZABLE_PANEL, className)}\n style={{ flex: `${basis} 1 0%`, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport interface ResizableHandleProps extends React.ComponentProps<\"div\"> {\n index: number;\n withHandle?: boolean;\n}\n\nexport function ResizableHandle({\n className,\n index,\n withHandle,\n children,\n ...props\n}: ResizableHandleProps) {\n const { setSizes, direction, keyboardStep, groupRef } = useResizable();\n const draggingRef = React.useRef(false);\n\n const resize = React.useCallback(\n (delta: number) => setSizes((prev) => redistribute(prev, index, delta)),\n [setSizes, index],\n );\n\n const onPointerMove = React.useCallback(\n (event: PointerEvent) => {\n if (!draggingRef.current) return;\n const rect = groupRef.current?.getBoundingClientRect();\n if (!rect) return;\n const span = direction === \"vertical\" ? rect.height : rect.width;\n if (span <= 0) return;\n const px = direction === \"vertical\" ? event.movementY : event.movementX;\n resize((px / span) * 100);\n },\n [direction, resize, groupRef],\n );\n\n const onPointerUp = React.useCallback(() => {\n draggingRef.current = false;\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerUp);\n }, [onPointerMove]);\n\n const onPointerDown = (event: React.PointerEvent) => {\n event.preventDefault();\n draggingRef.current = true;\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", onPointerUp);\n };\n\n React.useEffect(() => () => onPointerUp(), [onPointerUp]);\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n let delta: number;\n switch (event.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n delta = -keyboardStep;\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n delta = keyboardStep;\n break;\n default:\n return;\n }\n if (\n (direction === \"horizontal\" &&\n (event.key === \"ArrowUp\" || event.key === \"ArrowDown\")) ||\n (direction === \"vertical\" &&\n (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\"))\n )\n return;\n event.preventDefault();\n resize(delta);\n };\n\n return (\n <div\n data-slot=\"resizable-handle\"\n data-panel-group-direction={direction}\n role=\"separator\"\n aria-orientation={direction === \"horizontal\" ? \"vertical\" : \"horizontal\"}\n tabIndex={0}\n className={cn(RESIZABLE_HANDLE, className)}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n {...props}\n >\n {withHandle && (\n <div className={RESIZABLE_HANDLE_GRIP}>\n <svg\n className=\"size-2.5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"15\"\n height=\"15\"\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 <circle cx=\"9\" cy=\"12\" r=\"1\" />\n <circle cx=\"9\" cy=\"5\" r=\"1\" />\n <circle cx=\"9\" cy=\"19\" r=\"1\" />\n <circle cx=\"15\" cy=\"12\" r=\"1\" />\n <circle cx=\"15\" cy=\"5\" r=\"1\" />\n <circle cx=\"15\" cy=\"19\" r=\"1\" />\n </svg>\n </div>\n )}\n {children}\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const RESIZABLE_GROUP = \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\";\n\nexport const RESIZABLE_PANEL = \"relative\";\n\nexport const RESIZABLE_HANDLE = \"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90\";\n\nexport const RESIZABLE_HANDLE_GRIP = \"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border\";\n"],"mappings":"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","names":["Slot","React","React","React","React","React","React","React","jsx","jsx","jsx","jsx","jsx","jsx","jsx","React","jsx","jsx","jsxs","React","jsx","jsx","Fragment","jsx","jsxs","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsx","jsx","jsx","jsxs","jsx","React","jsx","jsxs","React","jsx","React","jsx","jsx","React","jsx","jsx","jsx","React","jsx","React","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","Fragment","jsx","jsxs","React","jsx","jsxs","React","Fragment","jsx","React","jsx","React","jsx","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","Fragment","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","XIcon","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","Fragment","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","React","jsx","jsxs"]}
1
+ {"version":3,"sources":["../src/lib/cn.ts","../src/primitives/slot.tsx","../src/primitives/use-controllable-state.ts","../src/primitives/portal.tsx","../src/primitives/dismissable-layer.tsx","../src/primitives/use-floating.ts","../src/primitives/focus-scope.tsx","../src/primitives/presence.ts","../src/primitives/use-roving-focus.ts","../src/primitives/use-hover-intent.ts","../src/primitives/merge-refs.ts","../src/components/alert.tsx","../src/generated/alert.ts","../src/components/avatar.tsx","../src/generated/avatar.ts","../src/components/badge.tsx","../src/generated/badge.ts","../src/components/breadcrumb.tsx","../src/generated/breadcrumb.ts","../src/components/button.tsx","../src/generated/button.ts","../src/components/button-group.tsx","../src/generated/button-group.ts","../src/components/card.tsx","../src/generated/card.ts","../src/components/empty.tsx","../src/generated/empty.ts","../src/components/field.tsx","../src/components/label.tsx","../src/generated/label.ts","../src/generated/field.ts","../src/components/section-descriptor.tsx","../src/components/footer.tsx","../src/components/container.tsx","../src/generated/container.ts","../src/components/logo.tsx","../src/components/input.tsx","../src/generated/input.ts","../src/components/textarea.tsx","../src/generated/textarea.ts","../src/components/input-group.tsx","../src/generated/input-group.ts","../src/components/item.tsx","../src/components/separator.tsx","../src/generated/separator.ts","../src/generated/item.ts","../src/components/kbd.tsx","../src/generated/kbd.ts","../src/components/pagination.tsx","../src/components/progress.tsx","../src/generated/progress.ts","../src/components/skeleton.tsx","../src/generated/skeleton.ts","../src/components/spinner.tsx","../src/components/status-screen.tsx","../src/components/table.tsx","../src/generated/table.ts","../src/components/accordion.tsx","../src/generated/accordion.ts","../src/components/collapsible.tsx","../src/components/tabs.tsx","../src/generated/tabs.ts","../src/components/toggle.tsx","../src/generated/toggle.ts","../src/components/toggle-group.tsx","../src/components/switch.tsx","../src/components/checkbox.tsx","../src/components/radio-group.tsx","../src/generated/radio-group.ts","../src/components/slider.tsx","../src/generated/slider.ts","../src/components/scroll-area.tsx","../src/generated/scroll-area.ts","../src/components/sidebar.tsx","../src/generated/sidebar.ts","../src/components/carousel.tsx","../src/generated/carousel.ts","../src/components/input-otp.tsx","../src/generated/input-otp.ts","../src/components/tooltip.tsx","../src/generated/tooltip.ts","../src/components/popover.tsx","../src/generated/popover.ts","../src/components/info-tip.tsx","../src/components/hover-card.tsx","../src/generated/hover-card.ts","../src/components/dropdown-menu.tsx","../src/generated/dropdown-menu.ts","../src/components/context-menu.tsx","../src/generated/context-menu.ts","../src/components/menubar.tsx","../src/generated/menubar.ts","../src/components/navigation-menu.tsx","../src/generated/navigation-menu.ts","../src/components/dialog.tsx","../src/generated/dialog.ts","../src/components/alert-dialog.tsx","../src/generated/alert-dialog.ts","../src/components/sheet.tsx","../src/generated/sheet.ts","../src/components/drawer.tsx","../src/generated/drawer.ts","../src/components/select.tsx","../src/components/command.tsx","../src/generated/command.ts","../src/components/chart.tsx","../src/generated/chart.ts","../src/components/calendar.tsx","../src/generated/calendar.ts","../src/components/sonner.tsx","../src/generated/sonner.ts","../src/components/form.tsx","../src/generated/form.ts","../src/components/resizable.tsx","../src/generated/resizable.ts"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Fuses class fragments into one string with real Tailwind conflict resolution:\n * `clsx` drops falsy fragments and joins the rest, `tailwind-merge` resolves\n * conflicting utilities so the rightmost wins (`cn(\"p-4\", \"p-2\") === \"p-2\"`). A\n * caller's `className` override, passed last, therefore beats the base classes.\n *\n * The Rust mirror is the `cn!` macro in `ev_lib::uikit` (`tailwind_fuse::tw_merge!`).\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/**\n * Minimal `asChild` mechanism — the dep-light replacement for\n * `@radix-ui/react-slot`. Renders by cloning its single child, merging the\n * Slot's own props onto it: `className` is fused with `cn`, event handlers are\n * chained (child's runs first, then ours), and `style` objects are shallow\n * merged. Refs are composed so both the caller's and the child's ref fire.\n *\n * There is no Rust counterpart: Dioxus composition is expressed with `children`\n * directly, so `asChild` is a TS-only ergonomic.\n */\nexport interface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>(function Slot(\n { children, ...slotProps },\n forwardedRef,\n) {\n if (!React.isValidElement(children)) {\n return React.Children.count(children) > 1\n ? React.Children.only(null)\n : null;\n }\n\n const child = children as React.ReactElement<Record<string, unknown>>;\n const childProps = child.props;\n\n const merged: Record<string, unknown> = { ...slotProps, ...childProps };\n\n for (const key of Object.keys(slotProps)) {\n const slotValue = (slotProps as Record<string, unknown>)[key];\n const childValue = childProps[key];\n if (/^on[A-Z]/.test(key) && typeof slotValue === \"function\") {\n merged[key] =\n typeof childValue === \"function\"\n ? (...args: unknown[]) => {\n (childValue as (...a: unknown[]) => void)(...args);\n (slotValue as (...a: unknown[]) => void)(...args);\n }\n : slotValue;\n } else if (key === \"style\") {\n merged[key] = { ...(slotValue as object), ...(childValue as object) };\n } else if (key === \"className\") {\n merged[key] = cn(slotValue as string, childValue as string);\n }\n }\n\n merged[\"ref\"] = composeRefs(forwardedRef, (child as { ref?: React.Ref<unknown> }).ref);\n\n return React.cloneElement(child, merged);\n});\n\nfunction composeRefs<T>(...refs: Array<React.Ref<T> | undefined>): React.RefCallback<T> {\n return (node) => {\n for (const ref of refs) {\n if (typeof ref === \"function\") ref(node);\n else if (ref != null) (ref as React.MutableRefObject<T | null>).current = node;\n }\n };\n}\n","import * as React from \"react\";\n\n/**\n * Controlled/uncontrolled state, the dep-light equivalent of Radix's\n * `useControllableState`. When `value` is provided the component is controlled\n * (the hook returns it and routes writes through `onChange`); otherwise it owns\n * an internal `useState` seeded from `defaultValue`.\n *\n * The Rust mirror is `use_controllable_signal` in `ev_lib::uikit`.\n */\nexport function useControllableState<T>(opts: {\n value?: T | undefined;\n defaultValue: T;\n onChange?: ((value: T) => void) | undefined;\n}): [T, (next: T) => void] {\n const { value, defaultValue, onChange } = opts;\n const isControlled = value !== undefined;\n const [uncontrolled, setUncontrolled] = React.useState<T>(defaultValue);\n\n const current = isControlled ? value : uncontrolled;\n\n const onChangeRef = React.useRef(onChange);\n React.useEffect(() => {\n onChangeRef.current = onChange;\n });\n\n const setValue = React.useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [current, setValue];\n}\n","import * as React from \"react\";\nimport { createPortal } from \"react-dom\";\n\n/**\n * Renders its children into `container` (default `document.body`) via\n * `react-dom`'s `createPortal` — the dep-light stand-in for\n * `@radix-ui/react-portal`. SSR-safe: renders nothing until mounted.\n *\n * Rust has no portal counterpart (see the README \"Limitations\"): `ev_lib::uikit`\n * overlays render inline with fixed positioning instead.\n */\nexport interface PortalProps {\n children: React.ReactNode;\n container?: Element | null;\n}\n\nexport function Portal({ children, container }: PortalProps) {\n // Render the portal synchronously on the client so a consumer's ref (e.g. a\n // floating element measured in `useLayoutEffect`) is attached in the same\n // commit. Overlays only render this when open — i.e. after a client event —\n // so there is no server render to mismatch.\n if (typeof document === \"undefined\") return null;\n const target = container ?? document.body;\n return createPortal(children, target);\n}\n","import * as React from \"react\";\n\n/**\n * Calls `onDismiss` on Escape or on a pointer-down outside the layer — the\n * dep-light core of every overlay's \"click away to close\". Pass refs to any\n * nodes that should NOT count as outside (e.g. the trigger), via `exclude`.\n *\n * Mirrors the dismiss behaviour Rust expresses with a full-screen backdrop.\n */\nexport function useDismissableLayer(opts: {\n enabled: boolean;\n onDismiss: () => void;\n exclude?: Array<React.RefObject<Element | null>>;\n}): React.RefObject<HTMLDivElement | null> {\n const { enabled, onDismiss, exclude } = opts;\n const ref = React.useRef<HTMLDivElement | null>(null);\n const onDismissRef = React.useRef(onDismiss);\n React.useEffect(() => {\n onDismissRef.current = onDismiss;\n });\n\n React.useEffect(() => {\n if (!enabled) return;\n\n function onPointerDown(event: PointerEvent) {\n const target = event.target as Node | null;\n if (ref.current && target && ref.current.contains(target)) return;\n for (const r of exclude ?? []) {\n if (r.current && target && r.current.contains(target)) return;\n }\n onDismissRef.current();\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key === \"Escape\") onDismissRef.current();\n }\n\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown, true);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [enabled, exclude]);\n\n return ref;\n}\n","import * as React from \"react\";\n\nexport type Side = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type Align = \"start\" | \"center\" | \"end\";\n\nexport interface FloatingResult {\n floatingRef: React.RefObject<HTMLElement | null>;\n style: React.CSSProperties;\n side: Side;\n align: Align;\n}\n\n/**\n * Positions a floating element against an anchor with `position: fixed` and\n * `getBoundingClientRect` — the dep-light stand-in for `@radix-ui/react-popper`\n * / floating-ui. Supports a preferred `side`/`align`, an `offset`, and a single\n * collision flip onto the opposite side when the preferred side overflows the\n * viewport. Recomputes on scroll and resize while `open`.\n *\n * Rust's overlays use CSS-only placement (`data-side`) and do not measure; see\n * the README \"Limitations\".\n */\nexport function useFloating(opts: {\n anchorRef: React.RefObject<Element | null>;\n open: boolean;\n side?: Side;\n align?: Align;\n offset?: number;\n}): FloatingResult {\n const { anchorRef, open, side = \"bottom\", align = \"center\", offset = 4 } = opts;\n const floatingRef = React.useRef<HTMLElement | null>(null);\n const [style, setStyle] = React.useState<React.CSSProperties>({\n position: \"fixed\",\n top: 0,\n left: 0,\n });\n const [resolved, setResolved] = React.useState<{ side: Side; align: Align }>({\n side,\n align,\n });\n\n React.useLayoutEffect(() => {\n if (!open) return;\n\n function update() {\n const anchor = anchorRef.current;\n const floating = floatingRef.current;\n if (!anchor || !floating) return;\n\n const a = anchor.getBoundingClientRect();\n const f = floating.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n let placed: Side = side;\n if (side === \"bottom\" && a.bottom + offset + f.height > vh && a.top - offset - f.height > 0)\n placed = \"top\";\n else if (side === \"top\" && a.top - offset - f.height < 0 && a.bottom + offset + f.height < vh)\n placed = \"bottom\";\n else if (side === \"right\" && a.right + offset + f.width > vw && a.left - offset - f.width > 0)\n placed = \"left\";\n else if (side === \"left\" && a.left - offset - f.width < 0 && a.right + offset + f.width < vw)\n placed = \"right\";\n\n let top = 0;\n let left = 0;\n const vertical = placed === \"top\" || placed === \"bottom\";\n\n if (placed === \"bottom\") top = a.bottom + offset;\n else if (placed === \"top\") top = a.top - offset - f.height;\n else if (placed === \"right\") left = a.right + offset;\n else left = a.left - offset - f.width;\n\n if (vertical) {\n if (align === \"start\") left = a.left;\n else if (align === \"end\") left = a.right - f.width;\n else left = a.left + a.width / 2 - f.width / 2;\n } else {\n if (align === \"start\") top = a.top;\n else if (align === \"end\") top = a.bottom - f.height;\n else top = a.top + a.height / 2 - f.height / 2;\n }\n\n left = Math.max(offset, Math.min(left, vw - f.width - offset));\n top = Math.max(offset, Math.min(top, vh - f.height - offset));\n\n setStyle({ position: \"fixed\", top: Math.round(top), left: Math.round(left) });\n setResolved({ side: placed, align });\n }\n\n // Throttle scroll/resize repositioning to one update per frame so the\n // overlay tracks its anchor smoothly instead of thrashing.\n let frame = 0;\n function schedule() {\n if (frame) return;\n frame = requestAnimationFrame(() => {\n frame = 0;\n update();\n });\n }\n\n update();\n window.addEventListener(\"scroll\", schedule, true);\n window.addEventListener(\"resize\", schedule);\n return () => {\n if (frame) cancelAnimationFrame(frame);\n window.removeEventListener(\"scroll\", schedule, true);\n window.removeEventListener(\"resize\", schedule);\n };\n }, [open, side, align, offset, anchorRef]);\n\n return { floatingRef, style, side: resolved.side, align: resolved.align };\n}\n","import * as React from \"react\";\n\nconst FOCUSABLE =\n 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\nfunction focusable(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (el) => el.offsetWidth > 0 || el.offsetHeight > 0 || el === document.activeElement,\n );\n}\n\n/**\n * Traps Tab focus inside the returned ref's subtree and restores focus to the\n * previously-focused element on unmount — the dep-light core of dialogs/menus,\n * replacing `@radix-ui/react-focus-scope`. On mount, focuses the first\n * focusable (or the container itself).\n *\n * Rust dialogs rely on the browser's native focus order within a fixed overlay;\n * see the README \"Limitations\".\n */\nexport function useFocusScope(enabled: boolean): React.RefObject<HTMLDivElement | null> {\n const ref = React.useRef<HTMLDivElement | null>(null);\n\n React.useEffect(() => {\n if (!enabled) return;\n const root = ref.current;\n if (!root) return;\n\n const previouslyFocused = document.activeElement as HTMLElement | null;\n const first = focusable(root)[0];\n (first ?? root).focus();\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Tab\" || !root) return;\n const items = focusable(root);\n if (items.length === 0) {\n event.preventDefault();\n return;\n }\n const firstEl = items[0]!;\n const lastEl = items[items.length - 1]!;\n const active = document.activeElement;\n if (event.shiftKey && active === firstEl) {\n event.preventDefault();\n lastEl.focus();\n } else if (!event.shiftKey && active === lastEl) {\n event.preventDefault();\n firstEl.focus();\n }\n }\n\n root.addEventListener(\"keydown\", onKeyDown);\n return () => {\n root.removeEventListener(\"keydown\", onKeyDown);\n previouslyFocused?.focus?.();\n };\n }, [enabled]);\n\n return ref;\n}\n","import * as React from \"react\";\n\n/**\n * Tracks whether an overlay should be mounted. Mount/unmount steps in lockstep\n * with `present`: enter animations (`data-[state=open]:animate-in`) still play\n * on mount, but the kit intentionally does **not** defer unmount for an exit\n * animation — deferring made portaled overlays flicker on close. Pass `ref`\n * through to the animated node (kept for API stability / future use).\n */\nexport function usePresence(present: boolean): {\n isPresent: boolean;\n ref: React.RefObject<HTMLElement | null>;\n} {\n const ref = React.useRef<HTMLElement | null>(null);\n return { isPresent: present, ref };\n}\n","import * as React from \"react\";\n\n/**\n * Arrow-key roving focus over a set of items — the dep-light core of menus,\n * tabs, radio-groups and toolbars (replacing `@radix-ui/react-roving-focus`).\n * Returns an `onKeyDown` to spread on the container and the active index; items\n * should set `tabIndex={index === activeIndex ? 0 : -1}`.\n *\n * Mirrors the keyboard navigation Rust drives with a focused-index signal.\n */\nexport function useRovingFocus(opts: {\n count: number;\n orientation?: \"horizontal\" | \"vertical\" | \"both\";\n loop?: boolean;\n initial?: number;\n}): {\n activeIndex: number;\n setActiveIndex: (i: number) => void;\n onKeyDown: (event: React.KeyboardEvent) => void;\n} {\n const { count, orientation = \"vertical\", loop = true, initial = 0 } = opts;\n const [activeIndex, setActiveIndex] = React.useState(initial);\n\n const next = (dir: 1 | -1) =>\n setActiveIndex((i) => {\n let n = i + dir;\n if (n < 0) n = loop ? count - 1 : 0;\n else if (n >= count) n = loop ? 0 : count - 1;\n return n;\n });\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n const horiz = orientation === \"horizontal\" || orientation === \"both\";\n const vert = orientation === \"vertical\" || orientation === \"both\";\n if (vert && event.key === \"ArrowDown\") {\n event.preventDefault();\n next(1);\n } else if (vert && event.key === \"ArrowUp\") {\n event.preventDefault();\n next(-1);\n } else if (horiz && event.key === \"ArrowRight\") {\n event.preventDefault();\n next(1);\n } else if (horiz && event.key === \"ArrowLeft\") {\n event.preventDefault();\n next(-1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n setActiveIndex(0);\n } else if (event.key === \"End\") {\n event.preventDefault();\n setActiveIndex(count - 1);\n }\n };\n\n return { activeIndex, setActiveIndex, onKeyDown };\n}\n","import * as React from \"react\";\n\nexport interface HoverIntentHandlers {\n onPointerEnter: (event: React.PointerEvent) => void;\n onPointerLeave: (event: React.PointerEvent) => void;\n}\n\n/**\n * Mouse-only hover-with-intent for the {@link InfoTip} toggletip: opens after the\n * cursor dwells `openDelay`ms over the trigger, closes after `closeDelay`ms once\n * it leaves. Touch and pen pointers are ignored — they have no hover, so a\n * coarse-pointer device never fires this and the toggletip's click/tap path takes\n * over. This timer is the one piece of behaviour with no Rust counterpart: the\n * Dioxus kit has no host timers (the same reason it has no Portal or floating\n * engine — see the README \"Limitations\"), so its trigger opens on hover instantly.\n */\nexport function useHoverIntent(opts: {\n onOpen: () => void;\n onClose: () => void;\n openDelay?: number;\n closeDelay?: number;\n}): HoverIntentHandlers {\n const { onOpen, onClose, openDelay = 500, closeDelay = 0 } = opts;\n\n const openRef = React.useRef(onOpen);\n const closeRef = React.useRef(onClose);\n React.useEffect(() => {\n openRef.current = onOpen;\n closeRef.current = onClose;\n });\n\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const clear = React.useCallback(() => {\n if (timer.current != null) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n }, []);\n React.useEffect(() => clear, [clear]);\n\n const onPointerEnter = React.useCallback(\n (event: React.PointerEvent) => {\n if (event.pointerType !== \"mouse\") return;\n clear();\n timer.current = setTimeout(() => {\n timer.current = null;\n openRef.current();\n }, openDelay);\n },\n [clear, openDelay],\n );\n\n const onPointerLeave = React.useCallback(\n (event: React.PointerEvent) => {\n if (event.pointerType !== \"mouse\") return;\n clear();\n if (closeDelay > 0) {\n timer.current = setTimeout(() => {\n timer.current = null;\n closeRef.current();\n }, closeDelay);\n } else {\n closeRef.current();\n }\n },\n [clear, closeDelay],\n );\n\n return { onPointerEnter, onPointerLeave };\n}\n","import * as React from \"react\";\n\n/**\n * Combines several refs into one callback ref so a node can satisfy multiple\n * consumers at once (e.g. an overlay that is both the floating element and the\n * dismissable layer). Used throughout the overlay components.\n */\nexport function mergeRefs<T>(\n ...refs: Array<React.Ref<T> | undefined>\n): React.RefCallback<T> {\n return (node) => {\n for (const ref of refs) {\n if (typeof ref === \"function\") ref(node);\n else if (ref != null) (ref as React.MutableRefObject<T | null>).current = node;\n }\n };\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n ALERT_BASE,\n ALERT_DESCRIPTION,\n ALERT_TITLE,\n alertVariants,\n type AlertVariant,\n} from \"../generated/alert\";\n\nexport type { AlertVariant };\n\nexport interface AlertProps extends React.ComponentProps<\"div\"> {\n variant?: AlertVariant;\n}\n\nexport function Alert({ className, variant = \"default\", ...props }: AlertProps) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(ALERT_BASE, alertVariants[variant], className)}\n {...props}\n />\n );\n}\n\nexport function AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(ALERT_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(ALERT_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const ALERT_BASE = \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\";\n\nexport const alertVariants = {\n \"default\": \"bg-card text-card-foreground\",\n \"destructive\": \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\",\n} as const;\nexport type AlertVariant = keyof typeof alertVariants;\n\nexport const ALERT_TITLE = \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\";\n\nexport const ALERT_DESCRIPTION = \"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { AVATAR, AVATAR_IMAGE, AVATAR_FALLBACK } from \"../generated/avatar\";\n\nexport function Avatar({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar\"\n className={cn(AVATAR, className)}\n {...props}\n />\n );\n}\n\nexport function AvatarImage({\n className,\n onError,\n ...props\n}: React.ComponentProps<\"img\">) {\n const [errored, setErrored] = React.useState(false);\n if (errored) return null;\n return (\n <img\n data-slot=\"avatar-image\"\n className={cn(AVATAR_IMAGE, className)}\n onError={(e) => {\n onError?.(e);\n setErrored(true);\n }}\n {...props}\n />\n );\n}\n\nexport function AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-fallback\"\n className={cn(AVATAR_FALLBACK, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const AVATAR = \"relative flex size-8 shrink-0 overflow-hidden rounded-full\";\n\nexport const AVATAR_IMAGE = \"aspect-square size-full\";\n\nexport const AVATAR_FALLBACK = \"bg-muted flex size-full items-center justify-center rounded-full\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport { BADGE_BASE, badgeVariants, type BadgeVariant } from \"../generated/badge\";\n\nexport type { BadgeVariant };\n\nexport interface BadgeProps extends React.ComponentProps<\"span\"> {\n variant?: BadgeVariant;\n asChild?: boolean;\n}\n\nexport function Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: BadgeProps) {\n const Comp = asChild ? Slot : \"span\";\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(BADGE_BASE, badgeVariants[variant], className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const BADGE_BASE = \"inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 gap-1 overflow-hidden [&>svg]:size-3 [&>svg]:pointer-events-none transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:border-destructive\";\n\nexport const badgeVariants = {\n \"default\": \"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n \"secondary\": \"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n \"destructive\": \"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20\",\n \"outline\": \"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n \"success\": \"border-transparent bg-main-accent-t2/20 text-main-accent-t2\",\n} as const;\nexport type BadgeVariant = keyof typeof badgeVariants;\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n BREADCRUMB_ELLIPSIS,\n BREADCRUMB_ITEM,\n BREADCRUMB_LINK,\n BREADCRUMB_LIST,\n BREADCRUMB_PAGE,\n BREADCRUMB_SEPARATOR,\n} from \"../generated/breadcrumb\";\n\nexport function Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />;\n}\n\nexport function BreadcrumbList({\n className,\n ...props\n}: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(BREADCRUMB_LIST, className)}\n {...props}\n />\n );\n}\n\nexport function BreadcrumbItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn(BREADCRUMB_ITEM, className)}\n {...props}\n />\n );\n}\n\nexport interface BreadcrumbLinkProps extends React.ComponentProps<\"a\"> {\n asChild?: boolean;\n}\n\nexport function BreadcrumbLink({\n asChild,\n className,\n ...props\n}: BreadcrumbLinkProps) {\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn(BREADCRUMB_LINK, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function BreadcrumbPage({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(BREADCRUMB_PAGE, className)}\n {...props}\n />\n );\n}\n\nexport function BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(BREADCRUMB_SEPARATOR, className)}\n {...props}\n >\n {children ?? (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n )}\n </li>\n );\n}\n\nexport function BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(BREADCRUMB_ELLIPSIS, className)}\n {...props}\n >\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </svg>\n <span className=\"sr-only\">More</span>\n </span>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const BREADCRUMB_LIST = \"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5\";\n\nexport const BREADCRUMB_ITEM = \"inline-flex items-center gap-1.5\";\n\nexport const BREADCRUMB_LINK = \"hover:text-foreground transition-colors\";\n\nexport const BREADCRUMB_PAGE = \"text-foreground font-normal\";\n\nexport const BREADCRUMB_SEPARATOR = \"[&>svg]:size-3.5\";\n\nexport const BREADCRUMB_ELLIPSIS = \"flex size-9 items-center justify-center\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n BUTTON_BASE,\n buttonSizeClasses,\n buttonVariantClasses,\n type ButtonSize,\n type ButtonVariant,\n} from \"../generated/button\";\n\nexport type { ButtonSize, ButtonVariant };\n\nexport interface ButtonVariantsOptions {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n}\n\n/**\n * Returns the fused canonical button class string. Reused by `pagination` so a\n * non-`Button` element can adopt the same styling, mirroring Rust's\n * `button_classes`.\n */\nexport function buttonVariants({\n variant = \"default\",\n size = \"default\",\n className,\n}: ButtonVariantsOptions = {}): string {\n return cn(BUTTON_BASE, buttonVariantClasses[variant], buttonSizeClasses[size], className);\n}\n\nexport interface ButtonProps extends React.ComponentProps<\"button\"> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n asChild?: boolean;\n}\n\nexport function Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: ButtonProps) {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size }), className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const BUTTON_BASE = \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all cursor-pointer disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:border-destructive\";\n\nexport const buttonVariantClasses = {\n \"default\": \"bg-primary text-primary-foreground hover:bg-primary/90\",\n \"secondary\": \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n \"outline\": \"border bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n \"ghost\": \"hover:bg-accent hover:text-accent-foreground\",\n \"destructive\": \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20\",\n \"link\": \"text-primary underline-offset-4 hover:underline\",\n} as const;\nexport type ButtonVariant = keyof typeof buttonVariantClasses;\n\nexport const buttonSizeClasses = {\n \"default\": \"h-9 px-4 py-2 has-[>svg]:px-3\",\n \"sm\": \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n \"lg\": \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n \"icon\": \"h-9 aspect-square px-0\",\n \"icon-sm\": \"h-8 aspect-square px-0\",\n \"icon-lg\": \"h-10 aspect-square px-0\",\n} as const;\nexport type ButtonSize = keyof typeof buttonSizeClasses;\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n BUTTON_GROUP_BASE,\n BUTTON_GROUP_SEPARATOR_BASE,\n BUTTON_GROUP_TEXT_BASE,\n buttonGroupOrientationClasses,\n type ButtonGroupOrientation,\n} from \"../generated/button-group\";\n\nexport type { ButtonGroupOrientation };\n\nexport interface ButtonGroupProps extends React.ComponentProps<\"div\"> {\n orientation?: ButtonGroupOrientation;\n}\n\nexport function ButtonGroup({\n className,\n orientation = \"horizontal\",\n ...props\n}: ButtonGroupProps) {\n return (\n <div\n role=\"group\"\n data-slot=\"button-group\"\n data-orientation={orientation}\n className={cn(BUTTON_GROUP_BASE, buttonGroupOrientationClasses[orientation], className)}\n {...props}\n />\n );\n}\n\nexport interface ButtonGroupTextProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nexport function ButtonGroupText({\n className,\n asChild = false,\n ...props\n}: ButtonGroupTextProps) {\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp\n className={cn(BUTTON_GROUP_TEXT_BASE, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function ButtonGroupSeparator({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"separator\"\n data-slot=\"button-group-separator\"\n data-orientation=\"vertical\"\n className={cn(BUTTON_GROUP_SEPARATOR_BASE, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const BUTTON_GROUP_BASE = \"flex w-fit items-stretch [&>*]:focus-visible:z-10 [&>*]:focus-visible:relative [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md has-[>[data-slot=button-group]]:gap-2\";\n\nexport const buttonGroupOrientationClasses = {\n \"horizontal\": \"[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\",\n \"vertical\": \"flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none\",\n} as const;\nexport type ButtonGroupOrientation = keyof typeof buttonGroupOrientationClasses;\n\nexport const BUTTON_GROUP_TEXT_BASE = \"bg-muted flex items-center gap-2 rounded-md border px-4 text-sm font-medium shadow-xs [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\";\n\nexport const BUTTON_GROUP_SEPARATOR_BASE = \"bg-input relative !m-0 self-stretch shrink-0 data-[orientation=vertical]:h-auto\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n CARD,\n CARD_ACTION,\n CARD_CONTENT,\n CARD_DESCRIPTION,\n CARD_FOOTER,\n CARD_HEADER,\n CARD_TITLE,\n} from \"../generated/card\";\n\nexport function Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(CARD, className)}\n {...props}\n />\n );\n}\n\nexport function CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(CARD_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(CARD_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function CardDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(CARD_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport function CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(CARD_ACTION, className)}\n {...props}\n />\n );\n}\n\nexport function CardContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(CARD_CONTENT, className)}\n {...props}\n />\n );\n}\n\nexport function CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(CARD_FOOTER, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CARD = \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\";\n\nexport const CARD_HEADER = \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\";\n\nexport const CARD_TITLE = \"leading-none font-semibold\";\n\nexport const CARD_DESCRIPTION = \"text-muted-foreground text-sm\";\n\nexport const CARD_ACTION = \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\";\n\nexport const CARD_CONTENT = \"px-6\";\n\nexport const CARD_FOOTER = \"flex items-center px-6 [.border-t]:pt-6\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n EMPTY,\n EMPTY_CONTENT,\n EMPTY_DESCRIPTION,\n EMPTY_HEADER,\n EMPTY_MEDIA_BASE,\n EMPTY_TITLE,\n emptyMediaVariants,\n type EmptyMediaVariant,\n} from \"../generated/empty\";\n\nexport type { EmptyMediaVariant };\n\nexport function Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"empty\" className={cn(EMPTY, className)} {...props} />\n );\n}\n\nexport function EmptyHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn(EMPTY_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport interface EmptyMediaProps extends React.ComponentProps<\"div\"> {\n variant?: EmptyMediaVariant;\n}\n\nexport function EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: EmptyMediaProps) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(EMPTY_MEDIA_BASE, emptyMediaVariants[variant], className)}\n {...props}\n />\n );\n}\n\nexport function EmptyTitle({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn(EMPTY_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function EmptyDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(EMPTY_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport function EmptyContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(EMPTY_CONTENT, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const EMPTY = \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12\";\n\nexport const EMPTY_HEADER = \"flex max-w-sm flex-col items-center gap-2 text-center\";\n\nexport const EMPTY_MEDIA_BASE = \"flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0\";\n\nexport const emptyMediaVariants = {\n \"default\": \"bg-transparent\",\n \"icon\": \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\n} as const;\nexport type EmptyMediaVariant = keyof typeof emptyMediaVariants;\n\nexport const EMPTY_TITLE = \"text-lg font-medium tracking-tight\";\n\nexport const EMPTY_DESCRIPTION = \"text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4\";\n\nexport const EMPTY_CONTENT = \"flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Label } from \"./label\";\nimport {\n FIELD_BASE,\n FIELD_SET,\n FIELD_LEGEND,\n FIELD_GROUP,\n FIELD_CONTENT,\n FIELD_LABEL,\n FIELD_TITLE,\n FIELD_DESCRIPTION,\n FIELD_SEPARATOR,\n FIELD_SEPARATOR_LINE,\n FIELD_SEPARATOR_CONTENT,\n FIELD_ERROR,\n fieldOrientation,\n type FieldOrientation,\n} from \"../generated/field\";\n\nexport type { FieldOrientation };\n\nexport function FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(FIELD_SET, className)}\n {...props}\n />\n );\n}\n\nexport function FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(FIELD_LEGEND, className)}\n {...props}\n />\n );\n}\n\nexport function FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(FIELD_GROUP, className)}\n {...props}\n />\n );\n}\n\nexport function Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & { orientation?: FieldOrientation }) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(FIELD_BASE, fieldOrientation[orientation], className)}\n {...props}\n />\n );\n}\n\nexport function FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(FIELD_CONTENT, className)}\n {...props}\n />\n );\n}\n\nexport function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(FIELD_LABEL, className)}\n {...props}\n />\n );\n}\n\nexport function FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(FIELD_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(FIELD_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport function FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & { children?: React.ReactNode }) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(FIELD_SEPARATOR, className)}\n {...props}\n >\n <div role=\"separator\" className={FIELD_SEPARATOR_LINE} />\n {children && (\n <span\n className={FIELD_SEPARATOR_CONTENT}\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n );\n}\n\nexport function FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>;\n}) {\n const content = React.useMemo(() => {\n if (children) {\n return children;\n }\n\n if (!errors) {\n return null;\n }\n\n if (errors?.length === 1 && errors[0]?.message) {\n return errors[0].message;\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {errors.map(\n (error, index) => error?.message && <li key={index}>{error.message}</li>,\n )}\n </ul>\n );\n }, [children, errors]);\n\n if (!content) {\n return null;\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(FIELD_ERROR, className)}\n {...props}\n >\n {content}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { LABEL_BASE } from \"../generated/label\";\n\nexport function Label({ className, ...props }: React.ComponentProps<\"label\">) {\n return <label data-slot=\"label\" className={cn(LABEL_BASE, className)} {...props} />;\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const LABEL_BASE = \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\";\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const FIELD_BASE = \"group/field flex w-full gap-3 data-[invalid=true]:text-destructive\";\n\nexport const fieldOrientation = {\n \"vertical\": \"flex-col [&>*]:w-full [&>.sr-only]:w-auto\",\n \"horizontal\": \"flex-row items-center [&>[data-slot=field-label]]:flex-auto has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n \"responsive\": \"flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto @md/field-group:[&>[data-slot=field-label]]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n} as const;\nexport type FieldOrientation = keyof typeof fieldOrientation;\n\nexport const FIELD_SET = \"flex flex-col gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\";\n\nexport const FIELD_LEGEND = \"mb-3 font-medium data-[variant=legend]:text-base data-[variant=label]:text-sm\";\n\nexport const FIELD_GROUP = \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\";\n\nexport const FIELD_CONTENT = \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\";\n\nexport const FIELD_LABEL = \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4 has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary\";\n\nexport const FIELD_TITLE = \"flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50\";\n\nexport const FIELD_DESCRIPTION = \"text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5 [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\";\n\nexport const FIELD_SEPARATOR = \"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2\";\n\nexport const FIELD_SEPARATOR_LINE = \"absolute inset-0 top-1/2 shrink-0 bg-border h-px w-full\";\n\nexport const FIELD_SEPARATOR_CONTENT = \"bg-background text-muted-foreground relative mx-auto block w-fit px-2\";\n\nexport const FIELD_ERROR = \"text-destructive text-sm font-normal\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { FIELD_TITLE, FIELD_DESCRIPTION } from \"../generated/field\";\n\n/**\n * `SectionDescriptor` — a static, always-visible block that explains a whole\n * feature (withdrawals, fund shares, an operator action). It reads as neutral body\n * copy, NOT a coloured alert: the title reuses `FIELD_TITLE`, the body reuses\n * `FIELD_DESCRIPTION`, inside a subtle bordered container. Content-agnostic — the\n * strings are injected by the caller.\n *\n * With `collapsible`, it renders as a native `<details>`/`<summary>` disclosure,\n * which carries keyboard support and find-in-page auto-expand for free.\n */\nconst SECTION_DESCRIPTOR =\n \"flex flex-col gap-2 rounded-lg border bg-accent p-4 text-left\";\n\n// lucide `info`, inlined per the kit's no-lucide-dep icon convention.\nfunction InfoGlyph({ className }: { className?: string }) {\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 aria-hidden\n className={cn(\"size-4 shrink-0\", className)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n );\n}\n\nexport interface SectionDescriptorProps extends Omit<\n React.ComponentProps<\"section\">,\n \"title\"\n> {\n title: React.ReactNode;\n /** Show the leading ⓘ mark. Defaults to true. */\n icon?: boolean;\n /** Render as a collapsible `<details>` disclosure. */\n collapsible?: boolean;\n /** Initial open state when `collapsible`. */\n defaultOpen?: boolean;\n}\n\nexport function SectionDescriptor({\n title,\n icon = true,\n collapsible = false,\n defaultOpen = false,\n className,\n children,\n ...props\n}: SectionDescriptorProps) {\n const titleContent = (\n <>\n {icon && <InfoGlyph className=\"text-main-accent-t1\" />}\n <span>{title}</span>\n </>\n );\n\n if (collapsible) {\n return (\n <details\n data-slot=\"section-descriptor\"\n data-collapsible=\"\"\n open={defaultOpen}\n className={cn(SECTION_DESCRIPTOR, className)}\n {...(props as Record<string, unknown>)}\n >\n <summary\n data-slot=\"section-descriptor-title\"\n className={cn(\n FIELD_TITLE,\n \"cursor-pointer list-none [&::-webkit-details-marker]:hidden\",\n )}\n >\n {titleContent}\n </summary>\n <p\n data-slot=\"section-descriptor-body\"\n className={cn(FIELD_DESCRIPTION, \"mt-2\")}\n >\n {children}\n </p>\n </details>\n );\n }\n\n return (\n <section\n data-slot=\"section-descriptor\"\n className={cn(SECTION_DESCRIPTOR, className)}\n {...props}\n >\n <div data-slot=\"section-descriptor-title\" className={FIELD_TITLE}>\n {titleContent}\n </div>\n <p data-slot=\"section-descriptor-body\" className={FIELD_DESCRIPTION}>\n {children}\n </p>\n </section>\n );\n}\n","import * as React from \"react\";\nimport { Container } from \"./container\";\nimport { Logo } from \"./logo\";\n\n/**\n * The EV brand chrome footer, ported from site_conductor: a 12-col grid —\n * brand 3 | sitemap groups 2 each | Offices 3 | Newsletter 2 — over the dark\n * field, with the legal links and copyright line. On mobile the sitemap\n * columns sit side by side. All copy is parameterized with the EV defaults so\n * a bare `<Footer nav={…} />` matches the site; only the sitemap groups (and\n * the newsletter form, when wanted) come from the app. `children` render right\n * after the `<footer>` tag — the slot for app-side extras like the\n * build-version easter egg.\n *\n * `linkComponent` lets Next hosts pass `next/link`; everyone else gets `<a>`.\n */\nexport interface FooterLink {\n label: string;\n href: string;\n}\n\nexport interface FooterLinkGroup {\n heading: string;\n links: readonly FooterLink[];\n}\n\nexport interface FooterOffice {\n name: string;\n address: string;\n}\n\nexport interface FooterProps {\n nav: readonly FooterLinkGroup[];\n description?: string;\n offices?: readonly FooterOffice[];\n legalLinks?: readonly FooterLink[];\n /** The newsletter form; the Newsletter column renders only when present. */\n newsletter?: React.ReactNode;\n newsletterBlurb?: string;\n version?: string;\n commitHref?: string;\n tagline?: string;\n linkComponent?: React.ElementType;\n children?: React.ReactNode;\n}\n\nconst DEFAULT_DESCRIPTION =\n \"EV Investment is a registered real estate advisory and investment management fund specializing in premium coastal developments in Quy Nhon, Binh Dinh province, Vietnam.\";\n\nconst DEFAULT_OFFICES: readonly FooterOffice[] = [\n {\n name: \"Quy Nhon Head Office\",\n address: \"102 An Duong Vuong St, Nguyen Van Cu Ward, Quy Nhon City, Vietnam\",\n },\n {\n name: \"Ho Chi Minh Representative\",\n address: \"Deutsches Haus, 33 Le Duan Blvd, District 1, Ho Chi Minh City, Vietnam\",\n },\n];\n\nconst DEFAULT_LEGAL_LINKS: readonly FooterLink[] = [\n { label: \"Privacy Policy\", href: \"#hero\" },\n { label: \"Terms of Service\", href: \"#hero\" },\n];\n\nexport function Footer({\n nav,\n description = DEFAULT_DESCRIPTION,\n offices = DEFAULT_OFFICES,\n legalLinks = DEFAULT_LEGAL_LINKS,\n newsletter,\n newsletterBlurb = \"Subscribe, to receive our macro reports\",\n version,\n commitHref,\n tagline = \"Quy Nhon Fund\",\n linkComponent,\n children,\n}: FooterProps) {\n const L = linkComponent ?? \"a\";\n\n return (\n <footer\n data-slot=\"footer\"\n className=\"bg-main-black border-t border-main-mist/10 py-16\"\n >\n {children}\n <Container>\n <div className=\"grid grid-cols-2 gap-x-8 gap-y-8 lg:grid-cols-12 mb-12\">\n <div className=\"col-span-2 lg:col-span-3\">\n <div className=\"flex items-center gap-3 mb-6\">\n <Logo className=\"w-8 h-8 text-white\" />\n <div className=\"flex flex-col\">\n <span className=\"font-serif-display font-bold text-base tracking-wider text-white\">\n EV INVESTMENT\n </span>\n <span className=\"text-[8px] font-mono-tech tracking-[0.3em] text-main-accent-t1 uppercase\">\n {tagline}\n </span>\n </div>\n </div>\n <p className=\"text-main-mist/40 text-xs font-light max-w-sm leading-relaxed mb-6\">\n {description}\n </p>\n <div className=\"flex gap-4 text-xs font-mono-tech text-main-accent-t1\">\n {legalLinks.map((link, i) => (\n <React.Fragment key={link.label}>\n {i > 0 && <span className=\"text-main-mist/20\">|</span>}\n <L href={link.href} className=\"hover:underline\">\n {link.label}\n </L>\n </React.Fragment>\n ))}\n </div>\n </div>\n\n {nav.map((group) => (\n <nav\n key={group.heading}\n aria-label={`Footer ${group.heading} links`}\n className=\"lg:col-span-2\"\n >\n <h4 className=\"font-mono-tech text-xs text-white uppercase tracking-widest mb-6\">\n {group.heading}\n </h4>\n <ul className=\"space-y-3\">\n {group.links.map((link) => (\n <li key={link.href}>\n <L\n href={link.href}\n className=\"text-xs font-light text-main-mist/70 hover:text-main-accent-t1 transition-colors\"\n >\n {link.label}\n </L>\n </li>\n ))}\n </ul>\n </nav>\n ))}\n\n <div className=\"col-span-2 lg:col-span-3\">\n <h4 className=\"font-mono-tech text-xs text-white uppercase tracking-widest mb-6\">\n Offices\n </h4>\n <ul className=\"space-y-4 text-xs text-main-mist/70 font-light leading-relaxed\">\n {offices.map((office) => (\n <li key={office.name}>\n <strong className=\"text-white block font-mono-tech text-[10px] uppercase tracking-wider mb-1\">\n {office.name}\n </strong>\n {office.address}\n </li>\n ))}\n </ul>\n </div>\n\n {newsletter && (\n <div className=\"col-span-2 lg:col-span-2\">\n <h4 className=\"font-mono-tech text-xs text-white uppercase tracking-widest mb-6\">\n Newsletter\n </h4>\n {/* What the source's <Tier tier=\"alt\"><Text> emits: alt body size\n + the info variant, then the mb-4 the caller adds. */}\n <p className=\"text-sm sm:text-xs font-light leading-relaxed text-main-mist/70 mb-4\">\n {newsletterBlurb}\n </p>\n {newsletter}\n </div>\n )}\n </div>\n\n <div className=\"border-t border-main-mist/10 pt-8 text-[10px] font-mono-tech text-main-mist/40\">\n <p>\n © 2026 EV Investment. All rights reserved.\n {version && (\n <>\n {\" \"}\n <a href={commitHref} className=\"text-main-mist/30\">\n {version}\n </a>\n </>\n )}\n </p>\n </div>\n </Container>\n </footer>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { CONTAINER_BASE } from \"../generated/container\";\n\nexport type ContainerProps = React.ComponentProps<\"div\">;\n\n/**\n * Page-width wrapper: centres content, caps it at `--page-max` and applies the\n * responsive `--page-px` gutter (tighter on mobile, roomier ≥ sm). Standardises\n * the `<div className=\"container\">` consumers were repeating, so the page gutter\n * and max width live in one token-driven place.\n */\nexport function Container({ className, ...props }: ContainerProps) {\n return (\n <div\n data-slot=\"container\"\n className={cn(CONTAINER_BASE, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CONTAINER_BASE = \"mx-auto w-full max-w-[var(--page-max,90rem)] px-[var(--page-px,1rem)]\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/**\n * The EV Investment mark, rendered as a CSS mask (`backgroundColor:\n * currentColor` + `maskImage`) so the monochrome lockup follows the\n * surrounding text color instead of the SVG's baked-in black. The SVG is\n * inlined as a URL-encoded `data:` URI so consumers need no asset pipeline;\n * `src` swaps in an externally hosted mark when one is preferred.\n *\n * `withBackground` paints the clean brand field generated from\n * OKLCH(0.256, 0.1, 260) behind the mark, keeping the chip consistent with\n * the favicon.\n */\nexport interface LogoProps {\n className?: string;\n withBackground?: boolean;\n /** Overrides the inlined data-URI mark with an external SVG URL. */\n src?: string;\n}\n\nconst LOGO_DATA_URI =\n \"data:image/svg+xml,%3Csvg width=%22387%22 height=%22335%22 viewBox=%220 0 387 335%22 fill=%22none%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cpath d=%22M0.120605 130.841L140.84 112.176V61.7481L156.149 65.3501V104.786L163.641 103.662V66.6599L178.625 69.607V102.353L185.791 101.043V61.0932L156.475 48.3224L119.992 60.4383V101.043L0.120605 130.841Z%22 fill=%22black%22/%3E%3Cpath d=%22M213.479 112.176L237.584 114.469L237.258 0.841309L202.078 19.8338V72.8816L213.479 78.1209V112.176Z%22 fill=%22black%22/%3E%3Cpath d=%22M240.841 0.841309L276.347 20.1612V117.743L260.711 115.778V26.3829L240.841 15.9043V0.841309Z%22 fill=%22black%22/%3E%3Cpath d=%22M284.816 118.725L386.121 127.239L304.36 109.884V74.1914L284.816 63.7128V118.725Z%22 fill=%22black%22/%3E%3Cpath d=%22M0.120605 130.841L140.84 112.176V61.7481L156.149 65.3501V104.786L163.641 103.662V66.6599L178.625 69.607V102.353L185.791 101.043V61.0932L156.475 48.3224L119.992 60.4383V101.043L0.120605 130.841Z%22 stroke=%22black%22/%3E%3Cpath d=%22M213.479 112.176L237.584 114.469L237.258 0.841309L202.078 19.8338V72.8816L213.479 78.1209V112.176Z%22 stroke=%22black%22/%3E%3Cpath d=%22M240.841 0.841309L276.347 20.1612V117.743L260.711 115.778V26.3829L240.841 15.9043V0.841309Z%22 stroke=%22black%22/%3E%3Cpath d=%22M284.816 118.725L386.121 127.239L304.36 109.884V74.1914L284.816 63.7128V118.725Z%22 stroke=%22black%22/%3E%3Cpath d=%22M25.1206 333.987H31.6206V306.987H25.1206V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M92.6206 333.987H100.121L110.621 307.487H104.621L96.6206 325.987L88.6206 307.487H81.6206L92.6206 333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M44.6206 333.987H51.6206V318.987L65.1206 333.987H71.6206V307.487H65.1206V322.987L50.6206 307.487H44.6206V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M120.621 333.987H142.121V329.487H127.621V322.987H140.121V318.487H127.621V312.487H142.121V307.487H120.621V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M152.121 331.987L153.621 327.987C165.659 329.418 167.304 330.676 168.121 326.487C168.937 322.297 152.785 322.989 152.621 313.987C152.456 304.984 165.853 306.198 174.121 308.487L173.121 312.487C162.364 310.724 159.121 310.487 159.121 313.987C159.121 317.487 175.621 318.748 175.621 326.487C175.621 334.225 167.278 335.691 152.121 331.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M192.621 333.987H199.621V312.487H208.621V307.487H183.621V312.487H192.621V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M219.121 333.987H225.121V318.987L233.621 329.987H237.621L245.121 318.987V333.987L252.121 333.987V307.487H245.121L235.621 322.487L225.121 307.487H219.121V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M265.121 333.987H286.621V329.487H272.121V322.987H284.621V318.487H272.121V312.487H286.621V307.487H265.121V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M298.621 333.987H305.621V318.987L319.121 333.987H325.621V307.487H319.121V322.987L304.621 307.487H298.621V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M345.121 333.987H352.121V312.487H361.121V307.487H336.121V312.487H345.121V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M25.1206 333.987H31.6206V306.987H25.1206V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M92.6206 333.987H100.121L110.621 307.487H104.621L96.6206 325.987L88.6206 307.487H81.6206L92.6206 333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M44.6206 333.987H51.6206V318.987L65.1206 333.987H71.6206V307.487H65.1206V322.987L50.6206 307.487H44.6206V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M120.621 333.987H142.121V329.487H127.621V322.987H140.121V318.487H127.621V312.487H142.121V307.487H120.621V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M152.121 331.987L153.621 327.987C165.659 329.418 167.304 330.676 168.121 326.487C168.937 322.297 152.785 322.989 152.621 313.987C152.456 304.984 165.853 306.198 174.121 308.487L173.121 312.487C162.364 310.724 159.121 310.487 159.121 313.987C159.121 317.487 175.621 318.748 175.621 326.487C175.621 334.225 167.278 335.691 152.121 331.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M192.621 333.987H199.621V312.487H208.621V307.487H183.621V312.487H192.621V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M219.121 333.987H225.121V318.987L233.621 329.987H237.621L245.121 318.987V333.987L252.121 333.987V307.487H245.121L235.621 322.487L225.121 307.487H219.121V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M265.121 333.987H286.621V329.487H272.121V322.987H284.621V318.487H272.121V312.487H286.621V307.487H265.121V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M298.621 333.987H305.621V318.987L319.121 333.987H325.621V307.487H319.121V322.987L304.621 307.487H298.621V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M345.121 333.987H352.121V312.487H361.121V307.487H336.121V312.487H345.121V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M232.621 276.02L166.121 145.841H204.905L255.905 246.341L306.905 145.841H345.905L279.405 276.02H232.621Z%22 fill=%22black%22 stroke=%22black%22/%3E%3Cpath d=%22M41.1206 276.02H208.336L195.73 251.341H74.8362V220.341H179.894L168.144 197.341H74.8362V170.841L154.352 170.341L141.836 145.841H41.1206V276.02Z%22 fill=%22black%22 stroke=%22black%22/%3E%3C/svg%3E\";\n\nconst LOGO_BG = \"oklch(0.256 0.1 260)\";\n\nexport function Logo({ className, withBackground = false, src }: LogoProps) {\n const maskUrl = `url(\"${src ?? LOGO_DATA_URI}\")`;\n const maskStyle: React.CSSProperties = {\n backgroundColor: \"currentColor\",\n maskImage: maskUrl,\n WebkitMaskImage: maskUrl,\n maskRepeat: \"no-repeat\",\n WebkitMaskRepeat: \"no-repeat\",\n maskPosition: \"center\",\n WebkitMaskPosition: \"center\",\n maskSize: \"contain\",\n WebkitMaskSize: \"contain\",\n };\n\n const mark = (\n <span\n data-slot=\"logo\"\n role=\"img\"\n aria-label=\"EV Investment\"\n style={maskStyle}\n className={cn(\"inline-block\", withBackground ? \"w-3/5 h-3/5\" : className)}\n />\n );\n\n if (!withBackground) return mark;\n\n return (\n <span\n data-slot=\"logo-background\"\n className={cn(\"inline-flex items-center justify-center\", className)}\n style={{ backgroundColor: LOGO_BG }}\n >\n {mark}\n </span>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { INPUT_BASE } from \"../generated/input\";\n\nexport function Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(INPUT_BASE, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const INPUT_BASE = \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:border-destructive\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { TEXTAREA_BASE } from \"../generated/textarea\";\n\nexport function Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea data-slot=\"textarea\" className={cn(TEXTAREA_BASE, className)} {...props} />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TEXTAREA_BASE = \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Button, type ButtonProps } from \"./button\";\nimport { Input } from \"./input\";\nimport { Textarea } from \"./textarea\";\nimport {\n INPUT_GROUP_ADDON_BASE,\n INPUT_GROUP_BASE,\n INPUT_GROUP_BUTTON_BASE,\n INPUT_GROUP_INPUT_CONTROL,\n INPUT_GROUP_TEXT,\n INPUT_GROUP_TEXTAREA_CONTROL,\n inputGroupAddonAligns,\n inputGroupButtonSizes,\n type InputGroupAddonAlign,\n type InputGroupButtonSize,\n} from \"../generated/input-group\";\n\nexport type { InputGroupAddonAlign, InputGroupButtonSize };\n\nexport function InputGroup({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(INPUT_GROUP_BASE, className)}\n {...props}\n />\n );\n}\n\nexport interface InputGroupAddonProps extends React.ComponentProps<\"div\"> {\n align?: InputGroupAddonAlign;\n}\n\nexport function InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: InputGroupAddonProps) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(\n INPUT_GROUP_ADDON_BASE,\n inputGroupAddonAligns[align],\n className,\n )}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) return;\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n }}\n {...props}\n />\n );\n}\n\nexport interface InputGroupButtonProps\n extends Omit<ButtonProps, \"size\"> {\n size?: InputGroupButtonSize;\n}\n\nexport function InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: InputGroupButtonProps) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(\n INPUT_GROUP_BUTTON_BASE,\n inputGroupButtonSizes[size],\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function InputGroupText({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(INPUT_GROUP_TEXT, className)}\n {...props}\n />\n );\n}\n\nexport function InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(INPUT_GROUP_INPUT_CONTROL, className)}\n {...props}\n />\n );\n}\n\nexport function InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(INPUT_GROUP_TEXTAREA_CONTROL, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const INPUT_GROUP_BASE = \"group/input-group border-input relative flex w-full items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none h-9 min-w-0 has-[>textarea]:h-auto has-[>[data-align=inline-start]]:[&>input]:pl-2 has-[>[data-align=inline-end]]:[&>input]:pr-2 has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive\";\n\nexport const INPUT_GROUP_ADDON_BASE = \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50\";\n\nexport const inputGroupAddonAligns = {\n \"inline-start\": \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\": \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\": \"order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\": \"order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5\",\n} as const;\nexport type InputGroupAddonAlign = keyof typeof inputGroupAddonAligns;\n\nexport const INPUT_GROUP_BUTTON_BASE = \"text-sm shadow-none flex gap-2 items-center\";\n\nexport const inputGroupButtonSizes = {\n \"xs\": \"h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2\",\n \"sm\": \"h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5\",\n \"icon-xs\": \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n} as const;\nexport type InputGroupButtonSize = keyof typeof inputGroupButtonSizes;\n\nexport const INPUT_GROUP_TEXT = \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\";\n\nexport const INPUT_GROUP_INPUT_CONTROL = \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0\";\n\nexport const INPUT_GROUP_TEXTAREA_CONTROL = \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport { Separator } from \"./separator\";\nimport {\n ITEM_ACTIONS,\n ITEM_BASE,\n ITEM_CONTENT,\n ITEM_DESCRIPTION,\n ITEM_FOOTER,\n ITEM_GROUP,\n ITEM_HEADER,\n ITEM_MEDIA_BASE,\n ITEM_SEPARATOR,\n ITEM_TITLE,\n itemMediaVariants,\n itemSizes,\n itemVariants,\n type ItemMediaVariant,\n type ItemSize,\n type ItemVariant,\n} from \"../generated/item\";\n\nexport type { ItemMediaVariant, ItemSize, ItemVariant };\n\nexport function ItemGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"list\"\n data-slot=\"item-group\"\n className={cn(ITEM_GROUP, className)}\n {...props}\n />\n );\n}\n\nexport function ItemSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"item-separator\"\n orientation=\"horizontal\"\n className={cn(ITEM_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport interface ItemProps extends React.ComponentProps<\"div\"> {\n variant?: ItemVariant;\n size?: ItemSize;\n asChild?: boolean;\n}\n\nexport function Item({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: ItemProps) {\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp\n data-slot=\"item\"\n data-variant={variant}\n data-size={size}\n className={cn(ITEM_BASE, itemVariants[variant], itemSizes[size], className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface ItemMediaProps extends React.ComponentProps<\"div\"> {\n variant?: ItemMediaVariant;\n}\n\nexport function ItemMedia({\n className,\n variant = \"default\",\n ...props\n}: ItemMediaProps) {\n return (\n <div\n data-slot=\"item-media\"\n data-variant={variant}\n className={cn(ITEM_MEDIA_BASE, itemMediaVariants[variant], className)}\n {...props}\n />\n );\n}\n\nexport function ItemContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-content\"\n className={cn(ITEM_CONTENT, className)}\n {...props}\n />\n );\n}\n\nexport function ItemTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-title\"\n className={cn(ITEM_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function ItemDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"item-description\"\n className={cn(ITEM_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport function ItemActions({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-actions\"\n className={cn(ITEM_ACTIONS, className)}\n {...props}\n />\n );\n}\n\nexport function ItemHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-header\"\n className={cn(ITEM_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function ItemFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-footer\"\n className={cn(ITEM_FOOTER, className)}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n SEPARATOR_BASE,\n separatorOrientations,\n type SeparatorOrientation,\n} from \"../generated/separator\";\n\nexport type { SeparatorOrientation };\n\nexport interface SeparatorProps extends React.ComponentProps<\"div\"> {\n orientation?: SeparatorOrientation;\n}\n\nexport function Separator({\n className,\n orientation = \"horizontal\",\n ...props\n}: SeparatorProps) {\n return (\n <div\n role=\"separator\"\n data-slot=\"separator\"\n data-orientation={orientation}\n className={cn(\n SEPARATOR_BASE,\n separatorOrientations[orientation],\n className,\n )}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SEPARATOR_BASE = \"bg-border shrink-0\";\n\nexport const separatorOrientations = {\n \"horizontal\": \"data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full\",\n \"vertical\": \"data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n} as const;\nexport type SeparatorOrientation = keyof typeof separatorOrientations;\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const ITEM_GROUP = \"group/item-group flex flex-col\";\n\nexport const ITEM_SEPARATOR = \"my-0\";\n\nexport const ITEM_BASE = \"group/item flex items-center border border-transparent text-sm rounded-md transition-colors [a]:hover:bg-accent/50 [a]:transition-colors duration-100 flex-wrap outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\";\n\nexport const itemVariants = {\n \"default\": \"bg-transparent\",\n \"outline\": \"border-border\",\n \"muted\": \"bg-muted/50\",\n} as const;\nexport type ItemVariant = keyof typeof itemVariants;\n\nexport const itemSizes = {\n \"default\": \"p-4 gap-4\",\n \"sm\": \"py-3 px-4 gap-2.5\",\n} as const;\nexport type ItemSize = keyof typeof itemSizes;\n\nexport const ITEM_MEDIA_BASE = \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none group-has-[[data-slot=item-description]]/item:translate-y-0.5\";\n\nexport const itemMediaVariants = {\n \"default\": \"bg-transparent\",\n \"icon\": \"size-8 border rounded-sm bg-muted [&_svg:not([class*='size-'])]:size-4\",\n \"image\": \"size-10 rounded-sm overflow-hidden [&_img]:size-full [&_img]:object-cover\",\n} as const;\nexport type ItemMediaVariant = keyof typeof itemMediaVariants;\n\nexport const ITEM_CONTENT = \"flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none\";\n\nexport const ITEM_TITLE = \"flex w-fit items-center gap-2 text-sm leading-snug font-medium\";\n\nexport const ITEM_DESCRIPTION = \"text-muted-foreground line-clamp-2 text-sm leading-normal font-normal text-balance [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\";\n\nexport const ITEM_ACTIONS = \"flex items-center gap-2\";\n\nexport const ITEM_HEADER = \"flex basis-full items-center justify-between gap-2\";\n\nexport const ITEM_FOOTER = \"flex basis-full items-center justify-between gap-2\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { KBD_BASE, KBD_GROUP_BASE } from \"../generated/kbd\";\n\nexport function Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\n return (\n <kbd\n data-slot=\"kbd\"\n className={cn(KBD_BASE, className)}\n {...props}\n />\n );\n}\n\nexport function KbdGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <kbd\n data-slot=\"kbd-group\"\n className={cn(KBD_GROUP_BASE, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const KBD_BASE = \"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium select-none [&_svg:not([class*='size-'])]:size-3 [[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background\";\n\nexport const KBD_GROUP_BASE = \"inline-flex items-center gap-1\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { buttonVariants, type ButtonSize } from \"./button\";\n\nexport function Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n );\n}\n\nexport function PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n );\n}\n\nexport function PaginationItem(props: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />;\n}\n\nexport type PaginationLinkProps = {\n isActive?: boolean;\n size?: ButtonSize;\n} & React.ComponentProps<\"a\">;\n\nexport function PaginationLink({\n className,\n isActive,\n size = \"icon\",\n ...props\n}: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className,\n )}\n {...props}\n />\n );\n}\n\nconst ChevronLeft = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n);\n\nconst ChevronRight = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n);\n\nconst MoreHorizontal = () => (\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </svg>\n);\n\nexport function PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pl-2.5\", className)}\n {...props}\n >\n <ChevronLeft />\n <span className=\"hidden sm:block\">Previous</span>\n </PaginationLink>\n );\n}\n\nexport function PaginationNext({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pr-2.5\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">Next</span>\n <ChevronRight />\n </PaginationLink>\n );\n}\n\nexport function PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal />\n <span className=\"sr-only\">More pages</span>\n </span>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { PROGRESS_TRACK, PROGRESS_INDICATOR } from \"../generated/progress\";\n\nexport interface ProgressProps extends React.ComponentProps<\"div\"> {\n value?: number;\n}\n\nexport function Progress({ className, value = 0, ...props }: ProgressProps) {\n return (\n <div\n data-slot=\"progress\"\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={100}\n className={cn(PROGRESS_TRACK, className)}\n {...props}\n >\n <div\n data-slot=\"progress-indicator\"\n className={PROGRESS_INDICATOR}\n style={{ transform: `translateX(-${100 - value}%)` }}\n />\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const PROGRESS_TRACK = \"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full\";\n\nexport const PROGRESS_INDICATOR = \"bg-primary h-full w-full flex-1 transition-all\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { SKELETON_BASE } from \"../generated/skeleton\";\n\nexport function Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(SKELETON_BASE, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SKELETON_BASE = \"bg-accent animate-pulse rounded-md\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <svg\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"size-4 animate-spin\", className)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n {...props}\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/**\n * The shared 404 / 403 / 500 status surface, ported from site_conductor so every\n * EV app (landing, cabinet) shows the same branded error pages.\n *\n * `StatusScreen` is the generic shell; `NotFound` / `Forbidden` / `ServerError`\n * are the ready-made pages with their copy baked in — a host renders those with\n * its own hrefs. Links default to a plain `<a>` (a full document load, which is\n * what you want off an error page); pass `linkComponent` (e.g. `next/link`) for\n * soft navigation from a client boundary.\n */\nexport type StatusAccent = \"teal\" | \"gold\" | \"red\" | \"blue\";\n\n// Accent → token text colour. Bound to ev/color tokens; \"blue\" is the blueprint\n// accent the design specifies as a raw value (no token equivalent).\nconst ACCENT_TEXT: Record<StatusAccent, string> = {\n teal: \"text-main-accent-t1\",\n gold: \"text-main-accent-t3\",\n red: \"text-destructive\",\n blue: \"text-[#5e9be6]\",\n};\n\nconst BTN_BASE =\n \"inline-flex items-center justify-center rounded-md px-6 py-3.5 font-mono-tech text-xs uppercase tracking-widest transition-colors\";\n\nconst BTN_FILLED: Record<StatusAccent, string> = {\n teal: \"bg-main-accent-t1 text-main-black hover:bg-main-accent-t1/90\",\n gold: \"bg-main-accent-t3 text-main-black hover:bg-main-accent-t3/90\",\n red: \"bg-destructive text-white hover:bg-destructive/90\",\n blue: \"bg-[#5e9be6] text-main-black hover:bg-[#5e9be6]/90\",\n};\n\nconst BTN_OUTLINE: Record<StatusAccent, string> = {\n teal: \"border border-main-accent-t1/40 text-main-accent-t1 hover:bg-main-accent-t1/10\",\n gold: \"border border-main-accent-t3/40 text-main-accent-t3 hover:bg-main-accent-t3/10\",\n red: \"border border-destructive/40 text-destructive hover:bg-destructive/10\",\n blue: \"border border-[#5e9be6]/40 text-[#5e9be6] hover:bg-[#5e9be6]/10\",\n};\n\n/** Class for a status CTA — shared by the nav links and the 500 retry button. */\nexport function statusButtonClass(accent: StatusAccent, variant: \"filled\" | \"outline\") {\n return cn(BTN_BASE, variant === \"filled\" ? BTN_FILLED[accent] : BTN_OUTLINE[accent]);\n}\n\n// The EV skyline crown — the rooftop silhouette of the brand logo (Figma uikit\n// node 17:3, wordmark omitted), filled with `currentColor` so it takes the accent.\nfunction LogoMark({ className }: { className?: string }) {\n return (\n <svg viewBox=\"0 0 140 48\" className={className} aria-hidden>\n <g fill=\"currentColor\">\n <path d=\"M0.0437012 47.3326L50.9499 40.5805V22.3378L56.4881 23.6408V37.9071L59.1984 37.5005V24.1147L64.6189 25.1808V37.0269L67.2113 36.553V22.1009L56.606 17.481L43.408 21.864V36.553L0.0437012 47.3326Z\" />\n <path d=\"M77.2277 40.5804L85.9478 41.4099L85.8299 0.304321L73.1033 7.17499V26.3654L77.2277 28.2608V40.5804Z\" />\n <path d=\"M87.126 0.304321L99.9705 7.29343V42.5943L94.3141 41.8835V9.54417L87.126 5.75347V0.304321Z\" />\n <path d=\"M103.034 42.9496L139.682 46.0296L110.104 39.7513V26.8393L103.034 23.0486V42.9496Z\" />\n </g>\n </svg>\n );\n}\n\n// lucide `arrow-left`, inlined so the kit keeps its zero-icon-dep footprint.\nfunction ArrowLeftIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n );\n}\n\nexport interface StatusLinkData {\n label: string;\n href: string;\n variant?: \"filled\" | \"outline\";\n leadingArrow?: boolean;\n}\n\nexport interface StatusScreenProps {\n accent: StatusAccent;\n eyebrow: string;\n code: string;\n headlineLead: string;\n headlineAccent: string;\n headlineTail?: string;\n subtext: string;\n links?: StatusLinkData[];\n /** Leading action slot, rendered before `links` (e.g. the 500 client retry). */\n children?: React.ReactNode;\n /** CTA element — `next/link` for soft nav; defaults to `<a>` (full load). */\n linkComponent?: React.ElementType;\n}\n\n/**\n * Shared skeleton for the 404 / 403 / 500 status pages: a centred hero with the\n * logo mark, a mono eyebrow, a giant Playfair code, a headline whose final clause\n * is an italic accent, supporting copy, and the CTAs. The accent threads through\n * all four marks. Actions render inline (from `links` data, plus an optional\n * `children` slot) — never passed as a JSX prop through a server boundary.\n */\nexport function StatusScreen({\n accent,\n eyebrow,\n code,\n headlineLead,\n headlineAccent,\n headlineTail = \".\",\n subtext,\n links,\n children,\n linkComponent,\n}: StatusScreenProps) {\n const L = linkComponent ?? \"a\";\n const accentText = ACCENT_TEXT[accent];\n return (\n <section className=\"relative flex min-h-screen flex-col items-center justify-center overflow-hidden bg-main-black px-6 py-32 text-center\">\n <div\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-0 opacity-[0.07] [background:radial-gradient(55%_45%_at_50%_30%,currentColor,transparent_70%)]\",\n accentText,\n )}\n />\n <div className=\"relative z-10 flex w-full max-w-2xl flex-col items-center\">\n <LogoMark className={cn(\"mb-7 h-10 w-auto\", accentText)} />\n <p className={cn(\"mb-6 font-mono-tech text-[11px] uppercase tracking-[0.34em]\", accentText)}>{eyebrow}</p>\n <p className={cn(\"font-serif-display text-[110px] font-medium leading-[0.9] sm:text-[180px]\", accentText)}>{code}</p>\n <h1 className=\"mt-4 font-serif-display text-3xl font-light leading-tight text-white sm:text-5xl\">\n {headlineLead}\n <span className={cn(\"font-serif italic\", accentText)}>{headlineAccent}</span>\n {headlineTail}\n </h1>\n <p className=\"mx-auto mt-5 max-w-md text-sm leading-relaxed text-main-mist/60 sm:text-base\">{subtext}</p>\n <div className=\"mt-9 flex flex-col items-center gap-3 sm:flex-row\">\n {children}\n {links?.map((link) => (\n <L key={link.label} href={link.href} className={statusButtonClass(accent, link.variant ?? \"filled\")}>\n {link.leadingArrow ? <ArrowLeftIcon className=\"mr-2 h-4 w-4\" /> : null}\n {link.label}\n </L>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nexport interface StatusPageProps {\n /** CTA element — `next/link` for soft nav; defaults to `<a>` (full load). */\n linkComponent?: React.ElementType;\n /** \"Back to home\" target — `/` for the landing, `/cabinet` for the cabinet. */\n homeHref?: string;\n /** Secondary CTA target (contact / request access). */\n contactHref?: string;\n}\n\n/** 404 — page not found. */\nexport function NotFound({ linkComponent = \"a\", homeHref = \"/\", contactHref = \"/contact\" }: StatusPageProps) {\n return (\n <StatusScreen\n accent=\"teal\"\n eyebrow=\"Page not found\"\n code=\"404\"\n headlineLead=\"You've reached \"\n headlineAccent=\"open water\"\n subtext=\"The page you're looking for has drifted off our coastline — moved, renamed, or never charted. Let's get you back to shore.\"\n linkComponent={linkComponent}\n links={[\n { label: \"Back to home\", href: homeHref, leadingArrow: true },\n { label: \"Contact the team\", href: contactHref, variant: \"outline\" },\n ]}\n />\n );\n}\n\n/** 403 — access forbidden. */\nexport function Forbidden({ linkComponent = \"a\", homeHref = \"/\", contactHref = \"/contact\" }: StatusPageProps) {\n return (\n <StatusScreen\n accent=\"gold\"\n eyebrow=\"Access forbidden\"\n code=\"403\"\n headlineLead=\"This harbour is \"\n headlineAccent=\"private\"\n subtext=\"You don't have the credentials to view this page. If you believe you should, our team can open the right doors.\"\n linkComponent={linkComponent}\n links={[\n { label: \"Back to home\", href: homeHref, leadingArrow: true },\n { label: \"Request access\", href: contactHref, variant: \"outline\" },\n ]}\n />\n );\n}\n\nexport interface ServerErrorProps {\n /** CTA element — `next/link` for soft nav; defaults to `<a>` (full load). */\n linkComponent?: React.ElementType;\n /** \"Back to home\" target — `/` for the landing, `/cabinet` for the cabinet. */\n homeHref?: string;\n /** Retry handler (e.g. Next's error-boundary `reset`); falls back to a reload. */\n reset?: () => void;\n}\n\n/** 500 — server error. The \"Try again\" button runs `reset` or reloads the page. */\nexport function ServerError({ linkComponent = \"a\", homeHref = \"/\", reset }: ServerErrorProps) {\n return (\n <StatusScreen\n accent=\"red\"\n eyebrow=\"Server error\"\n code=\"500\"\n headlineLead=\"Our systems are \"\n headlineAccent=\"recalibrating\"\n subtext=\"Something broke on our end — not yours. We've been alerted and are restoring service. Please try again in a moment.\"\n linkComponent={linkComponent}\n links={[{ label: \"Back to home\", href: homeHref, variant: \"outline\", leadingArrow: true }]}\n >\n <button\n type=\"button\"\n className={statusButtonClass(\"red\", \"filled\")}\n onClick={() => (reset ? reset() : window.location.reload())}\n >\n Try again\n </button>\n </StatusScreen>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n TABLE,\n TABLE_BODY,\n TABLE_CAPTION,\n TABLE_CELL,\n TABLE_CONTAINER,\n TABLE_FOOTER,\n TABLE_HEAD,\n TABLE_HEADER,\n TABLE_ROW,\n} from \"../generated/table\";\n\nexport function Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className={TABLE_CONTAINER}\n >\n <table\n data-slot=\"table\"\n className={cn(TABLE, className)}\n {...props}\n />\n </div>\n );\n}\n\nexport function TableHeader({\n className,\n ...props\n}: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(TABLE_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function TableBody({\n className,\n ...props\n}: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(TABLE_BODY, className)}\n {...props}\n />\n );\n}\n\nexport function TableFooter({\n className,\n ...props\n}: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(TABLE_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(TABLE_ROW, className)}\n {...props}\n />\n );\n}\n\nexport function TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(TABLE_HEAD, className)}\n {...props}\n />\n );\n}\n\nexport function TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(TABLE_CELL, className)}\n {...props}\n />\n );\n}\n\nexport function TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(TABLE_CAPTION, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TABLE_CONTAINER = \"relative w-full overflow-x-auto\";\n\nexport const TABLE = \"w-full caption-bottom text-sm\";\n\nexport const TABLE_HEADER = \"[&_tr]:border-b\";\n\nexport const TABLE_BODY = \"[&_tr:last-child]:border-0\";\n\nexport const TABLE_FOOTER = \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\";\n\nexport const TABLE_ROW = \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\";\n\nexport const TABLE_HEAD = \"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\";\n\nexport const TABLE_CELL = \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\";\n\nexport const TABLE_CAPTION = \"text-muted-foreground mt-4 text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n ACCORDION_CONTENT,\n ACCORDION_CONTENT_INNER,\n ACCORDION_HEADER,\n ACCORDION_ITEM,\n ACCORDION_TRIGGER,\n} from \"../generated/accordion\";\n\ntype AccordionType = \"single\" | \"multiple\";\n\ninterface AccordionContextValue {\n isOpen: (value: string) => boolean;\n toggle: (value: string) => void;\n}\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nfunction useAccordion(): AccordionContextValue {\n const ctx = React.useContext(AccordionContext);\n if (!ctx) throw new Error(\"Accordion parts must be used within <Accordion>\");\n return ctx;\n}\n\nconst ItemContext = React.createContext<string | null>(null);\n\nfunction useItemValue(): string {\n const value = React.useContext(ItemContext);\n if (value === null)\n throw new Error(\"AccordionTrigger/Content must be used within <AccordionItem>\");\n return value;\n}\n\nexport interface AccordionProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n type?: AccordionType;\n collapsible?: boolean;\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\nexport function Accordion({\n type = \"single\",\n collapsible = false,\n value,\n defaultValue = [],\n onValueChange,\n children,\n ...props\n}: AccordionProps) {\n const [open, setOpen] = useControllableState<string[]>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n\n const isOpen = (v: string) => open.includes(v);\n const toggle = (v: string) => {\n if (type === \"multiple\") {\n setOpen(open.includes(v) ? open.filter((x) => x !== v) : [...open, v]);\n return;\n }\n if (open.includes(v)) setOpen(collapsible ? [] : open);\n else setOpen([v]);\n };\n\n return (\n <AccordionContext.Provider value={{ isOpen, toggle }}>\n <div data-slot=\"accordion\" {...props}>\n {children}\n </div>\n </AccordionContext.Provider>\n );\n}\n\nexport interface AccordionItemProps extends React.ComponentProps<\"div\"> {\n value: string;\n}\n\nexport function AccordionItem({\n className,\n value,\n children,\n ...props\n}: AccordionItemProps) {\n return (\n <ItemContext.Provider value={value}>\n <div\n data-slot=\"accordion-item\"\n className={cn(ACCORDION_ITEM, className)}\n {...props}\n >\n {children}\n </div>\n </ItemContext.Provider>\n );\n}\n\nexport function AccordionTrigger({\n className,\n children,\n onClick,\n ...props\n}: React.ComponentProps<\"button\">) {\n const { isOpen, toggle } = useAccordion();\n const value = useItemValue();\n const open = isOpen(value);\n return (\n <h3 className={ACCORDION_HEADER} data-slot=\"accordion-header\">\n <button\n type=\"button\"\n data-slot=\"accordion-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n aria-expanded={open}\n className={cn(ACCORDION_TRIGGER, className)}\n onClick={(e) => {\n onClick?.(e);\n toggle(value);\n }}\n {...props}\n >\n {children}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n </h3>\n );\n}\n\nexport function AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { isOpen } = useAccordion();\n const value = useItemValue();\n if (!isOpen(value)) return null;\n return (\n <div\n data-slot=\"accordion-content\"\n data-state=\"open\"\n className={ACCORDION_CONTENT}\n {...props}\n >\n <div className={cn(ACCORDION_CONTENT_INNER, className)}>{children}</div>\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const ACCORDION_ITEM = \"border-b last:border-b-0\";\n\nexport const ACCORDION_HEADER = \"flex\";\n\nexport const ACCORDION_TRIGGER = \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180\";\n\nexport const ACCORDION_CONTENT = \"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm\";\n\nexport const ACCORDION_CONTENT_INNER = \"pt-0 pb-4\";\n","import * as React from \"react\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\n\ninterface CollapsibleContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n}\n\nconst CollapsibleContext = React.createContext<CollapsibleContextValue | null>(\n null,\n);\n\nfunction useCollapsible(): CollapsibleContextValue {\n const ctx = React.useContext(CollapsibleContext);\n if (!ctx) throw new Error(\"Collapsible parts must be used within <Collapsible>\");\n return ctx;\n}\n\nexport interface CollapsibleProps extends React.ComponentProps<\"div\"> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function Collapsible({\n open,\n defaultOpen = false,\n onOpenChange,\n children,\n ...props\n}: CollapsibleProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n return (\n <CollapsibleContext.Provider value={{ open: isOpen, setOpen }}>\n <div data-slot=\"collapsible\" data-state={isOpen ? \"open\" : \"closed\"} {...props}>\n {children}\n </div>\n </CollapsibleContext.Provider>\n );\n}\n\nexport function CollapsibleTrigger({\n onClick,\n ...props\n}: React.ComponentProps<\"button\">) {\n const { open, setOpen } = useCollapsible();\n return (\n <button\n type=\"button\"\n data-slot=\"collapsible-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n aria-expanded={open}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...props}\n />\n );\n}\n\nexport function CollapsibleContent({\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { open } = useCollapsible();\n if (!open) return null;\n return (\n <div data-slot=\"collapsible-content\" data-state=\"open\" {...props}>\n {children}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { TABS_ROOT, TABS_LIST, TABS_TRIGGER, TABS_CONTENT } from \"../generated/tabs\";\n\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\ninterface TabsContextValue {\n value: string;\n setValue: (next: string) => void;\n orientation: TabsOrientation;\n}\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null);\n\nfunction useTabs(): TabsContextValue {\n const ctx = React.useContext(TabsContext);\n if (!ctx) throw new Error(\"Tabs parts must be used within <Tabs>\");\n return ctx;\n}\n\nexport interface TabsProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: TabsOrientation;\n}\n\nexport function Tabs({\n className,\n value,\n defaultValue = \"\",\n onValueChange,\n orientation = \"horizontal\",\n children,\n ...props\n}: TabsProps) {\n const [active, setValue] = useControllableState<string>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n return (\n <TabsContext.Provider value={{ value: active, setValue, orientation }}>\n <div\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(TABS_ROOT, className)}\n {...props}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport function TabsList({\n className,\n children,\n onKeyDown,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { orientation } = useTabs();\n const items = React.Children.toArray(children);\n const { activeIndex, setActiveIndex, onKeyDown: rovingKeyDown } =\n useRovingFocus({\n count: items.length,\n orientation: orientation === \"vertical\" ? \"vertical\" : \"horizontal\",\n });\n return (\n <div\n role=\"tablist\"\n data-slot=\"tabs-list\"\n aria-orientation={orientation}\n className={cn(TABS_LIST, className)}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n rovingKeyDown(e);\n }}\n {...props}\n >\n {items.map((child, index) =>\n React.isValidElement(child)\n ? React.cloneElement(child as React.ReactElement<TabsTriggerInternal>, {\n __index: index,\n __isFocusItem: index === activeIndex,\n __onFocusItem: () => setActiveIndex(index),\n })\n : child,\n )}\n </div>\n );\n}\n\ninterface TabsTriggerInternal {\n __index?: number;\n __isFocusItem?: boolean;\n __onFocusItem?: () => void;\n}\n\nexport interface TabsTriggerProps\n extends React.ComponentProps<\"button\">,\n TabsTriggerInternal {\n value: string;\n}\n\nexport function TabsTrigger({\n className,\n value,\n onClick,\n onFocus,\n __isFocusItem,\n __onFocusItem,\n ...props\n}: TabsTriggerProps) {\n const { value: active, setValue } = useTabs();\n const selected = active === value;\n return (\n <button\n type=\"button\"\n role=\"tab\"\n data-slot=\"tabs-trigger\"\n data-state={selected ? \"active\" : \"inactive\"}\n aria-selected={selected}\n tabIndex={__isFocusItem ? 0 : -1}\n className={cn(TABS_TRIGGER, className)}\n onClick={(e) => {\n onClick?.(e);\n __onFocusItem?.();\n setValue(value);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n __onFocusItem?.();\n }}\n {...props}\n />\n );\n}\n\nexport interface TabsContentProps extends React.ComponentProps<\"div\"> {\n value: string;\n}\n\nexport function TabsContent({\n className,\n value,\n children,\n ...props\n}: TabsContentProps) {\n const { value: active } = useTabs();\n if (active !== value) return null;\n return (\n <div\n role=\"tabpanel\"\n data-slot=\"tabs-content\"\n data-state=\"active\"\n className={cn(TABS_CONTENT, className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TABS_ROOT = \"flex flex-col gap-2\";\n\nexport const TABS_LIST = \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]\";\n\nexport const TABS_TRIGGER = \"data-[state=active]:bg-background focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const TABS_CONTENT = \"flex-1 outline-none\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n TOGGLE_BASE,\n toggleSizeClasses,\n toggleVariantClasses,\n type ToggleSize,\n type ToggleVariant,\n} from \"../generated/toggle\";\n\nexport type { ToggleSize, ToggleVariant };\n\nexport interface ToggleVariantsOptions {\n variant?: ToggleVariant;\n size?: ToggleSize;\n className?: string;\n}\n\n/**\n * Returns the fused canonical toggle class string. Reused by `toggle-group` so\n * its items adopt the same styling, mirroring Rust's `toggle_classes`.\n */\nexport function toggleVariants({\n variant = \"default\",\n size = \"default\",\n className,\n}: ToggleVariantsOptions = {}): string {\n return cn(TOGGLE_BASE, toggleVariantClasses[variant], toggleSizeClasses[size], className);\n}\n\nexport interface ToggleProps\n extends Omit<React.ComponentProps<\"button\">, \"onChange\"> {\n variant?: ToggleVariant;\n size?: ToggleSize;\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n}\n\nexport function Toggle({\n className,\n variant = \"default\",\n size = \"default\",\n pressed,\n defaultPressed = false,\n onPressedChange,\n onClick,\n ...props\n}: ToggleProps) {\n const [on, setOn] = useControllableState<boolean>({\n ...(pressed !== undefined ? { value: pressed } : {}),\n defaultValue: defaultPressed,\n ...(onPressedChange ? { onChange: onPressedChange } : {}),\n });\n return (\n <button\n type=\"button\"\n data-slot=\"toggle\"\n data-state={on ? \"on\" : \"off\"}\n aria-pressed={on}\n className={cn(toggleVariants({ variant, size }), className)}\n onClick={(e) => {\n onClick?.(e);\n setOn(!on);\n }}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TOGGLE_BASE = \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 aria-invalid:border-destructive whitespace-nowrap\";\n\nexport const toggleVariantClasses = {\n \"default\": \"bg-transparent\",\n \"outline\": \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n} as const;\nexport type ToggleVariant = keyof typeof toggleVariantClasses;\n\nexport const toggleSizeClasses = {\n \"default\": \"h-9 px-2 min-w-9\",\n \"sm\": \"h-8 px-1.5 min-w-8\",\n \"lg\": \"h-10 px-2.5 min-w-10\",\n} as const;\nexport type ToggleSize = keyof typeof toggleSizeClasses;\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n toggleVariants,\n type ToggleVariant,\n type ToggleSize,\n} from \"./toggle\";\n\ntype ToggleGroupContextValue = {\n variant: ToggleVariant;\n size: ToggleSize;\n value: string[];\n toggle: (itemValue: string) => void;\n};\n\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue>({\n variant: \"default\",\n size: \"default\",\n value: [],\n toggle: () => {},\n});\n\nexport interface ToggleGroupProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n variant?: ToggleVariant;\n size?: ToggleSize;\n type?: \"single\" | \"multiple\";\n value?: string | string[];\n defaultValue?: string | string[];\n onValueChange?: (value: string | string[]) => void;\n}\n\nfunction toArray(v: string | string[] | undefined): string[] {\n if (v === undefined) return [];\n return Array.isArray(v) ? v : v === \"\" ? [] : [v];\n}\n\nexport function ToggleGroup({\n className,\n variant = \"default\",\n size = \"default\",\n type = \"single\",\n value,\n defaultValue,\n onValueChange,\n children,\n ...props\n}: ToggleGroupProps) {\n const [selected, setSelected] = useControllableState<string[]>({\n ...(value !== undefined ? { value: toArray(value) } : {}),\n defaultValue: toArray(defaultValue),\n onChange: (next) =>\n onValueChange?.(type === \"single\" ? (next[0] ?? \"\") : next),\n });\n\n const toggle = React.useCallback(\n (itemValue: string) => {\n if (type === \"single\") {\n setSelected(selected.includes(itemValue) ? [] : [itemValue]);\n } else {\n setSelected(\n selected.includes(itemValue)\n ? selected.filter((v) => v !== itemValue)\n : [...selected, itemValue],\n );\n }\n },\n [type, selected, setSelected],\n );\n\n return (\n <div\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n className={cn(\n \"group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs\",\n className,\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size, value: selected, toggle }}>\n {children}\n </ToggleGroupContext.Provider>\n </div>\n );\n}\n\nexport interface ToggleGroupItemProps\n extends Omit<React.ComponentProps<\"button\">, \"value\" | \"onChange\"> {\n value: string;\n variant?: ToggleVariant;\n size?: ToggleSize;\n}\n\nexport function ToggleGroupItem({\n className,\n children,\n value,\n variant,\n size,\n onClick,\n ...props\n}: ToggleGroupItemProps) {\n const context = React.useContext(ToggleGroupContext);\n const resolvedVariant = context.variant || variant || \"default\";\n const resolvedSize = context.size || size || \"default\";\n const on = context.value.includes(value);\n\n return (\n <button\n type=\"button\"\n data-slot=\"toggle-group-item\"\n data-variant={resolvedVariant}\n data-size={resolvedSize}\n data-state={on ? \"on\" : \"off\"}\n aria-pressed={on}\n className={cn(\n toggleVariants({ variant: resolvedVariant, size: resolvedSize }),\n \"min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l\",\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n context.toggle(value);\n }}\n {...props}\n >\n {children}\n </button>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\n\nexport interface SwitchProps\n extends Omit<React.ComponentProps<\"button\">, \"onChange\"> {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport function Switch({\n className,\n checked,\n defaultChecked = false,\n onCheckedChange,\n onClick,\n disabled,\n ...props\n}: SwitchProps) {\n const [on, setOn] = useControllableState<boolean>({\n ...(checked !== undefined ? { value: checked } : {}),\n defaultValue: defaultChecked,\n ...(onCheckedChange ? { onChange: onCheckedChange } : {}),\n });\n const state = on ? \"checked\" : \"unchecked\";\n return (\n <button\n type=\"button\"\n role=\"switch\"\n data-slot=\"switch\"\n data-state={state}\n aria-checked={on}\n disabled={disabled}\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n setOn(!on);\n }}\n {...props}\n >\n <span\n data-slot=\"switch-thumb\"\n data-state={state}\n className=\"bg-background pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n />\n </button>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\n\nexport interface CheckboxProps\n extends Omit<React.ComponentProps<\"button\">, \"onChange\"> {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nexport function Checkbox({\n className,\n checked,\n defaultChecked = false,\n onCheckedChange,\n onClick,\n disabled,\n ...props\n}: CheckboxProps) {\n const [on, setOn] = useControllableState<boolean>({\n ...(checked !== undefined ? { value: checked } : {}),\n defaultValue: defaultChecked,\n ...(onCheckedChange ? { onChange: onCheckedChange } : {}),\n });\n const state = on ? \"checked\" : \"unchecked\";\n return (\n <button\n type=\"button\"\n role=\"checkbox\"\n data-slot=\"checkbox\"\n data-state={state}\n aria-checked={on}\n disabled={disabled}\n className={cn(\n \"peer border-input data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n setOn(!on);\n }}\n {...props}\n >\n {on && (\n <span\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current transition-none\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-3.5\"\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </span>\n )}\n </button>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { RADIO_GROUP_ITEM, RADIO_GROUP_ROOT } from \"../generated/radio-group\";\n\ninterface RadioGroupContextValue {\n value: string;\n setValue: (next: string) => void;\n register: (el: HTMLButtonElement | null) => number;\n activeIndex: number;\n setActiveIndex: (i: number) => void;\n}\n\nconst RadioGroupContext = React.createContext<RadioGroupContextValue | null>(\n null,\n);\n\nexport interface RadioGroupProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport function RadioGroup({\n className,\n value,\n defaultValue = \"\",\n onValueChange,\n children,\n onKeyDown,\n ...props\n}: RadioGroupProps) {\n const [current, setCurrent] = useControllableState<string>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n\n const itemsRef = React.useRef<(HTMLButtonElement | null)[]>([]);\n const [count, setCount] = React.useState(0);\n\n const { activeIndex, setActiveIndex, onKeyDown: rovingKeyDown } =\n useRovingFocus({ count, orientation: \"vertical\", loop: true });\n\n const register = React.useCallback((el: HTMLButtonElement | null): number => {\n const list = itemsRef.current;\n let index = list.indexOf(el);\n if (index === -1) {\n index = list.length;\n list[index] = el;\n setCount(list.filter(Boolean).length);\n }\n return index;\n }, []);\n\n const ctx = React.useMemo<RadioGroupContextValue>(\n () => ({ value: current, setValue: setCurrent, register, activeIndex, setActiveIndex }),\n [current, setCurrent, register, activeIndex, setActiveIndex],\n );\n\n return (\n <RadioGroupContext.Provider value={ctx}>\n <div\n data-slot=\"radio-group\"\n role=\"radiogroup\"\n className={cn(RADIO_GROUP_ROOT, className)}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n rovingKeyDown(e);\n }}\n {...props}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n );\n}\n\nexport interface RadioGroupItemProps\n extends Omit<React.ComponentProps<\"button\">, \"value\"> {\n value: string;\n}\n\nexport function RadioGroupItem({\n className,\n value,\n disabled,\n onClick,\n ...props\n}: RadioGroupItemProps) {\n const ctx = React.useContext(RadioGroupContext);\n if (!ctx) throw new Error(\"RadioGroupItem must be used within a RadioGroup\");\n const indexRef = React.useRef(-1);\n const checked = ctx.value === value;\n\n React.useEffect(() => {\n if (checked) ctx.setActiveIndex(indexRef.current);\n }, [checked]);\n\n return (\n <button\n ref={(el) => {\n indexRef.current = ctx.register(el);\n }}\n type=\"button\"\n data-slot=\"radio-group-item\"\n data-state={checked ? \"checked\" : \"unchecked\"}\n role=\"radio\"\n aria-checked={checked}\n disabled={disabled}\n tabIndex={indexRef.current === ctx.activeIndex ? 0 : -1}\n className={cn(RADIO_GROUP_ITEM, className)}\n onClick={(e) => {\n onClick?.(e);\n ctx.setValue(value);\n }}\n {...props}\n >\n {checked ? (\n <span\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <svg\n className=\"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n </span>\n ) : null}\n </button>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const RADIO_GROUP_ROOT = \"grid gap-3\";\n\nexport const RADIO_GROUP_ITEM = \"border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { SLIDER_RANGE, SLIDER_ROOT, SLIDER_THUMB, SLIDER_TRACK } from \"../generated/slider\";\n\ntype Orientation = \"horizontal\" | \"vertical\";\n\nfunction clampStep(value: number, min: number, max: number, step: number): number {\n const clamped = Math.min(max, Math.max(min, value));\n if (step <= 0) return clamped;\n const steps = Math.round((clamped - min) / step);\n return Math.min(max, Math.max(min, min + steps * step));\n}\n\nexport interface SliderProps\n extends Omit<React.ComponentProps<\"span\">, \"defaultValue\" | \"onChange\"> {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n orientation?: Orientation;\n disabled?: boolean;\n}\n\nexport function Slider({\n className,\n value,\n defaultValue = 0,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n orientation = \"horizontal\",\n disabled = false,\n ...props\n}: SliderProps) {\n const [raw, setRaw] = useControllableState<number>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n const current = clampStep(raw, min, max, step);\n const span = Math.max(max - min, Number.EPSILON);\n const percent = Math.min(100, Math.max(0, ((current - min) / span) * 100));\n\n const trackRef = React.useRef<HTMLSpanElement>(null);\n const draggingRef = React.useRef(false);\n\n const valueFromPointer = React.useCallback(\n (clientX: number, clientY: number) => {\n const rect = trackRef.current?.getBoundingClientRect();\n if (!rect) return current;\n const ratio =\n orientation === \"vertical\"\n ? (rect.bottom - clientY) / rect.height\n : (clientX - rect.left) / rect.width;\n return clampStep(min + ratio * (max - min), min, max, step);\n },\n [current, orientation, min, max, step],\n );\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n let next: number;\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n next = current + step;\n break;\n case \"ArrowLeft\":\n case \"ArrowDown\":\n next = current - step;\n break;\n case \"Home\":\n next = min;\n break;\n case \"End\":\n next = max;\n break;\n default:\n return;\n }\n event.preventDefault();\n setRaw(clampStep(next, min, max, step));\n };\n\n const onPointerDown = (event: React.PointerEvent) => {\n if (disabled) return;\n draggingRef.current = true;\n event.currentTarget.setPointerCapture?.(event.pointerId);\n setRaw(valueFromPointer(event.clientX, event.clientY));\n };\n\n const onPointerMove = (event: React.PointerEvent) => {\n if (!draggingRef.current || disabled) return;\n setRaw(valueFromPointer(event.clientX, event.clientY));\n };\n\n const onPointerUp = (event: React.PointerEvent) => {\n draggingRef.current = false;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n };\n\n const rangeStyle: React.CSSProperties =\n orientation === \"vertical\" ? { height: `${percent}%` } : { width: `${percent}%` };\n // The thumb is absolutely positioned within the (relative) root and centered\n // on the value point; without `position:absolute` the `%` offset is ignored and\n // flow layout parks it at the end of the row.\n const thumbStyle: React.CSSProperties =\n orientation === \"vertical\"\n ? { position: \"absolute\", bottom: `${percent}%`, left: \"50%\", transform: \"translate(-50%, 50%)\" }\n : { position: \"absolute\", left: `${percent}%`, top: \"50%\", transform: \"translate(-50%, -50%)\" };\n\n return (\n <span\n data-slot=\"slider\"\n data-orientation={orientation}\n data-disabled={disabled || undefined}\n className={cn(SLIDER_ROOT, className)}\n {...props}\n // Pointer handling lives on the root, not the track: the thumb sits above\n // the track (absolute), so grabbing it must still start a drag.\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n >\n <span\n ref={trackRef}\n data-slot=\"slider-track\"\n data-orientation={orientation}\n className={SLIDER_TRACK}\n >\n <span\n data-slot=\"slider-range\"\n data-orientation={orientation}\n className={SLIDER_RANGE}\n style={rangeStyle}\n />\n </span>\n <span\n data-slot=\"slider-thumb\"\n data-orientation={orientation}\n className={SLIDER_THUMB}\n style={thumbStyle}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuenow={current}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-orientation={orientation}\n aria-disabled={disabled || undefined}\n onKeyDown={onKeyDown}\n />\n </span>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SLIDER_ROOT = \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\";\n\nexport const SLIDER_TRACK = \"bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\";\n\nexport const SLIDER_RANGE = \"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\";\n\nexport const SLIDER_THUMB = \"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n SCROLL_AREA_THUMB,\n SCROLL_AREA_VIEWPORT,\n SCROLLBAR_BASE,\n scrollBarOrientations,\n type ScrollBarOrientation,\n} from \"../generated/scroll-area\";\n\nexport type { ScrollBarOrientation };\n\n// Dep-light scroll area: a viewport `div` with native `overflow` scrolling.\n// Custom scrollbar thumb tracking is omitted — native overflow does the work;\n// `ScrollBar` is a static decorative element kept for class parity.\n\nexport function ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"scroll-area\" className={cn(\"relative\", className)} {...props}>\n <div data-slot=\"scroll-area-viewport\" className={SCROLL_AREA_VIEWPORT}>\n {children}\n </div>\n <ScrollBar />\n </div>\n );\n}\n\nexport interface ScrollBarProps extends React.ComponentProps<\"div\"> {\n orientation?: ScrollBarOrientation;\n}\n\nexport function ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: ScrollBarProps) {\n return (\n <div\n data-slot=\"scroll-area-scrollbar\"\n data-orientation={orientation}\n className={cn(SCROLLBAR_BASE, scrollBarOrientations[orientation], className)}\n {...props}\n >\n <div data-slot=\"scroll-area-thumb\" className={SCROLL_AREA_THUMB} />\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SCROLL_AREA_VIEWPORT = \"focus-visible:ring-ring/50 size-full rounded-[inherit] overflow-auto transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\";\n\nexport const SCROLL_AREA_THUMB = \"bg-border relative flex-1 rounded-full\";\n\nexport const SCROLLBAR_BASE = \"flex touch-none p-px transition-colors select-none\";\n\nexport const scrollBarOrientations = {\n \"vertical\": \"h-full w-2.5 border-l border-l-transparent\",\n \"horizontal\": \"h-2.5 flex-col border-t border-t-transparent\",\n} as const;\nexport type ScrollBarOrientation = keyof typeof scrollBarOrientations;\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Slot } from \"../primitives/slot\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n SIDEBAR_MENU_BUTTON_BASE,\n sidebarMenuButtonVariantClasses,\n sidebarMenuButtonSizeClasses,\n SIDEBAR_WRAPPER,\n SIDEBAR_FLAT,\n SIDEBAR_INNER,\n SIDEBAR_TRIGGER,\n SIDEBAR_RAIL,\n SIDEBAR_INSET,\n SIDEBAR_HEADER,\n SIDEBAR_FOOTER,\n SIDEBAR_SEPARATOR,\n SIDEBAR_CONTENT,\n SIDEBAR_GROUP,\n SIDEBAR_GROUP_LABEL,\n SIDEBAR_GROUP_CONTENT,\n SIDEBAR_MENU,\n SIDEBAR_MENU_ITEM,\n type SidebarMenuButtonVariant,\n type SidebarMenuButtonSize,\n} from \"../generated/sidebar\";\n\nexport type { SidebarMenuButtonVariant, SidebarMenuButtonSize };\n\n// omitted: mobile sheet, cookie, kbd shortcut — see README Limitations\n\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\n\ninterface SidebarContextValue {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n toggleSidebar: () => void;\n}\n\nconst SidebarContext = React.createContext<SidebarContextValue | null>(null);\n\nexport function useSidebar(): SidebarContextValue {\n const ctx = React.useContext(SidebarContext);\n if (!ctx) throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n return ctx;\n}\n\nexport interface SidebarProviderProps extends React.ComponentProps<\"div\"> {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange,\n className,\n style,\n children,\n ...props\n}: SidebarProviderProps) {\n const [open, setOpen] = useControllableState<boolean>({\n ...(openProp !== undefined ? { value: openProp } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const toggleSidebar = React.useCallback(\n () => setOpen(!open),\n [open, setOpen],\n );\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextValue>(\n () => ({ state, open, setOpen, toggleSidebar }),\n [state, open, setOpen, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(SIDEBAR_WRAPPER, className)}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n}\n\nexport interface SidebarProps extends React.ComponentProps<\"div\"> {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}\n\nexport function Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: SidebarProps) {\n const { state } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(SIDEBAR_FLAT, className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n <div\n data-slot=\"sidebar-inner\"\n className={cn(SIDEBAR_INNER, className)}\n {...props}\n >\n {children}\n </div>\n </div>\n );\n}\n\nexport function SidebarTrigger({\n className,\n onClick,\n children,\n ...props\n}: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n type=\"button\"\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n aria-label=\"Toggle Sidebar\"\n className={cn(SIDEBAR_TRIGGER, className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n {children}\n <span className=\"sr-only\">Toggle Sidebar</span>\n </button>\n );\n}\n\nexport function SidebarRail({\n className,\n ...props\n}: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n type=\"button\"\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(SIDEBAR_RAIL, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(SIDEBAR_INSET, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(SIDEBAR_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(SIDEBAR_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n role=\"separator\"\n className={cn(SIDEBAR_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(SIDEBAR_CONTENT, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(SIDEBAR_GROUP, className)}\n {...props}\n />\n );\n}\n\nexport interface SidebarGroupLabelProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nexport function SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: SidebarGroupLabelProps) {\n const Comp = asChild ? Slot : \"div\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(SIDEBAR_GROUP_LABEL, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(SIDEBAR_GROUP_CONTENT, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(SIDEBAR_MENU, className)}\n {...props}\n />\n );\n}\n\nexport function SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(SIDEBAR_MENU_ITEM, className)}\n {...props}\n />\n );\n}\n\nexport interface SidebarMenuButtonProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n isActive?: boolean;\n variant?: SidebarMenuButtonVariant;\n size?: SidebarMenuButtonSize;\n}\n\nexport function SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n className,\n ...props\n}: SidebarMenuButtonProps) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n SIDEBAR_MENU_BUTTON_BASE,\n sidebarMenuButtonVariantClasses[variant],\n sidebarMenuButtonSizeClasses[size],\n className,\n )}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SIDEBAR_MENU_BUTTON_BASE = \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\";\n\nexport const sidebarMenuButtonVariantClasses = {\n \"default\": \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"outline\": \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n} as const;\nexport type SidebarMenuButtonVariant = keyof typeof sidebarMenuButtonVariantClasses;\n\nexport const sidebarMenuButtonSizeClasses = {\n \"default\": \"h-8 text-sm\",\n \"sm\": \"h-7 text-xs\",\n \"lg\": \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n} as const;\nexport type SidebarMenuButtonSize = keyof typeof sidebarMenuButtonSizeClasses;\n\nexport const SIDEBAR_WRAPPER = \"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\";\n\nexport const SIDEBAR_FLAT = \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\";\n\nexport const SIDEBAR_INNER = \"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\";\n\nexport const SIDEBAR_TRIGGER = \"inline-flex size-7 items-center justify-center rounded-md hover:bg-accent hover:text-accent-foreground\";\n\nexport const SIDEBAR_RAIL = \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\";\n\nexport const SIDEBAR_INSET = \"bg-background relative flex w-full flex-1 flex-col md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\";\n\nexport const SIDEBAR_HEADER = \"flex flex-col gap-2 p-2\";\n\nexport const SIDEBAR_FOOTER = \"flex flex-col gap-2 p-2\";\n\nexport const SIDEBAR_SEPARATOR = \"bg-sidebar-border mx-2 h-px w-auto shrink-0\";\n\nexport const SIDEBAR_CONTENT = \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\";\n\nexport const SIDEBAR_GROUP = \"relative flex w-full min-w-0 flex-col p-2\";\n\nexport const SIDEBAR_GROUP_LABEL = \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0 group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\";\n\nexport const SIDEBAR_GROUP_CONTENT = \"w-full text-sm\";\n\nexport const SIDEBAR_MENU = \"flex w-full min-w-0 flex-col gap-1\";\n\nexport const SIDEBAR_MENU_ITEM = \"group/menu-item relative\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Button, type ButtonProps } from \"./button\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n CAROUSEL_CONTENT_TRACK,\n CAROUSEL_CONTENT_TRACK_HORIZONTAL,\n CAROUSEL_CONTENT_TRACK_VERTICAL,\n CAROUSEL_CONTENT_VIEWPORT,\n CAROUSEL_EDGE_FADE_NEXT,\n CAROUSEL_EDGE_FADE_PREV,\n CAROUSEL_ITEM,\n CAROUSEL_ITEM_HORIZONTAL,\n CAROUSEL_ITEM_VERTICAL,\n CAROUSEL_NAV,\n CAROUSEL_NEXT_HORIZONTAL,\n CAROUSEL_NEXT_VERTICAL,\n CAROUSEL_PREVIOUS_HORIZONTAL,\n CAROUSEL_PREVIOUS_VERTICAL,\n} from \"../generated/carousel\";\n\ntype CarouselOrientation = \"horizontal\" | \"vertical\";\n\ntype CarouselContextProps = {\n orientation: CarouselOrientation;\n index: number;\n count: number;\n setCount: (count: number) => void;\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n};\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n return context;\n}\n\nexport interface CarouselProps extends React.ComponentProps<\"div\"> {\n orientation?: CarouselOrientation;\n index?: number;\n defaultIndex?: number;\n onIndexChange?: (index: number) => void;\n}\n\nexport function Carousel({\n orientation = \"horizontal\",\n index: indexProp,\n defaultIndex = 0,\n onIndexChange,\n className,\n children,\n onKeyDown,\n ...props\n}: CarouselProps) {\n const [index, setIndex] = useControllableState<number>({\n value: indexProp,\n defaultValue: defaultIndex,\n onChange: onIndexChange,\n });\n const [count, setCount] = React.useState(0);\n\n const canScrollPrev = index > 0;\n const canScrollNext = index < count - 1;\n\n const scrollPrev = React.useCallback(() => {\n if (index > 0) setIndex(index - 1);\n }, [index, setIndex]);\n\n const scrollNext = React.useCallback(() => {\n if (index < count - 1) setIndex(index + 1);\n }, [index, count, setIndex]);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n onKeyDown?.(event);\n };\n\n return (\n <CarouselContext.Provider\n value={{\n orientation,\n index,\n count,\n setCount,\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n tabIndex={0}\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\nexport function CarouselContent({\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { orientation, index, setCount } = useCarousel();\n const childCount = React.Children.count(children);\n\n React.useEffect(() => {\n setCount(childCount);\n }, [childCount, setCount]);\n\n // drag/momentum: omitted vs embla — see README Limitations\n const transform =\n orientation === \"horizontal\"\n ? `translate3d(-${index * 100}%, 0, 0)`\n : `translate3d(0, -${index * 100}%, 0)`;\n\n return (\n <div className={CAROUSEL_CONTENT_VIEWPORT} data-slot=\"carousel-content\">\n <div\n className={cn(\n CAROUSEL_CONTENT_TRACK,\n orientation === \"horizontal\"\n ? CAROUSEL_CONTENT_TRACK_HORIZONTAL\n : CAROUSEL_CONTENT_TRACK_VERTICAL,\n className,\n )}\n style={{ transform }}\n {...props}\n >\n {children}\n </div>\n </div>\n );\n}\n\nexport function CarouselItem({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n CAROUSEL_ITEM,\n orientation === \"horizontal\" ? CAROUSEL_ITEM_HORIZONTAL : CAROUSEL_ITEM_VERTICAL,\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Netflix-style edge scrims that dissolve the current slide into the surface\n * colour, signalling adjacent slides without revealing them. Each side shows\n * only when there is somewhere to scroll. Drop inside a <Carousel>.\n */\nexport function CarouselEdgeFade({\n className,\n}: {\n className?: string;\n}) {\n const { canScrollPrev, canScrollNext } = useCarousel();\n\n return (\n <>\n <div\n aria-hidden\n className={cn(\n CAROUSEL_EDGE_FADE_PREV,\n canScrollPrev ? \"opacity-100\" : \"opacity-0\",\n className,\n )}\n />\n <div\n aria-hidden\n className={cn(\n CAROUSEL_EDGE_FADE_NEXT,\n canScrollNext ? \"opacity-100\" : \"opacity-0\",\n className,\n )}\n />\n </>\n );\n}\n\nexport function CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: ButtonProps) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n CAROUSEL_NAV,\n orientation === \"horizontal\"\n ? CAROUSEL_PREVIOUS_HORIZONTAL\n : CAROUSEL_PREVIOUS_VERTICAL,\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 18-6-6 6-6\" />\n </svg>\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\nexport function CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: ButtonProps) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n CAROUSEL_NAV,\n orientation === \"horizontal\"\n ? CAROUSEL_NEXT_HORIZONTAL\n : CAROUSEL_NEXT_VERTICAL,\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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 18 6-6-6-6\" />\n </svg>\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CAROUSEL_CONTENT_VIEWPORT = \"overflow-hidden\";\n\nexport const CAROUSEL_CONTENT_TRACK = \"flex transition-transform\";\n\nexport const CAROUSEL_CONTENT_TRACK_HORIZONTAL = \"-ml-4\";\n\nexport const CAROUSEL_CONTENT_TRACK_VERTICAL = \"-mt-4 flex-col\";\n\nexport const CAROUSEL_ITEM = \"min-w-0 shrink-0 grow-0 basis-full\";\n\nexport const CAROUSEL_ITEM_HORIZONTAL = \"pl-4\";\n\nexport const CAROUSEL_ITEM_VERTICAL = \"pt-4\";\n\nexport const CAROUSEL_NAV = \"absolute size-8 rounded-full\";\n\nexport const CAROUSEL_PREVIOUS_HORIZONTAL = \"top-1/2 -left-12 -translate-y-1/2\";\n\nexport const CAROUSEL_PREVIOUS_VERTICAL = \"-top-12 left-1/2 -translate-x-1/2 rotate-90\";\n\nexport const CAROUSEL_NEXT_HORIZONTAL = \"top-1/2 -right-12 -translate-y-1/2\";\n\nexport const CAROUSEL_NEXT_VERTICAL = \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\";\n\nexport const CAROUSEL_EDGE_FADE_PREV = \"pointer-events-none absolute inset-y-0 left-0 w-24 bg-gradient-to-r from-background/45 via-background/20 to-transparent\";\n\nexport const CAROUSEL_EDGE_FADE_NEXT = \"pointer-events-none absolute inset-y-0 right-0 w-24 bg-gradient-to-l from-background/45 via-background/20 to-transparent\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport {\n INPUT_OTP_CONTAINER,\n INPUT_OTP_GROUP,\n INPUT_OTP_INPUT,\n INPUT_OTP_SLOT,\n INPUT_OTP_SLOT_CARET,\n INPUT_OTP_SLOT_CARET_WRAPPER,\n} from \"../generated/input-otp\";\n\ntype InputOTPContextValue = {\n value: string;\n maxLength: number;\n activeIndex: number;\n};\n\nconst InputOTPContext = React.createContext<InputOTPContextValue | null>(null);\n\nfunction useInputOTP() {\n const context = React.useContext(InputOTPContext);\n if (!context) {\n throw new Error(\"InputOTP slots must be used within an <InputOTP />\");\n }\n return context;\n}\n\nexport interface InputOTPProps\n extends Omit<React.ComponentProps<\"input\">, \"value\" | \"defaultValue\" | \"onChange\"> {\n maxLength: number;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n containerClassName?: string;\n children?: React.ReactNode;\n}\n\nexport function InputOTP({\n maxLength,\n value: valueProp,\n defaultValue = \"\",\n onChange,\n className,\n containerClassName,\n children,\n disabled,\n ...props\n}: InputOTPProps) {\n const [value, setValue] = useControllableState<string>({\n value: valueProp,\n defaultValue,\n onChange,\n });\n const [focused, setFocused] = React.useState(false);\n\n const activeIndex = focused ? Math.min(value.length, maxLength - 1) : -1;\n\n return (\n <InputOTPContext.Provider value={{ value, maxLength, activeIndex }}>\n <div\n data-slot=\"input-otp\"\n className={cn(INPUT_OTP_CONTAINER, containerClassName)}\n >\n {children}\n <input\n // drag/momentum: n/a — single visually-hidden input tracks the string\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n maxLength={maxLength}\n value={value}\n disabled={disabled}\n onChange={(e) => setValue(e.target.value.slice(0, maxLength))}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n className={cn(INPUT_OTP_INPUT, className)}\n {...props}\n />\n </div>\n </InputOTPContext.Provider>\n );\n}\n\nexport function InputOTPGroup({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(INPUT_OTP_GROUP, className)}\n {...props}\n />\n );\n}\n\nexport interface InputOTPSlotProps extends React.ComponentProps<\"div\"> {\n index: number;\n}\n\nexport function InputOTPSlot({ index, className, ...props }: InputOTPSlotProps) {\n const { value, activeIndex } = useInputOTP();\n const char = value[index];\n const isActive = activeIndex === index;\n const hasFakeCaret = isActive && char === undefined;\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(INPUT_OTP_SLOT, className)}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className={INPUT_OTP_SLOT_CARET_WRAPPER}>\n <div className={INPUT_OTP_SLOT_CARET} />\n </div>\n )}\n </div>\n );\n}\n\nexport function InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\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=\"M5 12h14\" />\n </svg>\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const INPUT_OTP_CONTAINER = \"relative flex items-center gap-2 has-disabled:opacity-50\";\n\nexport const INPUT_OTP_INPUT = \"absolute inset-0 h-full w-full opacity-0 disabled:cursor-not-allowed\";\n\nexport const INPUT_OTP_GROUP = \"flex items-center\";\n\nexport const INPUT_OTP_SLOT = \"data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]\";\n\nexport const INPUT_OTP_SLOT_CARET_WRAPPER = \"pointer-events-none absolute inset-0 flex items-center justify-center\";\n\nexport const INPUT_OTP_SLOT_CARET = \"animate-caret-blink bg-foreground h-4 w-px duration-1000\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport { TOOLTIP_CONTENT } from \"../generated/tooltip\";\n\ninterface TooltipContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null);\n\nfunction useTooltip(): TooltipContextValue {\n const ctx = React.useContext(TooltipContext);\n if (!ctx) throw new Error(\"Tooltip parts must be used within <Tooltip>\");\n return ctx;\n}\n\nexport interface TooltipProviderProps {\n children?: React.ReactNode;\n}\n\nexport function TooltipProvider({ children }: TooltipProviderProps) {\n return <>{children}</>;\n}\n\nexport interface TooltipProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function Tooltip({ open, defaultOpen = false, onOpenChange, children }: TooltipProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n return (\n <TooltipProvider>\n <TooltipContext.Provider value={{ open: isOpen, setOpen, anchorRef }}>\n {children}\n </TooltipContext.Provider>\n </TooltipProvider>\n );\n}\n\nexport interface TooltipTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function TooltipTrigger({\n asChild = false,\n onPointerEnter,\n onPointerLeave,\n onFocus,\n onBlur,\n ...props\n}: TooltipTriggerProps) {\n const { setOpen, anchorRef } = useTooltip();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"tooltip-trigger\"\n ref={anchorRef as React.Ref<never>}\n onPointerEnter={(e: React.PointerEvent<HTMLButtonElement>) => {\n onPointerEnter?.(e);\n setOpen(true);\n }}\n onPointerLeave={(e: React.PointerEvent<HTMLButtonElement>) => {\n onPointerLeave?.(e);\n setOpen(false);\n }}\n onFocus={(e: React.FocusEvent<HTMLButtonElement>) => {\n onFocus?.(e);\n setOpen(true);\n }}\n onBlur={(e: React.FocusEvent<HTMLButtonElement>) => {\n onBlur?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface TooltipContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n sideOffset?: number;\n}\n\nexport function TooltipContent({\n className,\n side: sideProp = \"top\",\n sideOffset = 0,\n children,\n ...props\n}: TooltipContentProps) {\n const { open, anchorRef } = useTooltip();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: sideProp,\n offset: sideOffset,\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n data-slot=\"tooltip-content\"\n role=\"tooltip\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n ref={mergeRefs(floatingRef, presRef)}\n style={style}\n className={cn(TOOLTIP_CONTENT, className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </Portal>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TOOLTIP_CONTENT = \"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport { POPOVER_CONTENT } from \"../generated/popover\";\n\ninterface PopoverContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n}\n\nconst PopoverContext = React.createContext<PopoverContextValue | null>(null);\n\nfunction usePopover(): PopoverContextValue {\n const ctx = React.useContext(PopoverContext);\n if (!ctx) throw new Error(\"Popover parts must be used within <Popover>\");\n return ctx;\n}\n\nexport interface PopoverProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function Popover({ open, defaultOpen = false, onOpenChange, children }: PopoverProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n return (\n <PopoverContext.Provider value={{ open: isOpen, setOpen, anchorRef }}>\n {children}\n </PopoverContext.Provider>\n );\n}\n\nexport interface PopoverTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function PopoverTrigger({ asChild = false, onClick, ...props }: PopoverTriggerProps) {\n const { open, setOpen, anchorRef } = usePopover();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"popover-trigger\"\n aria-expanded={open}\n ref={anchorRef as React.Ref<never>}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface PopoverAnchorProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nexport function PopoverAnchor({ asChild = false, ...props }: PopoverAnchorProps) {\n const { anchorRef } = usePopover();\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp\n data-slot=\"popover-anchor\"\n ref={anchorRef as React.Ref<never>}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface PopoverContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n}\n\nexport function PopoverContent({\n className,\n side: sideProp = \"bottom\",\n align = \"center\",\n sideOffset = 4,\n children,\n ...props\n}: PopoverContentProps) {\n const { open, setOpen, anchorRef } = usePopover();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: sideProp,\n align,\n offset: sideOffset,\n });\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [anchorRef],\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n data-slot=\"popover-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n data-align={align}\n ref={mergeRefs(floatingRef, dismissRef, presRef)}\n style={style}\n className={cn(\n POPOVER_CONTENT,\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </Portal>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const POPOVER_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-hidden\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { useHoverIntent } from \"../primitives/use-hover-intent\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport { POPOVER_CONTENT } from \"../generated/popover\";\n\n/**\n * `InfoTip` — the ⓘ-beside-a-label *toggletip*. It reuses the popover machinery\n * (controllable state + floating + dismissable layer + portal) but deliberately\n * NOT the tooltip ARIA: the trigger is a real `<button aria-expanded aria-controls>`\n * and the bubble is a `role=\"status\"` live region, never `role=\"tooltip\"`. That is\n * the pattern that stays correct across mouse, keyboard and touch (a `role=tooltip`\n * is hover/focus-only and never opens on tap). Hover-with-intent (~0.5s) is layered\n * on as a mouse-only enhancement; click/tap/Enter/Space toggle instantly.\n *\n * The bubble holds plain, non-interactive help text — it does not trap focus and\n * nothing inside it is focusable, so there is no focus to manage or return.\n */\ninterface InfoTipContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n contentId: string;\n}\n\nconst InfoTipContext = React.createContext<InfoTipContextValue | null>(null);\n\nfunction useInfoTip(): InfoTipContextValue {\n const ctx = React.useContext(InfoTipContext);\n if (!ctx) throw new Error(\"InfoTip parts must be used within <InfoTip>\");\n return ctx;\n}\n\nexport interface InfoTipProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function InfoTip({\n open,\n defaultOpen = false,\n onOpenChange,\n children,\n}: InfoTipProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n const contentId = React.useId();\n return (\n <InfoTipContext.Provider\n value={{ open: isOpen, setOpen, anchorRef, contentId }}\n >\n {children}\n </InfoTipContext.Provider>\n );\n}\n\n// lucide `info`, inlined per the kit's no-lucide-dep icon convention.\nfunction InfoGlyph({ className }: { className?: string }) {\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 aria-hidden\n className={cn(\"size-4\", className)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n );\n}\n\nexport interface InfoTipTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n /** Accessible name for the icon-only button. */\n label?: string;\n /** Milliseconds the mouse must dwell before the tip opens on hover. */\n hoverDelay?: number;\n}\n\nexport function InfoTipTrigger({\n asChild = false,\n label = \"More information\",\n hoverDelay = 500,\n className,\n onClick,\n onBlur,\n onPointerEnter,\n onPointerLeave,\n children,\n ...props\n}: InfoTipTriggerProps) {\n const { open, setOpen, anchorRef, contentId } = useInfoTip();\n const hover = useHoverIntent({\n onOpen: () => setOpen(true),\n onClose: () => setOpen(false),\n openDelay: hoverDelay,\n });\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"info-tip-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n type={asChild ? undefined : \"button\"}\n aria-label={label}\n aria-expanded={open}\n aria-controls={contentId}\n ref={anchorRef as React.Ref<never>}\n className={cn(\n \"inline-flex size-4 shrink-0 cursor-help items-center justify-center rounded-full align-middle text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:text-main-accent-t1\",\n className,\n )}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(!open);\n }}\n onBlur={(e: React.FocusEvent<HTMLButtonElement>) => {\n onBlur?.(e);\n setOpen(false);\n }}\n onPointerEnter={(e: React.PointerEvent<HTMLButtonElement>) => {\n onPointerEnter?.(e);\n hover.onPointerEnter(e);\n }}\n onPointerLeave={(e: React.PointerEvent<HTMLButtonElement>) => {\n onPointerLeave?.(e);\n hover.onPointerLeave(e);\n }}\n {...(props as Record<string, unknown>)}\n >\n {children ?? <InfoGlyph />}\n </Comp>\n );\n}\n\nexport interface InfoTipContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n}\n\nexport function InfoTipContent({\n className,\n side: sideProp = \"bottom\",\n align = \"center\",\n sideOffset = 6,\n children,\n ...props\n}: InfoTipContentProps) {\n const { open, setOpen, anchorRef, contentId } = useInfoTip();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: sideProp,\n align,\n offset: sideOffset,\n });\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [anchorRef],\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n id={contentId}\n role=\"status\"\n aria-live=\"polite\"\n data-slot=\"info-tip-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n data-align={align}\n ref={mergeRefs(floatingRef, dismissRef, presRef)}\n style={style}\n className={cn(POPOVER_CONTENT, \"w-64 p-3 text-sm\", className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </Portal>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport { HOVER_CARD_CONTENT } from \"../generated/hover-card\";\n\ninterface HoverCardContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n}\n\nconst HoverCardContext = React.createContext<HoverCardContextValue | null>(null);\n\nfunction useHoverCard(): HoverCardContextValue {\n const ctx = React.useContext(HoverCardContext);\n if (!ctx) throw new Error(\"HoverCard parts must be used within <HoverCard>\");\n return ctx;\n}\n\nexport interface HoverCardProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function HoverCard({ open, defaultOpen = false, onOpenChange, children }: HoverCardProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n return (\n <HoverCardContext.Provider value={{ open: isOpen, setOpen, anchorRef }}>\n {children}\n </HoverCardContext.Provider>\n );\n}\n\nexport interface HoverCardTriggerProps extends React.ComponentProps<\"a\"> {\n asChild?: boolean;\n}\n\nexport function HoverCardTrigger({\n asChild = false,\n onPointerEnter,\n onPointerLeave,\n ...props\n}: HoverCardTriggerProps) {\n const { setOpen, anchorRef } = useHoverCard();\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n data-slot=\"hover-card-trigger\"\n ref={anchorRef as React.Ref<never>}\n onPointerEnter={(e: React.PointerEvent<HTMLAnchorElement>) => {\n onPointerEnter?.(e);\n setOpen(true);\n }}\n onPointerLeave={(e: React.PointerEvent<HTMLAnchorElement>) => {\n onPointerLeave?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface HoverCardContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n}\n\nexport function HoverCardContent({\n className,\n side: sideProp = \"bottom\",\n align = \"center\",\n sideOffset = 4,\n children,\n ...props\n}: HoverCardContentProps) {\n const { open, anchorRef } = useHoverCard();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: sideProp,\n align,\n offset: sideOffset,\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n data-slot=\"hover-card-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n data-align={align}\n ref={mergeRefs(floatingRef, presRef)}\n style={style}\n className={cn(HOVER_CARD_CONTENT, className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </Portal>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const HOVER_CARD_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 rounded-md border p-4 shadow-md outline-hidden\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n DROPDOWN_MENU_CHECK_ITEM,\n DROPDOWN_MENU_CONTENT,\n DROPDOWN_MENU_ITEM,\n DROPDOWN_MENU_ITEM_INDICATOR,\n DROPDOWN_MENU_LABEL,\n DROPDOWN_MENU_SEPARATOR,\n DROPDOWN_MENU_SHORTCUT,\n DROPDOWN_MENU_SUB_CONTENT,\n DROPDOWN_MENU_SUB_TRIGGER,\n} from \"../generated/dropdown-menu\";\n\ninterface DropdownMenuContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n}\n\nconst DropdownMenuContext = React.createContext<DropdownMenuContextValue | null>(\n null,\n);\n\nfunction useDropdownMenu(): DropdownMenuContextValue {\n const ctx = React.useContext(DropdownMenuContext);\n if (!ctx) throw new Error(\"DropdownMenu parts must be used within <DropdownMenu>\");\n return ctx;\n}\n\nexport interface DropdownMenuProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function DropdownMenu({ open, defaultOpen = false, onOpenChange, children }: DropdownMenuProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n return (\n <DropdownMenuContext.Provider value={{ open: isOpen, setOpen, anchorRef }}>\n <div data-slot=\"dropdown-menu\">{children}</div>\n </DropdownMenuContext.Provider>\n );\n}\n\nexport function DropdownMenuPortal({ children }: { children?: React.ReactNode }) {\n return <Portal>{children}</Portal>;\n}\n\nexport interface DropdownMenuTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function DropdownMenuTrigger({ asChild = false, onClick, ...props }: DropdownMenuTriggerProps) {\n const { open, setOpen, anchorRef } = useDropdownMenu();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"dropdown-menu-trigger\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n data-state={open ? \"open\" : \"closed\"}\n ref={anchorRef as React.Ref<HTMLButtonElement>}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface DropdownMenuContentProps extends React.ComponentProps<\"div\"> {\n sideOffset?: number;\n}\n\nexport function DropdownMenuContent({\n className,\n sideOffset = 4,\n children,\n ...props\n}: DropdownMenuContentProps) {\n const { open, setOpen, anchorRef } = useDropdownMenu();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: \"bottom\",\n align: \"start\",\n offset: sideOffset,\n });\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [anchorRef],\n });\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n // Roving focus across rendered menu items: ArrowUp/Down move the active item.\n const items = () =>\n Array.from(\n contentRef.current?.querySelectorAll<HTMLElement>(\"[role^='menuitem']\") ?? [],\n ).filter((el) => el.getAttribute(\"data-disabled\") === null);\n const { activeIndex, onKeyDown: rovingKeyDown } = useRovingFocus({\n count: 64,\n orientation: \"vertical\",\n loop: true,\n });\n React.useEffect(() => {\n if (!open) return;\n items()[activeIndex]?.focus();\n }, [open, activeIndex]);\n // Selecting an item closes the menu: items call this through context.\n const close = React.useCallback(() => setOpen(false), [setOpen]);\n if (!isPresent) return null;\n return (\n <Portal>\n <DropdownMenuCloseContext.Provider value={close}>\n <div\n data-slot=\"dropdown-menu-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n role=\"menu\"\n tabIndex={-1}\n onKeyDown={(e) => {\n rovingKeyDown(e);\n if (e.key === \"Escape\") setOpen(false);\n }}\n ref={mergeRefs(floatingRef, dismissRef, presRef, contentRef)}\n style={style}\n className={cn(\n DROPDOWN_MENU_CONTENT,\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </DropdownMenuCloseContext.Provider>\n </Portal>\n );\n}\n\nconst DropdownMenuCloseContext = React.createContext<() => void>(() => {});\n\nexport function DropdownMenuGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dropdown-menu-group\" role=\"group\" className={className} {...props} />;\n}\n\nexport interface DropdownMenuItemProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n disabled?: boolean;\n}\n\nexport function DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n disabled,\n onClick,\n onKeyDown,\n ...props\n}: DropdownMenuItemProps) {\n const close = React.useContext(DropdownMenuCloseContext);\n return (\n <div\n data-slot=\"dropdown-menu-item\"\n data-inset={inset ? \"\" : undefined}\n data-variant={variant}\n data-disabled={disabled ? \"\" : undefined}\n role=\"menuitem\"\n tabIndex={disabled ? undefined : -1}\n className={cn(\n DROPDOWN_MENU_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n close();\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n (e.currentTarget as HTMLElement).click();\n }\n }}\n {...props}\n />\n );\n}\n\nexport interface DropdownMenuCheckboxItemProps extends React.ComponentProps<\"div\"> {\n checked?: boolean;\n disabled?: boolean;\n}\n\nexport function DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n disabled,\n onClick,\n ...props\n}: DropdownMenuCheckboxItemProps) {\n const close = React.useContext(DropdownMenuCloseContext);\n return (\n <div\n data-slot=\"dropdown-menu-checkbox-item\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled ? \"\" : undefined}\n tabIndex={disabled ? undefined : -1}\n className={cn(\n DROPDOWN_MENU_CHECK_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n close();\n }}\n {...props}\n >\n <span className={DROPDOWN_MENU_ITEM_INDICATOR}>\n {checked ? (\n <svg className=\"size-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ) : null}\n </span>\n {children}\n </div>\n );\n}\n\ninterface DropdownMenuRadioGroupContextValue {\n value: string | undefined;\n setValue: (next: string) => void;\n}\n\nconst DropdownMenuRadioGroupContext =\n React.createContext<DropdownMenuRadioGroupContextValue | null>(null);\n\nexport interface DropdownMenuRadioGroupProps extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport function DropdownMenuRadioGroup({\n className,\n value,\n onValueChange,\n children,\n ...props\n}: DropdownMenuRadioGroupProps) {\n const ctx = React.useMemo<DropdownMenuRadioGroupContextValue>(\n () => ({ value, setValue: (next) => onValueChange?.(next) }),\n [value, onValueChange],\n );\n return (\n <DropdownMenuRadioGroupContext.Provider value={ctx}>\n <div data-slot=\"dropdown-menu-radio-group\" role=\"group\" className={className} {...props}>\n {children}\n </div>\n </DropdownMenuRadioGroupContext.Provider>\n );\n}\n\nexport interface DropdownMenuRadioItemProps extends React.ComponentProps<\"div\"> {\n value: string;\n disabled?: boolean;\n}\n\nexport function DropdownMenuRadioItem({\n className,\n children,\n value,\n disabled,\n onClick,\n ...props\n}: DropdownMenuRadioItemProps) {\n const close = React.useContext(DropdownMenuCloseContext);\n const group = React.useContext(DropdownMenuRadioGroupContext);\n const checked = group?.value === value;\n return (\n <div\n data-slot=\"dropdown-menu-radio-item\"\n role=\"menuitemradio\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled ? \"\" : undefined}\n tabIndex={disabled ? undefined : -1}\n className={cn(\n DROPDOWN_MENU_CHECK_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n group?.setValue(value);\n close();\n }}\n {...props}\n >\n <span className={DROPDOWN_MENU_ITEM_INDICATOR}>\n {checked ? (\n <svg className=\"size-2 fill-current\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n ) : null}\n </span>\n {children}\n </div>\n );\n}\n\nexport interface DropdownMenuLabelProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n}\n\nexport function DropdownMenuLabel({ className, inset, ...props }: DropdownMenuLabelProps) {\n return (\n <div\n data-slot=\"dropdown-menu-label\"\n data-inset={inset ? \"\" : undefined}\n className={cn(DROPDOWN_MENU_LABEL, className)}\n {...props}\n />\n );\n}\n\nexport function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dropdown-menu-separator\"\n role=\"separator\"\n className={cn(DROPDOWN_MENU_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(DROPDOWN_MENU_SHORTCUT, className)}\n {...props}\n />\n );\n}\n\n// Sub-menus render inline (nested) rather than in a separate floating layer: the\n// sub-content is revealed in place when its trigger toggles, simplifying the\n// nesting Radix portals each level. data-state still reflects open/closed.\ninterface DropdownMenuSubContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n}\n\nconst DropdownMenuSubContext = React.createContext<DropdownMenuSubContextValue | null>(null);\n\nexport interface DropdownMenuSubProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function DropdownMenuSub({ open, defaultOpen = false, onOpenChange, children }: DropdownMenuSubProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n return (\n <DropdownMenuSubContext.Provider value={{ open: isOpen, setOpen }}>\n <div data-slot=\"dropdown-menu-sub\">{children}</div>\n </DropdownMenuSubContext.Provider>\n );\n}\n\nexport interface DropdownMenuSubTriggerProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n}\n\nexport function DropdownMenuSubTrigger({ className, inset, children, onClick, ...props }: DropdownMenuSubTriggerProps) {\n const ctx = React.useContext(DropdownMenuSubContext);\n return (\n <div\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset ? \"\" : undefined}\n data-state={ctx?.open ? \"open\" : \"closed\"}\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={ctx?.open}\n tabIndex={-1}\n className={cn(\n DROPDOWN_MENU_SUB_TRIGGER,\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n ctx?.setOpen(!ctx.open);\n }}\n {...props}\n >\n {children}\n <svg className=\"ml-auto size-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </div>\n );\n}\n\nexport function DropdownMenuSubContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const ctx = React.useContext(DropdownMenuSubContext);\n if (!ctx?.open) return null;\n return (\n <div\n data-slot=\"dropdown-menu-sub-content\"\n data-state=\"open\"\n role=\"menu\"\n className={cn(\n DROPDOWN_MENU_SUB_CONTENT,\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const DROPDOWN_MENU_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\";\n\nexport const DROPDOWN_MENU_SUB_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\";\n\nexport const DROPDOWN_MENU_ITEM = \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const DROPDOWN_MENU_CHECK_ITEM = \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const DROPDOWN_MENU_SUB_TRIGGER = \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const DROPDOWN_MENU_ITEM_INDICATOR = \"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\";\n\nexport const DROPDOWN_MENU_LABEL = \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\";\n\nexport const DROPDOWN_MENU_SEPARATOR = \"bg-border -mx-1 my-1 h-px\";\n\nexport const DROPDOWN_MENU_SHORTCUT = \"text-muted-foreground ml-auto text-xs tracking-widest\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n CONTEXT_MENU_CHECK_ITEM,\n CONTEXT_MENU_CONTENT,\n CONTEXT_MENU_ITEM,\n CONTEXT_MENU_LABEL,\n CONTEXT_MENU_SEPARATOR,\n CONTEXT_MENU_SHORTCUT,\n CONTEXT_MENU_SUB_CONTENT,\n CONTEXT_MENU_SUB_TRIGGER,\n} from \"../generated/context-menu\";\n\ninterface ContextMenuContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n point: { x: number; y: number };\n setPoint: (p: { x: number; y: number }) => void;\n}\n\nconst ContextMenuContext = React.createContext<ContextMenuContextValue | null>(null);\n\nfunction useContextMenu(): ContextMenuContextValue {\n const ctx = React.useContext(ContextMenuContext);\n if (!ctx) throw new Error(\"ContextMenu parts must be used within <ContextMenu>\");\n return ctx;\n}\n\nexport interface ContextMenuProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function ContextMenu({ open, defaultOpen = false, onOpenChange, children }: ContextMenuProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const [point, setPoint] = React.useState({ x: 0, y: 0 });\n return (\n <ContextMenuContext.Provider value={{ open: isOpen, setOpen, point, setPoint }}>\n <div data-slot=\"context-menu\">{children}</div>\n </ContextMenuContext.Provider>\n );\n}\n\nexport function ContextMenuPortal({ children }: { children?: React.ReactNode }) {\n return <Portal>{children}</Portal>;\n}\n\nexport interface ContextMenuTriggerProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nexport function ContextMenuTrigger({ asChild = false, onContextMenu, ...props }: ContextMenuTriggerProps) {\n const { setOpen, setPoint } = useContextMenu();\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp\n data-slot=\"context-menu-trigger\"\n onContextMenu={(e: React.MouseEvent<HTMLDivElement>) => {\n onContextMenu?.(e);\n e.preventDefault();\n setPoint({ x: e.clientX, y: e.clientY });\n setOpen(true);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function ContextMenuGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"context-menu-group\" role=\"group\" className={className} {...props} />;\n}\n\nconst ContextMenuCloseContext = React.createContext<() => void>(() => {});\n\nexport function ContextMenuContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const { open, setOpen, point } = useContextMenu();\n const { isPresent, ref: presRef } = usePresence(open);\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n });\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n const items = () =>\n Array.from(\n contentRef.current?.querySelectorAll<HTMLElement>(\"[role^='menuitem']\") ?? [],\n ).filter((el) => el.getAttribute(\"data-disabled\") === null);\n const { activeIndex, onKeyDown: rovingKeyDown } = useRovingFocus({\n count: 64,\n orientation: \"vertical\",\n loop: true,\n });\n React.useEffect(() => {\n if (!open) return;\n items()[activeIndex]?.focus();\n }, [open, activeIndex]);\n const close = React.useCallback(() => setOpen(false), [setOpen]);\n if (!isPresent) return null;\n return (\n <Portal>\n <ContextMenuCloseContext.Provider value={close}>\n <div\n data-slot=\"context-menu-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side=\"bottom\"\n role=\"menu\"\n tabIndex={-1}\n onKeyDown={(e) => {\n rovingKeyDown(e);\n if (e.key === \"Escape\") setOpen(false);\n }}\n ref={mergeRefs(dismissRef, presRef, contentRef)}\n style={{ position: \"fixed\", top: point.y, left: point.x }}\n className={cn(\n CONTEXT_MENU_CONTENT,\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </ContextMenuCloseContext.Provider>\n </Portal>\n );\n}\n\nexport interface ContextMenuItemProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n disabled?: boolean;\n}\n\nexport function ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n disabled,\n onClick,\n onKeyDown,\n ...props\n}: ContextMenuItemProps) {\n const close = React.useContext(ContextMenuCloseContext);\n return (\n <div\n data-slot=\"context-menu-item\"\n data-inset={inset ? \"\" : undefined}\n data-variant={variant}\n data-disabled={disabled ? \"\" : undefined}\n role=\"menuitem\"\n tabIndex={disabled ? undefined : -1}\n className={cn(\n CONTEXT_MENU_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n close();\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n (e.currentTarget as HTMLElement).click();\n }\n }}\n {...props}\n />\n );\n}\n\nexport interface ContextMenuCheckboxItemProps extends React.ComponentProps<\"div\"> {\n checked?: boolean;\n disabled?: boolean;\n}\n\nexport function ContextMenuCheckboxItem({\n className,\n children,\n checked,\n disabled,\n onClick,\n ...props\n}: ContextMenuCheckboxItemProps) {\n const close = React.useContext(ContextMenuCloseContext);\n return (\n <div\n data-slot=\"context-menu-checkbox-item\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled ? \"\" : undefined}\n tabIndex={disabled ? undefined : -1}\n className={cn(\n CONTEXT_MENU_CHECK_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n close();\n }}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n {checked ? (\n <svg className=\"size-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ) : null}\n </span>\n {children}\n </div>\n );\n}\n\ninterface ContextMenuRadioGroupContextValue {\n value: string | undefined;\n setValue: (next: string) => void;\n}\n\nconst ContextMenuRadioGroupContext =\n React.createContext<ContextMenuRadioGroupContextValue | null>(null);\n\nexport interface ContextMenuRadioGroupProps extends Omit<React.ComponentProps<\"div\">, \"onChange\"> {\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport function ContextMenuRadioGroup({\n className,\n value,\n onValueChange,\n children,\n ...props\n}: ContextMenuRadioGroupProps) {\n const ctx = React.useMemo<ContextMenuRadioGroupContextValue>(\n () => ({ value, setValue: (next) => onValueChange?.(next) }),\n [value, onValueChange],\n );\n return (\n <ContextMenuRadioGroupContext.Provider value={ctx}>\n <div data-slot=\"context-menu-radio-group\" role=\"group\" className={className} {...props}>\n {children}\n </div>\n </ContextMenuRadioGroupContext.Provider>\n );\n}\n\nexport interface ContextMenuRadioItemProps extends React.ComponentProps<\"div\"> {\n value: string;\n disabled?: boolean;\n}\n\nexport function ContextMenuRadioItem({\n className,\n children,\n value,\n disabled,\n onClick,\n ...props\n}: ContextMenuRadioItemProps) {\n const close = React.useContext(ContextMenuCloseContext);\n const group = React.useContext(ContextMenuRadioGroupContext);\n const checked = group?.value === value;\n return (\n <div\n data-slot=\"context-menu-radio-item\"\n role=\"menuitemradio\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n data-disabled={disabled ? \"\" : undefined}\n tabIndex={disabled ? undefined : -1}\n className={cn(\n CONTEXT_MENU_CHECK_ITEM,\n className,\n )}\n onClick={(e) => {\n if (disabled) return;\n onClick?.(e);\n group?.setValue(value);\n close();\n }}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n {checked ? (\n <svg className=\"size-2 fill-current\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n ) : null}\n </span>\n {children}\n </div>\n );\n}\n\nexport interface ContextMenuLabelProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n}\n\nexport function ContextMenuLabel({ className, inset, ...props }: ContextMenuLabelProps) {\n return (\n <div\n data-slot=\"context-menu-label\"\n data-inset={inset ? \"\" : undefined}\n className={cn(CONTEXT_MENU_LABEL, className)}\n {...props}\n />\n );\n}\n\nexport function ContextMenuSeparator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"context-menu-separator\"\n role=\"separator\"\n className={cn(CONTEXT_MENU_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport function ContextMenuShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(CONTEXT_MENU_SHORTCUT, className)}\n {...props}\n />\n );\n}\n\n// Sub-menus render inline (nested) rather than in a separate floating layer:\n// the sub-content is revealed in place when its trigger toggles.\ninterface ContextMenuSubContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n}\n\nconst ContextMenuSubContext = React.createContext<ContextMenuSubContextValue | null>(null);\n\nexport interface ContextMenuSubProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function ContextMenuSub({ open, defaultOpen = false, onOpenChange, children }: ContextMenuSubProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n return (\n <ContextMenuSubContext.Provider value={{ open: isOpen, setOpen }}>\n <div data-slot=\"context-menu-sub\">{children}</div>\n </ContextMenuSubContext.Provider>\n );\n}\n\nexport interface ContextMenuSubTriggerProps extends React.ComponentProps<\"div\"> {\n inset?: boolean;\n}\n\nexport function ContextMenuSubTrigger({ className, inset, children, onClick, ...props }: ContextMenuSubTriggerProps) {\n const ctx = React.useContext(ContextMenuSubContext);\n return (\n <div\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset ? \"\" : undefined}\n data-state={ctx?.open ? \"open\" : \"closed\"}\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={ctx?.open}\n tabIndex={-1}\n className={cn(\n CONTEXT_MENU_SUB_TRIGGER,\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n ctx?.setOpen(!ctx.open);\n }}\n {...props}\n >\n {children}\n <svg className=\"ml-auto\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </div>\n );\n}\n\nexport function ContextMenuSubContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const ctx = React.useContext(ContextMenuSubContext);\n if (!ctx?.open) return null;\n return (\n <div\n data-slot=\"context-menu-sub-content\"\n data-state=\"open\"\n role=\"menu\"\n className={cn(\n CONTEXT_MENU_SUB_CONTENT,\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CONTEXT_MENU_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\";\n\nexport const CONTEXT_MENU_SUB_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\";\n\nexport const CONTEXT_MENU_ITEM = \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const CONTEXT_MENU_CHECK_ITEM = \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const CONTEXT_MENU_SUB_TRIGGER = \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const CONTEXT_MENU_LABEL = \"text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\";\n\nexport const CONTEXT_MENU_SEPARATOR = \"bg-border -mx-1 my-1 h-px\";\n\nexport const CONTEXT_MENU_SHORTCUT = \"text-muted-foreground ml-auto text-xs tracking-widest\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { Portal } from \"../primitives/portal\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport {\n MENUBAR_CHECKBOX_ITEM,\n MENUBAR_CONTENT,\n MENUBAR_ITEM,\n MENUBAR_ITEM_INDICATOR,\n MENUBAR_LABEL,\n MENUBAR_RADIO_ITEM,\n MENUBAR_ROOT,\n MENUBAR_SEPARATOR,\n MENUBAR_SHORTCUT,\n MENUBAR_SUB_CONTENT,\n MENUBAR_SUB_TRIGGER,\n MENUBAR_TRIGGER,\n} from \"../generated/menubar\";\n\ninterface MenuCtx {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n}\nconst MenubarMenuContext = React.createContext<MenuCtx | null>(null);\nfunction useMenu(): MenuCtx {\n const ctx = React.useContext(MenubarMenuContext);\n if (!ctx) throw new Error(\"Menubar parts must be used within <MenubarMenu>\");\n return ctx;\n}\n\nconst MenubarRadioGroupContext = React.createContext<{\n value: string;\n onValueChange: (value: string) => void;\n} | null>(null);\n\nexport function Menubar({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"menubar\"\n role=\"menubar\"\n className={cn(MENUBAR_ROOT, className)}\n {...props}\n />\n );\n}\n\nexport interface MenubarMenuProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function MenubarMenu({ open, defaultOpen = false, onOpenChange, children }: MenubarMenuProps) {\n const [isOpen, setOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n return (\n <MenubarMenuContext.Provider value={{ open: isOpen, setOpen, triggerRef }}>\n <div data-slot=\"menubar-menu\" className=\"relative\">\n {children}\n </div>\n </MenubarMenuContext.Provider>\n );\n}\n\nexport function MenubarTrigger({ className, onClick, ...props }: React.ComponentProps<\"button\">) {\n const { open, setOpen, triggerRef } = useMenu();\n return (\n <button\n ref={triggerRef}\n type=\"button\"\n data-slot=\"menubar-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n className={cn(MENUBAR_TRIGGER, className)}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...props}\n />\n );\n}\n\nexport function MenubarContent({\n className,\n children,\n align = \"start\",\n ...props\n}: React.ComponentProps<\"div\"> & { align?: \"start\" | \"center\" | \"end\" }) {\n const { open, setOpen, triggerRef } = useMenu();\n const { isPresent, ref: presenceRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef: triggerRef,\n open,\n side: \"bottom\",\n align,\n offset: 8,\n });\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [triggerRef],\n });\n\n const items = React.Children.toArray(children);\n const { onKeyDown } = useRovingFocus({ count: items.length, orientation: \"vertical\" });\n\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n ref={mergeRefs(presenceRef, floatingRef, dismissRef)}\n data-slot=\"menubar-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n role=\"menu\"\n style={style}\n className={cn(MENUBAR_CONTENT, className)}\n onKeyDown={onKeyDown}\n {...props}\n >\n {children}\n </div>\n </Portal>\n );\n}\n\nexport function MenubarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"menubar-group\" role=\"group\" className={className} {...props} />;\n}\n\nexport function MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <div\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n role=\"menuitem\"\n tabIndex={-1}\n className={cn(MENUBAR_ITEM, className)}\n {...props}\n />\n );\n}\n\nexport function MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<\"div\"> & { checked?: boolean }) {\n return (\n <div\n data-slot=\"menubar-checkbox-item\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n tabIndex={-1}\n className={cn(MENUBAR_CHECKBOX_ITEM, className)}\n {...props}\n >\n <span className={MENUBAR_ITEM_INDICATOR}>\n {checked && (\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n )}\n </span>\n {children}\n </div>\n );\n}\n\nexport interface MenubarRadioGroupProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport function MenubarRadioGroup({\n value,\n defaultValue = \"\",\n onValueChange,\n className,\n children,\n}: MenubarRadioGroupProps) {\n const [current, setValue] = useControllableState({\n value,\n defaultValue,\n onChange: onValueChange,\n });\n return (\n <MenubarRadioGroupContext.Provider value={{ value: current, onValueChange: setValue }}>\n <div data-slot=\"menubar-radio-group\" role=\"group\" className={className}>\n {children}\n </div>\n </MenubarRadioGroupContext.Provider>\n );\n}\n\nexport function MenubarRadioItem({\n className,\n children,\n value,\n ...props\n}: React.ComponentProps<\"div\"> & { value: string }) {\n const ctx = React.useContext(MenubarRadioGroupContext);\n const checked = ctx?.value === value;\n return (\n <div\n data-slot=\"menubar-radio-item\"\n role=\"menuitemradio\"\n aria-checked={checked}\n tabIndex={-1}\n className={cn(MENUBAR_RADIO_ITEM, className)}\n onClick={() => ctx?.onValueChange(value)}\n {...props}\n >\n <span className={MENUBAR_ITEM_INDICATOR}>\n {checked && (\n <svg className=\"size-2 fill-current\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n )}\n </span>\n {children}\n </div>\n );\n}\n\nexport function MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<\"div\"> & { inset?: boolean }) {\n return (\n <div\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(MENUBAR_LABEL, className)}\n {...props}\n />\n );\n}\n\nexport function MenubarSeparator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"menubar-separator\"\n role=\"separator\"\n className={cn(MENUBAR_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport function MenubarShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(MENUBAR_SHORTCUT, className)}\n {...props}\n />\n );\n}\n\ninterface SubCtx {\n open: boolean;\n setOpen: (open: boolean) => void;\n}\nconst MenubarSubContext = React.createContext<SubCtx | null>(null);\nfunction useSub(): SubCtx {\n const ctx = React.useContext(MenubarSubContext);\n if (!ctx) throw new Error(\"MenubarSub parts must be used within <MenubarSub>\");\n return ctx;\n}\n\nexport interface MenubarSubProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function MenubarSub({ open, defaultOpen = false, onOpenChange, children }: MenubarSubProps) {\n const [isOpen, setOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n return (\n <MenubarSubContext.Provider value={{ open: isOpen, setOpen }}>\n <div data-slot=\"menubar-sub\" className=\"relative\">\n {children}\n </div>\n </MenubarSubContext.Provider>\n );\n}\n\nexport function MenubarSubTrigger({\n className,\n inset,\n children,\n onClick,\n ...props\n}: React.ComponentProps<\"div\"> & { inset?: boolean }) {\n const { open, setOpen } = useSub();\n return (\n <div\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n data-state={open ? \"open\" : \"closed\"}\n role=\"menuitem\"\n tabIndex={-1}\n className={cn(MENUBAR_SUB_TRIGGER, className)}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...props}\n >\n {children}\n <svg\n className=\"ml-auto h-4 w-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </div>\n );\n}\n\nexport function MenubarSubContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const { open } = useSub();\n const { isPresent, ref } = usePresence(open);\n if (!isPresent) return null;\n return (\n <div\n ref={ref as React.RefObject<HTMLDivElement>}\n data-slot=\"menubar-sub-content\"\n data-state={open ? \"open\" : \"closed\"}\n role=\"menu\"\n className={cn(MENUBAR_SUB_CONTENT, className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const MENUBAR_ROOT = \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\";\n\nexport const MENUBAR_TRIGGER = \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\";\n\nexport const MENUBAR_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 absolute z-50 min-w-[12rem] overflow-hidden rounded-md border p-1 shadow-md\";\n\nexport const MENUBAR_ITEM = \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const MENUBAR_CHECKBOX_ITEM = \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const MENUBAR_RADIO_ITEM = \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const MENUBAR_ITEM_INDICATOR = \"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\";\n\nexport const MENUBAR_LABEL = \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\";\n\nexport const MENUBAR_SEPARATOR = \"bg-border -mx-1 my-1 h-px\";\n\nexport const MENUBAR_SHORTCUT = \"text-muted-foreground ml-auto text-xs tracking-widest\";\n\nexport const MENUBAR_SUB_TRIGGER = \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8\";\n\nexport const MENUBAR_SUB_CONTENT = \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 absolute z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-lg\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n NAVIGATION_MENU,\n NAVIGATION_MENU_CONTENT,\n NAVIGATION_MENU_INDICATOR,\n NAVIGATION_MENU_ITEM,\n NAVIGATION_MENU_LINK,\n NAVIGATION_MENU_LIST,\n NAVIGATION_MENU_TRIGGER_STYLE,\n NAVIGATION_MENU_VIEWPORT,\n} from \"../generated/navigation-menu\";\n\n/**\n * Fused canonical trigger class string, the mirror of Rust's\n * `navigation_menu_trigger_style()`. Reuse it to style a plain link the same way\n * a `NavigationMenuTrigger` is styled.\n */\nexport function navigationMenuTriggerStyle(): string {\n return NAVIGATION_MENU_TRIGGER_STYLE;\n}\n\ninterface ItemCtx {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n}\nconst NavigationMenuItemContext = React.createContext<ItemCtx | null>(null);\nfunction useItem(): ItemCtx {\n const ctx = React.useContext(NavigationMenuItemContext);\n if (!ctx) throw new Error(\"NavigationMenu parts must be used within <NavigationMenuItem>\");\n return ctx;\n}\n\nexport function NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: React.ComponentProps<\"nav\"> & { viewport?: boolean }) {\n return (\n <nav\n data-slot=\"navigation-menu\"\n data-viewport={viewport}\n role=\"navigation\"\n className={cn(\n NAVIGATION_MENU,\n className,\n )}\n {...props}\n >\n {children}\n {viewport && <NavigationMenuViewport />}\n </nav>\n );\n}\n\nexport function NavigationMenuList({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"navigation-menu-list\"\n role=\"list\"\n className={cn(\n NAVIGATION_MENU_LIST,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport interface NavigationMenuItemProps extends React.ComponentProps<\"li\"> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function NavigationMenuItem({\n className,\n open,\n defaultOpen = false,\n onOpenChange,\n children,\n ...props\n}: NavigationMenuItemProps) {\n const [isOpen, setOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n return (\n <NavigationMenuItemContext.Provider value={{ open: isOpen, setOpen, triggerRef }}>\n <li data-slot=\"navigation-menu-item\" className={cn(NAVIGATION_MENU_ITEM, className)} {...props}>\n {children}\n </li>\n </NavigationMenuItemContext.Provider>\n );\n}\n\nexport function NavigationMenuTrigger({\n className,\n children,\n onClick,\n ...props\n}: React.ComponentProps<\"button\">) {\n const { open, setOpen, triggerRef } = useItem();\n return (\n <button\n ref={triggerRef}\n type=\"button\"\n data-slot=\"navigation-menu-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n {...props}\n >\n {children}{\" \"}\n <svg\n className=\"relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\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=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n );\n}\n\nexport function NavigationMenuContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const { open, setOpen, triggerRef } = useItem();\n const { isPresent, ref: presenceRef } = usePresence(open);\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [triggerRef],\n });\n if (!isPresent) return null;\n return (\n <div\n ref={mergeRefs(presenceRef, dismissRef)}\n data-slot=\"navigation-menu-content\"\n data-state={open ? \"open\" : \"closed\"}\n className={cn(\n NAVIGATION_MENU_CONTENT,\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport function NavigationMenuViewport({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div className=\"absolute top-full left-0 isolate z-50 flex justify-center\">\n <div\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n NAVIGATION_MENU_VIEWPORT,\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\nexport function NavigationMenuLink({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"a\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n data-slot=\"navigation-menu-link\"\n className={cn(\n NAVIGATION_MENU_LINK,\n className,\n )}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function NavigationMenuIndicator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n NAVIGATION_MENU_INDICATOR,\n className,\n )}\n {...props}\n >\n <div className=\"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md\" />\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const NAVIGATION_MENU = \"group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\";\n\nexport const NAVIGATION_MENU_LIST = \"group flex flex-1 list-none items-center justify-center gap-1\";\n\nexport const NAVIGATION_MENU_ITEM = \"relative\";\n\nexport const NAVIGATION_MENU_TRIGGER_STYLE = \"group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1\";\n\nexport const NAVIGATION_MENU_CONTENT = \"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none\";\n\nexport const NAVIGATION_MENU_LINK = \"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const NAVIGATION_MENU_INDICATOR = \"data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden\";\n\nexport const NAVIGATION_MENU_VIEWPORT = \"origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { useFocusScope } from \"../primitives/focus-scope\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n DIALOG_CLOSE,\n DIALOG_CONTENT,\n DIALOG_DESCRIPTION,\n DIALOG_FOOTER,\n DIALOG_HEADER,\n DIALOG_OVERLAY,\n DIALOG_TITLE,\n} from \"../generated/dialog\";\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null);\n\nfunction useDialog(): DialogContextValue {\n const ctx = React.useContext(DialogContext);\n if (!ctx) throw new Error(\"Dialog parts must be used within <Dialog>\");\n return ctx;\n}\n\nexport interface DialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function Dialog({ open, defaultOpen = false, onOpenChange, children }: DialogProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const triggerRef = React.useRef<HTMLElement | null>(null);\n return (\n <DialogContext.Provider value={{ open: isOpen, setOpen, triggerRef }}>\n {children}\n </DialogContext.Provider>\n );\n}\n\nexport interface DialogTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function DialogTrigger({ asChild = false, onClick, ...props }: DialogTriggerProps) {\n const { open, setOpen, triggerRef } = useDialog();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"dialog-trigger\"\n aria-expanded={open}\n ref={triggerRef as React.Ref<HTMLButtonElement>}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(true);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport type DialogPortalProps = { children?: React.ReactNode };\n\nexport function DialogPortal({ children }: DialogPortalProps) {\n return <>{children}</>;\n}\n\nexport interface DialogOverlayProps extends React.ComponentProps<\"div\"> {}\n\nexport function DialogOverlay({ className, ...props }: DialogOverlayProps) {\n const { open, setOpen } = useDialog();\n return (\n <div\n data-slot=\"dialog-overlay\"\n data-state={open ? \"open\" : \"closed\"}\n onClick={() => setOpen(false)}\n className={cn(DIALOG_OVERLAY, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nconst XIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n);\n\nexport interface DialogContentProps extends React.ComponentProps<\"div\"> {\n showCloseButton?: boolean;\n}\n\nexport function DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogContentProps) {\n const { open, setOpen, triggerRef } = useDialog();\n const { isPresent, ref: presRef } = usePresence(open);\n const focusRef = useFocusScope(open);\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [triggerRef],\n });\n React.useEffect(() => {\n if (!open) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [open]);\n if (!isPresent) return null;\n return (\n <Portal>\n <DialogOverlay />\n <div\n data-slot=\"dialog-content\"\n role=\"dialog\"\n aria-modal=\"true\"\n data-state={open ? \"open\" : \"closed\"}\n ref={mergeRefs(focusRef, dismissRef, presRef as React.Ref<HTMLDivElement>)}\n className={cn(DIALOG_CONTENT, className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n {showCloseButton && (\n <button\n type=\"button\"\n data-slot=\"dialog-close\"\n onClick={() => setOpen(false)}\n className={DIALOG_CLOSE}\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </button>\n )}\n </div>\n </Portal>\n );\n}\n\nexport interface DialogCloseProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function DialogClose({ asChild = false, onClick, ...props }: DialogCloseProps) {\n const { setOpen } = useDialog();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"dialog-close\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(DIALOG_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(DIALOG_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function DialogTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <h2\n data-slot=\"dialog-title\"\n className={cn(DIALOG_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function DialogDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"dialog-description\"\n className={cn(DIALOG_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const DIALOG_OVERLAY = \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\";\n\nexport const DIALOG_CONTENT = \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\";\n\nexport const DIALOG_CLOSE = \"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const DIALOG_HEADER = \"flex flex-col gap-2 text-center sm:text-left\";\n\nexport const DIALOG_FOOTER = \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\";\n\nexport const DIALOG_TITLE = \"text-lg leading-none font-semibold\";\n\nexport const DIALOG_DESCRIPTION = \"text-muted-foreground text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { buttonVariants } from \"./button\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { useFocusScope } from \"../primitives/focus-scope\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n ALERT_DIALOG_CONTENT,\n ALERT_DIALOG_DESCRIPTION,\n ALERT_DIALOG_FOOTER,\n ALERT_DIALOG_HEADER,\n ALERT_DIALOG_OVERLAY,\n ALERT_DIALOG_TITLE,\n} from \"../generated/alert-dialog\";\n\ninterface AlertDialogContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst AlertDialogContext = React.createContext<AlertDialogContextValue | null>(null);\n\nfunction useAlertDialog(): AlertDialogContextValue {\n const ctx = React.useContext(AlertDialogContext);\n if (!ctx) throw new Error(\"AlertDialog parts must be used within <AlertDialog>\");\n return ctx;\n}\n\nexport interface AlertDialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function AlertDialog({ open, defaultOpen = false, onOpenChange, children }: AlertDialogProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const triggerRef = React.useRef<HTMLElement | null>(null);\n return (\n <AlertDialogContext.Provider value={{ open: isOpen, setOpen, triggerRef }}>\n {children}\n </AlertDialogContext.Provider>\n );\n}\n\nexport interface AlertDialogTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function AlertDialogTrigger({ asChild = false, onClick, ...props }: AlertDialogTriggerProps) {\n const { open, setOpen, triggerRef } = useAlertDialog();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"alert-dialog-trigger\"\n aria-expanded={open}\n ref={triggerRef as React.Ref<HTMLButtonElement>}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(true);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface AlertDialogOverlayProps extends React.ComponentProps<\"div\"> {}\n\nexport function AlertDialogOverlay({ className, ...props }: AlertDialogOverlayProps) {\n const { open, setOpen } = useAlertDialog();\n return (\n <div\n data-slot=\"alert-dialog-overlay\"\n data-state={open ? \"open\" : \"closed\"}\n onClick={() => setOpen(false)}\n className={cn(ALERT_DIALOG_OVERLAY, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface AlertDialogContentProps extends React.ComponentProps<\"div\"> {}\n\nexport function AlertDialogContent({ className, children, ...props }: AlertDialogContentProps) {\n const { open, setOpen, triggerRef } = useAlertDialog();\n const { isPresent, ref: presRef } = usePresence(open);\n const focusRef = useFocusScope(open);\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [triggerRef],\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <AlertDialogOverlay />\n <div\n data-slot=\"alert-dialog-content\"\n role=\"alertdialog\"\n aria-modal=\"true\"\n data-state={open ? \"open\" : \"closed\"}\n ref={mergeRefs(focusRef, dismissRef, presRef as React.Ref<HTMLDivElement>)}\n className={cn(ALERT_DIALOG_CONTENT, className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n </div>\n </Portal>\n );\n}\n\nexport function AlertDialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(ALERT_DIALOG_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(ALERT_DIALOG_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDialogTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <h2\n data-slot=\"alert-dialog-title\"\n className={cn(ALERT_DIALOG_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function AlertDialogDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"alert-dialog-description\"\n className={cn(ALERT_DIALOG_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport interface AlertDialogActionProps extends React.ComponentProps<\"button\"> {}\n\nexport function AlertDialogAction({ className, onClick, ...props }: AlertDialogActionProps) {\n const { setOpen } = useAlertDialog();\n return (\n <button\n data-slot=\"alert-dialog-action\"\n className={cn(buttonVariants(), className)}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface AlertDialogCancelProps extends React.ComponentProps<\"button\"> {}\n\nexport function AlertDialogCancel({ className, onClick, ...props }: AlertDialogCancelProps) {\n const { setOpen } = useAlertDialog();\n return (\n <button\n data-slot=\"alert-dialog-cancel\"\n className={cn(buttonVariants({ variant: \"outline\" }), className)}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const ALERT_DIALOG_OVERLAY = \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\";\n\nexport const ALERT_DIALOG_CONTENT = \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg\";\n\nexport const ALERT_DIALOG_HEADER = \"flex flex-col gap-2 text-center sm:text-left\";\n\nexport const ALERT_DIALOG_FOOTER = \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\";\n\nexport const ALERT_DIALOG_TITLE = \"text-lg font-semibold\";\n\nexport const ALERT_DIALOG_DESCRIPTION = \"text-muted-foreground text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { useFocusScope } from \"../primitives/focus-scope\";\nimport { usePresence } from \"../primitives/presence\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n SHEET_CLOSE,\n SHEET_CONTENT,\n SHEET_DESCRIPTION,\n SHEET_FOOTER,\n SHEET_HEADER,\n SHEET_OVERLAY,\n SHEET_SIDE_BOTTOM,\n SHEET_SIDE_LEFT,\n SHEET_SIDE_RIGHT,\n SHEET_SIDE_TOP,\n SHEET_TITLE,\n} from \"../generated/sheet\";\n\ninterface SheetContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n}\n\nconst SheetContext = React.createContext<SheetContextValue | null>(null);\n\nfunction useSheet(): SheetContextValue {\n const ctx = React.useContext(SheetContext);\n if (!ctx) throw new Error(\"Sheet parts must be used within <Sheet>\");\n return ctx;\n}\n\nexport interface SheetProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function Sheet({ open, defaultOpen = false, onOpenChange, children }: SheetProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const triggerRef = React.useRef<HTMLElement | null>(null);\n return (\n <SheetContext.Provider value={{ open: isOpen, setOpen, triggerRef }}>\n {children}\n </SheetContext.Provider>\n );\n}\n\nexport interface SheetTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function SheetTrigger({ asChild = false, onClick, ...props }: SheetTriggerProps) {\n const { open, setOpen, triggerRef } = useSheet();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"sheet-trigger\"\n aria-expanded={open}\n ref={triggerRef as React.Ref<HTMLButtonElement>}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(true);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface SheetOverlayProps extends React.ComponentProps<\"div\"> {}\n\nexport function SheetOverlay({ className, ...props }: SheetOverlayProps) {\n const { open, setOpen } = useSheet();\n return (\n <div\n data-slot=\"sheet-overlay\"\n data-state={open ? \"open\" : \"closed\"}\n onClick={() => setOpen(false)}\n className={cn(SHEET_OVERLAY, className)}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nconst sheetSideClasses = {\n right: SHEET_SIDE_RIGHT,\n left: SHEET_SIDE_LEFT,\n top: SHEET_SIDE_TOP,\n bottom: SHEET_SIDE_BOTTOM,\n} as const;\n\nconst XIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n);\n\nexport interface SheetContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}\n\nexport function SheetContent({ className, children, side = \"right\", ...props }: SheetContentProps) {\n const { open, setOpen, triggerRef } = useSheet();\n const { isPresent, ref: presRef } = usePresence(open);\n const focusRef = useFocusScope(open);\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [triggerRef],\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <SheetOverlay />\n <div\n data-slot=\"sheet-content\"\n role=\"dialog\"\n aria-modal=\"true\"\n data-state={open ? \"open\" : \"closed\"}\n ref={mergeRefs(focusRef, dismissRef, presRef as React.Ref<HTMLDivElement>)}\n className={cn(SHEET_CONTENT, sheetSideClasses[side], className)}\n {...(props as Record<string, unknown>)}\n >\n {children}\n <button\n type=\"button\"\n data-slot=\"sheet-close\"\n onClick={() => setOpen(false)}\n className={SHEET_CLOSE}\n >\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n </Portal>\n );\n}\n\nexport interface SheetCloseProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function SheetClose({ asChild = false, onClick, ...props }: SheetCloseProps) {\n const { setOpen } = useSheet();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"sheet-close\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(SHEET_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(SHEET_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function SheetTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <h2\n data-slot=\"sheet-title\"\n className={cn(SHEET_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function SheetDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"sheet-description\"\n className={cn(SHEET_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const SHEET_OVERLAY = \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\";\n\nexport const SHEET_CONTENT = \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\";\n\nexport const SHEET_CLOSE = \"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\";\n\nexport const SHEET_SIDE_RIGHT = \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\";\n\nexport const SHEET_SIDE_LEFT = \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\";\n\nexport const SHEET_SIDE_TOP = \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\";\n\nexport const SHEET_SIDE_BOTTOM = \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\";\n\nexport const SHEET_HEADER = \"flex flex-col gap-1.5 p-4\";\n\nexport const SHEET_FOOTER = \"mt-auto flex flex-col gap-2 p-4\";\n\nexport const SHEET_TITLE = \"text-foreground font-semibold\";\n\nexport const SHEET_DESCRIPTION = \"text-muted-foreground text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFocusScope } from \"../primitives/focus-scope\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\nimport { Slot } from \"../primitives/slot\";\nimport {\n DRAWER_CONTENT_BASE,\n DRAWER_DESCRIPTION,\n DRAWER_FOOTER,\n DRAWER_HANDLE,\n DRAWER_HEADER,\n DRAWER_OVERLAY,\n DRAWER_TITLE,\n drawerDirectionClasses,\n type DrawerDirection,\n} from \"../generated/drawer\";\n\nexport type { DrawerDirection };\n\n// drag-to-dismiss: omitted vs vaul — see README Limitations\n\ninterface DrawerContextValue {\n open: boolean;\n setOpen: (next: boolean) => void;\n direction: DrawerDirection;\n}\n\nconst DrawerContext = React.createContext<DrawerContextValue | null>(null);\n\nfunction useDrawer(): DrawerContextValue {\n const ctx = React.useContext(DrawerContext);\n if (!ctx) throw new Error(\"Drawer parts must be used within <Drawer>\");\n return ctx;\n}\n\nexport interface DrawerProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n direction?: DrawerDirection;\n children?: React.ReactNode;\n}\n\nexport function Drawer({\n open,\n defaultOpen = false,\n onOpenChange,\n direction = \"bottom\",\n children,\n}: DrawerProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n return (\n <DrawerContext.Provider value={{ open: isOpen, setOpen, direction }}>\n <div data-slot=\"drawer\">{children}</div>\n </DrawerContext.Provider>\n );\n}\n\nexport interface DrawerTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function DrawerTrigger({ asChild = false, onClick, ...props }: DrawerTriggerProps) {\n const { setOpen } = useDrawer();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"drawer-trigger\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(true);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport interface DrawerCloseProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nexport function DrawerClose({ asChild = false, onClick, ...props }: DrawerCloseProps) {\n const { setOpen } = useDrawer();\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n data-slot=\"drawer-close\"\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n setOpen(false);\n }}\n {...(props as Record<string, unknown>)}\n />\n );\n}\n\nexport function DrawerOverlay({ className, ...props }: React.ComponentProps<\"div\">) {\n const { open, setOpen } = useDrawer();\n if (!open) return null;\n return (\n <div\n data-slot=\"drawer-overlay\"\n data-state=\"open\"\n onClick={() => setOpen(false)}\n className={cn(DRAWER_OVERLAY, className)}\n {...props}\n />\n );\n}\n\nexport function DrawerContent({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const { open, setOpen, direction } = useDrawer();\n const scopeRef = useFocusScope(open);\n if (!open) return null;\n return (\n <Portal>\n <div\n data-slot=\"drawer-overlay\"\n className={DRAWER_OVERLAY}\n onClick={() => setOpen(false)}\n />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n data-slot=\"drawer-content\"\n data-state=\"open\"\n data-vaul-drawer-direction={direction}\n ref={mergeRefs(scopeRef)}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") setOpen(false);\n }}\n className={cn(DRAWER_CONTENT_BASE, drawerDirectionClasses[direction], className)}\n {...(props as Record<string, unknown>)}\n >\n {direction === \"bottom\" ? (\n <div\n data-slot=\"drawer-handle\"\n className={DRAWER_HANDLE}\n />\n ) : null}\n {children}\n </div>\n </Portal>\n );\n}\n\nexport function DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(DRAWER_HEADER, className)}\n {...props}\n />\n );\n}\n\nexport function DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(DRAWER_FOOTER, className)}\n {...props}\n />\n );\n}\n\nexport function DrawerTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-title\"\n className={cn(DRAWER_TITLE, className)}\n {...props}\n />\n );\n}\n\nexport function DrawerDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-description\"\n className={cn(DRAWER_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const DRAWER_CONTENT_BASE = \"bg-background fixed z-50 flex h-auto border\";\n\nexport const drawerDirectionClasses = {\n \"bottom\": \"inset-x-0 bottom-0 mt-24 max-h-[80vh] flex-col rounded-t-lg border-b-0\",\n \"top\": \"inset-x-0 top-0 mb-24 max-h-[80vh] flex-col rounded-b-lg border-t-0\",\n \"left\": \"inset-y-0 left-0 w-3/4 flex-row border-r sm:max-w-sm\",\n \"right\": \"inset-y-0 right-0 w-3/4 flex-row border-l sm:max-w-sm\",\n} as const;\nexport type DrawerDirection = keyof typeof drawerDirectionClasses;\n\nexport const DRAWER_OVERLAY = \"fixed inset-0 z-50 bg-black/50\";\n\nexport const DRAWER_HANDLE = \"bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full\";\n\nexport const DRAWER_HEADER = \"flex flex-col gap-0.5 p-4 text-center sm:gap-1.5 sm:text-left\";\n\nexport const DRAWER_FOOTER = \"mt-auto flex flex-col gap-2 p-4\";\n\nexport const DRAWER_TITLE = \"text-foreground font-semibold\";\n\nexport const DRAWER_DESCRIPTION = \"text-muted-foreground text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFloating } from \"../primitives/use-floating\";\nimport { useDismissableLayer } from \"../primitives/dismissable-layer\";\nimport { usePresence } from \"../primitives/presence\";\nimport { useRovingFocus } from \"../primitives/use-roving-focus\";\nimport { mergeRefs } from \"../primitives/merge-refs\";\nimport { Portal } from \"../primitives/portal\";\n\ninterface SelectContextValue {\n value: string;\n setValue: (next: string) => void;\n open: boolean;\n setOpen: (next: boolean) => void;\n anchorRef: React.RefObject<HTMLElement | null>;\n}\n\nconst SelectContext = React.createContext<SelectContextValue | null>(null);\n\nfunction useSelect(): SelectContextValue {\n const ctx = React.useContext(SelectContext);\n if (!ctx) throw new Error(\"Select parts must be used within <Select>\");\n return ctx;\n}\n\nexport interface SelectProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n}\n\nexport function Select({\n value,\n defaultValue = \"\",\n onValueChange,\n open,\n defaultOpen = false,\n onOpenChange,\n children,\n}: SelectProps) {\n const [currentValue, setValue] = useControllableState<string>({\n ...(value !== undefined ? { value } : {}),\n defaultValue,\n ...(onValueChange ? { onChange: onValueChange } : {}),\n });\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const anchorRef = React.useRef<HTMLElement | null>(null);\n return (\n <SelectContext.Provider\n value={{ value: currentValue, setValue, open: isOpen, setOpen, anchorRef }}\n >\n {children}\n </SelectContext.Provider>\n );\n}\n\nexport interface SelectTriggerProps extends React.ComponentProps<\"button\"> {\n size?: \"sm\" | \"default\";\n}\n\nexport function SelectTrigger({\n className,\n size = \"default\",\n onClick,\n children,\n ...props\n}: SelectTriggerProps) {\n const { open, setOpen, anchorRef } = useSelect();\n return (\n <button\n type=\"button\"\n role=\"combobox\"\n data-slot=\"select-trigger\"\n data-size={size}\n data-state={open ? \"open\" : \"closed\"}\n aria-expanded={open}\n ref={anchorRef as React.Ref<HTMLButtonElement>}\n onClick={(e) => {\n onClick?.(e);\n setOpen(!open);\n }}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n {children}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-4 opacity-50\"\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n );\n}\n\nexport interface SelectValueProps extends React.ComponentProps<\"span\"> {\n placeholder?: string;\n}\n\nexport function SelectValue({ className, placeholder, ...props }: SelectValueProps) {\n const { value } = useSelect();\n const isEmpty = value === \"\";\n return (\n <span\n data-slot=\"select-value\"\n {...(isEmpty ? { \"data-placeholder\": \"true\" } : {})}\n className={className}\n {...(props as Record<string, unknown>)}\n >\n {isEmpty ? placeholder : value}\n </span>\n );\n}\n\nexport interface SelectContentProps extends React.ComponentProps<\"div\"> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n}\n\nexport function SelectContent({\n className,\n side: sideProp = \"bottom\",\n align = \"start\",\n sideOffset = 4,\n children,\n ...props\n}: SelectContentProps) {\n const { open, setOpen, anchorRef } = useSelect();\n const { isPresent, ref: presRef } = usePresence(open);\n const { floatingRef, style, side } = useFloating({\n anchorRef,\n open,\n side: sideProp,\n align,\n offset: sideOffset,\n });\n const dismissRef = useDismissableLayer({\n enabled: open,\n onDismiss: () => setOpen(false),\n exclude: [anchorRef],\n });\n const items = React.Children.toArray(children).filter(React.isValidElement);\n const { activeIndex, setActiveIndex, onKeyDown } = useRovingFocus({\n count: items.length,\n orientation: \"vertical\",\n });\n if (!isPresent) return null;\n return (\n <Portal>\n <div\n role=\"listbox\"\n data-slot=\"select-content\"\n data-state={open ? \"open\" : \"closed\"}\n data-side={side}\n ref={mergeRefs(floatingRef, dismissRef, presRef)}\n style={style}\n tabIndex={-1}\n onKeyDown={onKeyDown}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n <div className=\"p-1\">\n {items.map((child, index) =>\n React.cloneElement(child as React.ReactElement<SelectItemContext>, {\n __index: index,\n __active: index === activeIndex,\n __setActive: setActiveIndex,\n }),\n )}\n </div>\n </div>\n </Portal>\n );\n}\n\ninterface SelectItemContext {\n __index?: number;\n __active?: boolean;\n __setActive?: (i: number) => void;\n}\n\nexport interface SelectItemProps\n extends React.ComponentProps<\"div\">,\n SelectItemContext {\n value: string;\n}\n\nexport function SelectItem({\n className,\n value,\n children,\n __index = 0,\n __active = false,\n __setActive,\n ...props\n}: SelectItemProps) {\n const { value: selectedValue, setValue, setOpen } = useSelect();\n const selected = selectedValue === value;\n return (\n <div\n role=\"option\"\n data-slot=\"select-item\"\n aria-selected={selected}\n tabIndex={__active ? 0 : -1}\n onFocus={() => __setActive?.(__index)}\n onClick={() => {\n setValue(value);\n setOpen(false);\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setValue(value);\n setOpen(false);\n }\n }}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...(props as Record<string, unknown>)}\n >\n {selected ? (\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-4\"\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </span>\n ) : null}\n <span>{children}</span>\n </div>\n );\n}\n\nexport function SelectGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div role=\"group\" data-slot=\"select-group\" className={className} {...props} />;\n}\n\nexport function SelectLabel({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n );\n}\n\nexport function SelectSeparator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { useControllableState } from \"../primitives/use-controllable-state\";\nimport { useFocusScope } from \"../primitives/focus-scope\";\nimport { Portal } from \"../primitives/portal\";\nimport {\n COMMAND_DIALOG_COMMAND,\n COMMAND_DIALOG_CONTENT,\n COMMAND_DIALOG_OVERLAY,\n COMMAND_EMPTY,\n COMMAND_GROUP,\n COMMAND_INPUT,\n COMMAND_INPUT_WRAPPER,\n COMMAND_ITEM,\n COMMAND_LIST,\n COMMAND_ROOT,\n COMMAND_SEPARATOR,\n COMMAND_SHORTCUT,\n} from \"../generated/command\";\n\ninterface CommandContextValue {\n search: string;\n setSearch: (next: string) => void;\n /// Registers a `CommandItem`'s value so `CommandEmpty` can tell \"nothing\n /// matched\" from \"nothing is here\". Items register even while filtered out.\n registerItem: (id: string, value: string) => void;\n unregisterItem: (id: string) => void;\n /// The active query: trimmed, so blank input is not a search, and lowercased.\n /// Shared by the item filter and the empty-state gate so the two can never\n /// disagree.\n query: string;\n matches: (value: string) => boolean;\n hasMatches: boolean;\n}\n\nconst CommandContext = React.createContext<CommandContextValue | null>(null);\n\nfunction useCommand(): CommandContextValue {\n const ctx = React.useContext(CommandContext);\n if (!ctx) throw new Error(\"Command parts must be used within <Command>\");\n return ctx;\n}\n\nexport interface CommandProps extends React.ComponentProps<\"div\"> {\n search?: string;\n defaultSearch?: string;\n onSearchChange?: (search: string) => void;\n}\n\nexport function Command({\n className,\n search,\n defaultSearch = \"\",\n onSearchChange,\n children,\n ...props\n}: CommandProps) {\n const [currentSearch, setSearch] = useControllableState<string>({\n ...(search !== undefined ? { value: search } : {}),\n defaultValue: defaultSearch,\n ...(onSearchChange ? { onChange: onSearchChange } : {}),\n });\n\n const [items, setItems] = React.useState<ReadonlyMap<string, string>>(\n () => new Map(),\n );\n const registerItem = React.useCallback((id: string, value: string) => {\n setItems((prev) => {\n if (prev.get(id) === value) return prev;\n const next = new Map(prev);\n next.set(id, value);\n return next;\n });\n }, []);\n const unregisterItem = React.useCallback((id: string) => {\n setItems((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Map(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n const query = currentSearch.trim().toLowerCase();\n const matches = React.useCallback(\n (value: string) => query === \"\" || value.toLowerCase().includes(query),\n [query],\n );\n const hasMatches = React.useMemo(\n () => [...items.values()].some(matches),\n [items, matches],\n );\n\n return (\n <CommandContext.Provider\n value={{\n search: currentSearch,\n setSearch,\n registerItem,\n unregisterItem,\n query,\n matches,\n hasMatches,\n }}\n >\n <div\n data-slot=\"command\"\n className={cn(COMMAND_ROOT, className)}\n {...props}\n >\n {children}\n </div>\n </CommandContext.Provider>\n );\n}\n\nexport interface CommandDialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport function CommandDialog({\n open,\n defaultOpen = false,\n onOpenChange,\n className,\n children,\n}: CommandDialogProps) {\n const [isOpen, setOpen] = useControllableState<boolean>({\n ...(open !== undefined ? { value: open } : {}),\n defaultValue: defaultOpen,\n ...(onOpenChange ? { onChange: onOpenChange } : {}),\n });\n const scopeRef = useFocusScope(isOpen);\n if (!isOpen) return null;\n return (\n <Portal>\n <div\n data-slot=\"command-overlay\"\n className={COMMAND_DIALOG_OVERLAY}\n onClick={() => setOpen(false)}\n />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n data-slot=\"command-dialog\"\n ref={scopeRef}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") setOpen(false);\n }}\n className={cn(COMMAND_DIALOG_CONTENT, className)}\n >\n <Command className={COMMAND_DIALOG_COMMAND}>\n {children}\n </Command>\n </div>\n </Portal>\n );\n}\n\nexport function CommandInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n const { search, setSearch } = useCommand();\n return (\n <div className={COMMAND_INPUT_WRAPPER} data-slot=\"command-input-wrapper\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-4 shrink-0 opacity-50\"\n aria-hidden=\"true\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n <input\n type=\"text\"\n role=\"combobox\"\n data-slot=\"command-input\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className={cn(COMMAND_INPUT, className)}\n {...props}\n />\n </div>\n );\n}\n\nexport function CommandList({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"listbox\"\n data-slot=\"command-list\"\n className={cn(COMMAND_LIST, className)}\n {...props}\n />\n );\n}\n\n/// Renders only when a search is under way and no item matched it — never next\n/// to results, and never before the user has typed.\nexport function CommandEmpty({ className, children, ...props }: React.ComponentProps<\"div\">) {\n const { query, hasMatches } = useCommand();\n if (query === \"\" || hasMatches) return null;\n return (\n <div\n data-slot=\"command-empty\"\n className={cn(COMMAND_EMPTY, className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport interface CommandGroupProps extends React.ComponentProps<\"div\"> {\n heading?: string;\n}\n\nexport function CommandGroup({ className, heading, children, ...props }: CommandGroupProps) {\n return (\n <div\n role=\"group\"\n data-slot=\"command-group\"\n className={cn(COMMAND_GROUP, className)}\n {...props}\n >\n {heading ? <div data-slot=\"command-group-heading\">{heading}</div> : null}\n {children}\n </div>\n );\n}\n\nexport interface CommandItemProps\n extends Omit<React.ComponentProps<\"div\">, \"onSelect\"> {\n value: string;\n disabled?: boolean;\n onSelect?: (value: string) => void;\n}\n\nexport function CommandItem({\n className,\n value,\n disabled = false,\n onSelect,\n children,\n ...props\n}: CommandItemProps) {\n const { registerItem, unregisterItem, matches } = useCommand();\n const id = React.useId();\n // Registered whether or not this item survives the filter below, so\n // `CommandEmpty` gates on the search, not on who happens to be mounted.\n React.useEffect(() => {\n registerItem(id, value);\n return () => unregisterItem(id);\n }, [id, value, registerItem, unregisterItem]);\n\n if (!matches(value)) return null;\n return (\n <div\n role=\"option\"\n data-slot=\"command-item\"\n data-disabled={disabled}\n aria-disabled={disabled || undefined}\n tabIndex={-1}\n onClick={() => {\n if (!disabled) onSelect?.(value);\n }}\n className={cn(COMMAND_ITEM, className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport function CommandSeparator({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"command-separator\"\n className={cn(COMMAND_SEPARATOR, className)}\n {...props}\n />\n );\n}\n\nexport function CommandShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(COMMAND_SHORTCUT, className)}\n {...props}\n />\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const COMMAND_ROOT = \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\";\n\nexport const COMMAND_DIALOG_OVERLAY = \"fixed inset-0 z-50 bg-black/50\";\n\nexport const COMMAND_DIALOG_CONTENT = \"fixed top-1/2 left-1/2 z-50 w-full max-w-lg -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-lg border p-0 shadow-lg\";\n\nexport const COMMAND_DIALOG_COMMAND = \"[&_[data-slot=command-input-wrapper]]:h-12 [&_[data-slot=command-input]]:h-12\";\n\nexport const COMMAND_INPUT_WRAPPER = \"flex h-9 items-center gap-2 border-b px-3\";\n\nexport const COMMAND_INPUT = \"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\";\n\nexport const COMMAND_LIST = \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\";\n\nexport const COMMAND_EMPTY = \"py-6 text-center text-sm\";\n\nexport const COMMAND_GROUP = \"text-foreground [&_[data-slot=command-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[data-slot=command-group-heading]]:px-2 [&_[data-slot=command-group-heading]]:py-1.5 [&_[data-slot=command-group-heading]]:text-xs [&_[data-slot=command-group-heading]]:font-medium\";\n\nexport const COMMAND_ITEM = \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\";\n\nexport const COMMAND_SEPARATOR = \"bg-border -mx-1 h-px\";\n\nexport const COMMAND_SHORTCUT = \"text-muted-foreground ml-auto text-xs tracking-widest\";\n","// Dep-light chart primitives: the shadcn/recharts wrapper minus recharts.\n//\n// Upstream shadcn `chart` is theming + presentational tooltip/legend wrappers\n// around recharts, which does the actual plotting. We keep the wrappers and\n// drop recharts: `ChartContainer` is a themed SVG host that emits per-key\n// `--color-<key>` custom properties from its `config`, and consumers draw their\n// own <svg>/series inside it. `ChartTooltipContent` and `ChartLegendContent`\n// are purely presentational and take explicit `items` instead of a recharts\n// payload. `ChartTooltip`/`ChartLegend` are passthrough wrappers. `dark:*`\n// selectors are dropped; the recharts-specific `[&_.recharts-*]` selectors are\n// dropped from the container base.\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { CHART_CONTAINER, CHART_LEGEND, CHART_TOOLTIP } from \"../generated/chart\";\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n color?: string;\n };\n};\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\");\n }\n\n return context;\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n ...props\n}: React.ComponentProps<\"div\"> & {\n config: ChartConfig;\n}) {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(CHART_CONTAINER, className)}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n {children}\n </div>\n </ChartContext.Provider>\n );\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(([, c]) => c.color);\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: `[data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => ` --color-${key}: ${itemConfig.color};`)\n .join(\"\\n\")}\n}`,\n }}\n />\n );\n};\n\n// One rendered tooltip/legend row. Replaces the recharts payload.\nexport type ChartItem = {\n label?: React.ReactNode;\n value?: React.ReactNode;\n color?: string;\n};\n\nconst ChartTooltip = ({ children }: { children?: React.ReactNode }) => (\n <>{children}</>\n);\n\nfunction ChartTooltipContent({\n className,\n items = [],\n label,\n hideLabel = false,\n hideIndicator = false,\n labelClassName,\n}: React.ComponentProps<\"div\"> & {\n items?: ChartItem[];\n label?: React.ReactNode;\n hideLabel?: boolean;\n hideIndicator?: boolean;\n labelClassName?: string;\n}) {\n useChart();\n\n if (!items.length) {\n return null;\n }\n\n return (\n <div\n data-slot=\"chart-tooltip\"\n className={cn(CHART_TOOLTIP, className)}\n >\n {!hideLabel && label ? (\n <div className={cn(\"font-medium\", labelClassName)}>{label}</div>\n ) : null}\n <div className=\"grid gap-1.5\">\n {items.map((item, index) => (\n <div\n key={index}\n className={cn(\n \"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 items-center\",\n )}\n >\n {!hideIndicator && (\n <div\n className=\"shrink-0 rounded-[2px] h-2.5 w-2.5\"\n style={\n {\n backgroundColor: item.color,\n borderColor: item.color,\n } as React.CSSProperties\n }\n />\n )}\n <div className=\"flex flex-1 justify-between leading-none items-center\">\n <span className=\"text-muted-foreground\">{item.label}</span>\n {item.value !== undefined && (\n <span className=\"text-foreground font-mono font-medium tabular-nums\">\n {item.value}\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nconst ChartLegend = ({ children }: { children?: React.ReactNode }) => (\n <>{children}</>\n);\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n items,\n}: React.ComponentProps<\"div\"> & {\n hideIcon?: boolean;\n items?: ChartItem[];\n}) {\n const { config } = useChart();\n\n const rows: ChartItem[] =\n items ??\n Object.entries(config).map(([key, c]) => ({\n label: c.label ?? key,\n ...(c.color ? { color: c.color } : {}),\n }));\n\n if (!rows.length) {\n return null;\n }\n\n return (\n <div\n data-slot=\"chart-legend\"\n className={cn(CHART_LEGEND, className)}\n >\n {rows.map((item, index) => (\n <div\n key={index}\n className={cn(\n \"[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3\",\n )}\n >\n {!hideIcon && (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{ backgroundColor: item.color }}\n />\n )}\n {item.label}\n </div>\n ))}\n </div>\n );\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n};\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CHART_CONTAINER = \"flex aspect-video justify-center text-xs [&_.recharts-layer]:outline-hidden [&_.recharts-surface]:outline-hidden [&_svg]:outline-hidden\";\n\nexport const CHART_TOOLTIP = \"border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl\";\n\nexport const CHART_LEGEND = \"flex items-center justify-center gap-4\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { buttonVariants } from \"./button\";\nimport {\n CALENDAR_CAPTION,\n CALENDAR_DAY,\n CALENDAR_DAY_CELL,\n CALENDAR_DAY_EMPTY,\n CALENDAR_DAY_SELECTED,\n CALENDAR_DAY_TODAY,\n CALENDAR_GRID,\n CALENDAR_NAV,\n CALENDAR_NAV_BUTTON,\n CALENDAR_ROOT,\n CALENDAR_WEEK,\n CALENDAR_WEEKDAY,\n CALENDAR_WEEKDAY_ROW,\n} from \"../generated/calendar\";\n\nconst MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\n// Week starts Monday.\nconst WEEKDAYS = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"] as const;\n\nconst CHEVRON_LEFT = \"m15 18-6-6 6-6\";\nconst CHEVRON_RIGHT = \"m9 18 6-6-6-6\";\n\nfunction Chevron({ d }: { d: string }) {\n return (\n <svg\n className=\"size-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <path d={d} />\n </svg>\n );\n}\n\nfunction startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\n// Monday = 0 … Sunday = 6 (the built-in `Date.getDay` is Sunday = 0).\nfunction mondayIndex(d: Date): number {\n return (d.getDay() + 6) % 7;\n}\n\nfunction sameDay(a: Date | undefined, b: Date): boolean {\n return (\n !!a &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport interface CalendarProps {\n /** The currently selected day, if any. */\n selected?: Date;\n /** Fired with the day a user activates. */\n onSelect?: (date: Date) => void;\n /** Controlled displayed month (any day in it is fine). */\n month?: Date;\n /** Uncontrolled initial displayed month. */\n defaultMonth?: Date;\n /** Fired when the displayed month changes via the nav buttons. */\n onMonthChange?: (month: Date) => void;\n /** \"Today\", highlighted in the grid; defaults to the real current date. */\n today?: Date;\n className?: string;\n}\n\n/**\n * A dep-light single-month, single-date picker. Mirrors the landing `Calendar`'s\n * class names while replacing `react-day-picker` with a hand-rolled month grid.\n * Uses the built-in `Date` (a language built-in, not a dependency) for the date\n * math; the Rust mirror does the same math by hand.\n *\n * Simplifications versus the source: one month only (no multi-month), a single\n * selected date (no range/multi), and none of the locale/dropdown/caption\n * features — see the package README.\n */\nexport function Calendar({\n selected,\n onSelect,\n month,\n defaultMonth,\n onMonthChange,\n today = new Date(),\n className,\n}: CalendarProps) {\n const [internal, setInternal] = React.useState(() =>\n startOfMonth(defaultMonth ?? new Date()),\n );\n const view = month ? startOfMonth(month) : internal;\n\n const go = (delta: number) => {\n const next = new Date(view.getFullYear(), view.getMonth() + delta, 1);\n if (!month) setInternal(next);\n onMonthChange?.(next);\n };\n\n const year = view.getFullYear();\n const monthIndex = view.getMonth();\n const caption = `${MONTHS[monthIndex]} ${year}`;\n\n const lead = mondayIndex(view);\n const total = new Date(year, monthIndex + 1, 0).getDate();\n\n // Pad leading blanks then the days, padded out to whole weeks of 7.\n const cells: (number | null)[] = [];\n for (let i = 0; i < lead; i += 1) cells.push(null);\n for (let day = 1; day <= total; day += 1) cells.push(day);\n while (cells.length % 7 !== 0) cells.push(null);\n\n const weeks: (number | null)[][] = [];\n for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));\n\n const navClass = buttonVariants({\n variant: \"ghost\",\n size: \"icon\",\n className: CALENDAR_NAV_BUTTON,\n });\n\n return (\n <div\n data-slot=\"calendar\"\n role=\"application\"\n className={cn(CALENDAR_ROOT, className)}\n >\n <div className={CALENDAR_NAV}>\n <button\n type=\"button\"\n className={navClass}\n aria-label=\"Previous month\"\n onClick={() => go(-1)}\n >\n <Chevron d={CHEVRON_LEFT} />\n </button>\n <div className={CALENDAR_CAPTION}>{caption}</div>\n <button\n type=\"button\"\n className={navClass}\n aria-label=\"Next month\"\n onClick={() => go(1)}\n >\n <Chevron d={CHEVRON_RIGHT} />\n </button>\n </div>\n <table className={CALENDAR_GRID} role=\"grid\">\n <thead>\n <tr className={CALENDAR_WEEKDAY_ROW}>\n {WEEKDAYS.map(wd => (\n <th\n key={wd}\n scope=\"col\"\n className={CALENDAR_WEEKDAY}\n >\n {wd}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((week, wi) => (\n <tr key={wi} className={CALENDAR_WEEK}>\n {week.map((cell, ci) => {\n if (cell === null) {\n return (\n <td\n key={ci}\n className={CALENDAR_DAY_EMPTY}\n />\n );\n }\n const date = new Date(year, monthIndex, cell);\n const isSelected = sameDay(selected, date);\n const isToday = sameDay(today, date);\n return (\n <td\n key={ci}\n role=\"gridcell\"\n aria-selected={isSelected}\n className={CALENDAR_DAY_CELL}\n >\n <button\n type=\"button\"\n data-slot=\"calendar-day\"\n data-selected={isSelected}\n data-today={isToday}\n onClick={() => onSelect?.(date)}\n className={cn(\n buttonVariants({\n variant: \"ghost\",\n size: \"icon\",\n className: CALENDAR_DAY,\n }),\n isSelected\n ? CALENDAR_DAY_SELECTED\n : isToday\n ? CALENDAR_DAY_TODAY\n : undefined,\n )}\n >\n {cell}\n </button>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const CALENDAR_ROOT = \"bg-background p-3 w-fit\";\n\nexport const CALENDAR_NAV_BUTTON = \"size-8 p-0 select-none\";\n\nexport const CALENDAR_NAV = \"flex items-center justify-between gap-1 w-full px-1\";\n\nexport const CALENDAR_CAPTION = \"text-sm font-medium select-none\";\n\nexport const CALENDAR_GRID = \"w-full border-collapse mt-4\";\n\nexport const CALENDAR_WEEKDAY_ROW = \"flex\";\n\nexport const CALENDAR_WEEKDAY = \"text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none\";\n\nexport const CALENDAR_WEEK = \"flex w-full mt-2\";\n\nexport const CALENDAR_DAY_EMPTY = \"relative w-full h-full p-0 aspect-square select-none\";\n\nexport const CALENDAR_DAY_CELL = \"relative w-full h-full p-0 text-center aspect-square select-none\";\n\nexport const CALENDAR_DAY = \"size-auto w-full aspect-square font-normal leading-none\";\n\nexport const CALENDAR_DAY_SELECTED = \"bg-primary text-primary-foreground\";\n\nexport const CALENDAR_DAY_TODAY = \"bg-accent text-accent-foreground rounded-md\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n TOAST_BASE,\n TOAST_CLOSE,\n TOAST_CONTENT,\n TOAST_TITLE,\n TOASTER_BASE,\n positionClasses,\n toastVariantClasses,\n type ToastPosition,\n type ToastVariant,\n} from \"../generated/sonner\";\n\nexport type { ToastPosition, ToastVariant };\n\n/**\n * Lifecycle phase of a toast. It is added `\"open\"` (plays the enter keyframe);\n * {@link ToastFn.dismiss} flips it to `\"closing\"` (slides it out) and the live\n * node is dropped once the exit `transitionend` fires. Mirrors Rust's\n * `ToastState` enum and the `data-state` the shared `tokens.css` keys on.\n */\nexport type ToastState = \"open\" | \"closing\";\n\nexport interface ToastOptions {\n description?: React.ReactNode;\n /**\n * Auto-dismiss delay in ms (default 4000). Pass `Infinity` for a **persistent**\n * toast that never times out — it stays until the close button, a swipe, or\n * `toast.dismiss(id)` removes it. Hovering the stack also pauses the countdown.\n */\n duration?: number;\n variant?: ToastVariant;\n}\n\nexport interface Toast {\n id: number;\n message: React.ReactNode;\n description?: React.ReactNode;\n duration: number;\n variant: ToastVariant;\n state: ToastState;\n}\n\nconst DEFAULT_DURATION = 4000;\n\n// Swipe-to-dismiss tuning (pointer physics, TS-only — Rust stays render-only).\n// Values from Sonner: a horizontal drag past 45px, or a flick faster than\n// 0.11px/ms, flings the toast off; anything short snaps back.\nconst SWIPE_THRESHOLD = 45;\nconst SWIPE_VELOCITY = 0.11;\nconst SWIPE_FLING_MS = 200;\n\n/**\n * Module-level toast store: a plain observable holding the live toast array.\n * `toast(...)` mutates it and notifies subscribers; the {@link Toaster}\n * component is the sole subscriber. This is the JS-native global the Rust\n * mirror cannot have — Dioxus has no clean cross-component mutable singleton,\n * so it uses a `ToasterProvider` + `use_toaster()` hook instead.\n */\nconst store = (() => {\n let toasts: Toast[] = [];\n let id = 0;\n const listeners = new Set<(toasts: Toast[]) => void>();\n\n const emit = () => {\n for (const listener of listeners) listener(toasts);\n };\n\n const add = (message: React.ReactNode, opts: ToastOptions = {}): number => {\n const next: Toast = {\n id: ++id,\n message,\n description: opts.description,\n duration: opts.duration ?? DEFAULT_DURATION,\n variant: opts.variant ?? \"default\",\n state: \"open\",\n };\n toasts = [...toasts, next];\n emit();\n return next.id;\n };\n\n // Begins the exit animation: flip the toast to `closing` (`data-state=closed`)\n // and keep it mounted so the exit keyframe can play. The live node is dropped\n // by `remove`, wired to the exit `transitionend` — no timer matched to the CSS.\n // A toast dismissed before it has ever painted mounts closed and so never\n // transitions; `ToastItem` drops that one on mount instead.\n const dismiss = (toastId: number) => {\n toasts = toasts.map((t) =>\n t.id === toastId ? { ...t, state: \"closing\" as const } : t,\n );\n emit();\n };\n\n // Drops a toast outright. Wired to the exit `transitionend`; the guard that it\n // is actually `closing` (a restack transition fires too) lives at the call\n // site in {@link ToastItem}, alongside the mount-closed path.\n const remove = (toastId: number) => {\n toasts = toasts.filter((t) => t.id !== toastId);\n emit();\n };\n\n const subscribe = (listener: (toasts: Toast[]) => void): (() => void) => {\n listeners.add(listener);\n listener(toasts);\n return () => {\n listeners.delete(listener);\n };\n };\n\n return { add, dismiss, remove, subscribe };\n})();\n\nexport interface ToastFn {\n (message: React.ReactNode, opts?: ToastOptions): number;\n success: (message: React.ReactNode, opts?: ToastOptions) => number;\n error: (message: React.ReactNode, opts?: ToastOptions) => number;\n info: (message: React.ReactNode, opts?: ToastOptions) => number;\n warning: (message: React.ReactNode, opts?: ToastOptions) => number;\n dismiss: (id: number) => void;\n}\n\n/**\n * Global toast handle. `toast(msg)` enqueues a neutral toast; the `.success`,\n * `.error`, `.info` and `.warning` helpers pin the variant; `toast.dismiss(id)`\n * removes one early. Mirrors Rust's `use_toaster()` handle methods.\n */\nexport const toast: ToastFn = Object.assign(\n (message: React.ReactNode, opts?: ToastOptions) => store.add(message, opts),\n {\n success: (message: React.ReactNode, opts?: ToastOptions) =>\n store.add(message, { ...opts, variant: \"success\" }),\n error: (message: React.ReactNode, opts?: ToastOptions) =>\n store.add(message, { ...opts, variant: \"error\" }),\n info: (message: React.ReactNode, opts?: ToastOptions) =>\n store.add(message, { ...opts, variant: \"info\" }),\n warning: (message: React.ReactNode, opts?: ToastOptions) =>\n store.add(message, { ...opts, variant: \"warning\" }),\n dismiss: (id: number) => store.dismiss(id),\n },\n);\n\n// Sonner-style stacking: only the front VISIBLE_TOASTS show collapsed; GAP is\n// the px between them once expanded.\nconst VISIBLE_TOASTS = 3;\nconst GAP = 14;\n\ninterface ToastItemProps {\n toast: Toast;\n index: number; // 0 = front / newest\n total: number;\n offset: number; // px from the pinned edge to this toast's expanded slot\n paused: boolean; // the stack is hovered/focused — hold the auto-dismiss\n reportHeight: (id: number, height: number) => void;\n removeHeight: (id: number) => void;\n}\n\nfunction ToastItem({\n toast: t,\n index,\n total,\n offset,\n paused,\n reportHeight,\n removeHeight,\n}: ToastItemProps) {\n const ref = React.useRef<HTMLLIElement>(null);\n const [height, setHeight] = React.useState(0);\n // remaining auto-dismiss budget (banked across hover pauses), the last start\n // timestamp, and the swipe-fling fallback timer.\n const remainingRef = React.useRef(t.duration);\n const startedRef = React.useRef(0);\n const flingRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined,\n );\n const dragRef = React.useRef<{ x: number; time: number; dx: number } | null>(\n null,\n );\n\n // measure the *natural* height for the stack maths; re-measure on content\n // change. Back toasts are clamped to --front-height by the CSS, so unset the\n // height for the read (Sonner does the same) then hand it back to the CSS.\n React.useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n el.style.height = \"auto\";\n const h = el.getBoundingClientRect().height;\n el.style.height = \"\";\n if (h) {\n setHeight(h);\n reportHeight(t.id, h);\n }\n }, [t.id, t.message, t.description, reportHeight]);\n\n React.useEffect(() => () => removeHeight(t.id), [t.id, removeHeight]);\n\n // Dismissed before its first paint (added and dismissed in one batch), so it\n // mounts already `closing`: its computed style never changes, no transition\n // runs, and `onTransitionEnd` below would never fire — stranding it in the\n // store forever. Nothing was painted, so there is nothing to animate: drop it\n // once mounted. Mirrors the Dioxus port's mount effect.\n const mountedClosing = React.useRef(t.state === \"closing\");\n React.useEffect(() => {\n if (mountedClosing.current) store.remove(t.id);\n }, [t.id]);\n\n // Auto-dismiss, pausable on hover. While `paused` (or closing, or a persistent\n // `duration: Infinity`) no timer runs; the cleanup banks the elapsed time so a\n // resume continues from the remaining budget rather than restarting.\n React.useEffect(() => {\n if (t.duration === Infinity || t.state === \"closing\" || paused) return;\n startedRef.current = Date.now();\n const id = setTimeout(() => store.dismiss(t.id), remainingRef.current);\n return () => {\n clearTimeout(id);\n remainingRef.current = Math.max(\n 0,\n remainingRef.current - (Date.now() - startedRef.current),\n );\n };\n }, [paused, t.id, t.duration, t.state]);\n\n // cancel the swipe-fling fallback if the toast unmounts first\n React.useEffect(\n () => () => {\n if (flingRef.current) clearTimeout(flingRef.current);\n },\n [],\n );\n\n // exit rides the transition: a closing toast slides back off and is dropped on\n // the transform's `transitionend` (guarded so stack repositioning never fires\n // it). No host timer — keeps parity with the Dioxus port.\n const onTransitionEnd = (e: React.TransitionEvent<HTMLLIElement>) => {\n if (t.state === \"closing\" && e.propertyName === \"transform\") {\n store.remove(t.id);\n }\n };\n\n // ── swipe-to-dismiss (horizontal pointer drag) ──────────────────────────\n // Tracked through the `--swipe-x` var so it *composes* with the stack\n // transform (`var(--y) translateX(var(--swipe-x))`) instead of overriding it.\n const onPointerDown = (e: React.PointerEvent<HTMLLIElement>) => {\n const el = ref.current;\n if (!el || e.button > 0 || t.state === \"closing\") return;\n if ((e.target as HTMLElement).closest('[data-slot=\"toast-close\"]')) return;\n // auto-dismiss is already paused (a swipe means the pointer is over the stack)\n dragRef.current = { x: e.clientX, time: e.timeStamp, dx: 0 };\n el.setAttribute(\"data-swiping\", \"true\"); // CSS drops the transition for 1:1 tracking\n try {\n el.setPointerCapture?.(e.pointerId);\n } catch {\n // jsdom / unsupported — capture is a nice-to-have, the drag works without it\n }\n };\n\n const onPointerMove = (e: React.PointerEvent<HTMLLIElement>) => {\n const drag = dragRef.current;\n const el = ref.current;\n if (!drag || !el) return;\n const dx = e.clientX - drag.x;\n drag.dx = dx;\n const dist = el.offsetWidth || 256;\n el.style.setProperty(\"--swipe-x\", `${dx}px`);\n el.style.opacity = `${Math.max(0, 1 - Math.abs(dx) / dist)}`;\n };\n\n const onPointerEnd = (e: React.PointerEvent<HTMLLIElement>) => {\n const drag = dragRef.current;\n const el = ref.current;\n if (!drag || !el) return;\n dragRef.current = null;\n el.removeAttribute(\"data-swiping\"); // CSS restores the transition\n const dt = e.timeStamp - drag.time;\n const velocity = dt > 0 ? Math.abs(drag.dx) / dt : 0;\n if (\n drag.dx !== 0 &&\n (Math.abs(drag.dx) >= SWIPE_THRESHOLD || velocity > SWIPE_VELOCITY)\n ) {\n el.style.setProperty(\"--swipe-x\", `${drag.dx > 0 ? 150 : -150}%`);\n el.style.opacity = \"0\";\n const remove = () => store.remove(t.id);\n el.addEventListener(\"transitionend\", remove, { once: true });\n flingRef.current = setTimeout(remove, SWIPE_FLING_MS + 50); // fallback if transitionend is missed\n } else {\n // snap back: clear the swipe offset (the transition carries it home), then\n // hand styling back to the CSS. Auto-dismiss stays paused while hovered and\n // re-arms from the remaining budget once the pointer leaves.\n el.style.setProperty(\"--swipe-x\", \"0px\");\n el.style.opacity = \"1\";\n el.addEventListener(\n \"transitionend\",\n () => {\n el.style.removeProperty(\"--swipe-x\");\n el.style.opacity = \"\";\n },\n { once: true },\n );\n }\n };\n\n return (\n <li\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n data-slot=\"toast\"\n data-variant={t.variant}\n data-state={t.state === \"closing\" ? \"closed\" : \"open\"}\n data-front={index === 0}\n data-visible={index < VISIBLE_TOASTS}\n onTransitionEnd={onTransitionEnd}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerEnd}\n onPointerCancel={onPointerEnd}\n style={\n {\n \"--index\": index,\n \"--z-index\": total - index,\n \"--offset\": `${offset}px`,\n \"--initial-height\": `${height}px`,\n } as React.CSSProperties\n }\n className={cn(\n TOAST_BASE,\n \"touch-pan-y select-none\",\n toastVariantClasses[t.variant],\n )}\n >\n <div className={TOAST_CONTENT}>\n <div className={TOAST_TITLE}>{t.message}</div>\n {t.description ? (\n <div className=\"text-muted-foreground text-sm\">{t.description}</div>\n ) : null}\n </div>\n <button\n type=\"button\"\n aria-label=\"Close\"\n data-slot=\"toast-close\"\n onClick={() => store.dismiss(t.id)}\n className={TOAST_CLOSE}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/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 18M6 6l12 12\" />\n </svg>\n </button>\n </li>\n );\n}\n\nexport interface ToasterProps extends React.ComponentProps<\"ol\"> {\n position?: ToastPosition;\n}\n\n/**\n * Renders the live toast stack from the module store. Fixed-positioned per\n * `position` (default `bottom-right`).\n *\n * Stacking mirrors Sonner: toasts pile up collapsed (the front three peeking,\n * each scaled + lifted by depth and clamped to the front toast's height) and\n * spread into a list on hover / keyboard focus — driven by the measured\n * `--front-height`/`--offset` vars and the `data-stack` CSS in `tokens.css`.\n * Each toast auto-dismisses after its `duration` (default 4000ms) via the same\n * animated `dismiss` as the close button (`data-state=\"closed\"` → slide out →\n * unmount on `transitionend`), and is swipe-to-dismiss (horizontal drag, TS-only\n * pointer physics). Single dark palette — no theme switching.\n */\nexport function Toaster({\n position = \"bottom-right\",\n className,\n ...props\n}: ToasterProps) {\n const [toasts, setToasts] = React.useState<Toast[]>([]);\n const [heights, setHeights] = React.useState<Map<number, number>>(new Map());\n const [paused, setPaused] = React.useState(false);\n\n React.useEffect(() => store.subscribe(setToasts), []);\n\n // Pause auto-dismiss while the stack is hovered or keyboard-focused (Sonner\n // does the same). pointerover/out + focusin/out bubble from the toasts, so they\n // fire even though the <ol> itself is pointer-events:none; the contains() guard\n // keeps it paused while moving *within* the stack.\n const onEnter = () => setPaused(true);\n const onLeave = (e: React.PointerEvent | React.FocusEvent) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) {\n setPaused(false);\n }\n };\n\n const reportHeight = React.useCallback((id: number, h: number) => {\n setHeights((prev) => {\n if (prev.get(id) === h) return prev;\n const next = new Map(prev);\n next.set(id, h);\n return next;\n });\n }, []);\n const removeHeight = React.useCallback((id: number) => {\n setHeights((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Map(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n const yPosition = position.startsWith(\"top\") ? \"top\" : \"bottom\";\n const ordered = [...toasts].reverse(); // newest first → front of the stack\n // front toast's height; until it's measured fall back to the tallest known one\n // so the back toasts don't clamp to 0 for a frame when a new toast arrives\n const known = [...heights.values()];\n const frontHeight = ordered[0]\n ? (heights.get(ordered[0].id) ?? (known.length ? Math.max(...known) : 0))\n : 0;\n\n // cumulative offset: heights of the toasts in front of this one + index * GAP\n let sum = 0;\n const offsets = ordered.map((t, i) => {\n const o = sum + i * GAP;\n sum += heights.get(t.id) ?? 0;\n return o;\n });\n\n return (\n <ol\n data-slot=\"toaster\"\n data-position={position}\n data-y-position={yPosition}\n data-stack=\"\"\n style={\n {\n \"--front-height\": `${frontHeight}px`,\n \"--gap\": `${GAP}px`,\n } as React.CSSProperties\n }\n className={cn(\n TOASTER_BASE,\n positionClasses[position],\n className,\n )}\n {...props}\n onPointerOver={onEnter}\n onPointerOut={onLeave}\n onFocus={onEnter}\n onBlur={onLeave}\n >\n {ordered.map((t, i) => (\n <ToastItem\n key={t.id}\n toast={t}\n index={i}\n total={ordered.length}\n offset={offsets[i]!}\n paused={paused}\n reportHeight={reportHeight}\n removeHeight={removeHeight}\n />\n ))}\n </ol>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const TOAST_BASE = \"pointer-events-auto flex w-full items-start gap-3 rounded-md border p-4 text-sm shadow-lg\";\n\nexport const toastVariantClasses = {\n \"default\": \"bg-popover text-popover-foreground border-border\",\n \"success\": \"bg-popover text-popover-foreground border-main-accent-t2/40\",\n \"error\": \"bg-popover text-popover-foreground border-destructive/50\",\n \"info\": \"bg-popover text-popover-foreground border-border\",\n \"warning\": \"bg-popover text-popover-foreground border-border\",\n} as const;\nexport type ToastVariant = keyof typeof toastVariantClasses;\n\nexport const TOASTER_BASE = \"pointer-events-none fixed z-100 w-[calc(100%-2rem)] max-w-sm\";\n\nexport const positionClasses = {\n \"top-left\": \"top-4 left-4\",\n \"top-center\": \"top-4 left-1/2 -translate-x-1/2\",\n \"top-right\": \"top-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n \"bottom-center\": \"bottom-4 left-1/2 -translate-x-1/2\",\n \"bottom-right\": \"bottom-4 right-4\",\n} as const;\nexport type ToastPosition = keyof typeof positionClasses;\n\nexport const TOAST_CLOSE = \"text-foreground/50 hover:text-foreground shrink-0 transition-colors\";\n\nexport const TOAST_CONTENT = \"flex-1 space-y-1\";\n\nexport const TOAST_TITLE = \"font-medium\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Label } from \"./label\";\nimport { Slot } from \"../primitives/slot\";\nimport { FORM_DESCRIPTION, FORM_ITEM, FORM_MESSAGE } from \"../generated/form\";\n\n/**\n * Dep-light, presentational form primitives. We keep the ARIA id-wiring of\n * shadcn's form (label/control/description/message share an id so\n * `aria-describedby`/`id` line up) but drop `react-hook-form`'s state engine:\n * validation and field state are the consumer's job. `FormItem` mints an id via\n * `React.useId` and exposes it through `FormItemContext`.\n */\ntype FormItemContextValue = {\n id: string;\n formItemId: string;\n formDescriptionId: string;\n formMessageId: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue | null>(null);\n\nfunction useFormItem(): FormItemContextValue {\n const ctx = React.useContext(FormItemContext);\n if (!ctx) {\n throw new Error(\"Form parts must be used within <FormItem>\");\n }\n return ctx;\n}\n\nexport function Form({ ...props }: React.ComponentProps<\"form\">) {\n return <form data-slot=\"form\" {...props} />;\n}\n\nexport function FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId();\n const value = React.useMemo<FormItemContextValue>(\n () => ({\n id,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n }),\n [id],\n );\n\n return (\n <FormItemContext.Provider value={value}>\n <div data-slot=\"form-item\" className={cn(FORM_ITEM, className)} {...props} />\n </FormItemContext.Provider>\n );\n}\n\nexport function FormLabel({\n className,\n error,\n ...props\n}: React.ComponentProps<typeof Label> & { error?: boolean }) {\n const { formItemId } = useFormItem();\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn(\"data-[error=true]:text-destructive\", className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nexport function FormControl({\n error,\n ...props\n}: React.ComponentProps<typeof Slot> & { error?: boolean }) {\n const { formItemId, formDescriptionId, formMessageId } = useFormItem();\n\n return (\n <Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nexport function FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormItem();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(FORM_DESCRIPTION, className)}\n {...props}\n />\n );\n}\n\nexport function FormMessage({ className, children, ...props }: React.ComponentProps<\"p\">) {\n const { formMessageId } = useFormItem();\n\n if (!children) {\n return null;\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(FORM_MESSAGE, className)}\n {...props}\n >\n {children}\n </p>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const FORM_ITEM = \"grid gap-2\";\n\nexport const FORM_LABEL = \"text-destructive\";\n\nexport const FORM_DESCRIPTION = \"text-muted-foreground text-sm\";\n\nexport const FORM_MESSAGE = \"text-destructive text-sm\";\n","import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n RESIZABLE_GROUP,\n RESIZABLE_HANDLE,\n RESIZABLE_HANDLE_GRIP,\n RESIZABLE_PANEL,\n} from \"../generated/resizable\";\n\nexport type ResizableDirection = \"horizontal\" | \"vertical\";\n\ninterface ResizableContextValue {\n sizes: number[];\n setSizes: React.Dispatch<React.SetStateAction<number[]>>;\n register: (index: number, defaultSize: number) => void;\n direction: ResizableDirection;\n keyboardStep: number;\n groupRef: React.RefObject<HTMLDivElement | null>;\n}\n\nconst ResizableContext = React.createContext<ResizableContextValue | null>(null);\n\nfunction useResizable(): ResizableContextValue {\n const ctx = React.useContext(ResizableContext);\n if (!ctx)\n throw new Error(\"Resizable parts must be used within a ResizablePanelGroup\");\n return ctx;\n}\n\n/** Grows the panel before `index` by `delta` %, shrinking the one after it. */\nfunction redistribute(sizes: number[], index: number, delta: number): number[] {\n const before = sizes[index];\n const after = sizes[index + 1];\n if (before === undefined || after === undefined) return sizes;\n const moved = Math.max(-before, Math.min(after, delta));\n const next = sizes.slice();\n next[index] = before + moved;\n next[index + 1] = after - moved;\n return next;\n}\n\nexport interface ResizablePanelGroupProps\n extends React.ComponentProps<\"div\"> {\n direction?: ResizableDirection;\n keyboardStep?: number;\n onLayout?: (sizes: number[]) => void;\n}\n\nexport function ResizablePanelGroup({\n className,\n direction = \"horizontal\",\n keyboardStep = 10,\n onLayout,\n children,\n ...props\n}: ResizablePanelGroupProps) {\n const [sizes, setSizes] = React.useState<number[]>([]);\n const groupRef = React.useRef<HTMLDivElement>(null);\n\n const register = React.useCallback((index: number, defaultSize: number) => {\n setSizes((prev) => {\n if (prev[index] !== undefined) return prev;\n const next = prev.slice();\n while (next.length <= index) next.push(0);\n next[index] = defaultSize;\n return next;\n });\n }, []);\n\n React.useEffect(() => {\n if (sizes.length) onLayout?.(sizes);\n }, [sizes, onLayout]);\n\n const value = React.useMemo<ResizableContextValue>(\n () => ({ sizes, setSizes, register, direction, keyboardStep, groupRef }),\n [sizes, register, direction, keyboardStep],\n );\n\n return (\n <ResizableContext.Provider value={value}>\n <div\n ref={groupRef}\n data-slot=\"resizable-panel-group\"\n data-panel-group-direction={direction}\n className={cn(RESIZABLE_GROUP, className)}\n {...props}\n >\n {children}\n </div>\n </ResizableContext.Provider>\n );\n}\n\nexport interface ResizablePanelProps extends React.ComponentProps<\"div\"> {\n index: number;\n defaultSize?: number;\n}\n\nexport function ResizablePanel({\n className,\n index,\n defaultSize = 50,\n style,\n children,\n ...props\n}: ResizablePanelProps) {\n const { sizes, register } = useResizable();\n React.useEffect(() => {\n register(index, defaultSize);\n }, [register, index, defaultSize]);\n const basis = sizes[index] ?? defaultSize;\n return (\n <div\n data-slot=\"resizable-panel\"\n className={cn(RESIZABLE_PANEL, className)}\n style={{ flex: `${basis} 1 0%`, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport interface ResizableHandleProps extends React.ComponentProps<\"div\"> {\n index: number;\n withHandle?: boolean;\n}\n\nexport function ResizableHandle({\n className,\n index,\n withHandle,\n children,\n ...props\n}: ResizableHandleProps) {\n const { setSizes, direction, keyboardStep, groupRef } = useResizable();\n const draggingRef = React.useRef(false);\n\n const resize = React.useCallback(\n (delta: number) => setSizes((prev) => redistribute(prev, index, delta)),\n [setSizes, index],\n );\n\n const onPointerMove = React.useCallback(\n (event: PointerEvent) => {\n if (!draggingRef.current) return;\n const rect = groupRef.current?.getBoundingClientRect();\n if (!rect) return;\n const span = direction === \"vertical\" ? rect.height : rect.width;\n if (span <= 0) return;\n const px = direction === \"vertical\" ? event.movementY : event.movementX;\n resize((px / span) * 100);\n },\n [direction, resize, groupRef],\n );\n\n const onPointerUp = React.useCallback(() => {\n draggingRef.current = false;\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerUp);\n }, [onPointerMove]);\n\n const onPointerDown = (event: React.PointerEvent) => {\n event.preventDefault();\n draggingRef.current = true;\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", onPointerUp);\n };\n\n React.useEffect(() => () => onPointerUp(), [onPointerUp]);\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n let delta: number;\n switch (event.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n delta = -keyboardStep;\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n delta = keyboardStep;\n break;\n default:\n return;\n }\n if (\n (direction === \"horizontal\" &&\n (event.key === \"ArrowUp\" || event.key === \"ArrowDown\")) ||\n (direction === \"vertical\" &&\n (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\"))\n )\n return;\n event.preventDefault();\n resize(delta);\n };\n\n return (\n <div\n data-slot=\"resizable-handle\"\n data-panel-group-direction={direction}\n role=\"separator\"\n aria-orientation={direction === \"horizontal\" ? \"vertical\" : \"horizontal\"}\n tabIndex={0}\n className={cn(RESIZABLE_HANDLE, className)}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n {...props}\n >\n {withHandle && (\n <div className={RESIZABLE_HANDLE_GRIP}>\n <svg\n className=\"size-2.5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"15\"\n height=\"15\"\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 <circle cx=\"9\" cy=\"12\" r=\"1\" />\n <circle cx=\"9\" cy=\"5\" r=\"1\" />\n <circle cx=\"9\" cy=\"19\" r=\"1\" />\n <circle cx=\"15\" cy=\"12\" r=\"1\" />\n <circle cx=\"15\" cy=\"5\" r=\"1\" />\n <circle cx=\"15\" cy=\"19\" r=\"1\" />\n </svg>\n </div>\n )}\n {children}\n </div>\n );\n}\n","// AUTO-GENERATED by `cargo run -p ev_lib_gen` — do not edit.\n\nexport const RESIZABLE_GROUP = \"flex h-full w-full data-[panel-group-direction=vertical]:flex-col\";\n\nexport const RESIZABLE_PANEL = \"relative\";\n\nexport const RESIZABLE_HANDLE = \"bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90\";\n\nexport const RESIZABLE_HANDLE_GRIP = \"bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border\";\n"],"mappings":"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","names":["Slot","React","React","React","React","React","React","React","React","jsx","jsx","jsx","jsx","jsx","jsx","jsx","React","jsx","jsx","jsxs","jsx","jsxs","React","jsx","jsx","Fragment","jsx","jsxs","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","jsx","jsx","jsx","jsxs","jsx","React","jsx","jsxs","React","jsx","React","jsx","jsx","React","jsx","jsx","jsx","React","jsx","React","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","Fragment","jsx","jsxs","React","jsx","jsxs","React","Fragment","jsx","React","jsx","React","jsx","jsxs","InfoGlyph","React","jsx","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","Fragment","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","XIcon","React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","Fragment","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","React","jsx","jsxs"]}