@craftzbay/ui 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/ui/Avatar.d.ts +2 -2
- package/dist-lib/components/ui/Sidebar.d.ts +7 -0
- package/dist-lib/index.cjs +3 -3
- package/dist-lib/index.cjs.map +1 -1
- package/dist-lib/index.js +1110 -1090
- package/dist-lib/index.js.map +1 -1
- package/package.json +1 -1
package/dist-lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/lib/utils.ts","../src/hooks/use-media-query.ts","../src/hooks/use-toast.ts","../src/components/ui/Accordion.tsx","../src/components/ui/Alert.tsx","../src/components/ui/Avatar.tsx","../src/components/ui/Badge.tsx","../src/components/ui/Breadcrumbs.tsx","../src/components/ui/Button.tsx","../src/components/ui/Card.tsx","../src/components/ui/Checkbox.tsx","../src/components/ui/Combobox.tsx","../src/components/ui/CommandPalette.tsx","../src/components/ui/ContextMenu.tsx","../src/components/ui/DropdownMenu.tsx","../src/components/ui/IconButton.tsx","../src/components/ui/Input.tsx","../src/components/ui/Table.tsx","../src/components/ui/Skeleton.tsx","../src/components/ui/DataGrid.tsx","../src/components/ui/DatePicker.tsx","../src/components/ui/Dialog.tsx","../src/components/ui/EmptyState.tsx","../src/components/ui/ErrorState.tsx","../src/components/ui/Form.tsx","../src/components/ui/Kbd.tsx","../src/components/ui/MultiSelect.tsx","../src/components/ui/Select.tsx","../src/components/ui/Pagination.tsx","../src/components/ui/Popover.tsx","../src/components/ui/Progress.tsx","../src/components/ui/RadioGroup.tsx","../src/components/ui/ScrollArea.tsx","../src/components/ui/Separator.tsx","../src/components/ui/Sheet.tsx","../src/components/ui/Sidebar.tsx","../src/components/ui/Slider.tsx","../src/components/ui/Spinner.tsx","../src/components/ui/Stepper.tsx","../src/components/ui/Switch.tsx","../src/components/ui/Tabs.tsx","../src/components/ui/Textarea.tsx","../src/components/ui/Toast.tsx","../src/components/ui/Tooltip.tsx","../src/components/ui/TopNav.tsx","../src/components/ui/Calendar.tsx","../node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js","../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js","../node_modules/.pnpm/embla-carousel-react@8.6.0_react@18.3.1/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js","../src/components/ui/Carousel.tsx","../src/components/ui/Chart.tsx","../node_modules/.pnpm/vaul@1.1.2_@types+react-dom@18.3.7_@types+react@18.3.28__@types+react@18.3.28_react-dom@18.3._dlyogjwbo72vf7wiasjo4k6qdi/node_modules/vaul/dist/index.mjs","../src/components/ui/Drawer.tsx","../src/components/ui/FileUpload.tsx","../src/components/ui/Snackbar.tsx","../src/components/ui/TagInput.tsx","../src/components/ui/Timeline.tsx","../src/components/ui/Tree.tsx","../src/components/patterns/Authentication.tsx","../src/components/patterns/AppShell.tsx","../src/components/patterns/Settings.tsx","../src/components/patterns/DataTablePage.tsx","../src/components/patterns/RecordDetail.tsx","../src/components/patterns/Onboarding.tsx","../src/components/patterns/Pricing.tsx","../src/components/patterns/FirstRunEmpty.tsx"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Compose Tailwind class names safely.\n *\n * - `clsx` handles conditionals, arrays, and objects.\n * - `tailwind-merge` resolves conflicts: `cn('p-2', condition && 'p-4')` returns `'p-4'`.\n *\n * Use this everywhere classes are composed. Never concatenate Tailwind\n * classes with template strings — they will not de-duplicate.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Tiny helper to build a stable id for label/aria-describedby pairings\n * when the component does not receive an `id` from the consumer.\n */\nlet __idCounter = 0;\nexport function uid(prefix = 'ds'): string {\n __idCounter += 1;\n return `${prefix}-${__idCounter}`;\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * Subscribe to a CSS media query. SSR-safe — returns `false` on the server.\n *\n * @example\n * const isDesktop = useMediaQuery('(min-width: 1024px)');\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const list = window.matchMedia(query);\n const onChange = (event: MediaQueryListEvent) => setMatches(event.matches);\n setMatches(list.matches);\n list.addEventListener('change', onChange);\n return () => list.removeEventListener('change', onChange);\n }, [query]);\n\n return matches;\n}\n\n/** Convenience: respect `prefers-reduced-motion`. */\nexport function usePrefersReducedMotion(): boolean {\n return useMediaQuery('(prefers-reduced-motion: reduce)');\n}\n","import { useCallback, useEffect, useState, type ReactNode } from 'react';\n\n/* -----------------------------------------------------------------------------\n * Minimal toast queue + hook. The host app mounts a single <ToastHub> near\n * the root which subscribes to this store; any component can call\n * `useToast().push({...})` from anywhere.\n *\n * Kept dependency-free intentionally — no external state library.\n * --------------------------------------------------------------------------- */\n\nexport type ToastVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface ToastDescriptor {\n /** Auto-generated; consumers can pass an explicit id to update an in-flight toast. */\n id?: string;\n title?: ReactNode;\n description?: ReactNode;\n variant?: ToastVariant;\n /** Milliseconds before auto-dismiss. Default 5000. Set to 0 to keep open. */\n duration?: number;\n /** Action button. The alt text is used for screen reader announcements. */\n action?: {\n label: ReactNode;\n altText: string;\n onClick: () => void;\n };\n}\n\ninterface InternalToast extends ToastDescriptor {\n id: string;\n open: boolean;\n}\n\ntype Listener = (toasts: InternalToast[]) => void;\n\nconst store = {\n toasts: [] as InternalToast[],\n listeners: new Set<Listener>(),\n emit(this: typeof store) {\n for (const listener of this.listeners) listener(this.toasts);\n },\n push(this: typeof store, t: ToastDescriptor) {\n const id = t.id ?? `t_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n const next: InternalToast = { open: true, duration: 5000, variant: 'default', ...t, id };\n this.toasts = [next, ...this.toasts].slice(0, 3);\n this.emit();\n return id;\n },\n dismiss(this: typeof store, id: string) {\n this.toasts = this.toasts.map((t) => (t.id === id ? { ...t, open: false } : t));\n this.emit();\n },\n remove(this: typeof store, id: string) {\n this.toasts = this.toasts.filter((t) => t.id !== id);\n this.emit();\n },\n};\n\n/**\n * Subscribe to the toast queue and dispatch new toasts.\n *\n * @example\n * const toast = useToast();\n * toast.push({ variant: 'success', title: 'Saved' });\n *\n * // With an action\n * toast.push({\n * title: 'Project archived',\n * action: { label: 'Undo', altText: 'Undo archive', onClick: undo },\n * });\n */\nexport function useToast() {\n const [toasts, setToasts] = useState<InternalToast[]>(() => [...store.toasts]);\n\n useEffect(() => {\n const listener: Listener = (next) => setToasts([...next]);\n store.listeners.add(listener);\n return () => {\n store.listeners.delete(listener);\n };\n }, []);\n\n const push = useCallback((t: ToastDescriptor) => store.push(t), []);\n const dismiss = useCallback((id: string) => store.dismiss(id), []);\n const remove = useCallback((id: string) => store.remove(id), []);\n\n return { toasts, push, dismiss, remove };\n}\n\n/** Convenience export — dispatch a toast outside React (e.g. from an API client). */\nexport const toast = (t: ToastDescriptor) => store.push(t);\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { ChevronDown } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/**\n * Accessible disclosure list. Supports single (`type=\"single\"`) and multiple\n * (`type=\"multiple\"`) open behaviour — both come from Radix.\n *\n * @example FAQ\n * <Accordion type=\"single\" collapsible>\n * <AccordionItem value=\"q1\">\n * <AccordionTrigger>Can I cancel anytime?</AccordionTrigger>\n * <AccordionContent>Yes — usage stops at the end of the billing period.</AccordionContent>\n * </AccordionItem>\n * …\n * </Accordion>\n *\n * @do Use for FAQs, settings groups, and progressive-disclosure forms.\n * @dont Nest accordions inside accordions — the focus order becomes opaque.\n */\nexport const Accordion = AccordionPrimitive.Root;\n\nexport const AccordionItem = forwardRef<\n ElementRef<typeof AccordionPrimitive.Item>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(function AccordionItem({ className, ...props }, ref) {\n return (\n <AccordionPrimitive.Item ref={ref} className={cn('border-b border-border', className)} {...props} />\n );\n});\nAccordionItem.displayName = 'AccordionItem';\n\nexport const AccordionTrigger = forwardRef<\n ElementRef<typeof AccordionPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(function AccordionTrigger({ className, children, ...props }, ref) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex flex-1 items-center justify-between gap-2 py-4 text-left text-sm font-medium text-foreground',\n 'outline-none transition-colors duration-[var(--duration-fast)]',\n 'hover:text-accent',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n '[&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDown\n className=\"size-4 shrink-0 text-foreground-subtle transition-transform duration-[var(--duration-base)]\"\n aria-hidden\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n});\nAccordionTrigger.displayName = 'AccordionTrigger';\n\nexport const AccordionContent = forwardRef<\n ElementRef<typeof AccordionPrimitive.Content>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(function AccordionContent({ className, children, ...props }, ref) {\n return (\n <AccordionPrimitive.Content\n ref={ref}\n className={cn(\n 'overflow-hidden text-sm text-foreground-muted',\n 'data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down',\n )}\n {...props}\n >\n <div className={cn('pb-4 pt-0', className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n});\nAccordionContent.displayName = 'AccordionContent';\n","import { forwardRef, useState, type HTMLAttributes, type ReactNode } from 'react';\nimport { AlertTriangle, CheckCircle2, Info, X, XCircle } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst alert = cva(\n ['relative flex w-full gap-3 rounded-lg border p-4', 'text-sm'],\n {\n variants: {\n variant: {\n default: 'border-border bg-background-subtle text-foreground',\n info: 'border-info-border-soft bg-info-soft text-info-text',\n success: 'border-success-border-soft bg-success-soft text-success-text',\n warning: 'border-warning-border-soft bg-warning-soft text-warning-text',\n danger: 'border-danger-border-soft bg-danger-soft text-danger-text',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nconst iconForVariant = {\n default: null,\n info: <Info className=\"size-4 shrink-0 mt-0.5\" aria-hidden />,\n success: <CheckCircle2 className=\"size-4 shrink-0 mt-0.5\" aria-hidden />,\n warning: <AlertTriangle className=\"size-4 shrink-0 mt-0.5\" aria-hidden />,\n danger: <XCircle className=\"size-4 shrink-0 mt-0.5\" aria-hidden />,\n};\n\nexport interface AlertProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof alert> {\n /** Heading. Renders bold above the description. */\n title?: ReactNode;\n /** Show a dismiss (×) button. */\n dismissible?: boolean;\n /** Called when the user dismisses. */\n onDismiss?: () => void;\n /** Override the variant's default icon. Pass `false` to suppress the icon. */\n icon?: ReactNode | false;\n}\n\n/**\n * Inline banner for static page-level or section-level state. For transient\n * notifications use `Toast` instead.\n *\n * @example Inline error\n * <Alert variant=\"danger\" title=\"Payment failed\">\n * Your card was declined. Update your billing info to retry.\n * </Alert>\n *\n * @example Dismissible info\n * <Alert variant=\"info\" dismissible onDismiss={dismiss}>\n * We're improving search — give us feedback at #search-feedback.\n * </Alert>\n *\n * @do Use the closest semantic variant — `info` for neutral facts,\n * `warning` for \"watch out\", `danger` for \"this is broken\".\n * @dont Use Alert for one-time confirmations — that's Toast.\n */\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n { className, variant = 'default', title, dismissible, onDismiss, icon, children, ...props },\n ref,\n) {\n const [open, setOpen] = useState(true);\n if (!open) return null;\n\n const handleDismiss = () => {\n setOpen(false);\n onDismiss?.();\n };\n\n const renderedIcon = icon === false ? null : icon ?? iconForVariant[variant ?? 'default'];\n\n return (\n <div ref={ref} role=\"alert\" className={cn(alert({ variant }), className)} {...props}>\n {renderedIcon}\n <div className=\"flex-1 min-w-0\">\n {title && <h5 className=\"font-medium leading-tight mb-1\">{title}</h5>}\n <div className=\"text-sm leading-relaxed [&_p]:leading-relaxed\">{children}</div>\n </div>\n {dismissible && (\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={handleDismiss}\n className={cn(\n 'inline-flex size-6 shrink-0 items-center justify-center rounded-md',\n 'hover:bg-current/10 outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n )}\n >\n <X className=\"size-3.5\" aria-hidden />\n </button>\n )}\n </div>\n );\n});\nAlert.displayName = 'Alert';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as AvatarPrimitive from '@radix-ui/react-avatar';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst sizeMap = {\n xs: 'size-5 text-[10px]',\n sm: 'size-6 text-xs',\n md: 'size-8 text-xs',\n lg: 'size-10 text-sm',\n xl: 'size-12 text-base',\n} as const;\n\nconst avatar = cva(\n [\n 'relative inline-flex shrink-0 overflow-hidden rounded-full',\n 'bg-background-muted text-foreground-muted',\n ],\n {\n variants: {\n size: sizeMap,\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nexport interface AvatarProps\n extends ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>,\n VariantProps<typeof avatar> {\n /** Image URL. If absent or fails to load, fallback initials are shown. */\n src?: string;\n /** Alt text for the image; falls back to fallback when there's no `src`. */\n alt?: string;\n /** Initials shown when image is missing or loading. Pass at most 2 characters. */\n fallback?: string;\n /** Status dot rendered on the bottom-right. */\n status?: 'online' | 'busy' | 'away' | 'offline';\n}\n\nconst statusColour: Record<NonNullable<AvatarProps['status']>, string> = {\n online: 'bg-success',\n busy: 'bg-danger',\n away: 'bg-warning',\n offline: 'bg-foreground-subtle',\n};\n\n/**\n * Avatar with image, initials fallback, and optional status dot.\n *\n * @example\n * <Avatar src={user.photo} alt={user.name} fallback={getInitials(user.name)} status=\"online\" />\n *\n * @example AvatarGroup\n * <AvatarGroup max={3}>\n * {users.map(u => <Avatar key={u.id} src={u.photo} fallback={getInitials(u.name)} />)}\n * </AvatarGroup>\n *\n * @do Provide `alt` for image avatars and meaningful initials for the\n * fallback so screen readers announce something useful.\n * @dont Use the status dot without a tooltip explaining what it means.\n */\nexport const Avatar = forwardRef<ElementRef<typeof AvatarPrimitive.Root>, AvatarProps>(\n function Avatar({ className, size, src, alt, fallback, status, ...props }, ref) {\n return (\n <AvatarPrimitive.Root ref={ref} className={cn(avatar({ size }), className)} {...props}>\n {src && (\n <AvatarPrimitive.Image\n src={src}\n alt={alt ?? ''}\n className=\"aspect-square size-full object-cover\"\n />\n )}\n <AvatarPrimitive.Fallback\n delayMs={src ? 200 : 0}\n className=\"flex size-full items-center justify-center bg-background-muted font-medium uppercase\"\n >\n {fallback ?? '?'}\n </AvatarPrimitive.Fallback>\n {status && (\n <span\n aria-label={`Status: ${status}`}\n className={cn(\n 'absolute bottom-0 right-0 block size-1/4 rounded-full ring-2 ring-background',\n statusColour[status],\n )}\n />\n )}\n </AvatarPrimitive.Root>\n );\n },\n);\nAvatar.displayName = 'Avatar';\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Maximum visible avatars before showing a \"+N\" overflow chip. */\n max?: number;\n /** Avatar size applied to children + overflow. */\n size?: keyof typeof sizeMap;\n /** Children — Avatars. */\n children: ReactNode;\n}\n\n/**\n * Overlapping avatars with overflow indicator. Pass plain `<Avatar>` children.\n */\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(function AvatarGroup(\n { max = 4, size = 'md', className, children, ...props },\n ref,\n) {\n const items = Array.isArray(children) ? children : [children];\n const visible = items.slice(0, max);\n const overflow = items.length - visible.length;\n\n return (\n <div ref={ref} className={cn('flex items-center -space-x-2', className)} {...props}>\n {visible.map((child, i) => (\n <div key={i} className=\"ring-2 ring-background rounded-full\">\n {child}\n </div>\n ))}\n {overflow > 0 && (\n <div\n className={cn(\n 'inline-flex items-center justify-center rounded-full bg-background-muted text-foreground-muted ring-2 ring-background',\n sizeMap[size],\n 'font-medium',\n )}\n aria-label={`${overflow} more`}\n >\n +{overflow}\n </div>\n )}\n </div>\n );\n});\nAvatarGroup.displayName = 'AvatarGroup';\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst badge = cva(\n [\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5',\n 'text-xs font-medium whitespace-nowrap',\n ],\n {\n variants: {\n variant: {\n subtle: '',\n outline: 'border bg-transparent',\n },\n tone: {\n neutral: '',\n accent: '',\n success: '',\n warning: '',\n danger: '',\n info: '',\n },\n },\n compoundVariants: [\n // Subtle — coloured fill + matching text.\n { variant: 'subtle', tone: 'neutral', class: 'bg-background-muted text-foreground-muted' },\n { variant: 'subtle', tone: 'accent', class: 'bg-accent-soft text-on-accent-soft' },\n { variant: 'subtle', tone: 'success', class: 'bg-success-soft text-success-text' },\n { variant: 'subtle', tone: 'warning', class: 'bg-warning-soft text-warning-text' },\n { variant: 'subtle', tone: 'danger', class: 'bg-danger-soft text-danger-text' },\n { variant: 'subtle', tone: 'info', class: 'bg-info-soft text-info-text' },\n // Outline — coloured border + text, transparent fill.\n { variant: 'outline', tone: 'neutral', class: 'border-border text-foreground-muted' },\n { variant: 'outline', tone: 'accent', class: 'border-accent text-accent' },\n { variant: 'outline', tone: 'success', class: 'border-success-border-soft text-success-text' },\n { variant: 'outline', tone: 'warning', class: 'border-warning-border-soft text-warning-text' },\n { variant: 'outline', tone: 'danger', class: 'border-danger-border-soft text-danger-text' },\n { variant: 'outline', tone: 'info', class: 'border-info-border-soft text-info-text' },\n ],\n defaultVariants: { variant: 'subtle', tone: 'neutral' },\n },\n);\n\nexport interface BadgeProps\n extends HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badge> {\n /** Show a leading status dot in the same tone. */\n dot?: boolean;\n}\n\nconst dotColour = {\n neutral: 'bg-foreground-subtle',\n accent: 'bg-accent',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n info: 'bg-info',\n} as const;\n\n/**\n * Status pill. Use `subtle` for high-volume contexts (table cells, lists);\n * `outline` when the badge sits on a busy or coloured background.\n *\n * @example\n * <Badge tone=\"success\" dot>Active</Badge>\n * <Badge tone=\"danger\" variant=\"outline\">Failed</Badge>\n *\n * @do Use badges to summarise state, not to label categories — for taxonomies\n * pick a tone palette and stick with it.\n * @dont Use a badge as a button. Wrap it in a Button or use a Toggle.\n */\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { className, variant, tone = 'neutral', dot, children, ...props },\n ref,\n) {\n return (\n <span ref={ref} className={cn(badge({ variant, tone }), className)} {...props}>\n {dot && (\n <span\n aria-hidden\n className={cn('inline-block size-1.5 rounded-full', dotColour[tone ?? 'neutral'])}\n />\n )}\n {children}\n </span>\n );\n});\nBadge.displayName = 'Badge';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { ChevronRight, MoreHorizontal } from '@/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface BreadcrumbItem {\n /** Visible label. */\n label: ReactNode;\n /** Optional URL. Last item is treated as current page even if href is set. */\n href?: string;\n}\n\nexport interface BreadcrumbsProps extends HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n /** Collapse to first + ellipsis + last `n` when items.length exceeds this. */\n maxItems?: number;\n /** Custom link renderer (for next/link, react-router, etc.). */\n renderLink?: (href: string, children: ReactNode) => ReactNode;\n}\n\n/**\n * Breadcrumb trail. Collapses with an ellipsis when there are too many crumbs.\n *\n * @example\n * <Breadcrumbs items={[\n * { label: 'Projects', href: '/projects' },\n * { label: 'Nova', href: '/projects/nova' },\n * { label: 'Settings' },\n * ]} />\n *\n * @example With react-router\n * <Breadcrumbs items={trail} renderLink={(href, c) => <Link to={href}>{c}</Link>} />\n *\n * @do Always omit `href` on the last item — it represents the current page.\n * @dont Use Breadcrumbs for flat navigation. Use TopNav links instead.\n */\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(function Breadcrumbs(\n { items, maxItems = 4, renderLink, className, ...props },\n ref,\n) {\n const shouldCollapse = items.length > maxItems;\n const displayItems =\n !shouldCollapse\n ? items\n : [items[0], { collapsed: true } as const, ...items.slice(-2)];\n\n return (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={cn('text-sm', className)} {...props}>\n <ol className=\"flex flex-wrap items-center gap-1.5 text-foreground-subtle\">\n {displayItems.map((it, i) => {\n const isLast = i === displayItems.length - 1;\n if ('collapsed' in it) {\n return (\n <li key={`ellipsis-${i}`} className=\"flex items-center gap-1.5\">\n <MoreHorizontal className=\"size-4\" aria-hidden />\n <ChevronRight className=\"size-3.5\" aria-hidden />\n </li>\n );\n }\n const item = it as BreadcrumbItem;\n const labelNode = isLast ? (\n <span aria-current=\"page\" className=\"font-medium text-foreground\">\n {item.label}\n </span>\n ) : item.href ? (\n renderLink ? (\n renderLink(item.href, item.label)\n ) : (\n <a\n href={item.href}\n className=\"hover:text-foreground transition-colors duration-[var(--duration-fast)] outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-sm\"\n >\n {item.label}\n </a>\n )\n ) : (\n <span>{item.label}</span>\n );\n return (\n <li key={i} className=\"flex items-center gap-1.5\">\n {labelNode}\n {!isLast && <ChevronRight className=\"size-3.5\" aria-hidden />}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n});\nBreadcrumbs.displayName = 'Breadcrumbs';\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { Loader2 } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\n/* -----------------------------------------------------------------------------\n * Variants — the entire visual surface of the Button.\n *\n * All sizes share the same border radius (md = 6px) per the refined-minimal\n * rules. Focus state is the standardised 2px-ring + 2px-offset on every\n * variant, including `link`.\n * --------------------------------------------------------------------------- */\nconst button = cva(\n [\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap',\n 'rounded-md text-sm font-medium',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'focus-visible:ring-offset-background',\n 'disabled:pointer-events-none disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n primary: [\n 'bg-accent text-on-accent',\n 'hover:bg-accent-700',\n 'active:bg-accent-800',\n ],\n secondary: [\n 'bg-background-muted text-foreground border border-border',\n 'hover:bg-neutral-200 dark:hover:bg-neutral-800',\n 'active:bg-neutral-300 dark:active:bg-neutral-700',\n ],\n outline: [\n 'border border-border bg-transparent text-foreground',\n 'hover:bg-background-muted',\n 'active:bg-background-subtle',\n ],\n ghost: [\n 'bg-transparent text-foreground',\n 'hover:bg-background-muted',\n 'active:bg-background-subtle',\n ],\n destructive: [\n 'bg-danger text-on-danger',\n 'hover:bg-danger-700',\n 'active:bg-danger-800',\n ],\n link: [\n 'bg-transparent text-accent underline-offset-4 px-0',\n 'hover:underline',\n 'active:text-accent-700',\n ],\n },\n size: {\n sm: 'h-8 px-3 text-xs [&_svg]:size-4',\n md: 'h-9 px-3.5 text-sm [&_svg]:size-4',\n lg: 'h-10 px-4 text-sm [&_svg]:size-5',\n icon: 'h-9 w-9 [&_svg]:size-4',\n },\n },\n compoundVariants: [\n // The `link` variant ignores horizontal padding from the size variant.\n { variant: 'link', size: 'sm', class: 'h-auto px-0' },\n { variant: 'link', size: 'md', class: 'h-auto px-0' },\n { variant: 'link', size: 'lg', class: 'h-auto px-0' },\n ],\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n },\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof button> {\n /**\n * Render as a different element via Radix Slot. Useful when wrapping a\n * link: `<Button asChild><a href=\"…\">…</a></Button>`.\n * @default false\n */\n asChild?: boolean;\n /**\n * Show a spinner in place of the leading icon and disable the button.\n * Use for async actions where the user must wait.\n * @default false\n */\n loading?: boolean;\n /** Icon rendered before the label. Replaced by a spinner when loading. */\n leadingIcon?: ReactNode;\n /** Icon rendered after the label. Hidden while loading. */\n trailingIcon?: ReactNode;\n}\n\n/**\n * Primary interactive element. Variants:\n *\n * - `primary` — accent fill, the single most prominent action on a screen.\n * - `secondary` — neutral fill, sits next to a primary or stands alone for\n * secondary actions.\n * - `outline` — border only, transparent fill. Use when next to a primary.\n * - `ghost` — no border, hover background. Use in dense toolbars and tables.\n * - `destructive` — danger fill, reserved for irreversible actions.\n * - `link` — text styled as a link.\n *\n * @example Two-button row\n * <div className=\"flex gap-2 justify-end\">\n * <Button variant=\"outline\">Cancel</Button>\n * <Button>Save changes</Button>\n * </div>\n *\n * @example Loading state\n * <Button loading leadingIcon={<Mail />}>Sending…</Button>\n *\n * @do Use one primary button per major surface. Verb-first labels.\n * @dont Stack three primary buttons in a row — only the most important\n * action gets the primary variant.\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n className,\n variant,\n size,\n asChild = false,\n loading = false,\n leadingIcon,\n trailingIcon,\n disabled,\n children,\n type = 'button',\n ...props\n },\n ref,\n) {\n const isDisabled = disabled || loading;\n const classes = cn(button({ variant, size }), className);\n\n if (asChild) {\n // Slot requires exactly one element child — pass the consumer's element\n // through untouched. The consumer is responsible for any leading/trailing\n // icons inside that element.\n return (\n <Slot\n ref={ref}\n aria-busy={loading || undefined}\n data-loading={loading || undefined}\n className={classes}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type={type}\n aria-busy={loading || undefined}\n disabled={isDisabled}\n data-loading={loading || undefined}\n className={classes}\n {...props}\n >\n {loading ? (\n <Loader2 className=\"animate-spin\" aria-hidden=\"true\" />\n ) : (\n leadingIcon\n )}\n {children}\n {!loading && trailingIcon}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst card = cva(\n [\n 'rounded-lg border bg-card text-card-foreground',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n ],\n {\n variants: {\n variant: {\n default: 'border-border',\n interactive:\n 'border-border hover:border-border-strong hover:bg-background-subtle cursor-pointer',\n },\n padding: {\n none: '',\n sm: 'p-4',\n md: 'p-5',\n lg: 'p-6',\n },\n },\n defaultVariants: {\n variant: 'default',\n padding: 'md',\n },\n },\n);\n\nexport interface CardProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof card> {}\n\n/**\n * Bounded surface used to group related content. Per the refined-minimal\n * rules, cards on the page have a hairline border and no shadow.\n *\n * @example Header + content + footer\n * <Card>\n * <CardHeader>\n * <CardTitle>Storage</CardTitle>\n * <CardDescription>Usage across all projects.</CardDescription>\n * </CardHeader>\n * <CardContent>…</CardContent>\n * <CardFooter><Button>Upgrade</Button></CardFooter>\n * </Card>\n *\n * @example Clickable list row\n * <Card variant=\"interactive\" onClick={open}>…</Card>\n *\n * @do Use the `border` style. If a card needs to \"float\" (modal, dropdown),\n * it isn't a Card — it's a Popover/Dialog.\n * @dont Add `shadow-lg` to Cards. Shadows on inline surfaces violate the\n * refined-minimal direction.\n */\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { className, variant, padding, ...props },\n ref,\n) {\n return <div ref={ref} className={cn(card({ variant, padding }), className)} {...props} />;\n});\nCard.displayName = 'Card';\n\nexport const CardHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CardHeader({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col gap-1 pb-4', className)}\n {...props}\n />\n );\n },\n);\nCardHeader.displayName = 'CardHeader';\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement>>(\n function CardTitle({ className, ...props }, ref) {\n return (\n <h3\n ref={ref}\n className={cn('text-base font-semibold text-foreground leading-tight', className)}\n {...props}\n />\n );\n },\n);\nCardTitle.displayName = 'CardTitle';\n\nexport const CardDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(function CardDescription({ className, ...props }, ref) {\n return (\n <p\n ref={ref}\n className={cn('text-sm text-foreground-muted', className)}\n {...props}\n />\n );\n});\nCardDescription.displayName = 'CardDescription';\n\nexport const CardContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CardContent({ className, ...props }, ref) {\n return <div ref={ref} className={cn('text-sm text-foreground', className)} {...props} />;\n },\n);\nCardContent.displayName = 'CardContent';\n\nexport const CardFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn('flex items-center gap-2 pt-4', className)}\n {...props}\n />\n );\n },\n);\nCardFooter.displayName = 'CardFooter';\n","import { forwardRef, useId, type ComponentPropsWithoutRef, type ElementRef, type ReactNode } from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { Check, Minus } from '@/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface CheckboxProps\n extends Omit<ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>, 'asChild'> {\n /** Visible label rendered to the right of the box. */\n label?: ReactNode;\n /** Secondary description rendered below the label. */\n description?: ReactNode;\n /** Validation error message. */\n error?: ReactNode;\n /** Hide the label visually while keeping it in the a11y tree. */\n hideLabel?: boolean;\n}\n\n/**\n * Checkbox with optional inline label + description. Pass `checked=\"indeterminate\"`\n * for the indeterminate state — Radix renders a `Minus` icon automatically.\n *\n * @example Single\n * <Checkbox label=\"I agree to the terms\" checked={ok} onCheckedChange={setOk} />\n *\n * @example Tri-state header\n * <Checkbox aria-label=\"Select all\"\n * checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n * onCheckedChange={toggleAll} />\n *\n * @do Use indeterminate to summarise child rows in a table header.\n * @dont Use a Checkbox for mutually exclusive choices — use RadioGroup.\n */\nexport const Checkbox = forwardRef<ElementRef<typeof CheckboxPrimitive.Root>, CheckboxProps>(\n function Checkbox({ className, label, description, error, hideLabel, id, disabled, ...props }, ref) {\n const autoId = useId();\n const fieldId = id ?? autoId;\n const descId = description ? `${fieldId}-desc` : undefined;\n const errorId = error ? `${fieldId}-error` : undefined;\n\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <div className=\"flex items-start gap-2.5\">\n <CheckboxPrimitive.Root\n ref={ref}\n id={fieldId}\n disabled={disabled}\n aria-describedby={errorId ?? descId}\n aria-invalid={Boolean(error) || undefined}\n className={cn(\n 'peer mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-sm border',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'data-[state=checked]:bg-accent data-[state=checked]:border-accent data-[state=checked]:text-on-accent',\n 'data-[state=indeterminate]:bg-accent data-[state=indeterminate]:border-accent data-[state=indeterminate]:text-on-accent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n error ? 'border-danger' : 'border-border-strong',\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center\">\n {props.checked === 'indeterminate' ? (\n <Minus className=\"size-3\" aria-hidden strokeWidth={3} />\n ) : (\n <Check className=\"size-3\" aria-hidden strokeWidth={3} />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n\n {label && (\n <div className={cn('flex flex-col gap-0.5', hideLabel && 'sr-only')}>\n <label\n htmlFor={fieldId}\n className={cn(\n 'text-sm text-foreground select-none',\n disabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n {label}\n </label>\n {description && (\n <p id={descId} className=\"text-xs text-foreground-subtle\">\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n )}\n </div>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { Check, ChevronsUpDown, Loader2, X } from '@/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n /** Currently selected value (controlled). */\n value: string | null;\n /** Called when a value is picked or cleared. */\n onChange: (value: string | null) => void;\n /** Static options. Ignored if `loadOptions` is provided. */\n options?: ComboboxOption[];\n /**\n * Async loader called with the current query each time it changes.\n * Use for server-side search.\n */\n loadOptions?: (query: string) => Promise<ComboboxOption[]>;\n /** Visible label above the field. */\n label?: ReactNode;\n /** Hint below the field. Hidden when `error` is set. */\n helperText?: ReactNode;\n /** Validation error. */\n error?: ReactNode;\n /** Placeholder shown when no value is selected. */\n placeholder?: string;\n /** Search placeholder inside the popover. */\n searchPlaceholder?: string;\n /** Empty state copy when nothing matches. */\n emptyText?: string;\n /** Allow clearing the selection with an inline ×. */\n clearable?: boolean;\n /** Disable the entire field. */\n disabled?: boolean;\n /** Field size, matches Input. */\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/**\n * Single-select with typeahead. Use `options` for client-side filtering or\n * `loadOptions` for server-side search.\n *\n * @example Client-side\n * <Combobox label=\"Country\" options={countries} value={c} onChange={setC} />\n *\n * @example Server-side\n * <Combobox label=\"Assignee\"\n * value={user}\n * onChange={setUser}\n * loadOptions={async (q) => api.searchUsers(q)} />\n *\n * @do Use Combobox over Select for >12 options or when the user is expected\n * to know what they want.\n * @dont Re-query on every keystroke without debouncing — pass a debounced\n * `loadOptions` to avoid hammering the server.\n */\nexport const Combobox = forwardRef<HTMLDivElement, ComboboxProps>(function Combobox(\n {\n value,\n onChange,\n options,\n loadOptions,\n label,\n helperText,\n error,\n placeholder = 'Select…',\n searchPlaceholder = 'Search…',\n emptyText = 'No results.',\n clearable = true,\n disabled,\n size = 'md',\n className,\n },\n ref,\n) {\n const autoId = useId();\n const helperId = `${autoId}-helper`;\n const errorId = `${autoId}-error`;\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [loaded, setLoaded] = useState<ComboboxOption[]>([]);\n const [loading, setLoading] = useState(false);\n\n // Resolve options: static or async-loaded.\n const items = loadOptions ? loaded : options ?? [];\n\n useEffect(() => {\n if (!loadOptions || !open) return;\n let cancelled = false;\n setLoading(true);\n loadOptions(query)\n .then((res) => {\n if (!cancelled) setLoaded(res);\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [query, open, loadOptions]);\n\n const selected = useMemo(\n () => items.find((o) => o.value === value) ?? null,\n [items, value],\n );\n\n const triggerHeight = size === 'sm' ? 'h-8' : size === 'lg' ? 'h-10' : 'h-9';\n const triggerPadding = size === 'sm' ? 'px-2.5' : size === 'lg' ? 'px-3.5' : 'px-3';\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(null);\n },\n [onChange],\n );\n\n const isError = Boolean(error);\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5', className)}>\n {label && (\n <label htmlFor={autoId} className=\"text-sm font-medium text-foreground\">\n {label}\n </label>\n )}\n\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n id={autoId}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-invalid={isError || undefined}\n aria-describedby={isError ? errorId : helperText ? helperId : undefined}\n disabled={disabled}\n className={cn(\n 'inline-flex w-full items-center justify-between gap-2 rounded-md border bg-card text-sm text-foreground',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n triggerHeight,\n triggerPadding,\n isError\n ? 'border-danger focus-visible:border-danger focus-visible:ring-danger'\n : 'border-border focus-visible:border-accent focus-visible:ring-ring',\n )}\n >\n <span className={cn('truncate', !selected && 'text-foreground-subtle')}>\n {selected ? selected.label : placeholder}\n </span>\n <span className=\"ml-2 flex items-center gap-1 shrink-0\">\n {clearable && selected && !disabled && (\n <span\n role=\"button\"\n tabIndex={-1}\n onClick={handleClear}\n aria-label=\"Clear selection\"\n className=\"text-foreground-subtle hover:text-foreground\"\n >\n <X className=\"size-4\" aria-hidden />\n </span>\n )}\n <ChevronsUpDown className=\"size-4 text-foreground-subtle\" aria-hidden />\n </span>\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className={cn(\n 'z-[var(--z-popover)] w-[var(--radix-popover-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n )}\n >\n <CommandPrimitive shouldFilter={!loadOptions} className=\"flex h-full w-full flex-col\">\n <div className=\"flex items-center border-b border-border px-3\">\n <CommandPrimitive.Input\n value={query}\n onValueChange={setQuery}\n placeholder={searchPlaceholder}\n className=\"flex h-9 w-full bg-transparent py-2 text-sm outline-none placeholder:text-foreground-subtle\"\n />\n {loading && (\n <Loader2 className=\"size-4 animate-spin text-foreground-subtle\" aria-hidden />\n )}\n </div>\n <CommandPrimitive.List className=\"max-h-64 overflow-y-auto p-1\">\n {items.map((opt) => {\n const isSelected = opt.value === value;\n return (\n <CommandPrimitive.Item\n key={opt.value}\n value={opt.value}\n disabled={opt.disabled}\n onSelect={(v) => {\n onChange(v);\n setOpen(false);\n }}\n className={cn(\n 'flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground',\n 'data-[selected=true]:bg-background-muted',\n 'data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none',\n )}\n >\n <span className=\"flex-1\">{opt.label}</span>\n {opt.description && (\n <span className=\"text-xs text-foreground-subtle\">{opt.description}</span>\n )}\n {isSelected && <Check className=\"size-4 text-accent\" aria-hidden />}\n </CommandPrimitive.Item>\n );\n })}\n {!loading && items.length === 0 && (\n <CommandPrimitive.Empty className=\"px-2 py-6 text-center text-sm text-foreground-subtle\">\n {emptyText}\n </CommandPrimitive.Empty>\n )}\n </CommandPrimitive.List>\n </CommandPrimitive>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-foreground-subtle\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n\nCombobox.displayName = 'Combobox';\n","import {\n forwardRef,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { Search } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * CommandPalette is a Dialog hosting a `cmdk` Command. It supports grouped\n * items, keyboard navigation (handled by cmdk), an empty state, and a\n * pluggable list of \"recent\" items shown when the search input is empty.\n * --------------------------------------------------------------------------- */\n\nexport const Command = forwardRef<\n ElementRef<typeof CommandPrimitive>,\n ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(function Command({ className, ...props }, ref) {\n return (\n <CommandPrimitive\n ref={ref}\n className={cn(\n 'flex h-full w-full flex-col overflow-hidden rounded-lg bg-popover text-popover-foreground',\n className,\n )}\n {...props}\n />\n );\n});\nCommand.displayName = 'Command';\n\nexport const CommandInput = forwardRef<\n ElementRef<typeof CommandPrimitive.Input>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(function CommandInput({ className, ...props }, ref) {\n return (\n <div className=\"flex items-center gap-2 border-b border-border px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"size-4 shrink-0 text-foreground-subtle\" aria-hidden />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n 'flex h-11 w-full bg-transparent py-3 text-sm outline-none',\n 'placeholder:text-foreground-subtle disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n );\n});\nCommandInput.displayName = 'CommandInput';\n\nexport const CommandList = forwardRef<\n ElementRef<typeof CommandPrimitive.List>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(function CommandList({ className, ...props }, ref) {\n return (\n <CommandPrimitive.List\n ref={ref}\n className={cn('max-h-[320px] overflow-y-auto p-1', className)}\n {...props}\n />\n );\n});\nCommandList.displayName = 'CommandList';\n\nexport const CommandEmpty = forwardRef<\n ElementRef<typeof CommandPrimitive.Empty>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(function CommandEmpty(props, ref) {\n return (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"py-8 text-center text-sm text-foreground-subtle\"\n {...props}\n />\n );\n});\nCommandEmpty.displayName = 'CommandEmpty';\n\nexport const CommandGroup = forwardRef<\n ElementRef<typeof CommandPrimitive.Group>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(function CommandGroup({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n 'overflow-hidden text-foreground p-1',\n '[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5',\n '[&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n '[&_[cmdk-group-heading]]:text-foreground-subtle',\n className,\n )}\n {...props}\n />\n );\n});\nCommandGroup.displayName = 'CommandGroup';\n\nexport const CommandSeparator = forwardRef<\n ElementRef<typeof CommandPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(function CommandSeparator({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n );\n});\nCommandSeparator.displayName = 'CommandSeparator';\n\nexport const CommandItem = forwardRef<\n ElementRef<typeof CommandPrimitive.Item>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(function CommandItem({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none',\n 'data-[selected=true]:bg-background-muted data-[selected=true]:text-foreground',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n '[&_svg]:size-4 [&_svg]:text-foreground-subtle',\n className,\n )}\n {...props}\n />\n );\n});\nCommandItem.displayName = 'CommandItem';\n\nexport function CommandShortcut({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <span\n className={cn(\n 'ml-auto inline-flex items-center gap-0.5 text-xs tracking-widest text-foreground-subtle font-mono',\n className,\n )}\n >\n {children}\n </span>\n );\n}\n\n/* -----------------------------------------------------------------------------\n * Dialog wrapper — a ready-to-use ⌘K palette.\n * --------------------------------------------------------------------------- */\n\nexport interface CommandDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n /** Visible label for screen readers. */\n title?: string;\n}\n\nexport function CommandDialog({ open, onOpenChange, children, title = 'Command palette' }: CommandDialogProps) {\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-[var(--z-overlay)] bg-neutral-950/60 backdrop-blur-[2px]',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n )}\n />\n <DialogPrimitive.Content\n className={cn(\n 'fixed left-1/2 top-[20%] z-[var(--z-modal)] -translate-x-1/2',\n 'w-[calc(100%-2rem)] max-w-[640px] overflow-hidden',\n 'rounded-lg border border-border bg-popover text-popover-foreground shadow-lg',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n 'data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95',\n )}\n >\n <DialogPrimitive.Title className=\"sr-only\">{title}</DialogPrimitive.Title>\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n\n/**\n * Hook that wires ⌘K / Ctrl+K to a setter — the canonical way to mount the\n * palette in an app shell.\n *\n * @example\n * const [open, setOpen] = useState(false);\n * useCommandPaletteShortcut(setOpen);\n * …\n * <CommandDialog open={open} onOpenChange={setOpen}>\n * <CommandInput placeholder=\"Type a command…\" />\n * <CommandList>\n * <CommandEmpty>No results.</CommandEmpty>\n * <CommandGroup heading=\"Suggestions\">\n * <CommandItem>Create project</CommandItem>\n * <CommandItem>Invite teammate</CommandItem>\n * </CommandGroup>\n * </CommandList>\n * </CommandDialog>\n *\n * @do Group items by category. Show \"Recent\" first when the query is empty.\n * @dont Hide essential actions behind the palette only — keep at least one\n * button entry in the UI.\n */\nexport function useCommandPaletteShortcut(setOpen: (open: boolean) => void): void {\n const [_, force] = useState(0);\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setOpen(true);\n force((n) => n + 1);\n }\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [setOpen]);\n}\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport * as ContextMenuPrimitive from '@radix-ui/react-context-menu';\nimport { Check, ChevronRight, Circle } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/**\n * Right-click (or two-finger tap) menu. Visual surface mirrors DropdownMenu\n * for consistency.\n *\n * @example\n * <ContextMenu>\n * <ContextMenuTrigger asChild>\n * <div className=\"grid h-32 place-items-center rounded-lg border border-border\">\n * Right-click me\n * </div>\n * </ContextMenuTrigger>\n * <ContextMenuContent>\n * <ContextMenuItem>Open</ContextMenuItem>\n * <ContextMenuSeparator />\n * <ContextMenuItem destructive>Delete</ContextMenuItem>\n * </ContextMenuContent>\n * </ContextMenu>\n *\n * @do Mirror DropdownMenu items for the same surface — users expect the same\n * operations from both.\n * @dont Hide critical actions behind right-click — they must also exist in\n * a visible button or menu.\n */\nexport const ContextMenu = ContextMenuPrimitive.Root;\nexport const ContextMenuTrigger = ContextMenuPrimitive.Trigger;\nexport const ContextMenuGroup = ContextMenuPrimitive.Group;\nexport const ContextMenuPortal = ContextMenuPrimitive.Portal;\nexport const ContextMenuSub = ContextMenuPrimitive.Sub;\nexport const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;\n\nconst itemClasses = cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none',\n 'data-[highlighted]:bg-background-muted data-[highlighted]:text-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n);\n\nexport const ContextMenuSubTrigger = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.SubTrigger>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger>\n>(function ContextMenuSubTrigger({ className, children, ...props }, ref) {\n return (\n <ContextMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(itemClasses, 'data-[state=open]:bg-background-muted', className)}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto size-4 text-foreground-subtle\" aria-hidden />\n </ContextMenuPrimitive.SubTrigger>\n );\n});\nContextMenuSubTrigger.displayName = 'ContextMenuSubTrigger';\n\nexport const ContextMenuSubContent = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.SubContent>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(function ContextMenuSubContent({ className, ...props }, ref) {\n return (\n <ContextMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-[var(--z-popover)] min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md',\n className,\n )}\n {...props}\n />\n );\n});\nContextMenuSubContent.displayName = 'ContextMenuSubContent';\n\nexport const ContextMenuContent = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(function ContextMenuContent({ className, ...props }, ref) {\n return (\n <ContextMenuPortal>\n <ContextMenuPrimitive.Content\n ref={ref}\n className={cn(\n 'z-[var(--z-popover)] min-w-[12rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n </ContextMenuPortal>\n );\n});\nContextMenuContent.displayName = 'ContextMenuContent';\n\nexport const ContextMenuItem = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & { destructive?: boolean }\n>(function ContextMenuItem({ className, destructive, ...props }, ref) {\n return (\n <ContextMenuPrimitive.Item\n ref={ref}\n className={cn(\n itemClasses,\n destructive &&\n 'text-danger-text data-[highlighted]:bg-danger-soft data-[highlighted]:text-danger-text',\n className,\n )}\n {...props}\n />\n );\n});\nContextMenuItem.displayName = 'ContextMenuItem';\n\nexport const ContextMenuCheckboxItem = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(function ContextMenuCheckboxItem({ className, children, ...props }, ref) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(itemClasses, 'pl-8', className)}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Check className=\"size-4 text-accent\" aria-hidden />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n );\n});\nContextMenuCheckboxItem.displayName = 'ContextMenuCheckboxItem';\n\nexport const ContextMenuRadioItem = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.RadioItem>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(function ContextMenuRadioItem({ className, children, ...props }, ref) {\n return (\n <ContextMenuPrimitive.RadioItem\n ref={ref}\n className={cn(itemClasses, 'pl-8', className)}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Circle className=\"size-2 fill-accent text-accent\" aria-hidden />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n );\n});\nContextMenuRadioItem.displayName = 'ContextMenuRadioItem';\n\nexport const ContextMenuLabel = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label>\n>(function ContextMenuLabel({ className, ...props }, ref) {\n return (\n <ContextMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-xs font-medium text-foreground-subtle', className)}\n {...props}\n />\n );\n});\nContextMenuLabel.displayName = 'ContextMenuLabel';\n\nexport const ContextMenuSeparator = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(function ContextMenuSeparator({ className, ...props }, ref) {\n return (\n <ContextMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n );\n});\nContextMenuSeparator.displayName = 'ContextMenuSeparator';\n\nexport function ContextMenuShortcut({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return (\n <span\n className={cn('ml-auto text-xs tracking-widest text-foreground-subtle font-mono', className)}\n {...props}\n />\n );\n}\nContextMenuShortcut.displayName = 'ContextMenuShortcut';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { Check, ChevronRight, Circle } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Full dropdown menu surface with submenu support, separators, checkbox /\n * radio items, and keyboard shortcut labels (Kbd).\n * --------------------------------------------------------------------------- */\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub;\nexport const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst itemClasses = cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none',\n 'data-[highlighted]:bg-background-muted data-[highlighted]:text-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n 'transition-colors duration-[var(--duration-fast)]',\n);\n\nexport const DropdownMenuSubTrigger = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(function DropdownMenuSubTrigger({ className, inset, children, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(itemClasses, 'data-[state=open]:bg-background-muted', inset && 'pl-8', className)}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto size-4 text-foreground-subtle\" aria-hidden />\n </DropdownMenuPrimitive.SubTrigger>\n );\n});\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';\n\nexport const DropdownMenuSubContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(function DropdownMenuSubContent({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-[var(--z-popover)] min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n className,\n )}\n {...props}\n />\n );\n});\nDropdownMenuSubContent.displayName = 'DropdownMenuSubContent';\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(function DropdownMenuContent({ className, sideOffset = 4, align = 'end', ...props }, ref) {\n return (\n <DropdownMenuPortal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'z-[var(--z-popover)] min-w-[12rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1',\n className,\n )}\n {...props}\n />\n </DropdownMenuPortal>\n );\n});\nDropdownMenuContent.displayName = 'DropdownMenuContent';\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n destructive?: boolean;\n }\n>(function DropdownMenuItem({ className, inset, destructive, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n itemClasses,\n inset && 'pl-8',\n destructive &&\n 'text-danger-text data-[highlighted]:bg-danger-soft data-[highlighted]:text-danger-text',\n className,\n )}\n {...props}\n />\n );\n});\nDropdownMenuItem.displayName = 'DropdownMenuItem';\n\nexport const DropdownMenuCheckboxItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(function DropdownMenuCheckboxItem({ className, children, checked, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n checked={checked}\n className={cn(itemClasses, 'pl-8', className)}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"size-4 text-accent\" aria-hidden />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n});\nDropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem';\n\nexport const DropdownMenuRadioItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(function DropdownMenuRadioItem({ className, children, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(itemClasses, 'pl-8', className)}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"size-2 fill-accent text-accent\" aria-hidden />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n});\nDropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem';\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(function DropdownMenuLabel({ className, inset, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n 'px-2 py-1.5 text-xs font-medium text-foreground-subtle',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n );\n});\nDropdownMenuLabel.displayName = 'DropdownMenuLabel';\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(function DropdownMenuSeparator({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n );\n});\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator';\n\n/**\n * Trailing right-aligned shortcut label inside a menu item. Pair with `<Kbd>`\n * inside the Kbd component file if you want stylised keys.\n */\nexport function DropdownMenuShortcut({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return (\n <span\n className={cn('ml-auto text-xs tracking-widest text-foreground-subtle font-mono', className)}\n {...props}\n />\n );\n}\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\n/**\n * @example\n * <DropdownMenu>\n * <DropdownMenuTrigger asChild><IconButton aria-label=\"More\" icon={<MoreHorizontal />} /></DropdownMenuTrigger>\n * <DropdownMenuContent>\n * <DropdownMenuItem>Open<DropdownMenuShortcut>⌘O</DropdownMenuShortcut></DropdownMenuItem>\n * <DropdownMenuItem>Rename</DropdownMenuItem>\n * <DropdownMenuSeparator />\n * <DropdownMenuItem destructive>Delete</DropdownMenuItem>\n * </DropdownMenuContent>\n * </DropdownMenu>\n *\n * @do Group destructive items at the bottom with a separator.\n * @dont Mix link navigation and action items in the same menu — split into\n * two menus or two groups with labels.\n */\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { Loader2 } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst iconButton = cva(\n [\n 'inline-flex items-center justify-center shrink-0',\n 'rounded-md',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'focus-visible:ring-offset-background',\n 'disabled:pointer-events-none disabled:opacity-50',\n '[&_svg]:pointer-events-none',\n ],\n {\n variants: {\n variant: {\n primary: 'bg-accent text-on-accent hover:bg-accent-700 active:bg-accent-800',\n secondary:\n 'bg-background-muted text-foreground border border-border hover:bg-neutral-200 dark:hover:bg-neutral-800',\n outline:\n 'border border-border bg-transparent text-foreground hover:bg-background-muted',\n ghost: 'bg-transparent text-foreground-muted hover:bg-background-muted hover:text-foreground',\n destructive: 'bg-danger text-on-danger hover:bg-danger-700 active:bg-danger-800',\n },\n size: {\n sm: 'h-7 w-7 [&_svg]:size-3.5',\n md: 'h-8 w-8 [&_svg]:size-4',\n lg: 'h-10 w-10 [&_svg]:size-5',\n },\n },\n defaultVariants: {\n variant: 'ghost',\n size: 'md',\n },\n },\n);\n\nexport interface IconButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof iconButton> {\n /**\n * Accessible label for screen readers. **Required** — an icon-only button\n * with no label is invisible to assistive tech.\n */\n 'aria-label': string;\n /** The Lucide icon to render. */\n icon: ReactNode;\n /** Show a spinner instead of the icon. */\n loading?: boolean;\n}\n\n/**\n * Square, icon-only button. Default variant is `ghost` because most\n * IconButtons sit in dense toolbars or tables. Always pass `aria-label`.\n *\n * @example Toolbar action\n * <IconButton aria-label=\"Edit row\" icon={<Edit2 />} onClick={onEdit} />\n *\n * @example Dismissible chip\n * <IconButton aria-label=\"Remove tag\" size=\"sm\" icon={<X />} />\n *\n * @do Use `ghost` for in-row actions; `outline` when next to a label-less\n * primary button you want users to consider as an alternative.\n * @dont Use IconButton when the action's meaning isn't universally\n * recognised. If users need to learn the icon, ship a Button with text.\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { className, variant, size, icon, loading, disabled, type = 'button', ...props },\n ref,\n) {\n const isDisabled = disabled || loading;\n return (\n <button\n ref={ref}\n type={type}\n aria-busy={loading || undefined}\n disabled={isDisabled}\n className={cn(iconButton({ variant, size }), className)}\n {...props}\n >\n {loading ? <Loader2 className=\"animate-spin\" aria-hidden=\"true\" /> : icon}\n </button>\n );\n});\n\nIconButton.displayName = 'IconButton';\n","import {\n forwardRef,\n useId,\n useState,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Eye, EyeOff, Search, X } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\n/* -----------------------------------------------------------------------------\n * Field-shell variants. The inner <input> is unstyled background and gets all\n * its visual treatment from this wrapper so prefix / suffix / clear slots\n * share the same border + focus state with no double rings.\n * --------------------------------------------------------------------------- */\nconst field = cva(\n [\n 'group inline-flex items-center w-full',\n 'rounded-md border bg-card text-sm',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'has-disabled:opacity-50 has-disabled:pointer-events-none',\n 'focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-offset-background',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 px-2.5 gap-1.5',\n md: 'h-9 px-3 gap-2',\n lg: 'h-10 px-3.5 gap-2',\n },\n tone: {\n default: 'border-border focus-within:border-accent focus-within:ring-ring',\n error: 'border-danger focus-within:border-danger focus-within:ring-danger',\n },\n },\n defaultVariants: {\n size: 'md',\n tone: 'default',\n },\n },\n);\n\nconst innerInput = cva([\n 'flex-1 min-w-0 bg-transparent outline-none',\n 'placeholder:text-foreground-subtle',\n 'text-foreground',\n 'disabled:cursor-not-allowed',\n]);\n\ntype InputType = 'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url';\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'>,\n VariantProps<typeof field> {\n /** Field type. `password` enables a show/hide toggle; `search` adds a clear button. */\n type?: InputType;\n /** Visible label rendered above the input. */\n label?: ReactNode;\n /** Hint below the input. Hidden while `error` is set. */\n helperText?: ReactNode;\n /** Validation message. Renders in `danger` colour and sets `aria-invalid`. */\n error?: ReactNode;\n /** Content rendered inside the field, before the input — icon or short text. */\n prefix?: ReactNode;\n /** Content rendered inside the field, after the input. */\n suffix?: ReactNode;\n /** Show an inline clear (×) button when the input has a value. */\n clearable?: boolean;\n /** Fires when the clear button is pressed. The consumer owns the state. */\n onClear?: () => void;\n /** Visually conceal the label while keeping it for screen readers. */\n hideLabel?: boolean;\n}\n\n/**\n * Text-style input with optional label, helper / error, prefix / suffix,\n * clear, and password show-hide. Wraps a single native `<input>` so it works\n * with `react-hook-form` and any controlled / uncontrolled pattern.\n *\n * @example Email with helper\n * <Input type=\"email\" label=\"Work email\" helperText=\"We never share this.\" />\n *\n * @example Password with show/hide\n * <Input type=\"password\" label=\"Password\" autoComplete=\"current-password\" />\n *\n * @example Search with clear\n * <Input type=\"search\" placeholder=\"Search…\" value={q} onChange={…}\n * clearable onClear={() => setQ('')} />\n *\n * @do Always pair an input with a visible label. If space forces hiding it,\n * use `hideLabel` so the label stays in the accessibility tree.\n * @dont Use placeholder as the only label — placeholders disappear on input\n * and fail accessibility.\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n className,\n type = 'text',\n size,\n tone,\n label,\n helperText,\n error,\n prefix,\n suffix,\n clearable,\n onClear,\n hideLabel,\n id,\n disabled,\n value,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const fieldId = id ?? autoId;\n const helperId = `${fieldId}-helper`;\n const errorId = `${fieldId}-error`;\n\n const [showPassword, setShowPassword] = useState(false);\n const effectiveType =\n type === 'password' ? (showPassword ? 'text' : 'password') : type;\n\n const isError = Boolean(error);\n const effectiveTone = isError ? 'error' : tone;\n\n // Pre-fill prefix slot for search type.\n const renderedPrefix =\n prefix ?? (type === 'search' ? <Search className=\"size-4 text-foreground-subtle\" aria-hidden /> : null);\n\n const hasValue = value !== undefined && value !== '' && value !== null;\n\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n {label && (\n <label\n htmlFor={fieldId}\n className={cn(\n 'text-sm font-medium text-foreground',\n hideLabel && 'sr-only',\n )}\n >\n {label}\n </label>\n )}\n\n <div className={cn(field({ size, tone: effectiveTone }))}>\n {renderedPrefix && (\n <span className=\"flex items-center text-foreground-subtle [&_svg]:size-4\">\n {renderedPrefix}\n </span>\n )}\n\n <input\n ref={ref}\n id={fieldId}\n type={effectiveType}\n disabled={disabled}\n value={value}\n aria-invalid={isError || undefined}\n aria-describedby={\n error ? errorId : helperText ? helperId : undefined\n }\n className={cn(innerInput())}\n {...props}\n />\n\n {clearable && hasValue && (\n <button\n type=\"button\"\n onClick={onClear}\n tabIndex={-1}\n aria-label=\"Clear input\"\n className=\"flex items-center text-foreground-subtle hover:text-foreground\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n )}\n\n {type === 'password' && (\n <button\n type=\"button\"\n onClick={() => setShowPassword((p) => !p)}\n tabIndex={-1}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n aria-pressed={showPassword}\n className=\"flex items-center text-foreground-subtle hover:text-foreground\"\n >\n {showPassword ? (\n <EyeOff className=\"size-4\" aria-hidden />\n ) : (\n <Eye className=\"size-4\" aria-hidden />\n )}\n </button>\n )}\n\n {suffix && (\n <span className=\"flex items-center text-foreground-subtle [&_svg]:size-4\">\n {suffix}\n </span>\n )}\n </div>\n\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-foreground-subtle\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n\nInput.displayName = 'Input';\n","import { forwardRef, type HTMLAttributes, type ThHTMLAttributes, type TdHTMLAttributes } from 'react';\nimport { ArrowDown, ArrowUp, ArrowUpDown } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Table primitives — minimal sugar over <table>. Pair with a sortable\n * header helper (`TableSortHeader`) when you need built-in sort visuals.\n * Empty + loading states are pure composition with the rest of the system.\n * --------------------------------------------------------------------------- */\n\nexport const Table = forwardRef<HTMLTableElement, HTMLAttributes<HTMLTableElement>>(\n function Table({ className, ...props }, ref) {\n return (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn('w-full caption-bottom text-sm border-collapse', className)}\n {...props}\n />\n </div>\n );\n },\n);\nTable.displayName = 'Table';\n\nexport const TableHeader = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableHeader({ className, ...props }, ref) {\n return (\n <thead\n ref={ref}\n className={cn(\n 'sticky top-0 z-10 bg-background-subtle text-foreground-muted',\n '[&_tr]:border-b [&_tr]:border-border',\n className,\n )}\n {...props}\n />\n );\n },\n);\nTableHeader.displayName = 'TableHeader';\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableBody({ className, ...props }, ref) {\n return (\n <tbody\n ref={ref}\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n },\n);\nTableBody.displayName = 'TableBody';\n\nexport const TableFooter = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableFooter({ className, ...props }, ref) {\n return (\n <tfoot\n ref={ref}\n className={cn('border-t border-border bg-background-subtle font-medium', className)}\n {...props}\n />\n );\n },\n);\nTableFooter.displayName = 'TableFooter';\n\nexport const TableRow = forwardRef<\n HTMLTableRowElement,\n HTMLAttributes<HTMLTableRowElement> & { selected?: boolean }\n>(function TableRow({ className, selected, ...props }, ref) {\n return (\n <tr\n ref={ref}\n data-selected={selected || undefined}\n className={cn(\n 'border-b border-border transition-colors duration-[var(--duration-fast)]',\n 'hover:bg-background-subtle',\n 'data-[selected]:bg-accent-soft data-[selected]:hover:bg-accent-soft',\n className,\n )}\n {...props}\n />\n );\n});\nTableRow.displayName = 'TableRow';\n\nexport const TableHead = forwardRef<\n HTMLTableCellElement,\n ThHTMLAttributes<HTMLTableCellElement>\n>(function TableHead({ className, ...props }, ref) {\n return (\n <th\n ref={ref}\n className={cn(\n 'h-10 px-3 text-left align-middle text-xs font-medium uppercase tracking-wide text-foreground-subtle',\n '[&:has([role=checkbox])]:w-10 [&:has([role=checkbox])]:pr-0',\n className,\n )}\n {...props}\n />\n );\n});\nTableHead.displayName = 'TableHead';\n\nexport const TableCell = forwardRef<\n HTMLTableCellElement,\n TdHTMLAttributes<HTMLTableCellElement>\n>(function TableCell({ className, ...props }, ref) {\n return (\n <td\n ref={ref}\n className={cn('px-3 py-3 align-middle text-foreground', className)}\n {...props}\n />\n );\n});\nTableCell.displayName = 'TableCell';\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, HTMLAttributes<HTMLTableCaptionElement>>(\n function TableCaption({ className, ...props }, ref) {\n return (\n <caption\n ref={ref}\n className={cn('mt-4 text-sm text-foreground-subtle', className)}\n {...props}\n />\n );\n },\n);\nTableCaption.displayName = 'TableCaption';\n\nexport interface TableSortHeaderProps extends ThHTMLAttributes<HTMLTableCellElement> {\n /** Stable column key used in `currentSort.key`. */\n sortKey: string;\n /** Currently sorted column + direction (or null). */\n currentSort: { key: string; direction: 'asc' | 'desc' } | null;\n /** Called when the user clicks the header. */\n onSortChange: (key: string, direction: 'asc' | 'desc') => void;\n}\n\n/**\n * Sortable column header. Click toggles asc → desc → asc; the icon reflects\n * the current state.\n *\n * @example\n * <TableSortHeader sortKey=\"name\" currentSort={sort} onSortChange={onSort}>\n * Name\n * </TableSortHeader>\n *\n * @do Sort by one column at a time. Multi-sort hides state from users.\n * @dont Sort silently — the icon must change so users see what changed.\n */\nexport const TableSortHeader = forwardRef<HTMLTableCellElement, TableSortHeaderProps>(\n function TableSortHeader(\n { sortKey, currentSort, onSortChange, children, className, ...props },\n ref,\n ) {\n const active = currentSort?.key === sortKey;\n const direction = active ? currentSort?.direction : undefined;\n const handle = () => {\n onSortChange(sortKey, active && direction === 'asc' ? 'desc' : 'asc');\n };\n return (\n <TableHead ref={ref} className={cn('p-0', className)} aria-sort={active ? (direction === 'asc' ? 'ascending' : 'descending') : 'none'} {...props}>\n <button\n type=\"button\"\n onClick={handle}\n className={cn(\n 'inline-flex h-10 w-full items-center gap-1.5 px-3 outline-none',\n 'transition-colors duration-[var(--duration-fast)]',\n 'hover:text-foreground focus-visible:text-foreground',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-sm',\n active && 'text-foreground',\n )}\n >\n {children}\n {direction === 'asc' ? (\n <ArrowUp className=\"size-3.5\" aria-hidden />\n ) : direction === 'desc' ? (\n <ArrowDown className=\"size-3.5\" aria-hidden />\n ) : (\n <ArrowUpDown className=\"size-3.5 opacity-40\" aria-hidden />\n )}\n </button>\n </TableHead>\n );\n },\n);\nTableSortHeader.displayName = 'TableSortHeader';\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n /** Predefined silhouette presets. */\n variant?: 'text' | 'circle' | 'card' | 'avatar';\n}\n\n/**\n * Animated placeholder. Use `Skeleton.Text` / `Skeleton.Avatar` for common\n * shapes; pass `className` directly for one-off sizes.\n *\n * @example List item\n * <div className=\"flex items-center gap-3\">\n * <Skeleton variant=\"avatar\" />\n * <div className=\"space-y-1.5 flex-1\">\n * <Skeleton variant=\"text\" className=\"w-1/3\" />\n * <Skeleton variant=\"text\" className=\"w-1/2\" />\n * </div>\n * </div>\n *\n * @example Card\n * <Skeleton variant=\"card\" className=\"h-32\" />\n *\n * @do Match the silhouette of the eventual content so the layout doesn't\n * shift when data arrives.\n * @dont Show a full-page skeleton for sub-300ms loads — use a single Spinner.\n */\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\n { className, variant, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n aria-hidden\n className={cn(\n 'animate-pulse bg-background-muted',\n variant === 'text' && 'h-3 rounded-sm',\n variant === 'circle' && 'rounded-full aspect-square',\n variant === 'avatar' && 'size-8 rounded-full',\n variant === 'card' && 'rounded-lg',\n !variant && 'rounded-md',\n className,\n )}\n {...props}\n />\n );\n});\nSkeleton.displayName = 'Skeleton';\n","import { useMemo, useState, type ReactNode } from 'react';\nimport { Filter, Settings } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from './DropdownMenu';\nimport { IconButton } from './IconButton';\nimport { Input } from './Input';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n TableSortHeader,\n} from './Table';\nimport { Skeleton } from './Skeleton';\n\nexport interface DataGridColumn<TRow> {\n /** Stable key used for visibility, sort, and React lists. */\n key: string;\n /** Header label. */\n header: ReactNode;\n /** Render the cell. Defaults to the value at `row[key]`. */\n cell?: (row: TRow) => ReactNode;\n /** Cell width — passed to `<col>` so the grid keeps shape during loading. */\n width?: string;\n /** Allow sorting on this column. */\n sortable?: boolean;\n /** Right-align numeric / monetary columns. */\n align?: 'left' | 'right';\n}\n\nexport interface DataGridProps<TRow extends { id: string | number }> {\n columns: DataGridColumn<TRow>[];\n rows: TRow[];\n loading?: boolean;\n /** Initial sort state. */\n sort?: { key: string; direction: 'asc' | 'desc' } | null;\n onSortChange?: (sort: { key: string; direction: 'asc' | 'desc' }) => void;\n /** Show a filter input row above the grid. */\n filter?: { value: string; onChange: (q: string) => void; placeholder?: string };\n /** Empty-state node when no rows are visible. */\n emptyState?: ReactNode;\n className?: string;\n}\n\n/**\n * Composite grid built from `Table` + DropdownMenu + Input. Provides\n * column visibility toggle, an inline filter, sortable headers, and\n * loading / empty states.\n *\n * @example\n * <DataGrid\n * columns={[\n * { key: 'name', header: 'Name', sortable: true },\n * { key: 'status', header: 'Status', cell: r => <Badge tone={...}>{r.status}</Badge> },\n * { key: 'updatedAt', header: 'Updated', align: 'right' },\n * ]}\n * rows={rows}\n * filter={{ value: q, onChange: setQ }}\n * sort={sort}\n * onSortChange={setSort}\n * />\n *\n * @do Provide a meaningful empty state with a primary action when the grid\n * starts empty (no items at all, not just filtered out).\n * @dont Render thousands of rows synchronously — virtualise with `@tanstack/react-virtual`\n * and wrap with this component's headers as a shell.\n */\nexport function DataGrid<TRow extends { id: string | number }>({\n columns,\n rows,\n loading,\n sort,\n onSortChange,\n filter,\n emptyState,\n className,\n}: DataGridProps<TRow>) {\n const [hidden, setHidden] = useState<Record<string, boolean>>({});\n const visibleColumns = useMemo(() => columns.filter((c) => !hidden[c.key]), [columns, hidden]);\n\n const renderRows = () => {\n if (loading) {\n return Array.from({ length: 5 }).map((_, i) => (\n <TableRow key={`skel-${i}`}>\n {visibleColumns.map((c) => (\n <TableCell key={c.key}>\n <Skeleton variant=\"text\" className=\"w-3/4\" />\n </TableCell>\n ))}\n </TableRow>\n ));\n }\n if (rows.length === 0) {\n return (\n <TableRow>\n <TableCell colSpan={visibleColumns.length} className=\"h-32 text-center\">\n {emptyState ?? (\n <span className=\"text-foreground-subtle\">No results.</span>\n )}\n </TableCell>\n </TableRow>\n );\n }\n return rows.map((row) => (\n <TableRow key={row.id}>\n {visibleColumns.map((c) => (\n <TableCell\n key={c.key}\n className={cn(c.align === 'right' && 'text-right tabular')}\n >\n {c.cell ? c.cell(row) : (row as Record<string, unknown>)[c.key] as ReactNode}\n </TableCell>\n ))}\n </TableRow>\n ));\n };\n\n return (\n <div className={cn('flex flex-col gap-3', className)}>\n <div className=\"flex items-center justify-between gap-2\">\n {filter ? (\n <Input\n type=\"search\"\n placeholder={filter.placeholder ?? 'Filter…'}\n value={filter.value}\n onChange={(e) => filter.onChange(e.target.value)}\n clearable\n onClear={() => filter.onChange('')}\n className=\"max-w-sm w-full\"\n hideLabel\n label=\"Filter rows\"\n />\n ) : (\n <div />\n )}\n <div className=\"flex items-center gap-2\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <IconButton aria-label=\"Column visibility\" icon={<Settings />} variant=\"outline\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuLabel>Columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {columns.map((c) => (\n <DropdownMenuCheckboxItem\n key={c.key}\n checked={!hidden[c.key]}\n onCheckedChange={(v) =>\n setHidden((prev) => ({ ...prev, [c.key]: !v }))\n }\n >\n {c.header}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n\n <div className=\"rounded-lg border border-border overflow-hidden\">\n <Table>\n <colgroup>\n {visibleColumns.map((c) => (\n <col key={c.key} style={c.width ? { width: c.width } : undefined} />\n ))}\n </colgroup>\n <TableHeader>\n <TableRow>\n {visibleColumns.map((c) =>\n c.sortable && onSortChange ? (\n <TableSortHeader\n key={c.key}\n sortKey={c.key}\n currentSort={sort ?? null}\n onSortChange={(k, d) => onSortChange({ key: k, direction: d })}\n >\n {c.header}\n </TableSortHeader>\n ) : (\n <TableHead key={c.key} className={cn(c.align === 'right' && 'text-right')}>\n {c.header}\n </TableHead>\n ),\n )}\n </TableRow>\n </TableHeader>\n <TableBody>{renderRows()}</TableBody>\n </Table>\n </div>\n </div>\n );\n}\n","import { forwardRef, useId, useState, type ReactNode } from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { DayPicker, type DateRange } from 'react-day-picker';\nimport 'react-day-picker/style.css';\nimport { Calendar, ChevronLeft, ChevronRight } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Two related components share the same trigger shell:\n *\n * <DatePicker value={date} onChange={setDate} /> // single date\n * <DateRangePicker value={range} onChange={setRange} /> // {from,to}\n * --------------------------------------------------------------------------- */\n\nconst calendarClassNames = {\n root: 'p-3',\n month: 'space-y-2',\n caption: 'flex items-center justify-between px-1 pb-2',\n caption_label: 'text-sm font-medium text-foreground',\n nav: 'flex items-center gap-1',\n nav_button:\n 'inline-flex size-7 items-center justify-center rounded-md text-foreground-muted hover:bg-background-muted hover:text-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring',\n table: 'w-full border-collapse',\n head_row: 'flex',\n head_cell: 'w-9 text-xs font-medium text-foreground-subtle',\n row: 'flex w-full mt-1',\n cell: 'relative size-9 p-0 text-center',\n day: 'inline-flex size-9 items-center justify-center rounded-md text-sm text-foreground transition-colors outline-none hover:bg-background-muted focus-visible:ring-2 focus-visible:ring-ring',\n day_selected: 'bg-accent text-on-accent hover:bg-accent hover:text-on-accent',\n day_today: 'font-semibold text-accent',\n day_outside: 'text-foreground-subtle opacity-50',\n day_disabled: 'text-foreground-subtle opacity-50 pointer-events-none',\n day_range_start: 'rounded-l-md',\n day_range_end: 'rounded-r-md',\n day_range_middle: 'bg-accent-soft text-on-accent-soft rounded-none',\n} as const;\n\nconst calendarComponents = {\n IconLeft: () => <ChevronLeft className=\"size-4\" aria-hidden />,\n IconRight: () => <ChevronRight className=\"size-4\" aria-hidden />,\n};\n\nfunction formatDate(d?: Date): string {\n if (!d) return '';\n return d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n}\n\nfunction PickerTrigger({\n label,\n placeholder,\n hasValue,\n children,\n error,\n fieldId,\n disabled,\n}: {\n label?: ReactNode;\n placeholder: string;\n hasValue: boolean;\n children: ReactNode;\n error?: ReactNode;\n fieldId: string;\n disabled?: boolean;\n}) {\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={fieldId} className=\"text-sm font-medium text-foreground\">\n {label}\n </label>\n )}\n <PopoverPrimitive.Trigger asChild>\n <button\n id={fieldId}\n type=\"button\"\n disabled={disabled}\n aria-invalid={Boolean(error) || undefined}\n className={cn(\n 'inline-flex h-9 w-full items-center justify-start gap-2 rounded-md border bg-card px-3 text-left text-sm',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n error\n ? 'border-danger focus-visible:border-danger focus-visible:ring-danger'\n : 'border-border focus-visible:border-accent focus-visible:ring-ring',\n !hasValue && 'text-foreground-subtle',\n )}\n >\n <Calendar className=\"size-4 text-foreground-subtle\" aria-hidden />\n <span className=\"truncate\">{hasValue ? children : placeholder}</span>\n </button>\n </PopoverPrimitive.Trigger>\n {error && (\n <p role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n )}\n </div>\n );\n}\n\nexport interface DatePickerProps {\n value?: Date;\n onChange: (date: Date | undefined) => void;\n label?: ReactNode;\n placeholder?: string;\n error?: ReactNode;\n disabled?: boolean;\n /** Restrict to a date range. Days outside are not selectable. */\n fromDate?: Date;\n toDate?: Date;\n className?: string;\n}\n\n/**\n * Single-date picker.\n *\n * @example\n * <DatePicker label=\"Date of birth\" value={dob} onChange={setDob} />\n *\n * @do Use locale-aware formatting via the consumer's display layer.\n * @dont Roll a custom calendar — Radix Popover + react-day-picker handles a11y.\n */\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(function DatePicker(\n { value, onChange, label, placeholder = 'Pick a date', error, disabled, fromDate, toDate, className },\n ref,\n) {\n const fieldId = useId();\n const [open, setOpen] = useState(false);\n\n return (\n <div ref={ref} className={cn(className)}>\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PickerTrigger\n label={label}\n placeholder={placeholder}\n hasValue={Boolean(value)}\n error={error}\n fieldId={fieldId}\n disabled={disabled}\n >\n {formatDate(value)}\n </PickerTrigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className=\"z-[var(--z-popover)] rounded-lg border border-border bg-popover text-popover-foreground shadow-md\"\n >\n <DayPicker\n mode=\"single\"\n selected={value}\n onSelect={(d) => {\n onChange(d ?? undefined);\n if (d) setOpen(false);\n }}\n fromDate={fromDate}\n toDate={toDate}\n classNames={calendarClassNames}\n components={calendarComponents}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </div>\n );\n});\nDatePicker.displayName = 'DatePicker';\n\nexport interface DateRangePickerProps {\n value?: DateRange;\n onChange: (range: DateRange | undefined) => void;\n label?: ReactNode;\n placeholder?: string;\n error?: ReactNode;\n disabled?: boolean;\n fromDate?: Date;\n toDate?: Date;\n className?: string;\n}\n\n/**\n * Two-date range picker. `value` is `{from, to}`.\n *\n * @example\n * <DateRangePicker label=\"Reporting period\" value={range} onChange={setRange} />\n */\nexport const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>(function DateRangePicker(\n { value, onChange, label, placeholder = 'Pick a range', error, disabled, fromDate, toDate, className },\n ref,\n) {\n const fieldId = useId();\n const [open, setOpen] = useState(false);\n const hasValue = Boolean(value?.from);\n\n return (\n <div ref={ref} className={cn(className)}>\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PickerTrigger\n label={label}\n placeholder={placeholder}\n hasValue={hasValue}\n error={error}\n fieldId={fieldId}\n disabled={disabled}\n >\n {value?.from && value.to\n ? `${formatDate(value.from)} – ${formatDate(value.to)}`\n : value?.from\n ? formatDate(value.from)\n : ''}\n </PickerTrigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className=\"z-[var(--z-popover)] rounded-lg border border-border bg-popover text-popover-foreground shadow-md\"\n >\n <DayPicker\n mode=\"range\"\n selected={value}\n onSelect={onChange}\n numberOfMonths={2}\n fromDate={fromDate}\n toDate={toDate}\n classNames={calendarClassNames}\n components={calendarComponents}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </div>\n );\n});\nDateRangePicker.displayName = 'DateRangePicker';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { Button, type ButtonProps } from './Button';\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogPortal = DialogPrimitive.Portal;\nexport const DialogClose = DialogPrimitive.Close;\n\nexport const DialogOverlay = forwardRef<\n ElementRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(function DialogOverlay({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-[var(--z-overlay)] bg-neutral-950/60 backdrop-blur-[2px]',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n );\n});\nDialogOverlay.displayName = 'DialogOverlay';\n\nexport interface DialogContentProps\n extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n /** Show the default close (×) button in the top-right. */\n showClose?: boolean;\n /** Dialog width — `sm` 400 / `md` 520 / `lg` 720. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(function DialogContent({ className, children, showClose = true, size = 'md', ...props }, ref) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-1/2 top-1/2 z-[var(--z-modal)] -translate-x-1/2 -translate-y-1/2',\n 'w-[calc(100%-2rem)] rounded-lg border border-border bg-card text-card-foreground shadow-lg',\n 'p-6',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n size === 'sm' && 'max-w-[400px]',\n size === 'md' && 'max-w-[520px]',\n size === 'lg' && 'max-w-[720px]',\n className,\n )}\n {...props}\n >\n {children}\n {showClose && (\n <DialogPrimitive.Close\n aria-label=\"Close\"\n className={cn(\n 'absolute right-4 top-4 inline-flex size-8 items-center justify-center rounded-md text-foreground-subtle',\n 'hover:bg-background-muted hover:text-foreground',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card',\n 'transition-colors duration-[var(--duration-fast)]',\n )}\n >\n <X className=\"size-4\" aria-hidden />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n});\nDialogContent.displayName = 'DialogContent';\n\nexport function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex flex-col gap-1 pb-4', className)} {...props} />;\n}\nDialogHeader.displayName = 'DialogHeader';\n\nexport function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('flex flex-col-reverse gap-2 pt-6 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\nDialogFooter.displayName = 'DialogFooter';\n\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function DialogTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold text-foreground leading-tight', className)}\n {...props}\n />\n );\n});\nDialogTitle.displayName = 'DialogTitle';\n\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function DialogDescription({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-foreground-muted', className)}\n {...props}\n />\n );\n});\nDialogDescription.displayName = 'DialogDescription';\n\n/* -----------------------------------------------------------------------------\n * ConfirmationDialog — pre-composed pattern for destructive/important\n * confirmations. Use this when the body is a single sentence and the only\n * controls are Cancel + Confirm.\n * --------------------------------------------------------------------------- */\n\nexport interface ConfirmationDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: ReactNode;\n description?: ReactNode;\n /** Label of the confirm button. */\n confirmLabel?: string;\n /** Label of the cancel button. */\n cancelLabel?: string;\n /** Variant of the confirm button — typically `primary` or `destructive`. */\n confirmVariant?: ButtonProps['variant'];\n /** Called when the user confirms. Awaited — shows a spinner while pending. */\n onConfirm: () => void | Promise<void>;\n /** Whether the confirm button is currently submitting. */\n loading?: boolean;\n}\n\n/**\n * Confirmation dialog with title, description, cancel + confirm buttons.\n *\n * @example Destructive confirmation\n * <ConfirmationDialog\n * open={open} onOpenChange={setOpen}\n * title=\"Delete project?\"\n * description=\"This permanently deletes the project and all its data.\"\n * confirmLabel=\"Delete project\"\n * confirmVariant=\"destructive\"\n * onConfirm={handleDelete}\n * />\n *\n * @do Lead the title with the action: \"Delete project?\" not \"Are you sure?\".\n * State consequences in the description.\n * @dont Use for low-risk reversible actions — those don't need a dialog.\n */\nexport function ConfirmationDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n confirmVariant = 'primary',\n onConfirm,\n loading,\n}: ConfirmationDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent size=\"sm\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n {description && <DialogDescription>{description}</DialogDescription>}\n </DialogHeader>\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"outline\">{cancelLabel}</Button>\n </DialogClose>\n <Button variant={confirmVariant} loading={loading} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\nConfirmationDialog.displayName = 'ConfirmationDialog';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {\n /** Visual marker — small Lucide icon or custom illustration. */\n icon?: ReactNode;\n /** Heading. One short sentence. */\n title: ReactNode;\n /** Description. One or two sentences max. */\n description?: ReactNode;\n /** Primary action — usually a `<Button>` that creates the missing item. */\n action?: ReactNode;\n /** Secondary helper link — \"Learn more\", \"Import existing\", etc. */\n secondaryAction?: ReactNode;\n}\n\n/**\n * Shown when a list / dataset / surface has no content yet. Tone is helpful,\n * never apologetic.\n *\n * @example\n * <EmptyState\n * icon={<Folder className=\"size-6\" />}\n * title=\"No projects yet\"\n * description=\"Create a project to start tracking work.\"\n * action={<Button>New project</Button>}\n * />\n *\n * @do Lead with the next action. The icon is decoration; the button is the\n * point.\n * @dont Use elaborate illustrations on internal product surfaces — they\n * break the refined-minimal direction.\n */\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\n { icon, title, description, action, secondaryAction, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-border bg-background-subtle p-10 text-center',\n className,\n )}\n {...props}\n >\n {icon && (\n <div className=\"inline-flex size-12 items-center justify-center rounded-full bg-background-muted text-foreground-muted [&_svg]:size-6\">\n {icon}\n </div>\n )}\n <h3 className=\"text-base font-semibold text-foreground leading-tight\">{title}</h3>\n {description && (\n <p className=\"max-w-md text-sm text-foreground-muted leading-relaxed\">{description}</p>\n )}\n {(action || secondaryAction) && (\n <div className=\"mt-2 flex items-center gap-2\">\n {action}\n {secondaryAction}\n </div>\n )}\n </div>\n );\n});\nEmptyState.displayName = 'EmptyState';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { AlertTriangle, XCircle } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { Button } from './Button';\n\nexport interface ErrorStateProps extends HTMLAttributes<HTMLDivElement> {\n /** `404` not-found, `500` server, or `generic` (catch-all). */\n variant?: '404' | '500' | 'generic';\n /** Override the default title. */\n title?: ReactNode;\n /** Override the default description. */\n description?: ReactNode;\n /** Custom action node. Replaces the default retry button. */\n action?: ReactNode;\n /** When provided, renders a default \"Try again\" button calling this handler. */\n onRetry?: () => void;\n}\n\nconst presets = {\n '404': {\n icon: <AlertTriangle />,\n title: 'Page not found',\n description: \"We couldn't find what you were looking for.\",\n },\n '500': {\n icon: <XCircle />,\n title: 'Something went wrong',\n description: \"We're looking into it. Please try again in a moment.\",\n },\n generic: {\n icon: <AlertTriangle />,\n title: 'Unexpected error',\n description: 'Something interrupted this action.',\n },\n} as const;\n\n/**\n * Page-level error placeholder. Pair with `onRetry` for transient failures.\n *\n * @example 500\n * <ErrorState variant=\"500\" onRetry={refetch} />\n *\n * @example Custom\n * <ErrorState title=\"Quota exceeded\"\n * description=\"Your plan allows 1,000 events/day.\"\n * action={<Button>Upgrade plan</Button>} />\n *\n * @do Match the tone to the cause — server errors apologise, user errors\n * explain. Always offer a next step.\n * @dont Show a raw stack trace to end users.\n */\nexport const ErrorState = forwardRef<HTMLDivElement, ErrorStateProps>(function ErrorState(\n { variant = 'generic', title, description, action, onRetry, className, ...props },\n ref,\n) {\n const preset = presets[variant];\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n 'flex flex-col items-center justify-center gap-3 rounded-lg border border-border bg-background-subtle p-10 text-center',\n className,\n )}\n {...props}\n >\n <div className=\"inline-flex size-12 items-center justify-center rounded-full bg-danger-soft text-danger-text [&_svg]:size-6\">\n {preset.icon}\n </div>\n <h3 className=\"text-base font-semibold text-foreground leading-tight\">\n {title ?? preset.title}\n </h3>\n <p className=\"max-w-md text-sm text-foreground-muted leading-relaxed\">\n {description ?? preset.description}\n </p>\n {(action || onRetry) && (\n <div className=\"mt-2 flex items-center gap-2\">\n {action ?? (\n <Button onClick={onRetry} variant=\"outline\">\n Try again\n </Button>\n )}\n </div>\n )}\n </div>\n );\n});\nErrorState.displayName = 'ErrorState';\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n type HTMLAttributes,\n} from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport {\n Controller,\n FormProvider,\n useFormContext,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from 'react-hook-form';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * react-hook-form bindings + accessible label / description / error wiring.\n *\n * Usage:\n * const form = useForm<Values>(…);\n * <Form {...form}>\n * <FormField\n * control={form.control}\n * name=\"email\"\n * render={({ field }) => (\n * <FormItem>\n * <FormLabel>Email</FormLabel>\n * <FormControl><Input type=\"email\" {...field} /></FormControl>\n * <FormDescription>We never share this.</FormDescription>\n * <FormError />\n * </FormItem>\n * )}\n * />\n * </Form>\n * --------------------------------------------------------------------------- */\n\nexport const Form = FormProvider;\n\ninterface FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName;\n}\n\nconst FormFieldContext = createContext<FormFieldContextValue | null>(null);\n\nexport function FormField<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(props: ControllerProps<TFieldValues, TName>) {\n return (\n <FormFieldContext.Provider value={{ name: props.name as string }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n}\n\ninterface FormItemContextValue {\n id: string;\n}\nconst FormItemContext = createContext<FormItemContextValue | null>(null);\n\nexport function useFormField() {\n const fieldContext = useContext(FormFieldContext);\n const itemContext = useContext(FormItemContext);\n const { getFieldState, formState } = useFormContext();\n if (!fieldContext) {\n throw new Error('useFormField must be used inside <FormField>');\n }\n const fieldState = getFieldState(fieldContext.name, formState);\n const id = itemContext?.id ?? '';\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-item`,\n formDescriptionId: `${id}-desc`,\n formMessageId: `${id}-error`,\n ...fieldState,\n };\n}\n\nexport const FormItem = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function FormItem({ className, ...props }, ref) {\n const id = useId();\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn('flex flex-col gap-1.5', className)} {...props} />\n </FormItemContext.Provider>\n );\n },\n);\nFormItem.displayName = 'FormItem';\n\nexport const FormLabel = forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(function FormLabel({ className, ...props }, ref) {\n const { formItemId, error } = useFormField();\n return (\n <LabelPrimitive.Root\n ref={ref}\n htmlFor={formItemId}\n className={cn(\n 'text-sm font-medium text-foreground',\n error && 'text-danger-text',\n className,\n )}\n {...props}\n />\n );\n});\nFormLabel.displayName = 'FormLabel';\n\nexport const FormControl = forwardRef<HTMLElement, React.ComponentPropsWithoutRef<typeof Slot>>(\n function FormControl(props, ref) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={!error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n );\n },\n);\nFormControl.displayName = 'FormControl';\n\nexport const FormDescription = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n function FormDescription({ className, ...props }, ref) {\n const { formDescriptionId } = useFormField();\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={cn('text-xs text-foreground-subtle', className)}\n {...props}\n />\n );\n },\n);\nFormDescription.displayName = 'FormDescription';\n\nexport const FormError = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n function FormError({ className, children, ...props }, ref) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? '') : children;\n if (!body) return null;\n return (\n <p\n ref={ref}\n id={formMessageId}\n role=\"alert\"\n className={cn('text-xs text-danger-text', className)}\n {...props}\n >\n {body}\n </p>\n );\n },\n);\nFormError.displayName = 'FormError';\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface KbdProps extends HTMLAttributes<HTMLElement> {\n /** Visual size — match the surrounding text. */\n size?: 'sm' | 'md';\n}\n\n/**\n * Stylised keyboard shortcut indicator. Compose multiple `<Kbd>` for chords.\n *\n * @example\n * Press <Kbd>⌘</Kbd>+<Kbd>K</Kbd> to open the command palette.\n *\n * @do Use OS-conventional symbols (⌘ ⇧ ⌥ ⌃ ⏎) — keep visuals consistent\n * across the app.\n * @dont Use Kbd for clickable buttons — it implies a real keyboard input.\n */\nexport const Kbd = forwardRef<HTMLElement, KbdProps>(function Kbd(\n { size = 'sm', className, ...props },\n ref,\n) {\n return (\n <kbd\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center rounded border border-border bg-background-subtle font-mono',\n 'text-foreground-muted shadow-xs',\n size === 'sm' ? 'h-5 min-w-5 px-1 text-[10px]' : 'h-6 min-w-6 px-1.5 text-xs',\n className,\n )}\n {...props}\n />\n );\n});\nKbd.displayName = 'Kbd';\n","import {\n forwardRef,\n useCallback,\n useId,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { Check, ChevronsUpDown, X } from '@/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface MultiSelectOption {\n /** Stable, unique value submitted in `onChange`. */\n value: string;\n /** Visible label shown both in the menu and in the selected chip. */\n label: string;\n /** Optional secondary text shown after the label in the menu. */\n description?: string;\n /** Disable selecting this option. */\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps {\n /** All possible options. */\n options: MultiSelectOption[];\n /** Currently selected values. Controlled. */\n value: string[];\n /** Called whenever the selection changes. */\n onChange: (next: string[]) => void;\n /** Visible label above the field. */\n label?: ReactNode;\n /** Hint below the field. Hidden when `error` is set. */\n helperText?: ReactNode;\n /** Validation message. */\n error?: ReactNode;\n /** Empty-state placeholder shown when nothing is selected. */\n placeholder?: string;\n /** Text shown when no options match the search. */\n emptyText?: string;\n /** Max number of chips rendered inline; remainder shown as \"+N more\". */\n maxVisibleChips?: number;\n /** Whether the user can clear all selections with a single click. */\n clearable?: boolean;\n /** Disable the entire field. */\n disabled?: boolean;\n className?: string;\n}\n\n/**\n * Chip-based multi-select with a searchable menu (cmdk under the hood).\n *\n * Keyboard:\n * - Backspace on the input with empty query removes the last chip\n * - Enter / Space toggles the highlighted option\n * - Escape closes the menu\n *\n * @example Tag picker\n * <MultiSelect label=\"Tags\"\n * options={tags}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Pick tags\" />\n *\n * @example Bounded with overflow chip\n * <MultiSelect options={users}\n * value={value}\n * onChange={setValue}\n * maxVisibleChips={3} />\n *\n * @do Cap `maxVisibleChips` (3–5) on narrow surfaces so the field doesn't\n * reflow as the user adds selections.\n * @dont Use MultiSelect for fewer than ~6 options. CheckboxGroup is clearer.\n */\nexport const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(function MultiSelect(\n {\n options,\n value,\n onChange,\n label,\n helperText,\n error,\n placeholder = 'Select…',\n emptyText = 'No results.',\n maxVisibleChips = 4,\n clearable = true,\n disabled,\n className,\n },\n ref,\n) {\n const autoId = useId();\n const fieldId = autoId;\n const helperId = `${autoId}-helper`;\n const errorId = `${autoId}-error`;\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const selected = useMemo(\n () => options.filter((o) => value.includes(o.value)),\n [options, value],\n );\n\n const toggle = useCallback(\n (v: string) => {\n if (value.includes(v)) onChange(value.filter((x) => x !== v));\n else onChange([...value, v]);\n },\n [value, onChange],\n );\n\n const clear = useCallback(() => onChange([]), [onChange]);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Backspace' && query === '' && value.length > 0) {\n onChange(value.slice(0, -1));\n }\n };\n\n const visibleChips = selected.slice(0, maxVisibleChips);\n const overflow = selected.length - visibleChips.length;\n const isError = Boolean(error);\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5', className)}>\n {label && (\n <label htmlFor={fieldId} className=\"text-sm font-medium text-foreground\">\n {label}\n </label>\n )}\n\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <div\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={`${fieldId}-list`}\n aria-haspopup=\"listbox\"\n id={fieldId}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n aria-disabled={disabled || undefined}\n aria-invalid={isError || undefined}\n aria-describedby={isError ? errorId : helperText ? helperId : undefined}\n className={cn(\n 'flex w-full min-h-9 cursor-text flex-wrap items-center gap-1.5 rounded-md border bg-card px-2 py-1 text-sm',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n isError\n ? 'border-danger focus-visible:border-danger focus-visible:ring-danger'\n : 'border-border focus-visible:border-accent focus-visible:ring-ring',\n disabled && 'opacity-50 pointer-events-none',\n )}\n onClick={() => inputRef.current?.focus()}\n >\n {visibleChips.length === 0 && (\n <span className=\"text-foreground-subtle px-1\">{placeholder}</span>\n )}\n {visibleChips.map((opt) => (\n <span\n key={opt.value}\n className=\"inline-flex items-center gap-1 rounded-md bg-accent-soft px-1.5 py-0.5 text-xs font-medium text-on-accent-soft\"\n >\n {opt.label}\n <button\n type=\"button\"\n aria-label={`Remove ${opt.label}`}\n className=\"inline-flex items-center text-on-accent-soft hover:text-foreground\"\n onClick={(e) => {\n e.stopPropagation();\n toggle(opt.value);\n }}\n >\n <X className=\"size-3\" aria-hidden />\n </button>\n </span>\n ))}\n {overflow > 0 && (\n <span className=\"rounded-md bg-background-muted px-1.5 py-0.5 text-xs font-medium text-foreground-muted\">\n +{overflow} more\n </span>\n )}\n <input\n ref={inputRef}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onFocus={() => setOpen(true)}\n className=\"flex-1 min-w-[8ch] bg-transparent text-sm outline-none placeholder:text-foreground-subtle\"\n placeholder={selected.length === 0 ? '' : ''}\n disabled={disabled}\n />\n <span className=\"ml-auto flex items-center gap-1\">\n {clearable && selected.length > 0 && (\n <button\n type=\"button\"\n aria-label=\"Clear all\"\n onClick={(e) => {\n e.stopPropagation();\n clear();\n }}\n className=\"text-foreground-subtle hover:text-foreground\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n )}\n <ChevronsUpDown className=\"size-4 text-foreground-subtle\" aria-hidden />\n </span>\n </div>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className={cn(\n 'z-[var(--z-popover)] w-[var(--radix-popover-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <CommandPrimitive shouldFilter={false} className=\"flex h-full w-full flex-col\">\n <CommandPrimitive.List\n id={`${fieldId}-list`}\n className=\"max-h-64 overflow-y-auto p-1\"\n >\n {options\n .filter((o) => o.label.toLowerCase().includes(query.toLowerCase()))\n .map((opt) => {\n const isSelected = value.includes(opt.value);\n return (\n <CommandPrimitive.Item\n key={opt.value}\n value={opt.value}\n disabled={opt.disabled}\n onSelect={() => toggle(opt.value)}\n className={cn(\n 'flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground',\n 'data-[selected=true]:bg-background-muted',\n 'data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none',\n )}\n >\n <span\n aria-hidden\n className={cn(\n 'flex size-4 items-center justify-center rounded-sm border',\n isSelected ? 'border-accent bg-accent text-on-accent' : 'border-border',\n )}\n >\n {isSelected && <Check className=\"size-3\" aria-hidden />}\n </span>\n <span className=\"flex-1\">{opt.label}</span>\n {opt.description && (\n <span className=\"text-xs text-foreground-subtle\">{opt.description}</span>\n )}\n </CommandPrimitive.Item>\n );\n })}\n <CommandPrimitive.Empty className=\"px-2 py-6 text-center text-sm text-foreground-subtle\">\n {emptyText}\n </CommandPrimitive.Empty>\n </CommandPrimitive.List>\n </CommandPrimitive>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-foreground-subtle\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n\nMultiSelect.displayName = 'MultiSelect';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { Check, ChevronDown, ChevronUp, ChevronsUpDown } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Compound API:\n *\n * <Select value={…} onValueChange={…}>\n * <SelectTrigger placeholder=\"Pick one\" />\n * <SelectContent>\n * <SelectGroup label=\"Active\">\n * <SelectItem value=\"a\">Apple</SelectItem>\n * <SelectItem value=\"b\">Banana</SelectItem>\n * </SelectGroup>\n * </SelectContent>\n * </Select>\n *\n * All accessibility is handled by Radix: keyboard navigation, type-ahead,\n * focus trap, ARIA roles. We only style.\n * --------------------------------------------------------------------------- */\n\nexport const Select = SelectPrimitive.Root;\nexport const SelectValue = SelectPrimitive.Value;\n\nexport interface SelectTriggerProps\n extends Omit<ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>, 'children'> {\n /** Placeholder shown when no value is selected. */\n placeholder?: string;\n /** Trigger height — matches Input sizes. */\n size?: 'sm' | 'md' | 'lg';\n /** Visual tone — `error` swaps the border + ring to danger. */\n tone?: 'default' | 'error';\n}\n\nexport const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(function SelectTrigger({ className, placeholder, size = 'md', tone = 'default', ...props }, ref) {\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex w-full items-center justify-between gap-2 rounded-md border bg-card text-sm text-foreground',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none',\n 'focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'data-[placeholder]:text-foreground-subtle',\n size === 'sm' && 'h-8 px-2.5',\n size === 'md' && 'h-9 px-3',\n size === 'lg' && 'h-10 px-3.5',\n tone === 'default'\n ? 'border-border focus-visible:border-accent focus-visible:ring-ring'\n : 'border-danger focus-visible:border-danger focus-visible:ring-danger',\n className,\n )}\n {...props}\n >\n <SelectPrimitive.Value placeholder={placeholder} />\n <SelectPrimitive.Icon asChild>\n <ChevronsUpDown className=\"size-4 text-foreground-subtle shrink-0\" aria-hidden />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n});\nSelectTrigger.displayName = 'SelectTrigger';\n\nconst scrollBtn =\n 'flex h-6 cursor-default items-center justify-center text-foreground-subtle';\n\nexport const SelectScrollUpButton = forwardRef<\n ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(function SelectScrollUpButton({ className, ...props }, ref) {\n return (\n <SelectPrimitive.ScrollUpButton ref={ref} className={cn(scrollBtn, className)} {...props}>\n <ChevronUp className=\"size-4\" aria-hidden />\n </SelectPrimitive.ScrollUpButton>\n );\n});\nSelectScrollUpButton.displayName = 'SelectScrollUpButton';\n\nexport const SelectScrollDownButton = forwardRef<\n ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(function SelectScrollDownButton({ className, ...props }, ref) {\n return (\n <SelectPrimitive.ScrollDownButton ref={ref} className={cn(scrollBtn, className)} {...props}>\n <ChevronDown className=\"size-4\" aria-hidden />\n </SelectPrimitive.ScrollDownButton>\n );\n});\nSelectScrollDownButton.displayName = 'SelectScrollDownButton';\n\nexport const SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(function SelectContent({ className, children, position = 'popper', ...props }, ref) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n className={cn(\n 'z-[var(--z-popover)] min-w-[var(--radix-select-trigger-width)] max-h-96',\n 'overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground',\n 'shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1',\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport className=\"p-1\">{children}</SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n});\nSelectContent.displayName = 'SelectContent';\n\nexport const SelectLabel = forwardRef<\n ElementRef<typeof SelectPrimitive.Label>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(function SelectLabel({ className, ...props }, ref) {\n return (\n <SelectPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-xs font-medium text-foreground-subtle', className)}\n {...props}\n />\n );\n});\nSelectLabel.displayName = 'SelectLabel';\n\nexport interface SelectItemProps\n extends ComponentPropsWithoutRef<typeof SelectPrimitive.Item> {\n /** Icon shown to the left of the label. */\n leadingIcon?: ReactNode;\n}\n\nexport const SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n SelectItemProps\n>(function SelectItem({ className, children, leadingIcon, ...props }, ref) {\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center gap-2',\n 'rounded-sm px-2 py-1.5 pr-8 text-sm text-foreground outline-none',\n 'data-[highlighted]:bg-background-muted data-[highlighted]:text-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n {leadingIcon && (\n <span className=\"flex items-center text-foreground-subtle [&_svg]:size-4\">\n {leadingIcon}\n </span>\n )}\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <span className=\"absolute right-2 flex items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"size-4 text-accent\" aria-hidden />\n </SelectPrimitive.ItemIndicator>\n </span>\n </SelectPrimitive.Item>\n );\n});\nSelectItem.displayName = 'SelectItem';\n\nexport const SelectSeparator = forwardRef<\n ElementRef<typeof SelectPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(function SelectSeparator({ className, ...props }, ref) {\n return (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n );\n});\nSelectSeparator.displayName = 'SelectSeparator';\n\n/** Optional grouping with a label header. Pure composition over Radix Group + Label. */\nexport interface SelectGroupProps\n extends ComponentPropsWithoutRef<typeof SelectPrimitive.Group> {\n label?: ReactNode;\n}\nexport const SelectGroup = forwardRef<\n ElementRef<typeof SelectPrimitive.Group>,\n SelectGroupProps\n>(function SelectGroup({ label, children, ...props }, ref) {\n return (\n <SelectPrimitive.Group ref={ref} {...props}>\n {label && <SelectLabel>{label}</SelectLabel>}\n {children}\n </SelectPrimitive.Group>\n );\n});\nSelectGroup.displayName = 'SelectGroup';\n\n/**\n * Compose `Select` + `SelectTrigger` + `SelectContent` + `SelectItem` for a\n * single-choice picker. Keyboard, type-ahead, and ARIA come from Radix.\n *\n * @example Basic\n * <Select onValueChange={setStatus}>\n * <SelectTrigger placeholder=\"Status\" />\n * <SelectContent>\n * <SelectItem value=\"open\">Open</SelectItem>\n * <SelectItem value=\"closed\">Closed</SelectItem>\n * </SelectContent>\n * </Select>\n *\n * @example Grouped\n * <SelectContent>\n * <SelectGroup label=\"People\">\n * <SelectItem value=\"anu\">Anu</SelectItem>\n * <SelectItem value=\"bat\">Bat</SelectItem>\n * </SelectGroup>\n * <SelectSeparator />\n * <SelectGroup label=\"Bots\">\n * <SelectItem value=\"robo\">Robo</SelectItem>\n * </SelectGroup>\n * </SelectContent>\n *\n * @do Use `placeholder` on the trigger when there is no default value.\n * @dont Use Select for more than ~12 options — switch to `Combobox`.\n */\n","import { forwardRef, useMemo, type HTMLAttributes } from 'react';\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n} from './Select';\n\nexport interface PaginationProps extends HTMLAttributes<HTMLElement> {\n /** 1-indexed current page. */\n page: number;\n /** Total number of pages. Set to 0 to hide page numbers. */\n pageCount: number;\n /** Called with the new page when navigating. */\n onPageChange: (page: number) => void;\n /** Total item count, for the \"Showing 1-20 of 200\" hint. Omit to hide. */\n totalItems?: number;\n /** Items shown per page (controlled if `onPageSizeChange` is provided). */\n pageSize?: number;\n /** Options for the page-size select. */\n pageSizeOptions?: number[];\n /** Called when the user picks a new page size. */\n onPageSizeChange?: (size: number) => void;\n /** Show first/last (« ») jump buttons. Default true. */\n showJump?: boolean;\n}\n\nfunction pageRange(current: number, total: number, max = 7): (number | 'gap')[] {\n if (total <= max) return Array.from({ length: total }, (_, i) => i + 1);\n const window = 1;\n const result: (number | 'gap')[] = [];\n const start = Math.max(2, current - window);\n const end = Math.min(total - 1, current + window);\n\n result.push(1);\n if (start > 2) result.push('gap');\n for (let i = start; i <= end; i++) result.push(i);\n if (end < total - 1) result.push('gap');\n result.push(total);\n return result;\n}\n\n/**\n * Numbered pagination with prev/next, first/last jumps, page-size selector,\n * and item-count summary.\n *\n * @example\n * <Pagination page={page} pageCount={20} onPageChange={setPage}\n * totalItems={400} pageSize={20}\n * pageSizeOptions={[10, 20, 50]} onPageSizeChange={setSize} />\n *\n * @do Place the count summary on the left and controls on the right.\n * @dont Show numbers when there are >100 pages — use a \"jump to\" input instead.\n */\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(function Pagination(\n {\n page,\n pageCount,\n onPageChange,\n totalItems,\n pageSize,\n pageSizeOptions,\n onPageSizeChange,\n showJump = true,\n className,\n ...props\n },\n ref,\n) {\n const pages = useMemo(() => pageRange(page, pageCount), [page, pageCount]);\n\n const from = pageSize ? (page - 1) * pageSize + 1 : undefined;\n const to = pageSize && totalItems ? Math.min(page * pageSize, totalItems) : undefined;\n\n const goto = (p: number) => {\n if (p < 1 || p > pageCount || p === page) return;\n onPageChange(p);\n };\n\n return (\n <nav\n ref={ref}\n aria-label=\"Pagination\"\n className={cn('flex flex-wrap items-center justify-between gap-3', className)}\n {...props}\n >\n <div className=\"flex items-center gap-3 text-sm text-foreground-muted\">\n {totalItems !== undefined && pageSize !== undefined && (\n <span className=\"tabular\">\n Showing {from}–{to} of {totalItems}\n </span>\n )}\n {pageSizeOptions && onPageSizeChange && pageSize !== undefined && (\n <div className=\"flex items-center gap-2\">\n <label htmlFor=\"page-size\" className=\"sr-only\">\n Rows per page\n </label>\n <Select value={String(pageSize)} onValueChange={(v) => onPageSizeChange(Number(v))}>\n <SelectTrigger size=\"sm\" className=\"w-[7.5rem] whitespace-nowrap\" />\n <SelectContent>\n {pageSizeOptions.map((s) => (\n <SelectItem key={s} value={String(s)}>\n {s} / page\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n </div>\n\n <ul className=\"flex items-center gap-1\">\n {showJump && (\n <li>\n <button\n type=\"button\"\n aria-label=\"Go to first page\"\n disabled={page === 1}\n onClick={() => goto(1)}\n className={navButtonClass}\n >\n <ChevronsLeft className=\"size-4\" aria-hidden />\n </button>\n </li>\n )}\n <li>\n <button\n type=\"button\"\n aria-label=\"Previous page\"\n disabled={page === 1}\n onClick={() => goto(page - 1)}\n className={navButtonClass}\n >\n <ChevronLeft className=\"size-4\" aria-hidden />\n </button>\n </li>\n {pages.map((p, i) =>\n p === 'gap' ? (\n <li key={`gap-${i}`} className=\"px-2 text-foreground-subtle\">\n …\n </li>\n ) : (\n <li key={p}>\n <button\n type=\"button\"\n aria-label={`Page ${p}`}\n aria-current={p === page ? 'page' : undefined}\n onClick={() => goto(p)}\n className={cn(\n 'inline-flex size-8 items-center justify-center rounded-md text-sm tabular outline-none',\n 'transition-colors duration-[var(--duration-fast)]',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n p === page\n ? 'bg-accent text-on-accent font-medium'\n : 'text-foreground-muted hover:bg-background-muted hover:text-foreground',\n )}\n >\n {p}\n </button>\n </li>\n ),\n )}\n <li>\n <button\n type=\"button\"\n aria-label=\"Next page\"\n disabled={page === pageCount}\n onClick={() => goto(page + 1)}\n className={navButtonClass}\n >\n <ChevronRight className=\"size-4\" aria-hidden />\n </button>\n </li>\n {showJump && (\n <li>\n <button\n type=\"button\"\n aria-label=\"Go to last page\"\n disabled={page === pageCount}\n onClick={() => goto(pageCount)}\n className={navButtonClass}\n >\n <ChevronsRight className=\"size-4\" aria-hidden />\n </button>\n </li>\n )}\n </ul>\n </nav>\n );\n});\nPagination.displayName = 'Pagination';\n\nconst navButtonClass = cn(\n 'inline-flex size-8 items-center justify-center rounded-md text-foreground-muted',\n 'transition-colors duration-[var(--duration-fast)]',\n 'hover:bg-background-muted hover:text-foreground',\n 'disabled:opacity-50 disabled:pointer-events-none',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n);\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { cn } from '@/lib/utils';\n\nexport const Popover = PopoverPrimitive.Root;\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\nexport const PopoverClose = PopoverPrimitive.Close;\n\nexport const PopoverContent = forwardRef<\n ElementRef<typeof PopoverPrimitive.Content>,\n ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(function PopoverContent({ className, align = 'center', sideOffset = 4, ...props }, ref) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-[var(--z-popover)] w-72 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-md',\n 'outline-none',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1',\n 'data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n});\nPopoverContent.displayName = 'PopoverContent';\n\n/**\n * @example\n * <Popover>\n * <PopoverTrigger asChild><Button variant=\"outline\">Options</Button></PopoverTrigger>\n * <PopoverContent>…</PopoverContent>\n * </Popover>\n *\n * @do Reserve Popover for low-stakes, transient UI — pickers, mini-forms.\n * @dont Use Popover for navigation menus — that's DropdownMenu.\n */\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type SVGProps,\n} from 'react';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Linear — bar that fills left-to-right.\n * Circular — SVG ring. Both support determinate (value 0..100) and\n * indeterminate (`value` omitted) states.\n * --------------------------------------------------------------------------- */\n\nexport interface ProgressProps\n extends Omit<ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>, 'value'> {\n /** 0–100. Omit for indeterminate. */\n value?: number | null;\n /** Bar height. */\n size?: 'sm' | 'md' | 'lg';\n /** Visual tone. Use `success`/`danger` to colour-code completion state. */\n tone?: 'accent' | 'success' | 'warning' | 'danger';\n}\n\nconst heightMap = { sm: 'h-1', md: 'h-1.5', lg: 'h-2' } as const;\nconst fillTone = {\n accent: 'bg-accent',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n} as const;\n\n/**\n * Linear progress bar.\n *\n * @example\n * <Progress value={uploadPct} aria-label=\"Upload progress\" />\n * <Progress aria-label=\"Loading\" /> // indeterminate\n *\n * @do Always pair Progress with an `aria-label` describing what is progressing.\n * @dont Use a Progress for an unknown-completion task — use a Spinner.\n */\nexport const Progress = forwardRef<ElementRef<typeof ProgressPrimitive.Root>, ProgressProps>(\n function Progress({ className, value, size = 'md', tone = 'accent', ...props }, ref) {\n const indeterminate = value === undefined || value === null;\n return (\n <ProgressPrimitive.Root\n ref={ref}\n value={indeterminate ? undefined : value}\n className={cn(\n 'relative w-full overflow-hidden rounded-full bg-background-muted',\n heightMap[size],\n className,\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\n 'h-full w-full flex-1 transition-transform',\n fillTone[tone],\n indeterminate && 'animate-[progressIndeterminate_1.4s_ease-in-out_infinite] origin-left',\n )}\n style={\n indeterminate\n ? undefined\n : { transform: `translateX(-${100 - (value ?? 0)}%)` }\n }\n />\n {/* Keyframes inline so consumers don't need to register them globally. */}\n <style>{`\n @keyframes progressIndeterminate {\n 0% { transform: translateX(-100%) scaleX(0.6); }\n 50% { transform: translateX(0%) scaleX(0.4); }\n 100% { transform: translateX(100%) scaleX(0.6); }\n }\n `}</style>\n </ProgressPrimitive.Root>\n );\n },\n);\nProgress.displayName = 'Progress';\n\nexport interface ProgressCircleProps extends SVGProps<SVGSVGElement> {\n /** 0–100. Omit for indeterminate. */\n value?: number;\n /** Pixel size of the SVG. */\n size?: number;\n /** Stroke thickness. */\n thickness?: number;\n /** Visible label for screen readers. */\n 'aria-label': string;\n tone?: 'accent' | 'success' | 'warning' | 'danger';\n}\n\nconst circleTone = {\n accent: 'stroke-accent',\n success: 'stroke-success',\n warning: 'stroke-warning',\n danger: 'stroke-danger',\n} as const;\n\n/**\n * Circular progress ring. Pairs with a numeric label for percentage-style\n * indicators.\n *\n * @example\n * <ProgressCircle value={72} aria-label=\"Storage used\" />\n */\nexport const ProgressCircle = forwardRef<SVGSVGElement, ProgressCircleProps>(function ProgressCircle(\n { value, size = 36, thickness = 3, className, tone = 'accent', ...props },\n ref,\n) {\n const isIndeterminate = value === undefined;\n const radius = (size - thickness) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = isIndeterminate ? 0 : circumference - (Math.min(100, Math.max(0, value)) / 100) * circumference;\n\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={isIndeterminate ? undefined : value}\n className={cn('shrink-0', isIndeterminate && 'animate-spin', className)}\n {...props}\n >\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={thickness}\n className=\"stroke-background-muted fill-none\"\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={isIndeterminate ? circumference * 0.7 : offset}\n className={cn(circleTone[tone], 'fill-none transition-[stroke-dashoffset]')}\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n />\n </svg>\n );\n});\nProgressCircle.displayName = 'ProgressCircle';\n","import {\n forwardRef,\n useId,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { cn } from '@/lib/utils';\n\nexport interface RadioGroupProps\n extends ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> {\n /** Lay out the radios horizontally (default) or vertically. */\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const RadioGroup = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(function RadioGroup({ className, orientation = 'vertical', ...props }, ref) {\n return (\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(\n 'flex gap-3',\n orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n className,\n )}\n {...props}\n />\n );\n});\nRadioGroup.displayName = 'RadioGroup';\n\nexport interface RadioItemProps\n extends Omit<ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>, 'asChild'> {\n label?: ReactNode;\n description?: ReactNode;\n hideLabel?: boolean;\n}\n\n/**\n * One radio option with inline label + description.\n *\n * @example\n * <RadioGroup defaultValue=\"weekly\">\n * <RadioItem value=\"daily\" label=\"Daily\" description=\"Every morning at 9am\" />\n * <RadioItem value=\"weekly\" label=\"Weekly\" description=\"Monday mornings\" />\n * <RadioItem value=\"never\" label=\"Never\" />\n * </RadioGroup>\n *\n * @do Pair every RadioItem with a label — naked radios are unreachable for\n * screen reader users.\n * @dont Use RadioGroup for binary choices — use Switch.\n */\nexport const RadioItem = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioItemProps\n>(function RadioItem({ className, label, description, hideLabel, id, disabled, ...props }, ref) {\n const autoId = useId();\n const fieldId = id ?? autoId;\n const descId = description ? `${fieldId}-desc` : undefined;\n\n return (\n <div className={cn('flex items-start gap-2.5', className)}>\n <RadioGroupPrimitive.Item\n ref={ref}\n id={fieldId}\n disabled={disabled}\n aria-describedby={descId}\n className={cn(\n 'mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border bg-card',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'data-[state=checked]:border-accent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'border-border-strong',\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <span className=\"size-2 rounded-full bg-accent\" aria-hidden />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n\n {label && (\n <div className={cn('flex flex-col gap-0.5', hideLabel && 'sr-only')}>\n <label\n htmlFor={fieldId}\n className={cn(\n 'text-sm text-foreground select-none',\n disabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n {label}\n </label>\n {description && (\n <p id={descId} className=\"text-xs text-foreground-subtle\">\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n );\n});\nRadioItem.displayName = 'RadioItem';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { cn } from '@/lib/utils';\n\n/**\n * Custom scroll container with consistent styled scrollbars across OS / browsers.\n * Use when the default OS scrollbar would visually clash (sidebars, command\n * palettes, code panes). Falls back to native scroll inside the viewport.\n *\n * @example\n * <ScrollArea className=\"h-64 rounded-md border border-border\">\n * <div className=\"p-3\">…long content…</div>\n * </ScrollArea>\n */\nexport const ScrollArea = forwardRef<\n ElementRef<typeof ScrollAreaPrimitive.Root>,\n ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(function ScrollArea({ className, children, ...props }, ref) {\n return (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n});\nScrollArea.displayName = 'ScrollArea';\n\nexport const ScrollBar = forwardRef<\n ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(function ScrollBar({ className, orientation = 'vertical', ...props }, ref) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors duration-[var(--duration-fast)]',\n orientation === 'vertical' && 'h-full w-2 border-l border-l-transparent p-px',\n orientation === 'horizontal' && 'h-2 flex-col border-t border-t-transparent p-px',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border-strong\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n});\nScrollBar.displayName = 'ScrollBar';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport { cn } from '@/lib/utils';\n\n/**\n * Hairline divider. Decorative by default (no role announced). Pass\n * `decorative={false}` when the separator carries semantic meaning, e.g.\n * splitting two regions in a landmark.\n *\n * @example Section divider\n * <Separator className=\"my-6\" />\n *\n * @example Vertical inside a toolbar\n * <Separator orientation=\"vertical\" className=\"h-5 mx-2\" />\n */\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator(\n { className, orientation = 'horizontal', decorative = true, ...props },\n ref,\n) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n orientation={orientation}\n decorative={decorative}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className,\n )}\n {...props}\n />\n );\n});\nSeparator.displayName = 'Separator';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\n/* -----------------------------------------------------------------------------\n * Sheet — drawer-style overlay. Built on Radix Dialog (focus trap, escape,\n * click-outside come from there). Slides in from one of four sides.\n * --------------------------------------------------------------------------- */\n\nexport const Sheet = DialogPrimitive.Root;\nexport const SheetTrigger = DialogPrimitive.Trigger;\nexport const SheetClose = DialogPrimitive.Close;\nexport const SheetPortal = DialogPrimitive.Portal;\n\nconst SheetOverlay = forwardRef<\n ElementRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(function SheetOverlay({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-[var(--z-overlay)] bg-neutral-950/60 backdrop-blur-[2px]',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n className,\n )}\n {...props}\n />\n );\n});\nSheetOverlay.displayName = 'SheetOverlay';\n\nconst sheet = cva(\n [\n 'fixed z-[var(--z-modal)] bg-card text-card-foreground shadow-lg',\n 'flex flex-col gap-4 p-6',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:duration-[var(--duration-base)] data-[state=open]:duration-[var(--duration-slow)]',\n ],\n {\n variants: {\n side: {\n top: 'inset-x-0 top-0 border-b border-border data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top',\n bottom:\n 'inset-x-0 bottom-0 border-t border-border data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom',\n left: 'inset-y-0 left-0 h-full w-3/4 max-w-md border-r border-border data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left',\n right:\n 'inset-y-0 right-0 h-full w-3/4 max-w-md border-l border-border data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right',\n },\n },\n defaultVariants: { side: 'right' },\n },\n);\n\nexport interface SheetContentProps\n extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof sheet> {\n showClose?: boolean;\n}\n\nexport const SheetContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n SheetContentProps\n>(function SheetContent({ className, children, side = 'right', showClose = true, ...props }, ref) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <DialogPrimitive.Content ref={ref} className={cn(sheet({ side }), className)} {...props}>\n {children}\n {showClose && (\n <DialogPrimitive.Close\n aria-label=\"Close\"\n className={cn(\n 'absolute right-4 top-4 inline-flex size-8 items-center justify-center rounded-md text-foreground-subtle',\n 'hover:bg-background-muted hover:text-foreground',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card',\n 'transition-colors duration-[var(--duration-fast)]',\n )}\n >\n <X className=\"size-4\" aria-hidden />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </SheetPortal>\n );\n});\nSheetContent.displayName = 'SheetContent';\n\nexport function SheetHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex flex-col gap-1', className)} {...props} />;\n}\nSheetHeader.displayName = 'SheetHeader';\n\nexport function SheetFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('mt-auto flex flex-col-reverse gap-2 pt-4 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\nSheetFooter.displayName = 'SheetFooter';\n\nexport const SheetTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function SheetTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold text-foreground leading-tight', className)}\n {...props}\n />\n );\n});\nSheetTitle.displayName = 'SheetTitle';\n\nexport const SheetDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function SheetDescription({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-foreground-muted', className)}\n {...props}\n />\n );\n});\nSheetDescription.displayName = 'SheetDescription';\n\n/**\n * @example Right-side filter drawer\n * <Sheet>\n * <SheetTrigger asChild><Button variant=\"outline\">Filters</Button></SheetTrigger>\n * <SheetContent side=\"right\">\n * <SheetHeader>\n * <SheetTitle>Filters</SheetTitle>\n * <SheetDescription>Refine the result set.</SheetDescription>\n * </SheetHeader>\n * …\n * <SheetFooter>\n * <SheetClose asChild><Button variant=\"outline\">Cancel</Button></SheetClose>\n * <Button>Apply</Button>\n * </SheetFooter>\n * </SheetContent>\n * </Sheet>\n *\n * @do Use right side for filters/inspectors, left for navigation, bottom for\n * mobile sheets.\n * @dont Use a full-screen sheet on desktop — prefer Dialog or a dedicated page.\n */\n","import {\n createContext,\n forwardRef,\n useContext,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronDown, ChevronsLeft, ChevronsRight } from '@/icons';\nimport { cn } from '@/lib/utils';\n\ninterface SidebarContextValue {\n collapsed: boolean;\n}\nconst SidebarContext = createContext<SidebarContextValue>({ collapsed: false });\n\nexport interface SidebarProps extends HTMLAttributes<HTMLElement> {\n /** Default state on first mount. Use `defaultCollapsed` for uncontrolled. */\n defaultCollapsed?: boolean;\n /** Controlled collapsed state. */\n collapsed?: boolean;\n /** Called when the user toggles via the rail or keyboard. */\n onCollapsedChange?: (next: boolean) => void;\n /** Header slot pinned to the top (brand, workspace switcher, etc.). */\n header?: ReactNode;\n /** Footer slot pinned to the bottom (user card, version, etc.). */\n footer?: ReactNode;\n}\n\n/**\n * App-level navigation rail. Holds `SidebarSection` → `SidebarItem` lists,\n * and optionally a `footer`. Supports collapse to icon-only on desktop.\n *\n * @example\n * <Sidebar footer={<UserCard />}>\n * <SidebarSection label=\"Workspace\">\n * <SidebarItem icon={<Home />} active>Home</SidebarItem>\n * <SidebarItem icon={<Folder />}>Projects</SidebarItem>\n * </SidebarSection>\n * <SidebarSection label=\"Account\">\n * <SidebarItem icon={<Settings />}>Settings</SidebarItem>\n * </SidebarSection>\n * </Sidebar>\n *\n * @do Use 1–3 sections. More than that signals the IA needs restructuring.\n * @dont Hide critical navigation under the collapsed state — keep icons\n * always visible with tooltips.\n */\nexport const Sidebar = forwardRef<HTMLElement, SidebarProps>(function Sidebar(\n {\n defaultCollapsed = false,\n collapsed: controlled,\n onCollapsedChange,\n header,\n footer,\n className,\n children,\n ...props\n },\n ref,\n) {\n const [internal, setInternal] = useState(defaultCollapsed);\n const collapsed = controlled ?? internal;\n const setCollapsed = (next: boolean) => {\n if (controlled === undefined) setInternal(next);\n onCollapsedChange?.(next);\n };\n\n return (\n <SidebarContext.Provider value={{ collapsed }}>\n <aside\n ref={ref}\n aria-label=\"Primary\"\n className={cn(\n 'sticky top-0 hidden md:flex h-screen shrink-0 flex-col gap-2 border-r border-border bg-background-subtle',\n 'transition-[width] duration-[var(--duration-base)] ease-[var(--ease-out)]',\n collapsed ? 'w-14' : 'w-60',\n className,\n )}\n {...props}\n >\n {header && (\n <div className=\"flex h-14 shrink-0 items-center border-b border-border px-3\">\n {header}\n </div>\n )}\n <div className=\"flex-1 overflow-y-auto py-3\">{children}</div>\n {footer && (\n <div className=\"border-t border-border p-2\">{footer}</div>\n )}\n <button\n type=\"button\"\n onClick={() => setCollapsed(!collapsed)}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n aria-expanded={!collapsed}\n className={cn(\n 'flex h-8 items-center gap-2 mx-2 mb-2 rounded-md px-2 text-foreground-subtle',\n 'hover:bg-background-muted hover:text-foreground outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'transition-colors duration-[var(--duration-fast)]',\n )}\n >\n {collapsed ? <ChevronsRight className=\"size-4\" aria-hidden /> : <ChevronsLeft className=\"size-4\" aria-hidden />}\n {!collapsed && <span className=\"text-xs font-medium\">Collapse</span>}\n </button>\n </aside>\n </SidebarContext.Provider>\n );\n});\nSidebar.displayName = 'Sidebar';\n\nexport interface SidebarSectionProps extends HTMLAttributes<HTMLDivElement> {\n /** Visible section header. Hidden when collapsed. */\n label?: ReactNode;\n}\n\nexport function SidebarSection({ label, className, children, ...props }: SidebarSectionProps) {\n const { collapsed } = useContext(SidebarContext);\n return (\n <div className={cn('mb-3', className)} {...props}>\n {label && !collapsed && (\n <div className=\"px-4 pb-1 pt-2 text-xs font-medium text-foreground-subtle uppercase tracking-wide\">\n {label}\n </div>\n )}\n <ul className=\"flex flex-col gap-px\">{children}</ul>\n </div>\n );\n}\nSidebarSection.displayName = 'SidebarSection';\n\nexport interface SidebarItemProps extends HTMLAttributes<HTMLAnchorElement> {\n /** Lucide icon shown to the left. */\n icon?: ReactNode;\n /** Mark as the current page. */\n active?: boolean;\n /** Optional `href` — when absent, renders as a `<button>` so consumers can\n * bind their own handler / routing wrapper via `onClick`. */\n href?: string;\n /** Trailing badge / counter slot. */\n trailing?: ReactNode;\n /** Render a sub-item indented under a parent. */\n sub?: boolean;\n}\n\nexport function SidebarItem({\n icon,\n active,\n href,\n trailing,\n sub,\n className,\n children,\n ...props\n}: SidebarItemProps) {\n const { collapsed } = useContext(SidebarContext);\n const Comp: any = href ? 'a' : 'button';\n return (\n <li>\n <Comp\n href={href}\n aria-current={active ? 'page' : undefined}\n className={cn(\n 'mx-2 flex h-8 items-center gap-2 rounded-md px-2 text-sm outline-none',\n 'transition-colors duration-[var(--duration-fast)]',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n active\n ? 'bg-background-muted text-foreground font-medium'\n : 'text-foreground-muted hover:bg-background-muted hover:text-foreground',\n sub && !collapsed && 'ml-6',\n collapsed && 'justify-center',\n className,\n )}\n {...props}\n >\n {icon && <span className=\"flex shrink-0 items-center [&_svg]:size-4\">{icon}</span>}\n {!collapsed && <span className=\"flex-1 truncate text-left\">{children}</span>}\n {!collapsed && trailing && <span className=\"ml-auto\">{trailing}</span>}\n </Comp>\n </li>\n );\n}\nSidebarItem.displayName = 'SidebarItem';\n\n/** Lightweight collapsible sub-section inside the sidebar. */\nexport interface SidebarGroupProps {\n icon?: ReactNode;\n label: ReactNode;\n defaultOpen?: boolean;\n children: ReactNode;\n}\n\nexport function SidebarGroup({ icon, label, defaultOpen = true, children }: SidebarGroupProps) {\n const { collapsed } = useContext(SidebarContext);\n const [open, setOpen] = useState(defaultOpen);\n if (collapsed) return <>{children}</>;\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n aria-expanded={open}\n className={cn(\n 'mx-2 flex h-8 w-[calc(100%-1rem)] items-center gap-2 rounded-md px-2 text-sm text-foreground-muted outline-none',\n 'transition-colors duration-[var(--duration-fast)]',\n 'hover:bg-background-muted hover:text-foreground',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n )}\n >\n {icon && <span className=\"flex shrink-0 items-center [&_svg]:size-4\">{icon}</span>}\n <span className=\"flex-1 text-left\">{label}</span>\n <ChevronDown className={cn('size-3.5 transition-transform', open && 'rotate-180')} aria-hidden />\n </button>\n {open && <ul className=\"flex flex-col gap-px\">{children}</ul>}\n </li>\n );\n}\nSidebarGroup.displayName = 'SidebarGroup';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as SliderPrimitive from '@radix-ui/react-slider';\nimport { cn } from '@/lib/utils';\n\nexport interface SliderProps\n extends Omit<ComponentPropsWithoutRef<typeof SliderPrimitive.Root>, 'value' | 'defaultValue'> {\n /**\n * Controlled value. Pass `[n]` for a single-thumb slider, `[a, b]` for a range slider.\n */\n value?: number[];\n defaultValue?: number[];\n /** Inline label rendered above the slider. */\n label?: ReactNode;\n /** Show the numeric value next to the label. */\n showValue?: boolean;\n /** Format the displayed value (e.g. `(v) => \\`${v}%\\``). */\n formatValue?: (value: number) => string;\n}\n\n/**\n * Single- or range-thumb slider. Pass one item in `value` for a single\n * thumb, two for a range.\n *\n * @example Single value\n * <Slider label=\"Volume\" showValue defaultValue={[60]} max={100} step={1} />\n *\n * @example Price range\n * <Slider label=\"Price\"\n * defaultValue={[50, 250]}\n * min={0} max={500} step={10}\n * formatValue={(v) => \\`$\\${v}\\`}\n * showValue />\n *\n * @do Use `showValue` when the absolute number matters (price, volume, weight).\n * @dont Hide the value when users will need to reason about exact thresholds.\n */\nexport const Slider = forwardRef<ElementRef<typeof SliderPrimitive.Root>, SliderProps>(\n function Slider(\n {\n className,\n label,\n showValue,\n formatValue = (v) => String(v),\n value,\n defaultValue,\n ...props\n },\n ref,\n ) {\n const currentValue = value ?? defaultValue ?? [0];\n const isRange = currentValue.length > 1;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n {(label || showValue) && (\n <div className=\"flex items-center justify-between\">\n {label && <span className=\"text-sm font-medium text-foreground\">{label}</span>}\n {showValue && (\n <span className=\"text-xs tabular text-foreground-muted font-mono\">\n {isRange\n ? `${formatValue(currentValue[0])} – ${formatValue(currentValue[1])}`\n : formatValue(currentValue[0])}\n </span>\n )}\n </div>\n )}\n\n <SliderPrimitive.Root\n ref={ref}\n value={value}\n defaultValue={defaultValue}\n className=\"relative flex w-full touch-none select-none items-center\"\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-1 w-full grow overflow-hidden rounded-full bg-background-muted\">\n <SliderPrimitive.Range className=\"absolute h-full bg-accent\" />\n </SliderPrimitive.Track>\n {currentValue.map((_, i) => (\n <SliderPrimitive.Thumb\n key={i}\n className={cn(\n 'block size-4 rounded-full border-2 border-accent bg-card shadow-sm',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'hover:scale-110 disabled:pointer-events-none disabled:opacity-50',\n )}\n aria-label={isRange ? (i === 0 ? 'Minimum' : 'Maximum') : (label ? String(label) : 'Value')}\n />\n ))}\n </SliderPrimitive.Root>\n </div>\n );\n },\n);\n\nSlider.displayName = 'Slider';\n","import { forwardRef, type SVGProps } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface SpinnerProps extends SVGProps<SVGSVGElement> {\n /** Visual weight. */\n tone?: 'accent' | 'neutral' | 'on-accent';\n /** Pixel size. */\n size?: 'sm' | 'md' | 'lg';\n /** Accessible label. Required unless `decorative` is true. */\n label?: string;\n /** Hide from assistive tech (set when a parent already announces busy state). */\n decorative?: boolean;\n}\n\nconst sizeMap = { sm: 'size-3.5', md: 'size-4', lg: 'size-6' };\nconst toneMap = {\n accent: 'text-accent',\n neutral: 'text-foreground-subtle',\n 'on-accent': 'text-on-accent',\n};\n\n/**\n * Small indeterminate progress indicator. Use when the operation duration is\n * unknown and Progress isn't appropriate.\n *\n * @example\n * <Spinner label=\"Loading users\" />\n * <Button loading>Saving…</Button> // uses Spinner internally\n *\n * @do Provide a `label` so the busy state is announced.\n * @dont Use a Spinner for tasks that take 300ms+; use Skeleton instead.\n */\nexport const Spinner = forwardRef<SVGSVGElement, SpinnerProps>(function Spinner(\n { className, tone = 'accent', size = 'md', label, decorative, ...props },\n ref,\n) {\n return (\n <svg\n ref={ref}\n viewBox=\"0 0 24 24\"\n role={decorative ? undefined : 'status'}\n aria-label={decorative ? undefined : label ?? 'Loading'}\n aria-hidden={decorative || undefined}\n className={cn('animate-spin', sizeMap[size], toneMap[tone], className)}\n {...props}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeOpacity={0.2} fill=\"none\" />\n <path\n d=\"M12 2a10 10 0 0 1 10 10\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n );\n});\nSpinner.displayName = 'Spinner';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { Check } from '@/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface Step {\n /** Step heading. */\n title: ReactNode;\n /** Optional secondary description, only shown in vertical orientation. */\n description?: ReactNode;\n}\n\nexport interface StepperProps extends HTMLAttributes<HTMLOListElement> {\n /** Ordered list of steps. */\n steps: Step[];\n /** 0-indexed active step. Steps before it are marked complete. */\n current: number;\n /** Layout direction. */\n orientation?: 'horizontal' | 'vertical';\n}\n\n/**\n * Multi-step progress indicator. Use the horizontal variant in narrow flows\n * (top of an onboarding modal) and vertical for deeper context.\n *\n * @example Onboarding\n * <Stepper\n * current={step}\n * steps={[\n * { title: 'Workspace' },\n * { title: 'Invite team' },\n * { title: 'Connect data' },\n * { title: 'Done' },\n * ]}\n * />\n *\n * @do Keep titles 1–2 words. Save explanations for the page body.\n * @dont Use Stepper for free-form navigation. It implies a linear flow.\n */\nexport const Stepper = forwardRef<HTMLOListElement, StepperProps>(function Stepper(\n { steps, current, orientation = 'horizontal', className, ...props },\n ref,\n) {\n return (\n <ol\n ref={ref}\n aria-label=\"Progress\"\n className={cn(\n orientation === 'horizontal' ? 'flex w-full items-center' : 'flex flex-col gap-6',\n className,\n )}\n {...props}\n >\n {steps.map((step, i) => {\n const state = i < current ? 'complete' : i === current ? 'current' : 'upcoming';\n const isLast = i === steps.length - 1;\n return (\n <li\n key={i}\n aria-current={state === 'current' ? 'step' : undefined}\n className={cn(\n orientation === 'horizontal'\n ? 'flex flex-1 items-center gap-3 last:flex-initial'\n : 'flex items-start gap-3',\n )}\n >\n <div className={cn(orientation === 'horizontal' ? 'flex items-center gap-3' : 'flex flex-col items-center')}>\n <span\n aria-hidden\n className={cn(\n 'inline-flex size-7 items-center justify-center rounded-full text-xs font-semibold transition-colors',\n state === 'complete' && 'bg-accent text-on-accent',\n state === 'current' && 'bg-card border-2 border-accent text-accent',\n state === 'upcoming' && 'bg-background-muted text-foreground-subtle border border-border',\n )}\n >\n {state === 'complete' ? <Check className=\"size-4\" /> : i + 1}\n </span>\n {orientation === 'vertical' && !isLast && (\n <span\n className={cn(\n 'mt-1 w-px flex-1 min-h-6',\n i < current ? 'bg-accent' : 'bg-border',\n )}\n />\n )}\n </div>\n <div className={cn('flex flex-col', orientation === 'horizontal' && 'min-w-0')}>\n <span\n className={cn(\n 'text-sm font-medium',\n state === 'upcoming' ? 'text-foreground-subtle' : 'text-foreground',\n )}\n >\n {step.title}\n </span>\n {orientation === 'vertical' && step.description && (\n <p className=\"text-xs text-foreground-muted mt-0.5\">{step.description}</p>\n )}\n </div>\n {orientation === 'horizontal' && !isLast && (\n <span\n aria-hidden\n className={cn(\n 'h-px flex-1 mx-2',\n i < current ? 'bg-accent' : 'bg-border',\n )}\n />\n )}\n </li>\n );\n })}\n </ol>\n );\n});\nStepper.displayName = 'Stepper';\n","import {\n forwardRef,\n useId,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport { cn } from '@/lib/utils';\n\nexport interface SwitchProps\n extends Omit<ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, 'asChild'> {\n /** Inline label rendered to the right. */\n label?: ReactNode;\n /** Secondary description rendered below the label. */\n description?: ReactNode;\n /** Position the label before the switch instead of after. */\n labelPosition?: 'before' | 'after';\n /** Visual size. */\n size?: 'sm' | 'md';\n /** Hide the label visually while keeping it accessible. */\n hideLabel?: boolean;\n}\n\nconst trackSize = {\n sm: 'h-4 w-7',\n md: 'h-5 w-9',\n} as const;\nconst thumbSize = {\n sm: 'size-3 data-[state=checked]:translate-x-3',\n md: 'size-4 data-[state=checked]:translate-x-4',\n} as const;\n\n/**\n * Binary on/off toggle for instant-apply settings. Use Checkbox when the\n * choice is part of a form that needs explicit submission.\n *\n * @example Instant toggle\n * <Switch label=\"Email digest\" checked={on} onCheckedChange={setOn} />\n *\n * @example With description\n * <Switch label=\"Two-factor authentication\"\n * description=\"Required for admins on production accounts.\"\n * checked={tfa}\n * onCheckedChange={setTfa} />\n *\n * @do Use Switch when the change takes effect immediately. Pair with\n * a toast confirming the new state.\n * @dont Use Switch inside a form that requires submission — Checkbox\n * better matches that mental model.\n */\nexport const Switch = forwardRef<ElementRef<typeof SwitchPrimitive.Root>, SwitchProps>(\n function Switch(\n {\n className,\n label,\n description,\n labelPosition = 'after',\n size = 'md',\n hideLabel,\n id,\n disabled,\n ...props\n },\n ref,\n ) {\n const autoId = useId();\n const fieldId = id ?? autoId;\n const descId = description ? `${fieldId}-desc` : undefined;\n\n const control = (\n <SwitchPrimitive.Root\n ref={ref}\n id={fieldId}\n disabled={disabled}\n aria-describedby={descId}\n className={cn(\n 'peer inline-flex shrink-0 items-center rounded-full border-2 border-transparent',\n 'transition-colors duration-[var(--duration-base)] ease-[var(--ease-out)]',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:bg-accent data-[state=unchecked]:bg-neutral-300 dark:data-[state=unchecked]:bg-neutral-700',\n trackSize[size],\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n 'pointer-events-none block rounded-full bg-white shadow-sm',\n 'transition-transform duration-[var(--duration-base)] ease-[var(--ease-out)]',\n 'translate-x-0',\n thumbSize[size],\n )}\n />\n </SwitchPrimitive.Root>\n );\n\n const labelBlock = label && (\n <div className={cn('flex flex-col gap-0.5 select-none', hideLabel && 'sr-only')}>\n <label\n htmlFor={fieldId}\n className={cn(\n 'text-sm text-foreground',\n disabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n {label}\n </label>\n {description && (\n <p id={descId} className=\"text-xs text-foreground-subtle\">\n {description}\n </p>\n )}\n </div>\n );\n\n return (\n <div className={cn('inline-flex items-center gap-2.5', className)}>\n {labelPosition === 'before' && labelBlock}\n {control}\n {labelPosition === 'after' && labelBlock}\n </div>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\n/* -----------------------------------------------------------------------------\n * Two visual variants — `underline` (refined-minimal default) and `pills`.\n * Variant is set on `TabsList`; trigger styles auto-derive via data-attr.\n * --------------------------------------------------------------------------- */\n\nexport const Tabs = TabsPrimitive.Root;\n\nconst list = cva('inline-flex items-center', {\n variants: {\n variant: {\n underline: 'gap-4 border-b border-border w-full',\n pills: 'gap-1 rounded-lg bg-background-muted p-1',\n },\n size: {\n sm: 'h-9 text-xs',\n md: 'h-10 text-sm',\n lg: 'h-11 text-sm',\n },\n },\n defaultVariants: { variant: 'underline', size: 'md' },\n});\n\nexport interface TabsListProps\n extends ComponentPropsWithoutRef<typeof TabsPrimitive.List>,\n VariantProps<typeof list> {}\n\nexport const TabsList = forwardRef<ElementRef<typeof TabsPrimitive.List>, TabsListProps>(\n function TabsList({ className, variant = 'underline', size, ...props }, ref) {\n return (\n <TabsPrimitive.List\n ref={ref}\n data-variant={variant}\n className={cn(list({ variant, size }), className)}\n {...props}\n />\n );\n },\n);\nTabsList.displayName = 'TabsList';\n\nexport const TabsTrigger = forwardRef<\n ElementRef<typeof TabsPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(function TabsTrigger({ className, ...props }, ref) {\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center gap-2 whitespace-nowrap font-medium',\n 'outline-none transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:pointer-events-none disabled:opacity-50',\n // Underline variant\n '[[data-variant=underline]_&]:relative [[data-variant=underline]_&]:h-full',\n '[[data-variant=underline]_&]:px-1 [[data-variant=underline]_&]:text-foreground-muted',\n '[[data-variant=underline]_&]:hover:text-foreground',\n '[[data-variant=underline]_&]:data-[state=active]:text-foreground',\n '[[data-variant=underline]_&]:data-[state=active]:after:absolute',\n '[[data-variant=underline]_&]:data-[state=active]:after:inset-x-0',\n '[[data-variant=underline]_&]:data-[state=active]:after:-bottom-px',\n '[[data-variant=underline]_&]:data-[state=active]:after:h-0.5',\n '[[data-variant=underline]_&]:data-[state=active]:after:bg-accent',\n // Pills variant\n '[[data-variant=pills]_&]:h-full [[data-variant=pills]_&]:rounded-md [[data-variant=pills]_&]:px-3',\n '[[data-variant=pills]_&]:text-foreground-muted',\n '[[data-variant=pills]_&]:hover:text-foreground',\n '[[data-variant=pills]_&]:data-[state=active]:bg-card',\n '[[data-variant=pills]_&]:data-[state=active]:text-foreground',\n '[[data-variant=pills]_&]:data-[state=active]:shadow-xs',\n className,\n )}\n {...props}\n />\n );\n});\nTabsTrigger.displayName = 'TabsTrigger';\n\nexport const TabsContent = forwardRef<\n ElementRef<typeof TabsPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(function TabsContent({ className, ...props }, ref) {\n return (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-4 outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n className,\n )}\n {...props}\n />\n );\n});\nTabsContent.displayName = 'TabsContent';\n\n/**\n * @example Underline (default)\n * <Tabs defaultValue=\"overview\">\n * <TabsList>\n * <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n * <TabsTrigger value=\"activity\">Activity</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"overview\">…</TabsContent>\n * <TabsContent value=\"activity\">…</TabsContent>\n * </Tabs>\n *\n * @example Pills\n * <TabsList variant=\"pills\"><TabsTrigger value=\"all\">All</TabsTrigger>…</TabsList>\n *\n * @do Use `underline` at the top of a page or panel. Use `pills` inside a\n * card or for filter-style switches.\n * @dont Mix variants on the same screen — pick one and commit.\n */\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n type TextareaHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TextareaProps\n extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n /** Visible label above the field. */\n label?: ReactNode;\n /** Hint below the field. Hidden when `error` is set. */\n helperText?: ReactNode;\n /** Validation message. Sets `aria-invalid`. */\n error?: ReactNode;\n /** Grow vertically as content is added. */\n autoResize?: boolean;\n /** Minimum rows when `autoResize`. Defaults to 3. */\n minRows?: number;\n /** Maximum rows before scrolling when `autoResize`. Defaults to 12. */\n maxRows?: number;\n /** Visually hide the label while keeping it accessible. */\n hideLabel?: boolean;\n}\n\n/**\n * Multi-line text input. With `autoResize`, height tracks content from\n * `minRows` to `maxRows`. Without it, behaves like a native `<textarea>`.\n *\n * @example Comment box\n * <Textarea label=\"Note\" autoResize minRows={3} maxRows={10} />\n *\n * @example With error\n * <Textarea label=\"Description\"\n * error={errors.description?.message}\n * {...register('description')} />\n *\n * @do Default to `autoResize` for multi-line free-form input.\n * @dont Add `resize-none` without auto-resize — users will be stuck with a\n * 3-line box for long content.\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n {\n className,\n label,\n helperText,\n error,\n autoResize,\n minRows = 3,\n maxRows = 12,\n hideLabel,\n id,\n onChange,\n value,\n defaultValue,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const fieldId = id ?? autoId;\n const helperId = `${fieldId}-helper`;\n const errorId = `${fieldId}-error`;\n const innerRef = useRef<HTMLTextAreaElement>(null);\n\n // Stash a ref locally and forward to the consumer.\n const setRef = (node: HTMLTextAreaElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n };\n\n const recompute = useCallback(() => {\n const el = innerRef.current;\n if (!el || !autoResize) return;\n el.style.height = 'auto';\n const lineHeight = parseFloat(getComputedStyle(el).lineHeight) || 20;\n const maxH = lineHeight * maxRows;\n el.style.height = `${Math.min(el.scrollHeight, maxH)}px`;\n el.style.overflowY = el.scrollHeight > maxH ? 'auto' : 'hidden';\n }, [autoResize, maxRows]);\n\n useEffect(() => {\n if (autoResize) recompute();\n }, [autoResize, recompute, value, defaultValue]);\n\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n {label && (\n <label\n htmlFor={fieldId}\n className={cn(\n 'text-sm font-medium text-foreground',\n hideLabel && 'sr-only',\n )}\n >\n {label}\n </label>\n )}\n <textarea\n ref={setRef}\n id={fieldId}\n rows={minRows}\n value={value}\n defaultValue={defaultValue}\n onChange={(e) => {\n onChange?.(e);\n if (autoResize) recompute();\n }}\n aria-invalid={Boolean(error) || undefined}\n aria-describedby={error ? errorId : helperText ? helperId : undefined}\n className={cn(\n 'rounded-md border bg-card px-3 py-2 text-sm text-foreground',\n 'placeholder:text-foreground-subtle',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'focus-visible:ring-offset-background',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n error\n ? 'border-danger focus-visible:border-danger focus-visible:ring-danger'\n : 'border-border focus-visible:border-accent',\n autoResize ? 'resize-none' : 'resize-y min-h-20',\n )}\n {...props}\n />\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-foreground-subtle\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n\nTextarea.displayName = 'Textarea';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactElement,\n} from 'react';\nimport * as ToastPrimitive from '@radix-ui/react-toast';\nimport { AlertTriangle, CheckCircle2, Info, X, XCircle } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nexport const ToastProvider = ToastPrimitive.Provider;\n\nexport const ToastViewport = forwardRef<\n ElementRef<typeof ToastPrimitive.Viewport>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Viewport>\n>(function ToastViewport({ className, ...props }, ref) {\n return (\n <ToastPrimitive.Viewport\n ref={ref}\n className={cn(\n 'fixed bottom-0 right-0 z-[var(--z-toast)] flex max-h-screen w-full flex-col-reverse gap-2 p-6',\n 'sm:bottom-auto sm:top-4 sm:right-4 sm:max-w-sm sm:flex-col',\n className,\n )}\n {...props}\n />\n );\n});\nToastViewport.displayName = 'ToastViewport';\n\nconst toast = cva(\n [\n 'group pointer-events-auto relative flex w-full items-start gap-3',\n 'overflow-hidden rounded-lg border p-4 pr-8 shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-80 data-[state=open]:slide-in-from-right-full',\n 'data-[state=closed]:slide-out-to-right-full',\n 'data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)]',\n 'data-[swipe=cancel]:translate-x-0 data-[swipe=cancel]:transition-transform',\n 'data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)]',\n ],\n {\n variants: {\n variant: {\n default: 'border-border bg-card text-card-foreground',\n success: 'border-success-border-soft bg-success-soft text-success-text',\n warning: 'border-warning-border-soft bg-warning-soft text-warning-text',\n danger: 'border-danger-border-soft bg-danger-soft text-danger-text',\n info: 'border-info-border-soft bg-info-soft text-info-text',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nconst iconMap = {\n default: null,\n success: <CheckCircle2 className=\"size-5 text-success-text shrink-0 mt-0.5\" aria-hidden />,\n warning: <AlertTriangle className=\"size-5 text-warning-text shrink-0 mt-0.5\" aria-hidden />,\n danger: <XCircle className=\"size-5 text-danger-text shrink-0 mt-0.5\" aria-hidden />,\n info: <Info className=\"size-5 text-info-text shrink-0 mt-0.5\" aria-hidden />,\n} satisfies Record<'default' | 'success' | 'warning' | 'danger' | 'info', ReactElement | null>;\n\nexport interface ToastProps\n extends ComponentPropsWithoutRef<typeof ToastPrimitive.Root>,\n VariantProps<typeof toast> {}\n\nexport const Toast = forwardRef<ElementRef<typeof ToastPrimitive.Root>, ToastProps>(\n function Toast({ className, variant = 'default', children, ...props }, ref) {\n return (\n <ToastPrimitive.Root ref={ref} className={cn(toast({ variant }), className)} {...props}>\n {iconMap[variant ?? 'default']}\n <div className=\"flex-1 space-y-1\">{children}</div>\n </ToastPrimitive.Root>\n );\n },\n);\nToast.displayName = 'Toast';\n\nexport const ToastTitle = forwardRef<\n ElementRef<typeof ToastPrimitive.Title>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Title>\n>(function ToastTitle({ className, ...props }, ref) {\n return (\n <ToastPrimitive.Title\n ref={ref}\n className={cn('text-sm font-medium', className)}\n {...props}\n />\n );\n});\nToastTitle.displayName = 'ToastTitle';\n\nexport const ToastDescription = forwardRef<\n ElementRef<typeof ToastPrimitive.Description>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Description>\n>(function ToastDescription({ className, ...props }, ref) {\n return (\n <ToastPrimitive.Description\n ref={ref}\n className={cn('text-sm opacity-90', className)}\n {...props}\n />\n );\n});\nToastDescription.displayName = 'ToastDescription';\n\nexport const ToastAction = forwardRef<\n ElementRef<typeof ToastPrimitive.Action>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Action>\n>(function ToastAction({ className, ...props }, ref) {\n return (\n <ToastPrimitive.Action\n ref={ref}\n className={cn(\n 'inline-flex h-8 shrink-0 items-center justify-center rounded-md border border-current bg-transparent px-3 text-sm font-medium',\n 'transition-colors hover:bg-current/10 outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card',\n className,\n )}\n {...props}\n />\n );\n});\nToastAction.displayName = 'ToastAction';\n\nexport const ToastClose = forwardRef<\n ElementRef<typeof ToastPrimitive.Close>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Close>\n>(function ToastClose({ className, ...props }, ref) {\n return (\n <ToastPrimitive.Close\n ref={ref}\n aria-label=\"Close\"\n className={cn(\n 'absolute right-2 top-2 inline-flex size-7 items-center justify-center rounded-md text-foreground-subtle',\n 'opacity-0 transition-opacity group-hover:opacity-100 hover:text-foreground',\n 'outline-none focus-visible:opacity-100 focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"size-4\" aria-hidden />\n </ToastPrimitive.Close>\n );\n});\nToastClose.displayName = 'ToastClose';\n\n/**\n * @example\n * <ToastProvider>\n * …app…\n * <Toast variant=\"success\">\n * <ToastTitle>Saved</ToastTitle>\n * <ToastDescription>Your changes are live.</ToastDescription>\n * <ToastAction altText=\"Undo\">Undo</ToastAction>\n * <ToastClose />\n * </Toast>\n * <ToastViewport />\n * </ToastProvider>\n *\n * @do Use the `useToast()` hook (in `src/hooks/use-toast.ts`) in app code —\n * the components here are the primitives the hook renders.\n * @dont Stack more than two toasts at a time. Newer toasts replace older ones.\n */\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { cn } from '@/lib/utils';\n\n/**\n * Wrap the app in a single `<TooltipProvider>` near the root. All Tooltips\n * share the same `delayDuration` and `skipDelayDuration`.\n */\nexport const TooltipProvider = ({\n delayDuration = 500,\n skipDelayDuration = 200,\n ...props\n}: ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider>) => (\n <TooltipPrimitive.Provider\n delayDuration={delayDuration}\n skipDelayDuration={skipDelayDuration}\n {...props}\n />\n);\n\nexport const TooltipRoot = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(function TooltipContent({ className, sideOffset = 4, ...props }, ref) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-[var(--z-tooltip)] overflow-hidden rounded-md px-2 py-1 text-xs font-medium',\n 'bg-neutral-900 text-neutral-50',\n 'dark:bg-neutral-50 dark:text-neutral-900',\n 'shadow-sm max-w-xs',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n );\n});\nTooltipContent.displayName = 'TooltipContent';\n\nexport interface TooltipProps {\n children: ReactNode;\n label: ReactNode;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n /** Disable showing the tooltip (e.g. when text is not truncated). */\n disabled?: boolean;\n /** Override the global delay. */\n delayDuration?: number;\n}\n\n/**\n * Shorthand for the most common Tooltip case.\n *\n * @example\n * <Tooltip label=\"Copy link\"><IconButton aria-label=\"Copy\" icon={<Copy/>} /></Tooltip>\n *\n * @do Keep tooltip text short — one line, no full sentences. Use a Popover\n * for any content that needs structure.\n * @dont Wrap disabled buttons in Tooltip without `asChild + tabIndex={0}`.\n * Disabled elements don't receive focus, so the tooltip never opens.\n */\nexport function Tooltip({\n children,\n label,\n side = 'top',\n align = 'center',\n disabled,\n delayDuration,\n}: TooltipProps) {\n if (disabled) return <>{children}</>;\n return (\n <TooltipRoot delayDuration={delayDuration}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side} align={align}>\n {label}\n </TooltipContent>\n </TooltipRoot>\n );\n}\nTooltip.displayName = 'Tooltip';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TopNavProps extends HTMLAttributes<HTMLElement> {\n /** Logo / wordmark slot. Shown on the far left. */\n logo: ReactNode;\n /** Primary navigation links — typically a list of `<TopNavLink>`. */\n nav?: ReactNode;\n /** Search / command bar slot — fills the centre on wide screens. */\n search?: ReactNode;\n /** Right-aligned cluster — notifications, theme toggle, user menu. */\n actions?: ReactNode;\n}\n\n/**\n * App-level top bar. Layout: `logo · nav · search · actions`. Search and nav\n * are optional.\n *\n * @example\n * <TopNav\n * logo={<Logo />}\n * nav={<><TopNavLink href=\"/\" active>Home</TopNavLink>…</>}\n * search={<Input type=\"search\" placeholder=\"Search…\" />}\n * actions={<><Bell /><Avatar /></>}\n * />\n *\n * @do Pick one primary nav style — links here or in the Sidebar, not both.\n * @dont Stack two rows of navigation in the TopNav. If you need tabs as well,\n * put them below the bar inside the page content.\n */\nexport const TopNav = forwardRef<HTMLElement, TopNavProps>(function TopNav(\n { logo, nav, search, actions, className, ...props },\n ref,\n) {\n return (\n <header\n ref={ref}\n className={cn(\n 'sticky top-0 z-[var(--z-sticky)] flex h-14 w-full items-center gap-4',\n 'border-b border-border bg-background/80 px-4 backdrop-blur',\n 'supports-[backdrop-filter]:bg-background/60',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-6 shrink-0\">\n {logo}\n {nav && <nav className=\"hidden md:flex items-center gap-1\">{nav}</nav>}\n </div>\n {search && <div className=\"flex-1 max-w-md mx-auto\">{search}</div>}\n {actions && <div className=\"ml-auto flex items-center gap-2 shrink-0\">{actions}</div>}\n </header>\n );\n});\nTopNav.displayName = 'TopNav';\n\nexport interface TopNavLinkProps extends HTMLAttributes<HTMLAnchorElement> {\n href: string;\n active?: boolean;\n}\n\nexport const TopNavLink = forwardRef<HTMLAnchorElement, TopNavLinkProps>(function TopNavLink(\n { href, active, className, children, ...props },\n ref,\n) {\n return (\n <a\n ref={ref}\n href={href}\n aria-current={active ? 'page' : undefined}\n className={cn(\n 'inline-flex h-9 items-center rounded-md px-3 text-sm font-medium outline-none',\n 'transition-colors duration-[var(--duration-fast)]',\n active ? 'text-foreground' : 'text-foreground-muted hover:text-foreground',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n className,\n )}\n {...props}\n >\n {children}\n </a>\n );\n});\nTopNavLink.displayName = 'TopNavLink';\n","import { forwardRef } from 'react';\nimport { DayPicker, type DayPickerProps } from 'react-day-picker';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport 'react-day-picker/style.css';\nimport { cn } from '@/lib/utils';\n\nexport type CalendarProps = DayPickerProps & { className?: string };\n\n/**\n * Standalone calendar surface. Used by DatePicker, but can also be embedded\n * directly in popovers, sheets, or inline forms. Wraps `react-day-picker`.\n */\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(function Calendar(\n { className, classNames, ...props },\n _ref,\n) {\n return (\n <DayPicker\n showOutsideDays\n className={cn('p-3', className)}\n classNames={{\n months: 'flex flex-col gap-4',\n month: 'flex flex-col gap-3',\n caption: 'flex items-center justify-between px-1',\n caption_label: 'text-sm font-medium',\n nav: 'flex items-center gap-1',\n nav_button:\n 'inline-flex h-7 w-7 items-center justify-center rounded-md text-foreground-muted hover:bg-background-muted focus-visible:ring-2 focus-visible:ring-ring outline-none',\n table: 'w-full border-collapse',\n head_row: 'flex',\n head_cell: 'w-9 text-[11px] font-medium text-foreground-subtle',\n row: 'mt-1 flex',\n cell: 'relative h-9 w-9 p-0 text-center',\n day: 'inline-flex h-9 w-9 items-center justify-center rounded-md text-sm hover:bg-background-muted focus-visible:ring-2 focus-visible:ring-ring outline-none',\n day_selected: 'bg-accent text-on-accent hover:bg-accent-700',\n day_today: 'border border-border',\n day_outside: 'text-foreground-subtle',\n day_disabled: 'opacity-40 pointer-events-none',\n day_range_middle: 'bg-accent-soft rounded-none',\n day_hidden: 'invisible',\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) =>\n orientation === 'left' ? (\n <ChevronLeft className=\"size-4\" />\n ) : (\n <ChevronRight className=\"size-4\" />\n ),\n }}\n {...props}\n />\n );\n});\n","function isObject(subject) {\n return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction isRecord(subject) {\n return isObject(subject) || Array.isArray(subject);\n}\nfunction canUseDOM() {\n return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}\nfunction areOptionsEqual(optionsA, optionsB) {\n const optionsAKeys = Object.keys(optionsA);\n const optionsBKeys = Object.keys(optionsB);\n if (optionsAKeys.length !== optionsBKeys.length) return false;\n const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}));\n const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}));\n if (breakpointsA !== breakpointsB) return false;\n return optionsAKeys.every(key => {\n const valueA = optionsA[key];\n const valueB = optionsB[key];\n if (typeof valueA === 'function') return `${valueA}` === `${valueB}`;\n if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB;\n return areOptionsEqual(valueA, valueB);\n });\n}\nfunction sortAndMapPluginToOptions(plugins) {\n return plugins.concat().sort((a, b) => a.name > b.name ? 1 : -1).map(plugin => plugin.options);\n}\nfunction arePluginsEqual(pluginsA, pluginsB) {\n if (pluginsA.length !== pluginsB.length) return false;\n const optionsA = sortAndMapPluginToOptions(pluginsA);\n const optionsB = sortAndMapPluginToOptions(pluginsB);\n return optionsA.every((optionA, index) => {\n const optionB = optionsB[index];\n return areOptionsEqual(optionA, optionB);\n });\n}\n\nexport { areOptionsEqual, arePluginsEqual, canUseDOM, sortAndMapPluginToOptions };\n//# sourceMappingURL=embla-carousel-reactive-utils.esm.js.map\n","function isNumber(subject) {\n return typeof subject === 'number';\n}\nfunction isString(subject) {\n return typeof subject === 'string';\n}\nfunction isBoolean(subject) {\n return typeof subject === 'boolean';\n}\nfunction isObject(subject) {\n return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction mathAbs(n) {\n return Math.abs(n);\n}\nfunction mathSign(n) {\n return Math.sign(n);\n}\nfunction deltaAbs(valueB, valueA) {\n return mathAbs(valueB - valueA);\n}\nfunction factorAbs(valueB, valueA) {\n if (valueB === 0 || valueA === 0) return 0;\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0;\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA));\n return mathAbs(diff / valueB);\n}\nfunction roundToTwoDecimals(num) {\n return Math.round(num * 100) / 100;\n}\nfunction arrayKeys(array) {\n return objectKeys(array).map(Number);\n}\nfunction arrayLast(array) {\n return array[arrayLastIndex(array)];\n}\nfunction arrayLastIndex(array) {\n return Math.max(0, array.length - 1);\n}\nfunction arrayIsLastIndex(array, index) {\n return index === arrayLastIndex(array);\n}\nfunction arrayFromNumber(n, startAt = 0) {\n return Array.from(Array(n), (_, i) => startAt + i);\n}\nfunction objectKeys(object) {\n return Object.keys(object);\n}\nfunction objectsMergeDeep(objectA, objectB) {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach(key => {\n const valueA = mergedObjects[key];\n const valueB = currentObject[key];\n const areObjects = isObject(valueA) && isObject(valueB);\n mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB;\n });\n return mergedObjects;\n }, {});\n}\nfunction isMouseEvent(evt, ownerWindow) {\n return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent;\n}\n\nfunction Alignment(align, viewSize) {\n const predefined = {\n start,\n center,\n end\n };\n function start() {\n return 0;\n }\n function center(n) {\n return end(n) / 2;\n }\n function end(n) {\n return viewSize - n;\n }\n function measure(n, index) {\n if (isString(align)) return predefined[align](n);\n return align(viewSize, n, index);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction EventStore() {\n let listeners = [];\n function add(node, type, handler, options = {\n passive: true\n }) {\n let removeListener;\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options);\n removeListener = () => node.removeEventListener(type, handler, options);\n } else {\n const legacyMediaQueryList = node;\n legacyMediaQueryList.addListener(handler);\n removeListener = () => legacyMediaQueryList.removeListener(handler);\n }\n listeners.push(removeListener);\n return self;\n }\n function clear() {\n listeners = listeners.filter(remove => remove());\n }\n const self = {\n add,\n clear\n };\n return self;\n}\n\nfunction Animations(ownerDocument, ownerWindow, update, render) {\n const documentVisibleHandler = EventStore();\n const fixedTimeStep = 1000 / 60;\n let lastTimeStamp = null;\n let accumulatedTime = 0;\n let animationId = 0;\n function init() {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset();\n });\n }\n function destroy() {\n stop();\n documentVisibleHandler.clear();\n }\n function animate(timeStamp) {\n if (!animationId) return;\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp;\n update();\n update();\n }\n const timeElapsed = timeStamp - lastTimeStamp;\n lastTimeStamp = timeStamp;\n accumulatedTime += timeElapsed;\n while (accumulatedTime >= fixedTimeStep) {\n update();\n accumulatedTime -= fixedTimeStep;\n }\n const alpha = accumulatedTime / fixedTimeStep;\n render(alpha);\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n }\n function start() {\n if (animationId) return;\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n function stop() {\n ownerWindow.cancelAnimationFrame(animationId);\n lastTimeStamp = null;\n accumulatedTime = 0;\n animationId = 0;\n }\n function reset() {\n lastTimeStamp = null;\n accumulatedTime = 0;\n }\n const self = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n };\n return self;\n}\n\nfunction Axis(axis, contentDirection) {\n const isRightToLeft = contentDirection === 'rtl';\n const isVertical = axis === 'y';\n const scroll = isVertical ? 'y' : 'x';\n const cross = isVertical ? 'x' : 'y';\n const sign = !isVertical && isRightToLeft ? -1 : 1;\n const startEdge = getStartEdge();\n const endEdge = getEndEdge();\n function measureSize(nodeRect) {\n const {\n height,\n width\n } = nodeRect;\n return isVertical ? height : width;\n }\n function getStartEdge() {\n if (isVertical) return 'top';\n return isRightToLeft ? 'right' : 'left';\n }\n function getEndEdge() {\n if (isVertical) return 'bottom';\n return isRightToLeft ? 'left' : 'right';\n }\n function direction(n) {\n return n * sign;\n }\n const self = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n };\n return self;\n}\n\nfunction Limit(min = 0, max = 0) {\n const length = mathAbs(min - max);\n function reachedMin(n) {\n return n < min;\n }\n function reachedMax(n) {\n return n > max;\n }\n function reachedAny(n) {\n return reachedMin(n) || reachedMax(n);\n }\n function constrain(n) {\n if (!reachedAny(n)) return n;\n return reachedMin(n) ? min : max;\n }\n function removeOffset(n) {\n if (!length) return n;\n return n - length * Math.ceil((n - max) / length);\n }\n const self = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n };\n return self;\n}\n\nfunction Counter(max, start, loop) {\n const {\n constrain\n } = Limit(0, max);\n const loopEnd = max + 1;\n let counter = withinLimit(start);\n function withinLimit(n) {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd);\n }\n function get() {\n return counter;\n }\n function set(n) {\n counter = withinLimit(n);\n return self;\n }\n function add(n) {\n return clone().set(get() + n);\n }\n function clone() {\n return Counter(max, get(), loop);\n }\n const self = {\n get,\n set,\n add,\n clone\n };\n return self;\n}\n\nfunction DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) {\n const {\n cross: crossAxis,\n direction\n } = axis;\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\n const nonPassiveEvent = {\n passive: false\n };\n const initEvents = EventStore();\n const dragEvents = EventStore();\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20));\n const snapForceBoost = {\n mouse: 300,\n touch: 400\n };\n const freeForceBoost = {\n mouse: 500,\n touch: 600\n };\n const baseSpeed = dragFree ? 43 : 25;\n let isMoving = false;\n let startScroll = 0;\n let startCross = 0;\n let pointerIsDown = false;\n let preventScroll = false;\n let preventClick = false;\n let isMouse = false;\n function init(emblaApi) {\n if (!watchDrag) return;\n function downIfAllowed(evt) {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt);\n }\n const node = rootNode;\n initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true);\n }\n function destroy() {\n initEvents.clear();\n dragEvents.clear();\n }\n function addDragEvents() {\n const node = isMouse ? ownerDocument : rootNode;\n dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up);\n }\n function isFocusNode(node) {\n const nodeName = node.nodeName || '';\n return focusNodes.includes(nodeName);\n }\n function forceBoost() {\n const boost = dragFree ? freeForceBoost : snapForceBoost;\n const type = isMouse ? 'mouse' : 'touch';\n return boost[type];\n }\n function allowedForce(force, targetChanged) {\n const next = index.add(mathSign(force) * -1);\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance;\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce;\n if (skipSnaps && targetChanged) return baseForce * 0.5;\n return scrollTarget.byIndex(next.get(), 0).distance;\n }\n function down(evt) {\n const isMouseEvt = isMouseEvent(evt, ownerWindow);\n isMouse = isMouseEvt;\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving;\n isMoving = deltaAbs(target.get(), location.get()) >= 2;\n if (isMouseEvt && evt.button !== 0) return;\n if (isFocusNode(evt.target)) return;\n pointerIsDown = true;\n dragTracker.pointerDown(evt);\n scrollBody.useFriction(0).useDuration(0);\n target.set(location);\n addDragEvents();\n startScroll = dragTracker.readPoint(evt);\n startCross = dragTracker.readPoint(evt, crossAxis);\n eventHandler.emit('pointerDown');\n }\n function move(evt) {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow);\n if (isTouchEvt && evt.touches.length >= 2) return up(evt);\n const lastScroll = dragTracker.readPoint(evt);\n const lastCross = dragTracker.readPoint(evt, crossAxis);\n const diffScroll = deltaAbs(lastScroll, startScroll);\n const diffCross = deltaAbs(lastCross, startCross);\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt);\n preventScroll = diffScroll > diffCross;\n if (!preventScroll) return up(evt);\n }\n const diff = dragTracker.pointerMove(evt);\n if (diffScroll > dragThreshold) preventClick = true;\n scrollBody.useFriction(0.3).useDuration(0.75);\n animation.start();\n target.add(direction(diff));\n evt.preventDefault();\n }\n function up(evt) {\n const currentLocation = scrollTarget.byDistance(0, false);\n const targetChanged = currentLocation.index !== index.get();\n const rawForce = dragTracker.pointerUp(evt) * forceBoost();\n const force = allowedForce(direction(rawForce), targetChanged);\n const forceFactor = factorAbs(rawForce, force);\n const speed = baseSpeed - 10 * forceFactor;\n const friction = baseFriction + forceFactor / 50;\n preventScroll = false;\n pointerIsDown = false;\n dragEvents.clear();\n scrollBody.useDuration(speed).useFriction(friction);\n scrollTo.distance(force, !dragFree);\n isMouse = false;\n eventHandler.emit('pointerUp');\n }\n function click(evt) {\n if (preventClick) {\n evt.stopPropagation();\n evt.preventDefault();\n preventClick = false;\n }\n }\n function pointerDown() {\n return pointerIsDown;\n }\n const self = {\n init,\n destroy,\n pointerDown\n };\n return self;\n}\n\nfunction DragTracker(axis, ownerWindow) {\n const logInterval = 170;\n let startEvent;\n let lastEvent;\n function readTime(evt) {\n return evt.timeStamp;\n }\n function readPoint(evt, evtAxis) {\n const property = evtAxis || axis.scroll;\n const coord = `client${property === 'x' ? 'X' : 'Y'}`;\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord];\n }\n function pointerDown(evt) {\n startEvent = evt;\n lastEvent = evt;\n return readPoint(evt);\n }\n function pointerMove(evt) {\n const diff = readPoint(evt) - readPoint(lastEvent);\n const expired = readTime(evt) - readTime(startEvent) > logInterval;\n lastEvent = evt;\n if (expired) startEvent = evt;\n return diff;\n }\n function pointerUp(evt) {\n if (!startEvent || !lastEvent) return 0;\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent);\n const diffTime = readTime(evt) - readTime(startEvent);\n const expired = readTime(evt) - readTime(lastEvent) > logInterval;\n const force = diffDrag / diffTime;\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1;\n return isFlick ? force : 0;\n }\n const self = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n };\n return self;\n}\n\nfunction NodeRects() {\n function measure(node) {\n const {\n offsetTop,\n offsetLeft,\n offsetWidth,\n offsetHeight\n } = node;\n const offset = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n };\n return offset;\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction PercentOfView(viewSize) {\n function measure(n) {\n return viewSize * (n / 100);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) {\n const observeNodes = [container].concat(slides);\n let resizeObserver;\n let containerSize;\n let slideSizes = [];\n let destroyed = false;\n function readSize(node) {\n return axis.measureSize(nodeRects.measure(node));\n }\n function init(emblaApi) {\n if (!watchResize) return;\n containerSize = readSize(container);\n slideSizes = slides.map(readSize);\n function defaultCallback(entries) {\n for (const entry of entries) {\n if (destroyed) return;\n const isContainer = entry.target === container;\n const slideIndex = slides.indexOf(entry.target);\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex];\n const newSize = readSize(isContainer ? container : slides[slideIndex]);\n const diffSize = mathAbs(newSize - lastSize);\n if (diffSize >= 0.5) {\n emblaApi.reInit();\n eventHandler.emit('resize');\n break;\n }\n }\n }\n resizeObserver = new ResizeObserver(entries => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries);\n }\n });\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach(node => resizeObserver.observe(node));\n });\n }\n function destroy() {\n destroyed = true;\n if (resizeObserver) resizeObserver.disconnect();\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) {\n let scrollVelocity = 0;\n let scrollDirection = 0;\n let scrollDuration = baseDuration;\n let scrollFriction = baseFriction;\n let rawLocation = location.get();\n let rawLocationPrevious = 0;\n function seek() {\n const displacement = target.get() - location.get();\n const isInstant = !scrollDuration;\n let scrollDistance = 0;\n if (isInstant) {\n scrollVelocity = 0;\n previousLocation.set(target);\n location.set(target);\n scrollDistance = displacement;\n } else {\n previousLocation.set(location);\n scrollVelocity += displacement / scrollDuration;\n scrollVelocity *= scrollFriction;\n rawLocation += scrollVelocity;\n location.add(scrollVelocity);\n scrollDistance = rawLocation - rawLocationPrevious;\n }\n scrollDirection = mathSign(scrollDistance);\n rawLocationPrevious = rawLocation;\n return self;\n }\n function settled() {\n const diff = target.get() - offsetLocation.get();\n return mathAbs(diff) < 0.001;\n }\n function duration() {\n return scrollDuration;\n }\n function direction() {\n return scrollDirection;\n }\n function velocity() {\n return scrollVelocity;\n }\n function useBaseDuration() {\n return useDuration(baseDuration);\n }\n function useBaseFriction() {\n return useFriction(baseFriction);\n }\n function useDuration(n) {\n scrollDuration = n;\n return self;\n }\n function useFriction(n) {\n scrollFriction = n;\n return self;\n }\n const self = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n };\n return self;\n}\n\nfunction ScrollBounds(limit, location, target, scrollBody, percentOfView) {\n const pullBackThreshold = percentOfView.measure(10);\n const edgeOffsetTolerance = percentOfView.measure(50);\n const frictionLimit = Limit(0.1, 0.99);\n let disabled = false;\n function shouldConstrain() {\n if (disabled) return false;\n if (!limit.reachedAny(target.get())) return false;\n if (!limit.reachedAny(location.get())) return false;\n return true;\n }\n function constrain(pointerDown) {\n if (!shouldConstrain()) return;\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max';\n const diffToEdge = mathAbs(limit[edge] - location.get());\n const diffToTarget = target.get() - location.get();\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance);\n target.subtract(diffToTarget * friction);\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()));\n scrollBody.useDuration(25).useBaseFriction();\n }\n }\n function toggleActive(active) {\n disabled = !active;\n }\n const self = {\n shouldConstrain,\n constrain,\n toggleActive\n };\n return self;\n}\n\nfunction ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) {\n const scrollBounds = Limit(-contentSize + viewSize, 0);\n const snapsBounded = measureBounded();\n const scrollContainLimit = findScrollContainLimit();\n const snapsContained = measureContained();\n function usePixelTolerance(bound, snap) {\n return deltaAbs(bound, snap) <= 1;\n }\n function findScrollContainLimit() {\n const startSnap = snapsBounded[0];\n const endSnap = arrayLast(snapsBounded);\n const min = snapsBounded.lastIndexOf(startSnap);\n const max = snapsBounded.indexOf(endSnap) + 1;\n return Limit(min, max);\n }\n function measureBounded() {\n return snapsAligned.map((snapAligned, index) => {\n const {\n min,\n max\n } = scrollBounds;\n const snap = scrollBounds.constrain(snapAligned);\n const isFirst = !index;\n const isLast = arrayIsLastIndex(snapsAligned, index);\n if (isFirst) return max;\n if (isLast) return min;\n if (usePixelTolerance(min, snap)) return min;\n if (usePixelTolerance(max, snap)) return max;\n return snap;\n }).map(scrollBound => parseFloat(scrollBound.toFixed(3)));\n }\n function measureContained() {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max];\n if (containScroll === 'keepSnaps') return snapsBounded;\n const {\n min,\n max\n } = scrollContainLimit;\n return snapsBounded.slice(min, max);\n }\n const self = {\n snapsContained,\n scrollContainLimit\n };\n return self;\n}\n\nfunction ScrollLimit(contentSize, scrollSnaps, loop) {\n const max = scrollSnaps[0];\n const min = loop ? max - contentSize : arrayLast(scrollSnaps);\n const limit = Limit(min, max);\n const self = {\n limit\n };\n return self;\n}\n\nfunction ScrollLooper(contentSize, limit, location, vectors) {\n const jointSafety = 0.1;\n const min = limit.min + jointSafety;\n const max = limit.max + jointSafety;\n const {\n reachedMin,\n reachedMax\n } = Limit(min, max);\n function shouldLoop(direction) {\n if (direction === 1) return reachedMax(location.get());\n if (direction === -1) return reachedMin(location.get());\n return false;\n }\n function loop(direction) {\n if (!shouldLoop(direction)) return;\n const loopDistance = contentSize * (direction * -1);\n vectors.forEach(v => v.add(loopDistance));\n }\n const self = {\n loop\n };\n return self;\n}\n\nfunction ScrollProgress(limit) {\n const {\n max,\n length\n } = limit;\n function get(n) {\n const currentLocation = n - max;\n return length ? currentLocation / -length : 0;\n }\n const self = {\n get\n };\n return self;\n}\n\nfunction ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) {\n const {\n startEdge,\n endEdge\n } = axis;\n const {\n groupSlides\n } = slidesToScroll;\n const alignments = measureSizes().map(alignment.measure);\n const snaps = measureUnaligned();\n const snapsAligned = measureAligned();\n function measureSizes() {\n return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs);\n }\n function measureUnaligned() {\n return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap));\n }\n function measureAligned() {\n return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]);\n }\n const self = {\n snaps,\n snapsAligned\n };\n return self;\n}\n\nfunction SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) {\n const {\n groupSlides\n } = slidesToScroll;\n const {\n min,\n max\n } = scrollContainLimit;\n const slideRegistry = createSlideRegistry();\n function createSlideRegistry() {\n const groupedSlideIndexes = groupSlides(slideIndexes);\n const doNotContain = !containSnaps || containScroll === 'keepSnaps';\n if (scrollSnaps.length === 1) return [slideIndexes];\n if (doNotContain) return groupedSlideIndexes;\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(groups, index);\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1;\n return arrayFromNumber(range);\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1;\n return arrayFromNumber(range, arrayLast(groups)[0]);\n }\n return group;\n });\n }\n const self = {\n slideRegistry\n };\n return self;\n}\n\nfunction ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) {\n const {\n reachedAny,\n removeOffset,\n constrain\n } = limit;\n function minDistance(distances) {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0];\n }\n function findTargetSnap(target) {\n const distance = loop ? removeOffset(target) : constrain(target);\n const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({\n diff: shortcut(snap - distance, 0),\n index\n })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff));\n const {\n index\n } = ascDiffsToSnaps[0];\n return {\n index,\n distance\n };\n }\n function shortcut(target, direction) {\n const targets = [target, target + contentSize, target - contentSize];\n if (!loop) return target;\n if (!direction) return minDistance(targets);\n const matchingTargets = targets.filter(t => mathSign(t) === direction);\n if (matchingTargets.length) return minDistance(matchingTargets);\n return arrayLast(targets) - contentSize;\n }\n function byIndex(index, direction) {\n const diffToSnap = scrollSnaps[index] - targetVector.get();\n const distance = shortcut(diffToSnap, direction);\n return {\n index,\n distance\n };\n }\n function byDistance(distance, snap) {\n const target = targetVector.get() + distance;\n const {\n index,\n distance: targetSnapDistance\n } = findTargetSnap(target);\n const reachedBound = !loop && reachedAny(target);\n if (!snap || reachedBound) return {\n index,\n distance\n };\n const diffToSnap = scrollSnaps[index] - targetSnapDistance;\n const snapDistance = distance + shortcut(diffToSnap, 0);\n return {\n index,\n distance: snapDistance\n };\n }\n const self = {\n byDistance,\n byIndex,\n shortcut\n };\n return self;\n}\n\nfunction ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) {\n function scrollTo(target) {\n const distanceDiff = target.distance;\n const indexDiff = target.index !== indexCurrent.get();\n targetVector.add(distanceDiff);\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start();\n } else {\n animation.update();\n animation.render(1);\n animation.update();\n }\n }\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get());\n indexCurrent.set(target.index);\n eventHandler.emit('select');\n }\n }\n function distance(n, snap) {\n const target = scrollTarget.byDistance(n, snap);\n scrollTo(target);\n }\n function index(n, direction) {\n const targetIndex = indexCurrent.clone().set(n);\n const target = scrollTarget.byIndex(targetIndex.get(), direction);\n scrollTo(target);\n }\n const self = {\n distance,\n index\n };\n return self;\n}\n\nfunction SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) {\n const focusListenerOptions = {\n passive: true,\n capture: true\n };\n let lastTabPressTime = 0;\n function init(emblaApi) {\n if (!watchFocus) return;\n function defaultCallback(index) {\n const nowTime = new Date().getTime();\n const diffTime = nowTime - lastTabPressTime;\n if (diffTime > 10) return;\n eventHandler.emit('slideFocusStart');\n root.scrollLeft = 0;\n const group = slideRegistry.findIndex(group => group.includes(index));\n if (!isNumber(group)) return;\n scrollBody.useDuration(0);\n scrollTo.index(group, 0);\n eventHandler.emit('slideFocus');\n }\n eventStore.add(document, 'keydown', registerTabPress, false);\n slides.forEach((slide, slideIndex) => {\n eventStore.add(slide, 'focus', evt => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex);\n }\n }, focusListenerOptions);\n });\n }\n function registerTabPress(event) {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime();\n }\n const self = {\n init\n };\n return self;\n}\n\nfunction Vector1D(initialValue) {\n let value = initialValue;\n function get() {\n return value;\n }\n function set(n) {\n value = normalizeInput(n);\n }\n function add(n) {\n value += normalizeInput(n);\n }\n function subtract(n) {\n value -= normalizeInput(n);\n }\n function normalizeInput(n) {\n return isNumber(n) ? n : n.get();\n }\n const self = {\n get,\n set,\n add,\n subtract\n };\n return self;\n}\n\nfunction Translate(axis, container) {\n const translate = axis.scroll === 'x' ? x : y;\n const containerStyle = container.style;\n let previousTarget = null;\n let disabled = false;\n function x(n) {\n return `translate3d(${n}px,0px,0px)`;\n }\n function y(n) {\n return `translate3d(0px,${n}px,0px)`;\n }\n function to(target) {\n if (disabled) return;\n const newTarget = roundToTwoDecimals(axis.direction(target));\n if (newTarget === previousTarget) return;\n containerStyle.transform = translate(newTarget);\n previousTarget = newTarget;\n }\n function toggleActive(active) {\n disabled = !active;\n }\n function clear() {\n if (disabled) return;\n containerStyle.transform = '';\n if (!container.getAttribute('style')) container.removeAttribute('style');\n }\n const self = {\n clear,\n to,\n toggleActive\n };\n return self;\n}\n\nfunction SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) {\n const roundingSafety = 0.5;\n const ascItems = arrayKeys(slideSizesWithGaps);\n const descItems = arrayKeys(slideSizesWithGaps).reverse();\n const loopPoints = startPoints().concat(endPoints());\n function removeSlideSizes(indexes, from) {\n return indexes.reduce((a, i) => {\n return a - slideSizesWithGaps[i];\n }, from);\n }\n function slidesInGap(indexes, gap) {\n return indexes.reduce((a, i) => {\n const remainingGap = removeSlideSizes(a, gap);\n return remainingGap > 0 ? a.concat([i]) : a;\n }, []);\n }\n function findSlideBounds(offset) {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }));\n }\n function findLoopPoints(indexes, offset, isEndEdge) {\n const slideBounds = findSlideBounds(offset);\n return indexes.map(index => {\n const initial = isEndEdge ? 0 : -contentSize;\n const altered = isEndEdge ? contentSize : 0;\n const boundEdge = isEndEdge ? 'end' : 'start';\n const loopPoint = slideBounds[index][boundEdge];\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => location.get() > loopPoint ? initial : altered\n };\n });\n }\n function startPoints() {\n const gap = scrollSnaps[0];\n const indexes = slidesInGap(descItems, gap);\n return findLoopPoints(indexes, contentSize, false);\n }\n function endPoints() {\n const gap = viewSize - scrollSnaps[0] - 1;\n const indexes = slidesInGap(ascItems, gap);\n return findLoopPoints(indexes, -contentSize, true);\n }\n function canLoop() {\n return loopPoints.every(({\n index\n }) => {\n const otherIndexes = ascItems.filter(i => i !== index);\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1;\n });\n }\n function loop() {\n loopPoints.forEach(loopPoint => {\n const {\n target,\n translate,\n slideLocation\n } = loopPoint;\n const shiftLocation = target();\n if (shiftLocation === slideLocation.get()) return;\n translate.to(shiftLocation);\n slideLocation.set(shiftLocation);\n });\n }\n function clear() {\n loopPoints.forEach(loopPoint => loopPoint.translate.clear());\n }\n const self = {\n canLoop,\n clear,\n loop,\n loopPoints\n };\n return self;\n}\n\nfunction SlidesHandler(container, eventHandler, watchSlides) {\n let mutationObserver;\n let destroyed = false;\n function init(emblaApi) {\n if (!watchSlides) return;\n function defaultCallback(mutations) {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit();\n eventHandler.emit('slidesChanged');\n break;\n }\n }\n }\n mutationObserver = new MutationObserver(mutations => {\n if (destroyed) return;\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations);\n }\n });\n mutationObserver.observe(container, {\n childList: true\n });\n }\n function destroy() {\n if (mutationObserver) mutationObserver.disconnect();\n destroyed = true;\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction SlidesInView(container, slides, eventHandler, threshold) {\n const intersectionEntryMap = {};\n let inViewCache = null;\n let notInViewCache = null;\n let intersectionObserver;\n let destroyed = false;\n function init() {\n intersectionObserver = new IntersectionObserver(entries => {\n if (destroyed) return;\n entries.forEach(entry => {\n const index = slides.indexOf(entry.target);\n intersectionEntryMap[index] = entry;\n });\n inViewCache = null;\n notInViewCache = null;\n eventHandler.emit('slidesInView');\n }, {\n root: container.parentElement,\n threshold\n });\n slides.forEach(slide => intersectionObserver.observe(slide));\n }\n function destroy() {\n if (intersectionObserver) intersectionObserver.disconnect();\n destroyed = true;\n }\n function createInViewList(inView) {\n return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => {\n const index = parseInt(slideIndex);\n const {\n isIntersecting\n } = intersectionEntryMap[index];\n const inViewMatch = inView && isIntersecting;\n const notInViewMatch = !inView && !isIntersecting;\n if (inViewMatch || notInViewMatch) list.push(index);\n return list;\n }, []);\n }\n function get(inView = true) {\n if (inView && inViewCache) return inViewCache;\n if (!inView && notInViewCache) return notInViewCache;\n const slideIndexes = createInViewList(inView);\n if (inView) inViewCache = slideIndexes;\n if (!inView) notInViewCache = slideIndexes;\n return slideIndexes;\n }\n const self = {\n init,\n destroy,\n get\n };\n return self;\n}\n\nfunction SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) {\n const {\n measureSize,\n startEdge,\n endEdge\n } = axis;\n const withEdgeGap = slideRects[0] && readEdgeGap;\n const startGap = measureStartGap();\n const endGap = measureEndGap();\n const slideSizes = slideRects.map(measureSize);\n const slideSizesWithGaps = measureWithGaps();\n function measureStartGap() {\n if (!withEdgeGap) return 0;\n const slideRect = slideRects[0];\n return mathAbs(containerRect[startEdge] - slideRect[startEdge]);\n }\n function measureEndGap() {\n if (!withEdgeGap) return 0;\n const style = ownerWindow.getComputedStyle(arrayLast(slides));\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`));\n }\n function measureWithGaps() {\n return slideRects.map((rect, index, rects) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(rects, index);\n if (isFirst) return slideSizes[index] + startGap;\n if (isLast) return slideSizes[index] + endGap;\n return rects[index + 1][startEdge] - rect[startEdge];\n }).map(mathAbs);\n }\n const self = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n };\n return self;\n}\n\nfunction SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) {\n const {\n startEdge,\n endEdge,\n direction\n } = axis;\n const groupByNumber = isNumber(slidesToScroll);\n function byNumber(array, groupSize) {\n return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize));\n }\n function bySize(array) {\n if (!array.length) return [];\n return arrayKeys(array).reduce((groups, rectB, index) => {\n const rectA = arrayLast(groups) || 0;\n const isFirst = rectA === 0;\n const isLast = rectB === arrayLastIndex(array);\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge];\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge];\n const gapA = !loop && isFirst ? direction(startGap) : 0;\n const gapB = !loop && isLast ? direction(endGap) : 0;\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA));\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB);\n if (isLast) groups.push(array.length);\n return groups;\n }, []).map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0);\n return array.slice(previousSize, currentSize);\n });\n }\n function groupSlides(array) {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array);\n }\n const self = {\n groupSlides\n };\n return self;\n}\n\nfunction Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options;\n // Measurements\n const pixelTolerance = 2;\n const nodeRects = NodeRects();\n const containerRect = nodeRects.measure(container);\n const slideRects = slides.map(nodeRects.measure);\n const axis = Axis(scrollAxis, direction);\n const viewSize = axis.measureSize(containerRect);\n const percentOfView = PercentOfView(viewSize);\n const alignment = Alignment(align, viewSize);\n const containSnaps = !loop && !!containScroll;\n const readEdgeGap = loop || !!containScroll;\n const {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow);\n const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance);\n const {\n snaps,\n snapsAligned\n } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll);\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps);\n const {\n snapsContained,\n scrollContainLimit\n } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance);\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned;\n const {\n limit\n } = ScrollLimit(contentSize, scrollSnaps, loop);\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop);\n const indexPrevious = index.clone();\n const slideIndexes = arrayKeys(slides);\n // Animation\n const update = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: {\n loop\n }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown());\n scrollBody.seek();\n };\n const render = ({\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: {\n loop\n }\n }, alpha) => {\n const shouldSettle = scrollBody.settled();\n const withinBounds = !scrollBounds.shouldConstrain();\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds;\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown();\n if (hasSettledAndIdle) animation.stop();\n const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha);\n offsetLocation.set(interpolatedLocation);\n if (loop) {\n scrollLooper.loop(scrollBody.direction());\n slideLooper.loop();\n }\n translate.to(offsetLocation.get());\n if (hasSettledAndIdle) eventHandler.emit('settle');\n if (!hasSettled) eventHandler.emit('scroll');\n };\n const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha));\n // Shared\n const friction = 0.68;\n const startLocation = scrollSnaps[index.get()];\n const location = Vector1D(startLocation);\n const previousLocation = Vector1D(startLocation);\n const offsetLocation = Vector1D(startLocation);\n const target = Vector1D(startLocation);\n const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction);\n const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target);\n const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler);\n const scrollProgress = ScrollProgress(limit);\n const eventStore = EventStore();\n const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold);\n const {\n slideRegistry\n } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes);\n const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus);\n // Engine\n const engine = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects),\n scrollBody,\n scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n };\n return engine;\n}\n\nfunction EventHandler() {\n let listeners = {};\n let api;\n function init(emblaApi) {\n api = emblaApi;\n }\n function getListeners(evt) {\n return listeners[evt] || [];\n }\n function emit(evt) {\n getListeners(evt).forEach(e => e(api, evt));\n return self;\n }\n function on(evt, cb) {\n listeners[evt] = getListeners(evt).concat([cb]);\n return self;\n }\n function off(evt, cb) {\n listeners[evt] = getListeners(evt).filter(e => e !== cb);\n return self;\n }\n function clear() {\n listeners = {};\n }\n const self = {\n init,\n emit,\n off,\n on,\n clear\n };\n return self;\n}\n\nconst defaultOptions = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n};\n\nfunction OptionsHandler(ownerWindow) {\n function mergeOptions(optionsA, optionsB) {\n return objectsMergeDeep(optionsA, optionsB || {});\n }\n function optionsAtMedia(options) {\n const optionsAtMedia = options.breakpoints || {};\n const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {});\n return mergeOptions(options, matchedMediaOptions);\n }\n function optionsMediaQueries(optionsList) {\n return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia);\n }\n const self = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n };\n return self;\n}\n\nfunction PluginsHandler(optionsHandler) {\n let activePlugins = [];\n function init(emblaApi, plugins) {\n activePlugins = plugins.filter(({\n options\n }) => optionsHandler.optionsAtMedia(options).active !== false);\n activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler));\n return plugins.reduce((map, plugin) => Object.assign(map, {\n [plugin.name]: plugin\n }), {});\n }\n function destroy() {\n activePlugins = activePlugins.filter(plugin => plugin.destroy());\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction EmblaCarousel(root, userOptions, userPlugins) {\n const ownerDocument = root.ownerDocument;\n const ownerWindow = ownerDocument.defaultView;\n const optionsHandler = OptionsHandler(ownerWindow);\n const pluginsHandler = PluginsHandler(optionsHandler);\n const mediaHandlers = EventStore();\n const eventHandler = EventHandler();\n const {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n } = optionsHandler;\n const {\n on,\n off,\n emit\n } = eventHandler;\n const reInit = reActivate;\n let destroyed = false;\n let engine;\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions);\n let options = mergeOptions(optionsBase);\n let pluginList = [];\n let pluginApis;\n let container;\n let slides;\n function storeElements() {\n const {\n container: userContainer,\n slides: userSlides\n } = options;\n const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer;\n container = customContainer || root.children[0];\n const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides;\n slides = [].slice.call(customSlides || container.children);\n }\n function createEngine(options) {\n const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler);\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, {\n loop: false\n });\n return createEngine(optionsWithoutLoop);\n }\n return engine;\n }\n function activate(withOptions, withPlugins) {\n if (destroyed) return;\n optionsBase = mergeOptions(optionsBase, withOptions);\n options = optionsAtMedia(optionsBase);\n pluginList = withPlugins || pluginList;\n storeElements();\n engine = createEngine(options);\n optionsMediaQueries([optionsBase, ...pluginList.map(({\n options\n }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate));\n if (!options.active) return;\n engine.translate.to(engine.location.get());\n engine.animation.init();\n engine.slidesInView.init();\n engine.slideFocus.init(self);\n engine.eventHandler.init(self);\n engine.resizeHandler.init(self);\n engine.slidesHandler.init(self);\n if (engine.options.loop) engine.slideLooper.loop();\n if (container.offsetParent && slides.length) engine.dragHandler.init(self);\n pluginApis = pluginsHandler.init(self, pluginList);\n }\n function reActivate(withOptions, withPlugins) {\n const startIndex = selectedScrollSnap();\n deActivate();\n activate(mergeOptions({\n startIndex\n }, withOptions), withPlugins);\n eventHandler.emit('reInit');\n }\n function deActivate() {\n engine.dragHandler.destroy();\n engine.eventStore.clear();\n engine.translate.clear();\n engine.slideLooper.clear();\n engine.resizeHandler.destroy();\n engine.slidesHandler.destroy();\n engine.slidesInView.destroy();\n engine.animation.destroy();\n pluginsHandler.destroy();\n mediaHandlers.clear();\n }\n function destroy() {\n if (destroyed) return;\n destroyed = true;\n mediaHandlers.clear();\n deActivate();\n eventHandler.emit('destroy');\n eventHandler.clear();\n }\n function scrollTo(index, jump, direction) {\n if (!options.active || destroyed) return;\n engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration);\n engine.scrollTo.index(index, direction || 0);\n }\n function scrollNext(jump) {\n const next = engine.index.add(1).get();\n scrollTo(next, jump, -1);\n }\n function scrollPrev(jump) {\n const prev = engine.index.add(-1).get();\n scrollTo(prev, jump, 1);\n }\n function canScrollNext() {\n const next = engine.index.add(1).get();\n return next !== selectedScrollSnap();\n }\n function canScrollPrev() {\n const prev = engine.index.add(-1).get();\n return prev !== selectedScrollSnap();\n }\n function scrollSnapList() {\n return engine.scrollSnapList;\n }\n function scrollProgress() {\n return engine.scrollProgress.get(engine.offsetLocation.get());\n }\n function selectedScrollSnap() {\n return engine.index.get();\n }\n function previousScrollSnap() {\n return engine.indexPrevious.get();\n }\n function slidesInView() {\n return engine.slidesInView.get();\n }\n function slidesNotInView() {\n return engine.slidesInView.get(false);\n }\n function plugins() {\n return pluginApis;\n }\n function internalEngine() {\n return engine;\n }\n function rootNode() {\n return root;\n }\n function containerNode() {\n return container;\n }\n function slideNodes() {\n return slides;\n }\n const self = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n };\n activate(userOptions, userPlugins);\n setTimeout(() => eventHandler.emit('init'), 0);\n return self;\n}\nEmblaCarousel.globalOptions = undefined;\n\nexport { EmblaCarousel as default };\n//# sourceMappingURL=embla-carousel.esm.js.map\n","import { useRef, useState, useCallback, useEffect } from 'react';\nimport { areOptionsEqual, arePluginsEqual, canUseDOM } from 'embla-carousel-reactive-utils';\nimport EmblaCarousel from 'embla-carousel';\n\nfunction useEmblaCarousel(options = {}, plugins = []) {\n const storedOptions = useRef(options);\n const storedPlugins = useRef(plugins);\n const [emblaApi, setEmblaApi] = useState();\n const [viewport, setViewport] = useState();\n const reInit = useCallback(() => {\n if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current);\n }, [emblaApi]);\n useEffect(() => {\n if (areOptionsEqual(storedOptions.current, options)) return;\n storedOptions.current = options;\n reInit();\n }, [options, reInit]);\n useEffect(() => {\n if (arePluginsEqual(storedPlugins.current, plugins)) return;\n storedPlugins.current = plugins;\n reInit();\n }, [plugins, reInit]);\n useEffect(() => {\n if (canUseDOM() && viewport) {\n EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions;\n const newEmblaApi = EmblaCarousel(viewport, storedOptions.current, storedPlugins.current);\n setEmblaApi(newEmblaApi);\n return () => newEmblaApi.destroy();\n } else {\n setEmblaApi(undefined);\n }\n }, [viewport, setEmblaApi]);\n return [setViewport, emblaApi];\n}\nuseEmblaCarousel.globalOptions = undefined;\n\nexport { useEmblaCarousel as default };\n//# sourceMappingURL=embla-carousel-react.esm.js.map\n","import { createContext, forwardRef, useCallback, useContext, useEffect, useState, type HTMLAttributes } from 'react';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { IconButton } from './IconButton';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype CarouselOptions = Parameters<typeof useEmblaCarousel>[0];\n\ninterface CarouselContextValue {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: CarouselApi;\n canPrev: boolean;\n canNext: boolean;\n scrollPrev: () => void;\n scrollNext: () => void;\n orientation: 'horizontal' | 'vertical';\n}\n\nconst CarouselContext = createContext<CarouselContextValue | null>(null);\n\nfunction useCarousel() {\n const ctx = useContext(CarouselContext);\n if (!ctx) throw new Error('Carousel components must be used inside <Carousel>');\n return ctx;\n}\n\nexport interface CarouselProps extends HTMLAttributes<HTMLDivElement> {\n opts?: CarouselOptions;\n orientation?: 'horizontal' | 'vertical';\n setApi?: (api: CarouselApi) => void;\n}\n\n/**\n * Embla-backed carousel. Compose with `<CarouselContent>`, `<CarouselItem>`,\n * `<CarouselPrevious>`, and `<CarouselNext>`.\n */\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(function Carousel(\n { opts, orientation = 'horizontal', setApi, className, children, ...props },\n ref,\n) {\n const [carouselRef, api] = useEmblaCarousel({ ...opts, axis: orientation === 'horizontal' ? 'x' : 'y' });\n const [canPrev, setCanPrev] = useState(false);\n const [canNext, setCanNext] = useState(false);\n\n const onSelect = useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanPrev(api.canScrollPrev());\n setCanNext(api.canScrollNext());\n }, []);\n\n useEffect(() => {\n if (!api) return;\n setApi?.(api);\n onSelect(api);\n api.on('reInit', onSelect).on('select', onSelect);\n return () => {\n api.off('reInit', onSelect).off('select', onSelect);\n };\n }, [api, onSelect, setApi]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api,\n canPrev,\n canNext,\n scrollPrev: () => api?.scrollPrev(),\n scrollNext: () => api?.scrollNext(),\n orientation,\n }}\n >\n <div ref={ref} className={cn('relative', className)} role=\"region\" aria-roledescription=\"carousel\" {...props}>\n {children}\n </div>\n </CarouselContext.Provider>\n );\n});\n\nexport const CarouselContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CarouselContent({ className, ...props }, ref) {\n const { carouselRef, orientation } = useCarousel();\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn(\n 'flex',\n orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',\n className,\n )}\n {...props}\n />\n </div>\n );\n },\n);\n\nexport const CarouselItem = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CarouselItem({ className, ...props }, ref) {\n const { orientation } = useCarousel();\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\n 'min-w-0 shrink-0 grow-0 basis-full',\n orientation === 'horizontal' ? 'pl-4' : 'pt-4',\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nexport function CarouselPrevious({ className }: { className?: string }) {\n const { canPrev, scrollPrev, orientation } = useCarousel();\n return (\n <IconButton\n aria-label=\"Previous\"\n variant=\"outline\"\n disabled={!canPrev}\n onClick={scrollPrev}\n icon={<ChevronLeft />}\n className={cn(\n 'absolute z-10',\n orientation === 'horizontal'\n ? '-left-12 top-1/2 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n />\n );\n}\n\nexport function CarouselNext({ className }: { className?: string }) {\n const { canNext, scrollNext, orientation } = useCarousel();\n return (\n <IconButton\n aria-label=\"Next\"\n variant=\"outline\"\n disabled={!canNext}\n onClick={scrollNext}\n icon={<ChevronRight />}\n className={cn(\n 'absolute z-10',\n orientation === 'horizontal'\n ? '-right-12 top-1/2 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n />\n );\n}\n","import { type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\n/**\n * Tiny, dependency-free chart primitives for inline dashboards. For complex\n * visualisations reach for a charting library (Recharts, visx). These suffice\n * for sparklines, KPI cards, and at-a-glance trends.\n */\n\nexport interface ChartPoint {\n x: string | number;\n y: number;\n}\n\nexport interface ChartProps {\n data: ChartPoint[];\n /** Defaults to 24px height per point + 60px padding. */\n height?: number;\n /** Defaults to fluid 100%. */\n width?: number | string;\n /** Tooltip / label rendered above the chart. */\n caption?: ReactNode;\n className?: string;\n}\n\nfunction useScales(data: ChartPoint[], w: number, h: number, padding = 8) {\n const ys = data.map((d) => d.y);\n const min = Math.min(0, ...ys);\n const max = Math.max(...ys, 1);\n const range = max - min || 1;\n const innerW = w - padding * 2;\n const innerH = h - padding * 2;\n const sx = (i: number) =>\n data.length <= 1 ? padding + innerW / 2 : padding + (i / (data.length - 1)) * innerW;\n const sy = (v: number) => padding + innerH - ((v - min) / range) * innerH;\n return { sx, sy, min, max };\n}\n\nexport function LineChart({ data, height = 80, width = '100%', caption, className }: ChartProps) {\n const w = typeof width === 'number' ? width : 320;\n const { sx, sy } = useScales(data, w, height);\n const path = data.map((d, i) => `${i === 0 ? 'M' : 'L'}${sx(i).toFixed(1)},${sy(d.y).toFixed(1)}`).join(' ');\n\n return (\n <figure className={cn('flex flex-col gap-1.5', className)}>\n {caption && <figcaption className=\"text-xs text-foreground-muted\">{caption}</figcaption>}\n <svg viewBox={`0 0 ${w} ${height}`} width={width} height={height} role=\"img\">\n <path d={path} fill=\"none\" stroke=\"var(--color-accent)\" strokeWidth={1.75} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n {data.map((d, i) => (\n <circle key={i} cx={sx(i)} cy={sy(d.y)} r={2} fill=\"var(--color-accent)\" />\n ))}\n </svg>\n </figure>\n );\n}\n\nexport function AreaChart({ data, height = 80, width = '100%', caption, className }: ChartProps) {\n const w = typeof width === 'number' ? width : 320;\n const { sx, sy } = useScales(data, w, height);\n const top = data.map((d, i) => `${i === 0 ? 'M' : 'L'}${sx(i).toFixed(1)},${sy(d.y).toFixed(1)}`).join(' ');\n const area = `${top} L${sx(data.length - 1).toFixed(1)},${height} L${sx(0).toFixed(1)},${height} Z`;\n\n return (\n <figure className={cn('flex flex-col gap-1.5', className)}>\n {caption && <figcaption className=\"text-xs text-foreground-muted\">{caption}</figcaption>}\n <svg viewBox={`0 0 ${w} ${height}`} width={width} height={height} role=\"img\">\n <path d={area} fill=\"var(--color-accent-soft)\" />\n <path d={top} fill=\"none\" stroke=\"var(--color-accent)\" strokeWidth={1.5} />\n </svg>\n </figure>\n );\n}\n\nexport function BarChart({ data, height = 100, width = '100%', caption, className }: ChartProps) {\n const w = typeof width === 'number' ? width : 320;\n const padding = 8;\n const gap = 2;\n const innerW = w - padding * 2;\n const barW = Math.max(2, innerW / data.length - gap);\n const ys = data.map((d) => d.y);\n const max = Math.max(...ys, 1);\n\n return (\n <figure className={cn('flex flex-col gap-1.5', className)}>\n {caption && <figcaption className=\"text-xs text-foreground-muted\">{caption}</figcaption>}\n <svg viewBox={`0 0 ${w} ${height}`} width={width} height={height} role=\"img\">\n {data.map((d, i) => {\n const h = ((d.y / max) * (height - padding * 2));\n return (\n <rect\n key={i}\n x={padding + i * (barW + gap)}\n y={height - padding - h}\n width={barW}\n height={h}\n fill=\"var(--color-accent)\"\n rx={1.5}\n >\n <title>{`${d.x}: ${d.y}`}</title>\n </rect>\n );\n })}\n </svg>\n </figure>\n );\n}\n","'use client';\nfunction __insertCSS(code) {\n if (!code || typeof document == 'undefined') return\n let head = document.head || document.getElementsByTagName('head')[0]\n let style = document.createElement('style')\n style.type = 'text/css'\n head.appendChild(style)\n ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code))\n}\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as React from 'react';\nimport React__default, { useLayoutEffect, useEffect, useMemo } from 'react';\n\nconst DrawerContext = React__default.createContext({\n drawerRef: {\n current: null\n },\n overlayRef: {\n current: null\n },\n onPress: ()=>{},\n onRelease: ()=>{},\n onDrag: ()=>{},\n onNestedDrag: ()=>{},\n onNestedOpenChange: ()=>{},\n onNestedRelease: ()=>{},\n openProp: undefined,\n dismissible: false,\n isOpen: false,\n isDragging: false,\n keyboardIsOpen: {\n current: false\n },\n snapPointsOffset: null,\n snapPoints: null,\n handleOnly: false,\n modal: false,\n shouldFade: false,\n activeSnapPoint: null,\n onOpenChange: ()=>{},\n setActiveSnapPoint: ()=>{},\n closeDrawer: ()=>{},\n direction: 'bottom',\n shouldAnimate: {\n current: true\n },\n shouldScaleBackground: false,\n setBackgroundColorOnScale: true,\n noBodyStyles: false,\n container: null,\n autoFocus: false\n});\nconst useDrawerContext = ()=>{\n const context = React__default.useContext(DrawerContext);\n if (!context) {\n throw new Error('useDrawerContext must be used within a Drawer.Root');\n }\n return context;\n};\n\n__insertCSS(\"[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32, .72, 0, 1);animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--initial-transform,100%),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--initial-transform,100%),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-animate=false]{animation:none!important}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opacity .5s cubic-bezier(.32, .72, 0, 1)}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:1}[data-vaul-drawer]:not([data-vaul-custom-container=true])::after{content:'';position:absolute;background:inherit;background-color:inherit}[data-vaul-drawer][data-vaul-drawer-direction=top]::after{top:initial;bottom:100%;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=bottom]::after{top:100%;bottom:initial;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=left]::after{left:initial;right:100%;top:0;bottom:0;width:200%}[data-vaul-drawer][data-vaul-drawer-direction=right]::after{left:100%;right:initial;top:0;bottom:0;width:200%}[data-vaul-overlay][data-vaul-snap-points=true]:not([data-vaul-snap-points-overlay=true]):not(\\n[data-state=closed]\\n){opacity:0}[data-vaul-overlay][data-vaul-snap-points-overlay=true]{opacity:1}[data-vaul-handle]{display:block;position:relative;opacity:.7;background:#e2e2e4;margin-left:auto;margin-right:auto;height:5px;width:32px;border-radius:1rem;touch-action:pan-y}[data-vaul-handle]:active,[data-vaul-handle]:hover{opacity:1}[data-vaul-handle-hitarea]{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100%,2.75rem);height:max(100%,2.75rem);touch-action:inherit}@media (hover:hover) and (pointer:fine){[data-vaul-drawer]{user-select:none}}@media (pointer:fine){[data-vaul-handle-hitarea]:{width:100%;height:100%}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeOut{to{opacity:0}}@keyframes slideFromBottom{from{transform:translate3d(0,var(--initial-transform,100%),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToBottom{to{transform:translate3d(0,var(--initial-transform,100%),0)}}@keyframes slideFromTop{from{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToTop{to{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}}@keyframes slideFromLeft{from{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToLeft{to{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}}@keyframes slideFromRight{from{transform:translate3d(var(--initial-transform,100%),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToRight{to{transform:translate3d(var(--initial-transform,100%),0,0)}}\");\n\nfunction isMobileFirefox() {\n const userAgent = navigator.userAgent;\n return typeof window !== 'undefined' && (/Firefox/.test(userAgent) && /Mobile/.test(userAgent) || // Android Firefox\n /FxiOS/.test(userAgent) // iOS Firefox\n );\n}\nfunction isMac() {\n return testPlatform(/^Mac/);\n}\nfunction isIPhone() {\n return testPlatform(/^iPhone/);\n}\nfunction isSafari() {\n return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n}\nfunction isIPad() {\n return testPlatform(/^iPad/) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n isMac() && navigator.maxTouchPoints > 1;\n}\nfunction isIOS() {\n return isIPhone() || isIPad();\n}\nfunction testPlatform(re) {\n return typeof window !== 'undefined' && window.navigator != null ? re.test(window.navigator.platform) : undefined;\n}\n\n// This code comes from https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/overlays/src/usePreventScroll.ts\nconst KEYBOARD_BUFFER = 24;\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\nfunction chain$1(...callbacks) {\n return (...args)=>{\n for (let callback of callbacks){\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n };\n}\n// @ts-ignore\nconst visualViewport = typeof document !== 'undefined' && window.visualViewport;\nfunction isScrollable(node) {\n let style = window.getComputedStyle(node);\n return /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);\n}\nfunction getScrollParent(node) {\n if (isScrollable(node)) {\n node = node.parentElement;\n }\n while(node && !isScrollable(node)){\n node = node.parentElement;\n }\n return node || document.scrollingElement || document.documentElement;\n}\n// HTML input types that do not cause the software keyboard to appear.\nconst nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\n// The number of active usePreventScroll calls. Used to determine whether to revert back to the original page style/scroll position\nlet preventScrollCount = 0;\nlet restore;\n/**\n * Prevents scrolling on the document body on mount, and\n * restores it on unmount. Also ensures that content does not\n * shift due to the scrollbars disappearing.\n */ function usePreventScroll(options = {}) {\n let { isDisabled } = options;\n useIsomorphicLayoutEffect(()=>{\n if (isDisabled) {\n return;\n }\n preventScrollCount++;\n if (preventScrollCount === 1) {\n if (isIOS()) {\n restore = preventScrollMobileSafari();\n }\n }\n return ()=>{\n preventScrollCount--;\n if (preventScrollCount === 0) {\n restore == null ? void 0 : restore();\n }\n };\n }, [\n isDisabled\n ]);\n}\n// Mobile Safari is a whole different beast. Even with overflow: hidden,\n// it still scrolls the page in many situations:\n//\n// 1. When the bottom toolbar and address bar are collapsed, page scrolling is always allowed.\n// 2. When the keyboard is visible, the viewport does not resize. Instead, the keyboard covers part of\n// it, so it becomes scrollable.\n// 3. When tapping on an input, the page always scrolls so that the input is centered in the visual viewport.\n// This may cause even fixed position elements to scroll off the screen.\n// 4. When using the next/previous buttons in the keyboard to navigate between inputs, the whole page always\n// scrolls, even if the input is inside a nested scrollable element that could be scrolled instead.\n//\n// In order to work around these cases, and prevent scrolling without jankiness, we do a few things:\n//\n// 1. Prevent default on `touchmove` events that are not in a scrollable element. This prevents touch scrolling\n// on the window.\n// 2. Prevent default on `touchmove` events inside a scrollable element when the scroll position is at the\n// top or bottom. This avoids the whole page scrolling instead, but does prevent overscrolling.\n// 3. Prevent default on `touchend` events on input elements and handle focusing the element ourselves.\n// 4. When focusing an input, apply a transform to trick Safari into thinking the input is at the top\n// of the page, which prevents it from scrolling the page. After the input is focused, scroll the element\n// into view ourselves, without scrolling the whole page.\n// 5. Offset the body by the scroll position using a negative margin and scroll to the top. This should appear the\n// same visually, but makes the actual scroll position always zero. This is required to make all of the\n// above work or Safari will still try to scroll the page when focusing an input.\n// 6. As a last resort, handle window scroll events, and scroll back to the top. This can happen when attempting\n// to navigate to an input with the next/previous buttons that's outside a modal.\nfunction preventScrollMobileSafari() {\n let scrollable;\n let lastY = 0;\n let onTouchStart = (e)=>{\n // Store the nearest scrollable parent element from the element that the user touched.\n scrollable = getScrollParent(e.target);\n if (scrollable === document.documentElement && scrollable === document.body) {\n return;\n }\n lastY = e.changedTouches[0].pageY;\n };\n let onTouchMove = (e)=>{\n // Prevent scrolling the window.\n if (!scrollable || scrollable === document.documentElement || scrollable === document.body) {\n e.preventDefault();\n return;\n }\n // Prevent scrolling up when at the top and scrolling down when at the bottom\n // of a nested scrollable area, otherwise mobile Safari will start scrolling\n // the window instead. Unfortunately, this disables bounce scrolling when at\n // the top but it's the best we can do.\n let y = e.changedTouches[0].pageY;\n let scrollTop = scrollable.scrollTop;\n let bottom = scrollable.scrollHeight - scrollable.clientHeight;\n if (bottom === 0) {\n return;\n }\n if (scrollTop <= 0 && y > lastY || scrollTop >= bottom && y < lastY) {\n e.preventDefault();\n }\n lastY = y;\n };\n let onTouchEnd = (e)=>{\n let target = e.target;\n // Apply this change if we're not already focused on the target element\n if (isInput(target) && target !== document.activeElement) {\n e.preventDefault();\n // Apply a transform to trick Safari into thinking the input is at the top of the page\n // so it doesn't try to scroll it into view. When tapping on an input, this needs to\n // be done before the \"focus\" event, so we have to focus the element ourselves.\n target.style.transform = 'translateY(-2000px)';\n target.focus();\n requestAnimationFrame(()=>{\n target.style.transform = '';\n });\n }\n };\n let onFocus = (e)=>{\n let target = e.target;\n if (isInput(target)) {\n // Transform also needs to be applied in the focus event in cases where focus moves\n // other than tapping on an input directly, e.g. the next/previous buttons in the\n // software keyboard. In these cases, it seems applying the transform in the focus event\n // is good enough, whereas when tapping an input, it must be done before the focus event. 🤷♂️\n target.style.transform = 'translateY(-2000px)';\n requestAnimationFrame(()=>{\n target.style.transform = '';\n // This will have prevented the browser from scrolling the focused element into view,\n // so we need to do this ourselves in a way that doesn't cause the whole page to scroll.\n if (visualViewport) {\n if (visualViewport.height < window.innerHeight) {\n // If the keyboard is already visible, do this after one additional frame\n // to wait for the transform to be removed.\n requestAnimationFrame(()=>{\n scrollIntoView(target);\n });\n } else {\n // Otherwise, wait for the visual viewport to resize before scrolling so we can\n // measure the correct position to scroll to.\n visualViewport.addEventListener('resize', ()=>scrollIntoView(target), {\n once: true\n });\n }\n }\n });\n }\n };\n let onWindowScroll = ()=>{\n // Last resort. If the window scrolled, scroll it back to the top.\n // It should always be at the top because the body will have a negative margin (see below).\n window.scrollTo(0, 0);\n };\n // Record the original scroll position so we can restore it.\n // Then apply a negative margin to the body to offset it by the scroll position. This will\n // enable us to scroll the window to the top, which is required for the rest of this to work.\n let scrollX = window.pageXOffset;\n let scrollY = window.pageYOffset;\n let restoreStyles = chain$1(setStyle(document.documentElement, 'paddingRight', `${window.innerWidth - document.documentElement.clientWidth}px`));\n // Scroll to the top. The negative margin on the body will make this appear the same.\n window.scrollTo(0, 0);\n let removeEvents = chain$1(addEvent(document, 'touchstart', onTouchStart, {\n passive: false,\n capture: true\n }), addEvent(document, 'touchmove', onTouchMove, {\n passive: false,\n capture: true\n }), addEvent(document, 'touchend', onTouchEnd, {\n passive: false,\n capture: true\n }), addEvent(document, 'focus', onFocus, true), addEvent(window, 'scroll', onWindowScroll));\n return ()=>{\n // Restore styles and scroll the page back to where it was.\n restoreStyles();\n removeEvents();\n window.scrollTo(scrollX, scrollY);\n };\n}\n// Sets a CSS property on an element, and returns a function to revert it to the previous value.\nfunction setStyle(element, style, value) {\n // https://github.com/microsoft/TypeScript/issues/17827#issuecomment-391663310\n // @ts-ignore\n let cur = element.style[style];\n // @ts-ignore\n element.style[style] = value;\n return ()=>{\n // @ts-ignore\n element.style[style] = cur;\n };\n}\n// Adds an event listener to an element, and returns a function to remove it.\nfunction addEvent(target, event, handler, options) {\n // @ts-ignore\n target.addEventListener(event, handler, options);\n return ()=>{\n // @ts-ignore\n target.removeEventListener(event, handler, options);\n };\n}\nfunction scrollIntoView(target) {\n let root = document.scrollingElement || document.documentElement;\n while(target && target !== root){\n // Find the parent scrollable element and adjust the scroll position if the target is not already in view.\n let scrollable = getScrollParent(target);\n if (scrollable !== document.documentElement && scrollable !== document.body && scrollable !== target) {\n let scrollableTop = scrollable.getBoundingClientRect().top;\n let targetTop = target.getBoundingClientRect().top;\n let targetBottom = target.getBoundingClientRect().bottom;\n // Buffer is needed for some edge cases\n const keyboardHeight = scrollable.getBoundingClientRect().bottom + KEYBOARD_BUFFER;\n if (targetBottom > keyboardHeight) {\n scrollable.scrollTop += targetTop - scrollableTop;\n }\n }\n // @ts-ignore\n target = scrollable.parentElement;\n }\n}\nfunction isInput(target) {\n return target instanceof HTMLInputElement && !nonTextInputTypes.has(target.type) || target instanceof HTMLTextAreaElement || target instanceof HTMLElement && target.isContentEditable;\n}\n\n// This code comes from https://github.com/radix-ui/primitives/tree/main/packages/react/compose-refs\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */ function setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */ function composeRefs(...refs) {\n return (node)=>refs.forEach((ref)=>setRef(ref, node));\n}\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */ function useComposedRefs(...refs) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nconst cache = new WeakMap();\nfunction set(el, styles, ignoreCache = false) {\n if (!el || !(el instanceof HTMLElement)) return;\n let originalStyles = {};\n Object.entries(styles).forEach(([key, value])=>{\n if (key.startsWith('--')) {\n el.style.setProperty(key, value);\n return;\n }\n originalStyles[key] = el.style[key];\n el.style[key] = value;\n });\n if (ignoreCache) return;\n cache.set(el, originalStyles);\n}\nfunction reset(el, prop) {\n if (!el || !(el instanceof HTMLElement)) return;\n let originalStyles = cache.get(el);\n if (!originalStyles) {\n return;\n }\n {\n el.style[prop] = originalStyles[prop];\n }\n}\nconst isVertical = (direction)=>{\n switch(direction){\n case 'top':\n case 'bottom':\n return true;\n case 'left':\n case 'right':\n return false;\n default:\n return direction;\n }\n};\nfunction getTranslate(element, direction) {\n if (!element) {\n return null;\n }\n const style = window.getComputedStyle(element);\n const transform = // @ts-ignore\n style.transform || style.webkitTransform || style.mozTransform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) {\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix3d\n return parseFloat(mat[1].split(', ')[isVertical(direction) ? 13 : 12]);\n }\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[isVertical(direction) ? 5 : 4]) : null;\n}\nfunction dampenValue(v) {\n return 8 * (Math.log(v + 1) - 2);\n}\nfunction assignStyle(element, style) {\n if (!element) return ()=>{};\n const prevStyle = element.style.cssText;\n Object.assign(element.style, style);\n return ()=>{\n element.style.cssText = prevStyle;\n };\n}\n/**\n * Receives functions as arguments and returns a new function that calls all.\n */ function chain(...fns) {\n return (...args)=>{\n for (const fn of fns){\n if (typeof fn === 'function') {\n // @ts-ignore\n fn(...args);\n }\n }\n };\n}\n\nconst TRANSITIONS = {\n DURATION: 0.5,\n EASE: [\n 0.32,\n 0.72,\n 0,\n 1\n ]\n};\nconst VELOCITY_THRESHOLD = 0.4;\nconst CLOSE_THRESHOLD = 0.25;\nconst SCROLL_LOCK_TIMEOUT = 100;\nconst BORDER_RADIUS = 8;\nconst NESTED_DISPLACEMENT = 16;\nconst WINDOW_TOP_OFFSET = 26;\nconst DRAG_CLASS = 'vaul-dragging';\n\n// This code comes from https://github.com/radix-ui/primitives/blob/main/packages/react/use-controllable-state/src/useControllableState.tsx\nfunction useCallbackRef(callback) {\n const callbackRef = React__default.useRef(callback);\n React__default.useEffect(()=>{\n callbackRef.current = callback;\n });\n // https://github.com/facebook/react/issues/19240\n return React__default.useMemo(()=>(...args)=>callbackRef.current == null ? void 0 : callbackRef.current.call(callbackRef, ...args), []);\n}\nfunction useUncontrolledState({ defaultProp, onChange }) {\n const uncontrolledState = React__default.useState(defaultProp);\n const [value] = uncontrolledState;\n const prevValueRef = React__default.useRef(value);\n const handleChange = useCallbackRef(onChange);\n React__default.useEffect(()=>{\n if (prevValueRef.current !== value) {\n handleChange(value);\n prevValueRef.current = value;\n }\n }, [\n value,\n prevValueRef,\n handleChange\n ]);\n return uncontrolledState;\n}\nfunction useControllableState({ prop, defaultProp, onChange = ()=>{} }) {\n const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledProp;\n const handleChange = useCallbackRef(onChange);\n const setValue = React__default.useCallback((nextValue)=>{\n if (isControlled) {\n const setter = nextValue;\n const value = typeof nextValue === 'function' ? setter(prop) : nextValue;\n if (value !== prop) handleChange(value);\n } else {\n setUncontrolledProp(nextValue);\n }\n }, [\n isControlled,\n prop,\n setUncontrolledProp,\n handleChange\n ]);\n return [\n value,\n setValue\n ];\n}\n\nfunction useSnapPoints({ activeSnapPointProp, setActiveSnapPointProp, snapPoints, drawerRef, overlayRef, fadeFromIndex, onSnapPointChange, direction = 'bottom', container, snapToSequentialPoint }) {\n const [activeSnapPoint, setActiveSnapPoint] = useControllableState({\n prop: activeSnapPointProp,\n defaultProp: snapPoints == null ? void 0 : snapPoints[0],\n onChange: setActiveSnapPointProp\n });\n const [windowDimensions, setWindowDimensions] = React__default.useState(typeof window !== 'undefined' ? {\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight\n } : undefined);\n React__default.useEffect(()=>{\n function onResize() {\n setWindowDimensions({\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight\n });\n }\n window.addEventListener('resize', onResize);\n return ()=>window.removeEventListener('resize', onResize);\n }, []);\n const isLastSnapPoint = React__default.useMemo(()=>activeSnapPoint === (snapPoints == null ? void 0 : snapPoints[snapPoints.length - 1]) || null, [\n snapPoints,\n activeSnapPoint\n ]);\n const activeSnapPointIndex = React__default.useMemo(()=>{\n var _snapPoints_findIndex;\n return (_snapPoints_findIndex = snapPoints == null ? void 0 : snapPoints.findIndex((snapPoint)=>snapPoint === activeSnapPoint)) != null ? _snapPoints_findIndex : null;\n }, [\n snapPoints,\n activeSnapPoint\n ]);\n const shouldFade = snapPoints && snapPoints.length > 0 && (fadeFromIndex || fadeFromIndex === 0) && !Number.isNaN(fadeFromIndex) && snapPoints[fadeFromIndex] === activeSnapPoint || !snapPoints;\n const snapPointsOffset = React__default.useMemo(()=>{\n const containerSize = container ? {\n width: container.getBoundingClientRect().width,\n height: container.getBoundingClientRect().height\n } : typeof window !== 'undefined' ? {\n width: window.innerWidth,\n height: window.innerHeight\n } : {\n width: 0,\n height: 0\n };\n var _snapPoints_map;\n return (_snapPoints_map = snapPoints == null ? void 0 : snapPoints.map((snapPoint)=>{\n const isPx = typeof snapPoint === 'string';\n let snapPointAsNumber = 0;\n if (isPx) {\n snapPointAsNumber = parseInt(snapPoint, 10);\n }\n if (isVertical(direction)) {\n const height = isPx ? snapPointAsNumber : windowDimensions ? snapPoint * containerSize.height : 0;\n if (windowDimensions) {\n return direction === 'bottom' ? containerSize.height - height : -containerSize.height + height;\n }\n return height;\n }\n const width = isPx ? snapPointAsNumber : windowDimensions ? snapPoint * containerSize.width : 0;\n if (windowDimensions) {\n return direction === 'right' ? containerSize.width - width : -containerSize.width + width;\n }\n return width;\n })) != null ? _snapPoints_map : [];\n }, [\n snapPoints,\n windowDimensions,\n container\n ]);\n const activeSnapPointOffset = React__default.useMemo(()=>activeSnapPointIndex !== null ? snapPointsOffset == null ? void 0 : snapPointsOffset[activeSnapPointIndex] : null, [\n snapPointsOffset,\n activeSnapPointIndex\n ]);\n const snapToPoint = React__default.useCallback((dimension)=>{\n var _snapPointsOffset_findIndex;\n const newSnapPointIndex = (_snapPointsOffset_findIndex = snapPointsOffset == null ? void 0 : snapPointsOffset.findIndex((snapPointDim)=>snapPointDim === dimension)) != null ? _snapPointsOffset_findIndex : null;\n onSnapPointChange(newSnapPointIndex);\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `translate3d(0, ${dimension}px, 0)` : `translate3d(${dimension}px, 0, 0)`\n });\n if (snapPointsOffset && newSnapPointIndex !== snapPointsOffset.length - 1 && fadeFromIndex !== undefined && newSnapPointIndex !== fadeFromIndex && newSnapPointIndex < fadeFromIndex) {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '0'\n });\n } else {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '1'\n });\n }\n setActiveSnapPoint(snapPoints == null ? void 0 : snapPoints[Math.max(newSnapPointIndex, 0)]);\n }, [\n drawerRef.current,\n snapPoints,\n snapPointsOffset,\n fadeFromIndex,\n overlayRef,\n setActiveSnapPoint\n ]);\n React__default.useEffect(()=>{\n if (activeSnapPoint || activeSnapPointProp) {\n var _snapPoints_findIndex;\n const newIndex = (_snapPoints_findIndex = snapPoints == null ? void 0 : snapPoints.findIndex((snapPoint)=>snapPoint === activeSnapPointProp || snapPoint === activeSnapPoint)) != null ? _snapPoints_findIndex : -1;\n if (snapPointsOffset && newIndex !== -1 && typeof snapPointsOffset[newIndex] === 'number') {\n snapToPoint(snapPointsOffset[newIndex]);\n }\n }\n }, [\n activeSnapPoint,\n activeSnapPointProp,\n snapPoints,\n snapPointsOffset,\n snapToPoint\n ]);\n function onRelease({ draggedDistance, closeDrawer, velocity, dismissible }) {\n if (fadeFromIndex === undefined) return;\n const currentPosition = direction === 'bottom' || direction === 'right' ? (activeSnapPointOffset != null ? activeSnapPointOffset : 0) - draggedDistance : (activeSnapPointOffset != null ? activeSnapPointOffset : 0) + draggedDistance;\n const isOverlaySnapPoint = activeSnapPointIndex === fadeFromIndex - 1;\n const isFirst = activeSnapPointIndex === 0;\n const hasDraggedUp = draggedDistance > 0;\n if (isOverlaySnapPoint) {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n });\n }\n if (!snapToSequentialPoint && velocity > 2 && !hasDraggedUp) {\n if (dismissible) closeDrawer();\n else snapToPoint(snapPointsOffset[0]); // snap to initial point\n return;\n }\n if (!snapToSequentialPoint && velocity > 2 && hasDraggedUp && snapPointsOffset && snapPoints) {\n snapToPoint(snapPointsOffset[snapPoints.length - 1]);\n return;\n }\n // Find the closest snap point to the current position\n const closestSnapPoint = snapPointsOffset == null ? void 0 : snapPointsOffset.reduce((prev, curr)=>{\n if (typeof prev !== 'number' || typeof curr !== 'number') return prev;\n return Math.abs(curr - currentPosition) < Math.abs(prev - currentPosition) ? curr : prev;\n });\n const dim = isVertical(direction) ? window.innerHeight : window.innerWidth;\n if (velocity > VELOCITY_THRESHOLD && Math.abs(draggedDistance) < dim * 0.4) {\n const dragDirection = hasDraggedUp ? 1 : -1; // 1 = up, -1 = down\n // Don't do anything if we swipe upwards while being on the last snap point\n if (dragDirection > 0 && isLastSnapPoint && snapPoints) {\n snapToPoint(snapPointsOffset[snapPoints.length - 1]);\n return;\n }\n if (isFirst && dragDirection < 0 && dismissible) {\n closeDrawer();\n }\n if (activeSnapPointIndex === null) return;\n snapToPoint(snapPointsOffset[activeSnapPointIndex + dragDirection]);\n return;\n }\n snapToPoint(closestSnapPoint);\n }\n function onDrag({ draggedDistance }) {\n if (activeSnapPointOffset === null) return;\n const newValue = direction === 'bottom' || direction === 'right' ? activeSnapPointOffset - draggedDistance : activeSnapPointOffset + draggedDistance;\n // Don't do anything if we exceed the last(biggest) snap point\n if ((direction === 'bottom' || direction === 'right') && newValue < snapPointsOffset[snapPointsOffset.length - 1]) {\n return;\n }\n if ((direction === 'top' || direction === 'left') && newValue > snapPointsOffset[snapPointsOffset.length - 1]) {\n return;\n }\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${newValue}px, 0)` : `translate3d(${newValue}px, 0, 0)`\n });\n }\n function getPercentageDragged(absDraggedDistance, isDraggingDown) {\n if (!snapPoints || typeof activeSnapPointIndex !== 'number' || !snapPointsOffset || fadeFromIndex === undefined) return null;\n // If this is true we are dragging to a snap point that is supposed to have an overlay\n const isOverlaySnapPoint = activeSnapPointIndex === fadeFromIndex - 1;\n const isOverlaySnapPointOrHigher = activeSnapPointIndex >= fadeFromIndex;\n if (isOverlaySnapPointOrHigher && isDraggingDown) {\n return 0;\n }\n // Don't animate, but still use this one if we are dragging away from the overlaySnapPoint\n if (isOverlaySnapPoint && !isDraggingDown) return 1;\n if (!shouldFade && !isOverlaySnapPoint) return null;\n // Either fadeFrom index or the one before\n const targetSnapPointIndex = isOverlaySnapPoint ? activeSnapPointIndex + 1 : activeSnapPointIndex - 1;\n // Get the distance from overlaySnapPoint to the one before or vice-versa to calculate the opacity percentage accordingly\n const snapPointDistance = isOverlaySnapPoint ? snapPointsOffset[targetSnapPointIndex] - snapPointsOffset[targetSnapPointIndex - 1] : snapPointsOffset[targetSnapPointIndex + 1] - snapPointsOffset[targetSnapPointIndex];\n const percentageDragged = absDraggedDistance / Math.abs(snapPointDistance);\n if (isOverlaySnapPoint) {\n return 1 - percentageDragged;\n } else {\n return percentageDragged;\n }\n }\n return {\n isLastSnapPoint,\n activeSnapPoint,\n shouldFade,\n getPercentageDragged,\n setActiveSnapPoint,\n activeSnapPointIndex,\n onRelease,\n onDrag,\n snapPointsOffset\n };\n}\n\nconst noop = ()=>()=>{};\nfunction useScaleBackground() {\n const { direction, isOpen, shouldScaleBackground, setBackgroundColorOnScale, noBodyStyles } = useDrawerContext();\n const timeoutIdRef = React__default.useRef(null);\n const initialBackgroundColor = useMemo(()=>document.body.style.backgroundColor, []);\n function getScale() {\n return (window.innerWidth - WINDOW_TOP_OFFSET) / window.innerWidth;\n }\n React__default.useEffect(()=>{\n if (isOpen && shouldScaleBackground) {\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]') || document.querySelector('[vaul-drawer-wrapper]');\n if (!wrapper) return;\n chain(setBackgroundColorOnScale && !noBodyStyles ? assignStyle(document.body, {\n background: 'black'\n }) : noop, assignStyle(wrapper, {\n transformOrigin: isVertical(direction) ? 'top' : 'left',\n transitionProperty: 'transform, border-radius',\n transitionDuration: `${TRANSITIONS.DURATION}s`,\n transitionTimingFunction: `cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n }));\n const wrapperStylesCleanup = assignStyle(wrapper, {\n borderRadius: `${BORDER_RADIUS}px`,\n overflow: 'hidden',\n ...isVertical(direction) ? {\n transform: `scale(${getScale()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`\n } : {\n transform: `scale(${getScale()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`\n }\n });\n return ()=>{\n wrapperStylesCleanup();\n timeoutIdRef.current = window.setTimeout(()=>{\n if (initialBackgroundColor) {\n document.body.style.background = initialBackgroundColor;\n } else {\n document.body.style.removeProperty('background');\n }\n }, TRANSITIONS.DURATION * 1000);\n };\n }\n }, [\n isOpen,\n shouldScaleBackground,\n initialBackgroundColor\n ]);\n}\n\nlet previousBodyPosition = null;\n/**\n * This hook is necessary to prevent buggy behavior on iOS devices (need to test on Android).\n * I won't get into too much detail about what bugs it solves, but so far I've found that setting the body to `position: fixed` is the most reliable way to prevent those bugs.\n * Issues that this hook solves:\n * https://github.com/emilkowalski/vaul/issues/435\n * https://github.com/emilkowalski/vaul/issues/433\n * And more that I discovered, but were just not reported.\n */ function usePositionFixed({ isOpen, modal, nested, hasBeenOpened, preventScrollRestoration, noBodyStyles }) {\n const [activeUrl, setActiveUrl] = React__default.useState(()=>typeof window !== 'undefined' ? window.location.href : '');\n const scrollPos = React__default.useRef(0);\n const setPositionFixed = React__default.useCallback(()=>{\n // All browsers on iOS will return true here.\n if (!isSafari()) return;\n // If previousBodyPosition is already set, don't set it again.\n if (previousBodyPosition === null && isOpen && !noBodyStyles) {\n previousBodyPosition = {\n position: document.body.style.position,\n top: document.body.style.top,\n left: document.body.style.left,\n height: document.body.style.height,\n right: 'unset'\n };\n // Update the dom inside an animation frame\n const { scrollX, innerHeight } = window;\n document.body.style.setProperty('position', 'fixed', 'important');\n Object.assign(document.body.style, {\n top: `${-scrollPos.current}px`,\n left: `${-scrollX}px`,\n right: '0px',\n height: 'auto'\n });\n window.setTimeout(()=>window.requestAnimationFrame(()=>{\n // Attempt to check if the bottom bar appeared due to the position change\n const bottomBarHeight = innerHeight - window.innerHeight;\n if (bottomBarHeight && scrollPos.current >= innerHeight) {\n // Move the content further up so that the bottom bar doesn't hide it\n document.body.style.top = `${-(scrollPos.current + bottomBarHeight)}px`;\n }\n }), 300);\n }\n }, [\n isOpen\n ]);\n const restorePositionSetting = React__default.useCallback(()=>{\n // All browsers on iOS will return true here.\n if (!isSafari()) return;\n if (previousBodyPosition !== null && !noBodyStyles) {\n // Convert the position from \"px\" to Int\n const y = -parseInt(document.body.style.top, 10);\n const x = -parseInt(document.body.style.left, 10);\n // Restore styles\n Object.assign(document.body.style, previousBodyPosition);\n window.requestAnimationFrame(()=>{\n if (preventScrollRestoration && activeUrl !== window.location.href) {\n setActiveUrl(window.location.href);\n return;\n }\n window.scrollTo(x, y);\n });\n previousBodyPosition = null;\n }\n }, [\n activeUrl\n ]);\n React__default.useEffect(()=>{\n function onScroll() {\n scrollPos.current = window.scrollY;\n }\n onScroll();\n window.addEventListener('scroll', onScroll);\n return ()=>{\n window.removeEventListener('scroll', onScroll);\n };\n }, []);\n React__default.useEffect(()=>{\n if (!modal) return;\n return ()=>{\n if (typeof document === 'undefined') return;\n // Another drawer is opened, safe to ignore the execution\n const hasDrawerOpened = !!document.querySelector('[data-vaul-drawer]');\n if (hasDrawerOpened) return;\n restorePositionSetting();\n };\n }, [\n modal,\n restorePositionSetting\n ]);\n React__default.useEffect(()=>{\n if (nested || !hasBeenOpened) return;\n // This is needed to force Safari toolbar to show **before** the drawer starts animating to prevent a gnarly shift from happening\n if (isOpen) {\n // avoid for standalone mode (PWA)\n const isStandalone = window.matchMedia('(display-mode: standalone)').matches;\n !isStandalone && setPositionFixed();\n if (!modal) {\n window.setTimeout(()=>{\n restorePositionSetting();\n }, 500);\n }\n } else {\n restorePositionSetting();\n }\n }, [\n isOpen,\n hasBeenOpened,\n activeUrl,\n modal,\n nested,\n setPositionFixed,\n restorePositionSetting\n ]);\n return {\n restorePositionSetting\n };\n}\n\nfunction Root({ open: openProp, onOpenChange, children, onDrag: onDragProp, onRelease: onReleaseProp, snapPoints, shouldScaleBackground = false, setBackgroundColorOnScale = true, closeThreshold = CLOSE_THRESHOLD, scrollLockTimeout = SCROLL_LOCK_TIMEOUT, dismissible = true, handleOnly = false, fadeFromIndex = snapPoints && snapPoints.length - 1, activeSnapPoint: activeSnapPointProp, setActiveSnapPoint: setActiveSnapPointProp, fixed, modal = true, onClose, nested, noBodyStyles = false, direction = 'bottom', defaultOpen = false, disablePreventScroll = true, snapToSequentialPoint = false, preventScrollRestoration = false, repositionInputs = true, onAnimationEnd, container, autoFocus = false }) {\n var _drawerRef_current, _drawerRef_current1;\n const [isOpen = false, setIsOpen] = useControllableState({\n defaultProp: defaultOpen,\n prop: openProp,\n onChange: (o)=>{\n onOpenChange == null ? void 0 : onOpenChange(o);\n if (!o && !nested) {\n restorePositionSetting();\n }\n setTimeout(()=>{\n onAnimationEnd == null ? void 0 : onAnimationEnd(o);\n }, TRANSITIONS.DURATION * 1000);\n if (o && !modal) {\n if (typeof window !== 'undefined') {\n window.requestAnimationFrame(()=>{\n document.body.style.pointerEvents = 'auto';\n });\n }\n }\n if (!o) {\n // This will be removed when the exit animation ends (`500ms`)\n document.body.style.pointerEvents = 'auto';\n }\n }\n });\n const [hasBeenOpened, setHasBeenOpened] = React__default.useState(false);\n const [isDragging, setIsDragging] = React__default.useState(false);\n const [justReleased, setJustReleased] = React__default.useState(false);\n const overlayRef = React__default.useRef(null);\n const openTime = React__default.useRef(null);\n const dragStartTime = React__default.useRef(null);\n const dragEndTime = React__default.useRef(null);\n const lastTimeDragPrevented = React__default.useRef(null);\n const isAllowedToDrag = React__default.useRef(false);\n const nestedOpenChangeTimer = React__default.useRef(null);\n const pointerStart = React__default.useRef(0);\n const keyboardIsOpen = React__default.useRef(false);\n const shouldAnimate = React__default.useRef(!defaultOpen);\n const previousDiffFromInitial = React__default.useRef(0);\n const drawerRef = React__default.useRef(null);\n const drawerHeightRef = React__default.useRef(((_drawerRef_current = drawerRef.current) == null ? void 0 : _drawerRef_current.getBoundingClientRect().height) || 0);\n const drawerWidthRef = React__default.useRef(((_drawerRef_current1 = drawerRef.current) == null ? void 0 : _drawerRef_current1.getBoundingClientRect().width) || 0);\n const initialDrawerHeight = React__default.useRef(0);\n const onSnapPointChange = React__default.useCallback((activeSnapPointIndex)=>{\n // Change openTime ref when we reach the last snap point to prevent dragging for 500ms incase it's scrollable.\n if (snapPoints && activeSnapPointIndex === snapPointsOffset.length - 1) openTime.current = new Date();\n }, []);\n const { activeSnapPoint, activeSnapPointIndex, setActiveSnapPoint, onRelease: onReleaseSnapPoints, snapPointsOffset, onDrag: onDragSnapPoints, shouldFade, getPercentageDragged: getSnapPointsPercentageDragged } = useSnapPoints({\n snapPoints,\n activeSnapPointProp,\n setActiveSnapPointProp,\n drawerRef,\n fadeFromIndex,\n overlayRef,\n onSnapPointChange,\n direction,\n container,\n snapToSequentialPoint\n });\n usePreventScroll({\n isDisabled: !isOpen || isDragging || !modal || justReleased || !hasBeenOpened || !repositionInputs || !disablePreventScroll\n });\n const { restorePositionSetting } = usePositionFixed({\n isOpen,\n modal,\n nested: nested != null ? nested : false,\n hasBeenOpened,\n preventScrollRestoration,\n noBodyStyles\n });\n function getScale() {\n return (window.innerWidth - WINDOW_TOP_OFFSET) / window.innerWidth;\n }\n function onPress(event) {\n var _drawerRef_current, _drawerRef_current1;\n if (!dismissible && !snapPoints) return;\n if (drawerRef.current && !drawerRef.current.contains(event.target)) return;\n drawerHeightRef.current = ((_drawerRef_current = drawerRef.current) == null ? void 0 : _drawerRef_current.getBoundingClientRect().height) || 0;\n drawerWidthRef.current = ((_drawerRef_current1 = drawerRef.current) == null ? void 0 : _drawerRef_current1.getBoundingClientRect().width) || 0;\n setIsDragging(true);\n dragStartTime.current = new Date();\n // iOS doesn't trigger mouseUp after scrolling so we need to listen to touched in order to disallow dragging\n if (isIOS()) {\n window.addEventListener('touchend', ()=>isAllowedToDrag.current = false, {\n once: true\n });\n }\n // Ensure we maintain correct pointer capture even when going outside of the drawer\n event.target.setPointerCapture(event.pointerId);\n pointerStart.current = isVertical(direction) ? event.pageY : event.pageX;\n }\n function shouldDrag(el, isDraggingInDirection) {\n var _window_getSelection;\n let element = el;\n const highlightedText = (_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString();\n const swipeAmount = drawerRef.current ? getTranslate(drawerRef.current, direction) : null;\n const date = new Date();\n // Fixes https://github.com/emilkowalski/vaul/issues/483\n if (element.tagName === 'SELECT') {\n return false;\n }\n if (element.hasAttribute('data-vaul-no-drag') || element.closest('[data-vaul-no-drag]')) {\n return false;\n }\n if (direction === 'right' || direction === 'left') {\n return true;\n }\n // Allow scrolling when animating\n if (openTime.current && date.getTime() - openTime.current.getTime() < 500) {\n return false;\n }\n if (swipeAmount !== null) {\n if (direction === 'bottom' ? swipeAmount > 0 : swipeAmount < 0) {\n return true;\n }\n }\n // Don't drag if there's highlighted text\n if (highlightedText && highlightedText.length > 0) {\n return false;\n }\n // Disallow dragging if drawer was scrolled within `scrollLockTimeout`\n if (lastTimeDragPrevented.current && date.getTime() - lastTimeDragPrevented.current.getTime() < scrollLockTimeout && swipeAmount === 0) {\n lastTimeDragPrevented.current = date;\n return false;\n }\n if (isDraggingInDirection) {\n lastTimeDragPrevented.current = date;\n // We are dragging down so we should allow scrolling\n return false;\n }\n // Keep climbing up the DOM tree as long as there's a parent\n while(element){\n // Check if the element is scrollable\n if (element.scrollHeight > element.clientHeight) {\n if (element.scrollTop !== 0) {\n lastTimeDragPrevented.current = new Date();\n // The element is scrollable and not scrolled to the top, so don't drag\n return false;\n }\n if (element.getAttribute('role') === 'dialog') {\n return true;\n }\n }\n // Move up to the parent element\n element = element.parentNode;\n }\n // No scrollable parents not scrolled to the top found, so drag\n return true;\n }\n function onDrag(event) {\n if (!drawerRef.current) {\n return;\n }\n // We need to know how much of the drawer has been dragged in percentages so that we can transform background accordingly\n if (isDragging) {\n const directionMultiplier = direction === 'bottom' || direction === 'right' ? 1 : -1;\n const draggedDistance = (pointerStart.current - (isVertical(direction) ? event.pageY : event.pageX)) * directionMultiplier;\n const isDraggingInDirection = draggedDistance > 0;\n // Pre condition for disallowing dragging in the close direction.\n const noCloseSnapPointsPreCondition = snapPoints && !dismissible && !isDraggingInDirection;\n // Disallow dragging down to close when first snap point is the active one and dismissible prop is set to false.\n if (noCloseSnapPointsPreCondition && activeSnapPointIndex === 0) return;\n // We need to capture last time when drag with scroll was triggered and have a timeout between\n const absDraggedDistance = Math.abs(draggedDistance);\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]');\n const drawerDimension = direction === 'bottom' || direction === 'top' ? drawerHeightRef.current : drawerWidthRef.current;\n // Calculate the percentage dragged, where 1 is the closed position\n let percentageDragged = absDraggedDistance / drawerDimension;\n const snapPointPercentageDragged = getSnapPointsPercentageDragged(absDraggedDistance, isDraggingInDirection);\n if (snapPointPercentageDragged !== null) {\n percentageDragged = snapPointPercentageDragged;\n }\n // Disallow close dragging beyond the smallest snap point.\n if (noCloseSnapPointsPreCondition && percentageDragged >= 1) {\n return;\n }\n if (!isAllowedToDrag.current && !shouldDrag(event.target, isDraggingInDirection)) return;\n drawerRef.current.classList.add(DRAG_CLASS);\n // If shouldDrag gave true once after pressing down on the drawer, we set isAllowedToDrag to true and it will remain true until we let go, there's no reason to disable dragging mid way, ever, and that's the solution to it\n isAllowedToDrag.current = true;\n set(drawerRef.current, {\n transition: 'none'\n });\n set(overlayRef.current, {\n transition: 'none'\n });\n if (snapPoints) {\n onDragSnapPoints({\n draggedDistance\n });\n }\n // Run this only if snapPoints are not defined or if we are at the last snap point (highest one)\n if (isDraggingInDirection && !snapPoints) {\n const dampenedDraggedDistance = dampenValue(draggedDistance);\n const translateValue = Math.min(dampenedDraggedDistance * -1, 0) * directionMultiplier;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n return;\n }\n const opacityValue = 1 - percentageDragged;\n if (shouldFade || fadeFromIndex && activeSnapPointIndex === fadeFromIndex - 1) {\n onDragProp == null ? void 0 : onDragProp(event, percentageDragged);\n set(overlayRef.current, {\n opacity: `${opacityValue}`,\n transition: 'none'\n }, true);\n }\n if (wrapper && overlayRef.current && shouldScaleBackground) {\n // Calculate percentageDragged as a fraction (0 to 1)\n const scaleValue = Math.min(getScale() + percentageDragged * (1 - getScale()), 1);\n const borderRadiusValue = 8 - percentageDragged * 8;\n const translateValue = Math.max(0, 14 - percentageDragged * 14);\n set(wrapper, {\n borderRadius: `${borderRadiusValue}px`,\n transform: isVertical(direction) ? `scale(${scaleValue}) translate3d(0, ${translateValue}px, 0)` : `scale(${scaleValue}) translate3d(${translateValue}px, 0, 0)`,\n transition: 'none'\n }, true);\n }\n if (!snapPoints) {\n const translateValue = absDraggedDistance * directionMultiplier;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n }\n }\n }\n React__default.useEffect(()=>{\n window.requestAnimationFrame(()=>{\n shouldAnimate.current = true;\n });\n }, []);\n React__default.useEffect(()=>{\n var _window_visualViewport;\n function onVisualViewportChange() {\n if (!drawerRef.current || !repositionInputs) return;\n const focusedElement = document.activeElement;\n if (isInput(focusedElement) || keyboardIsOpen.current) {\n var _window_visualViewport;\n const visualViewportHeight = ((_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.height) || 0;\n const totalHeight = window.innerHeight;\n // This is the height of the keyboard\n let diffFromInitial = totalHeight - visualViewportHeight;\n const drawerHeight = drawerRef.current.getBoundingClientRect().height || 0;\n // Adjust drawer height only if it's tall enough\n const isTallEnough = drawerHeight > totalHeight * 0.8;\n if (!initialDrawerHeight.current) {\n initialDrawerHeight.current = drawerHeight;\n }\n const offsetFromTop = drawerRef.current.getBoundingClientRect().top;\n // visualViewport height may change due to somq e subtle changes to the keyboard. Checking if the height changed by 60 or more will make sure that they keyboard really changed its open state.\n if (Math.abs(previousDiffFromInitial.current - diffFromInitial) > 60) {\n keyboardIsOpen.current = !keyboardIsOpen.current;\n }\n if (snapPoints && snapPoints.length > 0 && snapPointsOffset && activeSnapPointIndex) {\n const activeSnapPointHeight = snapPointsOffset[activeSnapPointIndex] || 0;\n diffFromInitial += activeSnapPointHeight;\n }\n previousDiffFromInitial.current = diffFromInitial;\n // We don't have to change the height if the input is in view, when we are here we are in the opened keyboard state so we can correctly check if the input is in view\n if (drawerHeight > visualViewportHeight || keyboardIsOpen.current) {\n const height = drawerRef.current.getBoundingClientRect().height;\n let newDrawerHeight = height;\n if (height > visualViewportHeight) {\n newDrawerHeight = visualViewportHeight - (isTallEnough ? offsetFromTop : WINDOW_TOP_OFFSET);\n }\n // When fixed, don't move the drawer upwards if there's space, but rather only change it's height so it's fully scrollable when the keyboard is open\n if (fixed) {\n drawerRef.current.style.height = `${height - Math.max(diffFromInitial, 0)}px`;\n } else {\n drawerRef.current.style.height = `${Math.max(newDrawerHeight, visualViewportHeight - offsetFromTop)}px`;\n }\n } else if (!isMobileFirefox()) {\n drawerRef.current.style.height = `${initialDrawerHeight.current}px`;\n }\n if (snapPoints && snapPoints.length > 0 && !keyboardIsOpen.current) {\n drawerRef.current.style.bottom = `0px`;\n } else {\n // Negative bottom value would never make sense\n drawerRef.current.style.bottom = `${Math.max(diffFromInitial, 0)}px`;\n }\n }\n }\n (_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.addEventListener('resize', onVisualViewportChange);\n return ()=>{\n var _window_visualViewport;\n return (_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.removeEventListener('resize', onVisualViewportChange);\n };\n }, [\n activeSnapPointIndex,\n snapPoints,\n snapPointsOffset\n ]);\n function closeDrawer(fromWithin) {\n cancelDrag();\n onClose == null ? void 0 : onClose();\n if (!fromWithin) {\n setIsOpen(false);\n }\n setTimeout(()=>{\n if (snapPoints) {\n setActiveSnapPoint(snapPoints[0]);\n }\n }, TRANSITIONS.DURATION * 1000); // seconds to ms\n }\n function resetDrawer() {\n if (!drawerRef.current) return;\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]');\n const currentSwipeAmount = getTranslate(drawerRef.current, direction);\n set(drawerRef.current, {\n transform: 'translate3d(0, 0, 0)',\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n });\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '1'\n });\n // Don't reset background if swiped upwards\n if (shouldScaleBackground && currentSwipeAmount && currentSwipeAmount > 0 && isOpen) {\n set(wrapper, {\n borderRadius: `${BORDER_RADIUS}px`,\n overflow: 'hidden',\n ...isVertical(direction) ? {\n transform: `scale(${getScale()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,\n transformOrigin: 'top'\n } : {\n transform: `scale(${getScale()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`,\n transformOrigin: 'left'\n },\n transitionProperty: 'transform, border-radius',\n transitionDuration: `${TRANSITIONS.DURATION}s`,\n transitionTimingFunction: `cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n }, true);\n }\n }\n function cancelDrag() {\n if (!isDragging || !drawerRef.current) return;\n drawerRef.current.classList.remove(DRAG_CLASS);\n isAllowedToDrag.current = false;\n setIsDragging(false);\n dragEndTime.current = new Date();\n }\n function onRelease(event) {\n if (!isDragging || !drawerRef.current) return;\n drawerRef.current.classList.remove(DRAG_CLASS);\n isAllowedToDrag.current = false;\n setIsDragging(false);\n dragEndTime.current = new Date();\n const swipeAmount = getTranslate(drawerRef.current, direction);\n if (!event || !shouldDrag(event.target, false) || !swipeAmount || Number.isNaN(swipeAmount)) return;\n if (dragStartTime.current === null) return;\n const timeTaken = dragEndTime.current.getTime() - dragStartTime.current.getTime();\n const distMoved = pointerStart.current - (isVertical(direction) ? event.pageY : event.pageX);\n const velocity = Math.abs(distMoved) / timeTaken;\n if (velocity > 0.05) {\n // `justReleased` is needed to prevent the drawer from focusing on an input when the drag ends, as it's not the intent most of the time.\n setJustReleased(true);\n setTimeout(()=>{\n setJustReleased(false);\n }, 200);\n }\n if (snapPoints) {\n const directionMultiplier = direction === 'bottom' || direction === 'right' ? 1 : -1;\n onReleaseSnapPoints({\n draggedDistance: distMoved * directionMultiplier,\n closeDrawer,\n velocity,\n dismissible\n });\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n return;\n }\n // Moved upwards, don't do anything\n if (direction === 'bottom' || direction === 'right' ? distMoved > 0 : distMoved < 0) {\n resetDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n return;\n }\n if (velocity > VELOCITY_THRESHOLD) {\n closeDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, false);\n return;\n }\n var _drawerRef_current_getBoundingClientRect_height;\n const visibleDrawerHeight = Math.min((_drawerRef_current_getBoundingClientRect_height = drawerRef.current.getBoundingClientRect().height) != null ? _drawerRef_current_getBoundingClientRect_height : 0, window.innerHeight);\n var _drawerRef_current_getBoundingClientRect_width;\n const visibleDrawerWidth = Math.min((_drawerRef_current_getBoundingClientRect_width = drawerRef.current.getBoundingClientRect().width) != null ? _drawerRef_current_getBoundingClientRect_width : 0, window.innerWidth);\n const isHorizontalSwipe = direction === 'left' || direction === 'right';\n if (Math.abs(swipeAmount) >= (isHorizontalSwipe ? visibleDrawerWidth : visibleDrawerHeight) * closeThreshold) {\n closeDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, false);\n return;\n }\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n resetDrawer();\n }\n React__default.useEffect(()=>{\n // Trigger enter animation without using CSS animation\n if (isOpen) {\n set(document.documentElement, {\n scrollBehavior: 'auto'\n });\n openTime.current = new Date();\n }\n return ()=>{\n reset(document.documentElement, 'scrollBehavior');\n };\n }, [\n isOpen\n ]);\n function onNestedOpenChange(o) {\n const scale = o ? (window.innerWidth - NESTED_DISPLACEMENT) / window.innerWidth : 1;\n const initialTranslate = o ? -NESTED_DISPLACEMENT : 0;\n if (nestedOpenChangeTimer.current) {\n window.clearTimeout(nestedOpenChangeTimer.current);\n }\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `scale(${scale}) translate3d(0, ${initialTranslate}px, 0)` : `scale(${scale}) translate3d(${initialTranslate}px, 0, 0)`\n });\n if (!o && drawerRef.current) {\n nestedOpenChangeTimer.current = setTimeout(()=>{\n const translateValue = getTranslate(drawerRef.current, direction);\n set(drawerRef.current, {\n transition: 'none',\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n }, 500);\n }\n }\n function onNestedDrag(_event, percentageDragged) {\n if (percentageDragged < 0) return;\n const initialScale = (window.innerWidth - NESTED_DISPLACEMENT) / window.innerWidth;\n const newScale = initialScale + percentageDragged * (1 - initialScale);\n const newTranslate = -NESTED_DISPLACEMENT + percentageDragged * NESTED_DISPLACEMENT;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `scale(${newScale}) translate3d(0, ${newTranslate}px, 0)` : `scale(${newScale}) translate3d(${newTranslate}px, 0, 0)`,\n transition: 'none'\n });\n }\n function onNestedRelease(_event, o) {\n const dim = isVertical(direction) ? window.innerHeight : window.innerWidth;\n const scale = o ? (dim - NESTED_DISPLACEMENT) / dim : 1;\n const translate = o ? -NESTED_DISPLACEMENT : 0;\n if (o) {\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `scale(${scale}) translate3d(0, ${translate}px, 0)` : `scale(${scale}) translate3d(${translate}px, 0, 0)`\n });\n }\n }\n React__default.useEffect(()=>{\n if (!modal) {\n // Need to do this manually unfortunately\n window.requestAnimationFrame(()=>{\n document.body.style.pointerEvents = 'auto';\n });\n }\n }, [\n modal\n ]);\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Root, {\n defaultOpen: defaultOpen,\n onOpenChange: (open)=>{\n if (!dismissible && !open) return;\n if (open) {\n setHasBeenOpened(true);\n } else {\n closeDrawer(true);\n }\n setIsOpen(open);\n },\n open: isOpen\n }, /*#__PURE__*/ React__default.createElement(DrawerContext.Provider, {\n value: {\n activeSnapPoint,\n snapPoints,\n setActiveSnapPoint,\n drawerRef,\n overlayRef,\n onOpenChange,\n onPress,\n onRelease,\n onDrag,\n dismissible,\n shouldAnimate,\n handleOnly,\n isOpen,\n isDragging,\n shouldFade,\n closeDrawer,\n onNestedDrag,\n onNestedOpenChange,\n onNestedRelease,\n keyboardIsOpen,\n modal,\n snapPointsOffset,\n activeSnapPointIndex,\n direction,\n shouldScaleBackground,\n setBackgroundColorOnScale,\n noBodyStyles,\n container,\n autoFocus\n }\n }, children));\n}\nconst Overlay = /*#__PURE__*/ React__default.forwardRef(function({ ...rest }, ref) {\n const { overlayRef, snapPoints, onRelease, shouldFade, isOpen, modal, shouldAnimate } = useDrawerContext();\n const composedRef = useComposedRefs(ref, overlayRef);\n const hasSnapPoints = snapPoints && snapPoints.length > 0;\n // Overlay is the component that is locking scroll, removing it will unlock the scroll without having to dig into Radix's Dialog library\n if (!modal) {\n return null;\n }\n const onMouseUp = React__default.useCallback((event)=>onRelease(event), [\n onRelease\n ]);\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Overlay, {\n onMouseUp: onMouseUp,\n ref: composedRef,\n \"data-vaul-overlay\": \"\",\n \"data-vaul-snap-points\": isOpen && hasSnapPoints ? 'true' : 'false',\n \"data-vaul-snap-points-overlay\": isOpen && shouldFade ? 'true' : 'false',\n \"data-vaul-animate\": (shouldAnimate == null ? void 0 : shouldAnimate.current) ? 'true' : 'false',\n ...rest\n });\n});\nOverlay.displayName = 'Drawer.Overlay';\nconst Content = /*#__PURE__*/ React__default.forwardRef(function({ onPointerDownOutside, style, onOpenAutoFocus, ...rest }, ref) {\n const { drawerRef, onPress, onRelease, onDrag, keyboardIsOpen, snapPointsOffset, activeSnapPointIndex, modal, isOpen, direction, snapPoints, container, handleOnly, shouldAnimate, autoFocus } = useDrawerContext();\n // Needed to use transition instead of animations\n const [delayedSnapPoints, setDelayedSnapPoints] = React__default.useState(false);\n const composedRef = useComposedRefs(ref, drawerRef);\n const pointerStartRef = React__default.useRef(null);\n const lastKnownPointerEventRef = React__default.useRef(null);\n const wasBeyondThePointRef = React__default.useRef(false);\n const hasSnapPoints = snapPoints && snapPoints.length > 0;\n useScaleBackground();\n const isDeltaInDirection = (delta, direction, threshold = 0)=>{\n if (wasBeyondThePointRef.current) return true;\n const deltaY = Math.abs(delta.y);\n const deltaX = Math.abs(delta.x);\n const isDeltaX = deltaX > deltaY;\n const dFactor = [\n 'bottom',\n 'right'\n ].includes(direction) ? 1 : -1;\n if (direction === 'left' || direction === 'right') {\n const isReverseDirection = delta.x * dFactor < 0;\n if (!isReverseDirection && deltaX >= 0 && deltaX <= threshold) {\n return isDeltaX;\n }\n } else {\n const isReverseDirection = delta.y * dFactor < 0;\n if (!isReverseDirection && deltaY >= 0 && deltaY <= threshold) {\n return !isDeltaX;\n }\n }\n wasBeyondThePointRef.current = true;\n return true;\n };\n React__default.useEffect(()=>{\n if (hasSnapPoints) {\n window.requestAnimationFrame(()=>{\n setDelayedSnapPoints(true);\n });\n }\n }, []);\n function handleOnPointerUp(event) {\n pointerStartRef.current = null;\n wasBeyondThePointRef.current = false;\n onRelease(event);\n }\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Content, {\n \"data-vaul-drawer-direction\": direction,\n \"data-vaul-drawer\": \"\",\n \"data-vaul-delayed-snap-points\": delayedSnapPoints ? 'true' : 'false',\n \"data-vaul-snap-points\": isOpen && hasSnapPoints ? 'true' : 'false',\n \"data-vaul-custom-container\": container ? 'true' : 'false',\n \"data-vaul-animate\": (shouldAnimate == null ? void 0 : shouldAnimate.current) ? 'true' : 'false',\n ...rest,\n ref: composedRef,\n style: snapPointsOffset && snapPointsOffset.length > 0 ? {\n '--snap-point-height': `${snapPointsOffset[activeSnapPointIndex != null ? activeSnapPointIndex : 0]}px`,\n ...style\n } : style,\n onPointerDown: (event)=>{\n if (handleOnly) return;\n rest.onPointerDown == null ? void 0 : rest.onPointerDown.call(rest, event);\n pointerStartRef.current = {\n x: event.pageX,\n y: event.pageY\n };\n onPress(event);\n },\n onOpenAutoFocus: (e)=>{\n onOpenAutoFocus == null ? void 0 : onOpenAutoFocus(e);\n if (!autoFocus) {\n e.preventDefault();\n }\n },\n onPointerDownOutside: (e)=>{\n onPointerDownOutside == null ? void 0 : onPointerDownOutside(e);\n if (!modal || e.defaultPrevented) {\n e.preventDefault();\n return;\n }\n if (keyboardIsOpen.current) {\n keyboardIsOpen.current = false;\n }\n },\n onFocusOutside: (e)=>{\n if (!modal) {\n e.preventDefault();\n return;\n }\n },\n onPointerMove: (event)=>{\n lastKnownPointerEventRef.current = event;\n if (handleOnly) return;\n rest.onPointerMove == null ? void 0 : rest.onPointerMove.call(rest, event);\n if (!pointerStartRef.current) return;\n const yPosition = event.pageY - pointerStartRef.current.y;\n const xPosition = event.pageX - pointerStartRef.current.x;\n const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n const delta = {\n x: xPosition,\n y: yPosition\n };\n const isAllowedToSwipe = isDeltaInDirection(delta, direction, swipeStartThreshold);\n if (isAllowedToSwipe) onDrag(event);\n else if (Math.abs(xPosition) > swipeStartThreshold || Math.abs(yPosition) > swipeStartThreshold) {\n pointerStartRef.current = null;\n }\n },\n onPointerUp: (event)=>{\n rest.onPointerUp == null ? void 0 : rest.onPointerUp.call(rest, event);\n pointerStartRef.current = null;\n wasBeyondThePointRef.current = false;\n onRelease(event);\n },\n onPointerOut: (event)=>{\n rest.onPointerOut == null ? void 0 : rest.onPointerOut.call(rest, event);\n handleOnPointerUp(lastKnownPointerEventRef.current);\n },\n onContextMenu: (event)=>{\n rest.onContextMenu == null ? void 0 : rest.onContextMenu.call(rest, event);\n if (lastKnownPointerEventRef.current) {\n handleOnPointerUp(lastKnownPointerEventRef.current);\n }\n }\n });\n});\nContent.displayName = 'Drawer.Content';\nconst LONG_HANDLE_PRESS_TIMEOUT = 250;\nconst DOUBLE_TAP_TIMEOUT = 120;\nconst Handle = /*#__PURE__*/ React__default.forwardRef(function({ preventCycle = false, children, ...rest }, ref) {\n const { closeDrawer, isDragging, snapPoints, activeSnapPoint, setActiveSnapPoint, dismissible, handleOnly, isOpen, onPress, onDrag } = useDrawerContext();\n const closeTimeoutIdRef = React__default.useRef(null);\n const shouldCancelInteractionRef = React__default.useRef(false);\n function handleStartCycle() {\n // Stop if this is the second click of a double click\n if (shouldCancelInteractionRef.current) {\n handleCancelInteraction();\n return;\n }\n window.setTimeout(()=>{\n handleCycleSnapPoints();\n }, DOUBLE_TAP_TIMEOUT);\n }\n function handleCycleSnapPoints() {\n // Prevent accidental taps while resizing drawer\n if (isDragging || preventCycle || shouldCancelInteractionRef.current) {\n handleCancelInteraction();\n return;\n }\n // Make sure to clear the timeout id if the user releases the handle before the cancel timeout\n handleCancelInteraction();\n if (!snapPoints || snapPoints.length === 0) {\n if (!dismissible) {\n closeDrawer();\n }\n return;\n }\n const isLastSnapPoint = activeSnapPoint === snapPoints[snapPoints.length - 1];\n if (isLastSnapPoint && dismissible) {\n closeDrawer();\n return;\n }\n const currentSnapIndex = snapPoints.findIndex((point)=>point === activeSnapPoint);\n if (currentSnapIndex === -1) return; // activeSnapPoint not found in snapPoints\n const nextSnapPoint = snapPoints[currentSnapIndex + 1];\n setActiveSnapPoint(nextSnapPoint);\n }\n function handleStartInteraction() {\n closeTimeoutIdRef.current = window.setTimeout(()=>{\n // Cancel click interaction on a long press\n shouldCancelInteractionRef.current = true;\n }, LONG_HANDLE_PRESS_TIMEOUT);\n }\n function handleCancelInteraction() {\n if (closeTimeoutIdRef.current) {\n window.clearTimeout(closeTimeoutIdRef.current);\n }\n shouldCancelInteractionRef.current = false;\n }\n return /*#__PURE__*/ React__default.createElement(\"div\", {\n onClick: handleStartCycle,\n onPointerCancel: handleCancelInteraction,\n onPointerDown: (e)=>{\n if (handleOnly) onPress(e);\n handleStartInteraction();\n },\n onPointerMove: (e)=>{\n if (handleOnly) onDrag(e);\n },\n // onPointerUp is already handled by the content component\n ref: ref,\n \"data-vaul-drawer-visible\": isOpen ? 'true' : 'false',\n \"data-vaul-handle\": \"\",\n \"aria-hidden\": \"true\",\n ...rest\n }, /*#__PURE__*/ React__default.createElement(\"span\", {\n \"data-vaul-handle-hitarea\": \"\",\n \"aria-hidden\": \"true\"\n }, children));\n});\nHandle.displayName = 'Drawer.Handle';\nfunction NestedRoot({ onDrag, onOpenChange, open: nestedIsOpen, ...rest }) {\n const { onNestedDrag, onNestedOpenChange, onNestedRelease } = useDrawerContext();\n if (!onNestedDrag) {\n throw new Error('Drawer.NestedRoot must be placed in another drawer');\n }\n return /*#__PURE__*/ React__default.createElement(Root, {\n nested: true,\n open: nestedIsOpen,\n onClose: ()=>{\n onNestedOpenChange(false);\n },\n onDrag: (e, p)=>{\n onNestedDrag(e, p);\n onDrag == null ? void 0 : onDrag(e, p);\n },\n onOpenChange: (o)=>{\n if (o) {\n onNestedOpenChange(o);\n }\n onOpenChange == null ? void 0 : onOpenChange(o);\n },\n onRelease: onNestedRelease,\n ...rest\n });\n}\nfunction Portal(props) {\n const context = useDrawerContext();\n const { container = context.container, ...portalProps } = props;\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Portal, {\n container: container,\n ...portalProps\n });\n}\nconst Drawer = {\n Root,\n NestedRoot,\n Content,\n Overlay,\n Trigger: DialogPrimitive.Trigger,\n Portal,\n Handle,\n Close: DialogPrimitive.Close,\n Title: DialogPrimitive.Title,\n Description: DialogPrimitive.Description\n};\n\nexport { Content, Drawer, Handle, NestedRoot, Overlay, Portal, Root };\n","import { forwardRef, type ComponentPropsWithoutRef, type ElementRef, type HTMLAttributes } from 'react';\nimport { Drawer as DrawerPrimitive } from 'vaul';\nimport { cn } from '@/lib/utils';\n\nexport const Drawer = ({\n shouldScaleBackground = true,\n ...props\n}: ComponentPropsWithoutRef<typeof DrawerPrimitive.Root>) => (\n <DrawerPrimitive.Root shouldScaleBackground={shouldScaleBackground} {...props} />\n);\nDrawer.displayName = 'Drawer';\n\nexport const DrawerTrigger = DrawerPrimitive.Trigger;\nexport const DrawerPortal = DrawerPrimitive.Portal;\nexport const DrawerClose = DrawerPrimitive.Close;\n\nexport const DrawerOverlay = forwardRef<\n ElementRef<typeof DrawerPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(function DrawerOverlay({ className, ...props }, ref) {\n return (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn('fixed inset-0 z-50 bg-black/40', className)}\n {...props}\n />\n );\n});\n\nexport const DrawerContent = forwardRef<\n ElementRef<typeof DrawerPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\n>(function DrawerContent({ className, children, ...props }, ref) {\n return (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-xl',\n 'border-t border-border bg-card',\n className,\n )}\n {...props}\n >\n <div className=\"mx-auto mt-3 h-1.5 w-12 rounded-full bg-border\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n );\n});\n\nexport function DrawerHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('grid gap-1 p-4 text-center sm:text-left', className)} {...props} />;\n}\n\nexport function DrawerFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-auto flex flex-col gap-2 p-4', className)} {...props} />;\n}\n\nexport const DrawerTitle = forwardRef<\n ElementRef<typeof DrawerPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(function DrawerTitle({ className, ...props }, ref) {\n return (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold', className)}\n {...props}\n />\n );\n});\n\nexport const DrawerDescription = forwardRef<\n ElementRef<typeof DrawerPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(function DrawerDescription({ className, ...props }, ref) {\n return (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn('text-sm text-foreground-muted', className)}\n {...props}\n />\n );\n});\n","import { forwardRef, useCallback, useId, useRef, useState, type DragEvent as ReactDragEvent, type ReactNode } from 'react';\nimport { File as FileIcon, Upload, X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nexport interface FileUploadProps {\n /** Accepted file types, e.g. `image/*` or `.pdf,.docx`. */\n accept?: string;\n /** Allow multiple files. */\n multiple?: boolean;\n /** Max file size in bytes. Files larger than this are rejected. */\n maxSize?: number;\n /** Controlled file list. */\n value?: File[];\n /** Called when files are added or removed. */\n onChange?: (files: File[]) => void;\n /** Helper text inside the drop zone. */\n hint?: ReactNode;\n /** Disable the picker entirely. */\n disabled?: boolean;\n className?: string;\n}\n\nfunction formatSize(bytes: number) {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n}\n\n/**\n * Drag-and-drop file picker with an inline file list. Uncontrolled by default;\n * pass `value` + `onChange` to control externally.\n */\nexport const FileUpload = forwardRef<HTMLDivElement, FileUploadProps>(function FileUpload(\n { accept, multiple, maxSize, value, onChange, hint, disabled, className },\n ref,\n) {\n const inputRef = useRef<HTMLInputElement>(null);\n const inputId = useId();\n const [internal, setInternal] = useState<File[]>([]);\n const [over, setOver] = useState(false);\n const files = value ?? internal;\n\n const update = useCallback(\n (next: File[]) => {\n if (value === undefined) setInternal(next);\n onChange?.(next);\n },\n [onChange, value],\n );\n\n const addFiles = useCallback(\n (incoming: FileList | File[]) => {\n const arr = Array.from(incoming).filter(\n (f) => !maxSize || f.size <= maxSize,\n );\n update(multiple ? [...files, ...arr] : arr.slice(0, 1));\n },\n [files, maxSize, multiple, update],\n );\n\n const remove = (idx: number) => update(files.filter((_, i) => i !== idx));\n\n const onDrop = (e: ReactDragEvent<HTMLLabelElement>) => {\n e.preventDefault();\n setOver(false);\n if (disabled) return;\n addFiles(e.dataTransfer.files);\n };\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-3', className)}>\n <label\n htmlFor={inputId}\n onDragOver={(e) => {\n e.preventDefault();\n if (!disabled) setOver(true);\n }}\n onDragLeave={() => setOver(false)}\n onDrop={onDrop}\n className={cn(\n 'group relative flex cursor-pointer flex-col items-center justify-center gap-2',\n 'rounded-md border border-dashed border-border bg-background-subtle px-6 py-8',\n 'text-center transition-colors',\n 'hover:border-border-strong hover:bg-background-muted',\n over && 'border-accent bg-accent-soft',\n disabled && 'pointer-events-none opacity-50',\n )}\n >\n <Upload className=\"size-5 text-foreground-muted\" aria-hidden />\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium\">Drop files here, or click to browse</p>\n {hint && <p className=\"text-xs text-foreground-muted\">{hint}</p>}\n </div>\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n className=\"sr-only\"\n onChange={(e) => e.target.files && addFiles(e.target.files)}\n />\n </label>\n\n {files.length > 0 && (\n <ul className=\"flex flex-col gap-2\">\n {files.map((file, idx) => (\n <li\n key={`${file.name}-${idx}`}\n className=\"flex items-center gap-3 rounded-md border border-border bg-card px-3 py-2\"\n >\n <FileIcon className=\"size-4 shrink-0 text-foreground-muted\" aria-hidden />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm\">{file.name}</p>\n <p className=\"text-xs text-foreground-muted\">{formatSize(file.size)}</p>\n </div>\n <button\n type=\"button\"\n onClick={() => remove(idx)}\n className=\"rounded p-1 text-foreground-muted hover:bg-background-muted hover:text-foreground\"\n aria-label={`Remove ${file.name}`}\n >\n <X className=\"size-4\" />\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { CheckCircle2, Info, AlertTriangle, XCircle, X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst snackbar = cva(\n [\n 'relative pointer-events-auto w-full max-w-md',\n 'flex items-start gap-3 rounded-md border bg-card p-3 shadow-md',\n 'text-sm text-foreground',\n ],\n {\n variants: {\n variant: {\n default: 'border-border',\n info: 'border-info-border-soft',\n success: 'border-success-border-soft',\n warning: 'border-warning-border-soft',\n danger: 'border-danger-border-soft',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nconst iconForVariant: Record<NonNullable<VariantProps<typeof snackbar>['variant']>, ReactNode> = {\n default: null,\n info: <Info className=\"size-4 shrink-0 mt-0.5 text-info-text\" aria-hidden />,\n success: <CheckCircle2 className=\"size-4 shrink-0 mt-0.5 text-success-text\" aria-hidden />,\n warning: <AlertTriangle className=\"size-4 shrink-0 mt-0.5 text-warning-text\" aria-hidden />,\n danger: <XCircle className=\"size-4 shrink-0 mt-0.5 text-danger-text\" aria-hidden />,\n};\n\nexport interface SnackbarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>,\n VariantProps<typeof snackbar> {\n /** Headline. */\n title?: ReactNode;\n /** Action button rendered on the right. */\n action?: ReactNode;\n /** Show a close (×) button on the right. */\n onClose?: () => void;\n /** Override the variant's default icon. Pass `false` to hide. */\n icon?: ReactNode | false;\n}\n\n/**\n * Persistent inline notification. Unlike Toast, Snackbar does **not** auto-\n * dismiss. Pair with an `action` button or an `onClose` handler.\n */\nexport const Snackbar = forwardRef<HTMLDivElement, SnackbarProps>(function Snackbar(\n { className, variant = 'default', title, action, onClose, icon, children, ...props },\n ref,\n) {\n const renderedIcon = icon === false ? null : icon ?? iconForVariant[variant ?? 'default'];\n\n return (\n <div ref={ref} role=\"status\" className={cn(snackbar({ variant }), className)} {...props}>\n {renderedIcon}\n <div className=\"min-w-0 flex-1\">\n {title && <p className=\"font-medium\">{title}</p>}\n {children && <p className=\"text-foreground-muted\">{children}</p>}\n </div>\n {action}\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Dismiss\"\n className=\"rounded p-1 text-foreground-muted hover:bg-background-muted hover:text-foreground\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n </div>\n );\n});\n","import { forwardRef, useCallback, useState, type KeyboardEvent } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nexport interface TagInputProps {\n /** Controlled list of tags. */\n value?: string[];\n /** Default tags when uncontrolled. */\n defaultValue?: string[];\n /** Called when the tag list changes. */\n onChange?: (tags: string[]) => void;\n /** Placeholder shown inside the inline input. */\n placeholder?: string;\n /** Maximum number of tags. */\n max?: number;\n /** Disable the editor. */\n disabled?: boolean;\n /** Show a danger border. */\n error?: boolean;\n /** Treat these characters as separators (default: Enter + comma). */\n separators?: string[];\n className?: string;\n}\n\n/**\n * Chip-based multi-value input. Press Enter or comma to add. Backspace on an\n * empty input removes the last tag.\n */\nexport const TagInput = forwardRef<HTMLDivElement, TagInputProps>(function TagInput(\n {\n value,\n defaultValue = [],\n onChange,\n placeholder = 'Add and press Enter',\n max,\n disabled,\n error,\n separators = ['Enter', ','],\n className,\n },\n ref,\n) {\n const [internal, setInternal] = useState<string[]>(defaultValue);\n const [draft, setDraft] = useState('');\n const tags = value ?? internal;\n\n const update = useCallback(\n (next: string[]) => {\n if (value === undefined) setInternal(next);\n onChange?.(next);\n },\n [onChange, value],\n );\n\n const commit = (raw: string) => {\n const t = raw.trim();\n if (!t || tags.includes(t) || (max !== undefined && tags.length >= max)) return;\n update([...tags, t]);\n };\n\n const remove = (idx: number) => update(tags.filter((_, i) => i !== idx));\n\n const onKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (separators.includes(e.key)) {\n e.preventDefault();\n commit(draft);\n setDraft('');\n } else if (e.key === 'Backspace' && !draft && tags.length) {\n remove(tags.length - 1);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex min-h-9 w-full flex-wrap items-center gap-1.5 rounded-md border bg-card px-2 py-1.5',\n 'transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring',\n error ? 'border-danger focus-within:border-danger focus-within:ring-danger' : 'border-border',\n disabled && 'pointer-events-none opacity-50',\n className,\n )}\n >\n {tags.map((t, i) => (\n <span\n key={`${t}-${i}`}\n className=\"inline-flex items-center gap-1 rounded bg-background-muted px-2 py-0.5 text-xs\"\n >\n {t}\n <button\n type=\"button\"\n onClick={() => remove(i)}\n className=\"rounded p-0.5 text-foreground-muted hover:bg-background-subtle hover:text-foreground\"\n aria-label={`Remove ${t}`}\n >\n <X className=\"size-3\" />\n </button>\n </span>\n ))}\n <input\n value={draft}\n disabled={disabled}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={onKey}\n onBlur={() => {\n if (draft) {\n commit(draft);\n setDraft('');\n }\n }}\n placeholder={tags.length === 0 ? placeholder : undefined}\n className=\"min-w-[8ch] flex-1 bg-transparent text-sm outline-none placeholder:text-foreground-subtle\"\n />\n </div>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TimelineProps extends HTMLAttributes<HTMLOListElement> {}\n\nexport const Timeline = forwardRef<HTMLOListElement, TimelineProps>(function Timeline(\n { className, children, ...props },\n ref,\n) {\n return (\n <ol ref={ref} className={cn('relative flex flex-col gap-6', className)} {...props}>\n {children}\n </ol>\n );\n});\n\nexport interface TimelineItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Optional bullet override. Default: small accent dot. */\n bullet?: ReactNode;\n /** Hide the connector line below this item — use for the last item. */\n isLast?: boolean;\n}\n\nexport const TimelineItem = forwardRef<HTMLLIElement, TimelineItemProps>(function TimelineItem(\n { bullet, isLast, className, children, ...props },\n ref,\n) {\n return (\n <li ref={ref} className={cn('relative flex gap-4 pb-1', className)} {...props}>\n <div className=\"relative flex shrink-0 flex-col items-center\">\n <div className=\"flex size-6 items-center justify-center rounded-full border border-border bg-card text-foreground-muted\">\n {bullet ?? <span className=\"size-2 rounded-full bg-accent\" aria-hidden />}\n </div>\n {!isLast && <span className=\"mt-1 flex-1 w-px bg-border\" aria-hidden />}\n </div>\n <div className=\"min-w-0 flex-1 pb-4\">{children}</div>\n </li>\n );\n});\n\nexport function TimelineTime({ className, children }: { className?: string; children: ReactNode }) {\n return (\n <p className={cn('text-xs text-foreground-subtle', className)}>{children}</p>\n );\n}\n\nexport function TimelineTitle({\n className,\n children,\n}: {\n className?: string;\n children: ReactNode;\n}) {\n return <p className={cn('text-sm font-medium', className)}>{children}</p>;\n}\n\nexport function TimelineDescription({\n className,\n children,\n}: {\n className?: string;\n children: ReactNode;\n}) {\n return <p className={cn('mt-0.5 text-sm text-foreground-muted', className)}>{children}</p>;\n}\n","import { useState, type ReactNode } from 'react';\nimport { ChevronRight, File as FileIcon, Folder, FolderOpen } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeNode {\n id: string;\n label: ReactNode;\n /** If undefined the node is a leaf; if empty array it is an empty folder. */\n children?: TreeNode[];\n /** Optional custom icon (overrides default file/folder icons). */\n icon?: ReactNode;\n}\n\nexport interface TreeProps {\n /** The root nodes. */\n data: TreeNode[];\n /** Ids to expand by default. */\n defaultExpanded?: string[];\n /** Currently selected node id. */\n selectedId?: string;\n onSelect?: (id: string) => void;\n className?: string;\n}\n\n/**\n * Expandable file-tree style list. Single selection. Keyboard a11y is\n * handled at the row level (`tabIndex`, Enter, ArrowRight/Left to toggle).\n */\nexport function Tree({ data, defaultExpanded = [], selectedId, onSelect, className }: TreeProps) {\n const [expanded, setExpanded] = useState<Set<string>>(new Set(defaultExpanded));\n\n const toggle = (id: string) =>\n setExpanded((cur) => {\n const next = new Set(cur);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n\n function renderNode(node: TreeNode, depth: number): ReactNode {\n const hasChildren = !!node.children;\n const isOpen = expanded.has(node.id);\n const isSelected = selectedId === node.id;\n const DefaultIcon = hasChildren ? (isOpen ? FolderOpen : Folder) : FileIcon;\n\n return (\n <li key={node.id} role=\"treeitem\" aria-expanded={hasChildren ? isOpen : undefined}>\n <button\n type=\"button\"\n tabIndex={0}\n onClick={() => {\n onSelect?.(node.id);\n if (hasChildren) toggle(node.id);\n }}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight' && hasChildren && !isOpen) toggle(node.id);\n else if (e.key === 'ArrowLeft' && hasChildren && isOpen) toggle(node.id);\n }}\n style={{ paddingLeft: depth * 16 + 8 }}\n className={cn(\n 'flex w-full items-center gap-1.5 rounded-md py-1 pr-2 text-left text-sm',\n 'hover:bg-background-muted focus-visible:bg-background-muted outline-none',\n isSelected && 'bg-accent-soft text-foreground',\n )}\n >\n {hasChildren ? (\n <ChevronRight\n className={cn('size-3.5 shrink-0 text-foreground-subtle transition-transform', isOpen && 'rotate-90')}\n aria-hidden\n />\n ) : (\n <span className=\"w-3.5 shrink-0\" aria-hidden />\n )}\n {node.icon ?? <DefaultIcon className=\"size-4 shrink-0 text-foreground-muted\" aria-hidden />}\n <span className=\"truncate\">{node.label}</span>\n </button>\n {hasChildren && isOpen && (\n <ul role=\"group\" className=\"mt-0.5\">\n {node.children!.map((c) => renderNode(c, depth + 1))}\n </ul>\n )}\n </li>\n );\n }\n\n return (\n <ul role=\"tree\" className={cn('flex flex-col gap-0.5', className)}>\n {data.map((n) => renderNode(n, 0))}\n </ul>\n );\n}\n","import { useState, type FormEvent, type ReactNode } from 'react';\nimport { ArrowRight, CheckCircle2, Mail } from '@/icons';\nimport { Button } from '@/components/ui/Button';\nimport { Input } from '@/components/ui/Input';\nimport { Alert } from '@/components/ui/Alert';\nimport { Separator } from '@/components/ui/Separator';\n\n/* -----------------------------------------------------------------------------\n * Authentication pattern — four screens that share the same shell.\n *\n * <AuthLayout title=\"…\" subtitle=\"…\">…form…</AuthLayout>\n *\n * Below: SignIn, SignUp, ForgotPassword, MagicLinkSent — each composed of\n * primitives. They emit events; the host app handles network calls.\n * --------------------------------------------------------------------------- */\n\nexport interface AuthLayoutProps {\n /** Brand mark shown above the title. */\n brand?: ReactNode;\n /** Page heading. */\n title: ReactNode;\n /** Secondary line under the title. */\n subtitle?: ReactNode;\n /** Form / content. */\n children: ReactNode;\n /** Footer slot — \"Don't have an account? Sign up\". */\n footer?: ReactNode;\n}\n\nexport function AuthLayout({ brand, title, subtitle, children, footer }: AuthLayoutProps) {\n return (\n <main className=\"grid min-h-screen place-items-center bg-background-subtle px-4 py-12\">\n <div className=\"w-full max-w-[400px] space-y-6\">\n {brand && <div className=\"flex justify-center\">{brand}</div>}\n <div className=\"space-y-2 text-center\">\n <h1 className=\"text-2xl font-semibold tracking-tight text-foreground\">{title}</h1>\n {subtitle && <p className=\"text-sm text-foreground-muted\">{subtitle}</p>}\n </div>\n <div className=\"rounded-lg border border-border bg-card p-6\">{children}</div>\n {footer && (\n <p className=\"text-center text-sm text-foreground-muted\">{footer}</p>\n )}\n </div>\n </main>\n );\n}\n\nexport interface SignInFormProps {\n onSubmit: (data: { email: string; password: string }) => void | Promise<void>;\n loading?: boolean;\n error?: ReactNode;\n forgotHref?: string;\n}\n\nexport function SignInForm({ onSubmit, loading, error, forgotHref = '/forgot' }: SignInFormProps) {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n\n const handle = (e: FormEvent) => {\n e.preventDefault();\n onSubmit({ email, password });\n };\n\n return (\n <form onSubmit={handle} className=\"space-y-4\">\n {error && <Alert variant=\"danger\">{error}</Alert>}\n <Input\n type=\"email\"\n label=\"Email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n autoComplete=\"email\"\n required\n />\n <Input\n type=\"password\"\n label=\"Password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n autoComplete=\"current-password\"\n required\n />\n <div className=\"flex items-center justify-between text-sm\">\n <a\n href={forgotHref}\n className=\"font-medium text-accent hover:underline outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm\"\n >\n Forgot password?\n </a>\n </div>\n <Button type=\"submit\" loading={loading} className=\"w-full\" trailingIcon={<ArrowRight />}>\n Sign in\n </Button>\n </form>\n );\n}\n\nexport interface SignUpFormProps {\n onSubmit: (data: { name: string; email: string; password: string }) => void | Promise<void>;\n loading?: boolean;\n error?: ReactNode;\n}\n\nexport function SignUpForm({ onSubmit, loading, error }: SignUpFormProps) {\n const [name, setName] = useState('');\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n\n return (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n onSubmit({ name, email, password });\n }}\n className=\"space-y-4\"\n >\n {error && <Alert variant=\"danger\">{error}</Alert>}\n <Input label=\"Full name\" value={name} onChange={(e) => setName(e.target.value)} required />\n <Input\n type=\"email\"\n label=\"Work email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n autoComplete=\"email\"\n required\n />\n <Input\n type=\"password\"\n label=\"Password\"\n helperText=\"At least 8 characters.\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n autoComplete=\"new-password\"\n required\n />\n <Button type=\"submit\" loading={loading} className=\"w-full\">\n Create account\n </Button>\n <p className=\"text-xs text-foreground-subtle text-center\">\n By signing up you agree to our Terms of Service and Privacy Policy.\n </p>\n </form>\n );\n}\n\nexport interface ForgotPasswordFormProps {\n onSubmit: (email: string) => void | Promise<void>;\n loading?: boolean;\n error?: ReactNode;\n}\n\nexport function ForgotPasswordForm({ onSubmit, loading, error }: ForgotPasswordFormProps) {\n const [email, setEmail] = useState('');\n return (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n onSubmit(email);\n }}\n className=\"space-y-4\"\n >\n {error && <Alert variant=\"danger\">{error}</Alert>}\n <Input\n type=\"email\"\n label=\"Email\"\n helperText=\"We'll send a reset link if an account exists.\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n autoComplete=\"email\"\n required\n />\n <Button type=\"submit\" loading={loading} className=\"w-full\" leadingIcon={<Mail />}>\n Send reset link\n </Button>\n </form>\n );\n}\n\nexport interface MagicLinkSentProps {\n email: string;\n onResend?: () => void;\n}\n\nexport function MagicLinkSent({ email, onResend }: MagicLinkSentProps) {\n return (\n <div className=\"space-y-4 text-center\">\n <div className=\"mx-auto inline-flex size-12 items-center justify-center rounded-full bg-success-soft text-success-text\">\n <CheckCircle2 className=\"size-6\" aria-hidden />\n </div>\n <p className=\"text-sm text-foreground-muted\">\n We sent a sign-in link to{' '}\n <span className=\"font-medium text-foreground\">{email}</span>. Open it on this device to\n continue.\n </p>\n <Separator />\n <p className=\"text-xs text-foreground-subtle\">\n Didn't get it?{' '}\n <button\n type=\"button\"\n onClick={onResend}\n className=\"font-medium text-accent hover:underline outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm\"\n >\n Resend\n </button>\n </p>\n </div>\n );\n}\n","import { type ReactNode } from 'react';\nimport {\n BarChart3,\n Bell,\n Bookmark,\n Folder,\n HelpCircle,\n Home,\n Inbox,\n LayoutGrid,\n LogOut,\n Plug,\n Search,\n Settings,\n Sparkles,\n User,\n Users,\n} from '@/icons';\nimport { Avatar } from '@/components/ui/Avatar';\nimport { Badge } from '@/components/ui/Badge';\nimport { Card, CardDescription, CardHeader, CardTitle, CardContent } from '@/components/ui/Card';\nimport { Input } from '@/components/ui/Input';\nimport { Kbd } from '@/components/ui/Kbd';\nimport { Sidebar, SidebarItem, SidebarSection } from '@/components/ui/Sidebar';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/Table';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/DropdownMenu';\nimport { Badge as Pill } from '@/components/ui/Badge';\n\n/* -----------------------------------------------------------------------------\n * Generic AppShell — sidebar (with brand in header + nav + footer) plus a\n * slim topbar holding search + notifications + profile dropdown.\n * --------------------------------------------------------------------------- */\n\nfunction navigate(hash: string) {\n if (typeof window === 'undefined') return;\n window.location.hash = hash;\n}\n\nexport type AppShellNavKey =\n | 'home'\n | 'projects'\n | 'inbox'\n | 'members'\n | 'insights'\n | 'bookmarks'\n | 'apps'\n | 'settings'\n | 'integrations'\n | 'help';\n\nexport interface AppShellProps {\n /** Page content. */\n children: ReactNode;\n /** Logo / wordmark rendered at the top of the sidebar. */\n brand: ReactNode;\n /** Which sidebar item is active. Defaults to `home`. */\n active?: AppShellNavKey;\n}\n\nexport function AppShell({ children, brand, active = 'home' }: AppShellProps) {\n return (\n <div className=\"flex min-h-screen w-full bg-background\">\n <Sidebar\n defaultCollapsed={false}\n header={brand}\n footer={<ProfileFooter />}\n >\n <SidebarSection label=\"Workspace\">\n <SidebarItem href=\"#dashboard\" icon={<Home />} active={active === 'home'}>\n Home\n </SidebarItem>\n <SidebarItem href=\"#data-table\" icon={<Folder />} active={active === 'projects'} trailing={<Pill tone=\"neutral\">12</Pill>}>\n Projects\n </SidebarItem>\n <SidebarItem href=\"#first-run\" icon={<Inbox />} active={active === 'inbox'} trailing={<Pill tone=\"accent\">5</Pill>}>\n Inbox\n </SidebarItem>\n <SidebarItem href=\"#record\" icon={<Users />} active={active === 'members'} trailing={<Pill tone=\"neutral\">3</Pill>}>\n Members\n </SidebarItem>\n <SidebarItem href=\"#dashboard\" icon={<BarChart3 />} active={active === 'insights'}>\n Insights\n </SidebarItem>\n </SidebarSection>\n <SidebarSection label=\"Personal\">\n <SidebarItem href=\"#pricing\" icon={<Bookmark />} active={active === 'bookmarks'}>\n Bookmarks\n </SidebarItem>\n <SidebarItem href=\"#onboarding\" icon={<LayoutGrid />} active={active === 'apps'}>\n Apps\n </SidebarItem>\n </SidebarSection>\n <SidebarSection label=\"Account\">\n <SidebarItem href=\"#settings\" icon={<Settings />} active={active === 'settings'}>\n Settings\n </SidebarItem>\n <SidebarItem href=\"#settings\" icon={<Plug />} active={active === 'integrations'}>\n Integrations\n </SidebarItem>\n <SidebarItem href=\"#\" icon={<HelpCircle />} active={active === 'help'}>\n Help & docs\n </SidebarItem>\n </SidebarSection>\n </Sidebar>\n\n <div className=\"flex flex-1 flex-col min-w-0\">\n <TopBar />\n <main className=\"flex-1 overflow-y-auto p-6 md:p-8\">{children}</main>\n </div>\n </div>\n );\n}\n\nfunction TopBar() {\n return (\n <header className=\"sticky top-0 z-30 flex h-14 items-center gap-3 border-b border-border bg-background/80 px-4 backdrop-blur md:px-6\">\n <div className=\"relative flex-1 max-w-xl\">\n <Input\n type=\"search\"\n placeholder=\"Search projects, members, files…\"\n hideLabel\n label=\"Search\"\n prefix={<Search />}\n suffix={<Kbd>⌘K</Kbd>}\n />\n </div>\n <div className=\"ml-auto flex items-center gap-1\">\n <NotificationMenu />\n <ProfileMenu />\n </div>\n </header>\n );\n}\n\ninterface Notification {\n id: string;\n who: { name: string; initials: string };\n action: string;\n target: string;\n when: string;\n unread?: boolean;\n}\n\nconst sampleNotifications: Notification[] = [\n { id: 'n1', who: { name: 'Anu B.', initials: 'AB' }, action: 'mentioned you in', target: 'Q2 OKRs', when: '2m', unread: true },\n { id: 'n2', who: { name: 'Bat E.', initials: 'BE' }, action: 'requested review on', target: 'fix/login-flow', when: '18m', unread: true },\n { id: 'n3', who: { name: 'Tuya G.', initials: 'TG' }, action: 'commented on', target: 'feat/segments', when: '1h', unread: true },\n { id: 'n4', who: { name: 'Khulan O.', initials: 'KO' }, action: 'archived', target: 'old-billing-spike', when: '3h' },\n { id: 'n5', who: { name: 'Sara M.', initials: 'SM' }, action: 'invited you to', target: 'Atlas workspace', when: 'Yesterday' },\n];\n\nfunction NotificationMenu() {\n const unread = sampleNotifications.filter((n) => n.unread).length;\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n aria-label={`Notifications${unread ? `, ${unread} unread` : ''}`}\n className=\"relative inline-flex size-9 items-center justify-center rounded-md text-foreground-muted outline-none transition-colors hover:bg-background-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n >\n <Bell className=\"size-4\" />\n {unread > 0 && (\n <span\n aria-hidden\n className=\"absolute right-2 top-2 inline-flex h-2 w-2 rounded-full bg-accent ring-2 ring-background\"\n />\n )}\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-80 p-0\">\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2.5\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">Notifications</span>\n {unread > 0 && <Pill tone=\"accent\">{unread} new</Pill>}\n </div>\n <button\n type=\"button\"\n className=\"text-xs text-foreground-muted hover:text-foreground\"\n >\n Mark all read\n </button>\n </div>\n <ul className=\"max-h-80 overflow-y-auto py-1\">\n {sampleNotifications.map((n) => (\n <li key={n.id}>\n <button\n type=\"button\"\n onClick={() => navigate('record')}\n className=\"flex w-full items-start gap-3 px-3 py-2.5 text-left outline-none hover:bg-background-muted focus-visible:bg-background-muted\"\n >\n <div className=\"relative mt-0.5\">\n <Avatar size=\"sm\" fallback={n.who.initials} />\n {n.unread && (\n <span\n aria-hidden\n className=\"absolute -right-0.5 -top-0.5 inline-flex h-2 w-2 rounded-full bg-accent ring-2 ring-background\"\n />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm leading-snug\">\n <span className=\"font-medium text-foreground\">{n.who.name}</span>{' '}\n <span className=\"text-foreground-muted\">{n.action}</span>{' '}\n <span className=\"font-medium text-foreground\">{n.target}</span>\n </p>\n <p className=\"mt-0.5 text-xs text-foreground-subtle\">{n.when}</p>\n </div>\n </button>\n </li>\n ))}\n </ul>\n <div className=\"border-t border-border px-3 py-2 text-center\">\n <button\n type=\"button\"\n onClick={() => navigate('record')}\n className=\"text-xs font-medium text-accent hover:underline\"\n >\n View all notifications\n </button>\n </div>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nfunction ProfileMenu() {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n aria-label=\"Open profile menu\"\n className=\"flex items-center gap-2 rounded-full p-0.5 outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background hover:bg-background-muted\"\n >\n <Avatar size=\"sm\" fallback=\"BO\" status=\"online\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-60\">\n <DropdownMenuLabel>\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-sm font-medium text-foreground\">Bay Otgonbayar</span>\n <span className=\"text-xs text-foreground-subtle\">bay@craftzbay.com</span>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => navigate('record')}>\n <User className=\"size-4\" />\n Profile\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => navigate('settings')}>\n <Settings className=\"size-4\" />\n Account settings\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => navigate('pricing')}>\n <Sparkles className=\"size-4\" />\n Upgrade plan\n <Pill tone=\"accent\" className=\"ml-auto\">Pro</Pill>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => navigate('first-run')}>\n <HelpCircle className=\"size-4\" />\n Help & support\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => navigate('auth-signin')}>\n <LogOut className=\"size-4\" />\n Sign out\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nfunction ProfileFooter() {\n return (\n <div className=\"flex items-center gap-2.5 rounded-md px-2 py-1.5\">\n <Avatar fallback=\"BO\" size=\"sm\" status=\"online\" />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium text-foreground\">Bay Otgonbayar</p>\n <p className=\"truncate text-xs text-foreground-subtle\">Owner</p>\n </div>\n </div>\n );\n}\n\n/* -----------------------------------------------------------------------------\n * Dashboard pattern — header, 4 stat cards, a chart placeholder, recent\n * activity table.\n * --------------------------------------------------------------------------- */\n\ninterface Stat {\n label: string;\n value: string;\n delta?: { value: string; positive?: boolean };\n}\n\nconst sampleStats: Stat[] = [\n { label: 'Active users', value: '2,840', delta: { value: '+12%', positive: true } },\n { label: 'Sessions today', value: '8,402', delta: { value: '+4%', positive: true } },\n { label: 'Open issues', value: '14', delta: { value: '−6%', positive: true } },\n { label: 'Error rate', value: '0.32%', delta: { value: '+0.05%', positive: false } },\n];\n\ninterface ActivityRow {\n id: string;\n who: { name: string; initials: string };\n action: string;\n target: string;\n when: string;\n}\n\nconst sampleActivity: ActivityRow[] = [\n { id: '1', who: { name: 'Anu B.', initials: 'AB' }, action: 'merged', target: 'feat/segments', when: '12m ago' },\n { id: '2', who: { name: 'Bat E.', initials: 'BE' }, action: 'opened', target: 'fix/login-flow', when: '34m ago' },\n { id: '3', who: { name: 'Tuya G.', initials: 'TG' }, action: 'commented on', target: 'Q2 OKRs', when: '1h ago' },\n { id: '4', who: { name: 'Khulan O.', initials: 'KO' }, action: 'archived', target: 'old-billing-spike', when: '3h ago' },\n];\n\nexport function Dashboard() {\n return (\n <div className=\"space-y-8\">\n <header className=\"flex items-end justify-between gap-4\">\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight text-foreground\">Overview</h1>\n <p className=\"text-sm text-foreground-muted mt-1\">\n What's happening across your workspace today.\n </p>\n </div>\n <div className=\"hidden md:flex items-center gap-2\">\n <Pill tone=\"neutral\" variant=\"outline\">\n Last 7 days\n </Pill>\n </div>\n </header>\n\n <section className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n {sampleStats.map((s) => (\n <Card key={s.label}>\n <CardHeader className=\"pb-2\">\n <CardDescription>{s.label}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-2xl font-semibold tabular text-foreground\">{s.value}</span>\n {s.delta && (\n <span\n className={\n s.delta.positive\n ? 'text-xs font-medium text-success-text tabular'\n : 'text-xs font-medium text-danger-text tabular'\n }\n >\n {s.delta.value}\n </span>\n )}\n </div>\n </CardContent>\n </Card>\n ))}\n </section>\n\n <Card>\n <CardHeader>\n <CardTitle>Active users</CardTitle>\n <CardDescription>Distinct sessions per day, last 30 days.</CardDescription>\n </CardHeader>\n <CardContent>\n {/* Chart goes here — placeholder maintains layout */}\n <div\n role=\"img\"\n aria-label=\"Active users sparkline\"\n className=\"h-48 w-full rounded-md border border-dashed border-border bg-background-subtle\"\n />\n </CardContent>\n </Card>\n\n <Card padding=\"none\">\n <CardHeader className=\"px-5 pt-5\">\n <CardTitle>Recent activity</CardTitle>\n </CardHeader>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Who</TableHead>\n <TableHead>Action</TableHead>\n <TableHead>Target</TableHead>\n <TableHead className=\"text-right\">When</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {sampleActivity.map((r) => (\n <TableRow key={r.id}>\n <TableCell>\n <div className=\"flex items-center gap-2\">\n <Avatar size=\"xs\" fallback={r.who.initials} />\n <span className=\"text-foreground\">{r.who.name}</span>\n </div>\n </TableCell>\n <TableCell className=\"text-foreground-muted\">{r.action}</TableCell>\n <TableCell>\n <Badge tone=\"neutral\" variant=\"outline\">\n {r.target}\n </Badge>\n </TableCell>\n <TableCell className=\"text-right tabular text-foreground-subtle\">{r.when}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Card>\n </div>\n );\n}\n","import { useState, type ReactNode } from 'react';\nimport { Bell, CreditCard, Lock, User, Users } from '@/icons';\nimport { Avatar } from '@/components/ui/Avatar';\nimport { Button } from '@/components/ui/Button';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/Card';\nimport { Input } from '@/components/ui/Input';\nimport { Separator } from '@/components/ui/Separator';\nimport { Switch } from '@/components/ui/Switch';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Settings shell with a sticky left sub-nav. Sections are anchor-linked so\n * deep links land on the right card. Keep section copy short — the goal of\n * Settings is recall, not reading.\n * --------------------------------------------------------------------------- */\n\ninterface NavSection {\n id: string;\n label: string;\n icon: ReactNode;\n}\n\nconst sections: NavSection[] = [\n { id: 'profile', label: 'Profile', icon: <User /> },\n { id: 'security', label: 'Security', icon: <Lock /> },\n { id: 'notifications', label: 'Notifications', icon: <Bell /> },\n { id: 'billing', label: 'Billing', icon: <CreditCard /> },\n { id: 'team', label: 'Team', icon: <Users /> },\n];\n\nexport function SettingsPage() {\n const [active, setActive] = useState('profile');\n\n return (\n <div className=\"mx-auto max-w-5xl space-y-8\">\n <header>\n <h1 className=\"text-2xl font-semibold tracking-tight text-foreground\">Settings</h1>\n <p className=\"text-sm text-foreground-muted mt-1\">\n Manage your account, preferences, and billing.\n </p>\n </header>\n\n <div className=\"grid gap-8 md:grid-cols-[200px_1fr]\">\n <nav aria-label=\"Settings sections\" className=\"md:sticky md:top-20 md:self-start\">\n <ul className=\"flex flex-col gap-px\">\n {sections.map((s) => (\n <li key={s.id}>\n <a\n href={`#${s.id}`}\n onClick={() => setActive(s.id)}\n className={cn(\n 'flex h-9 items-center gap-2 rounded-md px-2 text-sm transition-colors duration-[var(--duration-fast)] outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n active === s.id\n ? 'bg-background-muted text-foreground font-medium'\n : 'text-foreground-muted hover:bg-background-muted hover:text-foreground',\n )}\n aria-current={active === s.id ? 'page' : undefined}\n >\n <span className=\"[&_svg]:size-4\">{s.icon}</span>\n {s.label}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n\n <div className=\"space-y-8\">\n <section id=\"profile\">\n <Card>\n <CardHeader>\n <CardTitle>Profile</CardTitle>\n <CardDescription>Visible to your teammates.</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex items-center gap-4\">\n <Avatar size=\"xl\" fallback=\"BO\" />\n <div>\n <Button variant=\"outline\" size=\"sm\">Change photo</Button>\n <p className=\"text-xs text-foreground-subtle mt-2\">JPG or PNG, max 2 MB.</p>\n </div>\n </div>\n <Separator />\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <Input label=\"First name\" defaultValue=\"Bay\" />\n <Input label=\"Last name\" defaultValue=\"Otgonbayar\" />\n </div>\n <Input label=\"Display email\" type=\"email\" defaultValue=\"bay@company.com\" />\n <div className=\"flex justify-end\">\n <Button>Save changes</Button>\n </div>\n </CardContent>\n </Card>\n </section>\n\n <section id=\"security\">\n <Card>\n <CardHeader>\n <CardTitle>Security</CardTitle>\n <CardDescription>How you sign in and protect your account.</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <Input label=\"Current password\" type=\"password\" />\n <Input label=\"New password\" type=\"password\" helperText=\"At least 8 characters.\" />\n <Separator />\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium text-foreground\">Two-factor authentication</p>\n <p className=\"text-xs text-foreground-subtle\">\n Required for admin accounts on production.\n </p>\n </div>\n <Switch defaultChecked />\n </div>\n <div className=\"flex justify-end\">\n <Button>Update password</Button>\n </div>\n </CardContent>\n </Card>\n </section>\n\n <section id=\"notifications\">\n <Card>\n <CardHeader>\n <CardTitle>Notifications</CardTitle>\n <CardDescription>Choose what we email and ping you about.</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <Switch label=\"Product updates\" description=\"A short note when we ship something.\" defaultChecked />\n <Separator />\n <Switch label=\"Mentions\" description=\"When a teammate @ mentions you in a comment.\" defaultChecked />\n <Separator />\n <Switch label=\"Weekly digest\" description=\"A Monday-morning summary of last week's activity.\" />\n </CardContent>\n </Card>\n </section>\n\n <section id=\"billing\">\n <Card>\n <CardHeader>\n <CardTitle>Billing</CardTitle>\n <CardDescription>Your plan, invoices, and payment method.</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"rounded-md border border-border bg-background-subtle p-4\">\n <p className=\"text-sm font-medium text-foreground\">Team — $20/user/month</p>\n <p className=\"text-xs text-foreground-subtle mt-1\">\n Renews on 1 June 2026 · 12 seats\n </p>\n </div>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\">Manage seats</Button>\n <Button>Upgrade plan</Button>\n </div>\n </CardContent>\n </Card>\n </section>\n\n <section id=\"team\">\n <Card>\n <CardHeader>\n <CardTitle>Team</CardTitle>\n <CardDescription>Invite teammates and manage roles.</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex gap-2\">\n <Input\n type=\"email\"\n placeholder=\"teammate@company.com\"\n hideLabel\n label=\"Invite email\"\n className=\"flex-1\"\n />\n <Button>Send invite</Button>\n </div>\n <p className=\"text-xs text-foreground-subtle\">\n Invited members will receive a sign-up link by email.\n </p>\n </CardContent>\n </Card>\n </section>\n </div>\n </div>\n </div>\n );\n}\n","import { useMemo, useState } from 'react';\nimport { Download, Filter, Plus, Trash2, Upload } from '@/icons';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { Checkbox } from '@/components/ui/Checkbox';\nimport { DataGrid } from '@/components/ui/DataGrid';\nimport { EmptyState } from '@/components/ui/EmptyState';\nimport { IconButton } from '@/components/ui/IconButton';\nimport { Pagination } from '@/components/ui/Pagination';\nimport { Select, SelectContent, SelectItem, SelectTrigger } from '@/components/ui/Select';\n\n/* -----------------------------------------------------------------------------\n * Data table page — filters + search + bulk action bar + grid + pagination.\n * All state stays local so the file is drop-in reviewable.\n * --------------------------------------------------------------------------- */\n\ninterface Project {\n id: string;\n name: string;\n status: 'active' | 'paused' | 'archived';\n owner: string;\n updatedAt: string;\n}\n\nconst sample: Project[] = [\n { id: 'p1', name: 'Pulse onboarding', status: 'active', owner: 'Anu B.', updatedAt: '2 hours ago' },\n { id: 'p2', name: 'Q2 OKRs rollout', status: 'active', owner: 'Bat E.', updatedAt: 'Yesterday' },\n { id: 'p3', name: 'Legacy export', status: 'paused', owner: 'Tuya G.', updatedAt: '3 days ago' },\n { id: 'p4', name: 'Billing spike', status: 'archived', owner: 'Khulan O.', updatedAt: 'Last week' },\n { id: 'p5', name: 'Marketing refresh', status: 'active', owner: 'Anu B.', updatedAt: 'Last week' },\n];\n\nconst statusTone = {\n active: { tone: 'success' as const, label: 'Active' },\n paused: { tone: 'warning' as const, label: 'Paused' },\n archived: { tone: 'neutral' as const, label: 'Archived' },\n};\n\nexport function DataTablePage() {\n const [query, setQuery] = useState('');\n const [status, setStatus] = useState<string>('all');\n const [selected, setSelected] = useState<string[]>([]);\n const [page, setPage] = useState(1);\n const [pageSize, setPageSize] = useState(10);\n\n const filtered = useMemo(() => {\n return sample.filter((p) => {\n const matchesQuery = p.name.toLowerCase().includes(query.toLowerCase());\n const matchesStatus = status === 'all' || p.status === status;\n return matchesQuery && matchesStatus;\n });\n }, [query, status]);\n\n const allSelected = filtered.length > 0 && selected.length === filtered.length;\n const someSelected = selected.length > 0 && !allSelected;\n\n return (\n <div className=\"space-y-6\">\n <header className=\"flex items-end justify-between gap-4\">\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight text-foreground\">Projects</h1>\n <p className=\"text-sm text-foreground-muted mt-1\">\n {filtered.length} project{filtered.length === 1 ? '' : 's'} match your filters.\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" leadingIcon={<Upload />}>\n Import\n </Button>\n <Button leadingIcon={<Plus />}>New project</Button>\n </div>\n </header>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <Select value={status} onValueChange={setStatus}>\n <SelectTrigger className=\"w-36\" placeholder=\"Status\" />\n <SelectContent>\n <SelectItem value=\"all\">All statuses</SelectItem>\n <SelectItem value=\"active\">Active</SelectItem>\n <SelectItem value=\"paused\">Paused</SelectItem>\n <SelectItem value=\"archived\">Archived</SelectItem>\n </SelectContent>\n </Select>\n <Button variant=\"outline\" size=\"sm\" leadingIcon={<Filter />}>\n More filters\n </Button>\n </div>\n\n {selected.length > 0 && (\n <div className=\"flex items-center justify-between rounded-md border border-border bg-background-subtle px-4 py-2\">\n <div className=\"flex items-center gap-3\">\n <Checkbox\n checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n onCheckedChange={(v) => setSelected(v ? filtered.map((p) => p.id) : [])}\n aria-label=\"Select all\"\n />\n <span className=\"text-sm text-foreground\">\n {selected.length} selected\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"ghost\" size=\"sm\" leadingIcon={<Download />}>\n Export\n </Button>\n <Button variant=\"ghost\" size=\"sm\" leadingIcon={<Trash2 />}>\n Delete\n </Button>\n </div>\n </div>\n )}\n\n <DataGrid\n rows={filtered.slice((page - 1) * pageSize, page * pageSize)}\n filter={{ value: query, onChange: setQuery, placeholder: 'Search projects…' }}\n emptyState={\n <EmptyState\n title=\"No projects match\"\n description=\"Try adjusting filters or creating a new project.\"\n action={<Button leadingIcon={<Plus />}>New project</Button>}\n className=\"border-0 bg-transparent\"\n />\n }\n columns={[\n {\n key: 'select',\n header: (\n <Checkbox\n checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n onCheckedChange={(v) => setSelected(v ? filtered.map((p) => p.id) : [])}\n aria-label=\"Select all rows\"\n />\n ),\n width: '32px',\n cell: (r) => (\n <Checkbox\n checked={selected.includes(r.id)}\n onCheckedChange={(v) =>\n setSelected((prev) => (v ? [...prev, r.id] : prev.filter((id) => id !== r.id)))\n }\n aria-label={`Select ${r.name}`}\n />\n ),\n },\n { key: 'name', header: 'Name', sortable: true, cell: (r) => <span className=\"font-medium text-foreground\">{r.name}</span> },\n {\n key: 'status',\n header: 'Status',\n cell: (r) => (\n <Badge tone={statusTone[r.status].tone} dot>\n {statusTone[r.status].label}\n </Badge>\n ),\n },\n { key: 'owner', header: 'Owner' },\n { key: 'updatedAt', header: 'Updated', align: 'right' },\n ]}\n />\n\n <Pagination\n page={page}\n pageCount={Math.max(1, Math.ceil(filtered.length / pageSize))}\n onPageChange={setPage}\n totalItems={filtered.length}\n pageSize={pageSize}\n pageSizeOptions={[10, 20, 50]}\n onPageSizeChange={(s) => {\n setPageSize(s);\n setPage(1);\n }}\n />\n </div>\n );\n}\n","import { Edit2, ExternalLink, Trash2 } from '@/icons';\nimport { Avatar } from '@/components/ui/Avatar';\nimport { Badge } from '@/components/ui/Badge';\nimport { Breadcrumbs } from '@/components/ui/Breadcrumbs';\nimport { Button } from '@/components/ui/Button';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card';\nimport { Separator } from '@/components/ui/Separator';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/Tabs';\n\nexport function RecordDetail() {\n return (\n <div className=\"space-y-6\">\n <Breadcrumbs\n items={[\n { label: 'Projects', href: '/projects' },\n { label: 'Pulse onboarding' },\n ]}\n />\n\n <header className=\"flex items-start justify-between gap-4\">\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-semibold tracking-tight text-foreground\">\n Pulse onboarding\n </h1>\n <Badge tone=\"success\" dot>\n Active\n </Badge>\n </div>\n <p className=\"text-sm text-foreground-muted max-w-2xl\">\n Self-serve onboarding flow for new admins. Owns the first 5 minutes of every\n workspace.\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" leadingIcon={<Edit2 />}>\n Edit\n </Button>\n <Button variant=\"outline\" leadingIcon={<Trash2 />}>\n Archive\n </Button>\n <Button trailingIcon={<ExternalLink />}>Open in app</Button>\n </div>\n </header>\n\n <div className=\"grid gap-6 lg:grid-cols-[1fr_320px]\">\n <div className=\"min-w-0\">\n <Tabs defaultValue=\"overview\">\n <TabsList>\n <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n <TabsTrigger value=\"activity\">Activity</TabsTrigger>\n <TabsTrigger value=\"files\">Files</TabsTrigger>\n <TabsTrigger value=\"settings\">Settings</TabsTrigger>\n </TabsList>\n <TabsContent value=\"overview\" className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle>Summary</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-foreground-muted leading-relaxed\">\n <p>\n The Pulse onboarding flow walks new admins through workspace creation,\n teammate invites, and first-data import in under five minutes.\n </p>\n <p>\n Completion rate sits at 71% (week-over-week +4 pts) and median time to\n finish is 4 m 22 s.\n </p>\n </CardContent>\n </Card>\n </TabsContent>\n <TabsContent value=\"activity\">\n <p className=\"text-sm text-foreground-muted\">Activity feed appears here.</p>\n </TabsContent>\n <TabsContent value=\"files\">\n <p className=\"text-sm text-foreground-muted\">Linked documents appear here.</p>\n </TabsContent>\n <TabsContent value=\"settings\">\n <p className=\"text-sm text-foreground-muted\">Project settings appear here.</p>\n </TabsContent>\n </Tabs>\n </div>\n\n <aside className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <Row label=\"Owner\" value={<><Avatar size=\"xs\" fallback=\"AB\" /> Anu B.</>} />\n <Row label=\"Created\" value=\"12 Feb 2026\" />\n <Row label=\"Updated\" value=\"2 hours ago\" />\n <Row label=\"Tags\" value={<><Badge tone=\"accent\">growth</Badge> <Badge tone=\"neutral\" variant=\"outline\">v2</Badge></>} />\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Watchers</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex -space-x-2\">\n <Avatar fallback=\"AB\" />\n <Avatar fallback=\"BE\" />\n <Avatar fallback=\"TG\" />\n <Avatar fallback=\"+2\" />\n </div>\n </CardContent>\n </Card>\n </aside>\n </div>\n </div>\n );\n}\n\nfunction Row({ label, value }: { label: string; value: React.ReactNode }) {\n return (\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-foreground-subtle\">{label}</span>\n <span className=\"flex items-center gap-1.5 text-foreground\">{value}</span>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { ArrowLeft, ArrowRight, CheckCircle2 } from '@/icons';\nimport { Button } from '@/components/ui/Button';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/Card';\nimport { Input } from '@/components/ui/Input';\nimport { RadioGroup, RadioItem } from '@/components/ui/RadioGroup';\nimport { Stepper } from '@/components/ui/Stepper';\n\nconst steps = [\n { title: 'Workspace' },\n { title: 'Invite team' },\n { title: 'Connect data' },\n { title: 'Done' },\n];\n\nexport function Onboarding() {\n const [step, setStep] = useState(0);\n const next = () => setStep((s) => Math.min(s + 1, steps.length - 1));\n const back = () => setStep((s) => Math.max(s - 1, 0));\n\n return (\n <div className=\"mx-auto max-w-2xl space-y-8 py-12\">\n <Stepper steps={steps} current={step} />\n <Card>\n <CardHeader>\n <CardTitle>{stepHeader[step].title}</CardTitle>\n <CardDescription>{stepHeader[step].description}</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {step === 0 && (\n <>\n <Input label=\"Workspace name\" placeholder=\"Acme Inc.\" />\n <Input label=\"URL slug\" prefix={<span>acme.app/</span>} placeholder=\"acme\" />\n </>\n )}\n {step === 1 && (\n <>\n <Input\n type=\"email\"\n label=\"Invite by email\"\n placeholder=\"teammate@company.com\"\n helperText=\"Separate multiple emails with commas.\"\n />\n <RadioGroup defaultValue=\"member\">\n <RadioItem value=\"admin\" label=\"Admin\" description=\"Can manage workspace and billing.\" />\n <RadioItem value=\"member\" label=\"Member\" description=\"Can create and edit projects.\" />\n <RadioItem value=\"viewer\" label=\"Viewer\" description=\"Read-only access.\" />\n </RadioGroup>\n </>\n )}\n {step === 2 && (\n <>\n <p className=\"text-sm text-foreground-muted\">\n Connect your data source so we can populate your first dashboard.\n </p>\n <div className=\"grid grid-cols-2 gap-2\">\n {['Postgres', 'BigQuery', 'Snowflake', 'CSV upload'].map((src) => (\n <button\n key={src}\n type=\"button\"\n className=\"rounded-lg border border-border bg-card p-4 text-left hover:border-border-strong hover:bg-background-subtle transition-colors duration-[var(--duration-fast)] outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n >\n <p className=\"font-medium text-foreground\">{src}</p>\n <p className=\"text-xs text-foreground-subtle mt-1\">Quick setup with SSO</p>\n </button>\n ))}\n </div>\n </>\n )}\n {step === 3 && (\n <div className=\"flex flex-col items-center gap-3 py-6 text-center\">\n <CheckCircle2 className=\"size-10 text-success-text\" aria-hidden />\n <p className=\"text-base font-medium text-foreground\">You're all set.</p>\n <p className=\"text-sm text-foreground-muted max-w-sm\">\n Your workspace is ready. We've sent invites and your first dashboard is loading.\n </p>\n </div>\n )}\n </CardContent>\n </Card>\n\n <div className=\"flex items-center justify-between\">\n <Button variant=\"ghost\" leadingIcon={<ArrowLeft />} onClick={back} disabled={step === 0}>\n Back\n </Button>\n {step < steps.length - 1 ? (\n <Button trailingIcon={<ArrowRight />} onClick={next}>\n {step === steps.length - 2 ? 'Finish' : 'Continue'}\n </Button>\n ) : (\n <Button>Open workspace</Button>\n )}\n </div>\n </div>\n );\n}\n\nconst stepHeader = [\n { title: 'Create your workspace', description: 'A workspace is where your team and projects live.' },\n { title: 'Invite your team', description: 'You can always invite more people later.' },\n { title: 'Connect a data source', description: 'Pick one — others can be added in settings.' },\n { title: 'Welcome aboard', description: \"We've set up your starting dashboard.\" },\n];\n","import { Check } from '@/icons';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { cn } from '@/lib/utils';\n\ninterface Tier {\n name: string;\n price: string;\n cadence: string;\n description: string;\n features: string[];\n cta: string;\n highlighted?: boolean;\n}\n\nconst tiers: Tier[] = [\n {\n name: 'Starter',\n price: '$0',\n cadence: 'forever',\n description: 'For individuals exploring the product.',\n features: ['Up to 3 projects', 'Community support', 'Single workspace'],\n cta: 'Start free',\n },\n {\n name: 'Team',\n price: '$20',\n cadence: 'per user / month',\n description: 'For small teams running real workloads.',\n features: [\n 'Unlimited projects',\n 'Email support, 24h response',\n 'SSO via Google & Microsoft',\n 'Audit log (30 days)',\n ],\n cta: 'Start 14-day trial',\n highlighted: true,\n },\n {\n name: 'Enterprise',\n price: 'Custom',\n cadence: 'annual',\n description: 'For organisations with custom requirements.',\n features: [\n 'Everything in Team',\n 'SAML SSO + SCIM',\n 'Dedicated CSM',\n 'SOC 2 report + DPA',\n 'Audit log (unlimited)',\n ],\n cta: 'Talk to sales',\n },\n];\n\nexport function Pricing() {\n return (\n <div className=\"mx-auto max-w-5xl space-y-8 py-16\">\n <header className=\"text-center space-y-3\">\n <h1 className=\"text-3xl font-semibold tracking-tight text-foreground\">\n Plans that scale with your team\n </h1>\n <p className=\"text-sm text-foreground-muted max-w-xl mx-auto\">\n Start free, upgrade when you need more. All paid plans include a 14-day trial — no\n credit card required.\n </p>\n </header>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n {tiers.map((tier) => (\n <div\n key={tier.name}\n className={cn(\n 'flex flex-col gap-6 rounded-lg border bg-card p-6',\n tier.highlighted ? 'border-accent shadow-sm' : 'border-border',\n )}\n >\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-base font-semibold text-foreground\">{tier.name}</h2>\n {tier.highlighted && <Badge tone=\"accent\">Most popular</Badge>}\n </div>\n <p className=\"text-sm text-foreground-muted\">{tier.description}</p>\n </div>\n\n <div className=\"flex items-baseline gap-1.5\">\n <span className=\"text-3xl font-semibold tabular text-foreground\">{tier.price}</span>\n <span className=\"text-sm text-foreground-subtle\">{tier.cadence}</span>\n </div>\n\n <ul className=\"space-y-2 text-sm\">\n {tier.features.map((f) => (\n <li key={f} className=\"flex items-start gap-2 text-foreground\">\n <Check className=\"size-4 text-accent shrink-0 mt-0.5\" aria-hidden />\n {f}\n </li>\n ))}\n </ul>\n\n <Button\n variant={tier.highlighted ? 'primary' : 'outline'}\n className=\"mt-auto w-full\"\n >\n {tier.cta}\n </Button>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { ArrowRight, Folder, Plus, Upload, Users } from '@/icons';\nimport { Button } from '@/components/ui/Button';\nimport { Card, CardContent } from '@/components/ui/Card';\nimport { EmptyState } from '@/components/ui/EmptyState';\n\n/* -----------------------------------------------------------------------------\n * First-run empty product state. Combines a hero EmptyState with three\n * \"next step\" cards — common pattern across Linear, Notion, Vercel.\n * --------------------------------------------------------------------------- */\n\ninterface NextStep {\n icon: React.ReactNode;\n title: string;\n description: string;\n cta: string;\n}\n\nconst steps: NextStep[] = [\n {\n icon: <Plus />,\n title: 'Create a project',\n description: 'Track a real piece of work end-to-end.',\n cta: 'New project',\n },\n {\n icon: <Upload />,\n title: 'Import existing data',\n description: 'CSV, Postgres, BigQuery, or Snowflake — connect in a minute.',\n cta: 'Connect source',\n },\n {\n icon: <Users />,\n title: 'Invite your team',\n description: \"Workspaces are better with teammates. We'll send the invites.\",\n cta: 'Invite people',\n },\n];\n\nexport function FirstRunEmpty() {\n return (\n <div className=\"mx-auto max-w-3xl space-y-8 py-12\">\n <EmptyState\n icon={<Folder className=\"size-6\" />}\n title=\"Your workspace is ready\"\n description=\"Start with one of the steps below — you can always come back to the others.\"\n action={<Button trailingIcon={<ArrowRight />}>Open tutorial</Button>}\n />\n\n <div className=\"grid gap-3 md:grid-cols-3\">\n {steps.map((s) => (\n <Card key={s.title} variant=\"interactive\">\n <CardContent className=\"space-y-3\">\n <div className=\"inline-flex size-9 items-center justify-center rounded-md bg-accent-soft text-on-accent-soft [&_svg]:size-4\">\n {s.icon}\n </div>\n <div className=\"space-y-1\">\n <h3 className=\"text-sm font-semibold text-foreground\">{s.title}</h3>\n <p className=\"text-xs text-foreground-muted leading-relaxed\">{s.description}</p>\n </div>\n <Button variant=\"ghost\" size=\"sm\" trailingIcon={<ArrowRight />}>\n {s.cta}\n </Button>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"names":["cn","inputs","twMerge","clsx","__idCounter","uid","prefix","useMediaQuery","query","matches","setMatches","useState","useEffect","list","onChange","event","usePrefersReducedMotion","store","listener","t","id","next","useToast","toasts","setToasts","push","useCallback","dismiss","remove","toast","Accordion","AccordionPrimitive","AccordionItem","forwardRef","className","props","ref","jsx","AccordionTrigger","children","jsxs","ChevronDown","AccordionContent","alert","cva","iconForVariant","Info","CheckCircle2","AlertTriangle","XCircle","Alert","variant","title","dismissible","onDismiss","icon","open","setOpen","handleDismiss","renderedIcon","X","sizeMap","avatar","statusColour","Avatar","size","src","alt","fallback","status","AvatarPrimitive","AvatarGroup","max","items","visible","overflow","child","i","badge","dotColour","Badge","tone","dot","Breadcrumbs","maxItems","renderLink","displayItems","it","isLast","MoreHorizontal","ChevronRight","item","labelNode","button","Button","asChild","loading","leadingIcon","trailingIcon","disabled","type","isDisabled","classes","Slot","Loader2","card","Card","padding","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Checkbox","label","description","error","hideLabel","autoId","useId","fieldId","descId","errorId","CheckboxPrimitive","Minus","Check","Combobox","value","options","loadOptions","helperText","placeholder","searchPlaceholder","emptyText","clearable","helperId","setQuery","loaded","setLoaded","setLoading","cancelled","res","selected","useMemo","o","triggerHeight","triggerPadding","handleClear","e","isError","PopoverPrimitive","ChevronsUpDown","CommandPrimitive","opt","isSelected","v","Command","CommandInput","Search","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut","CommandDialog","onOpenChange","DialogPrimitive","useCommandPaletteShortcut","_","force","onKey","n","ContextMenu","ContextMenuPrimitive","ContextMenuTrigger","ContextMenuGroup","ContextMenuPortal","ContextMenuSub","ContextMenuRadioGroup","itemClasses","ContextMenuSubTrigger","ContextMenuSubContent","ContextMenuContent","ContextMenuItem","destructive","ContextMenuCheckboxItem","ContextMenuRadioItem","Circle","ContextMenuLabel","ContextMenuSeparator","ContextMenuShortcut","DropdownMenu","DropdownMenuPrimitive","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuPortal","DropdownMenuSub","DropdownMenuRadioGroup","DropdownMenuSubTrigger","inset","DropdownMenuSubContent","DropdownMenuContent","sideOffset","align","DropdownMenuItem","DropdownMenuCheckboxItem","checked","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","iconButton","IconButton","field","innerInput","Input","suffix","onClear","showPassword","setShowPassword","effectiveType","effectiveTone","renderedPrefix","hasValue","p","EyeOff","Eye","Table","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","TableSortHeader","sortKey","currentSort","onSortChange","active","direction","handle","ArrowUp","ArrowDown","ArrowUpDown","Skeleton","DataGrid","columns","rows","sort","filter","emptyState","hidden","setHidden","visibleColumns","c","renderRows","row","Settings","prev","k","d","calendarClassNames","calendarComponents","ChevronLeft","formatDate","PickerTrigger","Calendar","DatePicker","fromDate","toDate","DayPicker","DateRangePicker","Dialog","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","DialogContent","showClose","DialogHeader","DialogFooter","DialogTitle","DialogDescription","ConfirmationDialog","confirmLabel","cancelLabel","confirmVariant","onConfirm","EmptyState","action","secondaryAction","presets","ErrorState","onRetry","preset","Form","FormProvider","FormFieldContext","createContext","FormField","Controller","FormItemContext","useFormField","fieldContext","useContext","itemContext","getFieldState","formState","useFormContext","fieldState","FormItem","FormLabel","formItemId","LabelPrimitive","FormControl","formDescriptionId","formMessageId","FormDescription","FormError","body","Kbd","MultiSelect","maxVisibleChips","inputRef","useRef","toggle","x","clear","handleKeyDown","visibleChips","_a","Select","SelectPrimitive","SelectValue","SelectTrigger","scrollBtn","SelectScrollUpButton","ChevronUp","SelectScrollDownButton","SelectContent","position","SelectLabel","SelectItem","SelectSeparator","SelectGroup","pageRange","current","total","window","result","start","end","Pagination","page","pageCount","onPageChange","totalItems","pageSize","pageSizeOptions","onPageSizeChange","showJump","pages","from","to","goto","s","navButtonClass","ChevronsLeft","ChevronsRight","Popover","PopoverTrigger","PopoverAnchor","PopoverClose","PopoverContent","heightMap","fillTone","Progress","indeterminate","ProgressPrimitive","circleTone","ProgressCircle","thickness","isIndeterminate","radius","circumference","offset","RadioGroup","orientation","RadioGroupPrimitive","RadioItem","ScrollArea","ScrollAreaPrimitive","ScrollBar","Separator","decorative","SeparatorPrimitive","Sheet","SheetTrigger","SheetClose","SheetPortal","SheetOverlay","sheet","SheetContent","side","SheetHeader","SheetFooter","SheetTitle","SheetDescription","SidebarContext","Sidebar","defaultCollapsed","controlled","onCollapsedChange","header","footer","internal","setInternal","collapsed","setCollapsed","SidebarSection","SidebarItem","href","trailing","sub","SidebarGroup","defaultOpen","Fragment","Slider","showValue","formatValue","defaultValue","currentValue","isRange","SliderPrimitive","toneMap","Spinner","Stepper","steps","step","state","trackSize","thumbSize","Switch","labelPosition","control","SwitchPrimitive","labelBlock","Tabs","TabsPrimitive","TabsList","TabsTrigger","TabsContent","Textarea","autoResize","minRows","maxRows","innerRef","setRef","node","recompute","el","maxH","ToastProvider","ToastPrimitive","ToastViewport","iconMap","Toast","ToastTitle","ToastDescription","ToastAction","ToastClose","TooltipProvider","delayDuration","skipDelayDuration","TooltipPrimitive","TooltipRoot","TooltipTrigger","TooltipContent","Tooltip","TopNav","logo","nav","search","actions","TopNavLink","classNames","_ref","isObject","subject","isRecord","canUseDOM","areOptionsEqual","optionsA","optionsB","optionsAKeys","optionsBKeys","breakpointsA","breakpointsB","key","valueA","valueB","sortAndMapPluginToOptions","plugins","a","b","plugin","arePluginsEqual","pluginsA","pluginsB","optionA","index","optionB","isNumber","isString","isBoolean","mathAbs","mathSign","deltaAbs","factorAbs","diff","roundToTwoDecimals","num","arrayKeys","array","objectKeys","arrayLast","arrayLastIndex","arrayIsLastIndex","arrayFromNumber","startAt","object","objectsMergeDeep","objectA","objectB","mergedObjects","currentObject","areObjects","isMouseEvent","evt","ownerWindow","Alignment","viewSize","predefined","center","measure","EventStore","listeners","add","handler","removeListener","legacyMediaQueryList","self","Animations","ownerDocument","update","render","documentVisibleHandler","fixedTimeStep","lastTimeStamp","accumulatedTime","animationId","init","reset","destroy","stop","animate","timeStamp","timeElapsed","alpha","Axis","axis","contentDirection","isRightToLeft","isVertical","scroll","cross","sign","startEdge","getStartEdge","endEdge","getEndEdge","measureSize","nodeRect","height","width","Limit","min","length","reachedMin","reachedMax","reachedAny","constrain","removeOffset","Counter","loop","loopEnd","counter","withinLimit","get","set","clone","DragHandler","rootNode","target","dragTracker","location","animation","scrollTo","scrollBody","scrollTarget","eventHandler","percentOfView","dragFree","dragThreshold","skipSnaps","baseFriction","watchDrag","crossAxis","focusNodes","nonPassiveEvent","initEvents","dragEvents","goToNextThreshold","snapForceBoost","freeForceBoost","baseSpeed","isMoving","startScroll","startCross","pointerIsDown","preventScroll","preventClick","isMouse","emblaApi","downIfAllowed","down","up","click","addDragEvents","move","isFocusNode","nodeName","forceBoost","allowedForce","targetChanged","baseForce","isMouseEvt","lastScroll","lastCross","diffScroll","diffCross","rawForce","forceFactor","speed","friction","pointerDown","DragTracker","startEvent","lastEvent","readTime","readPoint","evtAxis","coord","pointerMove","expired","pointerUp","diffDrag","diffTime","NodeRects","offsetTop","offsetLeft","offsetWidth","offsetHeight","PercentOfView","ResizeHandler","container","slides","watchResize","nodeRects","observeNodes","resizeObserver","containerSize","slideSizes","destroyed","readSize","defaultCallback","entries","entry","isContainer","slideIndex","lastSize","newSize","ScrollBody","offsetLocation","previousLocation","baseDuration","scrollVelocity","scrollDirection","scrollDuration","scrollFriction","rawLocation","rawLocationPrevious","seek","displacement","isInstant","scrollDistance","settled","duration","velocity","useBaseDuration","useDuration","useBaseFriction","useFriction","ScrollBounds","limit","pullBackThreshold","edgeOffsetTolerance","frictionLimit","shouldConstrain","edge","diffToEdge","diffToTarget","toggleActive","ScrollContain","contentSize","snapsAligned","containScroll","pixelTolerance","scrollBounds","snapsBounded","measureBounded","scrollContainLimit","findScrollContainLimit","snapsContained","measureContained","usePixelTolerance","bound","snap","startSnap","endSnap","snapAligned","isFirst","scrollBound","ScrollLimit","scrollSnaps","ScrollLooper","vectors","shouldLoop","loopDistance","ScrollProgress","currentLocation","ScrollSnaps","alignment","containerRect","slideRects","slidesToScroll","groupSlides","alignments","measureSizes","snaps","measureUnaligned","measureAligned","rects","rect","g","SlideRegistry","containSnaps","slideIndexes","slideRegistry","createSlideRegistry","groupedSlideIndexes","doNotContain","group","groups","range","ScrollTarget","targetVector","minDistance","distances","findTargetSnap","distance","ascDiffsToSnaps","shortcut","d1","d2","targets","matchingTargets","byIndex","diffToSnap","byDistance","targetSnapDistance","reachedBound","snapDistance","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","targetIndex","SlideFocus","root","eventStore","watchFocus","focusListenerOptions","lastTabPressTime","registerTabPress","slide","Vector1D","initialValue","normalizeInput","subtract","Translate","translate","y","containerStyle","previousTarget","newTarget","SlideLooper","slideSizesWithGaps","ascItems","descItems","loopPoints","startPoints","endPoints","removeSlideSizes","indexes","slidesInGap","gap","findSlideBounds","findLoopPoints","isEndEdge","slideBounds","initial","altered","boundEdge","loopPoint","canLoop","otherIndexes","slideLocation","shiftLocation","SlidesHandler","watchSlides","mutationObserver","mutations","mutation","SlidesInView","threshold","intersectionEntryMap","inViewCache","notInViewCache","intersectionObserver","createInViewList","inView","isIntersecting","SlideSizes","readEdgeGap","withEdgeGap","startGap","measureStartGap","endGap","measureEndGap","measureWithGaps","slideRect","style","SlidesToScroll","groupByNumber","byNumber","groupSize","bySize","rectB","rectA","edgeA","edgeB","gapA","gapB","chunkSize","currentSize","previousSize","Engine","scrollAxis","startIndex","inViewThreshold","dragHandler","scrollLooper","slideLooper","shouldSettle","withinBounds","hasSettled","hasSettledAndIdle","interpolatedLocation","engine","startLocation","scrollProgress","slidesInView","slideFocus","EventHandler","api","getListeners","emit","on","cb","off","defaultOptions","OptionsHandler","mergeOptions","optionsAtMedia","matchedMediaOptions","media","mediaOption","optionsMediaQueries","optionsList","acc","mediaQueries","PluginsHandler","optionsHandler","activePlugins","map","EmblaCarousel","userOptions","userPlugins","pluginsHandler","mediaHandlers","reInit","reActivate","optionsBase","pluginList","pluginApis","storeElements","userContainer","userSlides","customSlides","createEngine","optionsWithoutLoop","activate","withOptions","withPlugins","selectedScrollSnap","deActivate","jump","scrollNext","scrollPrev","canScrollNext","canScrollPrev","scrollSnapList","previousScrollSnap","slidesNotInView","internalEngine","containerNode","slideNodes","useEmblaCarousel","storedOptions","storedPlugins","setEmblaApi","viewport","setViewport","newEmblaApi","CarouselContext","useCarousel","ctx","Carousel","opts","setApi","carouselRef","canPrev","setCanPrev","canNext","setCanNext","onSelect","CarouselContent","CarouselItem","CarouselPrevious","CarouselNext","useScales","data","w","h","ys","innerW","innerH","LineChart","caption","sx","sy","path","AreaChart","top","area","BarChart","barW","__insertCSS","code","head","DrawerContext","React__default","useDrawerContext","context","isMobileFirefox","userAgent","isMac","testPlatform","isIPhone","isSafari","isIPad","isIOS","re","KEYBOARD_BUFFER","useIsomorphicLayoutEffect","useLayoutEffect","chain$1","callbacks","args","callback","visualViewport","isScrollable","getScrollParent","nonTextInputTypes","preventScrollCount","restore","usePreventScroll","preventScrollMobileSafari","scrollable","lastY","onTouchStart","onTouchMove","scrollTop","bottom","onTouchEnd","isInput","onFocus","scrollIntoView","onWindowScroll","scrollX","scrollY","restoreStyles","setStyle","removeEvents","addEvent","element","cur","scrollableTop","targetTop","targetBottom","keyboardHeight","composeRefs","refs","useComposedRefs","React","cache","styles","ignoreCache","originalStyles","prop","getTranslate","transform","mat","dampenValue","assignStyle","prevStyle","chain","fns","fn","TRANSITIONS","VELOCITY_THRESHOLD","CLOSE_THRESHOLD","SCROLL_LOCK_TIMEOUT","BORDER_RADIUS","NESTED_DISPLACEMENT","WINDOW_TOP_OFFSET","DRAG_CLASS","useCallbackRef","callbackRef","useUncontrolledState","defaultProp","uncontrolledState","prevValueRef","handleChange","useControllableState","uncontrolledProp","setUncontrolledProp","isControlled","setValue","nextValue","useSnapPoints","activeSnapPointProp","setActiveSnapPointProp","snapPoints","drawerRef","overlayRef","fadeFromIndex","onSnapPointChange","snapToSequentialPoint","activeSnapPoint","setActiveSnapPoint","windowDimensions","setWindowDimensions","onResize","isLastSnapPoint","activeSnapPointIndex","_snapPoints_findIndex","snapPoint","shouldFade","snapPointsOffset","_snapPoints_map","isPx","snapPointAsNumber","activeSnapPointOffset","snapToPoint","dimension","_snapPointsOffset_findIndex","newSnapPointIndex","snapPointDim","newIndex","onRelease","draggedDistance","closeDrawer","currentPosition","isOverlaySnapPoint","hasDraggedUp","closestSnapPoint","curr","dim","dragDirection","onDrag","newValue","getPercentageDragged","absDraggedDistance","isDraggingDown","targetSnapPointIndex","snapPointDistance","percentageDragged","noop","useScaleBackground","isOpen","shouldScaleBackground","setBackgroundColorOnScale","noBodyStyles","timeoutIdRef","initialBackgroundColor","getScale","wrapper","wrapperStylesCleanup","previousBodyPosition","usePositionFixed","modal","nested","hasBeenOpened","preventScrollRestoration","activeUrl","setActiveUrl","scrollPos","setPositionFixed","innerHeight","bottomBarHeight","restorePositionSetting","onScroll","Root","openProp","onDragProp","onReleaseProp","closeThreshold","scrollLockTimeout","handleOnly","fixed","onClose","disablePreventScroll","repositionInputs","onAnimationEnd","autoFocus","_drawerRef_current","_drawerRef_current1","setIsOpen","setHasBeenOpened","isDragging","setIsDragging","justReleased","setJustReleased","openTime","dragStartTime","dragEndTime","lastTimeDragPrevented","isAllowedToDrag","nestedOpenChangeTimer","pointerStart","keyboardIsOpen","shouldAnimate","previousDiffFromInitial","drawerHeightRef","drawerWidthRef","initialDrawerHeight","onReleaseSnapPoints","onDragSnapPoints","getSnapPointsPercentageDragged","onPress","shouldDrag","isDraggingInDirection","_window_getSelection","highlightedText","swipeAmount","date","directionMultiplier","noCloseSnapPointsPreCondition","drawerDimension","snapPointPercentageDragged","dampenedDraggedDistance","translateValue","opacityValue","scaleValue","borderRadiusValue","_window_visualViewport","onVisualViewportChange","focusedElement","visualViewportHeight","totalHeight","diffFromInitial","drawerHeight","isTallEnough","offsetFromTop","activeSnapPointHeight","newDrawerHeight","fromWithin","cancelDrag","resetDrawer","currentSwipeAmount","timeTaken","distMoved","_drawerRef_current_getBoundingClientRect_height","visibleDrawerHeight","_drawerRef_current_getBoundingClientRect_width","visibleDrawerWidth","isHorizontalSwipe","onNestedOpenChange","scale","initialTranslate","onNestedDrag","_event","initialScale","newScale","newTranslate","onNestedRelease","Overlay","rest","composedRef","hasSnapPoints","onMouseUp","Content","onPointerDownOutside","onOpenAutoFocus","delayedSnapPoints","setDelayedSnapPoints","pointerStartRef","lastKnownPointerEventRef","wasBeyondThePointRef","isDeltaInDirection","delta","deltaY","deltaX","isDeltaX","dFactor","handleOnPointerUp","yPosition","xPosition","swipeStartThreshold","LONG_HANDLE_PRESS_TIMEOUT","DOUBLE_TAP_TIMEOUT","Handle","preventCycle","closeTimeoutIdRef","shouldCancelInteractionRef","handleStartCycle","handleCancelInteraction","handleCycleSnapPoints","currentSnapIndex","point","nextSnapPoint","handleStartInteraction","Portal","portalProps","Drawer","DrawerPrimitive","DrawerTrigger","DrawerPortal","DrawerClose","DrawerOverlay","DrawerContent","DrawerHeader","DrawerFooter","DrawerTitle","DrawerDescription","formatSize","bytes","FileUpload","accept","multiple","maxSize","hint","inputId","over","setOver","files","addFiles","incoming","arr","f","idx","onDrop","Upload","file","FileIcon","snackbar","Snackbar","TagInput","separators","draft","setDraft","tags","commit","raw","Timeline","TimelineItem","bullet","TimelineTime","TimelineTitle","TimelineDescription","Tree","defaultExpanded","selectedId","expanded","setExpanded","renderNode","depth","hasChildren","DefaultIcon","FolderOpen","Folder","AuthLayout","brand","subtitle","SignInForm","onSubmit","forgotHref","email","setEmail","password","setPassword","ArrowRight","SignUpForm","name","setName","ForgotPasswordForm","Mail","MagicLinkSent","onResend","navigate","hash","AppShell","ProfileFooter","Home","Pill","Inbox","Users","BarChart3","Bookmark","LayoutGrid","Plug","HelpCircle","TopBar","NotificationMenu","ProfileMenu","sampleNotifications","unread","Bell","User","Sparkles","LogOut","sampleStats","sampleActivity","Dashboard","sections","Lock","CreditCard","SettingsPage","setActive","sample","statusTone","DataTablePage","setStatus","setSelected","setPage","setPageSize","filtered","matchesQuery","matchesStatus","allSelected","someSelected","Plus","Filter","Download","Trash2","r","RecordDetail","Edit2","ExternalLink","Row","Onboarding","setStep","back","stepHeader","ArrowLeft","tiers","Pricing","tier","FirstRunEmpty"],"mappings":"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","x_google_ignoreList":[46,47,48,51]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/lib/utils.ts","../src/hooks/use-media-query.ts","../src/hooks/use-toast.ts","../src/components/ui/Accordion.tsx","../src/components/ui/Alert.tsx","../src/components/ui/Avatar.tsx","../src/components/ui/Badge.tsx","../src/components/ui/Breadcrumbs.tsx","../src/components/ui/Button.tsx","../src/components/ui/Card.tsx","../src/components/ui/Checkbox.tsx","../src/components/ui/Combobox.tsx","../src/components/ui/CommandPalette.tsx","../src/components/ui/ContextMenu.tsx","../src/components/ui/DropdownMenu.tsx","../src/components/ui/IconButton.tsx","../src/components/ui/Input.tsx","../src/components/ui/Table.tsx","../src/components/ui/Skeleton.tsx","../src/components/ui/DataGrid.tsx","../src/components/ui/DatePicker.tsx","../src/components/ui/Dialog.tsx","../src/components/ui/EmptyState.tsx","../src/components/ui/ErrorState.tsx","../src/components/ui/Form.tsx","../src/components/ui/Kbd.tsx","../src/components/ui/MultiSelect.tsx","../src/components/ui/Select.tsx","../src/components/ui/Pagination.tsx","../src/components/ui/Popover.tsx","../src/components/ui/Progress.tsx","../src/components/ui/RadioGroup.tsx","../src/components/ui/ScrollArea.tsx","../src/components/ui/Separator.tsx","../src/components/ui/Sheet.tsx","../src/components/ui/Sidebar.tsx","../src/components/ui/Slider.tsx","../src/components/ui/Spinner.tsx","../src/components/ui/Stepper.tsx","../src/components/ui/Switch.tsx","../src/components/ui/Tabs.tsx","../src/components/ui/Textarea.tsx","../src/components/ui/Toast.tsx","../src/components/ui/Tooltip.tsx","../src/components/ui/TopNav.tsx","../src/components/ui/Calendar.tsx","../node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js","../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js","../node_modules/.pnpm/embla-carousel-react@8.6.0_react@18.3.1/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js","../src/components/ui/Carousel.tsx","../src/components/ui/Chart.tsx","../node_modules/.pnpm/vaul@1.1.2_@types+react-dom@18.3.7_@types+react@18.3.28__@types+react@18.3.28_react-dom@18.3._dlyogjwbo72vf7wiasjo4k6qdi/node_modules/vaul/dist/index.mjs","../src/components/ui/Drawer.tsx","../src/components/ui/FileUpload.tsx","../src/components/ui/Snackbar.tsx","../src/components/ui/TagInput.tsx","../src/components/ui/Timeline.tsx","../src/components/ui/Tree.tsx","../src/components/patterns/Authentication.tsx","../src/components/patterns/AppShell.tsx","../src/components/patterns/Settings.tsx","../src/components/patterns/DataTablePage.tsx","../src/components/patterns/RecordDetail.tsx","../src/components/patterns/Onboarding.tsx","../src/components/patterns/Pricing.tsx","../src/components/patterns/FirstRunEmpty.tsx"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Compose Tailwind class names safely.\n *\n * - `clsx` handles conditionals, arrays, and objects.\n * - `tailwind-merge` resolves conflicts: `cn('p-2', condition && 'p-4')` returns `'p-4'`.\n *\n * Use this everywhere classes are composed. Never concatenate Tailwind\n * classes with template strings — they will not de-duplicate.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Tiny helper to build a stable id for label/aria-describedby pairings\n * when the component does not receive an `id` from the consumer.\n */\nlet __idCounter = 0;\nexport function uid(prefix = 'ds'): string {\n __idCounter += 1;\n return `${prefix}-${__idCounter}`;\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * Subscribe to a CSS media query. SSR-safe — returns `false` on the server.\n *\n * @example\n * const isDesktop = useMediaQuery('(min-width: 1024px)');\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const list = window.matchMedia(query);\n const onChange = (event: MediaQueryListEvent) => setMatches(event.matches);\n setMatches(list.matches);\n list.addEventListener('change', onChange);\n return () => list.removeEventListener('change', onChange);\n }, [query]);\n\n return matches;\n}\n\n/** Convenience: respect `prefers-reduced-motion`. */\nexport function usePrefersReducedMotion(): boolean {\n return useMediaQuery('(prefers-reduced-motion: reduce)');\n}\n","import { useCallback, useEffect, useState, type ReactNode } from 'react';\n\n/* -----------------------------------------------------------------------------\n * Minimal toast queue + hook. The host app mounts a single <ToastHub> near\n * the root which subscribes to this store; any component can call\n * `useToast().push({...})` from anywhere.\n *\n * Kept dependency-free intentionally — no external state library.\n * --------------------------------------------------------------------------- */\n\nexport type ToastVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface ToastDescriptor {\n /** Auto-generated; consumers can pass an explicit id to update an in-flight toast. */\n id?: string;\n title?: ReactNode;\n description?: ReactNode;\n variant?: ToastVariant;\n /** Milliseconds before auto-dismiss. Default 5000. Set to 0 to keep open. */\n duration?: number;\n /** Action button. The alt text is used for screen reader announcements. */\n action?: {\n label: ReactNode;\n altText: string;\n onClick: () => void;\n };\n}\n\ninterface InternalToast extends ToastDescriptor {\n id: string;\n open: boolean;\n}\n\ntype Listener = (toasts: InternalToast[]) => void;\n\nconst store = {\n toasts: [] as InternalToast[],\n listeners: new Set<Listener>(),\n emit(this: typeof store) {\n for (const listener of this.listeners) listener(this.toasts);\n },\n push(this: typeof store, t: ToastDescriptor) {\n const id = t.id ?? `t_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`;\n const next: InternalToast = { open: true, duration: 5000, variant: 'default', ...t, id };\n this.toasts = [next, ...this.toasts].slice(0, 3);\n this.emit();\n return id;\n },\n dismiss(this: typeof store, id: string) {\n this.toasts = this.toasts.map((t) => (t.id === id ? { ...t, open: false } : t));\n this.emit();\n },\n remove(this: typeof store, id: string) {\n this.toasts = this.toasts.filter((t) => t.id !== id);\n this.emit();\n },\n};\n\n/**\n * Subscribe to the toast queue and dispatch new toasts.\n *\n * @example\n * const toast = useToast();\n * toast.push({ variant: 'success', title: 'Saved' });\n *\n * // With an action\n * toast.push({\n * title: 'Project archived',\n * action: { label: 'Undo', altText: 'Undo archive', onClick: undo },\n * });\n */\nexport function useToast() {\n const [toasts, setToasts] = useState<InternalToast[]>(() => [...store.toasts]);\n\n useEffect(() => {\n const listener: Listener = (next) => setToasts([...next]);\n store.listeners.add(listener);\n return () => {\n store.listeners.delete(listener);\n };\n }, []);\n\n const push = useCallback((t: ToastDescriptor) => store.push(t), []);\n const dismiss = useCallback((id: string) => store.dismiss(id), []);\n const remove = useCallback((id: string) => store.remove(id), []);\n\n return { toasts, push, dismiss, remove };\n}\n\n/** Convenience export — dispatch a toast outside React (e.g. from an API client). */\nexport const toast = (t: ToastDescriptor) => store.push(t);\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { ChevronDown } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/**\n * Accessible disclosure list. Supports single (`type=\"single\"`) and multiple\n * (`type=\"multiple\"`) open behaviour — both come from Radix.\n *\n * @example FAQ\n * <Accordion type=\"single\" collapsible>\n * <AccordionItem value=\"q1\">\n * <AccordionTrigger>Can I cancel anytime?</AccordionTrigger>\n * <AccordionContent>Yes — usage stops at the end of the billing period.</AccordionContent>\n * </AccordionItem>\n * …\n * </Accordion>\n *\n * @do Use for FAQs, settings groups, and progressive-disclosure forms.\n * @dont Nest accordions inside accordions — the focus order becomes opaque.\n */\nexport const Accordion = AccordionPrimitive.Root;\n\nexport const AccordionItem = forwardRef<\n ElementRef<typeof AccordionPrimitive.Item>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(function AccordionItem({ className, ...props }, ref) {\n return (\n <AccordionPrimitive.Item ref={ref} className={cn('border-b border-border', className)} {...props} />\n );\n});\nAccordionItem.displayName = 'AccordionItem';\n\nexport const AccordionTrigger = forwardRef<\n ElementRef<typeof AccordionPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(function AccordionTrigger({ className, children, ...props }, ref) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex flex-1 items-center justify-between gap-2 py-4 text-left text-sm font-medium text-foreground',\n 'outline-none transition-colors duration-[var(--duration-fast)]',\n 'hover:text-accent',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n '[&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDown\n className=\"size-4 shrink-0 text-foreground-subtle transition-transform duration-[var(--duration-base)]\"\n aria-hidden\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n});\nAccordionTrigger.displayName = 'AccordionTrigger';\n\nexport const AccordionContent = forwardRef<\n ElementRef<typeof AccordionPrimitive.Content>,\n ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(function AccordionContent({ className, children, ...props }, ref) {\n return (\n <AccordionPrimitive.Content\n ref={ref}\n className={cn(\n 'overflow-hidden text-sm text-foreground-muted',\n 'data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down',\n )}\n {...props}\n >\n <div className={cn('pb-4 pt-0', className)}>{children}</div>\n </AccordionPrimitive.Content>\n );\n});\nAccordionContent.displayName = 'AccordionContent';\n","import { forwardRef, useState, type HTMLAttributes, type ReactNode } from 'react';\nimport { AlertTriangle, CheckCircle2, Info, X, XCircle } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst alert = cva(\n ['relative flex w-full gap-3 rounded-lg border p-4', 'text-sm'],\n {\n variants: {\n variant: {\n default: 'border-border bg-background-subtle text-foreground',\n info: 'border-info-border-soft bg-info-soft text-info-text',\n success: 'border-success-border-soft bg-success-soft text-success-text',\n warning: 'border-warning-border-soft bg-warning-soft text-warning-text',\n danger: 'border-danger-border-soft bg-danger-soft text-danger-text',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nconst iconForVariant = {\n default: null,\n info: <Info className=\"size-4 shrink-0 mt-0.5\" aria-hidden />,\n success: <CheckCircle2 className=\"size-4 shrink-0 mt-0.5\" aria-hidden />,\n warning: <AlertTriangle className=\"size-4 shrink-0 mt-0.5\" aria-hidden />,\n danger: <XCircle className=\"size-4 shrink-0 mt-0.5\" aria-hidden />,\n};\n\nexport interface AlertProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof alert> {\n /** Heading. Renders bold above the description. */\n title?: ReactNode;\n /** Show a dismiss (×) button. */\n dismissible?: boolean;\n /** Called when the user dismisses. */\n onDismiss?: () => void;\n /** Override the variant's default icon. Pass `false` to suppress the icon. */\n icon?: ReactNode | false;\n}\n\n/**\n * Inline banner for static page-level or section-level state. For transient\n * notifications use `Toast` instead.\n *\n * @example Inline error\n * <Alert variant=\"danger\" title=\"Payment failed\">\n * Your card was declined. Update your billing info to retry.\n * </Alert>\n *\n * @example Dismissible info\n * <Alert variant=\"info\" dismissible onDismiss={dismiss}>\n * We're improving search — give us feedback at #search-feedback.\n * </Alert>\n *\n * @do Use the closest semantic variant — `info` for neutral facts,\n * `warning` for \"watch out\", `danger` for \"this is broken\".\n * @dont Use Alert for one-time confirmations — that's Toast.\n */\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n { className, variant = 'default', title, dismissible, onDismiss, icon, children, ...props },\n ref,\n) {\n const [open, setOpen] = useState(true);\n if (!open) return null;\n\n const handleDismiss = () => {\n setOpen(false);\n onDismiss?.();\n };\n\n const renderedIcon = icon === false ? null : icon ?? iconForVariant[variant ?? 'default'];\n\n return (\n <div ref={ref} role=\"alert\" className={cn(alert({ variant }), className)} {...props}>\n {renderedIcon}\n <div className=\"flex-1 min-w-0\">\n {title && <h5 className=\"font-medium leading-tight mb-1\">{title}</h5>}\n <div className=\"text-sm leading-relaxed [&_p]:leading-relaxed\">{children}</div>\n </div>\n {dismissible && (\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={handleDismiss}\n className={cn(\n 'inline-flex size-6 shrink-0 items-center justify-center rounded-md',\n 'hover:bg-current/10 outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n )}\n >\n <X className=\"size-3.5\" aria-hidden />\n </button>\n )}\n </div>\n );\n});\nAlert.displayName = 'Alert';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as AvatarPrimitive from '@radix-ui/react-avatar';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst sizeMap = {\n xs: 'size-5 text-[10px]',\n sm: 'size-6 text-xs',\n md: 'size-8 text-xs',\n lg: 'size-10 text-sm',\n xl: 'size-12 text-base',\n} as const;\n\n// The wrapper sets size — Root sits inside and clips image/fallback only.\nconst avatarWrapper = cva('relative inline-flex shrink-0', {\n variants: { size: sizeMap },\n defaultVariants: { size: 'md' },\n});\n\nexport interface AvatarProps\n extends ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>,\n VariantProps<typeof avatarWrapper> {\n /** Image URL. If absent or fails to load, fallback initials are shown. */\n src?: string;\n /** Alt text for the image; falls back to fallback when there's no `src`. */\n alt?: string;\n /** Initials shown when image is missing or loading. Pass at most 2 characters. */\n fallback?: string;\n /** Status dot rendered on the bottom-right. */\n status?: 'online' | 'busy' | 'away' | 'offline';\n}\n\nconst statusColour: Record<NonNullable<AvatarProps['status']>, string> = {\n online: 'bg-success',\n busy: 'bg-danger',\n away: 'bg-warning',\n offline: 'bg-foreground-subtle',\n};\n\n/**\n * Avatar with image, initials fallback, and optional status dot.\n *\n * @example\n * <Avatar src={user.photo} alt={user.name} fallback={getInitials(user.name)} status=\"online\" />\n *\n * @example AvatarGroup\n * <AvatarGroup max={3}>\n * {users.map(u => <Avatar key={u.id} src={u.photo} fallback={getInitials(u.name)} />)}\n * </AvatarGroup>\n *\n * @do Provide `alt` for image avatars and meaningful initials for the\n * fallback so screen readers announce something useful.\n * @dont Use the status dot without a tooltip explaining what it means.\n */\nexport const Avatar = forwardRef<ElementRef<typeof AvatarPrimitive.Root>, AvatarProps>(\n function Avatar({ className, size, src, alt, fallback, status, ...props }, ref) {\n return (\n <span className={avatarWrapper({ size })}>\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n 'block size-full overflow-hidden rounded-full bg-background-muted text-foreground-muted',\n className,\n )}\n {...props}\n >\n {src && (\n <AvatarPrimitive.Image\n src={src}\n alt={alt ?? ''}\n className=\"aspect-square size-full object-cover\"\n />\n )}\n <AvatarPrimitive.Fallback\n delayMs={src ? 200 : 0}\n className=\"flex size-full items-center justify-center bg-background-muted font-medium uppercase\"\n >\n {fallback ?? '?'}\n </AvatarPrimitive.Fallback>\n </AvatarPrimitive.Root>\n {status && (\n <span\n aria-label={`Status: ${status}`}\n className={cn(\n 'absolute bottom-0 right-0 block size-[28%] rounded-full ring-2 ring-background',\n statusColour[status],\n )}\n />\n )}\n </span>\n );\n },\n);\nAvatar.displayName = 'Avatar';\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Maximum visible avatars before showing a \"+N\" overflow chip. */\n max?: number;\n /** Avatar size applied to children + overflow. */\n size?: keyof typeof sizeMap;\n /** Children — Avatars. */\n children: ReactNode;\n}\n\n/**\n * Overlapping avatars with overflow indicator. Pass plain `<Avatar>` children.\n */\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(function AvatarGroup(\n { max = 4, size = 'md', className, children, ...props },\n ref,\n) {\n const items = Array.isArray(children) ? children : [children];\n const visible = items.slice(0, max);\n const overflow = items.length - visible.length;\n\n return (\n <div ref={ref} className={cn('flex items-center -space-x-2', className)} {...props}>\n {visible.map((child, i) => (\n <div key={i} className=\"ring-2 ring-background rounded-full\">\n {child}\n </div>\n ))}\n {overflow > 0 && (\n <div\n className={cn(\n 'inline-flex items-center justify-center rounded-full bg-background-muted text-foreground-muted ring-2 ring-background',\n sizeMap[size],\n 'font-medium',\n )}\n aria-label={`${overflow} more`}\n >\n +{overflow}\n </div>\n )}\n </div>\n );\n});\nAvatarGroup.displayName = 'AvatarGroup';\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst badge = cva(\n [\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5',\n 'text-xs font-medium whitespace-nowrap',\n ],\n {\n variants: {\n variant: {\n subtle: '',\n outline: 'border bg-transparent',\n },\n tone: {\n neutral: '',\n accent: '',\n success: '',\n warning: '',\n danger: '',\n info: '',\n },\n },\n compoundVariants: [\n // Subtle — coloured fill + matching text.\n { variant: 'subtle', tone: 'neutral', class: 'bg-background-muted text-foreground-muted' },\n { variant: 'subtle', tone: 'accent', class: 'bg-accent-soft text-on-accent-soft' },\n { variant: 'subtle', tone: 'success', class: 'bg-success-soft text-success-text' },\n { variant: 'subtle', tone: 'warning', class: 'bg-warning-soft text-warning-text' },\n { variant: 'subtle', tone: 'danger', class: 'bg-danger-soft text-danger-text' },\n { variant: 'subtle', tone: 'info', class: 'bg-info-soft text-info-text' },\n // Outline — coloured border + text, transparent fill.\n { variant: 'outline', tone: 'neutral', class: 'border-border text-foreground-muted' },\n { variant: 'outline', tone: 'accent', class: 'border-accent text-accent' },\n { variant: 'outline', tone: 'success', class: 'border-success-border-soft text-success-text' },\n { variant: 'outline', tone: 'warning', class: 'border-warning-border-soft text-warning-text' },\n { variant: 'outline', tone: 'danger', class: 'border-danger-border-soft text-danger-text' },\n { variant: 'outline', tone: 'info', class: 'border-info-border-soft text-info-text' },\n ],\n defaultVariants: { variant: 'subtle', tone: 'neutral' },\n },\n);\n\nexport interface BadgeProps\n extends HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badge> {\n /** Show a leading status dot in the same tone. */\n dot?: boolean;\n}\n\nconst dotColour = {\n neutral: 'bg-foreground-subtle',\n accent: 'bg-accent',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n info: 'bg-info',\n} as const;\n\n/**\n * Status pill. Use `subtle` for high-volume contexts (table cells, lists);\n * `outline` when the badge sits on a busy or coloured background.\n *\n * @example\n * <Badge tone=\"success\" dot>Active</Badge>\n * <Badge tone=\"danger\" variant=\"outline\">Failed</Badge>\n *\n * @do Use badges to summarise state, not to label categories — for taxonomies\n * pick a tone palette and stick with it.\n * @dont Use a badge as a button. Wrap it in a Button or use a Toggle.\n */\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { className, variant, tone = 'neutral', dot, children, ...props },\n ref,\n) {\n return (\n <span ref={ref} className={cn(badge({ variant, tone }), className)} {...props}>\n {dot && (\n <span\n aria-hidden\n className={cn('inline-block size-1.5 rounded-full', dotColour[tone ?? 'neutral'])}\n />\n )}\n {children}\n </span>\n );\n});\nBadge.displayName = 'Badge';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { ChevronRight, MoreHorizontal } from '@/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface BreadcrumbItem {\n /** Visible label. */\n label: ReactNode;\n /** Optional URL. Last item is treated as current page even if href is set. */\n href?: string;\n}\n\nexport interface BreadcrumbsProps extends HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n /** Collapse to first + ellipsis + last `n` when items.length exceeds this. */\n maxItems?: number;\n /** Custom link renderer (for next/link, react-router, etc.). */\n renderLink?: (href: string, children: ReactNode) => ReactNode;\n}\n\n/**\n * Breadcrumb trail. Collapses with an ellipsis when there are too many crumbs.\n *\n * @example\n * <Breadcrumbs items={[\n * { label: 'Projects', href: '/projects' },\n * { label: 'Nova', href: '/projects/nova' },\n * { label: 'Settings' },\n * ]} />\n *\n * @example With react-router\n * <Breadcrumbs items={trail} renderLink={(href, c) => <Link to={href}>{c}</Link>} />\n *\n * @do Always omit `href` on the last item — it represents the current page.\n * @dont Use Breadcrumbs for flat navigation. Use TopNav links instead.\n */\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(function Breadcrumbs(\n { items, maxItems = 4, renderLink, className, ...props },\n ref,\n) {\n const shouldCollapse = items.length > maxItems;\n const displayItems =\n !shouldCollapse\n ? items\n : [items[0], { collapsed: true } as const, ...items.slice(-2)];\n\n return (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={cn('text-sm', className)} {...props}>\n <ol className=\"flex flex-wrap items-center gap-1.5 text-foreground-subtle\">\n {displayItems.map((it, i) => {\n const isLast = i === displayItems.length - 1;\n if ('collapsed' in it) {\n return (\n <li key={`ellipsis-${i}`} className=\"flex items-center gap-1.5\">\n <MoreHorizontal className=\"size-4\" aria-hidden />\n <ChevronRight className=\"size-3.5\" aria-hidden />\n </li>\n );\n }\n const item = it as BreadcrumbItem;\n const labelNode = isLast ? (\n <span aria-current=\"page\" className=\"font-medium text-foreground\">\n {item.label}\n </span>\n ) : item.href ? (\n renderLink ? (\n renderLink(item.href, item.label)\n ) : (\n <a\n href={item.href}\n className=\"hover:text-foreground transition-colors duration-[var(--duration-fast)] outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-sm\"\n >\n {item.label}\n </a>\n )\n ) : (\n <span>{item.label}</span>\n );\n return (\n <li key={i} className=\"flex items-center gap-1.5\">\n {labelNode}\n {!isLast && <ChevronRight className=\"size-3.5\" aria-hidden />}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n});\nBreadcrumbs.displayName = 'Breadcrumbs';\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { Loader2 } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\n/* -----------------------------------------------------------------------------\n * Variants — the entire visual surface of the Button.\n *\n * All sizes share the same border radius (md = 6px) per the refined-minimal\n * rules. Focus state is the standardised 2px-ring + 2px-offset on every\n * variant, including `link`.\n * --------------------------------------------------------------------------- */\nconst button = cva(\n [\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap',\n 'rounded-md text-sm font-medium',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'focus-visible:ring-offset-background',\n 'disabled:pointer-events-none disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n primary: [\n 'bg-accent text-on-accent',\n 'hover:bg-accent-700',\n 'active:bg-accent-800',\n ],\n secondary: [\n 'bg-background-muted text-foreground border border-border',\n 'hover:bg-neutral-200 dark:hover:bg-neutral-800',\n 'active:bg-neutral-300 dark:active:bg-neutral-700',\n ],\n outline: [\n 'border border-border bg-transparent text-foreground',\n 'hover:bg-background-muted',\n 'active:bg-background-subtle',\n ],\n ghost: [\n 'bg-transparent text-foreground',\n 'hover:bg-background-muted',\n 'active:bg-background-subtle',\n ],\n destructive: [\n 'bg-danger text-on-danger',\n 'hover:bg-danger-700',\n 'active:bg-danger-800',\n ],\n link: [\n 'bg-transparent text-accent underline-offset-4 px-0',\n 'hover:underline',\n 'active:text-accent-700',\n ],\n },\n size: {\n sm: 'h-8 px-3 text-xs [&_svg]:size-4',\n md: 'h-9 px-3.5 text-sm [&_svg]:size-4',\n lg: 'h-10 px-4 text-sm [&_svg]:size-5',\n icon: 'h-9 w-9 [&_svg]:size-4',\n },\n },\n compoundVariants: [\n // The `link` variant ignores horizontal padding from the size variant.\n { variant: 'link', size: 'sm', class: 'h-auto px-0' },\n { variant: 'link', size: 'md', class: 'h-auto px-0' },\n { variant: 'link', size: 'lg', class: 'h-auto px-0' },\n ],\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n },\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof button> {\n /**\n * Render as a different element via Radix Slot. Useful when wrapping a\n * link: `<Button asChild><a href=\"…\">…</a></Button>`.\n * @default false\n */\n asChild?: boolean;\n /**\n * Show a spinner in place of the leading icon and disable the button.\n * Use for async actions where the user must wait.\n * @default false\n */\n loading?: boolean;\n /** Icon rendered before the label. Replaced by a spinner when loading. */\n leadingIcon?: ReactNode;\n /** Icon rendered after the label. Hidden while loading. */\n trailingIcon?: ReactNode;\n}\n\n/**\n * Primary interactive element. Variants:\n *\n * - `primary` — accent fill, the single most prominent action on a screen.\n * - `secondary` — neutral fill, sits next to a primary or stands alone for\n * secondary actions.\n * - `outline` — border only, transparent fill. Use when next to a primary.\n * - `ghost` — no border, hover background. Use in dense toolbars and tables.\n * - `destructive` — danger fill, reserved for irreversible actions.\n * - `link` — text styled as a link.\n *\n * @example Two-button row\n * <div className=\"flex gap-2 justify-end\">\n * <Button variant=\"outline\">Cancel</Button>\n * <Button>Save changes</Button>\n * </div>\n *\n * @example Loading state\n * <Button loading leadingIcon={<Mail />}>Sending…</Button>\n *\n * @do Use one primary button per major surface. Verb-first labels.\n * @dont Stack three primary buttons in a row — only the most important\n * action gets the primary variant.\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n className,\n variant,\n size,\n asChild = false,\n loading = false,\n leadingIcon,\n trailingIcon,\n disabled,\n children,\n type = 'button',\n ...props\n },\n ref,\n) {\n const isDisabled = disabled || loading;\n const classes = cn(button({ variant, size }), className);\n\n if (asChild) {\n // Slot requires exactly one element child — pass the consumer's element\n // through untouched. The consumer is responsible for any leading/trailing\n // icons inside that element.\n return (\n <Slot\n ref={ref}\n aria-busy={loading || undefined}\n data-loading={loading || undefined}\n className={classes}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type={type}\n aria-busy={loading || undefined}\n disabled={isDisabled}\n data-loading={loading || undefined}\n className={classes}\n {...props}\n >\n {loading ? (\n <Loader2 className=\"animate-spin\" aria-hidden=\"true\" />\n ) : (\n leadingIcon\n )}\n {children}\n {!loading && trailingIcon}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst card = cva(\n [\n 'rounded-lg border bg-card text-card-foreground',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n ],\n {\n variants: {\n variant: {\n default: 'border-border',\n interactive:\n 'border-border hover:border-border-strong hover:bg-background-subtle cursor-pointer',\n },\n padding: {\n none: '',\n sm: 'p-4',\n md: 'p-5',\n lg: 'p-6',\n },\n },\n defaultVariants: {\n variant: 'default',\n padding: 'md',\n },\n },\n);\n\nexport interface CardProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof card> {}\n\n/**\n * Bounded surface used to group related content. Per the refined-minimal\n * rules, cards on the page have a hairline border and no shadow.\n *\n * @example Header + content + footer\n * <Card>\n * <CardHeader>\n * <CardTitle>Storage</CardTitle>\n * <CardDescription>Usage across all projects.</CardDescription>\n * </CardHeader>\n * <CardContent>…</CardContent>\n * <CardFooter><Button>Upgrade</Button></CardFooter>\n * </Card>\n *\n * @example Clickable list row\n * <Card variant=\"interactive\" onClick={open}>…</Card>\n *\n * @do Use the `border` style. If a card needs to \"float\" (modal, dropdown),\n * it isn't a Card — it's a Popover/Dialog.\n * @dont Add `shadow-lg` to Cards. Shadows on inline surfaces violate the\n * refined-minimal direction.\n */\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { className, variant, padding, ...props },\n ref,\n) {\n return <div ref={ref} className={cn(card({ variant, padding }), className)} {...props} />;\n});\nCard.displayName = 'Card';\n\nexport const CardHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CardHeader({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col gap-1 pb-4', className)}\n {...props}\n />\n );\n },\n);\nCardHeader.displayName = 'CardHeader';\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement>>(\n function CardTitle({ className, ...props }, ref) {\n return (\n <h3\n ref={ref}\n className={cn('text-base font-semibold text-foreground leading-tight', className)}\n {...props}\n />\n );\n },\n);\nCardTitle.displayName = 'CardTitle';\n\nexport const CardDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(function CardDescription({ className, ...props }, ref) {\n return (\n <p\n ref={ref}\n className={cn('text-sm text-foreground-muted', className)}\n {...props}\n />\n );\n});\nCardDescription.displayName = 'CardDescription';\n\nexport const CardContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CardContent({ className, ...props }, ref) {\n return <div ref={ref} className={cn('text-sm text-foreground', className)} {...props} />;\n },\n);\nCardContent.displayName = 'CardContent';\n\nexport const CardFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn('flex items-center gap-2 pt-4', className)}\n {...props}\n />\n );\n },\n);\nCardFooter.displayName = 'CardFooter';\n","import { forwardRef, useId, type ComponentPropsWithoutRef, type ElementRef, type ReactNode } from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { Check, Minus } from '@/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface CheckboxProps\n extends Omit<ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>, 'asChild'> {\n /** Visible label rendered to the right of the box. */\n label?: ReactNode;\n /** Secondary description rendered below the label. */\n description?: ReactNode;\n /** Validation error message. */\n error?: ReactNode;\n /** Hide the label visually while keeping it in the a11y tree. */\n hideLabel?: boolean;\n}\n\n/**\n * Checkbox with optional inline label + description. Pass `checked=\"indeterminate\"`\n * for the indeterminate state — Radix renders a `Minus` icon automatically.\n *\n * @example Single\n * <Checkbox label=\"I agree to the terms\" checked={ok} onCheckedChange={setOk} />\n *\n * @example Tri-state header\n * <Checkbox aria-label=\"Select all\"\n * checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n * onCheckedChange={toggleAll} />\n *\n * @do Use indeterminate to summarise child rows in a table header.\n * @dont Use a Checkbox for mutually exclusive choices — use RadioGroup.\n */\nexport const Checkbox = forwardRef<ElementRef<typeof CheckboxPrimitive.Root>, CheckboxProps>(\n function Checkbox({ className, label, description, error, hideLabel, id, disabled, ...props }, ref) {\n const autoId = useId();\n const fieldId = id ?? autoId;\n const descId = description ? `${fieldId}-desc` : undefined;\n const errorId = error ? `${fieldId}-error` : undefined;\n\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <div className=\"flex items-start gap-2.5\">\n <CheckboxPrimitive.Root\n ref={ref}\n id={fieldId}\n disabled={disabled}\n aria-describedby={errorId ?? descId}\n aria-invalid={Boolean(error) || undefined}\n className={cn(\n 'peer mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-sm border',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'data-[state=checked]:bg-accent data-[state=checked]:border-accent data-[state=checked]:text-on-accent',\n 'data-[state=indeterminate]:bg-accent data-[state=indeterminate]:border-accent data-[state=indeterminate]:text-on-accent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n error ? 'border-danger' : 'border-border-strong',\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center\">\n {props.checked === 'indeterminate' ? (\n <Minus className=\"size-3\" aria-hidden strokeWidth={3} />\n ) : (\n <Check className=\"size-3\" aria-hidden strokeWidth={3} />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n\n {label && (\n <div className={cn('flex flex-col gap-0.5', hideLabel && 'sr-only')}>\n <label\n htmlFor={fieldId}\n className={cn(\n 'text-sm text-foreground select-none',\n disabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n {label}\n </label>\n {description && (\n <p id={descId} className=\"text-xs text-foreground-subtle\">\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n )}\n </div>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { Check, ChevronsUpDown, Loader2, X } from '@/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxProps {\n /** Currently selected value (controlled). */\n value: string | null;\n /** Called when a value is picked or cleared. */\n onChange: (value: string | null) => void;\n /** Static options. Ignored if `loadOptions` is provided. */\n options?: ComboboxOption[];\n /**\n * Async loader called with the current query each time it changes.\n * Use for server-side search.\n */\n loadOptions?: (query: string) => Promise<ComboboxOption[]>;\n /** Visible label above the field. */\n label?: ReactNode;\n /** Hint below the field. Hidden when `error` is set. */\n helperText?: ReactNode;\n /** Validation error. */\n error?: ReactNode;\n /** Placeholder shown when no value is selected. */\n placeholder?: string;\n /** Search placeholder inside the popover. */\n searchPlaceholder?: string;\n /** Empty state copy when nothing matches. */\n emptyText?: string;\n /** Allow clearing the selection with an inline ×. */\n clearable?: boolean;\n /** Disable the entire field. */\n disabled?: boolean;\n /** Field size, matches Input. */\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/**\n * Single-select with typeahead. Use `options` for client-side filtering or\n * `loadOptions` for server-side search.\n *\n * @example Client-side\n * <Combobox label=\"Country\" options={countries} value={c} onChange={setC} />\n *\n * @example Server-side\n * <Combobox label=\"Assignee\"\n * value={user}\n * onChange={setUser}\n * loadOptions={async (q) => api.searchUsers(q)} />\n *\n * @do Use Combobox over Select for >12 options or when the user is expected\n * to know what they want.\n * @dont Re-query on every keystroke without debouncing — pass a debounced\n * `loadOptions` to avoid hammering the server.\n */\nexport const Combobox = forwardRef<HTMLDivElement, ComboboxProps>(function Combobox(\n {\n value,\n onChange,\n options,\n loadOptions,\n label,\n helperText,\n error,\n placeholder = 'Select…',\n searchPlaceholder = 'Search…',\n emptyText = 'No results.',\n clearable = true,\n disabled,\n size = 'md',\n className,\n },\n ref,\n) {\n const autoId = useId();\n const helperId = `${autoId}-helper`;\n const errorId = `${autoId}-error`;\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [loaded, setLoaded] = useState<ComboboxOption[]>([]);\n const [loading, setLoading] = useState(false);\n\n // Resolve options: static or async-loaded.\n const items = loadOptions ? loaded : options ?? [];\n\n useEffect(() => {\n if (!loadOptions || !open) return;\n let cancelled = false;\n setLoading(true);\n loadOptions(query)\n .then((res) => {\n if (!cancelled) setLoaded(res);\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [query, open, loadOptions]);\n\n const selected = useMemo(\n () => items.find((o) => o.value === value) ?? null,\n [items, value],\n );\n\n const triggerHeight = size === 'sm' ? 'h-8' : size === 'lg' ? 'h-10' : 'h-9';\n const triggerPadding = size === 'sm' ? 'px-2.5' : size === 'lg' ? 'px-3.5' : 'px-3';\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(null);\n },\n [onChange],\n );\n\n const isError = Boolean(error);\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5', className)}>\n {label && (\n <label htmlFor={autoId} className=\"text-sm font-medium text-foreground\">\n {label}\n </label>\n )}\n\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n id={autoId}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-invalid={isError || undefined}\n aria-describedby={isError ? errorId : helperText ? helperId : undefined}\n disabled={disabled}\n className={cn(\n 'inline-flex w-full items-center justify-between gap-2 rounded-md border bg-card text-sm text-foreground',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n triggerHeight,\n triggerPadding,\n isError\n ? 'border-danger focus-visible:border-danger focus-visible:ring-danger'\n : 'border-border focus-visible:border-accent focus-visible:ring-ring',\n )}\n >\n <span className={cn('truncate', !selected && 'text-foreground-subtle')}>\n {selected ? selected.label : placeholder}\n </span>\n <span className=\"ml-2 flex items-center gap-1 shrink-0\">\n {clearable && selected && !disabled && (\n <span\n role=\"button\"\n tabIndex={-1}\n onClick={handleClear}\n aria-label=\"Clear selection\"\n className=\"text-foreground-subtle hover:text-foreground\"\n >\n <X className=\"size-4\" aria-hidden />\n </span>\n )}\n <ChevronsUpDown className=\"size-4 text-foreground-subtle\" aria-hidden />\n </span>\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className={cn(\n 'z-[var(--z-popover)] w-[var(--radix-popover-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n )}\n >\n <CommandPrimitive shouldFilter={!loadOptions} className=\"flex h-full w-full flex-col\">\n <div className=\"flex items-center border-b border-border px-3\">\n <CommandPrimitive.Input\n value={query}\n onValueChange={setQuery}\n placeholder={searchPlaceholder}\n className=\"flex h-9 w-full bg-transparent py-2 text-sm outline-none placeholder:text-foreground-subtle\"\n />\n {loading && (\n <Loader2 className=\"size-4 animate-spin text-foreground-subtle\" aria-hidden />\n )}\n </div>\n <CommandPrimitive.List className=\"max-h-64 overflow-y-auto p-1\">\n {items.map((opt) => {\n const isSelected = opt.value === value;\n return (\n <CommandPrimitive.Item\n key={opt.value}\n value={opt.value}\n disabled={opt.disabled}\n onSelect={(v) => {\n onChange(v);\n setOpen(false);\n }}\n className={cn(\n 'flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground',\n 'data-[selected=true]:bg-background-muted',\n 'data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none',\n )}\n >\n <span className=\"flex-1\">{opt.label}</span>\n {opt.description && (\n <span className=\"text-xs text-foreground-subtle\">{opt.description}</span>\n )}\n {isSelected && <Check className=\"size-4 text-accent\" aria-hidden />}\n </CommandPrimitive.Item>\n );\n })}\n {!loading && items.length === 0 && (\n <CommandPrimitive.Empty className=\"px-2 py-6 text-center text-sm text-foreground-subtle\">\n {emptyText}\n </CommandPrimitive.Empty>\n )}\n </CommandPrimitive.List>\n </CommandPrimitive>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-foreground-subtle\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n\nCombobox.displayName = 'Combobox';\n","import {\n forwardRef,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { Search } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * CommandPalette is a Dialog hosting a `cmdk` Command. It supports grouped\n * items, keyboard navigation (handled by cmdk), an empty state, and a\n * pluggable list of \"recent\" items shown when the search input is empty.\n * --------------------------------------------------------------------------- */\n\nexport const Command = forwardRef<\n ElementRef<typeof CommandPrimitive>,\n ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(function Command({ className, ...props }, ref) {\n return (\n <CommandPrimitive\n ref={ref}\n className={cn(\n 'flex h-full w-full flex-col overflow-hidden rounded-lg bg-popover text-popover-foreground',\n className,\n )}\n {...props}\n />\n );\n});\nCommand.displayName = 'Command';\n\nexport const CommandInput = forwardRef<\n ElementRef<typeof CommandPrimitive.Input>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(function CommandInput({ className, ...props }, ref) {\n return (\n <div className=\"flex items-center gap-2 border-b border-border px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"size-4 shrink-0 text-foreground-subtle\" aria-hidden />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n 'flex h-11 w-full bg-transparent py-3 text-sm outline-none',\n 'placeholder:text-foreground-subtle disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n );\n});\nCommandInput.displayName = 'CommandInput';\n\nexport const CommandList = forwardRef<\n ElementRef<typeof CommandPrimitive.List>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(function CommandList({ className, ...props }, ref) {\n return (\n <CommandPrimitive.List\n ref={ref}\n className={cn('max-h-[320px] overflow-y-auto p-1', className)}\n {...props}\n />\n );\n});\nCommandList.displayName = 'CommandList';\n\nexport const CommandEmpty = forwardRef<\n ElementRef<typeof CommandPrimitive.Empty>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(function CommandEmpty(props, ref) {\n return (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"py-8 text-center text-sm text-foreground-subtle\"\n {...props}\n />\n );\n});\nCommandEmpty.displayName = 'CommandEmpty';\n\nexport const CommandGroup = forwardRef<\n ElementRef<typeof CommandPrimitive.Group>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(function CommandGroup({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n 'overflow-hidden text-foreground p-1',\n '[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5',\n '[&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n '[&_[cmdk-group-heading]]:text-foreground-subtle',\n className,\n )}\n {...props}\n />\n );\n});\nCommandGroup.displayName = 'CommandGroup';\n\nexport const CommandSeparator = forwardRef<\n ElementRef<typeof CommandPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(function CommandSeparator({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n );\n});\nCommandSeparator.displayName = 'CommandSeparator';\n\nexport const CommandItem = forwardRef<\n ElementRef<typeof CommandPrimitive.Item>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(function CommandItem({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none',\n 'data-[selected=true]:bg-background-muted data-[selected=true]:text-foreground',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n '[&_svg]:size-4 [&_svg]:text-foreground-subtle',\n className,\n )}\n {...props}\n />\n );\n});\nCommandItem.displayName = 'CommandItem';\n\nexport function CommandShortcut({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <span\n className={cn(\n 'ml-auto inline-flex items-center gap-0.5 text-xs tracking-widest text-foreground-subtle font-mono',\n className,\n )}\n >\n {children}\n </span>\n );\n}\n\n/* -----------------------------------------------------------------------------\n * Dialog wrapper — a ready-to-use ⌘K palette.\n * --------------------------------------------------------------------------- */\n\nexport interface CommandDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n /** Visible label for screen readers. */\n title?: string;\n}\n\nexport function CommandDialog({ open, onOpenChange, children, title = 'Command palette' }: CommandDialogProps) {\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-[var(--z-overlay)] bg-neutral-950/60 backdrop-blur-[2px]',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n )}\n />\n <DialogPrimitive.Content\n className={cn(\n 'fixed left-1/2 top-[20%] z-[var(--z-modal)] -translate-x-1/2',\n 'w-[calc(100%-2rem)] max-w-[640px] overflow-hidden',\n 'rounded-lg border border-border bg-popover text-popover-foreground shadow-lg',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n 'data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95',\n )}\n >\n <DialogPrimitive.Title className=\"sr-only\">{title}</DialogPrimitive.Title>\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n\n/**\n * Hook that wires ⌘K / Ctrl+K to a setter — the canonical way to mount the\n * palette in an app shell.\n *\n * @example\n * const [open, setOpen] = useState(false);\n * useCommandPaletteShortcut(setOpen);\n * …\n * <CommandDialog open={open} onOpenChange={setOpen}>\n * <CommandInput placeholder=\"Type a command…\" />\n * <CommandList>\n * <CommandEmpty>No results.</CommandEmpty>\n * <CommandGroup heading=\"Suggestions\">\n * <CommandItem>Create project</CommandItem>\n * <CommandItem>Invite teammate</CommandItem>\n * </CommandGroup>\n * </CommandList>\n * </CommandDialog>\n *\n * @do Group items by category. Show \"Recent\" first when the query is empty.\n * @dont Hide essential actions behind the palette only — keep at least one\n * button entry in the UI.\n */\nexport function useCommandPaletteShortcut(setOpen: (open: boolean) => void): void {\n const [_, force] = useState(0);\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setOpen(true);\n force((n) => n + 1);\n }\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [setOpen]);\n}\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport * as ContextMenuPrimitive from '@radix-ui/react-context-menu';\nimport { Check, ChevronRight, Circle } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/**\n * Right-click (or two-finger tap) menu. Visual surface mirrors DropdownMenu\n * for consistency.\n *\n * @example\n * <ContextMenu>\n * <ContextMenuTrigger asChild>\n * <div className=\"grid h-32 place-items-center rounded-lg border border-border\">\n * Right-click me\n * </div>\n * </ContextMenuTrigger>\n * <ContextMenuContent>\n * <ContextMenuItem>Open</ContextMenuItem>\n * <ContextMenuSeparator />\n * <ContextMenuItem destructive>Delete</ContextMenuItem>\n * </ContextMenuContent>\n * </ContextMenu>\n *\n * @do Mirror DropdownMenu items for the same surface — users expect the same\n * operations from both.\n * @dont Hide critical actions behind right-click — they must also exist in\n * a visible button or menu.\n */\nexport const ContextMenu = ContextMenuPrimitive.Root;\nexport const ContextMenuTrigger = ContextMenuPrimitive.Trigger;\nexport const ContextMenuGroup = ContextMenuPrimitive.Group;\nexport const ContextMenuPortal = ContextMenuPrimitive.Portal;\nexport const ContextMenuSub = ContextMenuPrimitive.Sub;\nexport const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;\n\nconst itemClasses = cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none',\n 'data-[highlighted]:bg-background-muted data-[highlighted]:text-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n);\n\nexport const ContextMenuSubTrigger = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.SubTrigger>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger>\n>(function ContextMenuSubTrigger({ className, children, ...props }, ref) {\n return (\n <ContextMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(itemClasses, 'data-[state=open]:bg-background-muted', className)}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto size-4 text-foreground-subtle\" aria-hidden />\n </ContextMenuPrimitive.SubTrigger>\n );\n});\nContextMenuSubTrigger.displayName = 'ContextMenuSubTrigger';\n\nexport const ContextMenuSubContent = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.SubContent>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(function ContextMenuSubContent({ className, ...props }, ref) {\n return (\n <ContextMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-[var(--z-popover)] min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md',\n className,\n )}\n {...props}\n />\n );\n});\nContextMenuSubContent.displayName = 'ContextMenuSubContent';\n\nexport const ContextMenuContent = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(function ContextMenuContent({ className, ...props }, ref) {\n return (\n <ContextMenuPortal>\n <ContextMenuPrimitive.Content\n ref={ref}\n className={cn(\n 'z-[var(--z-popover)] min-w-[12rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n </ContextMenuPortal>\n );\n});\nContextMenuContent.displayName = 'ContextMenuContent';\n\nexport const ContextMenuItem = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & { destructive?: boolean }\n>(function ContextMenuItem({ className, destructive, ...props }, ref) {\n return (\n <ContextMenuPrimitive.Item\n ref={ref}\n className={cn(\n itemClasses,\n destructive &&\n 'text-danger-text data-[highlighted]:bg-danger-soft data-[highlighted]:text-danger-text',\n className,\n )}\n {...props}\n />\n );\n});\nContextMenuItem.displayName = 'ContextMenuItem';\n\nexport const ContextMenuCheckboxItem = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(function ContextMenuCheckboxItem({ className, children, ...props }, ref) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(itemClasses, 'pl-8', className)}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Check className=\"size-4 text-accent\" aria-hidden />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n );\n});\nContextMenuCheckboxItem.displayName = 'ContextMenuCheckboxItem';\n\nexport const ContextMenuRadioItem = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.RadioItem>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(function ContextMenuRadioItem({ className, children, ...props }, ref) {\n return (\n <ContextMenuPrimitive.RadioItem\n ref={ref}\n className={cn(itemClasses, 'pl-8', className)}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <Circle className=\"size-2 fill-accent text-accent\" aria-hidden />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n );\n});\nContextMenuRadioItem.displayName = 'ContextMenuRadioItem';\n\nexport const ContextMenuLabel = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label>\n>(function ContextMenuLabel({ className, ...props }, ref) {\n return (\n <ContextMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-xs font-medium text-foreground-subtle', className)}\n {...props}\n />\n );\n});\nContextMenuLabel.displayName = 'ContextMenuLabel';\n\nexport const ContextMenuSeparator = forwardRef<\n ElementRef<typeof ContextMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>\n>(function ContextMenuSeparator({ className, ...props }, ref) {\n return (\n <ContextMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n );\n});\nContextMenuSeparator.displayName = 'ContextMenuSeparator';\n\nexport function ContextMenuShortcut({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return (\n <span\n className={cn('ml-auto text-xs tracking-widest text-foreground-subtle font-mono', className)}\n {...props}\n />\n );\n}\nContextMenuShortcut.displayName = 'ContextMenuShortcut';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { Check, ChevronRight, Circle } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Full dropdown menu surface with submenu support, separators, checkbox /\n * radio items, and keyboard shortcut labels (Kbd).\n * --------------------------------------------------------------------------- */\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub;\nexport const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst itemClasses = cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none',\n 'data-[highlighted]:bg-background-muted data-[highlighted]:text-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n 'transition-colors duration-[var(--duration-fast)]',\n);\n\nexport const DropdownMenuSubTrigger = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(function DropdownMenuSubTrigger({ className, inset, children, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(itemClasses, 'data-[state=open]:bg-background-muted', inset && 'pl-8', className)}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto size-4 text-foreground-subtle\" aria-hidden />\n </DropdownMenuPrimitive.SubTrigger>\n );\n});\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';\n\nexport const DropdownMenuSubContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(function DropdownMenuSubContent({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-[var(--z-popover)] min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n className,\n )}\n {...props}\n />\n );\n});\nDropdownMenuSubContent.displayName = 'DropdownMenuSubContent';\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(function DropdownMenuContent({ className, sideOffset = 4, align = 'end', ...props }, ref) {\n return (\n <DropdownMenuPortal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'z-[var(--z-popover)] min-w-[12rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1',\n className,\n )}\n {...props}\n />\n </DropdownMenuPortal>\n );\n});\nDropdownMenuContent.displayName = 'DropdownMenuContent';\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n destructive?: boolean;\n }\n>(function DropdownMenuItem({ className, inset, destructive, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n itemClasses,\n inset && 'pl-8',\n destructive &&\n 'text-danger-text data-[highlighted]:bg-danger-soft data-[highlighted]:text-danger-text',\n className,\n )}\n {...props}\n />\n );\n});\nDropdownMenuItem.displayName = 'DropdownMenuItem';\n\nexport const DropdownMenuCheckboxItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(function DropdownMenuCheckboxItem({ className, children, checked, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n checked={checked}\n className={cn(itemClasses, 'pl-8', className)}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"size-4 text-accent\" aria-hidden />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n});\nDropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem';\n\nexport const DropdownMenuRadioItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(function DropdownMenuRadioItem({ className, children, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(itemClasses, 'pl-8', className)}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"size-2 fill-accent text-accent\" aria-hidden />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n});\nDropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem';\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(function DropdownMenuLabel({ className, inset, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n 'px-2 py-1.5 text-xs font-medium text-foreground-subtle',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n );\n});\nDropdownMenuLabel.displayName = 'DropdownMenuLabel';\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(function DropdownMenuSeparator({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n );\n});\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator';\n\n/**\n * Trailing right-aligned shortcut label inside a menu item. Pair with `<Kbd>`\n * inside the Kbd component file if you want stylised keys.\n */\nexport function DropdownMenuShortcut({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return (\n <span\n className={cn('ml-auto text-xs tracking-widest text-foreground-subtle font-mono', className)}\n {...props}\n />\n );\n}\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut';\n\n/**\n * @example\n * <DropdownMenu>\n * <DropdownMenuTrigger asChild><IconButton aria-label=\"More\" icon={<MoreHorizontal />} /></DropdownMenuTrigger>\n * <DropdownMenuContent>\n * <DropdownMenuItem>Open<DropdownMenuShortcut>⌘O</DropdownMenuShortcut></DropdownMenuItem>\n * <DropdownMenuItem>Rename</DropdownMenuItem>\n * <DropdownMenuSeparator />\n * <DropdownMenuItem destructive>Delete</DropdownMenuItem>\n * </DropdownMenuContent>\n * </DropdownMenu>\n *\n * @do Group destructive items at the bottom with a separator.\n * @dont Mix link navigation and action items in the same menu — split into\n * two menus or two groups with labels.\n */\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { Loader2 } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst iconButton = cva(\n [\n 'inline-flex items-center justify-center shrink-0',\n 'rounded-md',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'focus-visible:ring-offset-background',\n 'disabled:pointer-events-none disabled:opacity-50',\n '[&_svg]:pointer-events-none',\n ],\n {\n variants: {\n variant: {\n primary: 'bg-accent text-on-accent hover:bg-accent-700 active:bg-accent-800',\n secondary:\n 'bg-background-muted text-foreground border border-border hover:bg-neutral-200 dark:hover:bg-neutral-800',\n outline:\n 'border border-border bg-transparent text-foreground hover:bg-background-muted',\n ghost: 'bg-transparent text-foreground-muted hover:bg-background-muted hover:text-foreground',\n destructive: 'bg-danger text-on-danger hover:bg-danger-700 active:bg-danger-800',\n },\n size: {\n sm: 'h-7 w-7 [&_svg]:size-3.5',\n md: 'h-8 w-8 [&_svg]:size-4',\n lg: 'h-10 w-10 [&_svg]:size-5',\n },\n },\n defaultVariants: {\n variant: 'ghost',\n size: 'md',\n },\n },\n);\n\nexport interface IconButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof iconButton> {\n /**\n * Accessible label for screen readers. **Required** — an icon-only button\n * with no label is invisible to assistive tech.\n */\n 'aria-label': string;\n /** The Lucide icon to render. */\n icon: ReactNode;\n /** Show a spinner instead of the icon. */\n loading?: boolean;\n}\n\n/**\n * Square, icon-only button. Default variant is `ghost` because most\n * IconButtons sit in dense toolbars or tables. Always pass `aria-label`.\n *\n * @example Toolbar action\n * <IconButton aria-label=\"Edit row\" icon={<Edit2 />} onClick={onEdit} />\n *\n * @example Dismissible chip\n * <IconButton aria-label=\"Remove tag\" size=\"sm\" icon={<X />} />\n *\n * @do Use `ghost` for in-row actions; `outline` when next to a label-less\n * primary button you want users to consider as an alternative.\n * @dont Use IconButton when the action's meaning isn't universally\n * recognised. If users need to learn the icon, ship a Button with text.\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { className, variant, size, icon, loading, disabled, type = 'button', ...props },\n ref,\n) {\n const isDisabled = disabled || loading;\n return (\n <button\n ref={ref}\n type={type}\n aria-busy={loading || undefined}\n disabled={isDisabled}\n className={cn(iconButton({ variant, size }), className)}\n {...props}\n >\n {loading ? <Loader2 className=\"animate-spin\" aria-hidden=\"true\" /> : icon}\n </button>\n );\n});\n\nIconButton.displayName = 'IconButton';\n","import {\n forwardRef,\n useId,\n useState,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Eye, EyeOff, Search, X } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\n/* -----------------------------------------------------------------------------\n * Field-shell variants. The inner <input> is unstyled background and gets all\n * its visual treatment from this wrapper so prefix / suffix / clear slots\n * share the same border + focus state with no double rings.\n * --------------------------------------------------------------------------- */\nconst field = cva(\n [\n 'group inline-flex items-center w-full',\n 'rounded-md border bg-card text-sm',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'has-disabled:opacity-50 has-disabled:pointer-events-none',\n 'focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-offset-background',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 px-2.5 gap-1.5',\n md: 'h-9 px-3 gap-2',\n lg: 'h-10 px-3.5 gap-2',\n },\n tone: {\n default: 'border-border focus-within:border-accent focus-within:ring-ring',\n error: 'border-danger focus-within:border-danger focus-within:ring-danger',\n },\n },\n defaultVariants: {\n size: 'md',\n tone: 'default',\n },\n },\n);\n\nconst innerInput = cva([\n 'flex-1 min-w-0 bg-transparent outline-none',\n 'placeholder:text-foreground-subtle',\n 'text-foreground',\n 'disabled:cursor-not-allowed',\n]);\n\ntype InputType = 'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url';\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'>,\n VariantProps<typeof field> {\n /** Field type. `password` enables a show/hide toggle; `search` adds a clear button. */\n type?: InputType;\n /** Visible label rendered above the input. */\n label?: ReactNode;\n /** Hint below the input. Hidden while `error` is set. */\n helperText?: ReactNode;\n /** Validation message. Renders in `danger` colour and sets `aria-invalid`. */\n error?: ReactNode;\n /** Content rendered inside the field, before the input — icon or short text. */\n prefix?: ReactNode;\n /** Content rendered inside the field, after the input. */\n suffix?: ReactNode;\n /** Show an inline clear (×) button when the input has a value. */\n clearable?: boolean;\n /** Fires when the clear button is pressed. The consumer owns the state. */\n onClear?: () => void;\n /** Visually conceal the label while keeping it for screen readers. */\n hideLabel?: boolean;\n}\n\n/**\n * Text-style input with optional label, helper / error, prefix / suffix,\n * clear, and password show-hide. Wraps a single native `<input>` so it works\n * with `react-hook-form` and any controlled / uncontrolled pattern.\n *\n * @example Email with helper\n * <Input type=\"email\" label=\"Work email\" helperText=\"We never share this.\" />\n *\n * @example Password with show/hide\n * <Input type=\"password\" label=\"Password\" autoComplete=\"current-password\" />\n *\n * @example Search with clear\n * <Input type=\"search\" placeholder=\"Search…\" value={q} onChange={…}\n * clearable onClear={() => setQ('')} />\n *\n * @do Always pair an input with a visible label. If space forces hiding it,\n * use `hideLabel` so the label stays in the accessibility tree.\n * @dont Use placeholder as the only label — placeholders disappear on input\n * and fail accessibility.\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n className,\n type = 'text',\n size,\n tone,\n label,\n helperText,\n error,\n prefix,\n suffix,\n clearable,\n onClear,\n hideLabel,\n id,\n disabled,\n value,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const fieldId = id ?? autoId;\n const helperId = `${fieldId}-helper`;\n const errorId = `${fieldId}-error`;\n\n const [showPassword, setShowPassword] = useState(false);\n const effectiveType =\n type === 'password' ? (showPassword ? 'text' : 'password') : type;\n\n const isError = Boolean(error);\n const effectiveTone = isError ? 'error' : tone;\n\n // Pre-fill prefix slot for search type.\n const renderedPrefix =\n prefix ?? (type === 'search' ? <Search className=\"size-4 text-foreground-subtle\" aria-hidden /> : null);\n\n const hasValue = value !== undefined && value !== '' && value !== null;\n\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n {label && (\n <label\n htmlFor={fieldId}\n className={cn(\n 'text-sm font-medium text-foreground',\n hideLabel && 'sr-only',\n )}\n >\n {label}\n </label>\n )}\n\n <div className={cn(field({ size, tone: effectiveTone }))}>\n {renderedPrefix && (\n <span className=\"flex items-center text-foreground-subtle [&_svg]:size-4\">\n {renderedPrefix}\n </span>\n )}\n\n <input\n ref={ref}\n id={fieldId}\n type={effectiveType}\n disabled={disabled}\n value={value}\n aria-invalid={isError || undefined}\n aria-describedby={\n error ? errorId : helperText ? helperId : undefined\n }\n className={cn(innerInput())}\n {...props}\n />\n\n {clearable && hasValue && (\n <button\n type=\"button\"\n onClick={onClear}\n tabIndex={-1}\n aria-label=\"Clear input\"\n className=\"flex items-center text-foreground-subtle hover:text-foreground\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n )}\n\n {type === 'password' && (\n <button\n type=\"button\"\n onClick={() => setShowPassword((p) => !p)}\n tabIndex={-1}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n aria-pressed={showPassword}\n className=\"flex items-center text-foreground-subtle hover:text-foreground\"\n >\n {showPassword ? (\n <EyeOff className=\"size-4\" aria-hidden />\n ) : (\n <Eye className=\"size-4\" aria-hidden />\n )}\n </button>\n )}\n\n {suffix && (\n <span className=\"flex items-center text-foreground-subtle [&_svg]:size-4\">\n {suffix}\n </span>\n )}\n </div>\n\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-foreground-subtle\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n\nInput.displayName = 'Input';\n","import { forwardRef, type HTMLAttributes, type ThHTMLAttributes, type TdHTMLAttributes } from 'react';\nimport { ArrowDown, ArrowUp, ArrowUpDown } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Table primitives — minimal sugar over <table>. Pair with a sortable\n * header helper (`TableSortHeader`) when you need built-in sort visuals.\n * Empty + loading states are pure composition with the rest of the system.\n * --------------------------------------------------------------------------- */\n\nexport const Table = forwardRef<HTMLTableElement, HTMLAttributes<HTMLTableElement>>(\n function Table({ className, ...props }, ref) {\n return (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn('w-full caption-bottom text-sm border-collapse', className)}\n {...props}\n />\n </div>\n );\n },\n);\nTable.displayName = 'Table';\n\nexport const TableHeader = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableHeader({ className, ...props }, ref) {\n return (\n <thead\n ref={ref}\n className={cn(\n 'sticky top-0 z-10 bg-background-subtle text-foreground-muted',\n '[&_tr]:border-b [&_tr]:border-border',\n className,\n )}\n {...props}\n />\n );\n },\n);\nTableHeader.displayName = 'TableHeader';\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableBody({ className, ...props }, ref) {\n return (\n <tbody\n ref={ref}\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n },\n);\nTableBody.displayName = 'TableBody';\n\nexport const TableFooter = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableFooter({ className, ...props }, ref) {\n return (\n <tfoot\n ref={ref}\n className={cn('border-t border-border bg-background-subtle font-medium', className)}\n {...props}\n />\n );\n },\n);\nTableFooter.displayName = 'TableFooter';\n\nexport const TableRow = forwardRef<\n HTMLTableRowElement,\n HTMLAttributes<HTMLTableRowElement> & { selected?: boolean }\n>(function TableRow({ className, selected, ...props }, ref) {\n return (\n <tr\n ref={ref}\n data-selected={selected || undefined}\n className={cn(\n 'border-b border-border transition-colors duration-[var(--duration-fast)]',\n 'hover:bg-background-subtle',\n 'data-[selected]:bg-accent-soft data-[selected]:hover:bg-accent-soft',\n className,\n )}\n {...props}\n />\n );\n});\nTableRow.displayName = 'TableRow';\n\nexport const TableHead = forwardRef<\n HTMLTableCellElement,\n ThHTMLAttributes<HTMLTableCellElement>\n>(function TableHead({ className, ...props }, ref) {\n return (\n <th\n ref={ref}\n className={cn(\n 'h-10 px-3 text-left align-middle text-xs font-medium uppercase tracking-wide text-foreground-subtle',\n '[&:has([role=checkbox])]:w-10 [&:has([role=checkbox])]:pr-0',\n className,\n )}\n {...props}\n />\n );\n});\nTableHead.displayName = 'TableHead';\n\nexport const TableCell = forwardRef<\n HTMLTableCellElement,\n TdHTMLAttributes<HTMLTableCellElement>\n>(function TableCell({ className, ...props }, ref) {\n return (\n <td\n ref={ref}\n className={cn('px-3 py-3 align-middle text-foreground', className)}\n {...props}\n />\n );\n});\nTableCell.displayName = 'TableCell';\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, HTMLAttributes<HTMLTableCaptionElement>>(\n function TableCaption({ className, ...props }, ref) {\n return (\n <caption\n ref={ref}\n className={cn('mt-4 text-sm text-foreground-subtle', className)}\n {...props}\n />\n );\n },\n);\nTableCaption.displayName = 'TableCaption';\n\nexport interface TableSortHeaderProps extends ThHTMLAttributes<HTMLTableCellElement> {\n /** Stable column key used in `currentSort.key`. */\n sortKey: string;\n /** Currently sorted column + direction (or null). */\n currentSort: { key: string; direction: 'asc' | 'desc' } | null;\n /** Called when the user clicks the header. */\n onSortChange: (key: string, direction: 'asc' | 'desc') => void;\n}\n\n/**\n * Sortable column header. Click toggles asc → desc → asc; the icon reflects\n * the current state.\n *\n * @example\n * <TableSortHeader sortKey=\"name\" currentSort={sort} onSortChange={onSort}>\n * Name\n * </TableSortHeader>\n *\n * @do Sort by one column at a time. Multi-sort hides state from users.\n * @dont Sort silently — the icon must change so users see what changed.\n */\nexport const TableSortHeader = forwardRef<HTMLTableCellElement, TableSortHeaderProps>(\n function TableSortHeader(\n { sortKey, currentSort, onSortChange, children, className, ...props },\n ref,\n ) {\n const active = currentSort?.key === sortKey;\n const direction = active ? currentSort?.direction : undefined;\n const handle = () => {\n onSortChange(sortKey, active && direction === 'asc' ? 'desc' : 'asc');\n };\n return (\n <TableHead ref={ref} className={cn('p-0', className)} aria-sort={active ? (direction === 'asc' ? 'ascending' : 'descending') : 'none'} {...props}>\n <button\n type=\"button\"\n onClick={handle}\n className={cn(\n 'inline-flex h-10 w-full items-center gap-1.5 px-3 outline-none',\n 'transition-colors duration-[var(--duration-fast)]',\n 'hover:text-foreground focus-visible:text-foreground',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-sm',\n active && 'text-foreground',\n )}\n >\n {children}\n {direction === 'asc' ? (\n <ArrowUp className=\"size-3.5\" aria-hidden />\n ) : direction === 'desc' ? (\n <ArrowDown className=\"size-3.5\" aria-hidden />\n ) : (\n <ArrowUpDown className=\"size-3.5 opacity-40\" aria-hidden />\n )}\n </button>\n </TableHead>\n );\n },\n);\nTableSortHeader.displayName = 'TableSortHeader';\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n /** Predefined silhouette presets. */\n variant?: 'text' | 'circle' | 'card' | 'avatar';\n}\n\n/**\n * Animated placeholder. Use `Skeleton.Text` / `Skeleton.Avatar` for common\n * shapes; pass `className` directly for one-off sizes.\n *\n * @example List item\n * <div className=\"flex items-center gap-3\">\n * <Skeleton variant=\"avatar\" />\n * <div className=\"space-y-1.5 flex-1\">\n * <Skeleton variant=\"text\" className=\"w-1/3\" />\n * <Skeleton variant=\"text\" className=\"w-1/2\" />\n * </div>\n * </div>\n *\n * @example Card\n * <Skeleton variant=\"card\" className=\"h-32\" />\n *\n * @do Match the silhouette of the eventual content so the layout doesn't\n * shift when data arrives.\n * @dont Show a full-page skeleton for sub-300ms loads — use a single Spinner.\n */\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\n { className, variant, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n aria-hidden\n className={cn(\n 'animate-pulse bg-background-muted',\n variant === 'text' && 'h-3 rounded-sm',\n variant === 'circle' && 'rounded-full aspect-square',\n variant === 'avatar' && 'size-8 rounded-full',\n variant === 'card' && 'rounded-lg',\n !variant && 'rounded-md',\n className,\n )}\n {...props}\n />\n );\n});\nSkeleton.displayName = 'Skeleton';\n","import { useMemo, useState, type ReactNode } from 'react';\nimport { Filter, Settings } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from './DropdownMenu';\nimport { IconButton } from './IconButton';\nimport { Input } from './Input';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n TableSortHeader,\n} from './Table';\nimport { Skeleton } from './Skeleton';\n\nexport interface DataGridColumn<TRow> {\n /** Stable key used for visibility, sort, and React lists. */\n key: string;\n /** Header label. */\n header: ReactNode;\n /** Render the cell. Defaults to the value at `row[key]`. */\n cell?: (row: TRow) => ReactNode;\n /** Cell width — passed to `<col>` so the grid keeps shape during loading. */\n width?: string;\n /** Allow sorting on this column. */\n sortable?: boolean;\n /** Right-align numeric / monetary columns. */\n align?: 'left' | 'right';\n}\n\nexport interface DataGridProps<TRow extends { id: string | number }> {\n columns: DataGridColumn<TRow>[];\n rows: TRow[];\n loading?: boolean;\n /** Initial sort state. */\n sort?: { key: string; direction: 'asc' | 'desc' } | null;\n onSortChange?: (sort: { key: string; direction: 'asc' | 'desc' }) => void;\n /** Show a filter input row above the grid. */\n filter?: { value: string; onChange: (q: string) => void; placeholder?: string };\n /** Empty-state node when no rows are visible. */\n emptyState?: ReactNode;\n className?: string;\n}\n\n/**\n * Composite grid built from `Table` + DropdownMenu + Input. Provides\n * column visibility toggle, an inline filter, sortable headers, and\n * loading / empty states.\n *\n * @example\n * <DataGrid\n * columns={[\n * { key: 'name', header: 'Name', sortable: true },\n * { key: 'status', header: 'Status', cell: r => <Badge tone={...}>{r.status}</Badge> },\n * { key: 'updatedAt', header: 'Updated', align: 'right' },\n * ]}\n * rows={rows}\n * filter={{ value: q, onChange: setQ }}\n * sort={sort}\n * onSortChange={setSort}\n * />\n *\n * @do Provide a meaningful empty state with a primary action when the grid\n * starts empty (no items at all, not just filtered out).\n * @dont Render thousands of rows synchronously — virtualise with `@tanstack/react-virtual`\n * and wrap with this component's headers as a shell.\n */\nexport function DataGrid<TRow extends { id: string | number }>({\n columns,\n rows,\n loading,\n sort,\n onSortChange,\n filter,\n emptyState,\n className,\n}: DataGridProps<TRow>) {\n const [hidden, setHidden] = useState<Record<string, boolean>>({});\n const visibleColumns = useMemo(() => columns.filter((c) => !hidden[c.key]), [columns, hidden]);\n\n const renderRows = () => {\n if (loading) {\n return Array.from({ length: 5 }).map((_, i) => (\n <TableRow key={`skel-${i}`}>\n {visibleColumns.map((c) => (\n <TableCell key={c.key}>\n <Skeleton variant=\"text\" className=\"w-3/4\" />\n </TableCell>\n ))}\n </TableRow>\n ));\n }\n if (rows.length === 0) {\n return (\n <TableRow>\n <TableCell colSpan={visibleColumns.length} className=\"h-32 text-center\">\n {emptyState ?? (\n <span className=\"text-foreground-subtle\">No results.</span>\n )}\n </TableCell>\n </TableRow>\n );\n }\n return rows.map((row) => (\n <TableRow key={row.id}>\n {visibleColumns.map((c) => (\n <TableCell\n key={c.key}\n className={cn(c.align === 'right' && 'text-right tabular')}\n >\n {c.cell ? c.cell(row) : (row as Record<string, unknown>)[c.key] as ReactNode}\n </TableCell>\n ))}\n </TableRow>\n ));\n };\n\n return (\n <div className={cn('flex flex-col gap-3', className)}>\n <div className=\"flex items-center justify-between gap-2\">\n {filter ? (\n <Input\n type=\"search\"\n placeholder={filter.placeholder ?? 'Filter…'}\n value={filter.value}\n onChange={(e) => filter.onChange(e.target.value)}\n clearable\n onClear={() => filter.onChange('')}\n className=\"max-w-sm w-full\"\n hideLabel\n label=\"Filter rows\"\n />\n ) : (\n <div />\n )}\n <div className=\"flex items-center gap-2\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <IconButton aria-label=\"Column visibility\" icon={<Settings />} variant=\"outline\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuLabel>Columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {columns.map((c) => (\n <DropdownMenuCheckboxItem\n key={c.key}\n checked={!hidden[c.key]}\n onCheckedChange={(v) =>\n setHidden((prev) => ({ ...prev, [c.key]: !v }))\n }\n >\n {c.header}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n\n <div className=\"rounded-lg border border-border overflow-hidden\">\n <Table>\n <colgroup>\n {visibleColumns.map((c) => (\n <col key={c.key} style={c.width ? { width: c.width } : undefined} />\n ))}\n </colgroup>\n <TableHeader>\n <TableRow>\n {visibleColumns.map((c) =>\n c.sortable && onSortChange ? (\n <TableSortHeader\n key={c.key}\n sortKey={c.key}\n currentSort={sort ?? null}\n onSortChange={(k, d) => onSortChange({ key: k, direction: d })}\n >\n {c.header}\n </TableSortHeader>\n ) : (\n <TableHead key={c.key} className={cn(c.align === 'right' && 'text-right')}>\n {c.header}\n </TableHead>\n ),\n )}\n </TableRow>\n </TableHeader>\n <TableBody>{renderRows()}</TableBody>\n </Table>\n </div>\n </div>\n );\n}\n","import { forwardRef, useId, useState, type ReactNode } from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { DayPicker, type DateRange } from 'react-day-picker';\nimport 'react-day-picker/style.css';\nimport { Calendar, ChevronLeft, ChevronRight } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Two related components share the same trigger shell:\n *\n * <DatePicker value={date} onChange={setDate} /> // single date\n * <DateRangePicker value={range} onChange={setRange} /> // {from,to}\n * --------------------------------------------------------------------------- */\n\nconst calendarClassNames = {\n root: 'p-3',\n month: 'space-y-2',\n caption: 'flex items-center justify-between px-1 pb-2',\n caption_label: 'text-sm font-medium text-foreground',\n nav: 'flex items-center gap-1',\n nav_button:\n 'inline-flex size-7 items-center justify-center rounded-md text-foreground-muted hover:bg-background-muted hover:text-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring',\n table: 'w-full border-collapse',\n head_row: 'flex',\n head_cell: 'w-9 text-xs font-medium text-foreground-subtle',\n row: 'flex w-full mt-1',\n cell: 'relative size-9 p-0 text-center',\n day: 'inline-flex size-9 items-center justify-center rounded-md text-sm text-foreground transition-colors outline-none hover:bg-background-muted focus-visible:ring-2 focus-visible:ring-ring',\n day_selected: 'bg-accent text-on-accent hover:bg-accent hover:text-on-accent',\n day_today: 'font-semibold text-accent',\n day_outside: 'text-foreground-subtle opacity-50',\n day_disabled: 'text-foreground-subtle opacity-50 pointer-events-none',\n day_range_start: 'rounded-l-md',\n day_range_end: 'rounded-r-md',\n day_range_middle: 'bg-accent-soft text-on-accent-soft rounded-none',\n} as const;\n\nconst calendarComponents = {\n IconLeft: () => <ChevronLeft className=\"size-4\" aria-hidden />,\n IconRight: () => <ChevronRight className=\"size-4\" aria-hidden />,\n};\n\nfunction formatDate(d?: Date): string {\n if (!d) return '';\n return d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n}\n\nfunction PickerTrigger({\n label,\n placeholder,\n hasValue,\n children,\n error,\n fieldId,\n disabled,\n}: {\n label?: ReactNode;\n placeholder: string;\n hasValue: boolean;\n children: ReactNode;\n error?: ReactNode;\n fieldId: string;\n disabled?: boolean;\n}) {\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={fieldId} className=\"text-sm font-medium text-foreground\">\n {label}\n </label>\n )}\n <PopoverPrimitive.Trigger asChild>\n <button\n id={fieldId}\n type=\"button\"\n disabled={disabled}\n aria-invalid={Boolean(error) || undefined}\n className={cn(\n 'inline-flex h-9 w-full items-center justify-start gap-2 rounded-md border bg-card px-3 text-left text-sm',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n error\n ? 'border-danger focus-visible:border-danger focus-visible:ring-danger'\n : 'border-border focus-visible:border-accent focus-visible:ring-ring',\n !hasValue && 'text-foreground-subtle',\n )}\n >\n <Calendar className=\"size-4 text-foreground-subtle\" aria-hidden />\n <span className=\"truncate\">{hasValue ? children : placeholder}</span>\n </button>\n </PopoverPrimitive.Trigger>\n {error && (\n <p role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n )}\n </div>\n );\n}\n\nexport interface DatePickerProps {\n value?: Date;\n onChange: (date: Date | undefined) => void;\n label?: ReactNode;\n placeholder?: string;\n error?: ReactNode;\n disabled?: boolean;\n /** Restrict to a date range. Days outside are not selectable. */\n fromDate?: Date;\n toDate?: Date;\n className?: string;\n}\n\n/**\n * Single-date picker.\n *\n * @example\n * <DatePicker label=\"Date of birth\" value={dob} onChange={setDob} />\n *\n * @do Use locale-aware formatting via the consumer's display layer.\n * @dont Roll a custom calendar — Radix Popover + react-day-picker handles a11y.\n */\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(function DatePicker(\n { value, onChange, label, placeholder = 'Pick a date', error, disabled, fromDate, toDate, className },\n ref,\n) {\n const fieldId = useId();\n const [open, setOpen] = useState(false);\n\n return (\n <div ref={ref} className={cn(className)}>\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PickerTrigger\n label={label}\n placeholder={placeholder}\n hasValue={Boolean(value)}\n error={error}\n fieldId={fieldId}\n disabled={disabled}\n >\n {formatDate(value)}\n </PickerTrigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className=\"z-[var(--z-popover)] rounded-lg border border-border bg-popover text-popover-foreground shadow-md\"\n >\n <DayPicker\n mode=\"single\"\n selected={value}\n onSelect={(d) => {\n onChange(d ?? undefined);\n if (d) setOpen(false);\n }}\n fromDate={fromDate}\n toDate={toDate}\n classNames={calendarClassNames}\n components={calendarComponents}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </div>\n );\n});\nDatePicker.displayName = 'DatePicker';\n\nexport interface DateRangePickerProps {\n value?: DateRange;\n onChange: (range: DateRange | undefined) => void;\n label?: ReactNode;\n placeholder?: string;\n error?: ReactNode;\n disabled?: boolean;\n fromDate?: Date;\n toDate?: Date;\n className?: string;\n}\n\n/**\n * Two-date range picker. `value` is `{from, to}`.\n *\n * @example\n * <DateRangePicker label=\"Reporting period\" value={range} onChange={setRange} />\n */\nexport const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>(function DateRangePicker(\n { value, onChange, label, placeholder = 'Pick a range', error, disabled, fromDate, toDate, className },\n ref,\n) {\n const fieldId = useId();\n const [open, setOpen] = useState(false);\n const hasValue = Boolean(value?.from);\n\n return (\n <div ref={ref} className={cn(className)}>\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PickerTrigger\n label={label}\n placeholder={placeholder}\n hasValue={hasValue}\n error={error}\n fieldId={fieldId}\n disabled={disabled}\n >\n {value?.from && value.to\n ? `${formatDate(value.from)} – ${formatDate(value.to)}`\n : value?.from\n ? formatDate(value.from)\n : ''}\n </PickerTrigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className=\"z-[var(--z-popover)] rounded-lg border border-border bg-popover text-popover-foreground shadow-md\"\n >\n <DayPicker\n mode=\"range\"\n selected={value}\n onSelect={onChange}\n numberOfMonths={2}\n fromDate={fromDate}\n toDate={toDate}\n classNames={calendarClassNames}\n components={calendarComponents}\n />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </div>\n );\n});\nDateRangePicker.displayName = 'DateRangePicker';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { Button, type ButtonProps } from './Button';\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogPortal = DialogPrimitive.Portal;\nexport const DialogClose = DialogPrimitive.Close;\n\nexport const DialogOverlay = forwardRef<\n ElementRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(function DialogOverlay({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-[var(--z-overlay)] bg-neutral-950/60 backdrop-blur-[2px]',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n );\n});\nDialogOverlay.displayName = 'DialogOverlay';\n\nexport interface DialogContentProps\n extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n /** Show the default close (×) button in the top-right. */\n showClose?: boolean;\n /** Dialog width — `sm` 400 / `md` 520 / `lg` 720. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(function DialogContent({ className, children, showClose = true, size = 'md', ...props }, ref) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-1/2 top-1/2 z-[var(--z-modal)] -translate-x-1/2 -translate-y-1/2',\n 'w-[calc(100%-2rem)] rounded-lg border border-border bg-card text-card-foreground shadow-lg',\n 'p-6',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n size === 'sm' && 'max-w-[400px]',\n size === 'md' && 'max-w-[520px]',\n size === 'lg' && 'max-w-[720px]',\n className,\n )}\n {...props}\n >\n {children}\n {showClose && (\n <DialogPrimitive.Close\n aria-label=\"Close\"\n className={cn(\n 'absolute right-4 top-4 inline-flex size-8 items-center justify-center rounded-md text-foreground-subtle',\n 'hover:bg-background-muted hover:text-foreground',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card',\n 'transition-colors duration-[var(--duration-fast)]',\n )}\n >\n <X className=\"size-4\" aria-hidden />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n});\nDialogContent.displayName = 'DialogContent';\n\nexport function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex flex-col gap-1 pb-4', className)} {...props} />;\n}\nDialogHeader.displayName = 'DialogHeader';\n\nexport function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('flex flex-col-reverse gap-2 pt-6 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\nDialogFooter.displayName = 'DialogFooter';\n\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function DialogTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold text-foreground leading-tight', className)}\n {...props}\n />\n );\n});\nDialogTitle.displayName = 'DialogTitle';\n\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function DialogDescription({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-foreground-muted', className)}\n {...props}\n />\n );\n});\nDialogDescription.displayName = 'DialogDescription';\n\n/* -----------------------------------------------------------------------------\n * ConfirmationDialog — pre-composed pattern for destructive/important\n * confirmations. Use this when the body is a single sentence and the only\n * controls are Cancel + Confirm.\n * --------------------------------------------------------------------------- */\n\nexport interface ConfirmationDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: ReactNode;\n description?: ReactNode;\n /** Label of the confirm button. */\n confirmLabel?: string;\n /** Label of the cancel button. */\n cancelLabel?: string;\n /** Variant of the confirm button — typically `primary` or `destructive`. */\n confirmVariant?: ButtonProps['variant'];\n /** Called when the user confirms. Awaited — shows a spinner while pending. */\n onConfirm: () => void | Promise<void>;\n /** Whether the confirm button is currently submitting. */\n loading?: boolean;\n}\n\n/**\n * Confirmation dialog with title, description, cancel + confirm buttons.\n *\n * @example Destructive confirmation\n * <ConfirmationDialog\n * open={open} onOpenChange={setOpen}\n * title=\"Delete project?\"\n * description=\"This permanently deletes the project and all its data.\"\n * confirmLabel=\"Delete project\"\n * confirmVariant=\"destructive\"\n * onConfirm={handleDelete}\n * />\n *\n * @do Lead the title with the action: \"Delete project?\" not \"Are you sure?\".\n * State consequences in the description.\n * @dont Use for low-risk reversible actions — those don't need a dialog.\n */\nexport function ConfirmationDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel = 'Confirm',\n cancelLabel = 'Cancel',\n confirmVariant = 'primary',\n onConfirm,\n loading,\n}: ConfirmationDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent size=\"sm\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n {description && <DialogDescription>{description}</DialogDescription>}\n </DialogHeader>\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"outline\">{cancelLabel}</Button>\n </DialogClose>\n <Button variant={confirmVariant} loading={loading} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\nConfirmationDialog.displayName = 'ConfirmationDialog';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {\n /** Visual marker — small Lucide icon or custom illustration. */\n icon?: ReactNode;\n /** Heading. One short sentence. */\n title: ReactNode;\n /** Description. One or two sentences max. */\n description?: ReactNode;\n /** Primary action — usually a `<Button>` that creates the missing item. */\n action?: ReactNode;\n /** Secondary helper link — \"Learn more\", \"Import existing\", etc. */\n secondaryAction?: ReactNode;\n}\n\n/**\n * Shown when a list / dataset / surface has no content yet. Tone is helpful,\n * never apologetic.\n *\n * @example\n * <EmptyState\n * icon={<Folder className=\"size-6\" />}\n * title=\"No projects yet\"\n * description=\"Create a project to start tracking work.\"\n * action={<Button>New project</Button>}\n * />\n *\n * @do Lead with the next action. The icon is decoration; the button is the\n * point.\n * @dont Use elaborate illustrations on internal product surfaces — they\n * break the refined-minimal direction.\n */\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\n { icon, title, description, action, secondaryAction, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-border bg-background-subtle p-10 text-center',\n className,\n )}\n {...props}\n >\n {icon && (\n <div className=\"inline-flex size-12 items-center justify-center rounded-full bg-background-muted text-foreground-muted [&_svg]:size-6\">\n {icon}\n </div>\n )}\n <h3 className=\"text-base font-semibold text-foreground leading-tight\">{title}</h3>\n {description && (\n <p className=\"max-w-md text-sm text-foreground-muted leading-relaxed\">{description}</p>\n )}\n {(action || secondaryAction) && (\n <div className=\"mt-2 flex items-center gap-2\">\n {action}\n {secondaryAction}\n </div>\n )}\n </div>\n );\n});\nEmptyState.displayName = 'EmptyState';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { AlertTriangle, XCircle } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { Button } from './Button';\n\nexport interface ErrorStateProps extends HTMLAttributes<HTMLDivElement> {\n /** `404` not-found, `500` server, or `generic` (catch-all). */\n variant?: '404' | '500' | 'generic';\n /** Override the default title. */\n title?: ReactNode;\n /** Override the default description. */\n description?: ReactNode;\n /** Custom action node. Replaces the default retry button. */\n action?: ReactNode;\n /** When provided, renders a default \"Try again\" button calling this handler. */\n onRetry?: () => void;\n}\n\nconst presets = {\n '404': {\n icon: <AlertTriangle />,\n title: 'Page not found',\n description: \"We couldn't find what you were looking for.\",\n },\n '500': {\n icon: <XCircle />,\n title: 'Something went wrong',\n description: \"We're looking into it. Please try again in a moment.\",\n },\n generic: {\n icon: <AlertTriangle />,\n title: 'Unexpected error',\n description: 'Something interrupted this action.',\n },\n} as const;\n\n/**\n * Page-level error placeholder. Pair with `onRetry` for transient failures.\n *\n * @example 500\n * <ErrorState variant=\"500\" onRetry={refetch} />\n *\n * @example Custom\n * <ErrorState title=\"Quota exceeded\"\n * description=\"Your plan allows 1,000 events/day.\"\n * action={<Button>Upgrade plan</Button>} />\n *\n * @do Match the tone to the cause — server errors apologise, user errors\n * explain. Always offer a next step.\n * @dont Show a raw stack trace to end users.\n */\nexport const ErrorState = forwardRef<HTMLDivElement, ErrorStateProps>(function ErrorState(\n { variant = 'generic', title, description, action, onRetry, className, ...props },\n ref,\n) {\n const preset = presets[variant];\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n 'flex flex-col items-center justify-center gap-3 rounded-lg border border-border bg-background-subtle p-10 text-center',\n className,\n )}\n {...props}\n >\n <div className=\"inline-flex size-12 items-center justify-center rounded-full bg-danger-soft text-danger-text [&_svg]:size-6\">\n {preset.icon}\n </div>\n <h3 className=\"text-base font-semibold text-foreground leading-tight\">\n {title ?? preset.title}\n </h3>\n <p className=\"max-w-md text-sm text-foreground-muted leading-relaxed\">\n {description ?? preset.description}\n </p>\n {(action || onRetry) && (\n <div className=\"mt-2 flex items-center gap-2\">\n {action ?? (\n <Button onClick={onRetry} variant=\"outline\">\n Try again\n </Button>\n )}\n </div>\n )}\n </div>\n );\n});\nErrorState.displayName = 'ErrorState';\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n type HTMLAttributes,\n} from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport {\n Controller,\n FormProvider,\n useFormContext,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from 'react-hook-form';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * react-hook-form bindings + accessible label / description / error wiring.\n *\n * Usage:\n * const form = useForm<Values>(…);\n * <Form {...form}>\n * <FormField\n * control={form.control}\n * name=\"email\"\n * render={({ field }) => (\n * <FormItem>\n * <FormLabel>Email</FormLabel>\n * <FormControl><Input type=\"email\" {...field} /></FormControl>\n * <FormDescription>We never share this.</FormDescription>\n * <FormError />\n * </FormItem>\n * )}\n * />\n * </Form>\n * --------------------------------------------------------------------------- */\n\nexport const Form = FormProvider;\n\ninterface FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName;\n}\n\nconst FormFieldContext = createContext<FormFieldContextValue | null>(null);\n\nexport function FormField<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(props: ControllerProps<TFieldValues, TName>) {\n return (\n <FormFieldContext.Provider value={{ name: props.name as string }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n}\n\ninterface FormItemContextValue {\n id: string;\n}\nconst FormItemContext = createContext<FormItemContextValue | null>(null);\n\nexport function useFormField() {\n const fieldContext = useContext(FormFieldContext);\n const itemContext = useContext(FormItemContext);\n const { getFieldState, formState } = useFormContext();\n if (!fieldContext) {\n throw new Error('useFormField must be used inside <FormField>');\n }\n const fieldState = getFieldState(fieldContext.name, formState);\n const id = itemContext?.id ?? '';\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-item`,\n formDescriptionId: `${id}-desc`,\n formMessageId: `${id}-error`,\n ...fieldState,\n };\n}\n\nexport const FormItem = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function FormItem({ className, ...props }, ref) {\n const id = useId();\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn('flex flex-col gap-1.5', className)} {...props} />\n </FormItemContext.Provider>\n );\n },\n);\nFormItem.displayName = 'FormItem';\n\nexport const FormLabel = forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(function FormLabel({ className, ...props }, ref) {\n const { formItemId, error } = useFormField();\n return (\n <LabelPrimitive.Root\n ref={ref}\n htmlFor={formItemId}\n className={cn(\n 'text-sm font-medium text-foreground',\n error && 'text-danger-text',\n className,\n )}\n {...props}\n />\n );\n});\nFormLabel.displayName = 'FormLabel';\n\nexport const FormControl = forwardRef<HTMLElement, React.ComponentPropsWithoutRef<typeof Slot>>(\n function FormControl(props, ref) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={!error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n );\n },\n);\nFormControl.displayName = 'FormControl';\n\nexport const FormDescription = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n function FormDescription({ className, ...props }, ref) {\n const { formDescriptionId } = useFormField();\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={cn('text-xs text-foreground-subtle', className)}\n {...props}\n />\n );\n },\n);\nFormDescription.displayName = 'FormDescription';\n\nexport const FormError = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n function FormError({ className, children, ...props }, ref) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? '') : children;\n if (!body) return null;\n return (\n <p\n ref={ref}\n id={formMessageId}\n role=\"alert\"\n className={cn('text-xs text-danger-text', className)}\n {...props}\n >\n {body}\n </p>\n );\n },\n);\nFormError.displayName = 'FormError';\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface KbdProps extends HTMLAttributes<HTMLElement> {\n /** Visual size — match the surrounding text. */\n size?: 'sm' | 'md';\n}\n\n/**\n * Stylised keyboard shortcut indicator. Compose multiple `<Kbd>` for chords.\n *\n * @example\n * Press <Kbd>⌘</Kbd>+<Kbd>K</Kbd> to open the command palette.\n *\n * @do Use OS-conventional symbols (⌘ ⇧ ⌥ ⌃ ⏎) — keep visuals consistent\n * across the app.\n * @dont Use Kbd for clickable buttons — it implies a real keyboard input.\n */\nexport const Kbd = forwardRef<HTMLElement, KbdProps>(function Kbd(\n { size = 'sm', className, ...props },\n ref,\n) {\n return (\n <kbd\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center rounded border border-border bg-background-subtle font-mono',\n 'text-foreground-muted shadow-xs',\n size === 'sm' ? 'h-5 min-w-5 px-1 text-[10px]' : 'h-6 min-w-6 px-1.5 text-xs',\n className,\n )}\n {...props}\n />\n );\n});\nKbd.displayName = 'Kbd';\n","import {\n forwardRef,\n useCallback,\n useId,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { Check, ChevronsUpDown, X } from '@/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface MultiSelectOption {\n /** Stable, unique value submitted in `onChange`. */\n value: string;\n /** Visible label shown both in the menu and in the selected chip. */\n label: string;\n /** Optional secondary text shown after the label in the menu. */\n description?: string;\n /** Disable selecting this option. */\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps {\n /** All possible options. */\n options: MultiSelectOption[];\n /** Currently selected values. Controlled. */\n value: string[];\n /** Called whenever the selection changes. */\n onChange: (next: string[]) => void;\n /** Visible label above the field. */\n label?: ReactNode;\n /** Hint below the field. Hidden when `error` is set. */\n helperText?: ReactNode;\n /** Validation message. */\n error?: ReactNode;\n /** Empty-state placeholder shown when nothing is selected. */\n placeholder?: string;\n /** Text shown when no options match the search. */\n emptyText?: string;\n /** Max number of chips rendered inline; remainder shown as \"+N more\". */\n maxVisibleChips?: number;\n /** Whether the user can clear all selections with a single click. */\n clearable?: boolean;\n /** Disable the entire field. */\n disabled?: boolean;\n className?: string;\n}\n\n/**\n * Chip-based multi-select with a searchable menu (cmdk under the hood).\n *\n * Keyboard:\n * - Backspace on the input with empty query removes the last chip\n * - Enter / Space toggles the highlighted option\n * - Escape closes the menu\n *\n * @example Tag picker\n * <MultiSelect label=\"Tags\"\n * options={tags}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Pick tags\" />\n *\n * @example Bounded with overflow chip\n * <MultiSelect options={users}\n * value={value}\n * onChange={setValue}\n * maxVisibleChips={3} />\n *\n * @do Cap `maxVisibleChips` (3–5) on narrow surfaces so the field doesn't\n * reflow as the user adds selections.\n * @dont Use MultiSelect for fewer than ~6 options. CheckboxGroup is clearer.\n */\nexport const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(function MultiSelect(\n {\n options,\n value,\n onChange,\n label,\n helperText,\n error,\n placeholder = 'Select…',\n emptyText = 'No results.',\n maxVisibleChips = 4,\n clearable = true,\n disabled,\n className,\n },\n ref,\n) {\n const autoId = useId();\n const fieldId = autoId;\n const helperId = `${autoId}-helper`;\n const errorId = `${autoId}-error`;\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const selected = useMemo(\n () => options.filter((o) => value.includes(o.value)),\n [options, value],\n );\n\n const toggle = useCallback(\n (v: string) => {\n if (value.includes(v)) onChange(value.filter((x) => x !== v));\n else onChange([...value, v]);\n },\n [value, onChange],\n );\n\n const clear = useCallback(() => onChange([]), [onChange]);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Backspace' && query === '' && value.length > 0) {\n onChange(value.slice(0, -1));\n }\n };\n\n const visibleChips = selected.slice(0, maxVisibleChips);\n const overflow = selected.length - visibleChips.length;\n const isError = Boolean(error);\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5', className)}>\n {label && (\n <label htmlFor={fieldId} className=\"text-sm font-medium text-foreground\">\n {label}\n </label>\n )}\n\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <div\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={`${fieldId}-list`}\n aria-haspopup=\"listbox\"\n id={fieldId}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n aria-disabled={disabled || undefined}\n aria-invalid={isError || undefined}\n aria-describedby={isError ? errorId : helperText ? helperId : undefined}\n className={cn(\n 'flex w-full min-h-9 cursor-text flex-wrap items-center gap-1.5 rounded-md border bg-card px-2 py-1 text-sm',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n isError\n ? 'border-danger focus-visible:border-danger focus-visible:ring-danger'\n : 'border-border focus-visible:border-accent focus-visible:ring-ring',\n disabled && 'opacity-50 pointer-events-none',\n )}\n onClick={() => inputRef.current?.focus()}\n >\n {visibleChips.length === 0 && (\n <span className=\"text-foreground-subtle px-1\">{placeholder}</span>\n )}\n {visibleChips.map((opt) => (\n <span\n key={opt.value}\n className=\"inline-flex items-center gap-1 rounded-md bg-accent-soft px-1.5 py-0.5 text-xs font-medium text-on-accent-soft\"\n >\n {opt.label}\n <button\n type=\"button\"\n aria-label={`Remove ${opt.label}`}\n className=\"inline-flex items-center text-on-accent-soft hover:text-foreground\"\n onClick={(e) => {\n e.stopPropagation();\n toggle(opt.value);\n }}\n >\n <X className=\"size-3\" aria-hidden />\n </button>\n </span>\n ))}\n {overflow > 0 && (\n <span className=\"rounded-md bg-background-muted px-1.5 py-0.5 text-xs font-medium text-foreground-muted\">\n +{overflow} more\n </span>\n )}\n <input\n ref={inputRef}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onFocus={() => setOpen(true)}\n className=\"flex-1 min-w-[8ch] bg-transparent text-sm outline-none placeholder:text-foreground-subtle\"\n placeholder={selected.length === 0 ? '' : ''}\n disabled={disabled}\n />\n <span className=\"ml-auto flex items-center gap-1\">\n {clearable && selected.length > 0 && (\n <button\n type=\"button\"\n aria-label=\"Clear all\"\n onClick={(e) => {\n e.stopPropagation();\n clear();\n }}\n className=\"text-foreground-subtle hover:text-foreground\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n )}\n <ChevronsUpDown className=\"size-4 text-foreground-subtle\" aria-hidden />\n </span>\n </div>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={4}\n className={cn(\n 'z-[var(--z-popover)] w-[var(--radix-popover-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <CommandPrimitive shouldFilter={false} className=\"flex h-full w-full flex-col\">\n <CommandPrimitive.List\n id={`${fieldId}-list`}\n className=\"max-h-64 overflow-y-auto p-1\"\n >\n {options\n .filter((o) => o.label.toLowerCase().includes(query.toLowerCase()))\n .map((opt) => {\n const isSelected = value.includes(opt.value);\n return (\n <CommandPrimitive.Item\n key={opt.value}\n value={opt.value}\n disabled={opt.disabled}\n onSelect={() => toggle(opt.value)}\n className={cn(\n 'flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground',\n 'data-[selected=true]:bg-background-muted',\n 'data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none',\n )}\n >\n <span\n aria-hidden\n className={cn(\n 'flex size-4 items-center justify-center rounded-sm border',\n isSelected ? 'border-accent bg-accent text-on-accent' : 'border-border',\n )}\n >\n {isSelected && <Check className=\"size-3\" aria-hidden />}\n </span>\n <span className=\"flex-1\">{opt.label}</span>\n {opt.description && (\n <span className=\"text-xs text-foreground-subtle\">{opt.description}</span>\n )}\n </CommandPrimitive.Item>\n );\n })}\n <CommandPrimitive.Empty className=\"px-2 py-6 text-center text-sm text-foreground-subtle\">\n {emptyText}\n </CommandPrimitive.Empty>\n </CommandPrimitive.List>\n </CommandPrimitive>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-foreground-subtle\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n\nMultiSelect.displayName = 'MultiSelect';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { Check, ChevronDown, ChevronUp, ChevronsUpDown } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Compound API:\n *\n * <Select value={…} onValueChange={…}>\n * <SelectTrigger placeholder=\"Pick one\" />\n * <SelectContent>\n * <SelectGroup label=\"Active\">\n * <SelectItem value=\"a\">Apple</SelectItem>\n * <SelectItem value=\"b\">Banana</SelectItem>\n * </SelectGroup>\n * </SelectContent>\n * </Select>\n *\n * All accessibility is handled by Radix: keyboard navigation, type-ahead,\n * focus trap, ARIA roles. We only style.\n * --------------------------------------------------------------------------- */\n\nexport const Select = SelectPrimitive.Root;\nexport const SelectValue = SelectPrimitive.Value;\n\nexport interface SelectTriggerProps\n extends Omit<ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>, 'children'> {\n /** Placeholder shown when no value is selected. */\n placeholder?: string;\n /** Trigger height — matches Input sizes. */\n size?: 'sm' | 'md' | 'lg';\n /** Visual tone — `error` swaps the border + ring to danger. */\n tone?: 'default' | 'error';\n}\n\nexport const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(function SelectTrigger({ className, placeholder, size = 'md', tone = 'default', ...props }, ref) {\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex w-full items-center justify-between gap-2 rounded-md border bg-card text-sm text-foreground',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none',\n 'focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n 'data-[placeholder]:text-foreground-subtle',\n size === 'sm' && 'h-8 px-2.5',\n size === 'md' && 'h-9 px-3',\n size === 'lg' && 'h-10 px-3.5',\n tone === 'default'\n ? 'border-border focus-visible:border-accent focus-visible:ring-ring'\n : 'border-danger focus-visible:border-danger focus-visible:ring-danger',\n className,\n )}\n {...props}\n >\n <SelectPrimitive.Value placeholder={placeholder} />\n <SelectPrimitive.Icon asChild>\n <ChevronsUpDown className=\"size-4 text-foreground-subtle shrink-0\" aria-hidden />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n});\nSelectTrigger.displayName = 'SelectTrigger';\n\nconst scrollBtn =\n 'flex h-6 cursor-default items-center justify-center text-foreground-subtle';\n\nexport const SelectScrollUpButton = forwardRef<\n ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(function SelectScrollUpButton({ className, ...props }, ref) {\n return (\n <SelectPrimitive.ScrollUpButton ref={ref} className={cn(scrollBtn, className)} {...props}>\n <ChevronUp className=\"size-4\" aria-hidden />\n </SelectPrimitive.ScrollUpButton>\n );\n});\nSelectScrollUpButton.displayName = 'SelectScrollUpButton';\n\nexport const SelectScrollDownButton = forwardRef<\n ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(function SelectScrollDownButton({ className, ...props }, ref) {\n return (\n <SelectPrimitive.ScrollDownButton ref={ref} className={cn(scrollBtn, className)} {...props}>\n <ChevronDown className=\"size-4\" aria-hidden />\n </SelectPrimitive.ScrollDownButton>\n );\n});\nSelectScrollDownButton.displayName = 'SelectScrollDownButton';\n\nexport const SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(function SelectContent({ className, children, position = 'popper', ...props }, ref) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n className={cn(\n 'z-[var(--z-popover)] min-w-[var(--radix-select-trigger-width)] max-h-96',\n 'overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground',\n 'shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1',\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport className=\"p-1\">{children}</SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n});\nSelectContent.displayName = 'SelectContent';\n\nexport const SelectLabel = forwardRef<\n ElementRef<typeof SelectPrimitive.Label>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(function SelectLabel({ className, ...props }, ref) {\n return (\n <SelectPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-xs font-medium text-foreground-subtle', className)}\n {...props}\n />\n );\n});\nSelectLabel.displayName = 'SelectLabel';\n\nexport interface SelectItemProps\n extends ComponentPropsWithoutRef<typeof SelectPrimitive.Item> {\n /** Icon shown to the left of the label. */\n leadingIcon?: ReactNode;\n}\n\nexport const SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n SelectItemProps\n>(function SelectItem({ className, children, leadingIcon, ...props }, ref) {\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center gap-2',\n 'rounded-sm px-2 py-1.5 pr-8 text-sm text-foreground outline-none',\n 'data-[highlighted]:bg-background-muted data-[highlighted]:text-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n {leadingIcon && (\n <span className=\"flex items-center text-foreground-subtle [&_svg]:size-4\">\n {leadingIcon}\n </span>\n )}\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <span className=\"absolute right-2 flex items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"size-4 text-accent\" aria-hidden />\n </SelectPrimitive.ItemIndicator>\n </span>\n </SelectPrimitive.Item>\n );\n});\nSelectItem.displayName = 'SelectItem';\n\nexport const SelectSeparator = forwardRef<\n ElementRef<typeof SelectPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(function SelectSeparator({ className, ...props }, ref) {\n return (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n );\n});\nSelectSeparator.displayName = 'SelectSeparator';\n\n/** Optional grouping with a label header. Pure composition over Radix Group + Label. */\nexport interface SelectGroupProps\n extends ComponentPropsWithoutRef<typeof SelectPrimitive.Group> {\n label?: ReactNode;\n}\nexport const SelectGroup = forwardRef<\n ElementRef<typeof SelectPrimitive.Group>,\n SelectGroupProps\n>(function SelectGroup({ label, children, ...props }, ref) {\n return (\n <SelectPrimitive.Group ref={ref} {...props}>\n {label && <SelectLabel>{label}</SelectLabel>}\n {children}\n </SelectPrimitive.Group>\n );\n});\nSelectGroup.displayName = 'SelectGroup';\n\n/**\n * Compose `Select` + `SelectTrigger` + `SelectContent` + `SelectItem` for a\n * single-choice picker. Keyboard, type-ahead, and ARIA come from Radix.\n *\n * @example Basic\n * <Select onValueChange={setStatus}>\n * <SelectTrigger placeholder=\"Status\" />\n * <SelectContent>\n * <SelectItem value=\"open\">Open</SelectItem>\n * <SelectItem value=\"closed\">Closed</SelectItem>\n * </SelectContent>\n * </Select>\n *\n * @example Grouped\n * <SelectContent>\n * <SelectGroup label=\"People\">\n * <SelectItem value=\"anu\">Anu</SelectItem>\n * <SelectItem value=\"bat\">Bat</SelectItem>\n * </SelectGroup>\n * <SelectSeparator />\n * <SelectGroup label=\"Bots\">\n * <SelectItem value=\"robo\">Robo</SelectItem>\n * </SelectGroup>\n * </SelectContent>\n *\n * @do Use `placeholder` on the trigger when there is no default value.\n * @dont Use Select for more than ~12 options — switch to `Combobox`.\n */\n","import { forwardRef, useMemo, type HTMLAttributes } from 'react';\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n} from './Select';\n\nexport interface PaginationProps extends HTMLAttributes<HTMLElement> {\n /** 1-indexed current page. */\n page: number;\n /** Total number of pages. Set to 0 to hide page numbers. */\n pageCount: number;\n /** Called with the new page when navigating. */\n onPageChange: (page: number) => void;\n /** Total item count, for the \"Showing 1-20 of 200\" hint. Omit to hide. */\n totalItems?: number;\n /** Items shown per page (controlled if `onPageSizeChange` is provided). */\n pageSize?: number;\n /** Options for the page-size select. */\n pageSizeOptions?: number[];\n /** Called when the user picks a new page size. */\n onPageSizeChange?: (size: number) => void;\n /** Show first/last (« ») jump buttons. Default true. */\n showJump?: boolean;\n}\n\nfunction pageRange(current: number, total: number, max = 7): (number | 'gap')[] {\n if (total <= max) return Array.from({ length: total }, (_, i) => i + 1);\n const window = 1;\n const result: (number | 'gap')[] = [];\n const start = Math.max(2, current - window);\n const end = Math.min(total - 1, current + window);\n\n result.push(1);\n if (start > 2) result.push('gap');\n for (let i = start; i <= end; i++) result.push(i);\n if (end < total - 1) result.push('gap');\n result.push(total);\n return result;\n}\n\n/**\n * Numbered pagination with prev/next, first/last jumps, page-size selector,\n * and item-count summary.\n *\n * @example\n * <Pagination page={page} pageCount={20} onPageChange={setPage}\n * totalItems={400} pageSize={20}\n * pageSizeOptions={[10, 20, 50]} onPageSizeChange={setSize} />\n *\n * @do Place the count summary on the left and controls on the right.\n * @dont Show numbers when there are >100 pages — use a \"jump to\" input instead.\n */\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(function Pagination(\n {\n page,\n pageCount,\n onPageChange,\n totalItems,\n pageSize,\n pageSizeOptions,\n onPageSizeChange,\n showJump = true,\n className,\n ...props\n },\n ref,\n) {\n const pages = useMemo(() => pageRange(page, pageCount), [page, pageCount]);\n\n const from = pageSize ? (page - 1) * pageSize + 1 : undefined;\n const to = pageSize && totalItems ? Math.min(page * pageSize, totalItems) : undefined;\n\n const goto = (p: number) => {\n if (p < 1 || p > pageCount || p === page) return;\n onPageChange(p);\n };\n\n return (\n <nav\n ref={ref}\n aria-label=\"Pagination\"\n className={cn('flex flex-wrap items-center justify-between gap-3', className)}\n {...props}\n >\n <div className=\"flex items-center gap-3 text-sm text-foreground-muted\">\n {totalItems !== undefined && pageSize !== undefined && (\n <span className=\"tabular\">\n Showing {from}–{to} of {totalItems}\n </span>\n )}\n {pageSizeOptions && onPageSizeChange && pageSize !== undefined && (\n <div className=\"flex items-center gap-2\">\n <label htmlFor=\"page-size\" className=\"sr-only\">\n Rows per page\n </label>\n <Select value={String(pageSize)} onValueChange={(v) => onPageSizeChange(Number(v))}>\n <SelectTrigger size=\"sm\" className=\"w-[7.5rem] whitespace-nowrap\" />\n <SelectContent>\n {pageSizeOptions.map((s) => (\n <SelectItem key={s} value={String(s)}>\n {s} / page\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n </div>\n\n <ul className=\"flex items-center gap-1\">\n {showJump && (\n <li>\n <button\n type=\"button\"\n aria-label=\"Go to first page\"\n disabled={page === 1}\n onClick={() => goto(1)}\n className={navButtonClass}\n >\n <ChevronsLeft className=\"size-4\" aria-hidden />\n </button>\n </li>\n )}\n <li>\n <button\n type=\"button\"\n aria-label=\"Previous page\"\n disabled={page === 1}\n onClick={() => goto(page - 1)}\n className={navButtonClass}\n >\n <ChevronLeft className=\"size-4\" aria-hidden />\n </button>\n </li>\n {pages.map((p, i) =>\n p === 'gap' ? (\n <li key={`gap-${i}`} className=\"px-2 text-foreground-subtle\">\n …\n </li>\n ) : (\n <li key={p}>\n <button\n type=\"button\"\n aria-label={`Page ${p}`}\n aria-current={p === page ? 'page' : undefined}\n onClick={() => goto(p)}\n className={cn(\n 'inline-flex size-8 items-center justify-center rounded-md text-sm tabular outline-none',\n 'transition-colors duration-[var(--duration-fast)]',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n p === page\n ? 'bg-accent text-on-accent font-medium'\n : 'text-foreground-muted hover:bg-background-muted hover:text-foreground',\n )}\n >\n {p}\n </button>\n </li>\n ),\n )}\n <li>\n <button\n type=\"button\"\n aria-label=\"Next page\"\n disabled={page === pageCount}\n onClick={() => goto(page + 1)}\n className={navButtonClass}\n >\n <ChevronRight className=\"size-4\" aria-hidden />\n </button>\n </li>\n {showJump && (\n <li>\n <button\n type=\"button\"\n aria-label=\"Go to last page\"\n disabled={page === pageCount}\n onClick={() => goto(pageCount)}\n className={navButtonClass}\n >\n <ChevronsRight className=\"size-4\" aria-hidden />\n </button>\n </li>\n )}\n </ul>\n </nav>\n );\n});\nPagination.displayName = 'Pagination';\n\nconst navButtonClass = cn(\n 'inline-flex size-8 items-center justify-center rounded-md text-foreground-muted',\n 'transition-colors duration-[var(--duration-fast)]',\n 'hover:bg-background-muted hover:text-foreground',\n 'disabled:opacity-50 disabled:pointer-events-none',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n);\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { cn } from '@/lib/utils';\n\nexport const Popover = PopoverPrimitive.Root;\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\nexport const PopoverClose = PopoverPrimitive.Close;\n\nexport const PopoverContent = forwardRef<\n ElementRef<typeof PopoverPrimitive.Content>,\n ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(function PopoverContent({ className, align = 'center', sideOffset = 4, ...props }, ref) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-[var(--z-popover)] w-72 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-md',\n 'outline-none',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1',\n 'data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n});\nPopoverContent.displayName = 'PopoverContent';\n\n/**\n * @example\n * <Popover>\n * <PopoverTrigger asChild><Button variant=\"outline\">Options</Button></PopoverTrigger>\n * <PopoverContent>…</PopoverContent>\n * </Popover>\n *\n * @do Reserve Popover for low-stakes, transient UI — pickers, mini-forms.\n * @dont Use Popover for navigation menus — that's DropdownMenu.\n */\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type SVGProps,\n} from 'react';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Linear — bar that fills left-to-right.\n * Circular — SVG ring. Both support determinate (value 0..100) and\n * indeterminate (`value` omitted) states.\n * --------------------------------------------------------------------------- */\n\nexport interface ProgressProps\n extends Omit<ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>, 'value'> {\n /** 0–100. Omit for indeterminate. */\n value?: number | null;\n /** Bar height. */\n size?: 'sm' | 'md' | 'lg';\n /** Visual tone. Use `success`/`danger` to colour-code completion state. */\n tone?: 'accent' | 'success' | 'warning' | 'danger';\n}\n\nconst heightMap = { sm: 'h-1', md: 'h-1.5', lg: 'h-2' } as const;\nconst fillTone = {\n accent: 'bg-accent',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n} as const;\n\n/**\n * Linear progress bar.\n *\n * @example\n * <Progress value={uploadPct} aria-label=\"Upload progress\" />\n * <Progress aria-label=\"Loading\" /> // indeterminate\n *\n * @do Always pair Progress with an `aria-label` describing what is progressing.\n * @dont Use a Progress for an unknown-completion task — use a Spinner.\n */\nexport const Progress = forwardRef<ElementRef<typeof ProgressPrimitive.Root>, ProgressProps>(\n function Progress({ className, value, size = 'md', tone = 'accent', ...props }, ref) {\n const indeterminate = value === undefined || value === null;\n return (\n <ProgressPrimitive.Root\n ref={ref}\n value={indeterminate ? undefined : value}\n className={cn(\n 'relative w-full overflow-hidden rounded-full bg-background-muted',\n heightMap[size],\n className,\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\n 'h-full w-full flex-1 transition-transform',\n fillTone[tone],\n indeterminate && 'animate-[progressIndeterminate_1.4s_ease-in-out_infinite] origin-left',\n )}\n style={\n indeterminate\n ? undefined\n : { transform: `translateX(-${100 - (value ?? 0)}%)` }\n }\n />\n {/* Keyframes inline so consumers don't need to register them globally. */}\n <style>{`\n @keyframes progressIndeterminate {\n 0% { transform: translateX(-100%) scaleX(0.6); }\n 50% { transform: translateX(0%) scaleX(0.4); }\n 100% { transform: translateX(100%) scaleX(0.6); }\n }\n `}</style>\n </ProgressPrimitive.Root>\n );\n },\n);\nProgress.displayName = 'Progress';\n\nexport interface ProgressCircleProps extends SVGProps<SVGSVGElement> {\n /** 0–100. Omit for indeterminate. */\n value?: number;\n /** Pixel size of the SVG. */\n size?: number;\n /** Stroke thickness. */\n thickness?: number;\n /** Visible label for screen readers. */\n 'aria-label': string;\n tone?: 'accent' | 'success' | 'warning' | 'danger';\n}\n\nconst circleTone = {\n accent: 'stroke-accent',\n success: 'stroke-success',\n warning: 'stroke-warning',\n danger: 'stroke-danger',\n} as const;\n\n/**\n * Circular progress ring. Pairs with a numeric label for percentage-style\n * indicators.\n *\n * @example\n * <ProgressCircle value={72} aria-label=\"Storage used\" />\n */\nexport const ProgressCircle = forwardRef<SVGSVGElement, ProgressCircleProps>(function ProgressCircle(\n { value, size = 36, thickness = 3, className, tone = 'accent', ...props },\n ref,\n) {\n const isIndeterminate = value === undefined;\n const radius = (size - thickness) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = isIndeterminate ? 0 : circumference - (Math.min(100, Math.max(0, value)) / 100) * circumference;\n\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={isIndeterminate ? undefined : value}\n className={cn('shrink-0', isIndeterminate && 'animate-spin', className)}\n {...props}\n >\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={thickness}\n className=\"stroke-background-muted fill-none\"\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={isIndeterminate ? circumference * 0.7 : offset}\n className={cn(circleTone[tone], 'fill-none transition-[stroke-dashoffset]')}\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n />\n </svg>\n );\n});\nProgressCircle.displayName = 'ProgressCircle';\n","import {\n forwardRef,\n useId,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { cn } from '@/lib/utils';\n\nexport interface RadioGroupProps\n extends ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root> {\n /** Lay out the radios horizontally (default) or vertically. */\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const RadioGroup = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(function RadioGroup({ className, orientation = 'vertical', ...props }, ref) {\n return (\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(\n 'flex gap-3',\n orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n className,\n )}\n {...props}\n />\n );\n});\nRadioGroup.displayName = 'RadioGroup';\n\nexport interface RadioItemProps\n extends Omit<ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>, 'asChild'> {\n label?: ReactNode;\n description?: ReactNode;\n hideLabel?: boolean;\n}\n\n/**\n * One radio option with inline label + description.\n *\n * @example\n * <RadioGroup defaultValue=\"weekly\">\n * <RadioItem value=\"daily\" label=\"Daily\" description=\"Every morning at 9am\" />\n * <RadioItem value=\"weekly\" label=\"Weekly\" description=\"Monday mornings\" />\n * <RadioItem value=\"never\" label=\"Never\" />\n * </RadioGroup>\n *\n * @do Pair every RadioItem with a label — naked radios are unreachable for\n * screen reader users.\n * @dont Use RadioGroup for binary choices — use Switch.\n */\nexport const RadioItem = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioItemProps\n>(function RadioItem({ className, label, description, hideLabel, id, disabled, ...props }, ref) {\n const autoId = useId();\n const fieldId = id ?? autoId;\n const descId = description ? `${fieldId}-desc` : undefined;\n\n return (\n <div className={cn('flex items-start gap-2.5', className)}>\n <RadioGroupPrimitive.Item\n ref={ref}\n id={fieldId}\n disabled={disabled}\n aria-describedby={descId}\n className={cn(\n 'mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border bg-card',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'data-[state=checked]:border-accent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'border-border-strong',\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <span className=\"size-2 rounded-full bg-accent\" aria-hidden />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n\n {label && (\n <div className={cn('flex flex-col gap-0.5', hideLabel && 'sr-only')}>\n <label\n htmlFor={fieldId}\n className={cn(\n 'text-sm text-foreground select-none',\n disabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n {label}\n </label>\n {description && (\n <p id={descId} className=\"text-xs text-foreground-subtle\">\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n );\n});\nRadioItem.displayName = 'RadioItem';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { cn } from '@/lib/utils';\n\n/**\n * Custom scroll container with consistent styled scrollbars across OS / browsers.\n * Use when the default OS scrollbar would visually clash (sidebars, command\n * palettes, code panes). Falls back to native scroll inside the viewport.\n *\n * @example\n * <ScrollArea className=\"h-64 rounded-md border border-border\">\n * <div className=\"p-3\">…long content…</div>\n * </ScrollArea>\n */\nexport const ScrollArea = forwardRef<\n ElementRef<typeof ScrollAreaPrimitive.Root>,\n ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(function ScrollArea({ className, children, ...props }, ref) {\n return (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n});\nScrollArea.displayName = 'ScrollArea';\n\nexport const ScrollBar = forwardRef<\n ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(function ScrollBar({ className, orientation = 'vertical', ...props }, ref) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors duration-[var(--duration-fast)]',\n orientation === 'vertical' && 'h-full w-2 border-l border-l-transparent p-px',\n orientation === 'horizontal' && 'h-2 flex-col border-t border-t-transparent p-px',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border-strong\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n});\nScrollBar.displayName = 'ScrollBar';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport { cn } from '@/lib/utils';\n\n/**\n * Hairline divider. Decorative by default (no role announced). Pass\n * `decorative={false}` when the separator carries semantic meaning, e.g.\n * splitting two regions in a landmark.\n *\n * @example Section divider\n * <Separator className=\"my-6\" />\n *\n * @example Vertical inside a toolbar\n * <Separator orientation=\"vertical\" className=\"h-5 mx-2\" />\n */\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator(\n { className, orientation = 'horizontal', decorative = true, ...props },\n ref,\n) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n orientation={orientation}\n decorative={decorative}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className,\n )}\n {...props}\n />\n );\n});\nSeparator.displayName = 'Separator';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\n/* -----------------------------------------------------------------------------\n * Sheet — drawer-style overlay. Built on Radix Dialog (focus trap, escape,\n * click-outside come from there). Slides in from one of four sides.\n * --------------------------------------------------------------------------- */\n\nexport const Sheet = DialogPrimitive.Root;\nexport const SheetTrigger = DialogPrimitive.Trigger;\nexport const SheetClose = DialogPrimitive.Close;\nexport const SheetPortal = DialogPrimitive.Portal;\n\nconst SheetOverlay = forwardRef<\n ElementRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(function SheetOverlay({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-[var(--z-overlay)] bg-neutral-950/60 backdrop-blur-[2px]',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n className,\n )}\n {...props}\n />\n );\n});\nSheetOverlay.displayName = 'SheetOverlay';\n\nconst sheet = cva(\n [\n 'fixed z-[var(--z-modal)] bg-card text-card-foreground shadow-lg',\n 'flex flex-col gap-4 p-6',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:duration-[var(--duration-base)] data-[state=open]:duration-[var(--duration-slow)]',\n ],\n {\n variants: {\n side: {\n top: 'inset-x-0 top-0 border-b border-border data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top',\n bottom:\n 'inset-x-0 bottom-0 border-t border-border data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom',\n left: 'inset-y-0 left-0 h-full w-3/4 max-w-md border-r border-border data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left',\n right:\n 'inset-y-0 right-0 h-full w-3/4 max-w-md border-l border-border data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right',\n },\n },\n defaultVariants: { side: 'right' },\n },\n);\n\nexport interface SheetContentProps\n extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof sheet> {\n showClose?: boolean;\n}\n\nexport const SheetContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n SheetContentProps\n>(function SheetContent({ className, children, side = 'right', showClose = true, ...props }, ref) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <DialogPrimitive.Content ref={ref} className={cn(sheet({ side }), className)} {...props}>\n {children}\n {showClose && (\n <DialogPrimitive.Close\n aria-label=\"Close\"\n className={cn(\n 'absolute right-4 top-4 inline-flex size-8 items-center justify-center rounded-md text-foreground-subtle',\n 'hover:bg-background-muted hover:text-foreground',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card',\n 'transition-colors duration-[var(--duration-fast)]',\n )}\n >\n <X className=\"size-4\" aria-hidden />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </SheetPortal>\n );\n});\nSheetContent.displayName = 'SheetContent';\n\nexport function SheetHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex flex-col gap-1', className)} {...props} />;\n}\nSheetHeader.displayName = 'SheetHeader';\n\nexport function SheetFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('mt-auto flex flex-col-reverse gap-2 pt-4 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\nSheetFooter.displayName = 'SheetFooter';\n\nexport const SheetTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function SheetTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold text-foreground leading-tight', className)}\n {...props}\n />\n );\n});\nSheetTitle.displayName = 'SheetTitle';\n\nexport const SheetDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function SheetDescription({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-foreground-muted', className)}\n {...props}\n />\n );\n});\nSheetDescription.displayName = 'SheetDescription';\n\n/**\n * @example Right-side filter drawer\n * <Sheet>\n * <SheetTrigger asChild><Button variant=\"outline\">Filters</Button></SheetTrigger>\n * <SheetContent side=\"right\">\n * <SheetHeader>\n * <SheetTitle>Filters</SheetTitle>\n * <SheetDescription>Refine the result set.</SheetDescription>\n * </SheetHeader>\n * …\n * <SheetFooter>\n * <SheetClose asChild><Button variant=\"outline\">Cancel</Button></SheetClose>\n * <Button>Apply</Button>\n * </SheetFooter>\n * </SheetContent>\n * </Sheet>\n *\n * @do Use right side for filters/inspectors, left for navigation, bottom for\n * mobile sheets.\n * @dont Use a full-screen sheet on desktop — prefer Dialog or a dedicated page.\n */\n","import {\n createContext,\n forwardRef,\n useContext,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronDown, ChevronsLeft, ChevronsRight } from '@/icons';\nimport { cn } from '@/lib/utils';\n\ninterface SidebarContextValue {\n collapsed: boolean;\n}\nconst SidebarContext = createContext<SidebarContextValue>({ collapsed: false });\n\n/** Read the parent Sidebar's collapsed state. Useful for brand/footer slots\n * that need to swap between full and compact rendering. */\nexport function useSidebar(): SidebarContextValue {\n return useContext(SidebarContext);\n}\n\nexport interface SidebarProps extends HTMLAttributes<HTMLElement> {\n /** Default state on first mount. Use `defaultCollapsed` for uncontrolled. */\n defaultCollapsed?: boolean;\n /** Controlled collapsed state. */\n collapsed?: boolean;\n /** Called when the user toggles via the rail or keyboard. */\n onCollapsedChange?: (next: boolean) => void;\n /** Header slot pinned to the top (brand, workspace switcher, etc.). */\n header?: ReactNode;\n /** Footer slot pinned to the bottom (user card, version, etc.). */\n footer?: ReactNode;\n}\n\n/**\n * App-level navigation rail. Holds `SidebarSection` → `SidebarItem` lists,\n * and optionally a `footer`. Supports collapse to icon-only on desktop.\n *\n * @example\n * <Sidebar footer={<UserCard />}>\n * <SidebarSection label=\"Workspace\">\n * <SidebarItem icon={<Home />} active>Home</SidebarItem>\n * <SidebarItem icon={<Folder />}>Projects</SidebarItem>\n * </SidebarSection>\n * <SidebarSection label=\"Account\">\n * <SidebarItem icon={<Settings />}>Settings</SidebarItem>\n * </SidebarSection>\n * </Sidebar>\n *\n * @do Use 1–3 sections. More than that signals the IA needs restructuring.\n * @dont Hide critical navigation under the collapsed state — keep icons\n * always visible with tooltips.\n */\nexport const Sidebar = forwardRef<HTMLElement, SidebarProps>(function Sidebar(\n {\n defaultCollapsed = false,\n collapsed: controlled,\n onCollapsedChange,\n header,\n footer,\n className,\n children,\n ...props\n },\n ref,\n) {\n const [internal, setInternal] = useState(defaultCollapsed);\n const collapsed = controlled ?? internal;\n const setCollapsed = (next: boolean) => {\n if (controlled === undefined) setInternal(next);\n onCollapsedChange?.(next);\n };\n\n return (\n <SidebarContext.Provider value={{ collapsed }}>\n <aside\n ref={ref}\n aria-label=\"Primary\"\n className={cn(\n 'sticky top-0 hidden md:flex h-screen shrink-0 flex-col gap-2 border-r border-border bg-background-subtle',\n 'transition-[width] duration-[var(--duration-base)] ease-[var(--ease-out)]',\n collapsed ? 'w-14' : 'w-60',\n className,\n )}\n {...props}\n >\n {header && (\n <div\n className={cn(\n 'flex h-14 shrink-0 items-center overflow-hidden border-b border-border',\n collapsed ? 'justify-center px-2' : 'px-3',\n )}\n >\n {header}\n </div>\n )}\n <div className=\"flex-1 overflow-y-auto py-3\">{children}</div>\n {footer && (\n <div className=\"border-t border-border p-2\">{footer}</div>\n )}\n <button\n type=\"button\"\n onClick={() => setCollapsed(!collapsed)}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n aria-expanded={!collapsed}\n className={cn(\n 'flex h-8 items-center gap-2 mx-2 mb-2 rounded-md px-2 text-foreground-subtle',\n 'hover:bg-background-muted hover:text-foreground outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'transition-colors duration-[var(--duration-fast)]',\n )}\n >\n {collapsed ? <ChevronsRight className=\"size-4\" aria-hidden /> : <ChevronsLeft className=\"size-4\" aria-hidden />}\n {!collapsed && <span className=\"text-xs font-medium\">Collapse</span>}\n </button>\n </aside>\n </SidebarContext.Provider>\n );\n});\nSidebar.displayName = 'Sidebar';\n\nexport interface SidebarSectionProps extends HTMLAttributes<HTMLDivElement> {\n /** Visible section header. Hidden when collapsed. */\n label?: ReactNode;\n}\n\nexport function SidebarSection({ label, className, children, ...props }: SidebarSectionProps) {\n const { collapsed } = useContext(SidebarContext);\n return (\n <div className={cn('mb-3', className)} {...props}>\n {label && !collapsed && (\n <div className=\"px-4 pb-1 pt-2 text-xs font-medium text-foreground-subtle uppercase tracking-wide\">\n {label}\n </div>\n )}\n <ul className=\"flex flex-col gap-px\">{children}</ul>\n </div>\n );\n}\nSidebarSection.displayName = 'SidebarSection';\n\nexport interface SidebarItemProps extends HTMLAttributes<HTMLAnchorElement> {\n /** Lucide icon shown to the left. */\n icon?: ReactNode;\n /** Mark as the current page. */\n active?: boolean;\n /** Optional `href` — when absent, renders as a `<button>` so consumers can\n * bind their own handler / routing wrapper via `onClick`. */\n href?: string;\n /** Trailing badge / counter slot. */\n trailing?: ReactNode;\n /** Render a sub-item indented under a parent. */\n sub?: boolean;\n}\n\nexport function SidebarItem({\n icon,\n active,\n href,\n trailing,\n sub,\n className,\n children,\n ...props\n}: SidebarItemProps) {\n const { collapsed } = useContext(SidebarContext);\n const Comp: any = href ? 'a' : 'button';\n return (\n <li>\n <Comp\n href={href}\n aria-current={active ? 'page' : undefined}\n className={cn(\n 'mx-2 flex h-8 items-center gap-2 rounded-md px-2 text-sm outline-none',\n 'transition-colors duration-[var(--duration-fast)]',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n active\n ? 'bg-background-muted text-foreground font-medium'\n : 'text-foreground-muted hover:bg-background-muted hover:text-foreground',\n sub && !collapsed && 'ml-6',\n collapsed && 'justify-center',\n className,\n )}\n {...props}\n >\n {icon && <span className=\"flex shrink-0 items-center [&_svg]:size-4\">{icon}</span>}\n {!collapsed && <span className=\"flex-1 truncate text-left\">{children}</span>}\n {!collapsed && trailing && <span className=\"ml-auto\">{trailing}</span>}\n </Comp>\n </li>\n );\n}\nSidebarItem.displayName = 'SidebarItem';\n\n/** Lightweight collapsible sub-section inside the sidebar. */\nexport interface SidebarGroupProps {\n icon?: ReactNode;\n label: ReactNode;\n defaultOpen?: boolean;\n children: ReactNode;\n}\n\nexport function SidebarGroup({ icon, label, defaultOpen = true, children }: SidebarGroupProps) {\n const { collapsed } = useContext(SidebarContext);\n const [open, setOpen] = useState(defaultOpen);\n if (collapsed) return <>{children}</>;\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n aria-expanded={open}\n className={cn(\n 'mx-2 flex h-8 w-[calc(100%-1rem)] items-center gap-2 rounded-md px-2 text-sm text-foreground-muted outline-none',\n 'transition-colors duration-[var(--duration-fast)]',\n 'hover:bg-background-muted hover:text-foreground',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n )}\n >\n {icon && <span className=\"flex shrink-0 items-center [&_svg]:size-4\">{icon}</span>}\n <span className=\"flex-1 text-left\">{label}</span>\n <ChevronDown className={cn('size-3.5 transition-transform', open && 'rotate-180')} aria-hidden />\n </button>\n {open && <ul className=\"flex flex-col gap-px\">{children}</ul>}\n </li>\n );\n}\nSidebarGroup.displayName = 'SidebarGroup';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as SliderPrimitive from '@radix-ui/react-slider';\nimport { cn } from '@/lib/utils';\n\nexport interface SliderProps\n extends Omit<ComponentPropsWithoutRef<typeof SliderPrimitive.Root>, 'value' | 'defaultValue'> {\n /**\n * Controlled value. Pass `[n]` for a single-thumb slider, `[a, b]` for a range slider.\n */\n value?: number[];\n defaultValue?: number[];\n /** Inline label rendered above the slider. */\n label?: ReactNode;\n /** Show the numeric value next to the label. */\n showValue?: boolean;\n /** Format the displayed value (e.g. `(v) => \\`${v}%\\``). */\n formatValue?: (value: number) => string;\n}\n\n/**\n * Single- or range-thumb slider. Pass one item in `value` for a single\n * thumb, two for a range.\n *\n * @example Single value\n * <Slider label=\"Volume\" showValue defaultValue={[60]} max={100} step={1} />\n *\n * @example Price range\n * <Slider label=\"Price\"\n * defaultValue={[50, 250]}\n * min={0} max={500} step={10}\n * formatValue={(v) => \\`$\\${v}\\`}\n * showValue />\n *\n * @do Use `showValue` when the absolute number matters (price, volume, weight).\n * @dont Hide the value when users will need to reason about exact thresholds.\n */\nexport const Slider = forwardRef<ElementRef<typeof SliderPrimitive.Root>, SliderProps>(\n function Slider(\n {\n className,\n label,\n showValue,\n formatValue = (v) => String(v),\n value,\n defaultValue,\n ...props\n },\n ref,\n ) {\n const currentValue = value ?? defaultValue ?? [0];\n const isRange = currentValue.length > 1;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n {(label || showValue) && (\n <div className=\"flex items-center justify-between\">\n {label && <span className=\"text-sm font-medium text-foreground\">{label}</span>}\n {showValue && (\n <span className=\"text-xs tabular text-foreground-muted font-mono\">\n {isRange\n ? `${formatValue(currentValue[0])} – ${formatValue(currentValue[1])}`\n : formatValue(currentValue[0])}\n </span>\n )}\n </div>\n )}\n\n <SliderPrimitive.Root\n ref={ref}\n value={value}\n defaultValue={defaultValue}\n className=\"relative flex w-full touch-none select-none items-center\"\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-1 w-full grow overflow-hidden rounded-full bg-background-muted\">\n <SliderPrimitive.Range className=\"absolute h-full bg-accent\" />\n </SliderPrimitive.Track>\n {currentValue.map((_, i) => (\n <SliderPrimitive.Thumb\n key={i}\n className={cn(\n 'block size-4 rounded-full border-2 border-accent bg-card shadow-sm',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'transition-transform duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'hover:scale-110 disabled:pointer-events-none disabled:opacity-50',\n )}\n aria-label={isRange ? (i === 0 ? 'Minimum' : 'Maximum') : (label ? String(label) : 'Value')}\n />\n ))}\n </SliderPrimitive.Root>\n </div>\n );\n },\n);\n\nSlider.displayName = 'Slider';\n","import { forwardRef, type SVGProps } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface SpinnerProps extends SVGProps<SVGSVGElement> {\n /** Visual weight. */\n tone?: 'accent' | 'neutral' | 'on-accent';\n /** Pixel size. */\n size?: 'sm' | 'md' | 'lg';\n /** Accessible label. Required unless `decorative` is true. */\n label?: string;\n /** Hide from assistive tech (set when a parent already announces busy state). */\n decorative?: boolean;\n}\n\nconst sizeMap = { sm: 'size-3.5', md: 'size-4', lg: 'size-6' };\nconst toneMap = {\n accent: 'text-accent',\n neutral: 'text-foreground-subtle',\n 'on-accent': 'text-on-accent',\n};\n\n/**\n * Small indeterminate progress indicator. Use when the operation duration is\n * unknown and Progress isn't appropriate.\n *\n * @example\n * <Spinner label=\"Loading users\" />\n * <Button loading>Saving…</Button> // uses Spinner internally\n *\n * @do Provide a `label` so the busy state is announced.\n * @dont Use a Spinner for tasks that take 300ms+; use Skeleton instead.\n */\nexport const Spinner = forwardRef<SVGSVGElement, SpinnerProps>(function Spinner(\n { className, tone = 'accent', size = 'md', label, decorative, ...props },\n ref,\n) {\n return (\n <svg\n ref={ref}\n viewBox=\"0 0 24 24\"\n role={decorative ? undefined : 'status'}\n aria-label={decorative ? undefined : label ?? 'Loading'}\n aria-hidden={decorative || undefined}\n className={cn('animate-spin', sizeMap[size], toneMap[tone], className)}\n {...props}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeOpacity={0.2} fill=\"none\" />\n <path\n d=\"M12 2a10 10 0 0 1 10 10\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n );\n});\nSpinner.displayName = 'Spinner';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { Check } from '@/icons';\nimport { cn } from '@/lib/utils';\n\nexport interface Step {\n /** Step heading. */\n title: ReactNode;\n /** Optional secondary description, only shown in vertical orientation. */\n description?: ReactNode;\n}\n\nexport interface StepperProps extends HTMLAttributes<HTMLOListElement> {\n /** Ordered list of steps. */\n steps: Step[];\n /** 0-indexed active step. Steps before it are marked complete. */\n current: number;\n /** Layout direction. */\n orientation?: 'horizontal' | 'vertical';\n}\n\n/**\n * Multi-step progress indicator. Use the horizontal variant in narrow flows\n * (top of an onboarding modal) and vertical for deeper context.\n *\n * @example Onboarding\n * <Stepper\n * current={step}\n * steps={[\n * { title: 'Workspace' },\n * { title: 'Invite team' },\n * { title: 'Connect data' },\n * { title: 'Done' },\n * ]}\n * />\n *\n * @do Keep titles 1–2 words. Save explanations for the page body.\n * @dont Use Stepper for free-form navigation. It implies a linear flow.\n */\nexport const Stepper = forwardRef<HTMLOListElement, StepperProps>(function Stepper(\n { steps, current, orientation = 'horizontal', className, ...props },\n ref,\n) {\n return (\n <ol\n ref={ref}\n aria-label=\"Progress\"\n className={cn(\n orientation === 'horizontal' ? 'flex w-full items-center' : 'flex flex-col gap-6',\n className,\n )}\n {...props}\n >\n {steps.map((step, i) => {\n const state = i < current ? 'complete' : i === current ? 'current' : 'upcoming';\n const isLast = i === steps.length - 1;\n return (\n <li\n key={i}\n aria-current={state === 'current' ? 'step' : undefined}\n className={cn(\n orientation === 'horizontal'\n ? 'flex flex-1 items-center gap-3 last:flex-initial'\n : 'flex items-start gap-3',\n )}\n >\n <div className={cn(orientation === 'horizontal' ? 'flex items-center gap-3' : 'flex flex-col items-center')}>\n <span\n aria-hidden\n className={cn(\n 'inline-flex size-7 items-center justify-center rounded-full text-xs font-semibold transition-colors',\n state === 'complete' && 'bg-accent text-on-accent',\n state === 'current' && 'bg-card border-2 border-accent text-accent',\n state === 'upcoming' && 'bg-background-muted text-foreground-subtle border border-border',\n )}\n >\n {state === 'complete' ? <Check className=\"size-4\" /> : i + 1}\n </span>\n {orientation === 'vertical' && !isLast && (\n <span\n className={cn(\n 'mt-1 w-px flex-1 min-h-6',\n i < current ? 'bg-accent' : 'bg-border',\n )}\n />\n )}\n </div>\n <div className={cn('flex flex-col', orientation === 'horizontal' && 'min-w-0')}>\n <span\n className={cn(\n 'text-sm font-medium',\n state === 'upcoming' ? 'text-foreground-subtle' : 'text-foreground',\n )}\n >\n {step.title}\n </span>\n {orientation === 'vertical' && step.description && (\n <p className=\"text-xs text-foreground-muted mt-0.5\">{step.description}</p>\n )}\n </div>\n {orientation === 'horizontal' && !isLast && (\n <span\n aria-hidden\n className={cn(\n 'h-px flex-1 mx-2',\n i < current ? 'bg-accent' : 'bg-border',\n )}\n />\n )}\n </li>\n );\n })}\n </ol>\n );\n});\nStepper.displayName = 'Stepper';\n","import {\n forwardRef,\n useId,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport { cn } from '@/lib/utils';\n\nexport interface SwitchProps\n extends Omit<ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, 'asChild'> {\n /** Inline label rendered to the right. */\n label?: ReactNode;\n /** Secondary description rendered below the label. */\n description?: ReactNode;\n /** Position the label before the switch instead of after. */\n labelPosition?: 'before' | 'after';\n /** Visual size. */\n size?: 'sm' | 'md';\n /** Hide the label visually while keeping it accessible. */\n hideLabel?: boolean;\n}\n\nconst trackSize = {\n sm: 'h-4 w-7',\n md: 'h-5 w-9',\n} as const;\nconst thumbSize = {\n sm: 'size-3 data-[state=checked]:translate-x-3',\n md: 'size-4 data-[state=checked]:translate-x-4',\n} as const;\n\n/**\n * Binary on/off toggle for instant-apply settings. Use Checkbox when the\n * choice is part of a form that needs explicit submission.\n *\n * @example Instant toggle\n * <Switch label=\"Email digest\" checked={on} onCheckedChange={setOn} />\n *\n * @example With description\n * <Switch label=\"Two-factor authentication\"\n * description=\"Required for admins on production accounts.\"\n * checked={tfa}\n * onCheckedChange={setTfa} />\n *\n * @do Use Switch when the change takes effect immediately. Pair with\n * a toast confirming the new state.\n * @dont Use Switch inside a form that requires submission — Checkbox\n * better matches that mental model.\n */\nexport const Switch = forwardRef<ElementRef<typeof SwitchPrimitive.Root>, SwitchProps>(\n function Switch(\n {\n className,\n label,\n description,\n labelPosition = 'after',\n size = 'md',\n hideLabel,\n id,\n disabled,\n ...props\n },\n ref,\n ) {\n const autoId = useId();\n const fieldId = id ?? autoId;\n const descId = description ? `${fieldId}-desc` : undefined;\n\n const control = (\n <SwitchPrimitive.Root\n ref={ref}\n id={fieldId}\n disabled={disabled}\n aria-describedby={descId}\n className={cn(\n 'peer inline-flex shrink-0 items-center rounded-full border-2 border-transparent',\n 'transition-colors duration-[var(--duration-base)] ease-[var(--ease-out)]',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:bg-accent data-[state=unchecked]:bg-neutral-300 dark:data-[state=unchecked]:bg-neutral-700',\n trackSize[size],\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n 'pointer-events-none block rounded-full bg-white shadow-sm',\n 'transition-transform duration-[var(--duration-base)] ease-[var(--ease-out)]',\n 'translate-x-0',\n thumbSize[size],\n )}\n />\n </SwitchPrimitive.Root>\n );\n\n const labelBlock = label && (\n <div className={cn('flex flex-col gap-0.5 select-none', hideLabel && 'sr-only')}>\n <label\n htmlFor={fieldId}\n className={cn(\n 'text-sm text-foreground',\n disabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n {label}\n </label>\n {description && (\n <p id={descId} className=\"text-xs text-foreground-subtle\">\n {description}\n </p>\n )}\n </div>\n );\n\n return (\n <div className={cn('inline-flex items-center gap-2.5', className)}>\n {labelPosition === 'before' && labelBlock}\n {control}\n {labelPosition === 'after' && labelBlock}\n </div>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\n/* -----------------------------------------------------------------------------\n * Two visual variants — `underline` (refined-minimal default) and `pills`.\n * Variant is set on `TabsList`; trigger styles auto-derive via data-attr.\n * --------------------------------------------------------------------------- */\n\nexport const Tabs = TabsPrimitive.Root;\n\nconst list = cva('inline-flex items-center', {\n variants: {\n variant: {\n underline: 'gap-4 border-b border-border w-full',\n pills: 'gap-1 rounded-lg bg-background-muted p-1',\n },\n size: {\n sm: 'h-9 text-xs',\n md: 'h-10 text-sm',\n lg: 'h-11 text-sm',\n },\n },\n defaultVariants: { variant: 'underline', size: 'md' },\n});\n\nexport interface TabsListProps\n extends ComponentPropsWithoutRef<typeof TabsPrimitive.List>,\n VariantProps<typeof list> {}\n\nexport const TabsList = forwardRef<ElementRef<typeof TabsPrimitive.List>, TabsListProps>(\n function TabsList({ className, variant = 'underline', size, ...props }, ref) {\n return (\n <TabsPrimitive.List\n ref={ref}\n data-variant={variant}\n className={cn(list({ variant, size }), className)}\n {...props}\n />\n );\n },\n);\nTabsList.displayName = 'TabsList';\n\nexport const TabsTrigger = forwardRef<\n ElementRef<typeof TabsPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(function TabsTrigger({ className, ...props }, ref) {\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center gap-2 whitespace-nowrap font-medium',\n 'outline-none transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:pointer-events-none disabled:opacity-50',\n // Underline variant\n '[[data-variant=underline]_&]:relative [[data-variant=underline]_&]:h-full',\n '[[data-variant=underline]_&]:px-1 [[data-variant=underline]_&]:text-foreground-muted',\n '[[data-variant=underline]_&]:hover:text-foreground',\n '[[data-variant=underline]_&]:data-[state=active]:text-foreground',\n '[[data-variant=underline]_&]:data-[state=active]:after:absolute',\n '[[data-variant=underline]_&]:data-[state=active]:after:inset-x-0',\n '[[data-variant=underline]_&]:data-[state=active]:after:-bottom-px',\n '[[data-variant=underline]_&]:data-[state=active]:after:h-0.5',\n '[[data-variant=underline]_&]:data-[state=active]:after:bg-accent',\n // Pills variant\n '[[data-variant=pills]_&]:h-full [[data-variant=pills]_&]:rounded-md [[data-variant=pills]_&]:px-3',\n '[[data-variant=pills]_&]:text-foreground-muted',\n '[[data-variant=pills]_&]:hover:text-foreground',\n '[[data-variant=pills]_&]:data-[state=active]:bg-card',\n '[[data-variant=pills]_&]:data-[state=active]:text-foreground',\n '[[data-variant=pills]_&]:data-[state=active]:shadow-xs',\n className,\n )}\n {...props}\n />\n );\n});\nTabsTrigger.displayName = 'TabsTrigger';\n\nexport const TabsContent = forwardRef<\n ElementRef<typeof TabsPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(function TabsContent({ className, ...props }, ref) {\n return (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-4 outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n className,\n )}\n {...props}\n />\n );\n});\nTabsContent.displayName = 'TabsContent';\n\n/**\n * @example Underline (default)\n * <Tabs defaultValue=\"overview\">\n * <TabsList>\n * <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n * <TabsTrigger value=\"activity\">Activity</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"overview\">…</TabsContent>\n * <TabsContent value=\"activity\">…</TabsContent>\n * </Tabs>\n *\n * @example Pills\n * <TabsList variant=\"pills\"><TabsTrigger value=\"all\">All</TabsTrigger>…</TabsList>\n *\n * @do Use `underline` at the top of a page or panel. Use `pills` inside a\n * card or for filter-style switches.\n * @dont Mix variants on the same screen — pick one and commit.\n */\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n type TextareaHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TextareaProps\n extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n /** Visible label above the field. */\n label?: ReactNode;\n /** Hint below the field. Hidden when `error` is set. */\n helperText?: ReactNode;\n /** Validation message. Sets `aria-invalid`. */\n error?: ReactNode;\n /** Grow vertically as content is added. */\n autoResize?: boolean;\n /** Minimum rows when `autoResize`. Defaults to 3. */\n minRows?: number;\n /** Maximum rows before scrolling when `autoResize`. Defaults to 12. */\n maxRows?: number;\n /** Visually hide the label while keeping it accessible. */\n hideLabel?: boolean;\n}\n\n/**\n * Multi-line text input. With `autoResize`, height tracks content from\n * `minRows` to `maxRows`. Without it, behaves like a native `<textarea>`.\n *\n * @example Comment box\n * <Textarea label=\"Note\" autoResize minRows={3} maxRows={10} />\n *\n * @example With error\n * <Textarea label=\"Description\"\n * error={errors.description?.message}\n * {...register('description')} />\n *\n * @do Default to `autoResize` for multi-line free-form input.\n * @dont Add `resize-none` without auto-resize — users will be stuck with a\n * 3-line box for long content.\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n {\n className,\n label,\n helperText,\n error,\n autoResize,\n minRows = 3,\n maxRows = 12,\n hideLabel,\n id,\n onChange,\n value,\n defaultValue,\n ...props\n },\n ref,\n) {\n const autoId = useId();\n const fieldId = id ?? autoId;\n const helperId = `${fieldId}-helper`;\n const errorId = `${fieldId}-error`;\n const innerRef = useRef<HTMLTextAreaElement>(null);\n\n // Stash a ref locally and forward to the consumer.\n const setRef = (node: HTMLTextAreaElement | null) => {\n innerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n };\n\n const recompute = useCallback(() => {\n const el = innerRef.current;\n if (!el || !autoResize) return;\n el.style.height = 'auto';\n const lineHeight = parseFloat(getComputedStyle(el).lineHeight) || 20;\n const maxH = lineHeight * maxRows;\n el.style.height = `${Math.min(el.scrollHeight, maxH)}px`;\n el.style.overflowY = el.scrollHeight > maxH ? 'auto' : 'hidden';\n }, [autoResize, maxRows]);\n\n useEffect(() => {\n if (autoResize) recompute();\n }, [autoResize, recompute, value, defaultValue]);\n\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n {label && (\n <label\n htmlFor={fieldId}\n className={cn(\n 'text-sm font-medium text-foreground',\n hideLabel && 'sr-only',\n )}\n >\n {label}\n </label>\n )}\n <textarea\n ref={setRef}\n id={fieldId}\n rows={minRows}\n value={value}\n defaultValue={defaultValue}\n onChange={(e) => {\n onChange?.(e);\n if (autoResize) recompute();\n }}\n aria-invalid={Boolean(error) || undefined}\n aria-describedby={error ? errorId : helperText ? helperId : undefined}\n className={cn(\n 'rounded-md border bg-card px-3 py-2 text-sm text-foreground',\n 'placeholder:text-foreground-subtle',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)]',\n 'outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'focus-visible:ring-offset-background',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n error\n ? 'border-danger focus-visible:border-danger focus-visible:ring-danger'\n : 'border-border focus-visible:border-accent',\n autoResize ? 'resize-none' : 'resize-y min-h-20',\n )}\n {...props}\n />\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-xs text-danger-text\">\n {error}\n </p>\n ) : helperText ? (\n <p id={helperId} className=\"text-xs text-foreground-subtle\">\n {helperText}\n </p>\n ) : null}\n </div>\n );\n});\n\nTextarea.displayName = 'Textarea';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactElement,\n} from 'react';\nimport * as ToastPrimitive from '@radix-ui/react-toast';\nimport { AlertTriangle, CheckCircle2, Info, X, XCircle } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nexport const ToastProvider = ToastPrimitive.Provider;\n\nexport const ToastViewport = forwardRef<\n ElementRef<typeof ToastPrimitive.Viewport>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Viewport>\n>(function ToastViewport({ className, ...props }, ref) {\n return (\n <ToastPrimitive.Viewport\n ref={ref}\n className={cn(\n 'fixed bottom-0 right-0 z-[var(--z-toast)] flex max-h-screen w-full flex-col-reverse gap-2 p-6',\n 'sm:bottom-auto sm:top-4 sm:right-4 sm:max-w-sm sm:flex-col',\n className,\n )}\n {...props}\n />\n );\n});\nToastViewport.displayName = 'ToastViewport';\n\nconst toast = cva(\n [\n 'group pointer-events-auto relative flex w-full items-start gap-3',\n 'overflow-hidden rounded-lg border p-4 pr-8 shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-80 data-[state=open]:slide-in-from-right-full',\n 'data-[state=closed]:slide-out-to-right-full',\n 'data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)]',\n 'data-[swipe=cancel]:translate-x-0 data-[swipe=cancel]:transition-transform',\n 'data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)]',\n ],\n {\n variants: {\n variant: {\n default: 'border-border bg-card text-card-foreground',\n success: 'border-success-border-soft bg-success-soft text-success-text',\n warning: 'border-warning-border-soft bg-warning-soft text-warning-text',\n danger: 'border-danger-border-soft bg-danger-soft text-danger-text',\n info: 'border-info-border-soft bg-info-soft text-info-text',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nconst iconMap = {\n default: null,\n success: <CheckCircle2 className=\"size-5 text-success-text shrink-0 mt-0.5\" aria-hidden />,\n warning: <AlertTriangle className=\"size-5 text-warning-text shrink-0 mt-0.5\" aria-hidden />,\n danger: <XCircle className=\"size-5 text-danger-text shrink-0 mt-0.5\" aria-hidden />,\n info: <Info className=\"size-5 text-info-text shrink-0 mt-0.5\" aria-hidden />,\n} satisfies Record<'default' | 'success' | 'warning' | 'danger' | 'info', ReactElement | null>;\n\nexport interface ToastProps\n extends ComponentPropsWithoutRef<typeof ToastPrimitive.Root>,\n VariantProps<typeof toast> {}\n\nexport const Toast = forwardRef<ElementRef<typeof ToastPrimitive.Root>, ToastProps>(\n function Toast({ className, variant = 'default', children, ...props }, ref) {\n return (\n <ToastPrimitive.Root ref={ref} className={cn(toast({ variant }), className)} {...props}>\n {iconMap[variant ?? 'default']}\n <div className=\"flex-1 space-y-1\">{children}</div>\n </ToastPrimitive.Root>\n );\n },\n);\nToast.displayName = 'Toast';\n\nexport const ToastTitle = forwardRef<\n ElementRef<typeof ToastPrimitive.Title>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Title>\n>(function ToastTitle({ className, ...props }, ref) {\n return (\n <ToastPrimitive.Title\n ref={ref}\n className={cn('text-sm font-medium', className)}\n {...props}\n />\n );\n});\nToastTitle.displayName = 'ToastTitle';\n\nexport const ToastDescription = forwardRef<\n ElementRef<typeof ToastPrimitive.Description>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Description>\n>(function ToastDescription({ className, ...props }, ref) {\n return (\n <ToastPrimitive.Description\n ref={ref}\n className={cn('text-sm opacity-90', className)}\n {...props}\n />\n );\n});\nToastDescription.displayName = 'ToastDescription';\n\nexport const ToastAction = forwardRef<\n ElementRef<typeof ToastPrimitive.Action>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Action>\n>(function ToastAction({ className, ...props }, ref) {\n return (\n <ToastPrimitive.Action\n ref={ref}\n className={cn(\n 'inline-flex h-8 shrink-0 items-center justify-center rounded-md border border-current bg-transparent px-3 text-sm font-medium',\n 'transition-colors hover:bg-current/10 outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card',\n className,\n )}\n {...props}\n />\n );\n});\nToastAction.displayName = 'ToastAction';\n\nexport const ToastClose = forwardRef<\n ElementRef<typeof ToastPrimitive.Close>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Close>\n>(function ToastClose({ className, ...props }, ref) {\n return (\n <ToastPrimitive.Close\n ref={ref}\n aria-label=\"Close\"\n className={cn(\n 'absolute right-2 top-2 inline-flex size-7 items-center justify-center rounded-md text-foreground-subtle',\n 'opacity-0 transition-opacity group-hover:opacity-100 hover:text-foreground',\n 'outline-none focus-visible:opacity-100 focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"size-4\" aria-hidden />\n </ToastPrimitive.Close>\n );\n});\nToastClose.displayName = 'ToastClose';\n\n/**\n * @example\n * <ToastProvider>\n * …app…\n * <Toast variant=\"success\">\n * <ToastTitle>Saved</ToastTitle>\n * <ToastDescription>Your changes are live.</ToastDescription>\n * <ToastAction altText=\"Undo\">Undo</ToastAction>\n * <ToastClose />\n * </Toast>\n * <ToastViewport />\n * </ToastProvider>\n *\n * @do Use the `useToast()` hook (in `src/hooks/use-toast.ts`) in app code —\n * the components here are the primitives the hook renders.\n * @dont Stack more than two toasts at a time. Newer toasts replace older ones.\n */\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { cn } from '@/lib/utils';\n\n/**\n * Wrap the app in a single `<TooltipProvider>` near the root. All Tooltips\n * share the same `delayDuration` and `skipDelayDuration`.\n */\nexport const TooltipProvider = ({\n delayDuration = 500,\n skipDelayDuration = 200,\n ...props\n}: ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider>) => (\n <TooltipPrimitive.Provider\n delayDuration={delayDuration}\n skipDelayDuration={skipDelayDuration}\n {...props}\n />\n);\n\nexport const TooltipRoot = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(function TooltipContent({ className, sideOffset = 4, ...props }, ref) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-[var(--z-tooltip)] overflow-hidden rounded-md px-2 py-1 text-xs font-medium',\n 'bg-neutral-900 text-neutral-50',\n 'dark:bg-neutral-50 dark:text-neutral-900',\n 'shadow-sm max-w-xs',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n );\n});\nTooltipContent.displayName = 'TooltipContent';\n\nexport interface TooltipProps {\n children: ReactNode;\n label: ReactNode;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n /** Disable showing the tooltip (e.g. when text is not truncated). */\n disabled?: boolean;\n /** Override the global delay. */\n delayDuration?: number;\n}\n\n/**\n * Shorthand for the most common Tooltip case.\n *\n * @example\n * <Tooltip label=\"Copy link\"><IconButton aria-label=\"Copy\" icon={<Copy/>} /></Tooltip>\n *\n * @do Keep tooltip text short — one line, no full sentences. Use a Popover\n * for any content that needs structure.\n * @dont Wrap disabled buttons in Tooltip without `asChild + tabIndex={0}`.\n * Disabled elements don't receive focus, so the tooltip never opens.\n */\nexport function Tooltip({\n children,\n label,\n side = 'top',\n align = 'center',\n disabled,\n delayDuration,\n}: TooltipProps) {\n if (disabled) return <>{children}</>;\n return (\n <TooltipRoot delayDuration={delayDuration}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side} align={align}>\n {label}\n </TooltipContent>\n </TooltipRoot>\n );\n}\nTooltip.displayName = 'Tooltip';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TopNavProps extends HTMLAttributes<HTMLElement> {\n /** Logo / wordmark slot. Shown on the far left. */\n logo: ReactNode;\n /** Primary navigation links — typically a list of `<TopNavLink>`. */\n nav?: ReactNode;\n /** Search / command bar slot — fills the centre on wide screens. */\n search?: ReactNode;\n /** Right-aligned cluster — notifications, theme toggle, user menu. */\n actions?: ReactNode;\n}\n\n/**\n * App-level top bar. Layout: `logo · nav · search · actions`. Search and nav\n * are optional.\n *\n * @example\n * <TopNav\n * logo={<Logo />}\n * nav={<><TopNavLink href=\"/\" active>Home</TopNavLink>…</>}\n * search={<Input type=\"search\" placeholder=\"Search…\" />}\n * actions={<><Bell /><Avatar /></>}\n * />\n *\n * @do Pick one primary nav style — links here or in the Sidebar, not both.\n * @dont Stack two rows of navigation in the TopNav. If you need tabs as well,\n * put them below the bar inside the page content.\n */\nexport const TopNav = forwardRef<HTMLElement, TopNavProps>(function TopNav(\n { logo, nav, search, actions, className, ...props },\n ref,\n) {\n return (\n <header\n ref={ref}\n className={cn(\n 'sticky top-0 z-[var(--z-sticky)] flex h-14 w-full items-center gap-4',\n 'border-b border-border bg-background/80 px-4 backdrop-blur',\n 'supports-[backdrop-filter]:bg-background/60',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-6 shrink-0\">\n {logo}\n {nav && <nav className=\"hidden md:flex items-center gap-1\">{nav}</nav>}\n </div>\n {search && <div className=\"flex-1 max-w-md mx-auto\">{search}</div>}\n {actions && <div className=\"ml-auto flex items-center gap-2 shrink-0\">{actions}</div>}\n </header>\n );\n});\nTopNav.displayName = 'TopNav';\n\nexport interface TopNavLinkProps extends HTMLAttributes<HTMLAnchorElement> {\n href: string;\n active?: boolean;\n}\n\nexport const TopNavLink = forwardRef<HTMLAnchorElement, TopNavLinkProps>(function TopNavLink(\n { href, active, className, children, ...props },\n ref,\n) {\n return (\n <a\n ref={ref}\n href={href}\n aria-current={active ? 'page' : undefined}\n className={cn(\n 'inline-flex h-9 items-center rounded-md px-3 text-sm font-medium outline-none',\n 'transition-colors duration-[var(--duration-fast)]',\n active ? 'text-foreground' : 'text-foreground-muted hover:text-foreground',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n className,\n )}\n {...props}\n >\n {children}\n </a>\n );\n});\nTopNavLink.displayName = 'TopNavLink';\n","import { forwardRef } from 'react';\nimport { DayPicker, type DayPickerProps } from 'react-day-picker';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport 'react-day-picker/style.css';\nimport { cn } from '@/lib/utils';\n\nexport type CalendarProps = DayPickerProps & { className?: string };\n\n/**\n * Standalone calendar surface. Used by DatePicker, but can also be embedded\n * directly in popovers, sheets, or inline forms. Wraps `react-day-picker`.\n */\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(function Calendar(\n { className, classNames, ...props },\n _ref,\n) {\n return (\n <DayPicker\n showOutsideDays\n className={cn('p-3', className)}\n classNames={{\n months: 'flex flex-col gap-4',\n month: 'flex flex-col gap-3',\n caption: 'flex items-center justify-between px-1',\n caption_label: 'text-sm font-medium',\n nav: 'flex items-center gap-1',\n nav_button:\n 'inline-flex h-7 w-7 items-center justify-center rounded-md text-foreground-muted hover:bg-background-muted focus-visible:ring-2 focus-visible:ring-ring outline-none',\n table: 'w-full border-collapse',\n head_row: 'flex',\n head_cell: 'w-9 text-[11px] font-medium text-foreground-subtle',\n row: 'mt-1 flex',\n cell: 'relative h-9 w-9 p-0 text-center',\n day: 'inline-flex h-9 w-9 items-center justify-center rounded-md text-sm hover:bg-background-muted focus-visible:ring-2 focus-visible:ring-ring outline-none',\n day_selected: 'bg-accent text-on-accent hover:bg-accent-700',\n day_today: 'border border-border',\n day_outside: 'text-foreground-subtle',\n day_disabled: 'opacity-40 pointer-events-none',\n day_range_middle: 'bg-accent-soft rounded-none',\n day_hidden: 'invisible',\n ...classNames,\n }}\n components={{\n Chevron: ({ orientation }) =>\n orientation === 'left' ? (\n <ChevronLeft className=\"size-4\" />\n ) : (\n <ChevronRight className=\"size-4\" />\n ),\n }}\n {...props}\n />\n );\n});\n","function isObject(subject) {\n return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction isRecord(subject) {\n return isObject(subject) || Array.isArray(subject);\n}\nfunction canUseDOM() {\n return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}\nfunction areOptionsEqual(optionsA, optionsB) {\n const optionsAKeys = Object.keys(optionsA);\n const optionsBKeys = Object.keys(optionsB);\n if (optionsAKeys.length !== optionsBKeys.length) return false;\n const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}));\n const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}));\n if (breakpointsA !== breakpointsB) return false;\n return optionsAKeys.every(key => {\n const valueA = optionsA[key];\n const valueB = optionsB[key];\n if (typeof valueA === 'function') return `${valueA}` === `${valueB}`;\n if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB;\n return areOptionsEqual(valueA, valueB);\n });\n}\nfunction sortAndMapPluginToOptions(plugins) {\n return plugins.concat().sort((a, b) => a.name > b.name ? 1 : -1).map(plugin => plugin.options);\n}\nfunction arePluginsEqual(pluginsA, pluginsB) {\n if (pluginsA.length !== pluginsB.length) return false;\n const optionsA = sortAndMapPluginToOptions(pluginsA);\n const optionsB = sortAndMapPluginToOptions(pluginsB);\n return optionsA.every((optionA, index) => {\n const optionB = optionsB[index];\n return areOptionsEqual(optionA, optionB);\n });\n}\n\nexport { areOptionsEqual, arePluginsEqual, canUseDOM, sortAndMapPluginToOptions };\n//# sourceMappingURL=embla-carousel-reactive-utils.esm.js.map\n","function isNumber(subject) {\n return typeof subject === 'number';\n}\nfunction isString(subject) {\n return typeof subject === 'string';\n}\nfunction isBoolean(subject) {\n return typeof subject === 'boolean';\n}\nfunction isObject(subject) {\n return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction mathAbs(n) {\n return Math.abs(n);\n}\nfunction mathSign(n) {\n return Math.sign(n);\n}\nfunction deltaAbs(valueB, valueA) {\n return mathAbs(valueB - valueA);\n}\nfunction factorAbs(valueB, valueA) {\n if (valueB === 0 || valueA === 0) return 0;\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0;\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA));\n return mathAbs(diff / valueB);\n}\nfunction roundToTwoDecimals(num) {\n return Math.round(num * 100) / 100;\n}\nfunction arrayKeys(array) {\n return objectKeys(array).map(Number);\n}\nfunction arrayLast(array) {\n return array[arrayLastIndex(array)];\n}\nfunction arrayLastIndex(array) {\n return Math.max(0, array.length - 1);\n}\nfunction arrayIsLastIndex(array, index) {\n return index === arrayLastIndex(array);\n}\nfunction arrayFromNumber(n, startAt = 0) {\n return Array.from(Array(n), (_, i) => startAt + i);\n}\nfunction objectKeys(object) {\n return Object.keys(object);\n}\nfunction objectsMergeDeep(objectA, objectB) {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach(key => {\n const valueA = mergedObjects[key];\n const valueB = currentObject[key];\n const areObjects = isObject(valueA) && isObject(valueB);\n mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB;\n });\n return mergedObjects;\n }, {});\n}\nfunction isMouseEvent(evt, ownerWindow) {\n return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent;\n}\n\nfunction Alignment(align, viewSize) {\n const predefined = {\n start,\n center,\n end\n };\n function start() {\n return 0;\n }\n function center(n) {\n return end(n) / 2;\n }\n function end(n) {\n return viewSize - n;\n }\n function measure(n, index) {\n if (isString(align)) return predefined[align](n);\n return align(viewSize, n, index);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction EventStore() {\n let listeners = [];\n function add(node, type, handler, options = {\n passive: true\n }) {\n let removeListener;\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options);\n removeListener = () => node.removeEventListener(type, handler, options);\n } else {\n const legacyMediaQueryList = node;\n legacyMediaQueryList.addListener(handler);\n removeListener = () => legacyMediaQueryList.removeListener(handler);\n }\n listeners.push(removeListener);\n return self;\n }\n function clear() {\n listeners = listeners.filter(remove => remove());\n }\n const self = {\n add,\n clear\n };\n return self;\n}\n\nfunction Animations(ownerDocument, ownerWindow, update, render) {\n const documentVisibleHandler = EventStore();\n const fixedTimeStep = 1000 / 60;\n let lastTimeStamp = null;\n let accumulatedTime = 0;\n let animationId = 0;\n function init() {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset();\n });\n }\n function destroy() {\n stop();\n documentVisibleHandler.clear();\n }\n function animate(timeStamp) {\n if (!animationId) return;\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp;\n update();\n update();\n }\n const timeElapsed = timeStamp - lastTimeStamp;\n lastTimeStamp = timeStamp;\n accumulatedTime += timeElapsed;\n while (accumulatedTime >= fixedTimeStep) {\n update();\n accumulatedTime -= fixedTimeStep;\n }\n const alpha = accumulatedTime / fixedTimeStep;\n render(alpha);\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n }\n function start() {\n if (animationId) return;\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n function stop() {\n ownerWindow.cancelAnimationFrame(animationId);\n lastTimeStamp = null;\n accumulatedTime = 0;\n animationId = 0;\n }\n function reset() {\n lastTimeStamp = null;\n accumulatedTime = 0;\n }\n const self = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n };\n return self;\n}\n\nfunction Axis(axis, contentDirection) {\n const isRightToLeft = contentDirection === 'rtl';\n const isVertical = axis === 'y';\n const scroll = isVertical ? 'y' : 'x';\n const cross = isVertical ? 'x' : 'y';\n const sign = !isVertical && isRightToLeft ? -1 : 1;\n const startEdge = getStartEdge();\n const endEdge = getEndEdge();\n function measureSize(nodeRect) {\n const {\n height,\n width\n } = nodeRect;\n return isVertical ? height : width;\n }\n function getStartEdge() {\n if (isVertical) return 'top';\n return isRightToLeft ? 'right' : 'left';\n }\n function getEndEdge() {\n if (isVertical) return 'bottom';\n return isRightToLeft ? 'left' : 'right';\n }\n function direction(n) {\n return n * sign;\n }\n const self = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n };\n return self;\n}\n\nfunction Limit(min = 0, max = 0) {\n const length = mathAbs(min - max);\n function reachedMin(n) {\n return n < min;\n }\n function reachedMax(n) {\n return n > max;\n }\n function reachedAny(n) {\n return reachedMin(n) || reachedMax(n);\n }\n function constrain(n) {\n if (!reachedAny(n)) return n;\n return reachedMin(n) ? min : max;\n }\n function removeOffset(n) {\n if (!length) return n;\n return n - length * Math.ceil((n - max) / length);\n }\n const self = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n };\n return self;\n}\n\nfunction Counter(max, start, loop) {\n const {\n constrain\n } = Limit(0, max);\n const loopEnd = max + 1;\n let counter = withinLimit(start);\n function withinLimit(n) {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd);\n }\n function get() {\n return counter;\n }\n function set(n) {\n counter = withinLimit(n);\n return self;\n }\n function add(n) {\n return clone().set(get() + n);\n }\n function clone() {\n return Counter(max, get(), loop);\n }\n const self = {\n get,\n set,\n add,\n clone\n };\n return self;\n}\n\nfunction DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) {\n const {\n cross: crossAxis,\n direction\n } = axis;\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\n const nonPassiveEvent = {\n passive: false\n };\n const initEvents = EventStore();\n const dragEvents = EventStore();\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20));\n const snapForceBoost = {\n mouse: 300,\n touch: 400\n };\n const freeForceBoost = {\n mouse: 500,\n touch: 600\n };\n const baseSpeed = dragFree ? 43 : 25;\n let isMoving = false;\n let startScroll = 0;\n let startCross = 0;\n let pointerIsDown = false;\n let preventScroll = false;\n let preventClick = false;\n let isMouse = false;\n function init(emblaApi) {\n if (!watchDrag) return;\n function downIfAllowed(evt) {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt);\n }\n const node = rootNode;\n initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true);\n }\n function destroy() {\n initEvents.clear();\n dragEvents.clear();\n }\n function addDragEvents() {\n const node = isMouse ? ownerDocument : rootNode;\n dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up);\n }\n function isFocusNode(node) {\n const nodeName = node.nodeName || '';\n return focusNodes.includes(nodeName);\n }\n function forceBoost() {\n const boost = dragFree ? freeForceBoost : snapForceBoost;\n const type = isMouse ? 'mouse' : 'touch';\n return boost[type];\n }\n function allowedForce(force, targetChanged) {\n const next = index.add(mathSign(force) * -1);\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance;\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce;\n if (skipSnaps && targetChanged) return baseForce * 0.5;\n return scrollTarget.byIndex(next.get(), 0).distance;\n }\n function down(evt) {\n const isMouseEvt = isMouseEvent(evt, ownerWindow);\n isMouse = isMouseEvt;\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving;\n isMoving = deltaAbs(target.get(), location.get()) >= 2;\n if (isMouseEvt && evt.button !== 0) return;\n if (isFocusNode(evt.target)) return;\n pointerIsDown = true;\n dragTracker.pointerDown(evt);\n scrollBody.useFriction(0).useDuration(0);\n target.set(location);\n addDragEvents();\n startScroll = dragTracker.readPoint(evt);\n startCross = dragTracker.readPoint(evt, crossAxis);\n eventHandler.emit('pointerDown');\n }\n function move(evt) {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow);\n if (isTouchEvt && evt.touches.length >= 2) return up(evt);\n const lastScroll = dragTracker.readPoint(evt);\n const lastCross = dragTracker.readPoint(evt, crossAxis);\n const diffScroll = deltaAbs(lastScroll, startScroll);\n const diffCross = deltaAbs(lastCross, startCross);\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt);\n preventScroll = diffScroll > diffCross;\n if (!preventScroll) return up(evt);\n }\n const diff = dragTracker.pointerMove(evt);\n if (diffScroll > dragThreshold) preventClick = true;\n scrollBody.useFriction(0.3).useDuration(0.75);\n animation.start();\n target.add(direction(diff));\n evt.preventDefault();\n }\n function up(evt) {\n const currentLocation = scrollTarget.byDistance(0, false);\n const targetChanged = currentLocation.index !== index.get();\n const rawForce = dragTracker.pointerUp(evt) * forceBoost();\n const force = allowedForce(direction(rawForce), targetChanged);\n const forceFactor = factorAbs(rawForce, force);\n const speed = baseSpeed - 10 * forceFactor;\n const friction = baseFriction + forceFactor / 50;\n preventScroll = false;\n pointerIsDown = false;\n dragEvents.clear();\n scrollBody.useDuration(speed).useFriction(friction);\n scrollTo.distance(force, !dragFree);\n isMouse = false;\n eventHandler.emit('pointerUp');\n }\n function click(evt) {\n if (preventClick) {\n evt.stopPropagation();\n evt.preventDefault();\n preventClick = false;\n }\n }\n function pointerDown() {\n return pointerIsDown;\n }\n const self = {\n init,\n destroy,\n pointerDown\n };\n return self;\n}\n\nfunction DragTracker(axis, ownerWindow) {\n const logInterval = 170;\n let startEvent;\n let lastEvent;\n function readTime(evt) {\n return evt.timeStamp;\n }\n function readPoint(evt, evtAxis) {\n const property = evtAxis || axis.scroll;\n const coord = `client${property === 'x' ? 'X' : 'Y'}`;\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord];\n }\n function pointerDown(evt) {\n startEvent = evt;\n lastEvent = evt;\n return readPoint(evt);\n }\n function pointerMove(evt) {\n const diff = readPoint(evt) - readPoint(lastEvent);\n const expired = readTime(evt) - readTime(startEvent) > logInterval;\n lastEvent = evt;\n if (expired) startEvent = evt;\n return diff;\n }\n function pointerUp(evt) {\n if (!startEvent || !lastEvent) return 0;\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent);\n const diffTime = readTime(evt) - readTime(startEvent);\n const expired = readTime(evt) - readTime(lastEvent) > logInterval;\n const force = diffDrag / diffTime;\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1;\n return isFlick ? force : 0;\n }\n const self = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n };\n return self;\n}\n\nfunction NodeRects() {\n function measure(node) {\n const {\n offsetTop,\n offsetLeft,\n offsetWidth,\n offsetHeight\n } = node;\n const offset = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n };\n return offset;\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction PercentOfView(viewSize) {\n function measure(n) {\n return viewSize * (n / 100);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) {\n const observeNodes = [container].concat(slides);\n let resizeObserver;\n let containerSize;\n let slideSizes = [];\n let destroyed = false;\n function readSize(node) {\n return axis.measureSize(nodeRects.measure(node));\n }\n function init(emblaApi) {\n if (!watchResize) return;\n containerSize = readSize(container);\n slideSizes = slides.map(readSize);\n function defaultCallback(entries) {\n for (const entry of entries) {\n if (destroyed) return;\n const isContainer = entry.target === container;\n const slideIndex = slides.indexOf(entry.target);\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex];\n const newSize = readSize(isContainer ? container : slides[slideIndex]);\n const diffSize = mathAbs(newSize - lastSize);\n if (diffSize >= 0.5) {\n emblaApi.reInit();\n eventHandler.emit('resize');\n break;\n }\n }\n }\n resizeObserver = new ResizeObserver(entries => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries);\n }\n });\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach(node => resizeObserver.observe(node));\n });\n }\n function destroy() {\n destroyed = true;\n if (resizeObserver) resizeObserver.disconnect();\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) {\n let scrollVelocity = 0;\n let scrollDirection = 0;\n let scrollDuration = baseDuration;\n let scrollFriction = baseFriction;\n let rawLocation = location.get();\n let rawLocationPrevious = 0;\n function seek() {\n const displacement = target.get() - location.get();\n const isInstant = !scrollDuration;\n let scrollDistance = 0;\n if (isInstant) {\n scrollVelocity = 0;\n previousLocation.set(target);\n location.set(target);\n scrollDistance = displacement;\n } else {\n previousLocation.set(location);\n scrollVelocity += displacement / scrollDuration;\n scrollVelocity *= scrollFriction;\n rawLocation += scrollVelocity;\n location.add(scrollVelocity);\n scrollDistance = rawLocation - rawLocationPrevious;\n }\n scrollDirection = mathSign(scrollDistance);\n rawLocationPrevious = rawLocation;\n return self;\n }\n function settled() {\n const diff = target.get() - offsetLocation.get();\n return mathAbs(diff) < 0.001;\n }\n function duration() {\n return scrollDuration;\n }\n function direction() {\n return scrollDirection;\n }\n function velocity() {\n return scrollVelocity;\n }\n function useBaseDuration() {\n return useDuration(baseDuration);\n }\n function useBaseFriction() {\n return useFriction(baseFriction);\n }\n function useDuration(n) {\n scrollDuration = n;\n return self;\n }\n function useFriction(n) {\n scrollFriction = n;\n return self;\n }\n const self = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n };\n return self;\n}\n\nfunction ScrollBounds(limit, location, target, scrollBody, percentOfView) {\n const pullBackThreshold = percentOfView.measure(10);\n const edgeOffsetTolerance = percentOfView.measure(50);\n const frictionLimit = Limit(0.1, 0.99);\n let disabled = false;\n function shouldConstrain() {\n if (disabled) return false;\n if (!limit.reachedAny(target.get())) return false;\n if (!limit.reachedAny(location.get())) return false;\n return true;\n }\n function constrain(pointerDown) {\n if (!shouldConstrain()) return;\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max';\n const diffToEdge = mathAbs(limit[edge] - location.get());\n const diffToTarget = target.get() - location.get();\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance);\n target.subtract(diffToTarget * friction);\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()));\n scrollBody.useDuration(25).useBaseFriction();\n }\n }\n function toggleActive(active) {\n disabled = !active;\n }\n const self = {\n shouldConstrain,\n constrain,\n toggleActive\n };\n return self;\n}\n\nfunction ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) {\n const scrollBounds = Limit(-contentSize + viewSize, 0);\n const snapsBounded = measureBounded();\n const scrollContainLimit = findScrollContainLimit();\n const snapsContained = measureContained();\n function usePixelTolerance(bound, snap) {\n return deltaAbs(bound, snap) <= 1;\n }\n function findScrollContainLimit() {\n const startSnap = snapsBounded[0];\n const endSnap = arrayLast(snapsBounded);\n const min = snapsBounded.lastIndexOf(startSnap);\n const max = snapsBounded.indexOf(endSnap) + 1;\n return Limit(min, max);\n }\n function measureBounded() {\n return snapsAligned.map((snapAligned, index) => {\n const {\n min,\n max\n } = scrollBounds;\n const snap = scrollBounds.constrain(snapAligned);\n const isFirst = !index;\n const isLast = arrayIsLastIndex(snapsAligned, index);\n if (isFirst) return max;\n if (isLast) return min;\n if (usePixelTolerance(min, snap)) return min;\n if (usePixelTolerance(max, snap)) return max;\n return snap;\n }).map(scrollBound => parseFloat(scrollBound.toFixed(3)));\n }\n function measureContained() {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max];\n if (containScroll === 'keepSnaps') return snapsBounded;\n const {\n min,\n max\n } = scrollContainLimit;\n return snapsBounded.slice(min, max);\n }\n const self = {\n snapsContained,\n scrollContainLimit\n };\n return self;\n}\n\nfunction ScrollLimit(contentSize, scrollSnaps, loop) {\n const max = scrollSnaps[0];\n const min = loop ? max - contentSize : arrayLast(scrollSnaps);\n const limit = Limit(min, max);\n const self = {\n limit\n };\n return self;\n}\n\nfunction ScrollLooper(contentSize, limit, location, vectors) {\n const jointSafety = 0.1;\n const min = limit.min + jointSafety;\n const max = limit.max + jointSafety;\n const {\n reachedMin,\n reachedMax\n } = Limit(min, max);\n function shouldLoop(direction) {\n if (direction === 1) return reachedMax(location.get());\n if (direction === -1) return reachedMin(location.get());\n return false;\n }\n function loop(direction) {\n if (!shouldLoop(direction)) return;\n const loopDistance = contentSize * (direction * -1);\n vectors.forEach(v => v.add(loopDistance));\n }\n const self = {\n loop\n };\n return self;\n}\n\nfunction ScrollProgress(limit) {\n const {\n max,\n length\n } = limit;\n function get(n) {\n const currentLocation = n - max;\n return length ? currentLocation / -length : 0;\n }\n const self = {\n get\n };\n return self;\n}\n\nfunction ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) {\n const {\n startEdge,\n endEdge\n } = axis;\n const {\n groupSlides\n } = slidesToScroll;\n const alignments = measureSizes().map(alignment.measure);\n const snaps = measureUnaligned();\n const snapsAligned = measureAligned();\n function measureSizes() {\n return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs);\n }\n function measureUnaligned() {\n return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap));\n }\n function measureAligned() {\n return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]);\n }\n const self = {\n snaps,\n snapsAligned\n };\n return self;\n}\n\nfunction SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) {\n const {\n groupSlides\n } = slidesToScroll;\n const {\n min,\n max\n } = scrollContainLimit;\n const slideRegistry = createSlideRegistry();\n function createSlideRegistry() {\n const groupedSlideIndexes = groupSlides(slideIndexes);\n const doNotContain = !containSnaps || containScroll === 'keepSnaps';\n if (scrollSnaps.length === 1) return [slideIndexes];\n if (doNotContain) return groupedSlideIndexes;\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(groups, index);\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1;\n return arrayFromNumber(range);\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1;\n return arrayFromNumber(range, arrayLast(groups)[0]);\n }\n return group;\n });\n }\n const self = {\n slideRegistry\n };\n return self;\n}\n\nfunction ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) {\n const {\n reachedAny,\n removeOffset,\n constrain\n } = limit;\n function minDistance(distances) {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0];\n }\n function findTargetSnap(target) {\n const distance = loop ? removeOffset(target) : constrain(target);\n const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({\n diff: shortcut(snap - distance, 0),\n index\n })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff));\n const {\n index\n } = ascDiffsToSnaps[0];\n return {\n index,\n distance\n };\n }\n function shortcut(target, direction) {\n const targets = [target, target + contentSize, target - contentSize];\n if (!loop) return target;\n if (!direction) return minDistance(targets);\n const matchingTargets = targets.filter(t => mathSign(t) === direction);\n if (matchingTargets.length) return minDistance(matchingTargets);\n return arrayLast(targets) - contentSize;\n }\n function byIndex(index, direction) {\n const diffToSnap = scrollSnaps[index] - targetVector.get();\n const distance = shortcut(diffToSnap, direction);\n return {\n index,\n distance\n };\n }\n function byDistance(distance, snap) {\n const target = targetVector.get() + distance;\n const {\n index,\n distance: targetSnapDistance\n } = findTargetSnap(target);\n const reachedBound = !loop && reachedAny(target);\n if (!snap || reachedBound) return {\n index,\n distance\n };\n const diffToSnap = scrollSnaps[index] - targetSnapDistance;\n const snapDistance = distance + shortcut(diffToSnap, 0);\n return {\n index,\n distance: snapDistance\n };\n }\n const self = {\n byDistance,\n byIndex,\n shortcut\n };\n return self;\n}\n\nfunction ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) {\n function scrollTo(target) {\n const distanceDiff = target.distance;\n const indexDiff = target.index !== indexCurrent.get();\n targetVector.add(distanceDiff);\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start();\n } else {\n animation.update();\n animation.render(1);\n animation.update();\n }\n }\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get());\n indexCurrent.set(target.index);\n eventHandler.emit('select');\n }\n }\n function distance(n, snap) {\n const target = scrollTarget.byDistance(n, snap);\n scrollTo(target);\n }\n function index(n, direction) {\n const targetIndex = indexCurrent.clone().set(n);\n const target = scrollTarget.byIndex(targetIndex.get(), direction);\n scrollTo(target);\n }\n const self = {\n distance,\n index\n };\n return self;\n}\n\nfunction SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) {\n const focusListenerOptions = {\n passive: true,\n capture: true\n };\n let lastTabPressTime = 0;\n function init(emblaApi) {\n if (!watchFocus) return;\n function defaultCallback(index) {\n const nowTime = new Date().getTime();\n const diffTime = nowTime - lastTabPressTime;\n if (diffTime > 10) return;\n eventHandler.emit('slideFocusStart');\n root.scrollLeft = 0;\n const group = slideRegistry.findIndex(group => group.includes(index));\n if (!isNumber(group)) return;\n scrollBody.useDuration(0);\n scrollTo.index(group, 0);\n eventHandler.emit('slideFocus');\n }\n eventStore.add(document, 'keydown', registerTabPress, false);\n slides.forEach((slide, slideIndex) => {\n eventStore.add(slide, 'focus', evt => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex);\n }\n }, focusListenerOptions);\n });\n }\n function registerTabPress(event) {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime();\n }\n const self = {\n init\n };\n return self;\n}\n\nfunction Vector1D(initialValue) {\n let value = initialValue;\n function get() {\n return value;\n }\n function set(n) {\n value = normalizeInput(n);\n }\n function add(n) {\n value += normalizeInput(n);\n }\n function subtract(n) {\n value -= normalizeInput(n);\n }\n function normalizeInput(n) {\n return isNumber(n) ? n : n.get();\n }\n const self = {\n get,\n set,\n add,\n subtract\n };\n return self;\n}\n\nfunction Translate(axis, container) {\n const translate = axis.scroll === 'x' ? x : y;\n const containerStyle = container.style;\n let previousTarget = null;\n let disabled = false;\n function x(n) {\n return `translate3d(${n}px,0px,0px)`;\n }\n function y(n) {\n return `translate3d(0px,${n}px,0px)`;\n }\n function to(target) {\n if (disabled) return;\n const newTarget = roundToTwoDecimals(axis.direction(target));\n if (newTarget === previousTarget) return;\n containerStyle.transform = translate(newTarget);\n previousTarget = newTarget;\n }\n function toggleActive(active) {\n disabled = !active;\n }\n function clear() {\n if (disabled) return;\n containerStyle.transform = '';\n if (!container.getAttribute('style')) container.removeAttribute('style');\n }\n const self = {\n clear,\n to,\n toggleActive\n };\n return self;\n}\n\nfunction SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) {\n const roundingSafety = 0.5;\n const ascItems = arrayKeys(slideSizesWithGaps);\n const descItems = arrayKeys(slideSizesWithGaps).reverse();\n const loopPoints = startPoints().concat(endPoints());\n function removeSlideSizes(indexes, from) {\n return indexes.reduce((a, i) => {\n return a - slideSizesWithGaps[i];\n }, from);\n }\n function slidesInGap(indexes, gap) {\n return indexes.reduce((a, i) => {\n const remainingGap = removeSlideSizes(a, gap);\n return remainingGap > 0 ? a.concat([i]) : a;\n }, []);\n }\n function findSlideBounds(offset) {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }));\n }\n function findLoopPoints(indexes, offset, isEndEdge) {\n const slideBounds = findSlideBounds(offset);\n return indexes.map(index => {\n const initial = isEndEdge ? 0 : -contentSize;\n const altered = isEndEdge ? contentSize : 0;\n const boundEdge = isEndEdge ? 'end' : 'start';\n const loopPoint = slideBounds[index][boundEdge];\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => location.get() > loopPoint ? initial : altered\n };\n });\n }\n function startPoints() {\n const gap = scrollSnaps[0];\n const indexes = slidesInGap(descItems, gap);\n return findLoopPoints(indexes, contentSize, false);\n }\n function endPoints() {\n const gap = viewSize - scrollSnaps[0] - 1;\n const indexes = slidesInGap(ascItems, gap);\n return findLoopPoints(indexes, -contentSize, true);\n }\n function canLoop() {\n return loopPoints.every(({\n index\n }) => {\n const otherIndexes = ascItems.filter(i => i !== index);\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1;\n });\n }\n function loop() {\n loopPoints.forEach(loopPoint => {\n const {\n target,\n translate,\n slideLocation\n } = loopPoint;\n const shiftLocation = target();\n if (shiftLocation === slideLocation.get()) return;\n translate.to(shiftLocation);\n slideLocation.set(shiftLocation);\n });\n }\n function clear() {\n loopPoints.forEach(loopPoint => loopPoint.translate.clear());\n }\n const self = {\n canLoop,\n clear,\n loop,\n loopPoints\n };\n return self;\n}\n\nfunction SlidesHandler(container, eventHandler, watchSlides) {\n let mutationObserver;\n let destroyed = false;\n function init(emblaApi) {\n if (!watchSlides) return;\n function defaultCallback(mutations) {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit();\n eventHandler.emit('slidesChanged');\n break;\n }\n }\n }\n mutationObserver = new MutationObserver(mutations => {\n if (destroyed) return;\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations);\n }\n });\n mutationObserver.observe(container, {\n childList: true\n });\n }\n function destroy() {\n if (mutationObserver) mutationObserver.disconnect();\n destroyed = true;\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction SlidesInView(container, slides, eventHandler, threshold) {\n const intersectionEntryMap = {};\n let inViewCache = null;\n let notInViewCache = null;\n let intersectionObserver;\n let destroyed = false;\n function init() {\n intersectionObserver = new IntersectionObserver(entries => {\n if (destroyed) return;\n entries.forEach(entry => {\n const index = slides.indexOf(entry.target);\n intersectionEntryMap[index] = entry;\n });\n inViewCache = null;\n notInViewCache = null;\n eventHandler.emit('slidesInView');\n }, {\n root: container.parentElement,\n threshold\n });\n slides.forEach(slide => intersectionObserver.observe(slide));\n }\n function destroy() {\n if (intersectionObserver) intersectionObserver.disconnect();\n destroyed = true;\n }\n function createInViewList(inView) {\n return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => {\n const index = parseInt(slideIndex);\n const {\n isIntersecting\n } = intersectionEntryMap[index];\n const inViewMatch = inView && isIntersecting;\n const notInViewMatch = !inView && !isIntersecting;\n if (inViewMatch || notInViewMatch) list.push(index);\n return list;\n }, []);\n }\n function get(inView = true) {\n if (inView && inViewCache) return inViewCache;\n if (!inView && notInViewCache) return notInViewCache;\n const slideIndexes = createInViewList(inView);\n if (inView) inViewCache = slideIndexes;\n if (!inView) notInViewCache = slideIndexes;\n return slideIndexes;\n }\n const self = {\n init,\n destroy,\n get\n };\n return self;\n}\n\nfunction SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) {\n const {\n measureSize,\n startEdge,\n endEdge\n } = axis;\n const withEdgeGap = slideRects[0] && readEdgeGap;\n const startGap = measureStartGap();\n const endGap = measureEndGap();\n const slideSizes = slideRects.map(measureSize);\n const slideSizesWithGaps = measureWithGaps();\n function measureStartGap() {\n if (!withEdgeGap) return 0;\n const slideRect = slideRects[0];\n return mathAbs(containerRect[startEdge] - slideRect[startEdge]);\n }\n function measureEndGap() {\n if (!withEdgeGap) return 0;\n const style = ownerWindow.getComputedStyle(arrayLast(slides));\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`));\n }\n function measureWithGaps() {\n return slideRects.map((rect, index, rects) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(rects, index);\n if (isFirst) return slideSizes[index] + startGap;\n if (isLast) return slideSizes[index] + endGap;\n return rects[index + 1][startEdge] - rect[startEdge];\n }).map(mathAbs);\n }\n const self = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n };\n return self;\n}\n\nfunction SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) {\n const {\n startEdge,\n endEdge,\n direction\n } = axis;\n const groupByNumber = isNumber(slidesToScroll);\n function byNumber(array, groupSize) {\n return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize));\n }\n function bySize(array) {\n if (!array.length) return [];\n return arrayKeys(array).reduce((groups, rectB, index) => {\n const rectA = arrayLast(groups) || 0;\n const isFirst = rectA === 0;\n const isLast = rectB === arrayLastIndex(array);\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge];\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge];\n const gapA = !loop && isFirst ? direction(startGap) : 0;\n const gapB = !loop && isLast ? direction(endGap) : 0;\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA));\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB);\n if (isLast) groups.push(array.length);\n return groups;\n }, []).map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0);\n return array.slice(previousSize, currentSize);\n });\n }\n function groupSlides(array) {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array);\n }\n const self = {\n groupSlides\n };\n return self;\n}\n\nfunction Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options;\n // Measurements\n const pixelTolerance = 2;\n const nodeRects = NodeRects();\n const containerRect = nodeRects.measure(container);\n const slideRects = slides.map(nodeRects.measure);\n const axis = Axis(scrollAxis, direction);\n const viewSize = axis.measureSize(containerRect);\n const percentOfView = PercentOfView(viewSize);\n const alignment = Alignment(align, viewSize);\n const containSnaps = !loop && !!containScroll;\n const readEdgeGap = loop || !!containScroll;\n const {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow);\n const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance);\n const {\n snaps,\n snapsAligned\n } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll);\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps);\n const {\n snapsContained,\n scrollContainLimit\n } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance);\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned;\n const {\n limit\n } = ScrollLimit(contentSize, scrollSnaps, loop);\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop);\n const indexPrevious = index.clone();\n const slideIndexes = arrayKeys(slides);\n // Animation\n const update = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: {\n loop\n }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown());\n scrollBody.seek();\n };\n const render = ({\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: {\n loop\n }\n }, alpha) => {\n const shouldSettle = scrollBody.settled();\n const withinBounds = !scrollBounds.shouldConstrain();\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds;\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown();\n if (hasSettledAndIdle) animation.stop();\n const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha);\n offsetLocation.set(interpolatedLocation);\n if (loop) {\n scrollLooper.loop(scrollBody.direction());\n slideLooper.loop();\n }\n translate.to(offsetLocation.get());\n if (hasSettledAndIdle) eventHandler.emit('settle');\n if (!hasSettled) eventHandler.emit('scroll');\n };\n const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha));\n // Shared\n const friction = 0.68;\n const startLocation = scrollSnaps[index.get()];\n const location = Vector1D(startLocation);\n const previousLocation = Vector1D(startLocation);\n const offsetLocation = Vector1D(startLocation);\n const target = Vector1D(startLocation);\n const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction);\n const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target);\n const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler);\n const scrollProgress = ScrollProgress(limit);\n const eventStore = EventStore();\n const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold);\n const {\n slideRegistry\n } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes);\n const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus);\n // Engine\n const engine = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects),\n scrollBody,\n scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n };\n return engine;\n}\n\nfunction EventHandler() {\n let listeners = {};\n let api;\n function init(emblaApi) {\n api = emblaApi;\n }\n function getListeners(evt) {\n return listeners[evt] || [];\n }\n function emit(evt) {\n getListeners(evt).forEach(e => e(api, evt));\n return self;\n }\n function on(evt, cb) {\n listeners[evt] = getListeners(evt).concat([cb]);\n return self;\n }\n function off(evt, cb) {\n listeners[evt] = getListeners(evt).filter(e => e !== cb);\n return self;\n }\n function clear() {\n listeners = {};\n }\n const self = {\n init,\n emit,\n off,\n on,\n clear\n };\n return self;\n}\n\nconst defaultOptions = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n};\n\nfunction OptionsHandler(ownerWindow) {\n function mergeOptions(optionsA, optionsB) {\n return objectsMergeDeep(optionsA, optionsB || {});\n }\n function optionsAtMedia(options) {\n const optionsAtMedia = options.breakpoints || {};\n const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {});\n return mergeOptions(options, matchedMediaOptions);\n }\n function optionsMediaQueries(optionsList) {\n return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia);\n }\n const self = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n };\n return self;\n}\n\nfunction PluginsHandler(optionsHandler) {\n let activePlugins = [];\n function init(emblaApi, plugins) {\n activePlugins = plugins.filter(({\n options\n }) => optionsHandler.optionsAtMedia(options).active !== false);\n activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler));\n return plugins.reduce((map, plugin) => Object.assign(map, {\n [plugin.name]: plugin\n }), {});\n }\n function destroy() {\n activePlugins = activePlugins.filter(plugin => plugin.destroy());\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction EmblaCarousel(root, userOptions, userPlugins) {\n const ownerDocument = root.ownerDocument;\n const ownerWindow = ownerDocument.defaultView;\n const optionsHandler = OptionsHandler(ownerWindow);\n const pluginsHandler = PluginsHandler(optionsHandler);\n const mediaHandlers = EventStore();\n const eventHandler = EventHandler();\n const {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n } = optionsHandler;\n const {\n on,\n off,\n emit\n } = eventHandler;\n const reInit = reActivate;\n let destroyed = false;\n let engine;\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions);\n let options = mergeOptions(optionsBase);\n let pluginList = [];\n let pluginApis;\n let container;\n let slides;\n function storeElements() {\n const {\n container: userContainer,\n slides: userSlides\n } = options;\n const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer;\n container = customContainer || root.children[0];\n const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides;\n slides = [].slice.call(customSlides || container.children);\n }\n function createEngine(options) {\n const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler);\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, {\n loop: false\n });\n return createEngine(optionsWithoutLoop);\n }\n return engine;\n }\n function activate(withOptions, withPlugins) {\n if (destroyed) return;\n optionsBase = mergeOptions(optionsBase, withOptions);\n options = optionsAtMedia(optionsBase);\n pluginList = withPlugins || pluginList;\n storeElements();\n engine = createEngine(options);\n optionsMediaQueries([optionsBase, ...pluginList.map(({\n options\n }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate));\n if (!options.active) return;\n engine.translate.to(engine.location.get());\n engine.animation.init();\n engine.slidesInView.init();\n engine.slideFocus.init(self);\n engine.eventHandler.init(self);\n engine.resizeHandler.init(self);\n engine.slidesHandler.init(self);\n if (engine.options.loop) engine.slideLooper.loop();\n if (container.offsetParent && slides.length) engine.dragHandler.init(self);\n pluginApis = pluginsHandler.init(self, pluginList);\n }\n function reActivate(withOptions, withPlugins) {\n const startIndex = selectedScrollSnap();\n deActivate();\n activate(mergeOptions({\n startIndex\n }, withOptions), withPlugins);\n eventHandler.emit('reInit');\n }\n function deActivate() {\n engine.dragHandler.destroy();\n engine.eventStore.clear();\n engine.translate.clear();\n engine.slideLooper.clear();\n engine.resizeHandler.destroy();\n engine.slidesHandler.destroy();\n engine.slidesInView.destroy();\n engine.animation.destroy();\n pluginsHandler.destroy();\n mediaHandlers.clear();\n }\n function destroy() {\n if (destroyed) return;\n destroyed = true;\n mediaHandlers.clear();\n deActivate();\n eventHandler.emit('destroy');\n eventHandler.clear();\n }\n function scrollTo(index, jump, direction) {\n if (!options.active || destroyed) return;\n engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration);\n engine.scrollTo.index(index, direction || 0);\n }\n function scrollNext(jump) {\n const next = engine.index.add(1).get();\n scrollTo(next, jump, -1);\n }\n function scrollPrev(jump) {\n const prev = engine.index.add(-1).get();\n scrollTo(prev, jump, 1);\n }\n function canScrollNext() {\n const next = engine.index.add(1).get();\n return next !== selectedScrollSnap();\n }\n function canScrollPrev() {\n const prev = engine.index.add(-1).get();\n return prev !== selectedScrollSnap();\n }\n function scrollSnapList() {\n return engine.scrollSnapList;\n }\n function scrollProgress() {\n return engine.scrollProgress.get(engine.offsetLocation.get());\n }\n function selectedScrollSnap() {\n return engine.index.get();\n }\n function previousScrollSnap() {\n return engine.indexPrevious.get();\n }\n function slidesInView() {\n return engine.slidesInView.get();\n }\n function slidesNotInView() {\n return engine.slidesInView.get(false);\n }\n function plugins() {\n return pluginApis;\n }\n function internalEngine() {\n return engine;\n }\n function rootNode() {\n return root;\n }\n function containerNode() {\n return container;\n }\n function slideNodes() {\n return slides;\n }\n const self = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n };\n activate(userOptions, userPlugins);\n setTimeout(() => eventHandler.emit('init'), 0);\n return self;\n}\nEmblaCarousel.globalOptions = undefined;\n\nexport { EmblaCarousel as default };\n//# sourceMappingURL=embla-carousel.esm.js.map\n","import { useRef, useState, useCallback, useEffect } from 'react';\nimport { areOptionsEqual, arePluginsEqual, canUseDOM } from 'embla-carousel-reactive-utils';\nimport EmblaCarousel from 'embla-carousel';\n\nfunction useEmblaCarousel(options = {}, plugins = []) {\n const storedOptions = useRef(options);\n const storedPlugins = useRef(plugins);\n const [emblaApi, setEmblaApi] = useState();\n const [viewport, setViewport] = useState();\n const reInit = useCallback(() => {\n if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current);\n }, [emblaApi]);\n useEffect(() => {\n if (areOptionsEqual(storedOptions.current, options)) return;\n storedOptions.current = options;\n reInit();\n }, [options, reInit]);\n useEffect(() => {\n if (arePluginsEqual(storedPlugins.current, plugins)) return;\n storedPlugins.current = plugins;\n reInit();\n }, [plugins, reInit]);\n useEffect(() => {\n if (canUseDOM() && viewport) {\n EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions;\n const newEmblaApi = EmblaCarousel(viewport, storedOptions.current, storedPlugins.current);\n setEmblaApi(newEmblaApi);\n return () => newEmblaApi.destroy();\n } else {\n setEmblaApi(undefined);\n }\n }, [viewport, setEmblaApi]);\n return [setViewport, emblaApi];\n}\nuseEmblaCarousel.globalOptions = undefined;\n\nexport { useEmblaCarousel as default };\n//# sourceMappingURL=embla-carousel-react.esm.js.map\n","import { createContext, forwardRef, useCallback, useContext, useEffect, useState, type HTMLAttributes } from 'react';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { IconButton } from './IconButton';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype CarouselOptions = Parameters<typeof useEmblaCarousel>[0];\n\ninterface CarouselContextValue {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: CarouselApi;\n canPrev: boolean;\n canNext: boolean;\n scrollPrev: () => void;\n scrollNext: () => void;\n orientation: 'horizontal' | 'vertical';\n}\n\nconst CarouselContext = createContext<CarouselContextValue | null>(null);\n\nfunction useCarousel() {\n const ctx = useContext(CarouselContext);\n if (!ctx) throw new Error('Carousel components must be used inside <Carousel>');\n return ctx;\n}\n\nexport interface CarouselProps extends HTMLAttributes<HTMLDivElement> {\n opts?: CarouselOptions;\n orientation?: 'horizontal' | 'vertical';\n setApi?: (api: CarouselApi) => void;\n}\n\n/**\n * Embla-backed carousel. Compose with `<CarouselContent>`, `<CarouselItem>`,\n * `<CarouselPrevious>`, and `<CarouselNext>`.\n */\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(function Carousel(\n { opts, orientation = 'horizontal', setApi, className, children, ...props },\n ref,\n) {\n const [carouselRef, api] = useEmblaCarousel({ ...opts, axis: orientation === 'horizontal' ? 'x' : 'y' });\n const [canPrev, setCanPrev] = useState(false);\n const [canNext, setCanNext] = useState(false);\n\n const onSelect = useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanPrev(api.canScrollPrev());\n setCanNext(api.canScrollNext());\n }, []);\n\n useEffect(() => {\n if (!api) return;\n setApi?.(api);\n onSelect(api);\n api.on('reInit', onSelect).on('select', onSelect);\n return () => {\n api.off('reInit', onSelect).off('select', onSelect);\n };\n }, [api, onSelect, setApi]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api,\n canPrev,\n canNext,\n scrollPrev: () => api?.scrollPrev(),\n scrollNext: () => api?.scrollNext(),\n orientation,\n }}\n >\n <div ref={ref} className={cn('relative', className)} role=\"region\" aria-roledescription=\"carousel\" {...props}>\n {children}\n </div>\n </CarouselContext.Provider>\n );\n});\n\nexport const CarouselContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CarouselContent({ className, ...props }, ref) {\n const { carouselRef, orientation } = useCarousel();\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn(\n 'flex',\n orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',\n className,\n )}\n {...props}\n />\n </div>\n );\n },\n);\n\nexport const CarouselItem = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n function CarouselItem({ className, ...props }, ref) {\n const { orientation } = useCarousel();\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\n 'min-w-0 shrink-0 grow-0 basis-full',\n orientation === 'horizontal' ? 'pl-4' : 'pt-4',\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nexport function CarouselPrevious({ className }: { className?: string }) {\n const { canPrev, scrollPrev, orientation } = useCarousel();\n return (\n <IconButton\n aria-label=\"Previous\"\n variant=\"outline\"\n disabled={!canPrev}\n onClick={scrollPrev}\n icon={<ChevronLeft />}\n className={cn(\n 'absolute z-10',\n orientation === 'horizontal'\n ? '-left-12 top-1/2 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n />\n );\n}\n\nexport function CarouselNext({ className }: { className?: string }) {\n const { canNext, scrollNext, orientation } = useCarousel();\n return (\n <IconButton\n aria-label=\"Next\"\n variant=\"outline\"\n disabled={!canNext}\n onClick={scrollNext}\n icon={<ChevronRight />}\n className={cn(\n 'absolute z-10',\n orientation === 'horizontal'\n ? '-right-12 top-1/2 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n className,\n )}\n />\n );\n}\n","import { type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\n/**\n * Tiny, dependency-free chart primitives for inline dashboards. For complex\n * visualisations reach for a charting library (Recharts, visx). These suffice\n * for sparklines, KPI cards, and at-a-glance trends.\n */\n\nexport interface ChartPoint {\n x: string | number;\n y: number;\n}\n\nexport interface ChartProps {\n data: ChartPoint[];\n /** Defaults to 24px height per point + 60px padding. */\n height?: number;\n /** Defaults to fluid 100%. */\n width?: number | string;\n /** Tooltip / label rendered above the chart. */\n caption?: ReactNode;\n className?: string;\n}\n\nfunction useScales(data: ChartPoint[], w: number, h: number, padding = 8) {\n const ys = data.map((d) => d.y);\n const min = Math.min(0, ...ys);\n const max = Math.max(...ys, 1);\n const range = max - min || 1;\n const innerW = w - padding * 2;\n const innerH = h - padding * 2;\n const sx = (i: number) =>\n data.length <= 1 ? padding + innerW / 2 : padding + (i / (data.length - 1)) * innerW;\n const sy = (v: number) => padding + innerH - ((v - min) / range) * innerH;\n return { sx, sy, min, max };\n}\n\nexport function LineChart({ data, height = 80, width = '100%', caption, className }: ChartProps) {\n const w = typeof width === 'number' ? width : 320;\n const { sx, sy } = useScales(data, w, height);\n const path = data.map((d, i) => `${i === 0 ? 'M' : 'L'}${sx(i).toFixed(1)},${sy(d.y).toFixed(1)}`).join(' ');\n\n return (\n <figure className={cn('flex flex-col gap-1.5', className)}>\n {caption && <figcaption className=\"text-xs text-foreground-muted\">{caption}</figcaption>}\n <svg viewBox={`0 0 ${w} ${height}`} width={width} height={height} role=\"img\">\n <path d={path} fill=\"none\" stroke=\"var(--color-accent)\" strokeWidth={1.75} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n {data.map((d, i) => (\n <circle key={i} cx={sx(i)} cy={sy(d.y)} r={2} fill=\"var(--color-accent)\" />\n ))}\n </svg>\n </figure>\n );\n}\n\nexport function AreaChart({ data, height = 80, width = '100%', caption, className }: ChartProps) {\n const w = typeof width === 'number' ? width : 320;\n const { sx, sy } = useScales(data, w, height);\n const top = data.map((d, i) => `${i === 0 ? 'M' : 'L'}${sx(i).toFixed(1)},${sy(d.y).toFixed(1)}`).join(' ');\n const area = `${top} L${sx(data.length - 1).toFixed(1)},${height} L${sx(0).toFixed(1)},${height} Z`;\n\n return (\n <figure className={cn('flex flex-col gap-1.5', className)}>\n {caption && <figcaption className=\"text-xs text-foreground-muted\">{caption}</figcaption>}\n <svg viewBox={`0 0 ${w} ${height}`} width={width} height={height} role=\"img\">\n <path d={area} fill=\"var(--color-accent-soft)\" />\n <path d={top} fill=\"none\" stroke=\"var(--color-accent)\" strokeWidth={1.5} />\n </svg>\n </figure>\n );\n}\n\nexport function BarChart({ data, height = 100, width = '100%', caption, className }: ChartProps) {\n const w = typeof width === 'number' ? width : 320;\n const padding = 8;\n const gap = 2;\n const innerW = w - padding * 2;\n const barW = Math.max(2, innerW / data.length - gap);\n const ys = data.map((d) => d.y);\n const max = Math.max(...ys, 1);\n\n return (\n <figure className={cn('flex flex-col gap-1.5', className)}>\n {caption && <figcaption className=\"text-xs text-foreground-muted\">{caption}</figcaption>}\n <svg viewBox={`0 0 ${w} ${height}`} width={width} height={height} role=\"img\">\n {data.map((d, i) => {\n const h = ((d.y / max) * (height - padding * 2));\n return (\n <rect\n key={i}\n x={padding + i * (barW + gap)}\n y={height - padding - h}\n width={barW}\n height={h}\n fill=\"var(--color-accent)\"\n rx={1.5}\n >\n <title>{`${d.x}: ${d.y}`}</title>\n </rect>\n );\n })}\n </svg>\n </figure>\n );\n}\n","'use client';\nfunction __insertCSS(code) {\n if (!code || typeof document == 'undefined') return\n let head = document.head || document.getElementsByTagName('head')[0]\n let style = document.createElement('style')\n style.type = 'text/css'\n head.appendChild(style)\n ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code))\n}\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as React from 'react';\nimport React__default, { useLayoutEffect, useEffect, useMemo } from 'react';\n\nconst DrawerContext = React__default.createContext({\n drawerRef: {\n current: null\n },\n overlayRef: {\n current: null\n },\n onPress: ()=>{},\n onRelease: ()=>{},\n onDrag: ()=>{},\n onNestedDrag: ()=>{},\n onNestedOpenChange: ()=>{},\n onNestedRelease: ()=>{},\n openProp: undefined,\n dismissible: false,\n isOpen: false,\n isDragging: false,\n keyboardIsOpen: {\n current: false\n },\n snapPointsOffset: null,\n snapPoints: null,\n handleOnly: false,\n modal: false,\n shouldFade: false,\n activeSnapPoint: null,\n onOpenChange: ()=>{},\n setActiveSnapPoint: ()=>{},\n closeDrawer: ()=>{},\n direction: 'bottom',\n shouldAnimate: {\n current: true\n },\n shouldScaleBackground: false,\n setBackgroundColorOnScale: true,\n noBodyStyles: false,\n container: null,\n autoFocus: false\n});\nconst useDrawerContext = ()=>{\n const context = React__default.useContext(DrawerContext);\n if (!context) {\n throw new Error('useDrawerContext must be used within a Drawer.Root');\n }\n return context;\n};\n\n__insertCSS(\"[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32, .72, 0, 1);animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--initial-transform,100%),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--initial-transform,100%),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-animate=false]{animation:none!important}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opacity .5s cubic-bezier(.32, .72, 0, 1)}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:1}[data-vaul-drawer]:not([data-vaul-custom-container=true])::after{content:'';position:absolute;background:inherit;background-color:inherit}[data-vaul-drawer][data-vaul-drawer-direction=top]::after{top:initial;bottom:100%;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=bottom]::after{top:100%;bottom:initial;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=left]::after{left:initial;right:100%;top:0;bottom:0;width:200%}[data-vaul-drawer][data-vaul-drawer-direction=right]::after{left:100%;right:initial;top:0;bottom:0;width:200%}[data-vaul-overlay][data-vaul-snap-points=true]:not([data-vaul-snap-points-overlay=true]):not(\\n[data-state=closed]\\n){opacity:0}[data-vaul-overlay][data-vaul-snap-points-overlay=true]{opacity:1}[data-vaul-handle]{display:block;position:relative;opacity:.7;background:#e2e2e4;margin-left:auto;margin-right:auto;height:5px;width:32px;border-radius:1rem;touch-action:pan-y}[data-vaul-handle]:active,[data-vaul-handle]:hover{opacity:1}[data-vaul-handle-hitarea]{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100%,2.75rem);height:max(100%,2.75rem);touch-action:inherit}@media (hover:hover) and (pointer:fine){[data-vaul-drawer]{user-select:none}}@media (pointer:fine){[data-vaul-handle-hitarea]:{width:100%;height:100%}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeOut{to{opacity:0}}@keyframes slideFromBottom{from{transform:translate3d(0,var(--initial-transform,100%),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToBottom{to{transform:translate3d(0,var(--initial-transform,100%),0)}}@keyframes slideFromTop{from{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToTop{to{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}}@keyframes slideFromLeft{from{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToLeft{to{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}}@keyframes slideFromRight{from{transform:translate3d(var(--initial-transform,100%),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToRight{to{transform:translate3d(var(--initial-transform,100%),0,0)}}\");\n\nfunction isMobileFirefox() {\n const userAgent = navigator.userAgent;\n return typeof window !== 'undefined' && (/Firefox/.test(userAgent) && /Mobile/.test(userAgent) || // Android Firefox\n /FxiOS/.test(userAgent) // iOS Firefox\n );\n}\nfunction isMac() {\n return testPlatform(/^Mac/);\n}\nfunction isIPhone() {\n return testPlatform(/^iPhone/);\n}\nfunction isSafari() {\n return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n}\nfunction isIPad() {\n return testPlatform(/^iPad/) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n isMac() && navigator.maxTouchPoints > 1;\n}\nfunction isIOS() {\n return isIPhone() || isIPad();\n}\nfunction testPlatform(re) {\n return typeof window !== 'undefined' && window.navigator != null ? re.test(window.navigator.platform) : undefined;\n}\n\n// This code comes from https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/overlays/src/usePreventScroll.ts\nconst KEYBOARD_BUFFER = 24;\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\nfunction chain$1(...callbacks) {\n return (...args)=>{\n for (let callback of callbacks){\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n };\n}\n// @ts-ignore\nconst visualViewport = typeof document !== 'undefined' && window.visualViewport;\nfunction isScrollable(node) {\n let style = window.getComputedStyle(node);\n return /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);\n}\nfunction getScrollParent(node) {\n if (isScrollable(node)) {\n node = node.parentElement;\n }\n while(node && !isScrollable(node)){\n node = node.parentElement;\n }\n return node || document.scrollingElement || document.documentElement;\n}\n// HTML input types that do not cause the software keyboard to appear.\nconst nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\n// The number of active usePreventScroll calls. Used to determine whether to revert back to the original page style/scroll position\nlet preventScrollCount = 0;\nlet restore;\n/**\n * Prevents scrolling on the document body on mount, and\n * restores it on unmount. Also ensures that content does not\n * shift due to the scrollbars disappearing.\n */ function usePreventScroll(options = {}) {\n let { isDisabled } = options;\n useIsomorphicLayoutEffect(()=>{\n if (isDisabled) {\n return;\n }\n preventScrollCount++;\n if (preventScrollCount === 1) {\n if (isIOS()) {\n restore = preventScrollMobileSafari();\n }\n }\n return ()=>{\n preventScrollCount--;\n if (preventScrollCount === 0) {\n restore == null ? void 0 : restore();\n }\n };\n }, [\n isDisabled\n ]);\n}\n// Mobile Safari is a whole different beast. Even with overflow: hidden,\n// it still scrolls the page in many situations:\n//\n// 1. When the bottom toolbar and address bar are collapsed, page scrolling is always allowed.\n// 2. When the keyboard is visible, the viewport does not resize. Instead, the keyboard covers part of\n// it, so it becomes scrollable.\n// 3. When tapping on an input, the page always scrolls so that the input is centered in the visual viewport.\n// This may cause even fixed position elements to scroll off the screen.\n// 4. When using the next/previous buttons in the keyboard to navigate between inputs, the whole page always\n// scrolls, even if the input is inside a nested scrollable element that could be scrolled instead.\n//\n// In order to work around these cases, and prevent scrolling without jankiness, we do a few things:\n//\n// 1. Prevent default on `touchmove` events that are not in a scrollable element. This prevents touch scrolling\n// on the window.\n// 2. Prevent default on `touchmove` events inside a scrollable element when the scroll position is at the\n// top or bottom. This avoids the whole page scrolling instead, but does prevent overscrolling.\n// 3. Prevent default on `touchend` events on input elements and handle focusing the element ourselves.\n// 4. When focusing an input, apply a transform to trick Safari into thinking the input is at the top\n// of the page, which prevents it from scrolling the page. After the input is focused, scroll the element\n// into view ourselves, without scrolling the whole page.\n// 5. Offset the body by the scroll position using a negative margin and scroll to the top. This should appear the\n// same visually, but makes the actual scroll position always zero. This is required to make all of the\n// above work or Safari will still try to scroll the page when focusing an input.\n// 6. As a last resort, handle window scroll events, and scroll back to the top. This can happen when attempting\n// to navigate to an input with the next/previous buttons that's outside a modal.\nfunction preventScrollMobileSafari() {\n let scrollable;\n let lastY = 0;\n let onTouchStart = (e)=>{\n // Store the nearest scrollable parent element from the element that the user touched.\n scrollable = getScrollParent(e.target);\n if (scrollable === document.documentElement && scrollable === document.body) {\n return;\n }\n lastY = e.changedTouches[0].pageY;\n };\n let onTouchMove = (e)=>{\n // Prevent scrolling the window.\n if (!scrollable || scrollable === document.documentElement || scrollable === document.body) {\n e.preventDefault();\n return;\n }\n // Prevent scrolling up when at the top and scrolling down when at the bottom\n // of a nested scrollable area, otherwise mobile Safari will start scrolling\n // the window instead. Unfortunately, this disables bounce scrolling when at\n // the top but it's the best we can do.\n let y = e.changedTouches[0].pageY;\n let scrollTop = scrollable.scrollTop;\n let bottom = scrollable.scrollHeight - scrollable.clientHeight;\n if (bottom === 0) {\n return;\n }\n if (scrollTop <= 0 && y > lastY || scrollTop >= bottom && y < lastY) {\n e.preventDefault();\n }\n lastY = y;\n };\n let onTouchEnd = (e)=>{\n let target = e.target;\n // Apply this change if we're not already focused on the target element\n if (isInput(target) && target !== document.activeElement) {\n e.preventDefault();\n // Apply a transform to trick Safari into thinking the input is at the top of the page\n // so it doesn't try to scroll it into view. When tapping on an input, this needs to\n // be done before the \"focus\" event, so we have to focus the element ourselves.\n target.style.transform = 'translateY(-2000px)';\n target.focus();\n requestAnimationFrame(()=>{\n target.style.transform = '';\n });\n }\n };\n let onFocus = (e)=>{\n let target = e.target;\n if (isInput(target)) {\n // Transform also needs to be applied in the focus event in cases where focus moves\n // other than tapping on an input directly, e.g. the next/previous buttons in the\n // software keyboard. In these cases, it seems applying the transform in the focus event\n // is good enough, whereas when tapping an input, it must be done before the focus event. 🤷♂️\n target.style.transform = 'translateY(-2000px)';\n requestAnimationFrame(()=>{\n target.style.transform = '';\n // This will have prevented the browser from scrolling the focused element into view,\n // so we need to do this ourselves in a way that doesn't cause the whole page to scroll.\n if (visualViewport) {\n if (visualViewport.height < window.innerHeight) {\n // If the keyboard is already visible, do this after one additional frame\n // to wait for the transform to be removed.\n requestAnimationFrame(()=>{\n scrollIntoView(target);\n });\n } else {\n // Otherwise, wait for the visual viewport to resize before scrolling so we can\n // measure the correct position to scroll to.\n visualViewport.addEventListener('resize', ()=>scrollIntoView(target), {\n once: true\n });\n }\n }\n });\n }\n };\n let onWindowScroll = ()=>{\n // Last resort. If the window scrolled, scroll it back to the top.\n // It should always be at the top because the body will have a negative margin (see below).\n window.scrollTo(0, 0);\n };\n // Record the original scroll position so we can restore it.\n // Then apply a negative margin to the body to offset it by the scroll position. This will\n // enable us to scroll the window to the top, which is required for the rest of this to work.\n let scrollX = window.pageXOffset;\n let scrollY = window.pageYOffset;\n let restoreStyles = chain$1(setStyle(document.documentElement, 'paddingRight', `${window.innerWidth - document.documentElement.clientWidth}px`));\n // Scroll to the top. The negative margin on the body will make this appear the same.\n window.scrollTo(0, 0);\n let removeEvents = chain$1(addEvent(document, 'touchstart', onTouchStart, {\n passive: false,\n capture: true\n }), addEvent(document, 'touchmove', onTouchMove, {\n passive: false,\n capture: true\n }), addEvent(document, 'touchend', onTouchEnd, {\n passive: false,\n capture: true\n }), addEvent(document, 'focus', onFocus, true), addEvent(window, 'scroll', onWindowScroll));\n return ()=>{\n // Restore styles and scroll the page back to where it was.\n restoreStyles();\n removeEvents();\n window.scrollTo(scrollX, scrollY);\n };\n}\n// Sets a CSS property on an element, and returns a function to revert it to the previous value.\nfunction setStyle(element, style, value) {\n // https://github.com/microsoft/TypeScript/issues/17827#issuecomment-391663310\n // @ts-ignore\n let cur = element.style[style];\n // @ts-ignore\n element.style[style] = value;\n return ()=>{\n // @ts-ignore\n element.style[style] = cur;\n };\n}\n// Adds an event listener to an element, and returns a function to remove it.\nfunction addEvent(target, event, handler, options) {\n // @ts-ignore\n target.addEventListener(event, handler, options);\n return ()=>{\n // @ts-ignore\n target.removeEventListener(event, handler, options);\n };\n}\nfunction scrollIntoView(target) {\n let root = document.scrollingElement || document.documentElement;\n while(target && target !== root){\n // Find the parent scrollable element and adjust the scroll position if the target is not already in view.\n let scrollable = getScrollParent(target);\n if (scrollable !== document.documentElement && scrollable !== document.body && scrollable !== target) {\n let scrollableTop = scrollable.getBoundingClientRect().top;\n let targetTop = target.getBoundingClientRect().top;\n let targetBottom = target.getBoundingClientRect().bottom;\n // Buffer is needed for some edge cases\n const keyboardHeight = scrollable.getBoundingClientRect().bottom + KEYBOARD_BUFFER;\n if (targetBottom > keyboardHeight) {\n scrollable.scrollTop += targetTop - scrollableTop;\n }\n }\n // @ts-ignore\n target = scrollable.parentElement;\n }\n}\nfunction isInput(target) {\n return target instanceof HTMLInputElement && !nonTextInputTypes.has(target.type) || target instanceof HTMLTextAreaElement || target instanceof HTMLElement && target.isContentEditable;\n}\n\n// This code comes from https://github.com/radix-ui/primitives/tree/main/packages/react/compose-refs\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */ function setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */ function composeRefs(...refs) {\n return (node)=>refs.forEach((ref)=>setRef(ref, node));\n}\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */ function useComposedRefs(...refs) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nconst cache = new WeakMap();\nfunction set(el, styles, ignoreCache = false) {\n if (!el || !(el instanceof HTMLElement)) return;\n let originalStyles = {};\n Object.entries(styles).forEach(([key, value])=>{\n if (key.startsWith('--')) {\n el.style.setProperty(key, value);\n return;\n }\n originalStyles[key] = el.style[key];\n el.style[key] = value;\n });\n if (ignoreCache) return;\n cache.set(el, originalStyles);\n}\nfunction reset(el, prop) {\n if (!el || !(el instanceof HTMLElement)) return;\n let originalStyles = cache.get(el);\n if (!originalStyles) {\n return;\n }\n {\n el.style[prop] = originalStyles[prop];\n }\n}\nconst isVertical = (direction)=>{\n switch(direction){\n case 'top':\n case 'bottom':\n return true;\n case 'left':\n case 'right':\n return false;\n default:\n return direction;\n }\n};\nfunction getTranslate(element, direction) {\n if (!element) {\n return null;\n }\n const style = window.getComputedStyle(element);\n const transform = // @ts-ignore\n style.transform || style.webkitTransform || style.mozTransform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) {\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix3d\n return parseFloat(mat[1].split(', ')[isVertical(direction) ? 13 : 12]);\n }\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[isVertical(direction) ? 5 : 4]) : null;\n}\nfunction dampenValue(v) {\n return 8 * (Math.log(v + 1) - 2);\n}\nfunction assignStyle(element, style) {\n if (!element) return ()=>{};\n const prevStyle = element.style.cssText;\n Object.assign(element.style, style);\n return ()=>{\n element.style.cssText = prevStyle;\n };\n}\n/**\n * Receives functions as arguments and returns a new function that calls all.\n */ function chain(...fns) {\n return (...args)=>{\n for (const fn of fns){\n if (typeof fn === 'function') {\n // @ts-ignore\n fn(...args);\n }\n }\n };\n}\n\nconst TRANSITIONS = {\n DURATION: 0.5,\n EASE: [\n 0.32,\n 0.72,\n 0,\n 1\n ]\n};\nconst VELOCITY_THRESHOLD = 0.4;\nconst CLOSE_THRESHOLD = 0.25;\nconst SCROLL_LOCK_TIMEOUT = 100;\nconst BORDER_RADIUS = 8;\nconst NESTED_DISPLACEMENT = 16;\nconst WINDOW_TOP_OFFSET = 26;\nconst DRAG_CLASS = 'vaul-dragging';\n\n// This code comes from https://github.com/radix-ui/primitives/blob/main/packages/react/use-controllable-state/src/useControllableState.tsx\nfunction useCallbackRef(callback) {\n const callbackRef = React__default.useRef(callback);\n React__default.useEffect(()=>{\n callbackRef.current = callback;\n });\n // https://github.com/facebook/react/issues/19240\n return React__default.useMemo(()=>(...args)=>callbackRef.current == null ? void 0 : callbackRef.current.call(callbackRef, ...args), []);\n}\nfunction useUncontrolledState({ defaultProp, onChange }) {\n const uncontrolledState = React__default.useState(defaultProp);\n const [value] = uncontrolledState;\n const prevValueRef = React__default.useRef(value);\n const handleChange = useCallbackRef(onChange);\n React__default.useEffect(()=>{\n if (prevValueRef.current !== value) {\n handleChange(value);\n prevValueRef.current = value;\n }\n }, [\n value,\n prevValueRef,\n handleChange\n ]);\n return uncontrolledState;\n}\nfunction useControllableState({ prop, defaultProp, onChange = ()=>{} }) {\n const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledProp;\n const handleChange = useCallbackRef(onChange);\n const setValue = React__default.useCallback((nextValue)=>{\n if (isControlled) {\n const setter = nextValue;\n const value = typeof nextValue === 'function' ? setter(prop) : nextValue;\n if (value !== prop) handleChange(value);\n } else {\n setUncontrolledProp(nextValue);\n }\n }, [\n isControlled,\n prop,\n setUncontrolledProp,\n handleChange\n ]);\n return [\n value,\n setValue\n ];\n}\n\nfunction useSnapPoints({ activeSnapPointProp, setActiveSnapPointProp, snapPoints, drawerRef, overlayRef, fadeFromIndex, onSnapPointChange, direction = 'bottom', container, snapToSequentialPoint }) {\n const [activeSnapPoint, setActiveSnapPoint] = useControllableState({\n prop: activeSnapPointProp,\n defaultProp: snapPoints == null ? void 0 : snapPoints[0],\n onChange: setActiveSnapPointProp\n });\n const [windowDimensions, setWindowDimensions] = React__default.useState(typeof window !== 'undefined' ? {\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight\n } : undefined);\n React__default.useEffect(()=>{\n function onResize() {\n setWindowDimensions({\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight\n });\n }\n window.addEventListener('resize', onResize);\n return ()=>window.removeEventListener('resize', onResize);\n }, []);\n const isLastSnapPoint = React__default.useMemo(()=>activeSnapPoint === (snapPoints == null ? void 0 : snapPoints[snapPoints.length - 1]) || null, [\n snapPoints,\n activeSnapPoint\n ]);\n const activeSnapPointIndex = React__default.useMemo(()=>{\n var _snapPoints_findIndex;\n return (_snapPoints_findIndex = snapPoints == null ? void 0 : snapPoints.findIndex((snapPoint)=>snapPoint === activeSnapPoint)) != null ? _snapPoints_findIndex : null;\n }, [\n snapPoints,\n activeSnapPoint\n ]);\n const shouldFade = snapPoints && snapPoints.length > 0 && (fadeFromIndex || fadeFromIndex === 0) && !Number.isNaN(fadeFromIndex) && snapPoints[fadeFromIndex] === activeSnapPoint || !snapPoints;\n const snapPointsOffset = React__default.useMemo(()=>{\n const containerSize = container ? {\n width: container.getBoundingClientRect().width,\n height: container.getBoundingClientRect().height\n } : typeof window !== 'undefined' ? {\n width: window.innerWidth,\n height: window.innerHeight\n } : {\n width: 0,\n height: 0\n };\n var _snapPoints_map;\n return (_snapPoints_map = snapPoints == null ? void 0 : snapPoints.map((snapPoint)=>{\n const isPx = typeof snapPoint === 'string';\n let snapPointAsNumber = 0;\n if (isPx) {\n snapPointAsNumber = parseInt(snapPoint, 10);\n }\n if (isVertical(direction)) {\n const height = isPx ? snapPointAsNumber : windowDimensions ? snapPoint * containerSize.height : 0;\n if (windowDimensions) {\n return direction === 'bottom' ? containerSize.height - height : -containerSize.height + height;\n }\n return height;\n }\n const width = isPx ? snapPointAsNumber : windowDimensions ? snapPoint * containerSize.width : 0;\n if (windowDimensions) {\n return direction === 'right' ? containerSize.width - width : -containerSize.width + width;\n }\n return width;\n })) != null ? _snapPoints_map : [];\n }, [\n snapPoints,\n windowDimensions,\n container\n ]);\n const activeSnapPointOffset = React__default.useMemo(()=>activeSnapPointIndex !== null ? snapPointsOffset == null ? void 0 : snapPointsOffset[activeSnapPointIndex] : null, [\n snapPointsOffset,\n activeSnapPointIndex\n ]);\n const snapToPoint = React__default.useCallback((dimension)=>{\n var _snapPointsOffset_findIndex;\n const newSnapPointIndex = (_snapPointsOffset_findIndex = snapPointsOffset == null ? void 0 : snapPointsOffset.findIndex((snapPointDim)=>snapPointDim === dimension)) != null ? _snapPointsOffset_findIndex : null;\n onSnapPointChange(newSnapPointIndex);\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `translate3d(0, ${dimension}px, 0)` : `translate3d(${dimension}px, 0, 0)`\n });\n if (snapPointsOffset && newSnapPointIndex !== snapPointsOffset.length - 1 && fadeFromIndex !== undefined && newSnapPointIndex !== fadeFromIndex && newSnapPointIndex < fadeFromIndex) {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '0'\n });\n } else {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '1'\n });\n }\n setActiveSnapPoint(snapPoints == null ? void 0 : snapPoints[Math.max(newSnapPointIndex, 0)]);\n }, [\n drawerRef.current,\n snapPoints,\n snapPointsOffset,\n fadeFromIndex,\n overlayRef,\n setActiveSnapPoint\n ]);\n React__default.useEffect(()=>{\n if (activeSnapPoint || activeSnapPointProp) {\n var _snapPoints_findIndex;\n const newIndex = (_snapPoints_findIndex = snapPoints == null ? void 0 : snapPoints.findIndex((snapPoint)=>snapPoint === activeSnapPointProp || snapPoint === activeSnapPoint)) != null ? _snapPoints_findIndex : -1;\n if (snapPointsOffset && newIndex !== -1 && typeof snapPointsOffset[newIndex] === 'number') {\n snapToPoint(snapPointsOffset[newIndex]);\n }\n }\n }, [\n activeSnapPoint,\n activeSnapPointProp,\n snapPoints,\n snapPointsOffset,\n snapToPoint\n ]);\n function onRelease({ draggedDistance, closeDrawer, velocity, dismissible }) {\n if (fadeFromIndex === undefined) return;\n const currentPosition = direction === 'bottom' || direction === 'right' ? (activeSnapPointOffset != null ? activeSnapPointOffset : 0) - draggedDistance : (activeSnapPointOffset != null ? activeSnapPointOffset : 0) + draggedDistance;\n const isOverlaySnapPoint = activeSnapPointIndex === fadeFromIndex - 1;\n const isFirst = activeSnapPointIndex === 0;\n const hasDraggedUp = draggedDistance > 0;\n if (isOverlaySnapPoint) {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n });\n }\n if (!snapToSequentialPoint && velocity > 2 && !hasDraggedUp) {\n if (dismissible) closeDrawer();\n else snapToPoint(snapPointsOffset[0]); // snap to initial point\n return;\n }\n if (!snapToSequentialPoint && velocity > 2 && hasDraggedUp && snapPointsOffset && snapPoints) {\n snapToPoint(snapPointsOffset[snapPoints.length - 1]);\n return;\n }\n // Find the closest snap point to the current position\n const closestSnapPoint = snapPointsOffset == null ? void 0 : snapPointsOffset.reduce((prev, curr)=>{\n if (typeof prev !== 'number' || typeof curr !== 'number') return prev;\n return Math.abs(curr - currentPosition) < Math.abs(prev - currentPosition) ? curr : prev;\n });\n const dim = isVertical(direction) ? window.innerHeight : window.innerWidth;\n if (velocity > VELOCITY_THRESHOLD && Math.abs(draggedDistance) < dim * 0.4) {\n const dragDirection = hasDraggedUp ? 1 : -1; // 1 = up, -1 = down\n // Don't do anything if we swipe upwards while being on the last snap point\n if (dragDirection > 0 && isLastSnapPoint && snapPoints) {\n snapToPoint(snapPointsOffset[snapPoints.length - 1]);\n return;\n }\n if (isFirst && dragDirection < 0 && dismissible) {\n closeDrawer();\n }\n if (activeSnapPointIndex === null) return;\n snapToPoint(snapPointsOffset[activeSnapPointIndex + dragDirection]);\n return;\n }\n snapToPoint(closestSnapPoint);\n }\n function onDrag({ draggedDistance }) {\n if (activeSnapPointOffset === null) return;\n const newValue = direction === 'bottom' || direction === 'right' ? activeSnapPointOffset - draggedDistance : activeSnapPointOffset + draggedDistance;\n // Don't do anything if we exceed the last(biggest) snap point\n if ((direction === 'bottom' || direction === 'right') && newValue < snapPointsOffset[snapPointsOffset.length - 1]) {\n return;\n }\n if ((direction === 'top' || direction === 'left') && newValue > snapPointsOffset[snapPointsOffset.length - 1]) {\n return;\n }\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${newValue}px, 0)` : `translate3d(${newValue}px, 0, 0)`\n });\n }\n function getPercentageDragged(absDraggedDistance, isDraggingDown) {\n if (!snapPoints || typeof activeSnapPointIndex !== 'number' || !snapPointsOffset || fadeFromIndex === undefined) return null;\n // If this is true we are dragging to a snap point that is supposed to have an overlay\n const isOverlaySnapPoint = activeSnapPointIndex === fadeFromIndex - 1;\n const isOverlaySnapPointOrHigher = activeSnapPointIndex >= fadeFromIndex;\n if (isOverlaySnapPointOrHigher && isDraggingDown) {\n return 0;\n }\n // Don't animate, but still use this one if we are dragging away from the overlaySnapPoint\n if (isOverlaySnapPoint && !isDraggingDown) return 1;\n if (!shouldFade && !isOverlaySnapPoint) return null;\n // Either fadeFrom index or the one before\n const targetSnapPointIndex = isOverlaySnapPoint ? activeSnapPointIndex + 1 : activeSnapPointIndex - 1;\n // Get the distance from overlaySnapPoint to the one before or vice-versa to calculate the opacity percentage accordingly\n const snapPointDistance = isOverlaySnapPoint ? snapPointsOffset[targetSnapPointIndex] - snapPointsOffset[targetSnapPointIndex - 1] : snapPointsOffset[targetSnapPointIndex + 1] - snapPointsOffset[targetSnapPointIndex];\n const percentageDragged = absDraggedDistance / Math.abs(snapPointDistance);\n if (isOverlaySnapPoint) {\n return 1 - percentageDragged;\n } else {\n return percentageDragged;\n }\n }\n return {\n isLastSnapPoint,\n activeSnapPoint,\n shouldFade,\n getPercentageDragged,\n setActiveSnapPoint,\n activeSnapPointIndex,\n onRelease,\n onDrag,\n snapPointsOffset\n };\n}\n\nconst noop = ()=>()=>{};\nfunction useScaleBackground() {\n const { direction, isOpen, shouldScaleBackground, setBackgroundColorOnScale, noBodyStyles } = useDrawerContext();\n const timeoutIdRef = React__default.useRef(null);\n const initialBackgroundColor = useMemo(()=>document.body.style.backgroundColor, []);\n function getScale() {\n return (window.innerWidth - WINDOW_TOP_OFFSET) / window.innerWidth;\n }\n React__default.useEffect(()=>{\n if (isOpen && shouldScaleBackground) {\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]') || document.querySelector('[vaul-drawer-wrapper]');\n if (!wrapper) return;\n chain(setBackgroundColorOnScale && !noBodyStyles ? assignStyle(document.body, {\n background: 'black'\n }) : noop, assignStyle(wrapper, {\n transformOrigin: isVertical(direction) ? 'top' : 'left',\n transitionProperty: 'transform, border-radius',\n transitionDuration: `${TRANSITIONS.DURATION}s`,\n transitionTimingFunction: `cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n }));\n const wrapperStylesCleanup = assignStyle(wrapper, {\n borderRadius: `${BORDER_RADIUS}px`,\n overflow: 'hidden',\n ...isVertical(direction) ? {\n transform: `scale(${getScale()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`\n } : {\n transform: `scale(${getScale()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`\n }\n });\n return ()=>{\n wrapperStylesCleanup();\n timeoutIdRef.current = window.setTimeout(()=>{\n if (initialBackgroundColor) {\n document.body.style.background = initialBackgroundColor;\n } else {\n document.body.style.removeProperty('background');\n }\n }, TRANSITIONS.DURATION * 1000);\n };\n }\n }, [\n isOpen,\n shouldScaleBackground,\n initialBackgroundColor\n ]);\n}\n\nlet previousBodyPosition = null;\n/**\n * This hook is necessary to prevent buggy behavior on iOS devices (need to test on Android).\n * I won't get into too much detail about what bugs it solves, but so far I've found that setting the body to `position: fixed` is the most reliable way to prevent those bugs.\n * Issues that this hook solves:\n * https://github.com/emilkowalski/vaul/issues/435\n * https://github.com/emilkowalski/vaul/issues/433\n * And more that I discovered, but were just not reported.\n */ function usePositionFixed({ isOpen, modal, nested, hasBeenOpened, preventScrollRestoration, noBodyStyles }) {\n const [activeUrl, setActiveUrl] = React__default.useState(()=>typeof window !== 'undefined' ? window.location.href : '');\n const scrollPos = React__default.useRef(0);\n const setPositionFixed = React__default.useCallback(()=>{\n // All browsers on iOS will return true here.\n if (!isSafari()) return;\n // If previousBodyPosition is already set, don't set it again.\n if (previousBodyPosition === null && isOpen && !noBodyStyles) {\n previousBodyPosition = {\n position: document.body.style.position,\n top: document.body.style.top,\n left: document.body.style.left,\n height: document.body.style.height,\n right: 'unset'\n };\n // Update the dom inside an animation frame\n const { scrollX, innerHeight } = window;\n document.body.style.setProperty('position', 'fixed', 'important');\n Object.assign(document.body.style, {\n top: `${-scrollPos.current}px`,\n left: `${-scrollX}px`,\n right: '0px',\n height: 'auto'\n });\n window.setTimeout(()=>window.requestAnimationFrame(()=>{\n // Attempt to check if the bottom bar appeared due to the position change\n const bottomBarHeight = innerHeight - window.innerHeight;\n if (bottomBarHeight && scrollPos.current >= innerHeight) {\n // Move the content further up so that the bottom bar doesn't hide it\n document.body.style.top = `${-(scrollPos.current + bottomBarHeight)}px`;\n }\n }), 300);\n }\n }, [\n isOpen\n ]);\n const restorePositionSetting = React__default.useCallback(()=>{\n // All browsers on iOS will return true here.\n if (!isSafari()) return;\n if (previousBodyPosition !== null && !noBodyStyles) {\n // Convert the position from \"px\" to Int\n const y = -parseInt(document.body.style.top, 10);\n const x = -parseInt(document.body.style.left, 10);\n // Restore styles\n Object.assign(document.body.style, previousBodyPosition);\n window.requestAnimationFrame(()=>{\n if (preventScrollRestoration && activeUrl !== window.location.href) {\n setActiveUrl(window.location.href);\n return;\n }\n window.scrollTo(x, y);\n });\n previousBodyPosition = null;\n }\n }, [\n activeUrl\n ]);\n React__default.useEffect(()=>{\n function onScroll() {\n scrollPos.current = window.scrollY;\n }\n onScroll();\n window.addEventListener('scroll', onScroll);\n return ()=>{\n window.removeEventListener('scroll', onScroll);\n };\n }, []);\n React__default.useEffect(()=>{\n if (!modal) return;\n return ()=>{\n if (typeof document === 'undefined') return;\n // Another drawer is opened, safe to ignore the execution\n const hasDrawerOpened = !!document.querySelector('[data-vaul-drawer]');\n if (hasDrawerOpened) return;\n restorePositionSetting();\n };\n }, [\n modal,\n restorePositionSetting\n ]);\n React__default.useEffect(()=>{\n if (nested || !hasBeenOpened) return;\n // This is needed to force Safari toolbar to show **before** the drawer starts animating to prevent a gnarly shift from happening\n if (isOpen) {\n // avoid for standalone mode (PWA)\n const isStandalone = window.matchMedia('(display-mode: standalone)').matches;\n !isStandalone && setPositionFixed();\n if (!modal) {\n window.setTimeout(()=>{\n restorePositionSetting();\n }, 500);\n }\n } else {\n restorePositionSetting();\n }\n }, [\n isOpen,\n hasBeenOpened,\n activeUrl,\n modal,\n nested,\n setPositionFixed,\n restorePositionSetting\n ]);\n return {\n restorePositionSetting\n };\n}\n\nfunction Root({ open: openProp, onOpenChange, children, onDrag: onDragProp, onRelease: onReleaseProp, snapPoints, shouldScaleBackground = false, setBackgroundColorOnScale = true, closeThreshold = CLOSE_THRESHOLD, scrollLockTimeout = SCROLL_LOCK_TIMEOUT, dismissible = true, handleOnly = false, fadeFromIndex = snapPoints && snapPoints.length - 1, activeSnapPoint: activeSnapPointProp, setActiveSnapPoint: setActiveSnapPointProp, fixed, modal = true, onClose, nested, noBodyStyles = false, direction = 'bottom', defaultOpen = false, disablePreventScroll = true, snapToSequentialPoint = false, preventScrollRestoration = false, repositionInputs = true, onAnimationEnd, container, autoFocus = false }) {\n var _drawerRef_current, _drawerRef_current1;\n const [isOpen = false, setIsOpen] = useControllableState({\n defaultProp: defaultOpen,\n prop: openProp,\n onChange: (o)=>{\n onOpenChange == null ? void 0 : onOpenChange(o);\n if (!o && !nested) {\n restorePositionSetting();\n }\n setTimeout(()=>{\n onAnimationEnd == null ? void 0 : onAnimationEnd(o);\n }, TRANSITIONS.DURATION * 1000);\n if (o && !modal) {\n if (typeof window !== 'undefined') {\n window.requestAnimationFrame(()=>{\n document.body.style.pointerEvents = 'auto';\n });\n }\n }\n if (!o) {\n // This will be removed when the exit animation ends (`500ms`)\n document.body.style.pointerEvents = 'auto';\n }\n }\n });\n const [hasBeenOpened, setHasBeenOpened] = React__default.useState(false);\n const [isDragging, setIsDragging] = React__default.useState(false);\n const [justReleased, setJustReleased] = React__default.useState(false);\n const overlayRef = React__default.useRef(null);\n const openTime = React__default.useRef(null);\n const dragStartTime = React__default.useRef(null);\n const dragEndTime = React__default.useRef(null);\n const lastTimeDragPrevented = React__default.useRef(null);\n const isAllowedToDrag = React__default.useRef(false);\n const nestedOpenChangeTimer = React__default.useRef(null);\n const pointerStart = React__default.useRef(0);\n const keyboardIsOpen = React__default.useRef(false);\n const shouldAnimate = React__default.useRef(!defaultOpen);\n const previousDiffFromInitial = React__default.useRef(0);\n const drawerRef = React__default.useRef(null);\n const drawerHeightRef = React__default.useRef(((_drawerRef_current = drawerRef.current) == null ? void 0 : _drawerRef_current.getBoundingClientRect().height) || 0);\n const drawerWidthRef = React__default.useRef(((_drawerRef_current1 = drawerRef.current) == null ? void 0 : _drawerRef_current1.getBoundingClientRect().width) || 0);\n const initialDrawerHeight = React__default.useRef(0);\n const onSnapPointChange = React__default.useCallback((activeSnapPointIndex)=>{\n // Change openTime ref when we reach the last snap point to prevent dragging for 500ms incase it's scrollable.\n if (snapPoints && activeSnapPointIndex === snapPointsOffset.length - 1) openTime.current = new Date();\n }, []);\n const { activeSnapPoint, activeSnapPointIndex, setActiveSnapPoint, onRelease: onReleaseSnapPoints, snapPointsOffset, onDrag: onDragSnapPoints, shouldFade, getPercentageDragged: getSnapPointsPercentageDragged } = useSnapPoints({\n snapPoints,\n activeSnapPointProp,\n setActiveSnapPointProp,\n drawerRef,\n fadeFromIndex,\n overlayRef,\n onSnapPointChange,\n direction,\n container,\n snapToSequentialPoint\n });\n usePreventScroll({\n isDisabled: !isOpen || isDragging || !modal || justReleased || !hasBeenOpened || !repositionInputs || !disablePreventScroll\n });\n const { restorePositionSetting } = usePositionFixed({\n isOpen,\n modal,\n nested: nested != null ? nested : false,\n hasBeenOpened,\n preventScrollRestoration,\n noBodyStyles\n });\n function getScale() {\n return (window.innerWidth - WINDOW_TOP_OFFSET) / window.innerWidth;\n }\n function onPress(event) {\n var _drawerRef_current, _drawerRef_current1;\n if (!dismissible && !snapPoints) return;\n if (drawerRef.current && !drawerRef.current.contains(event.target)) return;\n drawerHeightRef.current = ((_drawerRef_current = drawerRef.current) == null ? void 0 : _drawerRef_current.getBoundingClientRect().height) || 0;\n drawerWidthRef.current = ((_drawerRef_current1 = drawerRef.current) == null ? void 0 : _drawerRef_current1.getBoundingClientRect().width) || 0;\n setIsDragging(true);\n dragStartTime.current = new Date();\n // iOS doesn't trigger mouseUp after scrolling so we need to listen to touched in order to disallow dragging\n if (isIOS()) {\n window.addEventListener('touchend', ()=>isAllowedToDrag.current = false, {\n once: true\n });\n }\n // Ensure we maintain correct pointer capture even when going outside of the drawer\n event.target.setPointerCapture(event.pointerId);\n pointerStart.current = isVertical(direction) ? event.pageY : event.pageX;\n }\n function shouldDrag(el, isDraggingInDirection) {\n var _window_getSelection;\n let element = el;\n const highlightedText = (_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString();\n const swipeAmount = drawerRef.current ? getTranslate(drawerRef.current, direction) : null;\n const date = new Date();\n // Fixes https://github.com/emilkowalski/vaul/issues/483\n if (element.tagName === 'SELECT') {\n return false;\n }\n if (element.hasAttribute('data-vaul-no-drag') || element.closest('[data-vaul-no-drag]')) {\n return false;\n }\n if (direction === 'right' || direction === 'left') {\n return true;\n }\n // Allow scrolling when animating\n if (openTime.current && date.getTime() - openTime.current.getTime() < 500) {\n return false;\n }\n if (swipeAmount !== null) {\n if (direction === 'bottom' ? swipeAmount > 0 : swipeAmount < 0) {\n return true;\n }\n }\n // Don't drag if there's highlighted text\n if (highlightedText && highlightedText.length > 0) {\n return false;\n }\n // Disallow dragging if drawer was scrolled within `scrollLockTimeout`\n if (lastTimeDragPrevented.current && date.getTime() - lastTimeDragPrevented.current.getTime() < scrollLockTimeout && swipeAmount === 0) {\n lastTimeDragPrevented.current = date;\n return false;\n }\n if (isDraggingInDirection) {\n lastTimeDragPrevented.current = date;\n // We are dragging down so we should allow scrolling\n return false;\n }\n // Keep climbing up the DOM tree as long as there's a parent\n while(element){\n // Check if the element is scrollable\n if (element.scrollHeight > element.clientHeight) {\n if (element.scrollTop !== 0) {\n lastTimeDragPrevented.current = new Date();\n // The element is scrollable and not scrolled to the top, so don't drag\n return false;\n }\n if (element.getAttribute('role') === 'dialog') {\n return true;\n }\n }\n // Move up to the parent element\n element = element.parentNode;\n }\n // No scrollable parents not scrolled to the top found, so drag\n return true;\n }\n function onDrag(event) {\n if (!drawerRef.current) {\n return;\n }\n // We need to know how much of the drawer has been dragged in percentages so that we can transform background accordingly\n if (isDragging) {\n const directionMultiplier = direction === 'bottom' || direction === 'right' ? 1 : -1;\n const draggedDistance = (pointerStart.current - (isVertical(direction) ? event.pageY : event.pageX)) * directionMultiplier;\n const isDraggingInDirection = draggedDistance > 0;\n // Pre condition for disallowing dragging in the close direction.\n const noCloseSnapPointsPreCondition = snapPoints && !dismissible && !isDraggingInDirection;\n // Disallow dragging down to close when first snap point is the active one and dismissible prop is set to false.\n if (noCloseSnapPointsPreCondition && activeSnapPointIndex === 0) return;\n // We need to capture last time when drag with scroll was triggered and have a timeout between\n const absDraggedDistance = Math.abs(draggedDistance);\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]');\n const drawerDimension = direction === 'bottom' || direction === 'top' ? drawerHeightRef.current : drawerWidthRef.current;\n // Calculate the percentage dragged, where 1 is the closed position\n let percentageDragged = absDraggedDistance / drawerDimension;\n const snapPointPercentageDragged = getSnapPointsPercentageDragged(absDraggedDistance, isDraggingInDirection);\n if (snapPointPercentageDragged !== null) {\n percentageDragged = snapPointPercentageDragged;\n }\n // Disallow close dragging beyond the smallest snap point.\n if (noCloseSnapPointsPreCondition && percentageDragged >= 1) {\n return;\n }\n if (!isAllowedToDrag.current && !shouldDrag(event.target, isDraggingInDirection)) return;\n drawerRef.current.classList.add(DRAG_CLASS);\n // If shouldDrag gave true once after pressing down on the drawer, we set isAllowedToDrag to true and it will remain true until we let go, there's no reason to disable dragging mid way, ever, and that's the solution to it\n isAllowedToDrag.current = true;\n set(drawerRef.current, {\n transition: 'none'\n });\n set(overlayRef.current, {\n transition: 'none'\n });\n if (snapPoints) {\n onDragSnapPoints({\n draggedDistance\n });\n }\n // Run this only if snapPoints are not defined or if we are at the last snap point (highest one)\n if (isDraggingInDirection && !snapPoints) {\n const dampenedDraggedDistance = dampenValue(draggedDistance);\n const translateValue = Math.min(dampenedDraggedDistance * -1, 0) * directionMultiplier;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n return;\n }\n const opacityValue = 1 - percentageDragged;\n if (shouldFade || fadeFromIndex && activeSnapPointIndex === fadeFromIndex - 1) {\n onDragProp == null ? void 0 : onDragProp(event, percentageDragged);\n set(overlayRef.current, {\n opacity: `${opacityValue}`,\n transition: 'none'\n }, true);\n }\n if (wrapper && overlayRef.current && shouldScaleBackground) {\n // Calculate percentageDragged as a fraction (0 to 1)\n const scaleValue = Math.min(getScale() + percentageDragged * (1 - getScale()), 1);\n const borderRadiusValue = 8 - percentageDragged * 8;\n const translateValue = Math.max(0, 14 - percentageDragged * 14);\n set(wrapper, {\n borderRadius: `${borderRadiusValue}px`,\n transform: isVertical(direction) ? `scale(${scaleValue}) translate3d(0, ${translateValue}px, 0)` : `scale(${scaleValue}) translate3d(${translateValue}px, 0, 0)`,\n transition: 'none'\n }, true);\n }\n if (!snapPoints) {\n const translateValue = absDraggedDistance * directionMultiplier;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n }\n }\n }\n React__default.useEffect(()=>{\n window.requestAnimationFrame(()=>{\n shouldAnimate.current = true;\n });\n }, []);\n React__default.useEffect(()=>{\n var _window_visualViewport;\n function onVisualViewportChange() {\n if (!drawerRef.current || !repositionInputs) return;\n const focusedElement = document.activeElement;\n if (isInput(focusedElement) || keyboardIsOpen.current) {\n var _window_visualViewport;\n const visualViewportHeight = ((_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.height) || 0;\n const totalHeight = window.innerHeight;\n // This is the height of the keyboard\n let diffFromInitial = totalHeight - visualViewportHeight;\n const drawerHeight = drawerRef.current.getBoundingClientRect().height || 0;\n // Adjust drawer height only if it's tall enough\n const isTallEnough = drawerHeight > totalHeight * 0.8;\n if (!initialDrawerHeight.current) {\n initialDrawerHeight.current = drawerHeight;\n }\n const offsetFromTop = drawerRef.current.getBoundingClientRect().top;\n // visualViewport height may change due to somq e subtle changes to the keyboard. Checking if the height changed by 60 or more will make sure that they keyboard really changed its open state.\n if (Math.abs(previousDiffFromInitial.current - diffFromInitial) > 60) {\n keyboardIsOpen.current = !keyboardIsOpen.current;\n }\n if (snapPoints && snapPoints.length > 0 && snapPointsOffset && activeSnapPointIndex) {\n const activeSnapPointHeight = snapPointsOffset[activeSnapPointIndex] || 0;\n diffFromInitial += activeSnapPointHeight;\n }\n previousDiffFromInitial.current = diffFromInitial;\n // We don't have to change the height if the input is in view, when we are here we are in the opened keyboard state so we can correctly check if the input is in view\n if (drawerHeight > visualViewportHeight || keyboardIsOpen.current) {\n const height = drawerRef.current.getBoundingClientRect().height;\n let newDrawerHeight = height;\n if (height > visualViewportHeight) {\n newDrawerHeight = visualViewportHeight - (isTallEnough ? offsetFromTop : WINDOW_TOP_OFFSET);\n }\n // When fixed, don't move the drawer upwards if there's space, but rather only change it's height so it's fully scrollable when the keyboard is open\n if (fixed) {\n drawerRef.current.style.height = `${height - Math.max(diffFromInitial, 0)}px`;\n } else {\n drawerRef.current.style.height = `${Math.max(newDrawerHeight, visualViewportHeight - offsetFromTop)}px`;\n }\n } else if (!isMobileFirefox()) {\n drawerRef.current.style.height = `${initialDrawerHeight.current}px`;\n }\n if (snapPoints && snapPoints.length > 0 && !keyboardIsOpen.current) {\n drawerRef.current.style.bottom = `0px`;\n } else {\n // Negative bottom value would never make sense\n drawerRef.current.style.bottom = `${Math.max(diffFromInitial, 0)}px`;\n }\n }\n }\n (_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.addEventListener('resize', onVisualViewportChange);\n return ()=>{\n var _window_visualViewport;\n return (_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.removeEventListener('resize', onVisualViewportChange);\n };\n }, [\n activeSnapPointIndex,\n snapPoints,\n snapPointsOffset\n ]);\n function closeDrawer(fromWithin) {\n cancelDrag();\n onClose == null ? void 0 : onClose();\n if (!fromWithin) {\n setIsOpen(false);\n }\n setTimeout(()=>{\n if (snapPoints) {\n setActiveSnapPoint(snapPoints[0]);\n }\n }, TRANSITIONS.DURATION * 1000); // seconds to ms\n }\n function resetDrawer() {\n if (!drawerRef.current) return;\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]');\n const currentSwipeAmount = getTranslate(drawerRef.current, direction);\n set(drawerRef.current, {\n transform: 'translate3d(0, 0, 0)',\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n });\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '1'\n });\n // Don't reset background if swiped upwards\n if (shouldScaleBackground && currentSwipeAmount && currentSwipeAmount > 0 && isOpen) {\n set(wrapper, {\n borderRadius: `${BORDER_RADIUS}px`,\n overflow: 'hidden',\n ...isVertical(direction) ? {\n transform: `scale(${getScale()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,\n transformOrigin: 'top'\n } : {\n transform: `scale(${getScale()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`,\n transformOrigin: 'left'\n },\n transitionProperty: 'transform, border-radius',\n transitionDuration: `${TRANSITIONS.DURATION}s`,\n transitionTimingFunction: `cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n }, true);\n }\n }\n function cancelDrag() {\n if (!isDragging || !drawerRef.current) return;\n drawerRef.current.classList.remove(DRAG_CLASS);\n isAllowedToDrag.current = false;\n setIsDragging(false);\n dragEndTime.current = new Date();\n }\n function onRelease(event) {\n if (!isDragging || !drawerRef.current) return;\n drawerRef.current.classList.remove(DRAG_CLASS);\n isAllowedToDrag.current = false;\n setIsDragging(false);\n dragEndTime.current = new Date();\n const swipeAmount = getTranslate(drawerRef.current, direction);\n if (!event || !shouldDrag(event.target, false) || !swipeAmount || Number.isNaN(swipeAmount)) return;\n if (dragStartTime.current === null) return;\n const timeTaken = dragEndTime.current.getTime() - dragStartTime.current.getTime();\n const distMoved = pointerStart.current - (isVertical(direction) ? event.pageY : event.pageX);\n const velocity = Math.abs(distMoved) / timeTaken;\n if (velocity > 0.05) {\n // `justReleased` is needed to prevent the drawer from focusing on an input when the drag ends, as it's not the intent most of the time.\n setJustReleased(true);\n setTimeout(()=>{\n setJustReleased(false);\n }, 200);\n }\n if (snapPoints) {\n const directionMultiplier = direction === 'bottom' || direction === 'right' ? 1 : -1;\n onReleaseSnapPoints({\n draggedDistance: distMoved * directionMultiplier,\n closeDrawer,\n velocity,\n dismissible\n });\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n return;\n }\n // Moved upwards, don't do anything\n if (direction === 'bottom' || direction === 'right' ? distMoved > 0 : distMoved < 0) {\n resetDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n return;\n }\n if (velocity > VELOCITY_THRESHOLD) {\n closeDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, false);\n return;\n }\n var _drawerRef_current_getBoundingClientRect_height;\n const visibleDrawerHeight = Math.min((_drawerRef_current_getBoundingClientRect_height = drawerRef.current.getBoundingClientRect().height) != null ? _drawerRef_current_getBoundingClientRect_height : 0, window.innerHeight);\n var _drawerRef_current_getBoundingClientRect_width;\n const visibleDrawerWidth = Math.min((_drawerRef_current_getBoundingClientRect_width = drawerRef.current.getBoundingClientRect().width) != null ? _drawerRef_current_getBoundingClientRect_width : 0, window.innerWidth);\n const isHorizontalSwipe = direction === 'left' || direction === 'right';\n if (Math.abs(swipeAmount) >= (isHorizontalSwipe ? visibleDrawerWidth : visibleDrawerHeight) * closeThreshold) {\n closeDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, false);\n return;\n }\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n resetDrawer();\n }\n React__default.useEffect(()=>{\n // Trigger enter animation without using CSS animation\n if (isOpen) {\n set(document.documentElement, {\n scrollBehavior: 'auto'\n });\n openTime.current = new Date();\n }\n return ()=>{\n reset(document.documentElement, 'scrollBehavior');\n };\n }, [\n isOpen\n ]);\n function onNestedOpenChange(o) {\n const scale = o ? (window.innerWidth - NESTED_DISPLACEMENT) / window.innerWidth : 1;\n const initialTranslate = o ? -NESTED_DISPLACEMENT : 0;\n if (nestedOpenChangeTimer.current) {\n window.clearTimeout(nestedOpenChangeTimer.current);\n }\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `scale(${scale}) translate3d(0, ${initialTranslate}px, 0)` : `scale(${scale}) translate3d(${initialTranslate}px, 0, 0)`\n });\n if (!o && drawerRef.current) {\n nestedOpenChangeTimer.current = setTimeout(()=>{\n const translateValue = getTranslate(drawerRef.current, direction);\n set(drawerRef.current, {\n transition: 'none',\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n }, 500);\n }\n }\n function onNestedDrag(_event, percentageDragged) {\n if (percentageDragged < 0) return;\n const initialScale = (window.innerWidth - NESTED_DISPLACEMENT) / window.innerWidth;\n const newScale = initialScale + percentageDragged * (1 - initialScale);\n const newTranslate = -NESTED_DISPLACEMENT + percentageDragged * NESTED_DISPLACEMENT;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `scale(${newScale}) translate3d(0, ${newTranslate}px, 0)` : `scale(${newScale}) translate3d(${newTranslate}px, 0, 0)`,\n transition: 'none'\n });\n }\n function onNestedRelease(_event, o) {\n const dim = isVertical(direction) ? window.innerHeight : window.innerWidth;\n const scale = o ? (dim - NESTED_DISPLACEMENT) / dim : 1;\n const translate = o ? -NESTED_DISPLACEMENT : 0;\n if (o) {\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `scale(${scale}) translate3d(0, ${translate}px, 0)` : `scale(${scale}) translate3d(${translate}px, 0, 0)`\n });\n }\n }\n React__default.useEffect(()=>{\n if (!modal) {\n // Need to do this manually unfortunately\n window.requestAnimationFrame(()=>{\n document.body.style.pointerEvents = 'auto';\n });\n }\n }, [\n modal\n ]);\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Root, {\n defaultOpen: defaultOpen,\n onOpenChange: (open)=>{\n if (!dismissible && !open) return;\n if (open) {\n setHasBeenOpened(true);\n } else {\n closeDrawer(true);\n }\n setIsOpen(open);\n },\n open: isOpen\n }, /*#__PURE__*/ React__default.createElement(DrawerContext.Provider, {\n value: {\n activeSnapPoint,\n snapPoints,\n setActiveSnapPoint,\n drawerRef,\n overlayRef,\n onOpenChange,\n onPress,\n onRelease,\n onDrag,\n dismissible,\n shouldAnimate,\n handleOnly,\n isOpen,\n isDragging,\n shouldFade,\n closeDrawer,\n onNestedDrag,\n onNestedOpenChange,\n onNestedRelease,\n keyboardIsOpen,\n modal,\n snapPointsOffset,\n activeSnapPointIndex,\n direction,\n shouldScaleBackground,\n setBackgroundColorOnScale,\n noBodyStyles,\n container,\n autoFocus\n }\n }, children));\n}\nconst Overlay = /*#__PURE__*/ React__default.forwardRef(function({ ...rest }, ref) {\n const { overlayRef, snapPoints, onRelease, shouldFade, isOpen, modal, shouldAnimate } = useDrawerContext();\n const composedRef = useComposedRefs(ref, overlayRef);\n const hasSnapPoints = snapPoints && snapPoints.length > 0;\n // Overlay is the component that is locking scroll, removing it will unlock the scroll without having to dig into Radix's Dialog library\n if (!modal) {\n return null;\n }\n const onMouseUp = React__default.useCallback((event)=>onRelease(event), [\n onRelease\n ]);\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Overlay, {\n onMouseUp: onMouseUp,\n ref: composedRef,\n \"data-vaul-overlay\": \"\",\n \"data-vaul-snap-points\": isOpen && hasSnapPoints ? 'true' : 'false',\n \"data-vaul-snap-points-overlay\": isOpen && shouldFade ? 'true' : 'false',\n \"data-vaul-animate\": (shouldAnimate == null ? void 0 : shouldAnimate.current) ? 'true' : 'false',\n ...rest\n });\n});\nOverlay.displayName = 'Drawer.Overlay';\nconst Content = /*#__PURE__*/ React__default.forwardRef(function({ onPointerDownOutside, style, onOpenAutoFocus, ...rest }, ref) {\n const { drawerRef, onPress, onRelease, onDrag, keyboardIsOpen, snapPointsOffset, activeSnapPointIndex, modal, isOpen, direction, snapPoints, container, handleOnly, shouldAnimate, autoFocus } = useDrawerContext();\n // Needed to use transition instead of animations\n const [delayedSnapPoints, setDelayedSnapPoints] = React__default.useState(false);\n const composedRef = useComposedRefs(ref, drawerRef);\n const pointerStartRef = React__default.useRef(null);\n const lastKnownPointerEventRef = React__default.useRef(null);\n const wasBeyondThePointRef = React__default.useRef(false);\n const hasSnapPoints = snapPoints && snapPoints.length > 0;\n useScaleBackground();\n const isDeltaInDirection = (delta, direction, threshold = 0)=>{\n if (wasBeyondThePointRef.current) return true;\n const deltaY = Math.abs(delta.y);\n const deltaX = Math.abs(delta.x);\n const isDeltaX = deltaX > deltaY;\n const dFactor = [\n 'bottom',\n 'right'\n ].includes(direction) ? 1 : -1;\n if (direction === 'left' || direction === 'right') {\n const isReverseDirection = delta.x * dFactor < 0;\n if (!isReverseDirection && deltaX >= 0 && deltaX <= threshold) {\n return isDeltaX;\n }\n } else {\n const isReverseDirection = delta.y * dFactor < 0;\n if (!isReverseDirection && deltaY >= 0 && deltaY <= threshold) {\n return !isDeltaX;\n }\n }\n wasBeyondThePointRef.current = true;\n return true;\n };\n React__default.useEffect(()=>{\n if (hasSnapPoints) {\n window.requestAnimationFrame(()=>{\n setDelayedSnapPoints(true);\n });\n }\n }, []);\n function handleOnPointerUp(event) {\n pointerStartRef.current = null;\n wasBeyondThePointRef.current = false;\n onRelease(event);\n }\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Content, {\n \"data-vaul-drawer-direction\": direction,\n \"data-vaul-drawer\": \"\",\n \"data-vaul-delayed-snap-points\": delayedSnapPoints ? 'true' : 'false',\n \"data-vaul-snap-points\": isOpen && hasSnapPoints ? 'true' : 'false',\n \"data-vaul-custom-container\": container ? 'true' : 'false',\n \"data-vaul-animate\": (shouldAnimate == null ? void 0 : shouldAnimate.current) ? 'true' : 'false',\n ...rest,\n ref: composedRef,\n style: snapPointsOffset && snapPointsOffset.length > 0 ? {\n '--snap-point-height': `${snapPointsOffset[activeSnapPointIndex != null ? activeSnapPointIndex : 0]}px`,\n ...style\n } : style,\n onPointerDown: (event)=>{\n if (handleOnly) return;\n rest.onPointerDown == null ? void 0 : rest.onPointerDown.call(rest, event);\n pointerStartRef.current = {\n x: event.pageX,\n y: event.pageY\n };\n onPress(event);\n },\n onOpenAutoFocus: (e)=>{\n onOpenAutoFocus == null ? void 0 : onOpenAutoFocus(e);\n if (!autoFocus) {\n e.preventDefault();\n }\n },\n onPointerDownOutside: (e)=>{\n onPointerDownOutside == null ? void 0 : onPointerDownOutside(e);\n if (!modal || e.defaultPrevented) {\n e.preventDefault();\n return;\n }\n if (keyboardIsOpen.current) {\n keyboardIsOpen.current = false;\n }\n },\n onFocusOutside: (e)=>{\n if (!modal) {\n e.preventDefault();\n return;\n }\n },\n onPointerMove: (event)=>{\n lastKnownPointerEventRef.current = event;\n if (handleOnly) return;\n rest.onPointerMove == null ? void 0 : rest.onPointerMove.call(rest, event);\n if (!pointerStartRef.current) return;\n const yPosition = event.pageY - pointerStartRef.current.y;\n const xPosition = event.pageX - pointerStartRef.current.x;\n const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n const delta = {\n x: xPosition,\n y: yPosition\n };\n const isAllowedToSwipe = isDeltaInDirection(delta, direction, swipeStartThreshold);\n if (isAllowedToSwipe) onDrag(event);\n else if (Math.abs(xPosition) > swipeStartThreshold || Math.abs(yPosition) > swipeStartThreshold) {\n pointerStartRef.current = null;\n }\n },\n onPointerUp: (event)=>{\n rest.onPointerUp == null ? void 0 : rest.onPointerUp.call(rest, event);\n pointerStartRef.current = null;\n wasBeyondThePointRef.current = false;\n onRelease(event);\n },\n onPointerOut: (event)=>{\n rest.onPointerOut == null ? void 0 : rest.onPointerOut.call(rest, event);\n handleOnPointerUp(lastKnownPointerEventRef.current);\n },\n onContextMenu: (event)=>{\n rest.onContextMenu == null ? void 0 : rest.onContextMenu.call(rest, event);\n if (lastKnownPointerEventRef.current) {\n handleOnPointerUp(lastKnownPointerEventRef.current);\n }\n }\n });\n});\nContent.displayName = 'Drawer.Content';\nconst LONG_HANDLE_PRESS_TIMEOUT = 250;\nconst DOUBLE_TAP_TIMEOUT = 120;\nconst Handle = /*#__PURE__*/ React__default.forwardRef(function({ preventCycle = false, children, ...rest }, ref) {\n const { closeDrawer, isDragging, snapPoints, activeSnapPoint, setActiveSnapPoint, dismissible, handleOnly, isOpen, onPress, onDrag } = useDrawerContext();\n const closeTimeoutIdRef = React__default.useRef(null);\n const shouldCancelInteractionRef = React__default.useRef(false);\n function handleStartCycle() {\n // Stop if this is the second click of a double click\n if (shouldCancelInteractionRef.current) {\n handleCancelInteraction();\n return;\n }\n window.setTimeout(()=>{\n handleCycleSnapPoints();\n }, DOUBLE_TAP_TIMEOUT);\n }\n function handleCycleSnapPoints() {\n // Prevent accidental taps while resizing drawer\n if (isDragging || preventCycle || shouldCancelInteractionRef.current) {\n handleCancelInteraction();\n return;\n }\n // Make sure to clear the timeout id if the user releases the handle before the cancel timeout\n handleCancelInteraction();\n if (!snapPoints || snapPoints.length === 0) {\n if (!dismissible) {\n closeDrawer();\n }\n return;\n }\n const isLastSnapPoint = activeSnapPoint === snapPoints[snapPoints.length - 1];\n if (isLastSnapPoint && dismissible) {\n closeDrawer();\n return;\n }\n const currentSnapIndex = snapPoints.findIndex((point)=>point === activeSnapPoint);\n if (currentSnapIndex === -1) return; // activeSnapPoint not found in snapPoints\n const nextSnapPoint = snapPoints[currentSnapIndex + 1];\n setActiveSnapPoint(nextSnapPoint);\n }\n function handleStartInteraction() {\n closeTimeoutIdRef.current = window.setTimeout(()=>{\n // Cancel click interaction on a long press\n shouldCancelInteractionRef.current = true;\n }, LONG_HANDLE_PRESS_TIMEOUT);\n }\n function handleCancelInteraction() {\n if (closeTimeoutIdRef.current) {\n window.clearTimeout(closeTimeoutIdRef.current);\n }\n shouldCancelInteractionRef.current = false;\n }\n return /*#__PURE__*/ React__default.createElement(\"div\", {\n onClick: handleStartCycle,\n onPointerCancel: handleCancelInteraction,\n onPointerDown: (e)=>{\n if (handleOnly) onPress(e);\n handleStartInteraction();\n },\n onPointerMove: (e)=>{\n if (handleOnly) onDrag(e);\n },\n // onPointerUp is already handled by the content component\n ref: ref,\n \"data-vaul-drawer-visible\": isOpen ? 'true' : 'false',\n \"data-vaul-handle\": \"\",\n \"aria-hidden\": \"true\",\n ...rest\n }, /*#__PURE__*/ React__default.createElement(\"span\", {\n \"data-vaul-handle-hitarea\": \"\",\n \"aria-hidden\": \"true\"\n }, children));\n});\nHandle.displayName = 'Drawer.Handle';\nfunction NestedRoot({ onDrag, onOpenChange, open: nestedIsOpen, ...rest }) {\n const { onNestedDrag, onNestedOpenChange, onNestedRelease } = useDrawerContext();\n if (!onNestedDrag) {\n throw new Error('Drawer.NestedRoot must be placed in another drawer');\n }\n return /*#__PURE__*/ React__default.createElement(Root, {\n nested: true,\n open: nestedIsOpen,\n onClose: ()=>{\n onNestedOpenChange(false);\n },\n onDrag: (e, p)=>{\n onNestedDrag(e, p);\n onDrag == null ? void 0 : onDrag(e, p);\n },\n onOpenChange: (o)=>{\n if (o) {\n onNestedOpenChange(o);\n }\n onOpenChange == null ? void 0 : onOpenChange(o);\n },\n onRelease: onNestedRelease,\n ...rest\n });\n}\nfunction Portal(props) {\n const context = useDrawerContext();\n const { container = context.container, ...portalProps } = props;\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Portal, {\n container: container,\n ...portalProps\n });\n}\nconst Drawer = {\n Root,\n NestedRoot,\n Content,\n Overlay,\n Trigger: DialogPrimitive.Trigger,\n Portal,\n Handle,\n Close: DialogPrimitive.Close,\n Title: DialogPrimitive.Title,\n Description: DialogPrimitive.Description\n};\n\nexport { Content, Drawer, Handle, NestedRoot, Overlay, Portal, Root };\n","import { forwardRef, type ComponentPropsWithoutRef, type ElementRef, type HTMLAttributes } from 'react';\nimport { Drawer as DrawerPrimitive } from 'vaul';\nimport { cn } from '@/lib/utils';\n\nexport const Drawer = ({\n shouldScaleBackground = true,\n ...props\n}: ComponentPropsWithoutRef<typeof DrawerPrimitive.Root>) => (\n <DrawerPrimitive.Root shouldScaleBackground={shouldScaleBackground} {...props} />\n);\nDrawer.displayName = 'Drawer';\n\nexport const DrawerTrigger = DrawerPrimitive.Trigger;\nexport const DrawerPortal = DrawerPrimitive.Portal;\nexport const DrawerClose = DrawerPrimitive.Close;\n\nexport const DrawerOverlay = forwardRef<\n ElementRef<typeof DrawerPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>\n>(function DrawerOverlay({ className, ...props }, ref) {\n return (\n <DrawerPrimitive.Overlay\n ref={ref}\n className={cn('fixed inset-0 z-50 bg-black/40', className)}\n {...props}\n />\n );\n});\n\nexport const DrawerContent = forwardRef<\n ElementRef<typeof DrawerPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>\n>(function DrawerContent({ className, children, ...props }, ref) {\n return (\n <DrawerPortal>\n <DrawerOverlay />\n <DrawerPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-xl',\n 'border-t border-border bg-card',\n className,\n )}\n {...props}\n >\n <div className=\"mx-auto mt-3 h-1.5 w-12 rounded-full bg-border\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n );\n});\n\nexport function DrawerHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('grid gap-1 p-4 text-center sm:text-left', className)} {...props} />;\n}\n\nexport function DrawerFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-auto flex flex-col gap-2 p-4', className)} {...props} />;\n}\n\nexport const DrawerTitle = forwardRef<\n ElementRef<typeof DrawerPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>\n>(function DrawerTitle({ className, ...props }, ref) {\n return (\n <DrawerPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold', className)}\n {...props}\n />\n );\n});\n\nexport const DrawerDescription = forwardRef<\n ElementRef<typeof DrawerPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>\n>(function DrawerDescription({ className, ...props }, ref) {\n return (\n <DrawerPrimitive.Description\n ref={ref}\n className={cn('text-sm text-foreground-muted', className)}\n {...props}\n />\n );\n});\n","import { forwardRef, useCallback, useId, useRef, useState, type DragEvent as ReactDragEvent, type ReactNode } from 'react';\nimport { File as FileIcon, Upload, X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nexport interface FileUploadProps {\n /** Accepted file types, e.g. `image/*` or `.pdf,.docx`. */\n accept?: string;\n /** Allow multiple files. */\n multiple?: boolean;\n /** Max file size in bytes. Files larger than this are rejected. */\n maxSize?: number;\n /** Controlled file list. */\n value?: File[];\n /** Called when files are added or removed. */\n onChange?: (files: File[]) => void;\n /** Helper text inside the drop zone. */\n hint?: ReactNode;\n /** Disable the picker entirely. */\n disabled?: boolean;\n className?: string;\n}\n\nfunction formatSize(bytes: number) {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / 1024 / 1024).toFixed(1)} MB`;\n}\n\n/**\n * Drag-and-drop file picker with an inline file list. Uncontrolled by default;\n * pass `value` + `onChange` to control externally.\n */\nexport const FileUpload = forwardRef<HTMLDivElement, FileUploadProps>(function FileUpload(\n { accept, multiple, maxSize, value, onChange, hint, disabled, className },\n ref,\n) {\n const inputRef = useRef<HTMLInputElement>(null);\n const inputId = useId();\n const [internal, setInternal] = useState<File[]>([]);\n const [over, setOver] = useState(false);\n const files = value ?? internal;\n\n const update = useCallback(\n (next: File[]) => {\n if (value === undefined) setInternal(next);\n onChange?.(next);\n },\n [onChange, value],\n );\n\n const addFiles = useCallback(\n (incoming: FileList | File[]) => {\n const arr = Array.from(incoming).filter(\n (f) => !maxSize || f.size <= maxSize,\n );\n update(multiple ? [...files, ...arr] : arr.slice(0, 1));\n },\n [files, maxSize, multiple, update],\n );\n\n const remove = (idx: number) => update(files.filter((_, i) => i !== idx));\n\n const onDrop = (e: ReactDragEvent<HTMLLabelElement>) => {\n e.preventDefault();\n setOver(false);\n if (disabled) return;\n addFiles(e.dataTransfer.files);\n };\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-3', className)}>\n <label\n htmlFor={inputId}\n onDragOver={(e) => {\n e.preventDefault();\n if (!disabled) setOver(true);\n }}\n onDragLeave={() => setOver(false)}\n onDrop={onDrop}\n className={cn(\n 'group relative flex cursor-pointer flex-col items-center justify-center gap-2',\n 'rounded-md border border-dashed border-border bg-background-subtle px-6 py-8',\n 'text-center transition-colors',\n 'hover:border-border-strong hover:bg-background-muted',\n over && 'border-accent bg-accent-soft',\n disabled && 'pointer-events-none opacity-50',\n )}\n >\n <Upload className=\"size-5 text-foreground-muted\" aria-hidden />\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium\">Drop files here, or click to browse</p>\n {hint && <p className=\"text-xs text-foreground-muted\">{hint}</p>}\n </div>\n <input\n ref={inputRef}\n id={inputId}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n className=\"sr-only\"\n onChange={(e) => e.target.files && addFiles(e.target.files)}\n />\n </label>\n\n {files.length > 0 && (\n <ul className=\"flex flex-col gap-2\">\n {files.map((file, idx) => (\n <li\n key={`${file.name}-${idx}`}\n className=\"flex items-center gap-3 rounded-md border border-border bg-card px-3 py-2\"\n >\n <FileIcon className=\"size-4 shrink-0 text-foreground-muted\" aria-hidden />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm\">{file.name}</p>\n <p className=\"text-xs text-foreground-muted\">{formatSize(file.size)}</p>\n </div>\n <button\n type=\"button\"\n onClick={() => remove(idx)}\n className=\"rounded p-1 text-foreground-muted hover:bg-background-muted hover:text-foreground\"\n aria-label={`Remove ${file.name}`}\n >\n <X className=\"size-4\" />\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { CheckCircle2, Info, AlertTriangle, XCircle, X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\nconst snackbar = cva(\n [\n 'relative pointer-events-auto w-full max-w-md',\n 'flex items-start gap-3 rounded-md border bg-card p-3 shadow-md',\n 'text-sm text-foreground',\n ],\n {\n variants: {\n variant: {\n default: 'border-border',\n info: 'border-info-border-soft',\n success: 'border-success-border-soft',\n warning: 'border-warning-border-soft',\n danger: 'border-danger-border-soft',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n);\n\nconst iconForVariant: Record<NonNullable<VariantProps<typeof snackbar>['variant']>, ReactNode> = {\n default: null,\n info: <Info className=\"size-4 shrink-0 mt-0.5 text-info-text\" aria-hidden />,\n success: <CheckCircle2 className=\"size-4 shrink-0 mt-0.5 text-success-text\" aria-hidden />,\n warning: <AlertTriangle className=\"size-4 shrink-0 mt-0.5 text-warning-text\" aria-hidden />,\n danger: <XCircle className=\"size-4 shrink-0 mt-0.5 text-danger-text\" aria-hidden />,\n};\n\nexport interface SnackbarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>,\n VariantProps<typeof snackbar> {\n /** Headline. */\n title?: ReactNode;\n /** Action button rendered on the right. */\n action?: ReactNode;\n /** Show a close (×) button on the right. */\n onClose?: () => void;\n /** Override the variant's default icon. Pass `false` to hide. */\n icon?: ReactNode | false;\n}\n\n/**\n * Persistent inline notification. Unlike Toast, Snackbar does **not** auto-\n * dismiss. Pair with an `action` button or an `onClose` handler.\n */\nexport const Snackbar = forwardRef<HTMLDivElement, SnackbarProps>(function Snackbar(\n { className, variant = 'default', title, action, onClose, icon, children, ...props },\n ref,\n) {\n const renderedIcon = icon === false ? null : icon ?? iconForVariant[variant ?? 'default'];\n\n return (\n <div ref={ref} role=\"status\" className={cn(snackbar({ variant }), className)} {...props}>\n {renderedIcon}\n <div className=\"min-w-0 flex-1\">\n {title && <p className=\"font-medium\">{title}</p>}\n {children && <p className=\"text-foreground-muted\">{children}</p>}\n </div>\n {action}\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Dismiss\"\n className=\"rounded p-1 text-foreground-muted hover:bg-background-muted hover:text-foreground\"\n >\n <X className=\"size-4\" />\n </button>\n )}\n </div>\n );\n});\n","import { forwardRef, useCallback, useState, type KeyboardEvent } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nexport interface TagInputProps {\n /** Controlled list of tags. */\n value?: string[];\n /** Default tags when uncontrolled. */\n defaultValue?: string[];\n /** Called when the tag list changes. */\n onChange?: (tags: string[]) => void;\n /** Placeholder shown inside the inline input. */\n placeholder?: string;\n /** Maximum number of tags. */\n max?: number;\n /** Disable the editor. */\n disabled?: boolean;\n /** Show a danger border. */\n error?: boolean;\n /** Treat these characters as separators (default: Enter + comma). */\n separators?: string[];\n className?: string;\n}\n\n/**\n * Chip-based multi-value input. Press Enter or comma to add. Backspace on an\n * empty input removes the last tag.\n */\nexport const TagInput = forwardRef<HTMLDivElement, TagInputProps>(function TagInput(\n {\n value,\n defaultValue = [],\n onChange,\n placeholder = 'Add and press Enter',\n max,\n disabled,\n error,\n separators = ['Enter', ','],\n className,\n },\n ref,\n) {\n const [internal, setInternal] = useState<string[]>(defaultValue);\n const [draft, setDraft] = useState('');\n const tags = value ?? internal;\n\n const update = useCallback(\n (next: string[]) => {\n if (value === undefined) setInternal(next);\n onChange?.(next);\n },\n [onChange, value],\n );\n\n const commit = (raw: string) => {\n const t = raw.trim();\n if (!t || tags.includes(t) || (max !== undefined && tags.length >= max)) return;\n update([...tags, t]);\n };\n\n const remove = (idx: number) => update(tags.filter((_, i) => i !== idx));\n\n const onKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (separators.includes(e.key)) {\n e.preventDefault();\n commit(draft);\n setDraft('');\n } else if (e.key === 'Backspace' && !draft && tags.length) {\n remove(tags.length - 1);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex min-h-9 w-full flex-wrap items-center gap-1.5 rounded-md border bg-card px-2 py-1.5',\n 'transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring',\n error ? 'border-danger focus-within:border-danger focus-within:ring-danger' : 'border-border',\n disabled && 'pointer-events-none opacity-50',\n className,\n )}\n >\n {tags.map((t, i) => (\n <span\n key={`${t}-${i}`}\n className=\"inline-flex items-center gap-1 rounded bg-background-muted px-2 py-0.5 text-xs\"\n >\n {t}\n <button\n type=\"button\"\n onClick={() => remove(i)}\n className=\"rounded p-0.5 text-foreground-muted hover:bg-background-subtle hover:text-foreground\"\n aria-label={`Remove ${t}`}\n >\n <X className=\"size-3\" />\n </button>\n </span>\n ))}\n <input\n value={draft}\n disabled={disabled}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={onKey}\n onBlur={() => {\n if (draft) {\n commit(draft);\n setDraft('');\n }\n }}\n placeholder={tags.length === 0 ? placeholder : undefined}\n className=\"min-w-[8ch] flex-1 bg-transparent text-sm outline-none placeholder:text-foreground-subtle\"\n />\n </div>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TimelineProps extends HTMLAttributes<HTMLOListElement> {}\n\nexport const Timeline = forwardRef<HTMLOListElement, TimelineProps>(function Timeline(\n { className, children, ...props },\n ref,\n) {\n return (\n <ol ref={ref} className={cn('relative flex flex-col gap-6', className)} {...props}>\n {children}\n </ol>\n );\n});\n\nexport interface TimelineItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Optional bullet override. Default: small accent dot. */\n bullet?: ReactNode;\n /** Hide the connector line below this item — use for the last item. */\n isLast?: boolean;\n}\n\nexport const TimelineItem = forwardRef<HTMLLIElement, TimelineItemProps>(function TimelineItem(\n { bullet, isLast, className, children, ...props },\n ref,\n) {\n return (\n <li ref={ref} className={cn('relative flex gap-4 pb-1', className)} {...props}>\n <div className=\"relative flex shrink-0 flex-col items-center\">\n <div className=\"flex size-6 items-center justify-center rounded-full border border-border bg-card text-foreground-muted\">\n {bullet ?? <span className=\"size-2 rounded-full bg-accent\" aria-hidden />}\n </div>\n {!isLast && <span className=\"mt-1 flex-1 w-px bg-border\" aria-hidden />}\n </div>\n <div className=\"min-w-0 flex-1 pb-4\">{children}</div>\n </li>\n );\n});\n\nexport function TimelineTime({ className, children }: { className?: string; children: ReactNode }) {\n return (\n <p className={cn('text-xs text-foreground-subtle', className)}>{children}</p>\n );\n}\n\nexport function TimelineTitle({\n className,\n children,\n}: {\n className?: string;\n children: ReactNode;\n}) {\n return <p className={cn('text-sm font-medium', className)}>{children}</p>;\n}\n\nexport function TimelineDescription({\n className,\n children,\n}: {\n className?: string;\n children: ReactNode;\n}) {\n return <p className={cn('mt-0.5 text-sm text-foreground-muted', className)}>{children}</p>;\n}\n","import { useState, type ReactNode } from 'react';\nimport { ChevronRight, File as FileIcon, Folder, FolderOpen } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nexport interface TreeNode {\n id: string;\n label: ReactNode;\n /** If undefined the node is a leaf; if empty array it is an empty folder. */\n children?: TreeNode[];\n /** Optional custom icon (overrides default file/folder icons). */\n icon?: ReactNode;\n}\n\nexport interface TreeProps {\n /** The root nodes. */\n data: TreeNode[];\n /** Ids to expand by default. */\n defaultExpanded?: string[];\n /** Currently selected node id. */\n selectedId?: string;\n onSelect?: (id: string) => void;\n className?: string;\n}\n\n/**\n * Expandable file-tree style list. Single selection. Keyboard a11y is\n * handled at the row level (`tabIndex`, Enter, ArrowRight/Left to toggle).\n */\nexport function Tree({ data, defaultExpanded = [], selectedId, onSelect, className }: TreeProps) {\n const [expanded, setExpanded] = useState<Set<string>>(new Set(defaultExpanded));\n\n const toggle = (id: string) =>\n setExpanded((cur) => {\n const next = new Set(cur);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n\n function renderNode(node: TreeNode, depth: number): ReactNode {\n const hasChildren = !!node.children;\n const isOpen = expanded.has(node.id);\n const isSelected = selectedId === node.id;\n const DefaultIcon = hasChildren ? (isOpen ? FolderOpen : Folder) : FileIcon;\n\n return (\n <li key={node.id} role=\"treeitem\" aria-expanded={hasChildren ? isOpen : undefined}>\n <button\n type=\"button\"\n tabIndex={0}\n onClick={() => {\n onSelect?.(node.id);\n if (hasChildren) toggle(node.id);\n }}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight' && hasChildren && !isOpen) toggle(node.id);\n else if (e.key === 'ArrowLeft' && hasChildren && isOpen) toggle(node.id);\n }}\n style={{ paddingLeft: depth * 16 + 8 }}\n className={cn(\n 'flex w-full items-center gap-1.5 rounded-md py-1 pr-2 text-left text-sm',\n 'hover:bg-background-muted focus-visible:bg-background-muted outline-none',\n isSelected && 'bg-accent-soft text-foreground',\n )}\n >\n {hasChildren ? (\n <ChevronRight\n className={cn('size-3.5 shrink-0 text-foreground-subtle transition-transform', isOpen && 'rotate-90')}\n aria-hidden\n />\n ) : (\n <span className=\"w-3.5 shrink-0\" aria-hidden />\n )}\n {node.icon ?? <DefaultIcon className=\"size-4 shrink-0 text-foreground-muted\" aria-hidden />}\n <span className=\"truncate\">{node.label}</span>\n </button>\n {hasChildren && isOpen && (\n <ul role=\"group\" className=\"mt-0.5\">\n {node.children!.map((c) => renderNode(c, depth + 1))}\n </ul>\n )}\n </li>\n );\n }\n\n return (\n <ul role=\"tree\" className={cn('flex flex-col gap-0.5', className)}>\n {data.map((n) => renderNode(n, 0))}\n </ul>\n );\n}\n","import { useState, type FormEvent, type ReactNode } from 'react';\nimport { ArrowRight, CheckCircle2, Mail } from '@/icons';\nimport { Button } from '@/components/ui/Button';\nimport { Input } from '@/components/ui/Input';\nimport { Alert } from '@/components/ui/Alert';\nimport { Separator } from '@/components/ui/Separator';\n\n/* -----------------------------------------------------------------------------\n * Authentication pattern — four screens that share the same shell.\n *\n * <AuthLayout title=\"…\" subtitle=\"…\">…form…</AuthLayout>\n *\n * Below: SignIn, SignUp, ForgotPassword, MagicLinkSent — each composed of\n * primitives. They emit events; the host app handles network calls.\n * --------------------------------------------------------------------------- */\n\nexport interface AuthLayoutProps {\n /** Brand mark shown above the title. */\n brand?: ReactNode;\n /** Page heading. */\n title: ReactNode;\n /** Secondary line under the title. */\n subtitle?: ReactNode;\n /** Form / content. */\n children: ReactNode;\n /** Footer slot — \"Don't have an account? Sign up\". */\n footer?: ReactNode;\n}\n\nexport function AuthLayout({ brand, title, subtitle, children, footer }: AuthLayoutProps) {\n return (\n <main className=\"grid min-h-screen place-items-center bg-background-subtle px-4 py-12\">\n <div className=\"w-full max-w-[400px] space-y-6\">\n {brand && <div className=\"flex justify-center\">{brand}</div>}\n <div className=\"space-y-2 text-center\">\n <h1 className=\"text-2xl font-semibold tracking-tight text-foreground\">{title}</h1>\n {subtitle && <p className=\"text-sm text-foreground-muted\">{subtitle}</p>}\n </div>\n <div className=\"rounded-lg border border-border bg-card p-6\">{children}</div>\n {footer && (\n <p className=\"text-center text-sm text-foreground-muted\">{footer}</p>\n )}\n </div>\n </main>\n );\n}\n\nexport interface SignInFormProps {\n onSubmit: (data: { email: string; password: string }) => void | Promise<void>;\n loading?: boolean;\n error?: ReactNode;\n forgotHref?: string;\n}\n\nexport function SignInForm({ onSubmit, loading, error, forgotHref = '/forgot' }: SignInFormProps) {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n\n const handle = (e: FormEvent) => {\n e.preventDefault();\n onSubmit({ email, password });\n };\n\n return (\n <form onSubmit={handle} className=\"space-y-4\">\n {error && <Alert variant=\"danger\">{error}</Alert>}\n <Input\n type=\"email\"\n label=\"Email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n autoComplete=\"email\"\n required\n />\n <Input\n type=\"password\"\n label=\"Password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n autoComplete=\"current-password\"\n required\n />\n <div className=\"flex items-center justify-between text-sm\">\n <a\n href={forgotHref}\n className=\"font-medium text-accent hover:underline outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm\"\n >\n Forgot password?\n </a>\n </div>\n <Button type=\"submit\" loading={loading} className=\"w-full\" trailingIcon={<ArrowRight />}>\n Sign in\n </Button>\n </form>\n );\n}\n\nexport interface SignUpFormProps {\n onSubmit: (data: { name: string; email: string; password: string }) => void | Promise<void>;\n loading?: boolean;\n error?: ReactNode;\n}\n\nexport function SignUpForm({ onSubmit, loading, error }: SignUpFormProps) {\n const [name, setName] = useState('');\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n\n return (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n onSubmit({ name, email, password });\n }}\n className=\"space-y-4\"\n >\n {error && <Alert variant=\"danger\">{error}</Alert>}\n <Input label=\"Full name\" value={name} onChange={(e) => setName(e.target.value)} required />\n <Input\n type=\"email\"\n label=\"Work email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n autoComplete=\"email\"\n required\n />\n <Input\n type=\"password\"\n label=\"Password\"\n helperText=\"At least 8 characters.\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n autoComplete=\"new-password\"\n required\n />\n <Button type=\"submit\" loading={loading} className=\"w-full\">\n Create account\n </Button>\n <p className=\"text-xs text-foreground-subtle text-center\">\n By signing up you agree to our Terms of Service and Privacy Policy.\n </p>\n </form>\n );\n}\n\nexport interface ForgotPasswordFormProps {\n onSubmit: (email: string) => void | Promise<void>;\n loading?: boolean;\n error?: ReactNode;\n}\n\nexport function ForgotPasswordForm({ onSubmit, loading, error }: ForgotPasswordFormProps) {\n const [email, setEmail] = useState('');\n return (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n onSubmit(email);\n }}\n className=\"space-y-4\"\n >\n {error && <Alert variant=\"danger\">{error}</Alert>}\n <Input\n type=\"email\"\n label=\"Email\"\n helperText=\"We'll send a reset link if an account exists.\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n autoComplete=\"email\"\n required\n />\n <Button type=\"submit\" loading={loading} className=\"w-full\" leadingIcon={<Mail />}>\n Send reset link\n </Button>\n </form>\n );\n}\n\nexport interface MagicLinkSentProps {\n email: string;\n onResend?: () => void;\n}\n\nexport function MagicLinkSent({ email, onResend }: MagicLinkSentProps) {\n return (\n <div className=\"space-y-4 text-center\">\n <div className=\"mx-auto inline-flex size-12 items-center justify-center rounded-full bg-success-soft text-success-text\">\n <CheckCircle2 className=\"size-6\" aria-hidden />\n </div>\n <p className=\"text-sm text-foreground-muted\">\n We sent a sign-in link to{' '}\n <span className=\"font-medium text-foreground\">{email}</span>. Open it on this device to\n continue.\n </p>\n <Separator />\n <p className=\"text-xs text-foreground-subtle\">\n Didn't get it?{' '}\n <button\n type=\"button\"\n onClick={onResend}\n className=\"font-medium text-accent hover:underline outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm\"\n >\n Resend\n </button>\n </p>\n </div>\n );\n}\n","import { type ReactNode } from 'react';\nimport {\n BarChart3,\n Bell,\n Bookmark,\n Folder,\n HelpCircle,\n Home,\n Inbox,\n LayoutGrid,\n LogOut,\n Plug,\n Search,\n Settings,\n Sparkles,\n User,\n Users,\n} from '@/icons';\nimport { Avatar } from '@/components/ui/Avatar';\nimport { Badge } from '@/components/ui/Badge';\nimport { Card, CardDescription, CardHeader, CardTitle, CardContent } from '@/components/ui/Card';\nimport { Input } from '@/components/ui/Input';\nimport { Kbd } from '@/components/ui/Kbd';\nimport { Sidebar, SidebarItem, SidebarSection } from '@/components/ui/Sidebar';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/Table';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/DropdownMenu';\nimport { Badge as Pill } from '@/components/ui/Badge';\n\n/* -----------------------------------------------------------------------------\n * Generic AppShell — sidebar (with brand in header + nav + footer) plus a\n * slim topbar holding search + notifications + profile dropdown.\n * --------------------------------------------------------------------------- */\n\nfunction navigate(hash: string) {\n if (typeof window === 'undefined') return;\n window.location.hash = hash;\n}\n\nexport type AppShellNavKey =\n | 'home'\n | 'projects'\n | 'inbox'\n | 'members'\n | 'insights'\n | 'bookmarks'\n | 'apps'\n | 'settings'\n | 'integrations'\n | 'help';\n\nexport interface AppShellProps {\n /** Page content. */\n children: ReactNode;\n /** Logo / wordmark rendered at the top of the sidebar. */\n brand: ReactNode;\n /** Which sidebar item is active. Defaults to `home`. */\n active?: AppShellNavKey;\n}\n\nexport function AppShell({ children, brand, active = 'home' }: AppShellProps) {\n return (\n <div className=\"flex min-h-screen w-full bg-background\">\n <Sidebar\n defaultCollapsed={false}\n header={brand}\n footer={<ProfileFooter />}\n >\n <SidebarSection label=\"Workspace\">\n <SidebarItem href=\"#dashboard\" icon={<Home />} active={active === 'home'}>\n Home\n </SidebarItem>\n <SidebarItem href=\"#data-table\" icon={<Folder />} active={active === 'projects'} trailing={<Pill tone=\"neutral\">12</Pill>}>\n Projects\n </SidebarItem>\n <SidebarItem href=\"#first-run\" icon={<Inbox />} active={active === 'inbox'} trailing={<Pill tone=\"accent\">5</Pill>}>\n Inbox\n </SidebarItem>\n <SidebarItem href=\"#record\" icon={<Users />} active={active === 'members'} trailing={<Pill tone=\"neutral\">3</Pill>}>\n Members\n </SidebarItem>\n <SidebarItem href=\"#dashboard\" icon={<BarChart3 />} active={active === 'insights'}>\n Insights\n </SidebarItem>\n </SidebarSection>\n <SidebarSection label=\"Personal\">\n <SidebarItem href=\"#pricing\" icon={<Bookmark />} active={active === 'bookmarks'}>\n Bookmarks\n </SidebarItem>\n <SidebarItem href=\"#onboarding\" icon={<LayoutGrid />} active={active === 'apps'}>\n Apps\n </SidebarItem>\n </SidebarSection>\n <SidebarSection label=\"Account\">\n <SidebarItem href=\"#settings\" icon={<Settings />} active={active === 'settings'}>\n Settings\n </SidebarItem>\n <SidebarItem href=\"#settings\" icon={<Plug />} active={active === 'integrations'}>\n Integrations\n </SidebarItem>\n <SidebarItem href=\"#\" icon={<HelpCircle />} active={active === 'help'}>\n Help & docs\n </SidebarItem>\n </SidebarSection>\n </Sidebar>\n\n <div className=\"flex flex-1 flex-col min-w-0\">\n <TopBar />\n <main className=\"flex-1 overflow-y-auto p-6 md:p-8\">{children}</main>\n </div>\n </div>\n );\n}\n\nfunction TopBar() {\n return (\n <header className=\"sticky top-0 z-30 flex h-14 items-center gap-3 border-b border-border bg-background/80 px-4 backdrop-blur md:px-6\">\n <div className=\"relative flex-1 max-w-xl\">\n <Input\n type=\"search\"\n placeholder=\"Search projects, members, files…\"\n hideLabel\n label=\"Search\"\n prefix={<Search />}\n suffix={<Kbd>⌘K</Kbd>}\n />\n </div>\n <div className=\"ml-auto flex items-center gap-1\">\n <NotificationMenu />\n <ProfileMenu />\n </div>\n </header>\n );\n}\n\ninterface Notification {\n id: string;\n who: { name: string; initials: string };\n action: string;\n target: string;\n when: string;\n unread?: boolean;\n}\n\nconst sampleNotifications: Notification[] = [\n { id: 'n1', who: { name: 'Anu B.', initials: 'AB' }, action: 'mentioned you in', target: 'Q2 OKRs', when: '2m', unread: true },\n { id: 'n2', who: { name: 'Bat E.', initials: 'BE' }, action: 'requested review on', target: 'fix/login-flow', when: '18m', unread: true },\n { id: 'n3', who: { name: 'Tuya G.', initials: 'TG' }, action: 'commented on', target: 'feat/segments', when: '1h', unread: true },\n { id: 'n4', who: { name: 'Khulan O.', initials: 'KO' }, action: 'archived', target: 'old-billing-spike', when: '3h' },\n { id: 'n5', who: { name: 'Sara M.', initials: 'SM' }, action: 'invited you to', target: 'Atlas workspace', when: 'Yesterday' },\n];\n\nfunction NotificationMenu() {\n const unread = sampleNotifications.filter((n) => n.unread).length;\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n aria-label={`Notifications${unread ? `, ${unread} unread` : ''}`}\n className=\"relative inline-flex size-9 items-center justify-center rounded-md text-foreground-muted outline-none transition-colors hover:bg-background-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n >\n <Bell className=\"size-4\" />\n {unread > 0 && (\n <span\n aria-hidden\n className=\"absolute right-2 top-2 inline-flex h-2 w-2 rounded-full bg-accent ring-2 ring-background\"\n />\n )}\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-80 p-0\">\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2.5\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">Notifications</span>\n {unread > 0 && <Pill tone=\"accent\">{unread} new</Pill>}\n </div>\n <button\n type=\"button\"\n className=\"text-xs text-foreground-muted hover:text-foreground\"\n >\n Mark all read\n </button>\n </div>\n <ul className=\"max-h-80 overflow-y-auto py-1\">\n {sampleNotifications.map((n) => (\n <li key={n.id}>\n <button\n type=\"button\"\n onClick={() => navigate('record')}\n className=\"flex w-full items-start gap-3 px-3 py-2.5 text-left outline-none hover:bg-background-muted focus-visible:bg-background-muted\"\n >\n <div className=\"relative mt-0.5\">\n <Avatar size=\"sm\" fallback={n.who.initials} />\n {n.unread && (\n <span\n aria-hidden\n className=\"absolute -right-0.5 -top-0.5 inline-flex h-2 w-2 rounded-full bg-accent ring-2 ring-background\"\n />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm leading-snug\">\n <span className=\"font-medium text-foreground\">{n.who.name}</span>{' '}\n <span className=\"text-foreground-muted\">{n.action}</span>{' '}\n <span className=\"font-medium text-foreground\">{n.target}</span>\n </p>\n <p className=\"mt-0.5 text-xs text-foreground-subtle\">{n.when}</p>\n </div>\n </button>\n </li>\n ))}\n </ul>\n <div className=\"border-t border-border px-3 py-2 text-center\">\n <button\n type=\"button\"\n onClick={() => navigate('record')}\n className=\"text-xs font-medium text-accent hover:underline\"\n >\n View all notifications\n </button>\n </div>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nfunction ProfileMenu() {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n aria-label=\"Open profile menu\"\n className=\"flex items-center gap-2 rounded-full p-0.5 outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background hover:bg-background-muted\"\n >\n <Avatar size=\"sm\" fallback=\"BO\" status=\"online\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-60\">\n <DropdownMenuLabel>\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-sm font-medium text-foreground\">Bay Otgonbayar</span>\n <span className=\"text-xs text-foreground-subtle\">bay@craftzbay.com</span>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => navigate('record')}>\n <User className=\"size-4\" />\n Profile\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => navigate('settings')}>\n <Settings className=\"size-4\" />\n Account settings\n </DropdownMenuItem>\n <DropdownMenuItem onSelect={() => navigate('pricing')}>\n <Sparkles className=\"size-4\" />\n Upgrade plan\n <Pill tone=\"accent\" className=\"ml-auto\">Pro</Pill>\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => navigate('first-run')}>\n <HelpCircle className=\"size-4\" />\n Help & support\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={() => navigate('auth-signin')}>\n <LogOut className=\"size-4\" />\n Sign out\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nfunction ProfileFooter() {\n return (\n <div className=\"flex items-center gap-2.5 rounded-md px-2 py-1.5\">\n <Avatar fallback=\"BO\" size=\"sm\" status=\"online\" />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium text-foreground\">Bay Otgonbayar</p>\n <p className=\"truncate text-xs text-foreground-subtle\">Owner</p>\n </div>\n </div>\n );\n}\n\n/* -----------------------------------------------------------------------------\n * Dashboard pattern — header, 4 stat cards, a chart placeholder, recent\n * activity table.\n * --------------------------------------------------------------------------- */\n\ninterface Stat {\n label: string;\n value: string;\n delta?: { value: string; positive?: boolean };\n}\n\nconst sampleStats: Stat[] = [\n { label: 'Active users', value: '2,840', delta: { value: '+12%', positive: true } },\n { label: 'Sessions today', value: '8,402', delta: { value: '+4%', positive: true } },\n { label: 'Open issues', value: '14', delta: { value: '−6%', positive: true } },\n { label: 'Error rate', value: '0.32%', delta: { value: '+0.05%', positive: false } },\n];\n\ninterface ActivityRow {\n id: string;\n who: { name: string; initials: string };\n action: string;\n target: string;\n when: string;\n}\n\nconst sampleActivity: ActivityRow[] = [\n { id: '1', who: { name: 'Anu B.', initials: 'AB' }, action: 'merged', target: 'feat/segments', when: '12m ago' },\n { id: '2', who: { name: 'Bat E.', initials: 'BE' }, action: 'opened', target: 'fix/login-flow', when: '34m ago' },\n { id: '3', who: { name: 'Tuya G.', initials: 'TG' }, action: 'commented on', target: 'Q2 OKRs', when: '1h ago' },\n { id: '4', who: { name: 'Khulan O.', initials: 'KO' }, action: 'archived', target: 'old-billing-spike', when: '3h ago' },\n];\n\nexport function Dashboard() {\n return (\n <div className=\"space-y-8\">\n <header className=\"flex items-end justify-between gap-4\">\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight text-foreground\">Overview</h1>\n <p className=\"text-sm text-foreground-muted mt-1\">\n What's happening across your workspace today.\n </p>\n </div>\n <div className=\"hidden md:flex items-center gap-2\">\n <Pill tone=\"neutral\" variant=\"outline\">\n Last 7 days\n </Pill>\n </div>\n </header>\n\n <section className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n {sampleStats.map((s) => (\n <Card key={s.label}>\n <CardHeader className=\"pb-2\">\n <CardDescription>{s.label}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-baseline gap-2\">\n <span className=\"text-2xl font-semibold tabular text-foreground\">{s.value}</span>\n {s.delta && (\n <span\n className={\n s.delta.positive\n ? 'text-xs font-medium text-success-text tabular'\n : 'text-xs font-medium text-danger-text tabular'\n }\n >\n {s.delta.value}\n </span>\n )}\n </div>\n </CardContent>\n </Card>\n ))}\n </section>\n\n <Card>\n <CardHeader>\n <CardTitle>Active users</CardTitle>\n <CardDescription>Distinct sessions per day, last 30 days.</CardDescription>\n </CardHeader>\n <CardContent>\n {/* Chart goes here — placeholder maintains layout */}\n <div\n role=\"img\"\n aria-label=\"Active users sparkline\"\n className=\"h-48 w-full rounded-md border border-dashed border-border bg-background-subtle\"\n />\n </CardContent>\n </Card>\n\n <Card padding=\"none\">\n <CardHeader className=\"px-5 pt-5\">\n <CardTitle>Recent activity</CardTitle>\n </CardHeader>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Who</TableHead>\n <TableHead>Action</TableHead>\n <TableHead>Target</TableHead>\n <TableHead className=\"text-right\">When</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {sampleActivity.map((r) => (\n <TableRow key={r.id}>\n <TableCell>\n <div className=\"flex items-center gap-2\">\n <Avatar size=\"xs\" fallback={r.who.initials} />\n <span className=\"text-foreground\">{r.who.name}</span>\n </div>\n </TableCell>\n <TableCell className=\"text-foreground-muted\">{r.action}</TableCell>\n <TableCell>\n <Badge tone=\"neutral\" variant=\"outline\">\n {r.target}\n </Badge>\n </TableCell>\n <TableCell className=\"text-right tabular text-foreground-subtle\">{r.when}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </Card>\n </div>\n );\n}\n","import { useState, type ReactNode } from 'react';\nimport { Bell, CreditCard, Lock, User, Users } from '@/icons';\nimport { Avatar } from '@/components/ui/Avatar';\nimport { Button } from '@/components/ui/Button';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/Card';\nimport { Input } from '@/components/ui/Input';\nimport { Separator } from '@/components/ui/Separator';\nimport { Switch } from '@/components/ui/Switch';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Settings shell with a sticky left sub-nav. Sections are anchor-linked so\n * deep links land on the right card. Keep section copy short — the goal of\n * Settings is recall, not reading.\n * --------------------------------------------------------------------------- */\n\ninterface NavSection {\n id: string;\n label: string;\n icon: ReactNode;\n}\n\nconst sections: NavSection[] = [\n { id: 'profile', label: 'Profile', icon: <User /> },\n { id: 'security', label: 'Security', icon: <Lock /> },\n { id: 'notifications', label: 'Notifications', icon: <Bell /> },\n { id: 'billing', label: 'Billing', icon: <CreditCard /> },\n { id: 'team', label: 'Team', icon: <Users /> },\n];\n\nexport function SettingsPage() {\n const [active, setActive] = useState('profile');\n\n return (\n <div className=\"mx-auto max-w-5xl space-y-8\">\n <header>\n <h1 className=\"text-2xl font-semibold tracking-tight text-foreground\">Settings</h1>\n <p className=\"text-sm text-foreground-muted mt-1\">\n Manage your account, preferences, and billing.\n </p>\n </header>\n\n <div className=\"grid gap-8 md:grid-cols-[200px_1fr]\">\n <nav aria-label=\"Settings sections\" className=\"md:sticky md:top-20 md:self-start\">\n <ul className=\"flex flex-col gap-px\">\n {sections.map((s) => (\n <li key={s.id}>\n <button\n type=\"button\"\n onClick={() => setActive(s.id)}\n className={cn(\n 'w-full text-left',\n 'flex h-9 items-center gap-2 rounded-md px-2 text-sm transition-colors duration-[var(--duration-fast)] outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n active === s.id\n ? 'bg-background-muted text-foreground font-medium'\n : 'text-foreground-muted hover:bg-background-muted hover:text-foreground',\n )}\n aria-current={active === s.id ? 'page' : undefined}\n >\n <span className=\"[&_svg]:size-4\">{s.icon}</span>\n {s.label}\n </button>\n </li>\n ))}\n </ul>\n </nav>\n\n <div className=\"space-y-8\">\n <section id=\"profile\">\n <Card>\n <CardHeader>\n <CardTitle>Profile</CardTitle>\n <CardDescription>Visible to your teammates.</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex items-center gap-4\">\n <Avatar size=\"xl\" fallback=\"BO\" />\n <div>\n <Button variant=\"outline\" size=\"sm\">Change photo</Button>\n <p className=\"text-xs text-foreground-subtle mt-2\">JPG or PNG, max 2 MB.</p>\n </div>\n </div>\n <Separator />\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <Input label=\"First name\" defaultValue=\"Bay\" />\n <Input label=\"Last name\" defaultValue=\"Otgonbayar\" />\n </div>\n <Input label=\"Display email\" type=\"email\" defaultValue=\"bay@company.com\" />\n <div className=\"flex justify-end\">\n <Button>Save changes</Button>\n </div>\n </CardContent>\n </Card>\n </section>\n\n <section id=\"security\">\n <Card>\n <CardHeader>\n <CardTitle>Security</CardTitle>\n <CardDescription>How you sign in and protect your account.</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <Input label=\"Current password\" type=\"password\" />\n <Input label=\"New password\" type=\"password\" helperText=\"At least 8 characters.\" />\n <Separator />\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium text-foreground\">Two-factor authentication</p>\n <p className=\"text-xs text-foreground-subtle\">\n Required for admin accounts on production.\n </p>\n </div>\n <Switch defaultChecked />\n </div>\n <div className=\"flex justify-end\">\n <Button>Update password</Button>\n </div>\n </CardContent>\n </Card>\n </section>\n\n <section id=\"notifications\">\n <Card>\n <CardHeader>\n <CardTitle>Notifications</CardTitle>\n <CardDescription>Choose what we email and ping you about.</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <Switch label=\"Product updates\" description=\"A short note when we ship something.\" defaultChecked />\n <Separator />\n <Switch label=\"Mentions\" description=\"When a teammate @ mentions you in a comment.\" defaultChecked />\n <Separator />\n <Switch label=\"Weekly digest\" description=\"A Monday-morning summary of last week's activity.\" />\n </CardContent>\n </Card>\n </section>\n\n <section id=\"billing\">\n <Card>\n <CardHeader>\n <CardTitle>Billing</CardTitle>\n <CardDescription>Your plan, invoices, and payment method.</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"rounded-md border border-border bg-background-subtle p-4\">\n <p className=\"text-sm font-medium text-foreground\">Team — $20/user/month</p>\n <p className=\"text-xs text-foreground-subtle mt-1\">\n Renews on 1 June 2026 · 12 seats\n </p>\n </div>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\">Manage seats</Button>\n <Button>Upgrade plan</Button>\n </div>\n </CardContent>\n </Card>\n </section>\n\n <section id=\"team\">\n <Card>\n <CardHeader>\n <CardTitle>Team</CardTitle>\n <CardDescription>Invite teammates and manage roles.</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex gap-2\">\n <Input\n type=\"email\"\n placeholder=\"teammate@company.com\"\n hideLabel\n label=\"Invite email\"\n className=\"flex-1\"\n />\n <Button>Send invite</Button>\n </div>\n <p className=\"text-xs text-foreground-subtle\">\n Invited members will receive a sign-up link by email.\n </p>\n </CardContent>\n </Card>\n </section>\n </div>\n </div>\n </div>\n );\n}\n","import { useMemo, useState } from 'react';\nimport { Download, Filter, Plus, Trash2, Upload } from '@/icons';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { Checkbox } from '@/components/ui/Checkbox';\nimport { DataGrid } from '@/components/ui/DataGrid';\nimport { EmptyState } from '@/components/ui/EmptyState';\nimport { IconButton } from '@/components/ui/IconButton';\nimport { Pagination } from '@/components/ui/Pagination';\nimport { Select, SelectContent, SelectItem, SelectTrigger } from '@/components/ui/Select';\n\n/* -----------------------------------------------------------------------------\n * Data table page — filters + search + bulk action bar + grid + pagination.\n * All state stays local so the file is drop-in reviewable.\n * --------------------------------------------------------------------------- */\n\ninterface Project {\n id: string;\n name: string;\n status: 'active' | 'paused' | 'archived';\n owner: string;\n updatedAt: string;\n}\n\nconst sample: Project[] = [\n { id: 'p1', name: 'Pulse onboarding', status: 'active', owner: 'Anu B.', updatedAt: '2 hours ago' },\n { id: 'p2', name: 'Q2 OKRs rollout', status: 'active', owner: 'Bat E.', updatedAt: 'Yesterday' },\n { id: 'p3', name: 'Legacy export', status: 'paused', owner: 'Tuya G.', updatedAt: '3 days ago' },\n { id: 'p4', name: 'Billing spike', status: 'archived', owner: 'Khulan O.', updatedAt: 'Last week' },\n { id: 'p5', name: 'Marketing refresh', status: 'active', owner: 'Anu B.', updatedAt: 'Last week' },\n];\n\nconst statusTone = {\n active: { tone: 'success' as const, label: 'Active' },\n paused: { tone: 'warning' as const, label: 'Paused' },\n archived: { tone: 'neutral' as const, label: 'Archived' },\n};\n\nexport function DataTablePage() {\n const [query, setQuery] = useState('');\n const [status, setStatus] = useState<string>('all');\n const [selected, setSelected] = useState<string[]>([]);\n const [page, setPage] = useState(1);\n const [pageSize, setPageSize] = useState(10);\n\n const filtered = useMemo(() => {\n return sample.filter((p) => {\n const matchesQuery = p.name.toLowerCase().includes(query.toLowerCase());\n const matchesStatus = status === 'all' || p.status === status;\n return matchesQuery && matchesStatus;\n });\n }, [query, status]);\n\n const allSelected = filtered.length > 0 && selected.length === filtered.length;\n const someSelected = selected.length > 0 && !allSelected;\n\n return (\n <div className=\"space-y-6\">\n <header className=\"flex items-end justify-between gap-4\">\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight text-foreground\">Projects</h1>\n <p className=\"text-sm text-foreground-muted mt-1\">\n {filtered.length} project{filtered.length === 1 ? '' : 's'} match your filters.\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" leadingIcon={<Upload />}>\n Import\n </Button>\n <Button leadingIcon={<Plus />}>New project</Button>\n </div>\n </header>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <Select value={status} onValueChange={setStatus}>\n <SelectTrigger className=\"w-36\" placeholder=\"Status\" />\n <SelectContent>\n <SelectItem value=\"all\">All statuses</SelectItem>\n <SelectItem value=\"active\">Active</SelectItem>\n <SelectItem value=\"paused\">Paused</SelectItem>\n <SelectItem value=\"archived\">Archived</SelectItem>\n </SelectContent>\n </Select>\n <Button variant=\"outline\" size=\"sm\" leadingIcon={<Filter />}>\n More filters\n </Button>\n </div>\n\n {selected.length > 0 && (\n <div className=\"flex items-center justify-between rounded-md border border-border bg-background-subtle px-4 py-2\">\n <div className=\"flex items-center gap-3\">\n <Checkbox\n checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n onCheckedChange={(v) => setSelected(v ? filtered.map((p) => p.id) : [])}\n aria-label=\"Select all\"\n />\n <span className=\"text-sm text-foreground\">\n {selected.length} selected\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"ghost\" size=\"sm\" leadingIcon={<Download />}>\n Export\n </Button>\n <Button variant=\"ghost\" size=\"sm\" leadingIcon={<Trash2 />}>\n Delete\n </Button>\n </div>\n </div>\n )}\n\n <DataGrid\n rows={filtered.slice((page - 1) * pageSize, page * pageSize)}\n filter={{ value: query, onChange: setQuery, placeholder: 'Search projects…' }}\n emptyState={\n <EmptyState\n title=\"No projects match\"\n description=\"Try adjusting filters or creating a new project.\"\n action={<Button leadingIcon={<Plus />}>New project</Button>}\n className=\"border-0 bg-transparent\"\n />\n }\n columns={[\n {\n key: 'select',\n header: (\n <Checkbox\n checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n onCheckedChange={(v) => setSelected(v ? filtered.map((p) => p.id) : [])}\n aria-label=\"Select all rows\"\n />\n ),\n width: '32px',\n cell: (r) => (\n <Checkbox\n checked={selected.includes(r.id)}\n onCheckedChange={(v) =>\n setSelected((prev) => (v ? [...prev, r.id] : prev.filter((id) => id !== r.id)))\n }\n aria-label={`Select ${r.name}`}\n />\n ),\n },\n { key: 'name', header: 'Name', sortable: true, cell: (r) => <span className=\"font-medium text-foreground\">{r.name}</span> },\n {\n key: 'status',\n header: 'Status',\n cell: (r) => (\n <Badge tone={statusTone[r.status].tone} dot>\n {statusTone[r.status].label}\n </Badge>\n ),\n },\n { key: 'owner', header: 'Owner' },\n { key: 'updatedAt', header: 'Updated', align: 'right' },\n ]}\n />\n\n <Pagination\n page={page}\n pageCount={Math.max(1, Math.ceil(filtered.length / pageSize))}\n onPageChange={setPage}\n totalItems={filtered.length}\n pageSize={pageSize}\n pageSizeOptions={[10, 20, 50]}\n onPageSizeChange={(s) => {\n setPageSize(s);\n setPage(1);\n }}\n />\n </div>\n );\n}\n","import { Edit2, ExternalLink, Trash2 } from '@/icons';\nimport { Avatar } from '@/components/ui/Avatar';\nimport { Badge } from '@/components/ui/Badge';\nimport { Breadcrumbs } from '@/components/ui/Breadcrumbs';\nimport { Button } from '@/components/ui/Button';\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card';\nimport { Separator } from '@/components/ui/Separator';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/Tabs';\n\nexport function RecordDetail() {\n return (\n <div className=\"space-y-6\">\n <Breadcrumbs\n items={[\n { label: 'Projects', href: '/projects' },\n { label: 'Pulse onboarding' },\n ]}\n />\n\n <header className=\"flex items-start justify-between gap-4\">\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-semibold tracking-tight text-foreground\">\n Pulse onboarding\n </h1>\n <Badge tone=\"success\" dot>\n Active\n </Badge>\n </div>\n <p className=\"text-sm text-foreground-muted max-w-2xl\">\n Self-serve onboarding flow for new admins. Owns the first 5 minutes of every\n workspace.\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" leadingIcon={<Edit2 />}>\n Edit\n </Button>\n <Button variant=\"outline\" leadingIcon={<Trash2 />}>\n Archive\n </Button>\n <Button trailingIcon={<ExternalLink />}>Open in app</Button>\n </div>\n </header>\n\n <div className=\"grid gap-6 lg:grid-cols-[1fr_320px]\">\n <div className=\"min-w-0\">\n <Tabs defaultValue=\"overview\">\n <TabsList>\n <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n <TabsTrigger value=\"activity\">Activity</TabsTrigger>\n <TabsTrigger value=\"files\">Files</TabsTrigger>\n <TabsTrigger value=\"settings\">Settings</TabsTrigger>\n </TabsList>\n <TabsContent value=\"overview\" className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle>Summary</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-foreground-muted leading-relaxed\">\n <p>\n The Pulse onboarding flow walks new admins through workspace creation,\n teammate invites, and first-data import in under five minutes.\n </p>\n <p>\n Completion rate sits at 71% (week-over-week +4 pts) and median time to\n finish is 4 m 22 s.\n </p>\n </CardContent>\n </Card>\n </TabsContent>\n <TabsContent value=\"activity\">\n <p className=\"text-sm text-foreground-muted\">Activity feed appears here.</p>\n </TabsContent>\n <TabsContent value=\"files\">\n <p className=\"text-sm text-foreground-muted\">Linked documents appear here.</p>\n </TabsContent>\n <TabsContent value=\"settings\">\n <p className=\"text-sm text-foreground-muted\">Project settings appear here.</p>\n </TabsContent>\n </Tabs>\n </div>\n\n <aside className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <Row label=\"Owner\" value={<><Avatar size=\"xs\" fallback=\"AB\" /> Anu B.</>} />\n <Row label=\"Created\" value=\"12 Feb 2026\" />\n <Row label=\"Updated\" value=\"2 hours ago\" />\n <Row label=\"Tags\" value={<><Badge tone=\"accent\">growth</Badge> <Badge tone=\"neutral\" variant=\"outline\">v2</Badge></>} />\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Watchers</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex -space-x-2\">\n <Avatar fallback=\"AB\" />\n <Avatar fallback=\"BE\" />\n <Avatar fallback=\"TG\" />\n <Avatar fallback=\"+2\" />\n </div>\n </CardContent>\n </Card>\n </aside>\n </div>\n </div>\n );\n}\n\nfunction Row({ label, value }: { label: string; value: React.ReactNode }) {\n return (\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-foreground-subtle\">{label}</span>\n <span className=\"flex items-center gap-1.5 text-foreground\">{value}</span>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { ArrowLeft, ArrowRight, CheckCircle2 } from '@/icons';\nimport { Button } from '@/components/ui/Button';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/Card';\nimport { Input } from '@/components/ui/Input';\nimport { RadioGroup, RadioItem } from '@/components/ui/RadioGroup';\nimport { Stepper } from '@/components/ui/Stepper';\n\nconst steps = [\n { title: 'Workspace' },\n { title: 'Invite team' },\n { title: 'Connect data' },\n { title: 'Done' },\n];\n\nexport function Onboarding() {\n const [step, setStep] = useState(0);\n const next = () => setStep((s) => Math.min(s + 1, steps.length - 1));\n const back = () => setStep((s) => Math.max(s - 1, 0));\n\n return (\n <div className=\"mx-auto max-w-2xl space-y-8 py-12\">\n <Stepper steps={steps} current={step} />\n <Card>\n <CardHeader>\n <CardTitle>{stepHeader[step].title}</CardTitle>\n <CardDescription>{stepHeader[step].description}</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {step === 0 && (\n <>\n <Input label=\"Workspace name\" placeholder=\"Acme Inc.\" />\n <Input label=\"URL slug\" prefix={<span>acme.app/</span>} placeholder=\"acme\" />\n </>\n )}\n {step === 1 && (\n <>\n <Input\n type=\"email\"\n label=\"Invite by email\"\n placeholder=\"teammate@company.com\"\n helperText=\"Separate multiple emails with commas.\"\n />\n <RadioGroup defaultValue=\"member\">\n <RadioItem value=\"admin\" label=\"Admin\" description=\"Can manage workspace and billing.\" />\n <RadioItem value=\"member\" label=\"Member\" description=\"Can create and edit projects.\" />\n <RadioItem value=\"viewer\" label=\"Viewer\" description=\"Read-only access.\" />\n </RadioGroup>\n </>\n )}\n {step === 2 && (\n <>\n <p className=\"text-sm text-foreground-muted\">\n Connect your data source so we can populate your first dashboard.\n </p>\n <div className=\"grid grid-cols-2 gap-2\">\n {['Postgres', 'BigQuery', 'Snowflake', 'CSV upload'].map((src) => (\n <button\n key={src}\n type=\"button\"\n className=\"rounded-lg border border-border bg-card p-4 text-left hover:border-border-strong hover:bg-background-subtle transition-colors duration-[var(--duration-fast)] outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n >\n <p className=\"font-medium text-foreground\">{src}</p>\n <p className=\"text-xs text-foreground-subtle mt-1\">Quick setup with SSO</p>\n </button>\n ))}\n </div>\n </>\n )}\n {step === 3 && (\n <div className=\"flex flex-col items-center gap-3 py-6 text-center\">\n <CheckCircle2 className=\"size-10 text-success-text\" aria-hidden />\n <p className=\"text-base font-medium text-foreground\">You're all set.</p>\n <p className=\"text-sm text-foreground-muted max-w-sm\">\n Your workspace is ready. We've sent invites and your first dashboard is loading.\n </p>\n </div>\n )}\n </CardContent>\n </Card>\n\n <div className=\"flex items-center justify-between\">\n <Button variant=\"ghost\" leadingIcon={<ArrowLeft />} onClick={back} disabled={step === 0}>\n Back\n </Button>\n {step < steps.length - 1 ? (\n <Button trailingIcon={<ArrowRight />} onClick={next}>\n {step === steps.length - 2 ? 'Finish' : 'Continue'}\n </Button>\n ) : (\n <Button>Open workspace</Button>\n )}\n </div>\n </div>\n );\n}\n\nconst stepHeader = [\n { title: 'Create your workspace', description: 'A workspace is where your team and projects live.' },\n { title: 'Invite your team', description: 'You can always invite more people later.' },\n { title: 'Connect a data source', description: 'Pick one — others can be added in settings.' },\n { title: 'Welcome aboard', description: \"We've set up your starting dashboard.\" },\n];\n","import { Check } from '@/icons';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport { cn } from '@/lib/utils';\n\ninterface Tier {\n name: string;\n price: string;\n cadence: string;\n description: string;\n features: string[];\n cta: string;\n highlighted?: boolean;\n}\n\nconst tiers: Tier[] = [\n {\n name: 'Starter',\n price: '$0',\n cadence: 'forever',\n description: 'For individuals exploring the product.',\n features: ['Up to 3 projects', 'Community support', 'Single workspace'],\n cta: 'Start free',\n },\n {\n name: 'Team',\n price: '$20',\n cadence: 'per user / month',\n description: 'For small teams running real workloads.',\n features: [\n 'Unlimited projects',\n 'Email support, 24h response',\n 'SSO via Google & Microsoft',\n 'Audit log (30 days)',\n ],\n cta: 'Start 14-day trial',\n highlighted: true,\n },\n {\n name: 'Enterprise',\n price: 'Custom',\n cadence: 'annual',\n description: 'For organisations with custom requirements.',\n features: [\n 'Everything in Team',\n 'SAML SSO + SCIM',\n 'Dedicated CSM',\n 'SOC 2 report + DPA',\n 'Audit log (unlimited)',\n ],\n cta: 'Talk to sales',\n },\n];\n\nexport function Pricing() {\n return (\n <div className=\"mx-auto max-w-5xl space-y-8 py-16\">\n <header className=\"text-center space-y-3\">\n <h1 className=\"text-3xl font-semibold tracking-tight text-foreground\">\n Plans that scale with your team\n </h1>\n <p className=\"text-sm text-foreground-muted max-w-xl mx-auto\">\n Start free, upgrade when you need more. All paid plans include a 14-day trial — no\n credit card required.\n </p>\n </header>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n {tiers.map((tier) => (\n <div\n key={tier.name}\n className={cn(\n 'flex flex-col gap-6 rounded-lg border bg-card p-6',\n tier.highlighted ? 'border-accent shadow-sm' : 'border-border',\n )}\n >\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-base font-semibold text-foreground\">{tier.name}</h2>\n {tier.highlighted && <Badge tone=\"accent\">Most popular</Badge>}\n </div>\n <p className=\"text-sm text-foreground-muted\">{tier.description}</p>\n </div>\n\n <div className=\"flex items-baseline gap-1.5\">\n <span className=\"text-3xl font-semibold tabular text-foreground\">{tier.price}</span>\n <span className=\"text-sm text-foreground-subtle\">{tier.cadence}</span>\n </div>\n\n <ul className=\"space-y-2 text-sm\">\n {tier.features.map((f) => (\n <li key={f} className=\"flex items-start gap-2 text-foreground\">\n <Check className=\"size-4 text-accent shrink-0 mt-0.5\" aria-hidden />\n {f}\n </li>\n ))}\n </ul>\n\n <Button\n variant={tier.highlighted ? 'primary' : 'outline'}\n className=\"mt-auto w-full\"\n >\n {tier.cta}\n </Button>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { ArrowRight, Folder, Plus, Upload, Users } from '@/icons';\nimport { Button } from '@/components/ui/Button';\nimport { Card, CardContent } from '@/components/ui/Card';\nimport { EmptyState } from '@/components/ui/EmptyState';\n\n/* -----------------------------------------------------------------------------\n * First-run empty product state. Combines a hero EmptyState with three\n * \"next step\" cards — common pattern across Linear, Notion, Vercel.\n * --------------------------------------------------------------------------- */\n\ninterface NextStep {\n icon: React.ReactNode;\n title: string;\n description: string;\n cta: string;\n}\n\nconst steps: NextStep[] = [\n {\n icon: <Plus />,\n title: 'Create a project',\n description: 'Track a real piece of work end-to-end.',\n cta: 'New project',\n },\n {\n icon: <Upload />,\n title: 'Import existing data',\n description: 'CSV, Postgres, BigQuery, or Snowflake — connect in a minute.',\n cta: 'Connect source',\n },\n {\n icon: <Users />,\n title: 'Invite your team',\n description: \"Workspaces are better with teammates. We'll send the invites.\",\n cta: 'Invite people',\n },\n];\n\nexport function FirstRunEmpty() {\n return (\n <div className=\"mx-auto max-w-3xl space-y-8 py-12\">\n <EmptyState\n icon={<Folder className=\"size-6\" />}\n title=\"Your workspace is ready\"\n description=\"Start with one of the steps below — you can always come back to the others.\"\n action={<Button trailingIcon={<ArrowRight />}>Open tutorial</Button>}\n />\n\n <div className=\"grid gap-3 md:grid-cols-3\">\n {steps.map((s) => (\n <Card key={s.title} variant=\"interactive\">\n <CardContent className=\"space-y-3\">\n <div className=\"inline-flex size-9 items-center justify-center rounded-md bg-accent-soft text-on-accent-soft [&_svg]:size-4\">\n {s.icon}\n </div>\n <div className=\"space-y-1\">\n <h3 className=\"text-sm font-semibold text-foreground\">{s.title}</h3>\n <p className=\"text-xs text-foreground-muted leading-relaxed\">{s.description}</p>\n </div>\n <Button variant=\"ghost\" size=\"sm\" trailingIcon={<ArrowRight />}>\n {s.cta}\n </Button>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"names":["cn","inputs","twMerge","clsx","__idCounter","uid","prefix","useMediaQuery","query","matches","setMatches","useState","useEffect","list","onChange","event","usePrefersReducedMotion","store","listener","t","id","next","useToast","toasts","setToasts","push","useCallback","dismiss","remove","toast","Accordion","AccordionPrimitive","AccordionItem","forwardRef","className","props","ref","jsx","AccordionTrigger","children","jsxs","ChevronDown","AccordionContent","alert","cva","iconForVariant","Info","CheckCircle2","AlertTriangle","XCircle","Alert","variant","title","dismissible","onDismiss","icon","open","setOpen","handleDismiss","renderedIcon","X","sizeMap","avatarWrapper","statusColour","Avatar","size","src","alt","fallback","status","AvatarPrimitive","AvatarGroup","max","items","visible","overflow","child","i","badge","dotColour","Badge","tone","dot","Breadcrumbs","maxItems","renderLink","displayItems","it","isLast","MoreHorizontal","ChevronRight","item","labelNode","button","Button","asChild","loading","leadingIcon","trailingIcon","disabled","type","isDisabled","classes","Slot","Loader2","card","Card","padding","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Checkbox","label","description","error","hideLabel","autoId","useId","fieldId","descId","errorId","CheckboxPrimitive","Minus","Check","Combobox","value","options","loadOptions","helperText","placeholder","searchPlaceholder","emptyText","clearable","helperId","setQuery","loaded","setLoaded","setLoading","cancelled","res","selected","useMemo","o","triggerHeight","triggerPadding","handleClear","e","isError","PopoverPrimitive","ChevronsUpDown","CommandPrimitive","opt","isSelected","v","Command","CommandInput","Search","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut","CommandDialog","onOpenChange","DialogPrimitive","useCommandPaletteShortcut","_","force","onKey","n","ContextMenu","ContextMenuPrimitive","ContextMenuTrigger","ContextMenuGroup","ContextMenuPortal","ContextMenuSub","ContextMenuRadioGroup","itemClasses","ContextMenuSubTrigger","ContextMenuSubContent","ContextMenuContent","ContextMenuItem","destructive","ContextMenuCheckboxItem","ContextMenuRadioItem","Circle","ContextMenuLabel","ContextMenuSeparator","ContextMenuShortcut","DropdownMenu","DropdownMenuPrimitive","DropdownMenuTrigger","DropdownMenuGroup","DropdownMenuPortal","DropdownMenuSub","DropdownMenuRadioGroup","DropdownMenuSubTrigger","inset","DropdownMenuSubContent","DropdownMenuContent","sideOffset","align","DropdownMenuItem","DropdownMenuCheckboxItem","checked","DropdownMenuRadioItem","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","iconButton","IconButton","field","innerInput","Input","suffix","onClear","showPassword","setShowPassword","effectiveType","effectiveTone","renderedPrefix","hasValue","p","EyeOff","Eye","Table","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","TableSortHeader","sortKey","currentSort","onSortChange","active","direction","handle","ArrowUp","ArrowDown","ArrowUpDown","Skeleton","DataGrid","columns","rows","sort","filter","emptyState","hidden","setHidden","visibleColumns","c","renderRows","row","Settings","prev","k","d","calendarClassNames","calendarComponents","ChevronLeft","formatDate","PickerTrigger","Calendar","DatePicker","fromDate","toDate","DayPicker","DateRangePicker","Dialog","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","DialogContent","showClose","DialogHeader","DialogFooter","DialogTitle","DialogDescription","ConfirmationDialog","confirmLabel","cancelLabel","confirmVariant","onConfirm","EmptyState","action","secondaryAction","presets","ErrorState","onRetry","preset","Form","FormProvider","FormFieldContext","createContext","FormField","Controller","FormItemContext","useFormField","fieldContext","useContext","itemContext","getFieldState","formState","useFormContext","fieldState","FormItem","FormLabel","formItemId","LabelPrimitive","FormControl","formDescriptionId","formMessageId","FormDescription","FormError","body","Kbd","MultiSelect","maxVisibleChips","inputRef","useRef","toggle","x","clear","handleKeyDown","visibleChips","_a","Select","SelectPrimitive","SelectValue","SelectTrigger","scrollBtn","SelectScrollUpButton","ChevronUp","SelectScrollDownButton","SelectContent","position","SelectLabel","SelectItem","SelectSeparator","SelectGroup","pageRange","current","total","window","result","start","end","Pagination","page","pageCount","onPageChange","totalItems","pageSize","pageSizeOptions","onPageSizeChange","showJump","pages","from","to","goto","s","navButtonClass","ChevronsLeft","ChevronsRight","Popover","PopoverTrigger","PopoverAnchor","PopoverClose","PopoverContent","heightMap","fillTone","Progress","indeterminate","ProgressPrimitive","circleTone","ProgressCircle","thickness","isIndeterminate","radius","circumference","offset","RadioGroup","orientation","RadioGroupPrimitive","RadioItem","ScrollArea","ScrollAreaPrimitive","ScrollBar","Separator","decorative","SeparatorPrimitive","Sheet","SheetTrigger","SheetClose","SheetPortal","SheetOverlay","sheet","SheetContent","side","SheetHeader","SheetFooter","SheetTitle","SheetDescription","SidebarContext","useSidebar","Sidebar","defaultCollapsed","controlled","onCollapsedChange","header","footer","internal","setInternal","collapsed","setCollapsed","SidebarSection","SidebarItem","href","trailing","sub","SidebarGroup","defaultOpen","Fragment","Slider","showValue","formatValue","defaultValue","currentValue","isRange","SliderPrimitive","toneMap","Spinner","Stepper","steps","step","state","trackSize","thumbSize","Switch","labelPosition","control","SwitchPrimitive","labelBlock","Tabs","TabsPrimitive","TabsList","TabsTrigger","TabsContent","Textarea","autoResize","minRows","maxRows","innerRef","setRef","node","recompute","el","maxH","ToastProvider","ToastPrimitive","ToastViewport","iconMap","Toast","ToastTitle","ToastDescription","ToastAction","ToastClose","TooltipProvider","delayDuration","skipDelayDuration","TooltipPrimitive","TooltipRoot","TooltipTrigger","TooltipContent","Tooltip","TopNav","logo","nav","search","actions","TopNavLink","classNames","_ref","isObject","subject","isRecord","canUseDOM","areOptionsEqual","optionsA","optionsB","optionsAKeys","optionsBKeys","breakpointsA","breakpointsB","key","valueA","valueB","sortAndMapPluginToOptions","plugins","a","b","plugin","arePluginsEqual","pluginsA","pluginsB","optionA","index","optionB","isNumber","isString","isBoolean","mathAbs","mathSign","deltaAbs","factorAbs","diff","roundToTwoDecimals","num","arrayKeys","array","objectKeys","arrayLast","arrayLastIndex","arrayIsLastIndex","arrayFromNumber","startAt","object","objectsMergeDeep","objectA","objectB","mergedObjects","currentObject","areObjects","isMouseEvent","evt","ownerWindow","Alignment","viewSize","predefined","center","measure","EventStore","listeners","add","handler","removeListener","legacyMediaQueryList","self","Animations","ownerDocument","update","render","documentVisibleHandler","fixedTimeStep","lastTimeStamp","accumulatedTime","animationId","init","reset","destroy","stop","animate","timeStamp","timeElapsed","alpha","Axis","axis","contentDirection","isRightToLeft","isVertical","scroll","cross","sign","startEdge","getStartEdge","endEdge","getEndEdge","measureSize","nodeRect","height","width","Limit","min","length","reachedMin","reachedMax","reachedAny","constrain","removeOffset","Counter","loop","loopEnd","counter","withinLimit","get","set","clone","DragHandler","rootNode","target","dragTracker","location","animation","scrollTo","scrollBody","scrollTarget","eventHandler","percentOfView","dragFree","dragThreshold","skipSnaps","baseFriction","watchDrag","crossAxis","focusNodes","nonPassiveEvent","initEvents","dragEvents","goToNextThreshold","snapForceBoost","freeForceBoost","baseSpeed","isMoving","startScroll","startCross","pointerIsDown","preventScroll","preventClick","isMouse","emblaApi","downIfAllowed","down","up","click","addDragEvents","move","isFocusNode","nodeName","forceBoost","allowedForce","targetChanged","baseForce","isMouseEvt","lastScroll","lastCross","diffScroll","diffCross","rawForce","forceFactor","speed","friction","pointerDown","DragTracker","startEvent","lastEvent","readTime","readPoint","evtAxis","coord","pointerMove","expired","pointerUp","diffDrag","diffTime","NodeRects","offsetTop","offsetLeft","offsetWidth","offsetHeight","PercentOfView","ResizeHandler","container","slides","watchResize","nodeRects","observeNodes","resizeObserver","containerSize","slideSizes","destroyed","readSize","defaultCallback","entries","entry","isContainer","slideIndex","lastSize","newSize","ScrollBody","offsetLocation","previousLocation","baseDuration","scrollVelocity","scrollDirection","scrollDuration","scrollFriction","rawLocation","rawLocationPrevious","seek","displacement","isInstant","scrollDistance","settled","duration","velocity","useBaseDuration","useDuration","useBaseFriction","useFriction","ScrollBounds","limit","pullBackThreshold","edgeOffsetTolerance","frictionLimit","shouldConstrain","edge","diffToEdge","diffToTarget","toggleActive","ScrollContain","contentSize","snapsAligned","containScroll","pixelTolerance","scrollBounds","snapsBounded","measureBounded","scrollContainLimit","findScrollContainLimit","snapsContained","measureContained","usePixelTolerance","bound","snap","startSnap","endSnap","snapAligned","isFirst","scrollBound","ScrollLimit","scrollSnaps","ScrollLooper","vectors","shouldLoop","loopDistance","ScrollProgress","currentLocation","ScrollSnaps","alignment","containerRect","slideRects","slidesToScroll","groupSlides","alignments","measureSizes","snaps","measureUnaligned","measureAligned","rects","rect","g","SlideRegistry","containSnaps","slideIndexes","slideRegistry","createSlideRegistry","groupedSlideIndexes","doNotContain","group","groups","range","ScrollTarget","targetVector","minDistance","distances","findTargetSnap","distance","ascDiffsToSnaps","shortcut","d1","d2","targets","matchingTargets","byIndex","diffToSnap","byDistance","targetSnapDistance","reachedBound","snapDistance","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","targetIndex","SlideFocus","root","eventStore","watchFocus","focusListenerOptions","lastTabPressTime","registerTabPress","slide","Vector1D","initialValue","normalizeInput","subtract","Translate","translate","y","containerStyle","previousTarget","newTarget","SlideLooper","slideSizesWithGaps","ascItems","descItems","loopPoints","startPoints","endPoints","removeSlideSizes","indexes","slidesInGap","gap","findSlideBounds","findLoopPoints","isEndEdge","slideBounds","initial","altered","boundEdge","loopPoint","canLoop","otherIndexes","slideLocation","shiftLocation","SlidesHandler","watchSlides","mutationObserver","mutations","mutation","SlidesInView","threshold","intersectionEntryMap","inViewCache","notInViewCache","intersectionObserver","createInViewList","inView","isIntersecting","SlideSizes","readEdgeGap","withEdgeGap","startGap","measureStartGap","endGap","measureEndGap","measureWithGaps","slideRect","style","SlidesToScroll","groupByNumber","byNumber","groupSize","bySize","rectB","rectA","edgeA","edgeB","gapA","gapB","chunkSize","currentSize","previousSize","Engine","scrollAxis","startIndex","inViewThreshold","dragHandler","scrollLooper","slideLooper","shouldSettle","withinBounds","hasSettled","hasSettledAndIdle","interpolatedLocation","engine","startLocation","scrollProgress","slidesInView","slideFocus","EventHandler","api","getListeners","emit","on","cb","off","defaultOptions","OptionsHandler","mergeOptions","optionsAtMedia","matchedMediaOptions","media","mediaOption","optionsMediaQueries","optionsList","acc","mediaQueries","PluginsHandler","optionsHandler","activePlugins","map","EmblaCarousel","userOptions","userPlugins","pluginsHandler","mediaHandlers","reInit","reActivate","optionsBase","pluginList","pluginApis","storeElements","userContainer","userSlides","customSlides","createEngine","optionsWithoutLoop","activate","withOptions","withPlugins","selectedScrollSnap","deActivate","jump","scrollNext","scrollPrev","canScrollNext","canScrollPrev","scrollSnapList","previousScrollSnap","slidesNotInView","internalEngine","containerNode","slideNodes","useEmblaCarousel","storedOptions","storedPlugins","setEmblaApi","viewport","setViewport","newEmblaApi","CarouselContext","useCarousel","ctx","Carousel","opts","setApi","carouselRef","canPrev","setCanPrev","canNext","setCanNext","onSelect","CarouselContent","CarouselItem","CarouselPrevious","CarouselNext","useScales","data","w","h","ys","innerW","innerH","LineChart","caption","sx","sy","path","AreaChart","top","area","BarChart","barW","__insertCSS","code","head","DrawerContext","React__default","useDrawerContext","context","isMobileFirefox","userAgent","isMac","testPlatform","isIPhone","isSafari","isIPad","isIOS","re","KEYBOARD_BUFFER","useIsomorphicLayoutEffect","useLayoutEffect","chain$1","callbacks","args","callback","visualViewport","isScrollable","getScrollParent","nonTextInputTypes","preventScrollCount","restore","usePreventScroll","preventScrollMobileSafari","scrollable","lastY","onTouchStart","onTouchMove","scrollTop","bottom","onTouchEnd","isInput","onFocus","scrollIntoView","onWindowScroll","scrollX","scrollY","restoreStyles","setStyle","removeEvents","addEvent","element","cur","scrollableTop","targetTop","targetBottom","keyboardHeight","composeRefs","refs","useComposedRefs","React","cache","styles","ignoreCache","originalStyles","prop","getTranslate","transform","mat","dampenValue","assignStyle","prevStyle","chain","fns","fn","TRANSITIONS","VELOCITY_THRESHOLD","CLOSE_THRESHOLD","SCROLL_LOCK_TIMEOUT","BORDER_RADIUS","NESTED_DISPLACEMENT","WINDOW_TOP_OFFSET","DRAG_CLASS","useCallbackRef","callbackRef","useUncontrolledState","defaultProp","uncontrolledState","prevValueRef","handleChange","useControllableState","uncontrolledProp","setUncontrolledProp","isControlled","setValue","nextValue","useSnapPoints","activeSnapPointProp","setActiveSnapPointProp","snapPoints","drawerRef","overlayRef","fadeFromIndex","onSnapPointChange","snapToSequentialPoint","activeSnapPoint","setActiveSnapPoint","windowDimensions","setWindowDimensions","onResize","isLastSnapPoint","activeSnapPointIndex","_snapPoints_findIndex","snapPoint","shouldFade","snapPointsOffset","_snapPoints_map","isPx","snapPointAsNumber","activeSnapPointOffset","snapToPoint","dimension","_snapPointsOffset_findIndex","newSnapPointIndex","snapPointDim","newIndex","onRelease","draggedDistance","closeDrawer","currentPosition","isOverlaySnapPoint","hasDraggedUp","closestSnapPoint","curr","dim","dragDirection","onDrag","newValue","getPercentageDragged","absDraggedDistance","isDraggingDown","targetSnapPointIndex","snapPointDistance","percentageDragged","noop","useScaleBackground","isOpen","shouldScaleBackground","setBackgroundColorOnScale","noBodyStyles","timeoutIdRef","initialBackgroundColor","getScale","wrapper","wrapperStylesCleanup","previousBodyPosition","usePositionFixed","modal","nested","hasBeenOpened","preventScrollRestoration","activeUrl","setActiveUrl","scrollPos","setPositionFixed","innerHeight","bottomBarHeight","restorePositionSetting","onScroll","Root","openProp","onDragProp","onReleaseProp","closeThreshold","scrollLockTimeout","handleOnly","fixed","onClose","disablePreventScroll","repositionInputs","onAnimationEnd","autoFocus","_drawerRef_current","_drawerRef_current1","setIsOpen","setHasBeenOpened","isDragging","setIsDragging","justReleased","setJustReleased","openTime","dragStartTime","dragEndTime","lastTimeDragPrevented","isAllowedToDrag","nestedOpenChangeTimer","pointerStart","keyboardIsOpen","shouldAnimate","previousDiffFromInitial","drawerHeightRef","drawerWidthRef","initialDrawerHeight","onReleaseSnapPoints","onDragSnapPoints","getSnapPointsPercentageDragged","onPress","shouldDrag","isDraggingInDirection","_window_getSelection","highlightedText","swipeAmount","date","directionMultiplier","noCloseSnapPointsPreCondition","drawerDimension","snapPointPercentageDragged","dampenedDraggedDistance","translateValue","opacityValue","scaleValue","borderRadiusValue","_window_visualViewport","onVisualViewportChange","focusedElement","visualViewportHeight","totalHeight","diffFromInitial","drawerHeight","isTallEnough","offsetFromTop","activeSnapPointHeight","newDrawerHeight","fromWithin","cancelDrag","resetDrawer","currentSwipeAmount","timeTaken","distMoved","_drawerRef_current_getBoundingClientRect_height","visibleDrawerHeight","_drawerRef_current_getBoundingClientRect_width","visibleDrawerWidth","isHorizontalSwipe","onNestedOpenChange","scale","initialTranslate","onNestedDrag","_event","initialScale","newScale","newTranslate","onNestedRelease","Overlay","rest","composedRef","hasSnapPoints","onMouseUp","Content","onPointerDownOutside","onOpenAutoFocus","delayedSnapPoints","setDelayedSnapPoints","pointerStartRef","lastKnownPointerEventRef","wasBeyondThePointRef","isDeltaInDirection","delta","deltaY","deltaX","isDeltaX","dFactor","handleOnPointerUp","yPosition","xPosition","swipeStartThreshold","LONG_HANDLE_PRESS_TIMEOUT","DOUBLE_TAP_TIMEOUT","Handle","preventCycle","closeTimeoutIdRef","shouldCancelInteractionRef","handleStartCycle","handleCancelInteraction","handleCycleSnapPoints","currentSnapIndex","point","nextSnapPoint","handleStartInteraction","Portal","portalProps","Drawer","DrawerPrimitive","DrawerTrigger","DrawerPortal","DrawerClose","DrawerOverlay","DrawerContent","DrawerHeader","DrawerFooter","DrawerTitle","DrawerDescription","formatSize","bytes","FileUpload","accept","multiple","maxSize","hint","inputId","over","setOver","files","addFiles","incoming","arr","f","idx","onDrop","Upload","file","FileIcon","snackbar","Snackbar","TagInput","separators","draft","setDraft","tags","commit","raw","Timeline","TimelineItem","bullet","TimelineTime","TimelineTitle","TimelineDescription","Tree","defaultExpanded","selectedId","expanded","setExpanded","renderNode","depth","hasChildren","DefaultIcon","FolderOpen","Folder","AuthLayout","brand","subtitle","SignInForm","onSubmit","forgotHref","email","setEmail","password","setPassword","ArrowRight","SignUpForm","name","setName","ForgotPasswordForm","Mail","MagicLinkSent","onResend","navigate","hash","AppShell","ProfileFooter","Home","Pill","Inbox","Users","BarChart3","Bookmark","LayoutGrid","Plug","HelpCircle","TopBar","NotificationMenu","ProfileMenu","sampleNotifications","unread","Bell","User","Sparkles","LogOut","sampleStats","sampleActivity","Dashboard","r","sections","Lock","CreditCard","SettingsPage","setActive","sample","statusTone","DataTablePage","setStatus","setSelected","setPage","setPageSize","filtered","matchesQuery","matchesStatus","allSelected","someSelected","Plus","Filter","Download","Trash2","RecordDetail","Edit2","ExternalLink","Row","Onboarding","setStep","back","stepHeader","ArrowLeft","tiers","Pricing","tier","FirstRunEmpty"],"mappings":"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","x_google_ignoreList":[46,47,48,51]}
|