@revealui/presentation 0.2.0 → 0.3.2
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/README.md +146 -42
- package/dist/Text-BWMs9_wn.js +196 -0
- package/dist/Text-BWMs9_wn.js.map +1 -0
- package/dist/client.d.ts +3 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +89 -2938
- package/dist/client.js.map +1 -1
- package/dist/components/BuiltWithRevealUI.d.ts +13 -0
- package/dist/components/BuiltWithRevealUI.d.ts.map +1 -0
- package/dist/components/Button.d.ts +3 -1
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Card.d.ts +18 -6
- package/dist/components/Card.d.ts.map +1 -1
- package/dist/components/Checkbox.d.ts +6 -3
- package/dist/components/Checkbox.d.ts.map +1 -1
- package/dist/components/FormLabel.d.ts +5 -1
- package/dist/components/FormLabel.d.ts.map +1 -1
- package/dist/components/Input.d.ts +4 -2
- package/dist/components/Input.d.ts.map +1 -1
- package/dist/components/Label.d.ts +7 -2
- package/dist/components/Label.d.ts.map +1 -1
- package/dist/components/Pagination.d.ts +12 -23
- package/dist/components/Pagination.d.ts.map +1 -1
- package/dist/components/Select.d.ts +36 -13
- package/dist/components/Select.d.ts.map +1 -1
- package/dist/components/Textarea.d.ts +4 -2
- package/dist/components/Textarea.d.ts.map +1 -1
- package/dist/components/accordion.d.ts.map +1 -1
- package/dist/components/alert.d.ts.map +1 -1
- package/dist/components/auth-layout.d.ts +7 -2
- package/dist/components/auth-layout.d.ts.map +1 -1
- package/dist/components/avatar-group.d.ts.map +1 -1
- package/dist/components/avatar.d.ts +6 -5
- package/dist/components/avatar.d.ts.map +1 -1
- package/dist/components/badge.d.ts +5 -5
- package/dist/components/badge.d.ts.map +1 -1
- package/dist/components/breadcrumb.d.ts.map +1 -1
- package/dist/components/button-headless.d.ts +2 -1
- package/dist/components/button-headless.d.ts.map +1 -1
- package/dist/components/callout.d.ts.map +1 -1
- package/dist/components/checkbox-headless.d.ts.map +1 -1
- package/dist/components/code-block.d.ts.map +1 -1
- package/dist/components/combobox.d.ts.map +1 -1
- package/dist/components/dialog.d.ts.map +1 -1
- package/dist/components/drawer.d.ts.map +1 -1
- package/dist/components/dropdown.d.ts.map +1 -1
- package/dist/components/empty-state.d.ts.map +1 -1
- package/dist/components/fieldset.d.ts.map +1 -1
- package/dist/components/form-field.d.ts +23 -0
- package/dist/components/form-field.d.ts.map +1 -0
- package/dist/components/heading.d.ts.map +1 -1
- package/dist/components/index.d.ts +20 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/input-headless.d.ts +5 -3
- package/dist/components/input-headless.d.ts.map +1 -1
- package/dist/components/kbd.d.ts.map +1 -1
- package/dist/components/link.d.ts +3 -2
- package/dist/components/link.d.ts.map +1 -1
- package/dist/components/listbox.d.ts.map +1 -1
- package/dist/components/navbar.d.ts +5 -5
- package/dist/components/navbar.d.ts.map +1 -1
- package/dist/components/pricing-table.d.ts +23 -0
- package/dist/components/pricing-table.d.ts.map +1 -0
- package/dist/components/progress.d.ts.map +1 -1
- package/dist/components/radio.d.ts.map +1 -1
- package/dist/components/rating.d.ts.map +1 -1
- package/dist/components/select-headless.d.ts +5 -2
- package/dist/components/select-headless.d.ts.map +1 -1
- package/dist/components/sidebar-layout.d.ts.map +1 -1
- package/dist/components/sidebar.d.ts +5 -5
- package/dist/components/sidebar.d.ts.map +1 -1
- package/dist/components/skeleton.d.ts.map +1 -1
- package/dist/components/slider.d.ts.map +1 -1
- package/dist/components/stacked-layout.d.ts.map +1 -1
- package/dist/components/stat.d.ts.map +1 -1
- package/dist/components/stepper.d.ts.map +1 -1
- package/dist/components/switch.d.ts.map +1 -1
- package/dist/components/table.d.ts.map +1 -1
- package/dist/components/tabs.d.ts.map +1 -1
- package/dist/components/text.d.ts.map +1 -1
- package/dist/components/textarea-headless.d.ts +5 -2
- package/dist/components/textarea-headless.d.ts.map +1 -1
- package/dist/components/timeline.d.ts.map +1 -1
- package/dist/components/toast.d.ts.map +1 -1
- package/dist/components/tooltip.d.ts +7 -5
- package/dist/components/tooltip.d.ts.map +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/use-click-outside.d.ts.map +1 -1
- package/dist/hooks/use-close-context.d.ts.map +1 -1
- package/dist/hooks/use-controllable-state.d.ts.map +1 -1
- package/dist/hooks/use-data-interactive.d.ts.map +1 -1
- package/dist/hooks/use-field-context.d.ts.map +1 -1
- package/dist/hooks/use-focus-trap.d.ts.map +1 -1
- package/dist/hooks/use-layout-animation.d.ts.map +1 -1
- package/dist/hooks/use-popover.d.ts.map +1 -1
- package/dist/hooks/use-roving-tabindex.d.ts.map +1 -1
- package/dist/hooks/use-toggle.d.ts.map +1 -1
- package/dist/hooks/use-transition.d.ts.map +1 -1
- package/dist/hooks/use-type-ahead.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -85
- package/dist/index.js.map +1 -1
- package/dist/primitives/Box.d.ts +3 -1
- package/dist/primitives/Box.d.ts.map +1 -1
- package/dist/primitives/Flex.d.ts +3 -1
- package/dist/primitives/Flex.d.ts.map +1 -1
- package/dist/primitives/Grid.d.ts +3 -1
- package/dist/primitives/Grid.d.ts.map +1 -1
- package/dist/primitives/Heading.d.ts +3 -1
- package/dist/primitives/Heading.d.ts.map +1 -1
- package/dist/primitives/Slot.d.ts +3 -1
- package/dist/primitives/Slot.d.ts.map +1 -1
- package/dist/primitives/Text.d.ts +3 -1
- package/dist/primitives/Text.d.ts.map +1 -1
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/server.d.ts +6 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -32
- package/dist/skeleton-Bb51IWbG.js +520 -0
- package/dist/skeleton-Bb51IWbG.js.map +1 -0
- package/dist/tokens.css +265 -0
- package/dist/tooltip-DZGP3hO_.js +3893 -0
- package/dist/tooltip-DZGP3hO_.js.map +1 -0
- package/dist/utils/cn.d.ts.map +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/package.json +16 -12
- package/dist/Box-DDhRNK02.js +0 -45
- package/dist/Box-DDhRNK02.js.map +0 -1
- package/dist/Text-BIym7IhD.js +0 -425
- package/dist/Text-BIym7IhD.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/tooltip-oH4lAnkn.js +0 -2277
- package/dist/tooltip-oH4lAnkn.js.map +0 -1
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sources":["../src/components/text.tsx","../src/components/alert.tsx","../src/components/badge.tsx","../src/hooks/use-click-outside.ts","../src/hooks/use-popover.ts","../src/components/combobox.tsx","../src/components/description-list.tsx","../src/components/dialog.tsx","../src/components/divider.tsx","../src/hooks/use-roving-tabindex.ts","../src/hooks/use-type-ahead.ts","../src/components/dropdown.tsx","../src/components/fieldset.tsx","../src/components/heading.tsx","../src/components/listbox.tsx","../src/hooks/use-layout-animation.tsx","../src/components/navbar.tsx","../src/components/radio.tsx","../src/hooks/use-close-context.ts","../src/components/sidebar.tsx","../src/components/sidebar-layout.tsx","../src/components/stacked-layout.tsx","../src/components/switch.tsx","../src/components/table.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { Link } from './link.js'\n\nexport function Text({ className, ...props }: React.ComponentPropsWithoutRef<'p'>) {\n return (\n <p\n data-slot=\"text\"\n {...props}\n className={clsx(className, 'text-base/6 text-zinc-500 sm:text-sm/6 dark:text-zinc-400')}\n />\n )\n}\n\nexport function TextLink({ className, ...props }: React.ComponentPropsWithoutRef<typeof Link>) {\n return (\n <Link\n {...props}\n className={clsx(\n className,\n 'text-zinc-950 underline decoration-zinc-950/50 data-hover:decoration-zinc-950 dark:text-white dark:decoration-white/50 dark:data-hover:decoration-white',\n )}\n />\n )\n}\n\nexport function Strong({ className, ...props }: React.ComponentPropsWithoutRef<'strong'>) {\n return (\n <strong {...props} className={clsx(className, 'font-medium text-zinc-950 dark:text-white')} />\n )\n}\n\nexport function Code({ className, ...props }: React.ComponentPropsWithoutRef<'code'>) {\n return (\n <code\n {...props}\n className={clsx(\n className,\n 'rounded-sm border border-zinc-950/10 bg-zinc-950/2.5 px-0.5 text-sm font-medium text-zinc-950 sm:text-[0.8125rem] dark:border-white/20 dark:bg-white/5 dark:text-white',\n )}\n />\n )\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { useCallback, useId, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { useEscapeKey } from '../hooks/use-escape-key.js'\nimport { useFocusTrap } from '../hooks/use-focus-trap.js'\nimport { useScrollLock } from '../hooks/use-scroll-lock.js'\nimport { useTransition } from '../hooks/use-transition.js'\nimport { Text } from './text.js'\n\nconst sizes = {\n xs: 'sm:max-w-xs',\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-lg',\n xl: 'sm:max-w-xl',\n '2xl': 'sm:max-w-2xl',\n '3xl': 'sm:max-w-3xl',\n '4xl': 'sm:max-w-4xl',\n '5xl': 'sm:max-w-5xl',\n}\n\nexport function Alert({\n size = 'md',\n className,\n children,\n open,\n onClose,\n}: {\n size?: keyof typeof sizes\n className?: string\n children: React.ReactNode\n open: boolean\n onClose: () => void\n}) {\n const panelRef = useRef<HTMLDivElement>(null)\n const titleId = useId()\n\n const backdrop = useTransition(open)\n const panel = useTransition(open)\n\n useScrollLock(open)\n useFocusTrap(panelRef, open)\n useEscapeKey(onClose, open)\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose()\n }\n },\n [onClose],\n )\n\n if (!(backdrop.mounted || panel.mounted)) return null\n\n return createPortal(\n <div role=\"alertdialog\" aria-modal=\"true\" aria-labelledby={titleId}>\n {/* Backdrop */}\n {backdrop.mounted && (\n <div\n ref={backdrop.nodeRef as React.RefObject<HTMLDivElement>}\n {...backdrop.transitionProps}\n className=\"fixed inset-0 flex w-screen justify-center overflow-y-auto bg-zinc-950/15 px-2 py-2 transition duration-100 focus:outline-0 data-closed:opacity-0 data-enter:ease-out data-leave:ease-in sm:px-6 sm:py-8 lg:px-8 lg:py-16 dark:bg-zinc-950/50\"\n />\n )}\n\n {/* Panel container */}\n {panel.mounted && (\n <div\n className=\"fixed inset-0 w-screen overflow-y-auto pt-6 sm:pt-0\"\n onClick={handleBackdropClick}\n >\n <div\n className=\"grid min-h-full grid-rows-[1fr_auto_1fr] justify-items-center p-8 sm:grid-rows-[1fr_auto_3fr] sm:p-4\"\n onClick={handleBackdropClick}\n >\n <div\n ref={(node) => {\n ;(panelRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n ;(panel.nodeRef as React.MutableRefObject<HTMLElement | null>).current = node\n }}\n {...panel.transitionProps}\n className={clsx(\n className,\n sizes[size],\n 'row-start-2 w-full rounded-2xl bg-white p-8 shadow-lg ring-1 ring-zinc-950/10 sm:rounded-2xl sm:p-6 dark:bg-zinc-900 dark:ring-white/10 forced-colors:outline',\n 'transition duration-100 will-change-transform data-closed:opacity-0 data-enter:ease-out data-closed:data-enter:scale-95 data-leave:ease-in',\n )}\n >\n {children}\n </div>\n </div>\n </div>\n )}\n </div>,\n document.body,\n )\n}\n\nexport function AlertTitle({\n className,\n ...props\n}: { className?: string } & React.ComponentPropsWithoutRef<'h2'>) {\n return (\n <h2\n {...props}\n className={clsx(\n className,\n 'text-center text-base/6 font-semibold text-balance text-zinc-950 sm:text-left sm:text-sm/6 sm:text-wrap dark:text-white',\n )}\n />\n )\n}\n\nexport function AlertDescription({\n className,\n ...props\n}: { className?: string } & React.ComponentPropsWithoutRef<typeof Text>) {\n return (\n <Text {...props} className={clsx(className, 'mt-2 text-center text-pretty sm:text-left')} />\n )\n}\n\nexport function AlertBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return <div {...props} className={clsx(className, 'mt-4')} />\n}\n\nexport function AlertActions({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={clsx(\n className,\n 'mt-6 flex flex-col-reverse items-center justify-end gap-3 *:w-full sm:mt-4 sm:flex-row sm:*:w-auto',\n )}\n />\n )\n}\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { forwardRef } from 'react'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { TouchTarget } from './button-headless.js'\nimport { Link } from './link.js'\n\nconst colors = {\n red: 'bg-red-500/15 text-red-700 group-data-hover:bg-red-500/25 dark:bg-red-500/10 dark:text-red-400 dark:group-data-hover:bg-red-500/20',\n orange:\n 'bg-orange-500/15 text-orange-700 group-data-hover:bg-orange-500/25 dark:bg-orange-500/10 dark:text-orange-400 dark:group-data-hover:bg-orange-500/20',\n amber:\n 'bg-amber-400/20 text-amber-700 group-data-hover:bg-amber-400/30 dark:bg-amber-400/10 dark:text-amber-400 dark:group-data-hover:bg-amber-400/15',\n yellow:\n 'bg-yellow-400/20 text-yellow-700 group-data-hover:bg-yellow-400/30 dark:bg-yellow-400/10 dark:text-yellow-300 dark:group-data-hover:bg-yellow-400/15',\n lime: 'bg-lime-400/20 text-lime-700 group-data-hover:bg-lime-400/30 dark:bg-lime-400/10 dark:text-lime-300 dark:group-data-hover:bg-lime-400/15',\n green:\n 'bg-green-500/15 text-green-700 group-data-hover:bg-green-500/25 dark:bg-green-500/10 dark:text-green-400 dark:group-data-hover:bg-green-500/20',\n emerald:\n 'bg-emerald-500/15 text-emerald-700 group-data-hover:bg-emerald-500/25 dark:bg-emerald-500/10 dark:text-emerald-400 dark:group-data-hover:bg-emerald-500/20',\n teal: 'bg-teal-500/15 text-teal-700 group-data-hover:bg-teal-500/25 dark:bg-teal-500/10 dark:text-teal-300 dark:group-data-hover:bg-teal-500/20',\n cyan: 'bg-cyan-400/20 text-cyan-700 group-data-hover:bg-cyan-400/30 dark:bg-cyan-400/10 dark:text-cyan-300 dark:group-data-hover:bg-cyan-400/15',\n sky: 'bg-sky-500/15 text-sky-700 group-data-hover:bg-sky-500/25 dark:bg-sky-500/10 dark:text-sky-300 dark:group-data-hover:bg-sky-500/20',\n blue: 'bg-blue-500/15 text-blue-700 group-data-hover:bg-blue-500/25 dark:text-blue-400 dark:group-data-hover:bg-blue-500/25',\n indigo:\n 'bg-indigo-500/15 text-indigo-700 group-data-hover:bg-indigo-500/25 dark:text-indigo-400 dark:group-data-hover:bg-indigo-500/20',\n violet:\n 'bg-violet-500/15 text-violet-700 group-data-hover:bg-violet-500/25 dark:text-violet-400 dark:group-data-hover:bg-violet-500/20',\n purple:\n 'bg-purple-500/15 text-purple-700 group-data-hover:bg-purple-500/25 dark:text-purple-400 dark:group-data-hover:bg-purple-500/20',\n fuchsia:\n 'bg-fuchsia-400/15 text-fuchsia-700 group-data-hover:bg-fuchsia-400/25 dark:bg-fuchsia-400/10 dark:text-fuchsia-400 dark:group-data-hover:bg-fuchsia-400/20',\n pink: 'bg-pink-400/15 text-pink-700 group-data-hover:bg-pink-400/25 dark:bg-pink-400/10 dark:text-pink-400 dark:group-data-hover:bg-pink-400/20',\n rose: 'bg-rose-400/15 text-rose-700 group-data-hover:bg-rose-400/25 dark:bg-rose-400/10 dark:text-rose-400 dark:group-data-hover:bg-rose-400/20',\n zinc: 'bg-zinc-600/10 text-zinc-700 group-data-hover:bg-zinc-600/20 dark:bg-white/5 dark:text-zinc-400 dark:group-data-hover:bg-white/10',\n}\n\ntype BadgeProps = { color?: keyof typeof colors }\n\nexport function Badge({\n color = 'zinc',\n className,\n ...props\n}: BadgeProps & React.ComponentPropsWithoutRef<'span'>) {\n return (\n <span\n {...props}\n className={clsx(\n className,\n 'inline-flex items-center gap-x-1.5 rounded-md px-1.5 py-0.5 text-sm/5 font-medium sm:text-xs/5 forced-colors:outline',\n colors[color],\n )}\n />\n )\n}\n\nexport const BadgeButton = forwardRef(function BadgeButton(\n {\n color = 'zinc',\n className,\n children,\n ...props\n }: BadgeProps & { className?: string; children: React.ReactNode } & (\n | ({\n href?: never\n disabled?: boolean\n } & Omit<React.ComponentPropsWithoutRef<'button'>, 'className'>)\n | ({ href: string } & Omit<React.ComponentPropsWithoutRef<typeof Link>, 'className'>)\n ),\n ref: React.ForwardedRef<HTMLElement>,\n) {\n const disabled = 'disabled' in props ? props.disabled : false\n const interactiveProps = useDataInteractive({ disabled: disabled ?? false })\n\n const classes = clsx(\n className,\n 'group relative inline-flex rounded-md focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500',\n )\n\n return typeof props.href === 'string' ? (\n <Link {...props} className={classes} ref={ref as React.ForwardedRef<HTMLAnchorElement>}>\n <TouchTarget>\n <Badge color={color}>{children}</Badge>\n </TouchTarget>\n </Link>\n ) : (\n <button\n type=\"button\"\n {...props}\n {...interactiveProps}\n className={classes}\n ref={ref as React.ForwardedRef<HTMLButtonElement>}\n >\n <TouchTarget>\n <Badge color={color}>{children}</Badge>\n </TouchTarget>\n </button>\n )\n})\n","import { type RefObject, useEffect, useRef } from 'react'\n\nexport function useClickOutside(\n refs: RefObject<HTMLElement | null> | RefObject<HTMLElement | null>[],\n onClickOutside: () => void,\n enabled = true,\n): void {\n const callbackRef = useRef(onClickOutside)\n callbackRef.current = onClickOutside\n\n useEffect(() => {\n if (!enabled) return\n\n function handlePointerDown(e: PointerEvent) {\n const target = e.target as Node\n const refArray = Array.isArray(refs) ? refs : [refs]\n const isOutside = refArray.every((ref) => !ref.current?.contains(target))\n if (isOutside) {\n callbackRef.current()\n }\n }\n\n // Use pointerdown on capture phase to fire before focus changes\n document.addEventListener('pointerdown', handlePointerDown, true)\n return () => document.removeEventListener('pointerdown', handlePointerDown, true)\n }, [refs, enabled])\n}\n","import { type RefObject, useCallback, useEffect, useRef, useState } from 'react'\n\ntype Anchor =\n | 'top'\n | 'top start'\n | 'top end'\n | 'bottom'\n | 'bottom start'\n | 'bottom end'\n | 'selection start'\n\ninterface UsePopoverOptions {\n /** Whether the popover is open */\n open: boolean\n /** Preferred anchor position */\n anchor?: Anchor\n /** Gap between trigger and popover (px) */\n gap?: number\n /** Padding from viewport edges (px) */\n padding?: number\n}\n\ninterface PopoverPosition {\n top: number\n left: number\n maxHeight: number\n}\n\ninterface UsePopoverReturn {\n triggerRef: RefObject<HTMLElement | null>\n popoverRef: RefObject<HTMLElement | null>\n position: PopoverPosition\n popoverProps: {\n style: React.CSSProperties\n }\n}\n\nfunction computePosition(\n trigger: HTMLElement,\n popover: HTMLElement,\n anchor: Anchor,\n gap: number,\n padding: number,\n): PopoverPosition {\n const triggerRect = trigger.getBoundingClientRect()\n const popoverRect = popover.getBoundingClientRect()\n const viewportHeight = window.innerHeight\n const viewportWidth = window.innerWidth\n\n let top: number\n let left: number\n let maxHeight: number\n\n // Vertical positioning\n const isTop = anchor.startsWith('top')\n const spaceBelow = viewportHeight - triggerRect.bottom - gap - padding\n const spaceAbove = triggerRect.top - gap - padding\n\n if (anchor === 'selection start') {\n // Position at the selection start (aligned with trigger)\n top = triggerRect.top\n maxHeight = viewportHeight - top - padding\n } else if (isTop) {\n top = triggerRect.top - popoverRect.height - gap\n maxHeight = spaceAbove\n // Flip to bottom if not enough space\n if (top < padding && spaceBelow > spaceAbove) {\n top = triggerRect.bottom + gap\n maxHeight = spaceBelow\n }\n } else {\n top = triggerRect.bottom + gap\n maxHeight = spaceBelow\n // Flip to top if not enough space\n if (top + popoverRect.height > viewportHeight - padding && spaceAbove > spaceBelow) {\n top = triggerRect.top - popoverRect.height - gap\n maxHeight = spaceAbove\n }\n }\n\n // Horizontal positioning\n const isEnd = anchor.endsWith('end')\n const isStart = anchor.endsWith('start')\n\n if (isEnd) {\n left = triggerRect.right - popoverRect.width\n } else if (isStart || anchor === 'selection start') {\n left = triggerRect.left\n } else {\n // Center\n left = triggerRect.left + (triggerRect.width - popoverRect.width) / 2\n }\n\n // Clamp to viewport\n left = Math.max(padding, Math.min(left, viewportWidth - popoverRect.width - padding))\n top = Math.max(padding, top)\n\n return { top, left, maxHeight: Math.max(100, maxHeight) }\n}\n\nexport function usePopover({\n open,\n anchor = 'bottom',\n gap = 8,\n padding = 4,\n}: UsePopoverOptions): UsePopoverReturn {\n const triggerRef = useRef<HTMLElement | null>(null)\n const popoverRef = useRef<HTMLElement | null>(null)\n const [position, setPosition] = useState<PopoverPosition>({\n top: 0,\n left: 0,\n maxHeight: 300,\n })\n\n const updatePosition = useCallback(() => {\n if (!(triggerRef.current && popoverRef.current && open)) return\n const pos = computePosition(triggerRef.current, popoverRef.current, anchor, gap, padding)\n setPosition(pos)\n }, [open, anchor, gap, padding])\n\n // Update position when open changes or on scroll/resize\n useEffect(() => {\n if (!open) return\n\n // Initial positioning (after popover renders)\n requestAnimationFrame(updatePosition)\n\n window.addEventListener('scroll', updatePosition, true)\n window.addEventListener('resize', updatePosition)\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true)\n window.removeEventListener('resize', updatePosition)\n }\n }, [open, updatePosition])\n\n return {\n triggerRef,\n popoverRef,\n position,\n popoverProps: {\n style: {\n position: 'fixed',\n top: position.top,\n left: position.left,\n maxHeight: position.maxHeight,\n zIndex: 50,\n },\n },\n }\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { createContext, useCallback, useContext, useEffect, useId, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { useClickOutside } from '../hooks/use-click-outside.js'\nimport { useControllableState } from '../hooks/use-controllable-state.js'\nimport { useEscapeKey } from '../hooks/use-escape-key.js'\nimport { usePopover } from '../hooks/use-popover.js'\nimport { useTransition } from '../hooks/use-transition.js'\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ninterface ComboboxContextValue<T = unknown> {\n selectedValue: T | null\n activeIndex: number\n filteredOptions: T[]\n select: (value: T) => void\n setActiveIndex: (index: number) => void\n}\n\nconst ComboboxContext = createContext<ComboboxContextValue | null>(null)\n\nfunction useComboboxContext(): ComboboxContextValue {\n const ctx = useContext(ComboboxContext)\n if (!ctx) {\n throw new Error('Combobox compound components must be used within <Combobox>')\n }\n return ctx\n}\n\n// ---------------------------------------------------------------------------\n// Combobox\n// ---------------------------------------------------------------------------\n\nexport function Combobox<T>({\n options,\n displayValue,\n filter,\n anchor = 'bottom',\n className,\n placeholder,\n autoFocus,\n 'aria-label': ariaLabel,\n children,\n value: controlledValue,\n defaultValue,\n onChange,\n disabled = false,\n name,\n}: {\n options: T[]\n displayValue: (value: T | null) => string | undefined\n filter?: (value: T, query: string) => boolean\n className?: string\n placeholder?: string | undefined\n autoFocus?: boolean | undefined\n 'aria-label'?: string\n children: (value: NonNullable<T>) => React.ReactElement\n value?: T | null\n defaultValue?: T | null\n onChange?: (value: T) => void\n disabled?: boolean\n name?: string\n anchor?: 'top' | 'bottom'\n}) {\n const [selectedValue, setSelectedValue] = useControllableState<T | null>({\n value: controlledValue,\n defaultValue: defaultValue ?? null,\n onChange: onChange as ((value: T | null) => void) | undefined,\n })\n\n const [query, setQuery] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [activeIndex, setActiveIndex] = useState(-1)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const controlRef = useRef<HTMLSpanElement>(null)\n const listboxId = useId()\n\n // Filtering\n const filteredOptions =\n query === ''\n ? options\n : options.filter((option) =>\n filter\n ? filter(option, query)\n : displayValue(option)?.toLowerCase().includes(query.toLowerCase()),\n )\n\n // Popover positioning\n const { triggerRef, popoverRef, popoverProps } = usePopover({\n open: isOpen,\n anchor,\n gap: 8,\n padding: 16,\n })\n\n // Sync control span as the trigger\n useEffect(() => {\n if (controlRef.current) {\n ;(triggerRef as React.MutableRefObject<HTMLElement | null>).current = controlRef.current\n }\n }, [triggerRef])\n\n // Transition\n const { mounted, nodeRef: transitionRef, transitionProps } = useTransition(isOpen)\n\n // Dismiss handlers\n useClickOutside(\n [controlRef, popoverRef],\n () => {\n if (isOpen) close()\n },\n isOpen,\n )\n\n useEscapeKey(() => {\n if (isOpen) close()\n }, isOpen)\n\n // Helpers\n const open = useCallback(() => {\n if (disabled) return\n setIsOpen(true)\n setActiveIndex(-1)\n }, [disabled])\n\n const close = useCallback(() => {\n setIsOpen(false)\n setQuery('')\n setActiveIndex(-1)\n }, [])\n\n const select = useCallback(\n (value: T) => {\n setSelectedValue(value)\n close()\n requestAnimationFrame(() => {\n inputRef.current?.focus()\n })\n },\n [setSelectedValue, close],\n )\n\n // Keyboard navigation\n const handleInputKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n if (!isOpen) {\n open()\n } else {\n setActiveIndex((prev) => (prev < filteredOptions.length - 1 ? prev + 1 : 0))\n }\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n if (!isOpen) {\n open()\n } else {\n setActiveIndex((prev) => (prev > 0 ? prev - 1 : filteredOptions.length - 1))\n }\n break\n }\n case 'Home': {\n if (isOpen) {\n e.preventDefault()\n setActiveIndex(0)\n }\n break\n }\n case 'End': {\n if (isOpen) {\n e.preventDefault()\n setActiveIndex(filteredOptions.length - 1)\n }\n break\n }\n case 'Enter': {\n e.preventDefault()\n if (isOpen && activeIndex >= 0 && activeIndex < filteredOptions.length) {\n select(filteredOptions[activeIndex] as T)\n }\n break\n }\n case 'Tab': {\n if (isOpen) {\n close()\n }\n break\n }\n }\n },\n [isOpen, open, close, select, activeIndex, filteredOptions],\n )\n\n // Scroll active option into view\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return\n const listbox = popoverRef.current\n if (!listbox) return\n const activeOption = listbox.querySelector(`[data-combobox-option-index=\"${activeIndex}\"]`)\n if (activeOption) {\n activeOption.scrollIntoView({ block: 'nearest' })\n }\n }, [activeIndex, isOpen, popoverRef])\n\n // Context value\n const contextValue: ComboboxContextValue<T> = {\n selectedValue,\n activeIndex,\n filteredOptions,\n select: select as (value: unknown) => void,\n setActiveIndex,\n }\n\n return (\n <ComboboxContext.Provider value={contextValue as ComboboxContextValue}>\n <span\n ref={controlRef}\n data-slot=\"control\"\n {...(disabled ? { 'data-disabled': '' } : {})}\n className={clsx([\n className,\n 'relative block w-full',\n 'before:absolute before:inset-px before:rounded-[calc(var(--radius-lg)-1px)] before:bg-white before:shadow-sm',\n 'dark:before:hidden',\n 'after:pointer-events-none after:absolute after:inset-0 after:rounded-lg after:ring-transparent after:ring-inset sm:focus-within:after:ring-2 sm:focus-within:after:ring-blue-500',\n 'has-data-disabled:opacity-50 has-data-disabled:before:bg-zinc-950/5 has-data-disabled:before:shadow-none',\n 'has-data-invalid:before:shadow-red-500/10',\n ])}\n >\n <input\n ref={inputRef}\n autoFocus={autoFocus}\n data-slot=\"control\"\n role=\"combobox\"\n aria-label={ariaLabel}\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-activedescendant={\n isOpen && activeIndex >= 0 ? `${listboxId}-option-${activeIndex}` : undefined\n }\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n disabled={disabled}\n name={name}\n value={isOpen ? query : (displayValue(selectedValue) ?? '')}\n onChange={(e) => {\n setQuery(e.target.value)\n if (!isOpen) open()\n setActiveIndex(-1)\n }}\n onFocus={() => {\n if (!isOpen) open()\n }}\n onKeyDown={handleInputKeyDown}\n placeholder={placeholder}\n {...(disabled ? { 'data-disabled': '' } : {})}\n className={clsx([\n className,\n 'relative block w-full appearance-none rounded-lg py-[calc(--spacing(2.5)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',\n 'pr-[calc(--spacing(10)-1px)] pl-[calc(--spacing(3.5)-1px)] sm:pr-[calc(--spacing(9)-1px)] sm:pl-[calc(--spacing(3)-1px)]',\n 'text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white',\n 'border border-zinc-950/10 data-hover:border-zinc-950/20 dark:border-white/10 dark:data-hover:border-white/20',\n 'bg-transparent dark:bg-white/5',\n 'focus:outline-hidden',\n 'data-invalid:border-red-500 data-invalid:data-hover:border-red-500 dark:data-invalid:border-red-500 dark:data-invalid:data-hover:border-red-500',\n 'data-disabled:border-zinc-950/20 dark:data-disabled:border-white/15 dark:data-disabled:bg-white/2.5 dark:data-hover:data-disabled:border-white/15',\n 'dark:scheme-dark',\n ])}\n />\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Toggle options\"\n disabled={disabled}\n onClick={() => {\n if (isOpen) {\n close()\n } else {\n open()\n inputRef.current?.focus()\n }\n }}\n className=\"group absolute inset-y-0 right-0 flex items-center px-2\"\n {...(disabled ? { 'data-disabled': '' } : {})}\n >\n <svg\n className=\"size-5 stroke-zinc-500 group-data-disabled:stroke-zinc-600 group-data-hover:stroke-zinc-700 sm:size-4 dark:stroke-zinc-400 dark:group-data-hover:stroke-zinc-300 forced-colors:stroke-[CanvasText]\"\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\"\n fill=\"none\"\n >\n <path\n d=\"M5.75 10.75L8 13L10.25 10.75\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.25 5.25L8 3L5.75 5.25\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </span>\n\n {/* Options panel via portal */}\n {mounted &&\n createPortal(\n <div\n ref={(node) => {\n ;(popoverRef as React.MutableRefObject<HTMLElement | null>).current = node\n ;(transitionRef as React.MutableRefObject<HTMLElement | null>).current = node\n }}\n role=\"listbox\"\n id={listboxId}\n {...popoverProps}\n {...transitionProps}\n className={clsx(\n '[--anchor-gap:--spacing(2)] [--anchor-padding:--spacing(4)] sm:data-[anchor~=start]:[--anchor-offset:-4px]',\n 'isolate min-w-[calc(var(--input-width)+8px)] scroll-py-1 rounded-xl p-1 select-none empty:invisible',\n 'outline outline-transparent focus:outline-hidden',\n 'overflow-y-scroll overscroll-contain',\n 'bg-white/75 backdrop-blur-xl dark:bg-zinc-800/75',\n 'shadow-lg ring-1 ring-zinc-950/10 dark:ring-white/10 dark:ring-inset',\n 'transition-opacity duration-100 ease-in data-closed:data-leave:opacity-0 data-transition:pointer-events-none',\n )}\n style={{\n ...popoverProps.style,\n minWidth: controlRef.current?.offsetWidth,\n }}\n >\n {filteredOptions.map((option, index) =>\n option == null ? null : (\n // biome-ignore lint/suspicious/noArrayIndexKey: filtered options have no stable ID\n <ComboboxOptionIndexProvider key={index} index={index}>\n {children(option)}\n </ComboboxOptionIndexProvider>\n ),\n )}\n </div>,\n document.body,\n )}\n </ComboboxContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Internal: option index provider\n// ---------------------------------------------------------------------------\n\nconst ComboboxOptionIndexContext = createContext<number>(-1)\n\nfunction ComboboxOptionIndexProvider({\n index,\n children,\n}: {\n index: number\n children: React.ReactNode\n}) {\n return (\n <ComboboxOptionIndexContext.Provider value={index}>\n {children}\n </ComboboxOptionIndexContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ComboboxOption\n// ---------------------------------------------------------------------------\n\nexport function ComboboxOption<T>({\n children,\n className,\n value,\n disabled = false,\n}: {\n className?: string\n children?: React.ReactNode\n value: T\n disabled?: boolean\n}) {\n const { selectedValue, activeIndex, select, setActiveIndex } = useComboboxContext()\n const index = useContext(ComboboxOptionIndexContext)\n\n const isSelected = selectedValue === value\n const isActive = activeIndex === index\n\n const sharedClasses = clsx(\n 'flex min-w-0 items-center',\n '*:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 sm:*:data-[slot=icon]:size-4',\n '*:data-[slot=icon]:text-zinc-500 group-data-focus/option:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400',\n 'forced-colors:*:data-[slot=icon]:text-[CanvasText] forced-colors:group-data-focus/option:*:data-[slot=icon]:text-[Canvas]',\n '*:data-[slot=avatar]:-mx-0.5 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:size-5',\n )\n\n return (\n // biome-ignore lint/a11y/useFocusableInteractive: focus managed by roving tabindex\n <div\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={disabled}\n data-combobox-option-index={index}\n {...(isActive ? { 'data-focus': '' } : {})}\n {...(isSelected ? { 'data-selected': '' } : {})}\n {...(disabled ? { 'data-disabled': '' } : {})}\n onPointerEnter={() => {\n if (!disabled) setActiveIndex(index)\n }}\n onPointerLeave={() => {\n setActiveIndex(-1)\n }}\n onClick={() => {\n if (!disabled) select(value)\n }}\n className={clsx(\n 'group/option grid w-full cursor-default grid-cols-[1fr_--spacing(5)] items-baseline gap-x-2 rounded-lg py-2.5 pr-2 pl-3.5 sm:grid-cols-[1fr_--spacing(4)] sm:py-1.5 sm:pr-2 sm:pl-3',\n 'text-base/6 text-zinc-950 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',\n 'outline-hidden data-focus:bg-blue-500 data-focus:text-white',\n 'forced-color-adjust-none forced-colors:data-focus:bg-[Highlight] forced-colors:data-focus:text-[HighlightText]',\n 'data-disabled:opacity-50',\n )}\n >\n <span className={clsx(className, sharedClasses)}>{children}</span>\n <svg\n className=\"relative col-start-2 hidden size-5 self-center stroke-current group-data-selected/option:inline sm:size-4\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 8.5l3 3L12 4\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ComboboxLabel\n// ---------------------------------------------------------------------------\n\nexport function ComboboxLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {\n return (\n <span\n {...props}\n className={clsx(className, 'ml-2.5 truncate first:ml-0 sm:ml-2 sm:first:ml-0')}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// ComboboxDescription\n// ---------------------------------------------------------------------------\n\nexport function ComboboxDescription({\n className,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<'span'>) {\n return (\n <span\n {...props}\n className={clsx(\n className,\n 'flex flex-1 overflow-hidden text-zinc-500 group-data-focus/option:text-white before:w-2 before:min-w-0 before:shrink dark:text-zinc-400',\n )}\n >\n <span className=\"flex-1 truncate\">{children}</span>\n </span>\n )\n}\n","import clsx from 'clsx'\n\nexport function DescriptionList({ className, ...props }: React.ComponentPropsWithoutRef<'dl'>) {\n return (\n <dl\n {...props}\n className={clsx(\n className,\n 'grid grid-cols-1 text-base/6 sm:grid-cols-[min(50%,--spacing(80))_auto] sm:text-sm/6',\n )}\n />\n )\n}\n\nexport function DescriptionTerm({ className, ...props }: React.ComponentPropsWithoutRef<'dt'>) {\n return (\n <dt\n {...props}\n className={clsx(\n className,\n 'col-start-1 border-t border-zinc-950/5 pt-3 text-zinc-500 first:border-none sm:border-t sm:border-zinc-950/5 sm:py-3 dark:border-white/5 dark:text-zinc-400 sm:dark:border-white/5',\n )}\n />\n )\n}\n\nexport function DescriptionDetails({ className, ...props }: React.ComponentPropsWithoutRef<'dd'>) {\n return (\n <dd\n {...props}\n className={clsx(\n className,\n 'pt-1 pb-3 text-zinc-950 sm:border-t sm:border-zinc-950/5 sm:py-3 sm:nth-2:border-none dark:text-white dark:sm:border-white/5',\n )}\n />\n )\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { useCallback, useId, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { useEscapeKey } from '../hooks/use-escape-key.js'\nimport { useFocusTrap } from '../hooks/use-focus-trap.js'\nimport { useScrollLock } from '../hooks/use-scroll-lock.js'\nimport { useTransition } from '../hooks/use-transition.js'\nimport { Text } from './text.js'\n\nconst sizes = {\n xs: 'sm:max-w-xs',\n sm: 'sm:max-w-sm',\n md: 'sm:max-w-md',\n lg: 'sm:max-w-lg',\n xl: 'sm:max-w-xl',\n '2xl': 'sm:max-w-2xl',\n '3xl': 'sm:max-w-3xl',\n '4xl': 'sm:max-w-4xl',\n '5xl': 'sm:max-w-5xl',\n}\n\nexport function Dialog({\n size = 'lg',\n className,\n children,\n open,\n onClose,\n}: {\n size?: keyof typeof sizes\n className?: string\n children: React.ReactNode\n open: boolean\n onClose: () => void\n}) {\n const panelRef = useRef<HTMLDivElement>(null)\n const titleId = useId()\n\n const backdrop = useTransition(open)\n const panel = useTransition(open)\n\n useScrollLock(open)\n useFocusTrap(panelRef, open)\n useEscapeKey(onClose, open)\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n // Only close if clicking on the backdrop itself, not the panel\n if (e.target === e.currentTarget) {\n onClose()\n }\n },\n [onClose],\n )\n\n if (!(backdrop.mounted || panel.mounted)) return null\n\n return createPortal(\n <div role=\"dialog\" aria-modal=\"true\" aria-labelledby={titleId}>\n {/* Backdrop */}\n {backdrop.mounted && (\n <div\n ref={backdrop.nodeRef as React.RefObject<HTMLDivElement>}\n {...backdrop.transitionProps}\n className=\"fixed inset-0 flex w-screen justify-center overflow-y-auto bg-zinc-950/25 px-2 py-2 transition duration-100 focus:outline-0 data-closed:opacity-0 data-enter:ease-out data-leave:ease-in sm:px-6 sm:py-8 lg:px-8 lg:py-16 dark:bg-zinc-950/50\"\n />\n )}\n\n {/* Panel container */}\n {panel.mounted && (\n <div\n className=\"fixed inset-0 w-screen overflow-y-auto pt-6 sm:pt-0\"\n onClick={handleBackdropClick}\n >\n <div\n className=\"grid min-h-full grid-rows-[1fr_auto] justify-items-center sm:grid-rows-[1fr_auto_3fr] sm:p-4\"\n onClick={handleBackdropClick}\n >\n <div\n ref={(node) => {\n // Combine refs\n ;(panelRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n ;(panel.nodeRef as React.MutableRefObject<HTMLElement | null>).current = node\n }}\n {...panel.transitionProps}\n className={clsx(\n className,\n sizes[size],\n 'row-start-2 w-full min-w-0 rounded-t-3xl bg-white p-(--gutter) shadow-lg ring-1 ring-zinc-950/10 [--gutter:--spacing(8)] sm:mb-auto sm:rounded-2xl dark:bg-zinc-900 dark:ring-white/10 forced-colors:outline',\n 'transition duration-100 will-change-transform data-closed:translate-y-12 data-closed:opacity-0 data-enter:ease-out data-leave:ease-in sm:data-closed:translate-y-0 sm:data-closed:data-enter:scale-95',\n )}\n >\n {children}\n </div>\n </div>\n </div>\n )}\n </div>,\n document.body,\n )\n}\n\nexport function DialogTitle({\n className,\n ...props\n}: { className?: string } & React.ComponentPropsWithoutRef<'h2'>) {\n return (\n <h2\n {...props}\n className={clsx(\n className,\n 'text-lg/6 font-semibold text-balance text-zinc-950 sm:text-base/6 dark:text-white',\n )}\n />\n )\n}\n\nexport function DialogDescription({\n className,\n ...props\n}: { className?: string } & React.ComponentPropsWithoutRef<typeof Text>) {\n return <Text {...props} className={clsx(className, 'mt-2 text-pretty')} />\n}\n\nexport function DialogBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return <div {...props} className={clsx(className, 'mt-6')} />\n}\n\nexport function DialogActions({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={clsx(\n className,\n 'mt-8 flex flex-col-reverse items-center justify-end gap-3 *:w-full sm:flex-row sm:*:w-auto',\n )}\n />\n )\n}\n","import clsx from 'clsx'\n\nexport function Divider({\n soft = false,\n className,\n ...props\n}: { soft?: boolean } & React.ComponentPropsWithoutRef<'hr'>) {\n return (\n <hr\n {...props}\n className={clsx(\n className,\n 'w-full border-t',\n soft && 'border-zinc-950/5 dark:border-white/5',\n !soft && 'border-zinc-950/10 dark:border-white/10',\n )}\n />\n )\n}\n","import { useCallback, useRef, useState } from 'react'\n\ninterface UseRovingTabindexOptions {\n /** Total number of items in the list */\n itemCount: number\n /** Initial active index (-1 for none) */\n initialIndex?: number\n /** Orientation for arrow key handling */\n orientation?: 'vertical' | 'horizontal'\n /** Whether navigation wraps around */\n loop?: boolean\n /** Callback when active index changes */\n onActiveChange?: (index: number) => void\n}\n\ninterface UseRovingTabindexReturn {\n /** Currently active (focused) item index */\n activeIndex: number\n /** Set the active index programmatically */\n setActiveIndex: (index: number) => void\n /** Props to spread on the container element */\n containerProps: {\n role: string\n onKeyDown: (e: React.KeyboardEvent) => void\n }\n /** Get props for an individual item */\n getItemProps: (index: number) => {\n tabIndex: number\n 'data-focus': string | undefined\n ref: (el: HTMLElement | null) => void\n onPointerEnter: () => void\n onClick: () => void\n }\n}\n\nexport function useRovingTabindex({\n itemCount,\n initialIndex = -1,\n orientation = 'vertical',\n loop = true,\n onActiveChange,\n}: UseRovingTabindexOptions): UseRovingTabindexReturn {\n const [activeIndex, setActiveIndexState] = useState(initialIndex)\n const itemRefs = useRef<Map<number, HTMLElement>>(new Map())\n\n const onActiveChangeRef = useRef(onActiveChange)\n onActiveChangeRef.current = onActiveChange\n\n const setActiveIndex = useCallback((index: number) => {\n setActiveIndexState(index)\n onActiveChangeRef.current?.(index)\n\n // Focus the element\n const el = itemRefs.current.get(index)\n el?.focus()\n }, [])\n\n const moveFocus = useCallback(\n (direction: 1 | -1) => {\n if (itemCount === 0) return\n\n let next = activeIndex + direction\n\n if (loop) {\n if (next < 0) next = itemCount - 1\n else if (next >= itemCount) next = 0\n } else {\n next = Math.max(0, Math.min(itemCount - 1, next))\n }\n\n // Skip disabled items\n const el = itemRefs.current.get(next)\n if (el?.hasAttribute('data-disabled')) {\n // Try next in same direction\n const nextNext = next + direction\n if (nextNext >= 0 && nextNext < itemCount) {\n setActiveIndex(nextNext)\n return\n }\n }\n\n setActiveIndex(next)\n },\n [activeIndex, itemCount, loop, setActiveIndex],\n )\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const prevKey = orientation === 'vertical' ? 'ArrowUp' : 'ArrowLeft'\n const nextKey = orientation === 'vertical' ? 'ArrowDown' : 'ArrowRight'\n\n switch (e.key) {\n case prevKey:\n e.preventDefault()\n moveFocus(-1)\n break\n case nextKey:\n e.preventDefault()\n moveFocus(1)\n break\n case 'Home':\n e.preventDefault()\n setActiveIndex(0)\n break\n case 'End':\n e.preventDefault()\n setActiveIndex(itemCount - 1)\n break\n }\n },\n [moveFocus, setActiveIndex, itemCount, orientation],\n )\n\n const getItemProps = useCallback(\n (index: number) => ({\n tabIndex: index === activeIndex ? 0 : -1,\n 'data-focus': index === activeIndex ? '' : undefined,\n ref: (el: HTMLElement | null) => {\n if (el) {\n itemRefs.current.set(index, el)\n } else {\n itemRefs.current.delete(index)\n }\n },\n onPointerEnter: () => setActiveIndex(index),\n onClick: () => setActiveIndex(index),\n }),\n [activeIndex, setActiveIndex],\n )\n\n return {\n activeIndex,\n setActiveIndex,\n containerProps: {\n role: orientation === 'vertical' ? 'listbox' : 'group',\n onKeyDown,\n },\n getItemProps,\n }\n}\n","import { useCallback, useRef } from 'react'\n\ninterface UseTypeAheadOptions {\n /** Function to get the text content of an item by index */\n getItemText: (index: number) => string\n /** Total number of items */\n itemCount: number\n /** Callback when a match is found */\n onMatch: (index: number) => void\n /** Timeout before search buffer resets (ms) */\n timeout?: number\n}\n\nexport function useTypeAhead({\n getItemText,\n itemCount,\n onMatch,\n timeout = 350,\n}: UseTypeAheadOptions): {\n onKeyDown: (e: React.KeyboardEvent) => void\n} {\n const searchBuffer = useRef('')\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(undefined)\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n // Only handle single character keys (not special keys)\n if (e.key.length !== 1 || e.ctrlKey || e.metaKey || e.altKey) return\n\n // Clear previous timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n\n // Append to search buffer\n searchBuffer.current += e.key.toLowerCase()\n\n // Set timeout to clear buffer\n timeoutRef.current = setTimeout(() => {\n searchBuffer.current = ''\n }, timeout)\n\n // Search for matching item\n const query = searchBuffer.current\n for (let i = 0; i < itemCount; i++) {\n const text = getItemText(i).toLowerCase()\n if (text.startsWith(query)) {\n onMatch(i)\n return\n }\n }\n },\n [getItemText, itemCount, onMatch, timeout],\n )\n\n return { onKeyDown }\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { useClickOutside } from '../hooks/use-click-outside.js'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { useEscapeKey } from '../hooks/use-escape-key.js'\nimport { usePopover } from '../hooks/use-popover.js'\nimport { useRovingTabindex } from '../hooks/use-roving-tabindex.js'\nimport { useTransition } from '../hooks/use-transition.js'\nimport { useTypeAhead } from '../hooks/use-type-ahead.js'\nimport { Button } from './button-headless.js'\nimport { Link } from './link.js'\n\n// ---------------------------------------------------------------------------\n// Dropdown context\n// ---------------------------------------------------------------------------\n\ninterface DropdownContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n close: () => void\n triggerRef: React.RefObject<HTMLElement | null>\n}\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null)\n\nfunction useDropdownContext(): DropdownContextValue {\n const ctx = useContext(DropdownContext)\n if (!ctx) {\n throw new Error('Dropdown compound components must be used within <Dropdown>')\n }\n return ctx\n}\n\n// ---------------------------------------------------------------------------\n// Item context (for roving tabindex coordination)\n// ---------------------------------------------------------------------------\n\ninterface DropdownItemContextValue {\n register: (el: HTMLElement) => number\n unregister: (el: HTMLElement) => void\n getItemProps: (index: number) => {\n tabIndex: number\n 'data-focus': string | undefined\n ref: (el: HTMLElement | null) => void\n onPointerEnter: () => void\n onClick: () => void\n }\n}\n\nconst DropdownItemContext = createContext<DropdownItemContextValue | null>(null)\n\n// ---------------------------------------------------------------------------\n// Dropdown (root)\n// ---------------------------------------------------------------------------\n\nexport function Dropdown({\n children,\n ...props\n}: {\n children: React.ReactNode\n} & Omit<React.ComponentPropsWithoutRef<'div'>, 'children'>) {\n const [open, setOpen] = useState(false)\n const triggerRef = useRef<HTMLElement | null>(null)\n\n const close = useCallback(() => {\n setOpen(false)\n triggerRef.current?.focus()\n }, [])\n\n const value = useMemo(() => ({ open, setOpen, close, triggerRef }), [open, close])\n\n return (\n <DropdownContext.Provider value={value}>\n <div {...props}>{children}</div>\n </DropdownContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// DropdownButton\n// ---------------------------------------------------------------------------\n\nexport function DropdownButton<T extends React.ElementType = typeof Button>({\n as,\n className,\n ...props\n}: {\n as?: T\n className?: string\n} & Omit<React.ComponentPropsWithoutRef<T>, 'className'>) {\n const { open, setOpen, triggerRef } = useDropdownContext()\n const interactiveProps = useDataInteractive()\n\n const Component = (as ?? Button) as React.ElementType\n\n const handleClick = useCallback(() => {\n setOpen(!open)\n }, [open, setOpen])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setOpen(true)\n }\n },\n [setOpen],\n )\n\n return (\n <Component\n ref={triggerRef}\n {...interactiveProps}\n {...props}\n className={className}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// DropdownMenu\n// ---------------------------------------------------------------------------\n\nexport function DropdownMenu({\n anchor = 'bottom',\n className,\n children,\n ...props\n}: {\n anchor?: 'top' | 'top start' | 'top end' | 'bottom' | 'bottom start' | 'bottom end'\n className?: string\n children?: React.ReactNode\n} & Omit<React.ComponentPropsWithoutRef<'div'>, 'className' | 'children'>) {\n const { open, close, triggerRef } = useDropdownContext()\n const { mounted, nodeRef, transitionProps } = useTransition(open)\n const popover = usePopover({\n open,\n anchor,\n gap: 8,\n padding: 4,\n })\n\n // Combined ref for transition nodeRef + popover popoverRef + local ref\n const menuRef = useRef<HTMLDivElement | null>(null)\n const combinedRef = useCallback(\n (el: HTMLDivElement | null) => {\n menuRef.current = el\n ;(popover.popoverRef as React.MutableRefObject<HTMLElement | null>).current = el\n ;(nodeRef as React.MutableRefObject<HTMLElement | null>).current = el\n },\n [popover.popoverRef, nodeRef],\n )\n\n // Point popover's triggerRef at the dropdown's trigger element\n ;(popover.triggerRef as React.MutableRefObject<HTMLElement | null>).current = triggerRef.current\n\n // Close on click outside (exclude trigger + menu)\n useClickOutside([triggerRef, menuRef] as React.RefObject<HTMLElement | null>[], close, open)\n\n // Close on Escape\n useEscapeKey(close, open)\n\n // Track interactive items for roving tabindex\n const itemElements = useRef<HTMLElement[]>([])\n const [itemCount, setItemCount] = useState(0)\n\n const register = useCallback((el: HTMLElement): number => {\n if (!itemElements.current.includes(el)) {\n itemElements.current.push(el)\n setItemCount(itemElements.current.length)\n }\n return itemElements.current.indexOf(el)\n }, [])\n\n const unregister = useCallback((el: HTMLElement): void => {\n const idx = itemElements.current.indexOf(el)\n if (idx !== -1) {\n itemElements.current.splice(idx, 1)\n setItemCount(itemElements.current.length)\n }\n }, [])\n\n const roving = useRovingTabindex({\n itemCount,\n initialIndex: -1,\n orientation: 'vertical',\n loop: true,\n })\n\n const typeAhead = useTypeAhead({\n getItemText: (index) => itemElements.current[index]?.textContent ?? '',\n itemCount,\n onMatch: (index) => roving.setActiveIndex(index),\n })\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n roving.containerProps.onKeyDown(e)\n typeAhead.onKeyDown(e)\n\n // Enter/Space selects the active item\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n const activeEl = itemElements.current[roving.activeIndex]\n if (activeEl) {\n activeEl.click()\n }\n }\n },\n [roving, typeAhead],\n )\n\n const itemContextValue = useMemo<DropdownItemContextValue>(\n () => ({\n register,\n unregister,\n getItemProps: roving.getItemProps,\n }),\n [register, unregister, roving.getItemProps],\n )\n\n if (!mounted) return null\n\n return createPortal(\n <DropdownItemContext.Provider value={itemContextValue}>\n <div\n ref={combinedRef}\n {...transitionProps}\n {...props}\n role=\"menu\"\n aria-orientation=\"vertical\"\n style={popover.popoverProps.style}\n onKeyDown={handleKeyDown}\n className={clsx(\n className,\n // Anchor positioning\n '[--anchor-gap:--spacing(2)] [--anchor-padding:--spacing(1)] data-[anchor~=end]:[--anchor-offset:6px] data-[anchor~=start]:[--anchor-offset:-6px] sm:data-[anchor~=end]:[--anchor-offset:4px] sm:data-[anchor~=start]:[--anchor-offset:-4px]',\n // Base styles\n 'isolate w-max rounded-xl p-1',\n // Invisible border that is only visible in `forced-colors` mode for accessibility purposes\n 'outline outline-transparent focus:outline-hidden',\n // Handle scrolling when menu won't fit in viewport\n 'overflow-y-auto',\n // Popover background\n 'bg-white/75 backdrop-blur-xl dark:bg-zinc-800/75',\n // Shadows\n 'shadow-lg ring-1 ring-zinc-950/10 dark:ring-white/10 dark:ring-inset',\n // Define grid at the menu level if subgrid is supported\n 'supports-[grid-template-columns:subgrid]:grid supports-[grid-template-columns:subgrid]:grid-cols-[auto_1fr_1.5rem_0.5rem_auto]',\n // Transitions\n 'transition data-leave:duration-100 data-leave:ease-in data-closed:data-leave:opacity-0',\n )}\n >\n {children}\n </div>\n </DropdownItemContext.Provider>,\n document.body,\n )\n}\n\n// ---------------------------------------------------------------------------\n// DropdownItem\n// ---------------------------------------------------------------------------\n\nexport function DropdownItem({\n className,\n ...props\n}: { className?: string } & (\n | ({\n href?: never\n disabled?: boolean\n children?: React.ReactNode\n onClick?: React.MouseEventHandler<HTMLButtonElement>\n } & Omit<React.ComponentPropsWithoutRef<'button'>, 'className' | 'type'>)\n | ({\n href: string\n children?: React.ReactNode\n } & Omit<React.ComponentPropsWithoutRef<typeof Link>, 'className'>)\n)) {\n const { close } = useDropdownContext()\n const itemCtx = useContext(DropdownItemContext)\n const interactiveProps = useDataInteractive({\n disabled: 'disabled' in props ? (props.disabled ?? false) : false,\n })\n\n const elRef = useRef<HTMLElement | null>(null)\n const indexRef = useRef(-1)\n\n // Register this item with the roving tabindex system\n const setRef = useCallback(\n (el: HTMLElement | null) => {\n if (el && itemCtx) {\n elRef.current = el\n indexRef.current = itemCtx.register(el)\n } else if (!el && elRef.current && itemCtx) {\n itemCtx.unregister(elRef.current)\n elRef.current = null\n indexRef.current = -1\n }\n },\n [itemCtx],\n )\n\n const rovingProps =\n itemCtx && indexRef.current >= 0\n ? itemCtx.getItemProps(indexRef.current)\n : {\n tabIndex: -1,\n 'data-focus': undefined,\n ref: () => {\n /* no-op */\n },\n onPointerEnter: () => {\n /* no-op */\n },\n onClick: () => {\n /* no-op */\n },\n }\n\n const propsDisabled = 'disabled' in props ? props.disabled : false\n const propsOnClick =\n 'onClick' in props && typeof props.onClick === 'function'\n ? (props.onClick as (e: React.MouseEvent<HTMLElement>) => void)\n : undefined\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n if (propsDisabled) return\n rovingProps.onClick()\n propsOnClick?.(e)\n close()\n },\n [close, propsDisabled, propsOnClick, rovingProps],\n )\n\n const classes = clsx(\n className,\n // Base styles\n 'group cursor-default rounded-lg px-3.5 py-2.5 focus:outline-hidden sm:px-3 sm:py-1.5',\n // Text styles\n 'text-left text-base/6 text-zinc-950 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',\n // Focus\n 'data-focus:bg-blue-500 data-focus:text-white',\n // Disabled state\n 'data-disabled:opacity-50',\n // Forced colors mode\n 'forced-color-adjust-none forced-colors:data-focus:bg-[Highlight] forced-colors:data-focus:text-[HighlightText] forced-colors:data-focus:*:data-[slot=icon]:text-[HighlightText]',\n // Use subgrid when available but fallback to an explicit grid layout if not\n 'col-span-full grid grid-cols-[auto_1fr_1.5rem_0.5rem_auto] items-center supports-[grid-template-columns:subgrid]:grid-cols-subgrid',\n // Icons\n '*:data-[slot=icon]:col-start-1 *:data-[slot=icon]:row-start-1 *:data-[slot=icon]:mr-2.5 *:data-[slot=icon]:-ml-0.5 *:data-[slot=icon]:size-5 sm:*:data-[slot=icon]:mr-2 sm:*:data-[slot=icon]:size-4',\n '*:data-[slot=icon]:text-zinc-500 data-focus:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400 dark:data-focus:*:data-[slot=icon]:text-white',\n // Avatar\n '*:data-[slot=avatar]:mr-2.5 *:data-[slot=avatar]:-ml-1 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:mr-2 sm:*:data-[slot=avatar]:size-5',\n )\n\n if (typeof props.href === 'string') {\n const { href, children, ...linkProps } = props as {\n href: string\n children?: React.ReactNode\n } & React.ComponentPropsWithoutRef<typeof Link>\n\n return (\n <Link\n ref={setRef as React.Ref<HTMLAnchorElement>}\n role=\"menuitem\"\n href={href}\n {...linkProps}\n {...interactiveProps}\n tabIndex={rovingProps.tabIndex}\n data-focus={rovingProps['data-focus']}\n onPointerEnter={rovingProps.onPointerEnter}\n onClick={handleClick as React.MouseEventHandler<HTMLAnchorElement>}\n className={classes}\n >\n {children}\n </Link>\n )\n }\n\n const {\n disabled,\n children,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onClick: _onClick,\n ...buttonProps\n } = props as {\n disabled?: boolean\n children?: React.ReactNode\n onClick?: React.MouseEventHandler<HTMLButtonElement>\n } & Omit<React.ComponentPropsWithoutRef<'button'>, 'className' | 'type'>\n\n return (\n <button\n ref={setRef as React.Ref<HTMLButtonElement>}\n role=\"menuitem\"\n type=\"button\"\n disabled={disabled}\n {...buttonProps}\n {...interactiveProps}\n tabIndex={rovingProps.tabIndex}\n data-focus={rovingProps['data-focus']}\n onPointerEnter={rovingProps.onPointerEnter}\n onClick={handleClick as React.MouseEventHandler<HTMLButtonElement>}\n className={classes}\n >\n {children}\n </button>\n )\n}\n\n// ---------------------------------------------------------------------------\n// DropdownHeader\n// ---------------------------------------------------------------------------\n\nexport function DropdownHeader({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return <div {...props} className={clsx(className, 'col-span-5 px-3.5 pt-2.5 pb-1 sm:px-3')} />\n}\n\n// ---------------------------------------------------------------------------\n// DropdownSection\n// ---------------------------------------------------------------------------\n\nexport function DropdownSection({\n className,\n ...props\n}: {\n className?: string\n} & Omit<React.ComponentPropsWithoutRef<'div'>, 'className'>) {\n return (\n <div\n role=\"group\"\n {...props}\n className={clsx(\n className,\n // Define grid at the section level instead of the item level if subgrid is supported\n 'col-span-full supports-[grid-template-columns:subgrid]:grid supports-[grid-template-columns:subgrid]:grid-cols-[auto_1fr_1.5rem_0.5rem_auto]',\n )}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// DropdownHeading\n// ---------------------------------------------------------------------------\n\nexport function DropdownHeading({\n className,\n ...props\n}: {\n className?: string\n} & Omit<React.ComponentPropsWithoutRef<'div'>, 'className'>) {\n return (\n <div\n role=\"presentation\"\n {...props}\n className={clsx(\n className,\n 'col-span-full grid grid-cols-[1fr_auto] gap-x-12 px-3.5 pt-2 pb-1 text-sm/5 font-medium text-zinc-500 sm:px-3 sm:text-xs/5 dark:text-zinc-400',\n )}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// DropdownDivider\n// ---------------------------------------------------------------------------\n\nexport function DropdownDivider({\n className,\n ...props\n}: {\n className?: string\n} & Omit<React.ComponentPropsWithoutRef<'hr'>, 'className'>) {\n return (\n <hr\n {...props}\n className={clsx(\n className,\n 'col-span-full mx-3.5 my-1 h-px border-0 bg-zinc-950/5 sm:mx-3 dark:bg-white/10 forced-colors:bg-[CanvasText]',\n )}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// DropdownLabel\n// ---------------------------------------------------------------------------\n\nexport function DropdownLabel({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return <div {...props} data-slot=\"label\" className={clsx(className, 'col-start-2 row-start-1')} />\n}\n\n// ---------------------------------------------------------------------------\n// DropdownDescription\n// ---------------------------------------------------------------------------\n\nexport function DropdownDescription({\n className,\n ...props\n}: {\n className?: string\n} & Omit<React.ComponentPropsWithoutRef<'span'>, 'className'>) {\n return (\n <span\n data-slot=\"description\"\n {...props}\n className={clsx(\n className,\n 'col-span-2 col-start-2 row-start-2 text-sm/5 text-zinc-500 group-data-focus:text-white sm:text-xs/5 dark:text-zinc-400 forced-colors:group-data-focus:text-[HighlightText]',\n )}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// DropdownShortcut\n// ---------------------------------------------------------------------------\n\nexport function DropdownShortcut({\n keys,\n className,\n ...props\n}: {\n keys: string | string[]\n className?: string\n} & Omit<React.ComponentPropsWithoutRef<'kbd'>, 'className' | 'children'>) {\n return (\n <kbd {...props} className={clsx(className, 'col-start-5 row-start-1 flex justify-self-end')}>\n {(Array.isArray(keys) ? keys : keys.split('')).map((char, index) => {\n return (\n <kbd\n // biome-ignore lint/suspicious/noArrayIndexKey: key chars may repeat (e.g. \"Ctrl+Ctrl\"); index used to disambiguate\n key={`${char}-${index}`}\n className={clsx([\n 'min-w-[2ch] text-center font-sans text-zinc-400 capitalize group-data-focus:text-white forced-colors:group-data-focus:text-[HighlightText]',\n // Make sure key names that are longer than one character (like \"Tab\") have extra space\n index > 0 && char.length > 1 && 'pl-1',\n ])}\n >\n {char}\n </kbd>\n )\n })}\n </kbd>\n )\n}\n","import clsx from 'clsx'\nimport type React from 'react'\nimport {\n FieldProvider,\n useFieldDescriptionProps,\n useFieldErrorProps,\n useFieldLabelProps,\n} from '../hooks/use-field-context.js'\n\nexport function Fieldset({\n className,\n disabled,\n ...props\n}: { className?: string; disabled?: boolean } & Omit<\n React.ComponentPropsWithoutRef<'fieldset'>,\n 'className'\n>) {\n return (\n <fieldset\n disabled={disabled}\n {...props}\n className={clsx(className, '*:data-[slot=text]:mt-1 [&>*+[data-slot=control]]:mt-6')}\n />\n )\n}\n\nexport function Legend({\n className,\n ...props\n}: { className?: string } & Omit<React.ComponentPropsWithoutRef<'legend'>, 'className'>) {\n return (\n <legend\n data-slot=\"legend\"\n {...props}\n className={clsx(\n className,\n 'text-base/6 font-semibold text-zinc-950 data-disabled:opacity-50 sm:text-sm/6 dark:text-white',\n )}\n />\n )\n}\n\nexport function FieldGroup({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return <div data-slot=\"control\" {...props} className={clsx(className, 'space-y-8')} />\n}\n\nexport function Field({\n className,\n disabled,\n ...props\n}: {\n className?: string\n disabled?: boolean\n} & Omit<React.ComponentPropsWithoutRef<'div'>, 'className'>) {\n return (\n <FieldProvider disabled={disabled}>\n <div\n {...props}\n data-disabled={disabled ? '' : undefined}\n className={clsx(\n className,\n '[&>[data-slot=label]+[data-slot=control]]:mt-3',\n '[&>[data-slot=label]+[data-slot=description]]:mt-1',\n '[&>[data-slot=description]+[data-slot=control]]:mt-3',\n '[&>[data-slot=control]+[data-slot=description]]:mt-3',\n '[&>[data-slot=control]+[data-slot=error]]:mt-3',\n '*:data-[slot=label]:font-medium',\n )}\n />\n </FieldProvider>\n )\n}\n\nexport function Label({\n className,\n ...props\n}: { className?: string } & Omit<React.ComponentPropsWithoutRef<'label'>, 'className'>) {\n const fieldLabelProps = useFieldLabelProps()\n\n return (\n // biome-ignore lint/a11y/noLabelWithoutControl: htmlFor provided via useFieldLabelProps hook\n <label\n data-slot=\"label\"\n {...fieldLabelProps}\n {...props}\n className={clsx(\n className,\n 'text-base/6 text-zinc-950 select-none data-disabled:opacity-50 sm:text-sm/6 dark:text-white',\n )}\n />\n )\n}\n\nexport function Description({\n className,\n ...props\n}: { className?: string } & Omit<React.ComponentPropsWithoutRef<'p'>, 'className'>) {\n const fieldDescriptionProps = useFieldDescriptionProps()\n\n return (\n <p\n data-slot=\"description\"\n {...fieldDescriptionProps}\n {...props}\n className={clsx(\n className,\n 'text-base/6 text-zinc-500 data-disabled:opacity-50 sm:text-sm/6 dark:text-zinc-400',\n )}\n />\n )\n}\n\nexport function ErrorMessage({\n className,\n ...props\n}: { className?: string } & Omit<React.ComponentPropsWithoutRef<'p'>, 'className'>) {\n const fieldErrorProps = useFieldErrorProps()\n\n return (\n <p\n data-slot=\"error\"\n {...fieldErrorProps}\n {...props}\n className={clsx(\n className,\n 'text-base/6 text-red-600 data-disabled:opacity-50 sm:text-sm/6 dark:text-red-500',\n )}\n />\n )\n}\n","import clsx from 'clsx'\n\ntype HeadingProps = {\n level?: 1 | 2 | 3 | 4 | 5 | 6\n} & React.ComponentPropsWithoutRef<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'>\n\nexport function Heading({ className, level = 1, ...props }: HeadingProps) {\n const Element: `h${typeof level}` = `h${level}`\n\n return (\n <Element\n {...props}\n className={clsx(\n className,\n 'text-2xl/8 font-semibold text-zinc-950 sm:text-xl/8 dark:text-white',\n )}\n />\n )\n}\n\nexport function Subheading({ className, level = 2, ...props }: HeadingProps) {\n const Element: `h${typeof level}` = `h${level}`\n\n return (\n <Element\n {...props}\n className={clsx(\n className,\n 'text-base/7 font-semibold text-zinc-950 sm:text-sm/6 dark:text-white',\n )}\n />\n )\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport {\n Children,\n createContext,\n isValidElement,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { useClickOutside } from '../hooks/use-click-outside.js'\nimport { useControllableState } from '../hooks/use-controllable-state.js'\nimport { useEscapeKey } from '../hooks/use-escape-key.js'\nimport { usePopover } from '../hooks/use-popover.js'\nimport { useTransition } from '../hooks/use-transition.js'\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\ninterface ListboxContextValue<T = unknown> {\n value: T\n setValue: (v: T) => void\n open: boolean\n setOpen: (open: boolean) => void\n disabled: boolean\n activeIndex: number\n setActiveIndex: (index: number) => void\n registerOption: (index: number, value: T, el: HTMLElement | null) => void\n optionCount: number\n buttonId: string\n listId: string\n}\n\nconst ListboxContext = createContext<ListboxContextValue | null>(null)\n\nfunction useListboxContext(): ListboxContextValue {\n const ctx = useContext(ListboxContext)\n if (!ctx) {\n throw new Error('Listbox compound components must be used within <Listbox>')\n }\n return ctx\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction countOptions(children: ReactNode): number {\n let count = 0\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return\n if ((child.type as unknown) === ListboxOption) {\n count++\n }\n })\n return count\n}\n\n// ---------------------------------------------------------------------------\n// OptionIndexProvider\n// ---------------------------------------------------------------------------\n\nconst OptionIndexContext = createContext<number>(-1)\n\nfunction OptionIndexProvider({ children }: { children: ReactNode }) {\n let index = 0\n return (\n <>\n {Children.map(children, (child) => {\n if (!isValidElement(child)) return child\n if ((child.type as unknown) === ListboxOption) {\n const currentIndex = index++\n return (\n <OptionIndexContext.Provider value={currentIndex}>{child}</OptionIndexContext.Provider>\n )\n }\n return child\n })}\n </>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Listbox (root)\n// ---------------------------------------------------------------------------\n\nexport function Listbox<T>({\n className,\n placeholder,\n autoFocus,\n 'aria-label': ariaLabel,\n children: options,\n value: controlledValue,\n defaultValue,\n onChange,\n disabled = false,\n name,\n}: {\n className?: string\n placeholder?: React.ReactNode\n autoFocus?: boolean\n 'aria-label'?: string\n children?: ReactNode\n value?: T\n defaultValue?: T\n onChange?: (value: T) => void\n disabled?: boolean\n name?: string\n}) {\n const [value, setValue] = useControllableState<T>({\n value: controlledValue,\n defaultValue: defaultValue as T,\n onChange,\n })\n\n const [open, setOpen] = useState(false)\n const [activeIndex, setActiveIndex] = useState(-1)\n const [optionCount, setOptionCount] = useState(0)\n\n const buttonId = useId()\n const listId = useId()\n\n const optionMapRef = useRef<Map<number, { value: T; element: HTMLElement | null }>>(new Map())\n\n const registerOption = useCallback((index: number, optValue: T, element: HTMLElement | null) => {\n optionMapRef.current.set(index, { value: optValue, element })\n }, [])\n\n useEffect(() => {\n setOptionCount(countOptions(options))\n }, [options])\n\n const { triggerRef, popoverRef, popoverProps } = usePopover({\n open,\n anchor: 'selection start',\n gap: 0,\n padding: 16,\n })\n\n const { mounted, nodeRef, transitionProps } = useTransition(open)\n\n useClickOutside([triggerRef, popoverRef], () => setOpen(false), open)\n\n useEscapeKey(() => {\n setOpen(false)\n triggerRef.current?.focus()\n }, open)\n\n const selectActiveOption = useCallback(() => {\n const entry = optionMapRef.current.get(activeIndex)\n if (entry) {\n setValue(entry.value)\n setOpen(false)\n triggerRef.current?.focus()\n }\n }, [activeIndex, setValue, triggerRef])\n\n const handleOptionsKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n setActiveIndex((prev) => {\n const next = prev + 1\n return next >= optionCount ? 0 : next\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setActiveIndex((prev) => {\n const next = prev - 1\n return next < 0 ? optionCount - 1 : next\n })\n break\n }\n case 'Home': {\n e.preventDefault()\n setActiveIndex(0)\n break\n }\n case 'End': {\n e.preventDefault()\n setActiveIndex(optionCount - 1)\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n selectActiveOption()\n break\n }\n }\n },\n [optionCount, selectActiveOption],\n )\n\n useEffect(() => {\n if (!open || activeIndex < 0) return\n const entry = optionMapRef.current.get(activeIndex)\n entry?.element?.scrollIntoView({ block: 'nearest' })\n }, [activeIndex, open])\n\n useEffect(() => {\n if (open) {\n let selectedIdx = -1\n for (const [idx, entry] of optionMapRef.current.entries()) {\n if (entry.value === value) {\n selectedIdx = idx\n break\n }\n }\n setActiveIndex(selectedIdx >= 0 ? selectedIdx : 0)\n }\n }, [open, value])\n\n useEffect(() => {\n if (mounted && popoverRef.current) {\n popoverRef.current.focus({ preventScroll: true })\n }\n }, [mounted, popoverRef])\n\n const selectedContent = useMemo(() => {\n let matched: ReactNode = null\n Children.forEach(options, (child) => {\n if (!isValidElement(child)) return\n if (\n (child.type as unknown) === ListboxOption &&\n (child.props as { value?: unknown }).value === value\n ) {\n matched = (child.props as { children?: ReactNode }).children\n }\n })\n return matched\n }, [options, value])\n\n const ctx = useMemo<ListboxContextValue<T>>(\n () => ({\n value: value,\n setValue: setValue as (v: unknown) => void,\n open,\n setOpen,\n disabled,\n activeIndex,\n setActiveIndex,\n registerOption: registerOption as (\n index: number,\n value: unknown,\n el: HTMLElement | null,\n ) => void,\n optionCount,\n buttonId,\n listId,\n }),\n [value, setValue, open, disabled, activeIndex, registerOption, optionCount, buttonId, listId],\n )\n\n const handleButtonClick = useCallback(() => {\n if (!disabled) {\n setOpen((prev) => !prev)\n }\n }, [disabled])\n\n const handleButtonKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setOpen(true)\n }\n },\n [disabled],\n )\n\n const selectedSharedClasses = clsx(\n 'flex min-w-0 items-center',\n '*:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 sm:*:data-[slot=icon]:size-4',\n '*:data-[slot=icon]:text-zinc-500 group-data-focus/option:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400',\n 'forced-colors:*:data-[slot=icon]:text-[CanvasText] forced-colors:group-data-focus/option:*:data-[slot=icon]:text-[Canvas]',\n '*:data-[slot=avatar]:-mx-0.5 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:size-5',\n )\n\n const displayContent =\n selectedContent != null ? (\n <span className={selectedSharedClasses}>{selectedContent}</span>\n ) : placeholder ? (\n <span className=\"block truncate text-zinc-500\">{placeholder}</span>\n ) : null\n\n return (\n <ListboxContext.Provider value={ctx as ListboxContextValue}>\n {name && <input type=\"hidden\" name={name} value={String(value ?? '')} />}\n\n <button\n ref={triggerRef as React.RefObject<HTMLButtonElement>}\n id={buttonId}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listId : undefined}\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n data-slot=\"control\"\n data-disabled={disabled ? '' : undefined}\n data-active={open ? '' : undefined}\n autoFocus={autoFocus}\n disabled={disabled}\n onClick={handleButtonClick}\n onKeyDown={handleButtonKeyDown}\n className={clsx([\n className,\n 'group relative block w-full',\n 'before:absolute before:inset-px before:rounded-[calc(var(--radius-lg)-1px)] before:bg-white before:shadow-sm',\n 'dark:before:hidden',\n 'focus:outline-hidden',\n 'after:pointer-events-none after:absolute after:inset-0 after:rounded-lg after:ring-transparent after:ring-inset data-focus:after:ring-2 data-focus:after:ring-blue-500',\n 'data-disabled:opacity-50 data-disabled:before:bg-zinc-950/5 data-disabled:before:shadow-none',\n ])}\n >\n <span\n className={clsx([\n 'relative block w-full appearance-none rounded-lg py-[calc(--spacing(2.5)-1px)] sm:py-[calc(--spacing(1.5)-1px)]',\n 'min-h-11 sm:min-h-9',\n 'pr-[calc(--spacing(7)-1px)] pl-[calc(--spacing(3.5)-1px)] sm:pl-[calc(--spacing(3)-1px)]',\n 'text-left text-base/6 text-zinc-950 placeholder:text-zinc-500 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',\n 'border border-zinc-950/10 group-data-active:border-zinc-950/20 group-data-hover:border-zinc-950/20 dark:border-white/10 dark:group-data-active:border-white/20 dark:group-data-hover:border-white/20',\n 'bg-transparent dark:bg-white/5',\n 'group-data-invalid:border-red-500 group-data-hover:group-data-invalid:border-red-500 dark:group-data-invalid:border-red-600 dark:data-hover:group-data-invalid:border-red-600',\n 'group-data-disabled:border-zinc-950/20 group-data-disabled:opacity-100 dark:group-data-disabled:border-white/15 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:data-hover:border-white/15',\n ])}\n >\n {displayContent}\n </span>\n <span className=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <svg\n className=\"size-5 stroke-zinc-500 group-data-disabled:stroke-zinc-600 sm:size-4 dark:stroke-zinc-400 forced-colors:stroke-[CanvasText]\"\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\"\n fill=\"none\"\n >\n <path\n d=\"M5.75 10.75L8 13L10.25 10.75\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M10.25 5.25L8 3L5.75 5.25\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n\n {mounted &&\n createPortal(\n <div\n ref={(node) => {\n ;(popoverRef as React.MutableRefObject<HTMLElement | null>).current = node\n ;(nodeRef as React.MutableRefObject<HTMLElement | null>).current = node\n }}\n {...popoverProps}\n {...transitionProps}\n id={listId}\n role=\"listbox\"\n aria-labelledby={buttonId}\n tabIndex={-1}\n onKeyDown={handleOptionsKeyDown}\n className={clsx(\n '[--anchor-offset:-1.625rem] [--anchor-padding:--spacing(4)] sm:[--anchor-offset:-1.375rem]',\n 'isolate w-max min-w-[calc(var(--button-width)+1.75rem)] scroll-py-1 rounded-xl p-1 select-none',\n 'outline outline-transparent focus:outline-hidden',\n 'overflow-y-scroll overscroll-contain',\n 'bg-white/75 backdrop-blur-xl dark:bg-zinc-800/75',\n 'shadow-lg ring-1 ring-zinc-950/10 dark:ring-white/10 dark:ring-inset',\n 'transition-opacity duration-100 ease-in data-closed:data-leave:opacity-0 data-transition:pointer-events-none',\n )}\n style={{\n ...popoverProps.style,\n minWidth: triggerRef.current\n ? `${triggerRef.current.getBoundingClientRect().width + 28}px`\n : undefined,\n }}\n >\n <OptionIndexProvider>{options}</OptionIndexProvider>\n </div>,\n document.body,\n )}\n </ListboxContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ListboxOption\n// ---------------------------------------------------------------------------\n\nexport function ListboxOption<T>({\n children,\n className,\n value: optionValue,\n disabled: optionDisabled = false,\n}: {\n className?: string\n children?: ReactNode\n value: T\n disabled?: boolean\n}) {\n const ctx = useListboxContext()\n const index = useContext(OptionIndexContext)\n const optionRef = useRef<HTMLDivElement>(null)\n\n const isSelected = ctx.value === optionValue\n const isFocused = ctx.activeIndex === index\n\n useEffect(() => {\n ctx.registerOption(index, optionValue, optionRef.current)\n }, [index, optionValue, ctx.registerOption, ctx])\n\n const sharedClasses = clsx(\n 'flex min-w-0 items-center',\n '*:data-[slot=icon]:size-5 *:data-[slot=icon]:shrink-0 sm:*:data-[slot=icon]:size-4',\n '*:data-[slot=icon]:text-zinc-500 group-data-focus/option:*:data-[slot=icon]:text-white dark:*:data-[slot=icon]:text-zinc-400',\n 'forced-colors:*:data-[slot=icon]:text-[CanvasText] forced-colors:group-data-focus/option:*:data-[slot=icon]:text-[Canvas]',\n '*:data-[slot=avatar]:-mx-0.5 *:data-[slot=avatar]:size-6 sm:*:data-[slot=avatar]:size-5',\n )\n\n const handleClick = useCallback(() => {\n if (optionDisabled) return\n ctx.setValue(optionValue)\n ctx.setOpen(false)\n }, [optionDisabled, ctx.setValue, ctx.setOpen, optionValue, ctx])\n\n const handlePointerEnter = useCallback(() => {\n if (!optionDisabled) {\n ctx.setActiveIndex(index)\n }\n }, [optionDisabled, ctx.setActiveIndex, index, ctx])\n\n return (\n <div\n ref={optionRef}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={optionDisabled || undefined}\n data-selected={isSelected ? '' : undefined}\n data-focus={isFocused ? '' : undefined}\n data-disabled={optionDisabled ? '' : undefined}\n onClick={handleClick}\n onPointerEnter={handlePointerEnter}\n tabIndex={-1}\n className={clsx(\n 'group/option grid cursor-default grid-cols-[--spacing(5)_1fr] items-baseline gap-x-2 rounded-lg py-2.5 pr-3.5 pl-2 sm:grid-cols-[--spacing(4)_1fr] sm:py-1.5 sm:pr-3 sm:pl-1.5',\n 'text-base/6 text-zinc-950 sm:text-sm/6 dark:text-white forced-colors:text-[CanvasText]',\n 'outline-hidden data-focus:bg-blue-500 data-focus:text-white',\n 'forced-color-adjust-none forced-colors:data-focus:bg-[Highlight] forced-colors:data-focus:text-[HighlightText]',\n 'data-disabled:opacity-50',\n )}\n >\n <svg\n className=\"relative hidden size-5 self-center stroke-current group-data-selected/option:inline sm:size-4\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path d=\"M4 8.5l3 3L12 4\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n <span className={clsx(className, sharedClasses, 'col-start-2')}>{children}</span>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ListboxLabel\n// ---------------------------------------------------------------------------\n\nexport function ListboxLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {\n return (\n <span\n {...props}\n className={clsx(className, 'ml-2.5 truncate first:ml-0 sm:ml-2 sm:first:ml-0')}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// ListboxDescription\n// ---------------------------------------------------------------------------\n\nexport function ListboxDescription({\n className,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<'span'>) {\n return (\n <span\n {...props}\n className={clsx(\n className,\n 'flex flex-1 overflow-hidden text-zinc-500 group-data-focus/option:text-white before:w-2 before:min-w-0 before:shrink dark:text-zinc-400',\n )}\n >\n <span className=\"flex-1 truncate\">{children}</span>\n </span>\n )\n}\n","'use client'\n\n/**\n * Layout Animation Hook (FLIP Technique)\n *\n * Replaces motion/react's LayoutGroup + motion.span + layoutId pattern\n * with a native implementation using Web Animations API.\n *\n * The FLIP (First, Last, Invert, Play) technique:\n * 1. Record the element's position before it unmounts (First)\n * 2. Mount the new element and record its position (Last)\n * 3. Calculate the delta between positions (Invert)\n * 4. Animate from old position to new position (Play)\n *\n * @example\n * ```tsx\n * function NavSection({ children }) {\n * return <LayoutGroup>{children}</LayoutGroup>\n * }\n *\n * function NavItem({ current }) {\n * return (\n * <span>\n * {current && <LayoutIndicator layoutId=\"indicator\" className=\"...\" />}\n * ...\n * </span>\n * )\n * }\n * ```\n */\n\nimport {\n createContext,\n type ReactNode,\n type RefObject,\n useContext,\n useLayoutEffect,\n useRef,\n} from 'react'\n\n// ============================================\n// CONTEXT\n// ============================================\n\nconst LayoutGroupContext = createContext<RefObject<Map<string, DOMRect>> | null>(null)\n\n// ============================================\n// LAYOUT GROUP\n// ============================================\n\ninterface LayoutGroupProps {\n /** Unique identifier for scoping (optional, context-scoped by default) */\n id?: string\n children: ReactNode\n}\n\n/**\n * Scopes layout animations to a group.\n * Elements with the same `layoutId` within a group share position data.\n */\nexport function LayoutGroup({ children }: LayoutGroupProps): ReactNode {\n const rectsRef = useRef(new Map<string, DOMRect>())\n return <LayoutGroupContext value={rectsRef}>{children}</LayoutGroupContext>\n}\n\n// ============================================\n// HOOK\n// ============================================\n\n/** Spring-like easing approximation (matches motion's default layout spring) */\nconst LAYOUT_EASING = 'cubic-bezier(0.25, 0.8, 0.25, 1)'\nconst LAYOUT_DURATION = 350\n\n/**\n * Hook that implements FLIP layout animation for an element.\n *\n * When an element with the same `layoutId` unmounts from one position\n * and mounts in another, this hook animates the transition smoothly.\n *\n * @param layoutId - Shared identifier linking old and new positions\n * @returns Ref to attach to the animated element\n */\nexport function useLayoutAnimation(layoutId: string): RefObject<HTMLElement | null> {\n const ref = useRef<HTMLElement | null>(null)\n const rectsCtx = useContext(LayoutGroupContext)\n\n useLayoutEffect(() => {\n const el = ref.current\n const rects = rectsCtx?.current\n if (!(el && rects)) return\n\n const prevRect = rects.get(layoutId)\n const currentRect = el.getBoundingClientRect()\n\n // Save current position for next animation\n rects.set(layoutId, currentRect)\n\n // If we have a previous position, animate from old to new\n if (prevRect) {\n const deltaX = prevRect.left - currentRect.left\n const deltaY = prevRect.top - currentRect.top\n\n // Only animate if there's actual movement\n if (Math.abs(deltaX) > 0.5 || Math.abs(deltaY) > 0.5) {\n el.animate(\n [{ transform: `translate(${deltaX}px, ${deltaY}px)` }, { transform: 'translate(0, 0)' }],\n {\n duration: LAYOUT_DURATION,\n easing: LAYOUT_EASING,\n fill: 'none',\n },\n )\n }\n }\n\n return () => {\n // Save position before unmount so the next element can animate from here\n if (el) {\n rects.set(layoutId, el.getBoundingClientRect())\n }\n }\n })\n\n return ref\n}\n\n// ============================================\n// COMPONENT\n// ============================================\n\ninterface LayoutIndicatorProps extends React.ComponentPropsWithoutRef<'span'> {\n /** Shared identifier for FLIP animation */\n layoutId: string\n}\n\n/**\n * Animated indicator span that smoothly transitions between positions.\n * Drop-in replacement for `<motion.span layoutId=\"...\">`.\n */\nexport function LayoutIndicator({ layoutId, ...props }: LayoutIndicatorProps): ReactNode {\n const ref = useLayoutAnimation(layoutId)\n return <span ref={ref as RefObject<HTMLSpanElement>} {...props} />\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { forwardRef, useId } from 'react'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { LayoutGroup, LayoutIndicator } from '../hooks/use-layout-animation.js'\nimport { TouchTarget } from './button-headless.js'\nimport { Link } from './link.js'\n\nexport function Navbar({ className, ...props }: React.ComponentPropsWithoutRef<'nav'>) {\n return <nav {...props} className={clsx(className, 'flex flex-1 items-center gap-4 py-2.5')} />\n}\n\nexport function NavbarDivider({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n aria-hidden=\"true\"\n {...props}\n className={clsx(className, 'h-6 w-px bg-zinc-950/10 dark:bg-white/10')}\n />\n )\n}\n\nexport function NavbarSection({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n const id = useId()\n\n return (\n <LayoutGroup id={id}>\n <div {...props} className={clsx(className, 'flex items-center gap-3')} />\n </LayoutGroup>\n )\n}\n\nexport function NavbarSpacer({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return <div aria-hidden=\"true\" {...props} className={clsx(className, '-ml-4 flex-1')} />\n}\n\nexport const NavbarItem = forwardRef(function NavbarItem(\n {\n current,\n className,\n children,\n ...props\n }: { current?: boolean; className?: string; children: React.ReactNode } & (\n | ({\n href?: never\n disabled?: boolean\n } & Omit<React.ComponentPropsWithoutRef<'button'>, 'className'>)\n | ({ href: string } & Omit<React.ComponentPropsWithoutRef<typeof Link>, 'className'>)\n ),\n ref: React.ForwardedRef<HTMLAnchorElement | HTMLButtonElement>,\n) {\n const disabled = 'disabled' in props ? props.disabled : false\n const interactiveProps = useDataInteractive({ disabled: disabled ?? false })\n\n const classes = clsx(\n // Base\n 'relative flex min-w-0 items-center gap-3 rounded-lg p-2 text-left text-base/6 font-medium text-zinc-950 sm:text-sm/5',\n // Leading icon/icon-only\n '*:data-[slot=icon]:size-6 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:fill-zinc-500 sm:*:data-[slot=icon]:size-5',\n // Trailing icon (down chevron or similar)\n '*:not-nth-2:last:data-[slot=icon]:ml-auto *:not-nth-2:last:data-[slot=icon]:size-5 sm:*:not-nth-2:last:data-[slot=icon]:size-4',\n // Avatar\n '*:data-[slot=avatar]:-m-0.5 *:data-[slot=avatar]:size-7 *:data-[slot=avatar]:[--avatar-radius:var(--radius-md)] sm:*:data-[slot=avatar]:size-6',\n // Hover\n 'data-hover:bg-zinc-950/5 data-hover:*:data-[slot=icon]:fill-zinc-950',\n // Active\n 'data-active:bg-zinc-950/5 data-active:*:data-[slot=icon]:fill-zinc-950',\n // Dark mode\n 'dark:text-white dark:*:data-[slot=icon]:fill-zinc-400',\n 'dark:data-hover:bg-white/5 dark:data-hover:*:data-[slot=icon]:fill-white',\n 'dark:data-active:bg-white/5 dark:data-active:*:data-[slot=icon]:fill-white',\n )\n\n return (\n <span className={clsx(className, 'relative')}>\n {current && (\n <LayoutIndicator\n layoutId=\"current-indicator\"\n className=\"absolute inset-x-2 -bottom-2.5 h-0.5 rounded-full bg-zinc-950 dark:bg-white\"\n />\n )}\n {typeof props.href === 'string' ? (\n <Link\n {...props}\n className={classes}\n data-current={current ? 'true' : undefined}\n ref={ref as React.ForwardedRef<HTMLAnchorElement>}\n >\n <TouchTarget>{children}</TouchTarget>\n </Link>\n ) : (\n <button\n type=\"button\"\n {...props}\n {...interactiveProps}\n className={clsx('cursor-default', classes)}\n data-current={current ? 'true' : undefined}\n ref={ref as React.ForwardedRef<HTMLButtonElement>}\n >\n <TouchTarget>{children}</TouchTarget>\n </button>\n )}\n </span>\n )\n})\n\nexport function NavbarLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {\n return <span {...props} className={clsx(className, 'truncate')} />\n}\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { createContext, useCallback, useContext } from 'react'\nimport { useControllableState } from '../hooks/use-controllable-state.js'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { FieldProvider } from '../hooks/use-field-context.js'\n\n// --- RadioGroup Context ---\ninterface RadioGroupContextValue {\n value: string | undefined\n onChange: (value: string) => void\n disabled: boolean\n name?: string\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null)\n\nfunction useRadioGroupContext() {\n const ctx = useContext(RadioGroupContext)\n if (!ctx) throw new Error('Radio must be used within a RadioGroup')\n return ctx\n}\n\n// --- RadioGroup ---\nexport function RadioGroup({\n className,\n value: controlledValue,\n defaultValue,\n onChange,\n disabled = false,\n name,\n children,\n ...props\n}: {\n className?: string\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n disabled?: boolean\n name?: string\n children: React.ReactNode\n} & Omit<React.ComponentPropsWithoutRef<'div'>, 'className' | 'onChange'>) {\n const [value, setValue] = useControllableState({\n value: controlledValue,\n defaultValue: defaultValue ?? '',\n onChange,\n })\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const radios = Array.from(\n e.currentTarget.querySelectorAll<HTMLElement>('[role=\"radio\"]:not([data-disabled])'),\n )\n if (radios.length === 0) return\n\n const currentIndex = radios.indexOf(document.activeElement as HTMLElement)\n let nextIndex = currentIndex\n\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n e.preventDefault()\n nextIndex = currentIndex + 1 >= radios.length ? 0 : currentIndex + 1\n break\n case 'ArrowUp':\n case 'ArrowLeft':\n e.preventDefault()\n nextIndex = currentIndex - 1 < 0 ? radios.length - 1 : currentIndex - 1\n break\n case 'Home':\n e.preventDefault()\n nextIndex = 0\n break\n case 'End':\n e.preventDefault()\n nextIndex = radios.length - 1\n break\n default:\n return\n }\n\n const nextRadio = radios[nextIndex]\n if (!nextRadio) return\n nextRadio.focus()\n const radioValue = nextRadio.getAttribute('data-value')\n if (radioValue != null) {\n setValue(radioValue)\n }\n },\n [setValue],\n )\n\n return (\n <RadioGroupContext value={{ value, onChange: setValue, disabled, name }}>\n <div\n role=\"radiogroup\"\n data-slot=\"control\"\n onKeyDown={handleKeyDown}\n {...props}\n className={clsx(\n className,\n // Basic groups\n 'space-y-3 **:data-[slot=label]:font-normal',\n // With descriptions\n 'has-data-[slot=description]:space-y-6 has-data-[slot=description]:**:data-[slot=label]:font-medium',\n )}\n >\n {children}\n </div>\n </RadioGroupContext>\n )\n}\n\n// --- RadioField ---\nexport function RadioField({\n className,\n disabled,\n ...props\n}: {\n className?: string\n disabled?: boolean\n} & Omit<React.ComponentPropsWithoutRef<'div'>, 'className'>) {\n return (\n <FieldProvider disabled={disabled}>\n <div\n data-slot=\"field\"\n data-disabled={disabled ? '' : undefined}\n {...props}\n className={clsx(\n className,\n // Base layout\n 'grid grid-cols-[1.125rem_1fr] gap-x-4 gap-y-1 sm:grid-cols-[1rem_1fr]',\n // Control layout\n '*:data-[slot=control]:col-start-1 *:data-[slot=control]:row-start-1 *:data-[slot=control]:mt-0.75 sm:*:data-[slot=control]:mt-1',\n // Label layout\n '*:data-[slot=label]:col-start-2 *:data-[slot=label]:row-start-1',\n // Description layout\n '*:data-[slot=description]:col-start-2 *:data-[slot=description]:row-start-2',\n // With description\n 'has-data-[slot=description]:**:data-[slot=label]:font-medium',\n )}\n />\n </FieldProvider>\n )\n}\n\n// --- Radio ---\nconst base = [\n // Basic layout\n 'relative isolate flex size-4.75 shrink-0 rounded-full sm:size-4.25',\n // Background color + shadow applied to inset pseudo element, so shadow blends with border in light mode\n 'before:absolute before:inset-0 before:-z-10 before:rounded-full before:bg-white before:shadow-sm',\n // Background color when checked\n 'group-data-checked:before:bg-(--radio-checked-bg)',\n // Background color is moved to control and shadow is removed in dark mode so hide `before` pseudo\n 'dark:before:hidden',\n // Background color applied to control in dark mode\n 'dark:bg-white/5 dark:group-data-checked:bg-(--radio-checked-bg)',\n // Border\n 'border border-zinc-950/15 group-data-checked:border-transparent group-data-hover:group-data-checked:border-transparent group-data-hover:border-zinc-950/30 group-data-checked:bg-(--radio-checked-border)',\n 'dark:border-white/15 dark:group-data-checked:border-white/5 dark:group-data-hover:group-data-checked:border-white/5 dark:group-data-hover:border-white/30',\n // Inner highlight shadow\n 'after:absolute after:inset-0 after:rounded-full after:shadow-[inset_0_1px_--theme(--color-white/15%)]',\n 'dark:after:-inset-px dark:after:hidden dark:after:rounded-full dark:group-data-checked:after:block',\n // Indicator color (light mode)\n '[--radio-indicator:transparent] group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] group-data-hover:group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] group-data-hover:[--radio-indicator:var(--color-zinc-900)]/10',\n // Indicator color (dark mode)\n 'dark:group-data-hover:group-data-checked:[--radio-indicator:var(--radio-checked-indicator)] dark:group-data-hover:[--radio-indicator:var(--color-zinc-700)]',\n // Focus ring\n 'group-data-focus:outline group-data-focus:outline-2 group-data-focus:outline-offset-2 group-data-focus:outline-blue-500',\n // Disabled state\n 'group-data-disabled:opacity-50',\n 'group-data-disabled:border-zinc-950/25 group-data-disabled:bg-zinc-950/5 group-data-disabled:[--radio-checked-indicator:var(--color-zinc-950)]/50 group-data-disabled:before:bg-transparent',\n 'dark:group-data-disabled:border-white/20 dark:group-data-disabled:bg-white/2.5 dark:group-data-disabled:[--radio-checked-indicator:var(--color-white)]/50 dark:group-data-checked:group-data-disabled:after:hidden',\n]\n\nconst radioColors = {\n 'dark/zinc': [\n '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',\n 'dark:[--radio-checked-bg:var(--color-zinc-600)]',\n ],\n 'dark/white': [\n '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',\n 'dark:[--radio-checked-bg:var(--color-white)] dark:[--radio-checked-border:var(--color-zinc-950)]/15 dark:[--radio-checked-indicator:var(--color-zinc-900)]',\n ],\n white:\n '[--radio-checked-bg:var(--color-white)] [--radio-checked-border:var(--color-zinc-950)]/15 [--radio-checked-indicator:var(--color-zinc-900)]',\n dark: '[--radio-checked-bg:var(--color-zinc-900)] [--radio-checked-border:var(--color-zinc-950)]/90 [--radio-checked-indicator:var(--color-white)]',\n zinc: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-zinc-600)] [--radio-checked-border:var(--color-zinc-700)]/90',\n red: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-red-600)] [--radio-checked-border:var(--color-red-700)]/90',\n orange:\n '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-orange-500)] [--radio-checked-border:var(--color-orange-600)]/90',\n amber:\n '[--radio-checked-bg:var(--color-amber-400)] [--radio-checked-border:var(--color-amber-500)]/80 [--radio-checked-indicator:var(--color-amber-950)]',\n yellow:\n '[--radio-checked-bg:var(--color-yellow-300)] [--radio-checked-border:var(--color-yellow-400)]/80 [--radio-checked-indicator:var(--color-yellow-950)]',\n lime: '[--radio-checked-bg:var(--color-lime-300)] [--radio-checked-border:var(--color-lime-400)]/80 [--radio-checked-indicator:var(--color-lime-950)]',\n green:\n '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-green-600)] [--radio-checked-border:var(--color-green-700)]/90',\n emerald:\n '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-emerald-600)] [--radio-checked-border:var(--color-emerald-700)]/90',\n teal: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-teal-600)] [--radio-checked-border:var(--color-teal-700)]/90',\n cyan: '[--radio-checked-bg:var(--color-cyan-300)] [--radio-checked-border:var(--color-cyan-400)]/80 [--radio-checked-indicator:var(--color-cyan-950)]',\n sky: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-sky-500)] [--radio-checked-border:var(--color-sky-600)]/80',\n blue: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-blue-600)] [--radio-checked-border:var(--color-blue-700)]/90',\n indigo:\n '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-indigo-500)] [--radio-checked-border:var(--color-indigo-600)]/90',\n violet:\n '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-violet-500)] [--radio-checked-border:var(--color-violet-600)]/90',\n purple:\n '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-purple-500)] [--radio-checked-border:var(--color-purple-600)]/90',\n fuchsia:\n '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-fuchsia-500)] [--radio-checked-border:var(--color-fuchsia-600)]/90',\n pink: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-pink-500)] [--radio-checked-border:var(--color-pink-600)]/90',\n rose: '[--radio-checked-indicator:var(--color-white)] [--radio-checked-bg:var(--color-rose-500)] [--radio-checked-border:var(--color-rose-600)]/90',\n}\n\ntype Color = keyof typeof radioColors\n\nexport function Radio({\n color = 'dark/zinc',\n className,\n value,\n disabled: localDisabled,\n ...props\n}: {\n color?: Color\n className?: string\n value: string\n disabled?: boolean\n} & Omit<React.ComponentPropsWithoutRef<'span'>, 'className'>) {\n const group = useRadioGroupContext()\n const disabled = localDisabled || group.disabled\n const checked = group.value === value\n const interactiveProps = useDataInteractive({ disabled })\n\n const handleClick = useCallback(() => {\n if (!disabled) {\n group.onChange(value)\n }\n }, [disabled, group, value])\n\n return (\n <span\n role=\"radio\"\n data-slot=\"control\"\n aria-checked={checked}\n data-checked={checked ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n data-value={value}\n tabIndex={checked ? 0 : -1}\n onClick={handleClick}\n {...interactiveProps}\n {...props}\n className={clsx(className, 'group inline-flex focus:outline-hidden')}\n >\n {group.name && checked && <input type=\"hidden\" name={group.name} value={value} />}\n <span className={clsx([base, radioColors[color]])}>\n <span\n className={clsx(\n 'size-full rounded-full border-[4.5px] border-transparent bg-(--radio-indicator) bg-clip-padding',\n // Forced colors mode\n 'forced-colors:border-[Canvas] forced-colors:group-data-checked:border-[Highlight]',\n )}\n />\n </span>\n </span>\n )\n}\n","import { createContext, useContext } from 'react'\n\nexport const CloseContext = createContext<(() => void) | null>(null)\n\nexport function useCloseContext(): (() => void) | null {\n return useContext(CloseContext)\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { forwardRef, useCallback, useId } from 'react'\nimport { useCloseContext } from '../hooks/use-close-context.js'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { LayoutGroup, LayoutIndicator } from '../hooks/use-layout-animation.js'\nimport { TouchTarget } from './button-headless.js'\nimport { Link } from './link.js'\n\nexport function Sidebar({ className, ...props }: React.ComponentPropsWithoutRef<'nav'>) {\n return <nav {...props} className={clsx(className, 'flex h-full min-h-0 flex-col')} />\n}\n\nexport function SidebarHeader({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={clsx(\n className,\n 'flex flex-col border-b border-zinc-950/5 p-4 dark:border-white/5 [&>[data-slot=section]+[data-slot=section]]:mt-2.5',\n )}\n />\n )\n}\n\nexport function SidebarBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={clsx(\n className,\n 'flex flex-1 flex-col overflow-y-auto p-4 [&>[data-slot=section]+[data-slot=section]]:mt-8',\n )}\n />\n )\n}\n\nexport function SidebarFooter({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n {...props}\n className={clsx(\n className,\n 'flex flex-col border-t border-zinc-950/5 p-4 dark:border-white/5 [&>[data-slot=section]+[data-slot=section]]:mt-2.5',\n )}\n />\n )\n}\n\nexport function SidebarSection({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n const id = useId()\n\n return (\n <LayoutGroup id={id}>\n <div {...props} data-slot=\"section\" className={clsx(className, 'flex flex-col gap-0.5')} />\n </LayoutGroup>\n )\n}\n\nexport function SidebarDivider({ className, ...props }: React.ComponentPropsWithoutRef<'hr'>) {\n return (\n <hr\n {...props}\n className={clsx(className, 'my-4 border-t border-zinc-950/5 lg:-mx-4 dark:border-white/5')}\n />\n )\n}\n\nexport function SidebarSpacer({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return <div aria-hidden=\"true\" {...props} className={clsx(className, 'mt-8 flex-1')} />\n}\n\nexport function SidebarHeading({ className, ...props }: React.ComponentPropsWithoutRef<'h3'>) {\n return (\n <h3\n {...props}\n className={clsx(\n className,\n 'mb-1 px-2 text-xs/6 font-medium text-zinc-500 dark:text-zinc-400',\n )}\n />\n )\n}\n\nexport const SidebarItem = forwardRef(function SidebarItem(\n {\n current,\n className,\n children,\n ...props\n }: { current?: boolean; className?: string; children: React.ReactNode } & (\n | ({\n href?: never\n disabled?: boolean\n } & Omit<React.ComponentPropsWithoutRef<'button'>, 'className'>)\n | ({ href: string } & Omit<React.ComponentPropsWithoutRef<typeof Link>, 'className'>)\n ),\n ref: React.ForwardedRef<HTMLAnchorElement | HTMLButtonElement>,\n) {\n const disabled = 'disabled' in props ? props.disabled : false\n const interactiveProps = useDataInteractive({ disabled: disabled ?? false })\n const closeFn = useCloseContext()\n const propsOnClick =\n 'onClick' in props\n ? (props.onClick as React.MouseEventHandler<HTMLAnchorElement> | undefined)\n : undefined\n\n const handleLinkClick = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement>) => {\n propsOnClick?.(e)\n closeFn?.()\n },\n [propsOnClick, closeFn],\n )\n\n const classes = clsx(\n // Base\n 'flex w-full items-center gap-3 rounded-lg px-2 py-2.5 text-left text-base/6 font-medium text-zinc-950 sm:py-2 sm:text-sm/5',\n // Leading icon/icon-only\n '*:data-[slot=icon]:size-6 *:data-[slot=icon]:shrink-0 *:data-[slot=icon]:fill-zinc-500 sm:*:data-[slot=icon]:size-5',\n // Trailing icon (down chevron or similar)\n '*:last:data-[slot=icon]:ml-auto *:last:data-[slot=icon]:size-5 sm:*:last:data-[slot=icon]:size-4',\n // Avatar\n '*:data-[slot=avatar]:-m-0.5 *:data-[slot=avatar]:size-7 sm:*:data-[slot=avatar]:size-6',\n // Hover\n 'data-hover:bg-zinc-950/5 data-hover:*:data-[slot=icon]:fill-zinc-950',\n // Active\n 'data-active:bg-zinc-950/5 data-active:*:data-[slot=icon]:fill-zinc-950',\n // Current\n 'data-current:*:data-[slot=icon]:fill-zinc-950',\n // Dark mode\n 'dark:text-white dark:*:data-[slot=icon]:fill-zinc-400',\n 'dark:data-hover:bg-white/5 dark:data-hover:*:data-[slot=icon]:fill-white',\n 'dark:data-active:bg-white/5 dark:data-active:*:data-[slot=icon]:fill-white',\n 'dark:data-current:*:data-[slot=icon]:fill-white',\n )\n\n return (\n <span className={clsx(className, 'relative')}>\n {current && (\n <LayoutIndicator\n layoutId=\"current-indicator\"\n className=\"absolute inset-y-2 -left-4 w-0.5 rounded-full bg-zinc-950 dark:bg-white\"\n />\n )}\n {typeof props.href === 'string' ? (\n <Link\n {...props}\n className={classes}\n data-current={current ? 'true' : undefined}\n ref={ref as React.ForwardedRef<HTMLAnchorElement>}\n onClick={handleLinkClick}\n >\n <TouchTarget>{children}</TouchTarget>\n </Link>\n ) : (\n <button\n type=\"button\"\n {...props}\n {...interactiveProps}\n className={clsx('cursor-default', classes)}\n data-current={current ? 'true' : undefined}\n ref={ref as React.ForwardedRef<HTMLButtonElement>}\n >\n <TouchTarget>{children}</TouchTarget>\n </button>\n )}\n </span>\n )\n})\n\nexport function SidebarLabel({ className, ...props }: React.ComponentPropsWithoutRef<'span'>) {\n return <span {...props} className={clsx(className, 'truncate')} />\n}\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { CloseContext } from '../hooks/use-close-context.js'\nimport { useEscapeKey } from '../hooks/use-escape-key.js'\nimport { useFocusTrap } from '../hooks/use-focus-trap.js'\nimport { useScrollLock } from '../hooks/use-scroll-lock.js'\nimport { useTransition } from '../hooks/use-transition.js'\nimport { NavbarItem } from './navbar.js'\n\nfunction OpenMenuIcon() {\n return (\n <svg data-slot=\"icon\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path d=\"M2 6.75C2 6.33579 2.33579 6 2.75 6H17.25C17.6642 6 18 6.33579 18 6.75C18 7.16421 17.6642 7.5 17.25 7.5H2.75C2.33579 7.5 2 7.16421 2 6.75ZM2 13.25C2 12.8358 2.33579 12.5 2.75 12.5H17.25C17.6642 12.5 18 12.8358 18 13.25C18 13.6642 17.6642 14 17.25 14H2.75C2.33579 14 2 13.6642 2 13.25Z\" />\n </svg>\n )\n}\n\nfunction CloseMenuIcon() {\n return (\n <svg data-slot=\"icon\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path d=\"M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z\" />\n </svg>\n )\n}\n\nfunction MobileSidebar({\n open,\n close,\n children,\n}: React.PropsWithChildren<{ open: boolean; close: () => void }>) {\n const panelRef = useRef<HTMLDivElement>(null)\n\n const backdrop = useTransition(open)\n const panel = useTransition(open)\n\n useScrollLock(open)\n useFocusTrap(panelRef, open)\n useEscapeKey(close, open)\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n close()\n }\n },\n [close],\n )\n\n if (!(backdrop.mounted || panel.mounted)) return null\n\n return createPortal(\n <CloseContext.Provider value={close}>\n <div role=\"dialog\" aria-modal=\"true\" className=\"lg:hidden\">\n {/* Backdrop */}\n {backdrop.mounted && (\n <div\n ref={backdrop.nodeRef as React.RefObject<HTMLDivElement>}\n {...backdrop.transitionProps}\n onClick={handleBackdropClick}\n className=\"fixed inset-0 bg-black/30 transition data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in\"\n />\n )}\n\n {/* Panel */}\n {panel.mounted && (\n <div\n ref={(node) => {\n ;(panelRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n ;(panel.nodeRef as React.MutableRefObject<HTMLElement | null>).current = node\n }}\n {...panel.transitionProps}\n className=\"fixed inset-y-0 w-full max-w-80 p-2 transition duration-300 ease-in-out data-closed:-translate-x-full\"\n >\n <div className=\"flex h-full flex-col rounded-lg bg-white shadow-xs ring-1 ring-zinc-950/5 dark:bg-zinc-900 dark:ring-white/10\">\n <div className=\"-mb-3 px-4 pt-3\">\n <NavbarItem onClick={close} aria-label=\"Close navigation\">\n <CloseMenuIcon />\n </NavbarItem>\n </div>\n {children}\n </div>\n </div>\n )}\n </div>\n </CloseContext.Provider>,\n document.body,\n )\n}\n\nexport function SidebarLayout({\n navbar,\n sidebar,\n children,\n}: React.PropsWithChildren<{\n navbar: React.ReactNode\n sidebar: React.ReactNode\n}>) {\n const [showSidebar, setShowSidebar] = useState(false)\n\n return (\n <div className=\"relative isolate flex min-h-svh w-full bg-white max-lg:flex-col lg:bg-zinc-100 dark:bg-zinc-900 dark:lg:bg-zinc-950\">\n {/* Sidebar on desktop */}\n <div className=\"fixed inset-y-0 left-0 w-64 max-lg:hidden\">{sidebar}</div>\n\n {/* Sidebar on mobile */}\n <MobileSidebar open={showSidebar} close={() => setShowSidebar(false)}>\n {sidebar}\n </MobileSidebar>\n\n {/* Navbar on mobile */}\n <header className=\"flex items-center px-4 lg:hidden\">\n <div className=\"py-2.5\">\n <NavbarItem onClick={() => setShowSidebar(true)} aria-label=\"Open navigation\">\n <OpenMenuIcon />\n </NavbarItem>\n </div>\n <div className=\"min-w-0 flex-1\">{navbar}</div>\n </header>\n\n {/* Content */}\n <main className=\"flex flex-1 flex-col pb-2 lg:min-w-0 lg:pt-2 lg:pr-2 lg:pl-64\">\n <div className=\"grow p-6 lg:rounded-lg lg:bg-white lg:p-10 lg:shadow-xs lg:ring-1 lg:ring-zinc-950/5 dark:lg:bg-zinc-900 dark:lg:ring-white/10\">\n <div className=\"mx-auto max-w-6xl\">{children}</div>\n </div>\n </main>\n </div>\n )\n}\n","'use client'\n\nimport type React from 'react'\nimport { useCallback, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { CloseContext } from '../hooks/use-close-context.js'\nimport { useEscapeKey } from '../hooks/use-escape-key.js'\nimport { useFocusTrap } from '../hooks/use-focus-trap.js'\nimport { useScrollLock } from '../hooks/use-scroll-lock.js'\nimport { useTransition } from '../hooks/use-transition.js'\nimport { NavbarItem } from './navbar.js'\n\nfunction OpenMenuIcon() {\n return (\n <svg data-slot=\"icon\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path d=\"M2 6.75C2 6.33579 2.33579 6 2.75 6H17.25C17.6642 6 18 6.33579 18 6.75C18 7.16421 17.6642 7.5 17.25 7.5H2.75C2.33579 7.5 2 7.16421 2 6.75ZM2 13.25C2 12.8358 2.33579 12.5 2.75 12.5H17.25C17.6642 12.5 18 12.8358 18 13.25C18 13.6642 17.6642 14 17.25 14H2.75C2.33579 14 2 13.6642 2 13.25Z\" />\n </svg>\n )\n}\n\nfunction CloseMenuIcon() {\n return (\n <svg data-slot=\"icon\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path d=\"M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z\" />\n </svg>\n )\n}\n\nfunction MobileSidebar({\n open,\n close,\n children,\n}: React.PropsWithChildren<{ open: boolean; close: () => void }>) {\n const panelRef = useRef<HTMLDivElement>(null)\n\n const backdrop = useTransition(open)\n const panel = useTransition(open)\n\n useScrollLock(open)\n useFocusTrap(panelRef, open)\n useEscapeKey(close, open)\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n close()\n }\n },\n [close],\n )\n\n if (!(backdrop.mounted || panel.mounted)) return null\n\n return createPortal(\n <CloseContext.Provider value={close}>\n <div role=\"dialog\" aria-modal=\"true\" className=\"lg:hidden\">\n {/* Backdrop */}\n {backdrop.mounted && (\n <div\n ref={backdrop.nodeRef as React.RefObject<HTMLDivElement>}\n {...backdrop.transitionProps}\n onClick={handleBackdropClick}\n className=\"fixed inset-0 bg-black/30 transition data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in\"\n />\n )}\n\n {/* Panel */}\n {panel.mounted && (\n <div\n ref={(node) => {\n ;(panelRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n ;(panel.nodeRef as React.MutableRefObject<HTMLElement | null>).current = node\n }}\n {...panel.transitionProps}\n className=\"fixed inset-y-0 w-full max-w-80 p-2 transition duration-300 ease-in-out data-closed:-translate-x-full\"\n >\n <div className=\"flex h-full flex-col rounded-lg bg-white shadow-xs ring-1 ring-zinc-950/5 dark:bg-zinc-900 dark:ring-white/10\">\n <div className=\"-mb-3 px-4 pt-3\">\n <NavbarItem onClick={close} aria-label=\"Close navigation\">\n <CloseMenuIcon />\n </NavbarItem>\n </div>\n {children}\n </div>\n </div>\n )}\n </div>\n </CloseContext.Provider>,\n document.body,\n )\n}\n\nexport function StackedLayout({\n navbar,\n sidebar,\n children,\n}: React.PropsWithChildren<{\n navbar: React.ReactNode\n sidebar: React.ReactNode\n}>) {\n const [showSidebar, setShowSidebar] = useState(false)\n\n return (\n <div className=\"relative isolate flex min-h-svh w-full flex-col bg-white lg:bg-zinc-100 dark:bg-zinc-900 dark:lg:bg-zinc-950\">\n {/* Sidebar on mobile */}\n <MobileSidebar open={showSidebar} close={() => setShowSidebar(false)}>\n {sidebar}\n </MobileSidebar>\n\n {/* Navbar */}\n <header className=\"flex items-center px-4\">\n <div className=\"py-2.5 lg:hidden\">\n <NavbarItem onClick={() => setShowSidebar(true)} aria-label=\"Open navigation\">\n <OpenMenuIcon />\n </NavbarItem>\n </div>\n <div className=\"min-w-0 flex-1\">{navbar}</div>\n </header>\n\n {/* Content */}\n <main className=\"flex flex-1 flex-col pb-2 lg:px-2\">\n <div className=\"grow p-6 lg:rounded-lg lg:bg-white lg:p-10 lg:shadow-xs lg:ring-1 lg:ring-zinc-950/5 dark:lg:bg-zinc-900 dark:lg:ring-white/10\">\n <div className=\"mx-auto max-w-6xl\">{children}</div>\n </div>\n </main>\n </div>\n )\n}\n","import clsx from 'clsx'\nimport type React from 'react'\nimport { useDataInteractive } from '../hooks/use-data-interactive.js'\nimport { FieldProvider } from '../hooks/use-field-context.js'\nimport { useToggle } from '../hooks/use-toggle.js'\n\nexport function SwitchGroup({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n data-slot=\"control\"\n {...props}\n className={clsx(\n className,\n // Basic groups\n 'space-y-3 **:data-[slot=label]:font-normal',\n // With descriptions\n 'has-data-[slot=description]:space-y-6 has-data-[slot=description]:**:data-[slot=label]:font-medium',\n )}\n />\n )\n}\n\nexport function SwitchField({\n className,\n disabled,\n ...props\n}: {\n className?: string\n disabled?: boolean\n} & Omit<React.ComponentPropsWithoutRef<'div'>, 'className'>) {\n return (\n <FieldProvider disabled={disabled}>\n <div\n data-slot=\"field\"\n data-disabled={disabled ? '' : undefined}\n {...props}\n className={clsx(\n className,\n // Base layout\n 'grid grid-cols-[1fr_auto] gap-x-8 gap-y-1 sm:grid-cols-[1fr_auto]',\n // Control layout\n '*:data-[slot=control]:col-start-2 *:data-[slot=control]:self-start sm:*:data-[slot=control]:mt-0.5',\n // Label layout\n '*:data-[slot=label]:col-start-1 *:data-[slot=label]:row-start-1',\n // Description layout\n '*:data-[slot=description]:col-start-1 *:data-[slot=description]:row-start-2',\n // With description\n 'has-data-[slot=description]:**:data-[slot=label]:font-medium',\n )}\n />\n </FieldProvider>\n )\n}\n\nconst colors = {\n 'dark/zinc': [\n '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]/25',\n '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:var(--color-zinc-700)]/90',\n ],\n 'dark/white': [\n '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:transparent] dark:[--switch-bg:var(--color-white)]',\n '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white] dark:[--switch-ring:transparent] dark:[--switch:var(--color-zinc-900)]',\n ],\n dark: [\n '[--switch-bg-ring:var(--color-zinc-950)]/90 [--switch-bg:var(--color-zinc-900)] dark:[--switch-bg-ring:var(--color-white)]/15',\n '[--switch-ring:var(--color-zinc-950)]/90 [--switch-shadow:var(--color-black)]/10 [--switch:white]',\n ],\n zinc: [\n '[--switch-bg-ring:var(--color-zinc-700)]/90 [--switch-bg:var(--color-zinc-600)] dark:[--switch-bg-ring:transparent]',\n '[--switch-shadow:var(--color-black)]/10 [--switch:white] [--switch-ring:var(--color-zinc-700)]/90',\n ],\n white: [\n '[--switch-bg-ring:var(--color-black)]/15 [--switch-bg:white] dark:[--switch-bg-ring:transparent]',\n '[--switch-shadow:var(--color-black)]/10 [--switch-ring:transparent] [--switch:var(--color-zinc-950)]',\n ],\n red: [\n '[--switch-bg-ring:var(--color-red-700)]/90 [--switch-bg:var(--color-red-600)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-red-700)]/90 [--switch-shadow:var(--color-red-900)]/20',\n ],\n orange: [\n '[--switch-bg-ring:var(--color-orange-600)]/90 [--switch-bg:var(--color-orange-500)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-orange-600)]/90 [--switch-shadow:var(--color-orange-900)]/20',\n ],\n amber: [\n '[--switch-bg-ring:var(--color-amber-500)]/80 [--switch-bg:var(--color-amber-400)] dark:[--switch-bg-ring:transparent]',\n '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-amber-950)]',\n ],\n yellow: [\n '[--switch-bg-ring:var(--color-yellow-400)]/80 [--switch-bg:var(--color-yellow-300)] dark:[--switch-bg-ring:transparent]',\n '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-yellow-950)]',\n ],\n lime: [\n '[--switch-bg-ring:var(--color-lime-400)]/80 [--switch-bg:var(--color-lime-300)] dark:[--switch-bg-ring:transparent]',\n '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-lime-950)]',\n ],\n green: [\n '[--switch-bg-ring:var(--color-green-700)]/90 [--switch-bg:var(--color-green-600)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-green-700)]/90 [--switch-shadow:var(--color-green-900)]/20',\n ],\n emerald: [\n '[--switch-bg-ring:var(--color-emerald-600)]/90 [--switch-bg:var(--color-emerald-500)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-emerald-600)]/90 [--switch-shadow:var(--color-emerald-900)]/20',\n ],\n teal: [\n '[--switch-bg-ring:var(--color-teal-700)]/90 [--switch-bg:var(--color-teal-600)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-teal-700)]/90 [--switch-shadow:var(--color-teal-900)]/20',\n ],\n cyan: [\n '[--switch-bg-ring:var(--color-cyan-400)]/80 [--switch-bg:var(--color-cyan-300)] dark:[--switch-bg-ring:transparent]',\n '[--switch-ring:transparent] [--switch-shadow:transparent] [--switch:var(--color-cyan-950)]',\n ],\n sky: [\n '[--switch-bg-ring:var(--color-sky-600)]/80 [--switch-bg:var(--color-sky-500)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-sky-600)]/80 [--switch-shadow:var(--color-sky-900)]/20',\n ],\n blue: [\n '[--switch-bg-ring:var(--color-blue-700)]/90 [--switch-bg:var(--color-blue-600)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-blue-700)]/90 [--switch-shadow:var(--color-blue-900)]/20',\n ],\n indigo: [\n '[--switch-bg-ring:var(--color-indigo-600)]/90 [--switch-bg:var(--color-indigo-500)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-indigo-600)]/90 [--switch-shadow:var(--color-indigo-900)]/20',\n ],\n violet: [\n '[--switch-bg-ring:var(--color-violet-600)]/90 [--switch-bg:var(--color-violet-500)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-violet-600)]/90 [--switch-shadow:var(--color-violet-900)]/20',\n ],\n purple: [\n '[--switch-bg-ring:var(--color-purple-600)]/90 [--switch-bg:var(--color-purple-500)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-purple-600)]/90 [--switch-shadow:var(--color-purple-900)]/20',\n ],\n fuchsia: [\n '[--switch-bg-ring:var(--color-fuchsia-600)]/90 [--switch-bg:var(--color-fuchsia-500)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-fuchsia-600)]/90 [--switch-shadow:var(--color-fuchsia-900)]/20',\n ],\n pink: [\n '[--switch-bg-ring:var(--color-pink-600)]/90 [--switch-bg:var(--color-pink-500)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-pink-600)]/90 [--switch-shadow:var(--color-pink-900)]/20',\n ],\n rose: [\n '[--switch-bg-ring:var(--color-rose-600)]/90 [--switch-bg:var(--color-rose-500)] dark:[--switch-bg-ring:transparent]',\n '[--switch:white] [--switch-ring:var(--color-rose-600)]/90 [--switch-shadow:var(--color-rose-900)]/20',\n ],\n}\n\ntype Color = keyof typeof colors\n\nexport function Switch({\n color = 'dark/zinc',\n className,\n checked: controlledChecked,\n defaultChecked,\n onChange,\n disabled,\n name,\n value,\n ...props\n}: {\n color?: Color\n className?: string\n checked?: boolean\n defaultChecked?: boolean\n onChange?: (checked: boolean) => void\n disabled?: boolean\n name?: string\n value?: string\n} & Omit<React.ComponentPropsWithoutRef<'button'>, 'className' | 'onChange' | 'type'>) {\n const { checked, toggleProps } = useToggle({\n checked: controlledChecked,\n defaultChecked,\n onChange,\n disabled,\n })\n const interactiveProps = useDataInteractive({ disabled })\n\n return (\n <button\n type=\"button\"\n role=\"switch\"\n data-slot=\"control\"\n aria-checked={checked}\n data-checked={checked ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n disabled={disabled}\n onClick={toggleProps.onClick}\n onKeyDown={toggleProps.onKeyDown}\n {...interactiveProps}\n {...props}\n className={clsx(\n className,\n // Base styles\n 'group relative isolate inline-flex h-6 w-10 cursor-default rounded-full p-[3px] sm:h-5 sm:w-8',\n // Transitions\n 'transition duration-0 ease-in-out data-changing:duration-200',\n // Outline and background color in forced-colors mode so switch is still visible\n 'forced-colors:outline forced-colors:[--switch-bg:Highlight] dark:forced-colors:[--switch-bg:Highlight]',\n // Unchecked\n 'bg-zinc-200 ring-1 ring-black/5 ring-inset dark:bg-white/5 dark:ring-white/15',\n // Checked\n 'data-checked:bg-(--switch-bg) data-checked:ring-(--switch-bg-ring) dark:data-checked:bg-(--switch-bg) dark:data-checked:ring-(--switch-bg-ring)',\n // Focus\n 'focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500',\n // Hover\n 'data-hover:ring-black/15 data-hover:data-checked:ring-(--switch-bg-ring)',\n 'dark:data-hover:ring-white/25 dark:data-hover:data-checked:ring-(--switch-bg-ring)',\n // Disabled\n 'data-disabled:bg-zinc-200 data-disabled:opacity-50 data-disabled:data-checked:bg-zinc-200 data-disabled:data-checked:ring-black/5',\n 'dark:data-disabled:bg-white/15 dark:data-disabled:data-checked:bg-white/15 dark:data-disabled:data-checked:ring-white/15',\n // Color specific styles\n colors[color],\n )}\n >\n {name && <input type=\"hidden\" name={name} value={checked ? (value ?? 'on') : ''} />}\n <span\n aria-hidden=\"true\"\n className={clsx(\n // Basic layout\n 'pointer-events-none relative inline-block size-4.5 rounded-full sm:size-3.5',\n // Transition\n 'translate-x-0 transition duration-200 ease-in-out',\n // Invisible border so the switch is still visible in forced-colors mode\n 'border border-transparent',\n // Unchecked\n 'bg-white shadow-sm ring-1 ring-black/5',\n // Checked\n 'group-data-checked:bg-(--switch) group-data-checked:shadow-(--switch-shadow) group-data-checked:ring-(--switch-ring)',\n 'group-data-checked:translate-x-4 sm:group-data-checked:translate-x-3',\n // Disabled\n 'group-data-checked:group-data-disabled:bg-white group-data-checked:group-data-disabled:shadow-sm group-data-checked:group-data-disabled:ring-black/5',\n )}\n />\n </button>\n )\n}\n","'use client'\n\nimport clsx from 'clsx'\nimport type React from 'react'\nimport { createContext, useContext, useState } from 'react'\nimport { Link } from './link.js'\n\nconst TableContext = createContext<{\n bleed: boolean\n dense: boolean\n grid: boolean\n striped: boolean\n}>({\n bleed: false,\n dense: false,\n grid: false,\n striped: false,\n})\n\nexport function Table({\n bleed = false,\n dense = false,\n grid = false,\n striped = false,\n className,\n children,\n ...props\n}: {\n bleed?: boolean\n dense?: boolean\n grid?: boolean\n striped?: boolean\n} & React.ComponentPropsWithoutRef<'div'>) {\n return (\n <TableContext.Provider\n value={{ bleed, dense, grid, striped } as React.ContextType<typeof TableContext>}\n >\n <div className=\"flow-root\">\n <div\n {...props}\n className={clsx(className, '-mx-(--gutter) overflow-x-auto whitespace-nowrap')}\n >\n <div\n className={clsx('inline-block min-w-full align-middle', !bleed && 'sm:px-(--gutter)')}\n >\n <table className=\"min-w-full text-left text-sm/6 text-zinc-950 dark:text-white\">\n {children}\n </table>\n </div>\n </div>\n </div>\n </TableContext.Provider>\n )\n}\n\nexport function TableHead({ className, ...props }: React.ComponentPropsWithoutRef<'thead'>) {\n return <thead {...props} className={clsx(className, 'text-zinc-500 dark:text-zinc-400')} />\n}\n\nexport function TableBody(props: React.ComponentPropsWithoutRef<'tbody'>) {\n return <tbody {...props} />\n}\n\nconst TableRowContext = createContext<{\n href?: string\n target?: string\n title?: string\n}>({\n href: undefined,\n target: undefined,\n title: undefined,\n})\n\nexport function TableRow({\n href,\n target,\n title,\n className,\n ...props\n}: {\n href?: string\n target?: string\n title?: string\n} & React.ComponentPropsWithoutRef<'tr'>) {\n const { striped } = useContext(TableContext)\n\n return (\n <TableRowContext.Provider\n value={{ href, target, title } as React.ContextType<typeof TableRowContext>}\n >\n <tr\n {...props}\n className={clsx(\n className,\n href &&\n 'has-[[data-row-link][data-focus]]:outline-2 has-[[data-row-link][data-focus]]:-outline-offset-2 has-[[data-row-link][data-focus]]:outline-blue-500 dark:focus-within:bg-white/2.5',\n striped && 'even:bg-zinc-950/2.5 dark:even:bg-white/2.5',\n href && striped && 'hover:bg-zinc-950/5 dark:hover:bg-white/5',\n href && !striped && 'hover:bg-zinc-950/2.5 dark:hover:bg-white/2.5',\n )}\n />\n </TableRowContext.Provider>\n )\n}\n\nexport function TableHeader({ className, ...props }: React.ComponentPropsWithoutRef<'th'>) {\n const { bleed, grid } = useContext(TableContext)\n\n return (\n <th\n {...props}\n className={clsx(\n className,\n 'border-b border-b-zinc-950/10 px-4 py-2 font-medium first:pl-(--gutter,--spacing(2)) last:pr-(--gutter,--spacing(2)) dark:border-b-white/10',\n grid && 'border-l border-l-zinc-950/5 first:border-l-0 dark:border-l-white/5',\n !bleed && 'sm:first:pl-1 sm:last:pr-1',\n )}\n />\n )\n}\n\nexport function TableCell({ className, children, ...props }: React.ComponentPropsWithoutRef<'td'>) {\n const { bleed, dense, grid, striped } = useContext(TableContext)\n const { href, target, title } = useContext(TableRowContext)\n const [cellRef, setCellRef] = useState<HTMLElement | null>(null)\n\n return (\n <td\n ref={href ? setCellRef : undefined}\n {...props}\n className={clsx(\n className,\n 'relative px-4 first:pl-(--gutter,--spacing(2)) last:pr-(--gutter,--spacing(2))',\n !striped && 'border-b border-zinc-950/5 dark:border-white/5',\n grid && 'border-l border-l-zinc-950/5 first:border-l-0 dark:border-l-white/5',\n dense ? 'py-2.5' : 'py-4',\n !bleed && 'sm:first:pl-1 sm:last:pr-1',\n )}\n >\n {href && (\n <Link\n data-row-link\n href={href}\n target={target}\n aria-label={title}\n tabIndex={cellRef?.previousElementSibling === null ? 0 : -1}\n className=\"absolute inset-0 focus:outline-hidden\"\n />\n )}\n {children}\n </td>\n )\n}\n"],"names":["sizes","e","colors","BadgeButton","i","children","NavbarItem","SidebarItem","OpenMenuIcon","CloseMenuIcon","MobileSidebar"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":[],"sources":["../src/components/heading.tsx","../src/components/table.tsx"],"sourcesContent":["import clsx from 'clsx';\n\ntype HeadingProps = {\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n} & React.ComponentPropsWithoutRef<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'>;\n\nexport function Heading({ className, level = 1, ...props }: HeadingProps) {\n const Element: `h${typeof level}` = `h${level}`;\n\n return (\n <Element\n {...props}\n className={clsx(\n className,\n 'text-2xl/8 font-semibold text-zinc-950 sm:text-xl/8 dark:text-white',\n )}\n />\n );\n}\n\nexport function Subheading({ className, level = 2, ...props }: HeadingProps) {\n const Element: `h${typeof level}` = `h${level}`;\n\n return (\n <Element\n {...props}\n className={clsx(\n className,\n 'text-base/7 font-semibold text-zinc-950 sm:text-sm/6 dark:text-white',\n )}\n />\n );\n}\n","'use client';\n\nimport clsx from 'clsx';\nimport type React from 'react';\nimport { createContext, use, useState } from 'react';\nimport { Link } from './link.js';\n\nconst TableContext = createContext<{\n bleed: boolean;\n dense: boolean;\n grid: boolean;\n striped: boolean;\n}>({\n bleed: false,\n dense: false,\n grid: false,\n striped: false,\n});\n\nexport function Table({\n bleed = false,\n dense = false,\n grid = false,\n striped = false,\n className,\n children,\n ...props\n}: {\n bleed?: boolean;\n dense?: boolean;\n grid?: boolean;\n striped?: boolean;\n} & React.ComponentPropsWithoutRef<'div'>) {\n return (\n <TableContext.Provider\n value={{ bleed, dense, grid, striped } as React.ContextType<typeof TableContext>}\n >\n <div className=\"flow-root\">\n <div\n {...props}\n className={clsx(className, '-mx-(--gutter) overflow-x-auto whitespace-nowrap')}\n >\n <div\n className={clsx('inline-block min-w-full align-middle', !bleed && 'sm:px-(--gutter)')}\n >\n <table className=\"min-w-full text-left text-sm/6 text-zinc-950 dark:text-white\">\n {children}\n </table>\n </div>\n </div>\n </div>\n </TableContext.Provider>\n );\n}\n\nexport function TableHead({ className, ...props }: React.ComponentPropsWithoutRef<'thead'>) {\n return <thead {...props} className={clsx(className, 'text-zinc-500 dark:text-zinc-400')} />;\n}\n\nexport function TableBody(props: React.ComponentPropsWithoutRef<'tbody'>) {\n return <tbody {...props} />;\n}\n\nconst TableRowContext = createContext<{\n href?: string;\n target?: string;\n title?: string;\n}>({\n href: undefined,\n target: undefined,\n title: undefined,\n});\n\nexport function TableRow({\n href,\n target,\n title,\n className,\n ...props\n}: {\n href?: string;\n target?: string;\n title?: string;\n} & React.ComponentPropsWithoutRef<'tr'>) {\n const { striped } = use(TableContext);\n\n return (\n <TableRowContext.Provider\n value={{ href, target, title } as React.ContextType<typeof TableRowContext>}\n >\n <tr\n {...props}\n className={clsx(\n className,\n href &&\n 'has-[[data-row-link][data-focus]]:outline-2 has-[[data-row-link][data-focus]]:-outline-offset-2 has-[[data-row-link][data-focus]]:outline-blue-500 dark:focus-within:bg-white/2.5',\n striped && 'even:bg-zinc-950/2.5 dark:even:bg-white/2.5',\n href && striped && 'hover:bg-zinc-950/5 dark:hover:bg-white/5',\n href && !striped && 'hover:bg-zinc-950/2.5 dark:hover:bg-white/2.5',\n )}\n />\n </TableRowContext.Provider>\n );\n}\n\nexport function TableHeader({ className, ...props }: React.ComponentPropsWithoutRef<'th'>) {\n const { bleed, grid } = use(TableContext);\n\n return (\n <th\n {...props}\n className={clsx(\n className,\n 'border-b border-b-zinc-950/10 px-4 py-2 font-medium first:pl-(--gutter,--spacing(2)) last:pr-(--gutter,--spacing(2)) dark:border-b-white/10',\n grid && 'border-l border-l-zinc-950/5 first:border-l-0 dark:border-l-white/5',\n !bleed && 'sm:first:pl-1 sm:last:pr-1',\n )}\n />\n );\n}\n\nexport function TableCell({ className, children, ...props }: React.ComponentPropsWithoutRef<'td'>) {\n const { bleed, dense, grid, striped } = use(TableContext);\n const { href, target, title } = use(TableRowContext);\n const [cellRef, setCellRef] = useState<HTMLElement | null>(null);\n\n return (\n <td\n ref={href ? setCellRef : undefined}\n {...props}\n className={clsx(\n className,\n 'relative px-4 first:pl-(--gutter,--spacing(2)) last:pr-(--gutter,--spacing(2))',\n !striped && 'border-b border-zinc-950/5 dark:border-white/5',\n grid && 'border-l border-l-zinc-950/5 first:border-l-0 dark:border-l-white/5',\n dense ? 'py-2.5' : 'py-4',\n !bleed && 'sm:first:pl-1 sm:last:pr-1',\n )}\n >\n {href && (\n <Link\n data-row-link\n href={href}\n target={target}\n aria-label={title}\n tabIndex={cellRef?.previousElementSibling === null ? 0 : -1}\n className=\"absolute inset-0 focus:outline-hidden\"\n />\n )}\n {children}\n </td>\n );\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,QAAQ,EAAE,WAAW,QAAQ,GAAG,GAAG,SAAuB;AAGxE,QACE,oBAHkC,IAAI,SAGtC;EACE,GAAI;EACJ,WAAW,KACT,WACA,sEACD;EACD,CAAA;;;;ACTN,IAAM,eAAe,cAKlB;CACD,OAAO;CACP,OAAO;CACP,MAAM;CACN,SAAS;CACV,CAAC;AAEF,SAAgB,MAAM,EACpB,QAAQ,OACR,QAAQ,OACR,OAAO,OACP,UAAU,OACV,WACA,UACA,GAAG,SAMsC;AACzC,QACE,oBAAC,aAAa,UAAd;EACE,OAAO;GAAE;GAAO;GAAO;GAAM;GAAS;YAEtC,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,OAAD;IACE,GAAI;IACJ,WAAW,KAAK,WAAW,mDAAmD;cAE9E,oBAAC,OAAD;KACE,WAAW,KAAK,wCAAwC,CAAC,SAAS,mBAAmB;eAErF,oBAAC,SAAD;MAAO,WAAU;MACd;MACK,CAAA;KACJ,CAAA;IACF,CAAA;GACF,CAAA;EACgB,CAAA;;AAI5B,SAAgB,UAAU,EAAE,WAAW,GAAG,SAAkD;AAC1F,QAAO,oBAAC,SAAD;EAAO,GAAI;EAAO,WAAW,KAAK,WAAW,mCAAmC;EAAI,CAAA;;AAG7F,SAAgB,UAAU,OAAgD;AACxE,QAAO,oBAAC,SAAD,EAAO,GAAI,OAAS,CAAA;;AAG7B,IAAM,kBAAkB,cAIrB;CACD,MAAM,KAAA;CACN,QAAQ,KAAA;CACR,OAAO,KAAA;CACR,CAAC;AAEF,SAAgB,SAAS,EACvB,MACA,QACA,OACA,WACA,GAAG,SAKqC;CACxC,MAAM,EAAE,YAAY,IAAI,aAAa;AAErC,QACE,oBAAC,gBAAgB,UAAjB;EACE,OAAO;GAAE;GAAM;GAAQ;GAAO;YAE9B,oBAAC,MAAD;GACE,GAAI;GACJ,WAAW,KACT,WACA,QACE,qLACF,WAAW,+CACX,QAAQ,WAAW,6CACnB,QAAQ,CAAC,WAAW,gDACrB;GACD,CAAA;EACuB,CAAA;;AAI/B,SAAgB,YAAY,EAAE,WAAW,GAAG,SAA+C;CACzF,MAAM,EAAE,OAAO,SAAS,IAAI,aAAa;AAEzC,QACE,oBAAC,MAAD;EACE,GAAI;EACJ,WAAW,KACT,WACA,+IACA,QAAQ,uEACR,CAAC,SAAS,6BACX;EACD,CAAA;;AAIN,SAAgB,UAAU,EAAE,WAAW,UAAU,GAAG,SAA+C;CACjG,MAAM,EAAE,OAAO,OAAO,MAAM,YAAY,IAAI,aAAa;CACzD,MAAM,EAAE,MAAM,QAAQ,UAAU,IAAI,gBAAgB;CACpD,MAAM,CAAC,SAAS,cAAc,SAA6B,KAAK;AAEhE,QACE,qBAAC,MAAD;EACE,KAAK,OAAO,aAAa,KAAA;EACzB,GAAI;EACJ,WAAW,KACT,WACA,kFACA,CAAC,WAAW,kDACZ,QAAQ,uEACR,QAAQ,WAAW,QACnB,CAAC,SAAS,6BACX;YAVH,CAYG,QACC,oBAAC,MAAD;GACE,iBAAA;GACM;GACE;GACR,cAAY;GACZ,UAAU,SAAS,2BAA2B,OAAO,IAAI;GACzD,WAAU;GACV,CAAA,EAEH,SACE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { VariantProps } from 'class-variance-authority';
|
|
2
|
+
declare const badgeStyles: (props?: ({
|
|
3
|
+
size?: "sm" | "md" | null | undefined;
|
|
4
|
+
position?: "inline" | "bottom-right" | "bottom-left" | "bottom-center" | null | undefined;
|
|
5
|
+
colorScheme?: "light" | "dark" | null | undefined;
|
|
6
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
7
|
+
interface BuiltWithRevealUIProps extends VariantProps<typeof badgeStyles> {
|
|
8
|
+
variant?: 'full' | 'logo';
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function BuiltWithRevealUI({ size, position, colorScheme, variant, className, }: BuiltWithRevealUIProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=BuiltWithRevealUI.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuiltWithRevealUI.d.ts","sourceRoot":"","sources":["../../src/components/BuiltWithRevealUI.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,WAAW;;;;8EAyBhB,CAAC;AAEF,UAAU,sBAAuB,SAAQ,YAAY,CAAC,OAAO,WAAW,CAAC;IACvE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,OAAgB,EAChB,SAAS,GACV,EAAE,sBAAsB,2CAqBxB"}
|
|
@@ -6,7 +6,9 @@ declare const buttonVariants: (props?: ({
|
|
|
6
6
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
7
7
|
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
8
8
|
asChild?: boolean;
|
|
9
|
+
isLoading?: boolean;
|
|
10
|
+
ref?: React.Ref<HTMLButtonElement>;
|
|
9
11
|
}
|
|
10
|
-
declare
|
|
12
|
+
declare function Button({ asChild, className, isLoading, size, variant, ref, children, disabled, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
11
13
|
export { Button, buttonVariants };
|
|
12
14
|
//# sourceMappingURL=Button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,cAAc;;;8EA0BnB,CAAC;AAEF,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACnD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;CACpC;AAED,iBAAS,MAAM,CAAC,EACd,OAAe,EACf,SAAS,EACT,SAAS,EACT,IAAI,EACJ,OAAO,EACP,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,2CAoCb;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
declare
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
declare
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
declare function Card({ className, ref, ...props }: React.HTMLAttributes<HTMLDivElement> & {
|
|
3
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
4
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare function CardHeader({ className, ref, ...props }: React.HTMLAttributes<HTMLDivElement> & {
|
|
6
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
declare function CardTitle({ className, ref, ...props }: React.HTMLAttributes<HTMLHeadingElement> & {
|
|
9
|
+
ref?: React.Ref<HTMLParagraphElement>;
|
|
10
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
declare function CardDescription({ className, ref, ...props }: React.HTMLAttributes<HTMLParagraphElement> & {
|
|
12
|
+
ref?: React.Ref<HTMLParagraphElement>;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
declare function CardContent({ className, ref, ...props }: React.HTMLAttributes<HTMLDivElement> & {
|
|
15
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
16
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
declare function CardFooter({ className, ref, ...props }: React.HTMLAttributes<HTMLDivElement> & {
|
|
18
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
19
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
20
|
export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
|
|
9
21
|
//# sourceMappingURL=Card.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,iBAAS,IAAI,CAAC,EACZ,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;CAAE,2CAQ5E;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;CAAE,2CAE5E;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;CAAE,2CAQtF;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;CAAE,2CAExF;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;CAAE,2CAE5E;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;CAAE,2CAE5E;AAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -3,9 +3,12 @@ export interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputE
|
|
|
3
3
|
checked?: boolean;
|
|
4
4
|
defaultChecked?: boolean;
|
|
5
5
|
onCheckedChange?(this: void, checked: boolean | 'indeterminate'): void;
|
|
6
|
+
ref?: React.Ref<HTMLInputElement>;
|
|
6
7
|
}
|
|
7
|
-
declare
|
|
8
|
-
export
|
|
9
|
-
|
|
8
|
+
declare function Checkbox({ checked, defaultChecked, disabled, onCheckedChange, className, ref, ...props }: CheckboxProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export interface CheckboxIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
10
|
+
ref?: React.Ref<HTMLSpanElement>;
|
|
11
|
+
}
|
|
12
|
+
declare function CheckboxIndicator({ className, ref, ...props }: CheckboxIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
10
13
|
export { Checkbox, CheckboxIndicator };
|
|
11
14
|
//# sourceMappingURL=Checkbox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../src/components/Checkbox.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../src/components/Checkbox.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,MAAM,WAAW,aACf,SAAQ,IAAI,CACV,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAC3C,SAAS,GAAG,gBAAgB,GAAG,MAAM,GAAG,UAAU,CACnD;IACD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAAC;IACvE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACnC;AAGD,iBAAS,QAAQ,CAAC,EAChB,OAAO,EACP,cAAc,EACd,QAAQ,EACR,eAAe,EACf,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,aAAa,2CA2Df;AAED,MAAM,WAAW,sBAAuB,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;IACnF,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;CAClC;AAGD,iBAAS,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,sBAAsB,2CAuB9E;AAGD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC"}
|