@wow-two-beta/ui 0.0.50 → 0.0.52
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/actions/button/Button.d.ts +3 -2
- package/dist/actions/button/Button.d.ts.map +1 -1
- package/dist/actions/index.js +2 -2
- package/dist/actions/toggleButton/ToggleButton.d.ts +3 -1
- package/dist/actions/toggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/{chunk-23DELZVV.js → chunk-2YI5Y2U3.js} +3 -3
- package/dist/{chunk-23DELZVV.js.map → chunk-2YI5Y2U3.js.map} +1 -1
- package/dist/{chunk-VTVWJBOP.js → chunk-5QGU5FNP.js} +45 -33
- package/dist/chunk-5QGU5FNP.js.map +1 -0
- package/dist/{chunk-ZVOPRSED.js → chunk-EZ2NOHIL.js} +4 -4
- package/dist/{chunk-ZVOPRSED.js.map → chunk-EZ2NOHIL.js.map} +1 -1
- package/dist/{chunk-BEOOTUFV.js → chunk-FIZJCXNN.js} +4 -4
- package/dist/{chunk-BEOOTUFV.js.map → chunk-FIZJCXNN.js.map} +1 -1
- package/dist/{chunk-CWT5VEMU.js → chunk-MN46ESLR.js} +32 -23
- package/dist/chunk-MN46ESLR.js.map +1 -0
- package/dist/{chunk-BUWJN6SN.js → chunk-SA7OVNKQ.js} +10 -6
- package/dist/chunk-SA7OVNKQ.js.map +1 -0
- package/dist/{chunk-WU5JMO3N.js → chunk-TZETHHW5.js} +57 -39
- package/dist/chunk-TZETHHW5.js.map +1 -0
- package/dist/{chunk-3YNJTBYF.js → chunk-UJDAJMFJ.js} +7 -5
- package/dist/chunk-UJDAJMFJ.js.map +1 -0
- package/dist/{chunk-2TKPRR4X.js → chunk-V5RYX33D.js} +3 -3
- package/dist/{chunk-2TKPRR4X.js.map → chunk-V5RYX33D.js.map} +1 -1
- package/dist/{chunk-2CDU2ZKL.js → chunk-X5INLQTJ.js} +3 -3
- package/dist/{chunk-2CDU2ZKL.js.map → chunk-X5INLQTJ.js.map} +1 -1
- package/dist/{chunk-L235NITI.js → chunk-X7SQOMHC.js} +4 -4
- package/dist/chunk-X7SQOMHC.js.map +1 -0
- package/dist/display/index.js +3 -3
- package/dist/feedback/index.js +3 -3
- package/dist/forms/checkbox/Checkbox.d.ts +3 -2
- package/dist/forms/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/forms/combobox/Combobox.d.ts.map +1 -1
- package/dist/forms/index.js +5 -5
- package/dist/forms/listbox/Listbox.d.ts +15 -8
- package/dist/forms/listbox/Listbox.d.ts.map +1 -1
- package/dist/forms/select/Select.d.ts +33 -26
- package/dist/forms/select/Select.d.ts.map +1 -1
- package/dist/icons/index.js +1 -1
- package/dist/index.js +11 -11
- package/dist/layout/index.js +3 -3
- package/dist/layout/surface/Surface.d.ts +4 -10
- package/dist/layout/surface/Surface.d.ts.map +1 -1
- package/dist/nav/index.js +3 -3
- package/dist/nav/navigationMenu/NavigationMenu.d.ts.map +1 -1
- package/dist/overlays/hoverCard/HoverCard.d.ts.map +1 -1
- package/dist/overlays/index.js +2 -2
- package/dist/overlays/popover/Popover.d.ts +2 -8
- package/dist/overlays/popover/Popover.d.ts.map +1 -1
- package/dist/utils/ColorExtensions.d.ts +39 -0
- package/dist/utils/ColorExtensions.d.ts.map +1 -0
- package/dist/utils/Equality.d.ts +9 -24
- package/dist/utils/Equality.d.ts.map +1 -1
- package/dist/utils/Layers.d.ts +16 -14
- package/dist/utils/Layers.d.ts.map +1 -1
- package/dist/utils/SurfaceStyles.d.ts +7 -0
- package/dist/utils/SurfaceStyles.d.ts.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-3YNJTBYF.js.map +0 -1
- package/dist/chunk-BUWJN6SN.js.map +0 -1
- package/dist/chunk-CWT5VEMU.js.map +0 -1
- package/dist/chunk-L235NITI.js.map +0 -1
- package/dist/chunk-VTVWJBOP.js.map +0 -1
- package/dist/chunk-WU5JMO3N.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/display/heading/Heading.variants.ts","../src/display/heading/Heading.tsx","../src/display/text/Text.variants.ts","../src/display/text/Text.tsx","../src/display/code/Code.variants.ts","../src/display/code/Code.tsx","../src/display/image/Image.tsx","../src/display/avatar/Avatar.variants.ts","../src/display/avatar/Avatar.tsx","../src/display/badge/Badge.variants.ts","../src/display/badge/Badge.tsx","../src/display/separator/Separator.tsx","../src/display/mark/Mark.tsx","../src/display/quote/Quote.tsx","../src/display/card/Card.tsx","../src/display/avatarGroup/AvatarGroup.tsx","../src/display/tooltip/Tooltip.tsx","../src/display/emptyState/EmptyState.tsx","../src/display/stat/Stat.tsx","../src/display/snippet/Snippet.tsx","../src/display/notificationDot/NotificationDot.tsx","../src/display/countBadge/CountBadge.tsx","../src/display/status/Status.tsx","../src/display/keyboardShortcut/KeyboardShortcut.tsx","../src/display/descriptionList/DescriptionList.tsx","../src/display/infoRow/InfoRow.tsx","../src/display/badgeOverlay/BadgeOverlay.tsx","../src/display/sectionHeader/SectionHeader.tsx","../src/display/highlight/Highlight.tsx","../src/display/collapsible/Collapsible.tsx","../src/display/accordion/Accordion.tsx","../src/display/tabs/Tabs.tsx","../src/display/list/List.variants.ts","../src/display/list/List.tsx","../src/display/timeline/Timeline.tsx","../src/display/tree/Tree.tsx","../src/display/table/Table.tsx","../src/display/dataTable/DataTable.tsx","../src/display/carousel/Carousel.tsx","../src/display/swipeActions/SwipeActions.tsx","../src/display/diffViewer/DiffViewer.tsx","../src/display/sparkline/Sparkline.tsx","../src/display/heatmapCalendar/HeatmapCalendar.tsx","../src/display/dataGrid/DataGrid.tsx","../src/display/nodeEditor/NodeEditor.tsx","../src/display/audioWaveform/AudioWaveform.tsx","../src/display/audioPlayer/AudioPlayer.tsx","../src/display/videoPlayer/VideoPlayer.tsx","../src/display/pdfViewer/PDFViewer.tsx","../src/display/scheduleView/ScheduleView.tsx","../src/display/gantt/Gantt.tsx","../src/display/eventCalendar/EventCalendar.tsx","../src/display/gradientText/GradientText.tsx","../src/display/countUp/CountUp.tsx","../src/display/animatedNumber/AnimatedNumber.tsx","../src/display/scrollReveal/ScrollReveal.tsx","../src/display/tilt/Tilt.tsx","../src/display/marquee/Marquee.tsx","../src/display/typewriter/Typewriter.tsx","../src/display/confetti/Confetti.tsx","../src/display/annotationMarker/AnnotationMarker.tsx","../src/display/reactionBar/ReactionBar.tsx","../src/display/chatBubble/ChatBubble.tsx","../src/display/messageList/MessageList.tsx","../src/display/threadView/ThreadView.tsx","../src/display/commentThread/CommentThread.tsx","../src/display/activityFeed/ActivityFeed.tsx"],"names":["forwardRef","jsx","useState","isValidElement","jsxs","Fragment","SIZE","TONE","POS","Collapsible","CollapsibleTrigger","CollapsibleContent","createContext","useContext","Accordion","useMemo","AccordionItem","useId","AccordionTrigger","AccordionContent","Tabs","TabsList","TabsTab","TabsPanel","List","ListItem","Check","Timeline","Children","TimelineItem","Tree","useCallback","TreeGroup","TreeItem","Table","TableHead","TableBody","TableFooter","TableRow","TableHeaderCell","TableCell","TableCaption","Carousel","next","CarouselViewport","CarouselSlides","CarouselSlide","CarouselPrev","CarouselNext","ChevronRight","CarouselDots","CarouselDot","SwipeActions","useRef","DiffViewer","i","j","Sparkline","HeatmapCalendar","DataGrid","useEffect","CellEditor","NodeEditor","TONE_CLASS","AudioWaveform","AudioPlayer","SPEEDS","formatTime","VideoPlayer","useImperativeHandle","Play","Pause","VolumeX","Volume2","Maximize","PDFViewer","ChevronLeft","ScheduleView","Gantt","EventCalendar","GradientText","CountUp","easeOutCubic","defaultFormat","prefersReducedMotion","AnimatedNumber","ScrollReveal","Tilt","Marquee","Typewriter","Confetti","ChevronDown"],"mappings":"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","file":"chunk-ZVOPRSED.js","sourcesContent":["import { tv, type VariantProps } from '../../utils';\n\nexport const headingVariants = tv({\n base: 'font-semibold tracking-tight text-foreground',\n variants: {\n size: {\n xs: 'text-sm',\n sm: 'text-base',\n md: 'text-lg',\n lg: 'text-xl',\n xl: 'text-2xl',\n '2xl': 'text-3xl',\n '3xl': 'text-4xl',\n '4xl': 'text-5xl',\n },\n weight: {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n },\n align: {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n },\n },\n defaultVariants: {\n size: 'lg',\n weight: 'semibold',\n },\n});\n\nexport type HeadingVariants = VariantProps<typeof headingVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { headingVariants, type HeadingVariants } from './Heading.variants';\n\ntype HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface HeadingProps\n extends Omit<ComponentPropsWithoutRef<'h2'>, 'size'>,\n HeadingVariants {\n /** Semantic heading level (1–6). Default 2. Visual size is independent — set via `size`. */\n level?: HeadingLevel;\n}\n\n/**\n * Semantic heading. `level` controls the rendered tag (`h1`–`h6`); `size`\n * controls the visual scale independently — so a visually-large heading\n * can still be the right outline level.\n */\nexport const Heading = forwardRef<HTMLHeadingElement, HeadingProps>(\n ({ level = 2, className, size, weight, align, ...props }, ref) => {\n const Tag = `h${level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n return (\n <Tag\n ref={ref}\n className={cn(headingVariants({ size, weight, align }), className)}\n {...props}\n />\n );\n },\n);\nHeading.displayName = 'Heading';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const textVariants = tv({\n base: '',\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n },\n weight: {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n },\n color: {\n default: 'text-foreground',\n muted: 'text-muted-foreground',\n subtle: 'text-subtle-foreground',\n brand: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-destructive',\n },\n align: {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n },\n truncate: {\n true: 'truncate',\n },\n },\n defaultVariants: {\n size: 'md',\n weight: 'normal',\n color: 'default',\n },\n});\n\nexport type TextVariants = VariantProps<typeof textVariants>;\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementType,\n type Ref,\n} from 'react';\nimport { cn } from '../../utils';\nimport { textVariants, type TextVariants } from './Text.variants';\n\nexport interface TextProps\n extends Omit<ComponentPropsWithoutRef<'p'>, 'as' | 'color'>,\n TextVariants {\n as?: ElementType;\n}\n\n/**\n * Body text. Renders as `<p>` by default; pass `as=\"span\"` (or any element)\n * to keep semantics consistent with the surrounding markup.\n */\nexport const Text = forwardRef<HTMLElement, TextProps>(\n ({ as: Component = 'p', className, size, weight, color, align, truncate, ...props }, ref) => (\n <Component\n ref={ref as Ref<HTMLElement>}\n className={cn(textVariants({ size, weight, color, align, truncate }), className)}\n {...props}\n />\n ),\n);\nText.displayName = 'Text';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const codeVariants = tv({\n base: 'font-mono text-sm',\n variants: {\n variant: {\n inline: 'rounded-sm bg-muted px-1 py-0.5 text-foreground',\n block: 'block w-full overflow-x-auto rounded-md bg-muted p-4 text-foreground',\n },\n },\n defaultVariants: {\n variant: 'inline',\n },\n});\n\nexport type CodeVariants = VariantProps<typeof codeVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { codeVariants, type CodeVariants } from './Code.variants';\n\nexport interface CodeProps extends ComponentPropsWithoutRef<'code'>, CodeVariants {}\n\n/**\n * Inline or block code. For block, wrap children in a `<pre>` if you need\n * pre-wrap whitespace; this atom only styles. Syntax highlighting is L5.\n */\nexport const Code = forwardRef<HTMLElement, CodeProps>(\n ({ className, variant, ...props }, ref) => (\n <code ref={ref} className={cn(codeVariants({ variant }), className)} {...props} />\n ),\n);\nCode.displayName = 'Code';\n","import { forwardRef, useState, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface ImageProps extends ComponentPropsWithoutRef<'img'> {\n /** Element rendered when the image fails to load. */\n fallback?: ReactNode;\n}\n\n/**\n * Image with built-in error fallback. The fallback element replaces the\n * `<img>` on error (broken `src`, network failure). For aspect-locked\n * images, wrap in `AspectRatio`.\n */\nexport const Image = forwardRef<HTMLImageElement, ImageProps>(\n ({ fallback, onError, alt = '', className, ...props }, ref) => {\n const [errored, setErrored] = useState(false);\n if (errored && fallback !== undefined) return <>{fallback}</>;\n return (\n <img\n ref={ref}\n alt={alt}\n className={cn('block max-w-full', className)}\n onError={(e) => {\n setErrored(true);\n onError?.(e);\n }}\n {...props}\n />\n );\n },\n);\nImage.displayName = 'Image';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const avatarVariants = tv({\n base: 'inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-medium',\n variants: {\n size: {\n xs: 'h-6 w-6 text-xs',\n sm: 'h-8 w-8 text-sm',\n md: 'h-10 w-10 text-base',\n lg: 'h-12 w-12 text-lg',\n xl: 'h-16 w-16 text-xl',\n '2xl': 'h-20 w-20 text-2xl',\n },\n shape: {\n circle: 'rounded-full',\n square: 'rounded-md',\n },\n tone: {\n // 'none' is used when autoColor takes over — prevents theme tokens from competing in the cascade.\n none: '',\n neutral: 'bg-muted text-muted-foreground',\n primary: 'bg-primary-soft text-primary-soft-foreground',\n danger: 'bg-destructive-soft text-destructive-soft-foreground',\n success: 'bg-success-soft text-success-soft-foreground',\n warning: 'bg-warning-soft text-warning-soft-foreground',\n },\n bgStyle: {\n solid: '',\n // Gradient class composed in compoundVariants × tone.\n gradient: '',\n },\n ring: {\n none: '',\n neutral: 'ring-2 ring-offset-2 ring-border ring-offset-background',\n primary: 'ring-2 ring-offset-2 ring-primary ring-offset-background',\n danger: 'ring-2 ring-offset-2 ring-destructive ring-offset-background',\n success: 'ring-2 ring-offset-2 ring-success ring-offset-background',\n warning: 'ring-2 ring-offset-2 ring-warning ring-offset-background',\n },\n isLoading: {\n true: 'animate-pulse !bg-muted text-transparent',\n false: '',\n },\n },\n compoundVariants: [\n // gradient × tone\n { bgStyle: 'gradient', tone: 'neutral', class: 'bg-gradient-to-br from-muted to-muted/40' },\n { bgStyle: 'gradient', tone: 'primary', class: 'bg-gradient-to-br from-primary-soft to-primary text-primary-foreground' },\n { bgStyle: 'gradient', tone: 'danger', class: 'bg-gradient-to-br from-destructive-soft to-destructive text-destructive-foreground' },\n { bgStyle: 'gradient', tone: 'success', class: 'bg-gradient-to-br from-success-soft to-success text-success-foreground' },\n { bgStyle: 'gradient', tone: 'warning', class: 'bg-gradient-to-br from-warning-soft to-warning text-warning-foreground' },\n ],\n defaultVariants: {\n size: 'md',\n shape: 'circle',\n tone: 'neutral',\n bgStyle: 'solid',\n ring: 'none',\n isLoading: false,\n },\n});\n\nexport type AvatarVariants = VariantProps<typeof avatarVariants>;\n","import {\n forwardRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn, CssExtensions, type SizePreset, type SizeUnion } from '../../utils';\nimport { avatarVariants, type AvatarVariants } from './Avatar.variants';\n\nconst COMPONENT_NAME = 'Avatar';\n\n/* Avatar supports the full canonical preset vocabulary. */\ntype AvatarSizePreset = SizePreset;\nconst AVATAR_SIZE_PRESETS: ReadonlySet<string> = new Set<AvatarSizePreset>([\n 'xs', 'sm', 'md', 'lg', 'xl', '2xl',\n]);\n\n/* Solid palette for autoColor — 17 distinct hues, dark-mode aware. Light: bg-100/text-800. Dark: bg-900/text-100. No opacity — keeps contrast deterministic across themes. */\nconst AUTO_COLOR_PALETTE = [\n 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-100',\n 'bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-100',\n 'bg-amber-100 text-amber-800 dark:bg-amber-900 dark:text-amber-100',\n 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-100',\n 'bg-lime-100 text-lime-800 dark:bg-lime-900 dark:text-lime-100',\n 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100',\n 'bg-emerald-100 text-emerald-800 dark:bg-emerald-900 dark:text-emerald-100',\n 'bg-teal-100 text-teal-800 dark:bg-teal-900 dark:text-teal-100',\n 'bg-cyan-100 text-cyan-800 dark:bg-cyan-900 dark:text-cyan-100',\n 'bg-sky-100 text-sky-800 dark:bg-sky-900 dark:text-sky-100',\n 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-100',\n 'bg-indigo-100 text-indigo-800 dark:bg-indigo-900 dark:text-indigo-100',\n 'bg-violet-100 text-violet-800 dark:bg-violet-900 dark:text-violet-100',\n 'bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-100',\n 'bg-fuchsia-100 text-fuchsia-800 dark:bg-fuchsia-900 dark:text-fuchsia-100',\n 'bg-pink-100 text-pink-800 dark:bg-pink-900 dark:text-pink-100',\n 'bg-rose-100 text-rose-800 dark:bg-rose-900 dark:text-rose-100',\n];\n\nfunction hashName(name: string): number {\n let h = 0;\n for (let i = 0; i < name.length; i++) {\n h = (h * 31 + name.charCodeAt(i)) | 0;\n }\n return Math.abs(h);\n}\n\nfunction pickAutoColor(name: string): string {\n return AUTO_COLOR_PALETTE[hashName(name) % AUTO_COLOR_PALETTE.length]!;\n}\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 0) return '';\n const first = parts[0]?.[0] ?? '';\n const last = parts.length > 1 ? parts[parts.length - 1]?.[0] ?? '' : '';\n return (first + last).toUpperCase();\n}\n\nexport interface AvatarProps\n extends Omit<ComponentPropsWithoutRef<'span'>, 'children'>,\n Omit<AvatarVariants, 'size'> {\n /* Image source. Falls back to `name` initials or `fallback` on error. */\n src?: string;\n\n /* Person/entity name — used to derive initials when no image. */\n name?: string;\n\n /* Custom fallback (overrides initials). */\n fallback?: ReactNode;\n\n /* Alt text for the underlying `<img>`. Defaults to `name`. */\n alt?: string;\n\n /* When true (and no explicit non-neutral `tone` / non-solid `bgStyle`), derive a deterministic soft-color tint from `name` hash → 17-color palette. */\n autoColor?: boolean;\n\n /* Size: preset (`xs|sm|md|lg|xl|2xl`) → variant class · raw number/string → square inline · object → explicit dims. See `SizeUnion`. */\n size?: SizeUnion<AvatarSizePreset>;\n}\n\n/* Image avatar with initials fallback. Supports semantic tones, deterministic auto-color from name hash, gradient bg, ring, and loading skeleton. Composable with `<BadgeOverlay>` for status dots / counts / icons. */\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n (\n {\n src,\n name = '',\n fallback,\n alt,\n autoColor,\n tone,\n bgStyle,\n ring,\n isLoading,\n size,\n shape,\n className,\n ...props\n },\n ref,\n ) => {\n const [errored, setErrored] = useState(false);\n const showImage = !!src && !errored && !isLoading;\n\n /* Parse union-typed `size` — preset routes to variant class, raw/object routes to inline dims. */\n const { preset: sizePreset, box: sizeBox } = CssExtensions.parseSizeUnion<AvatarSizePreset>(\n size,\n AVATAR_SIZE_PRESETS,\n );\n const boxStyle = sizeBox ? CssExtensions.resolveBoxSize(sizeBox) : undefined;\n\n /* autoColor only fires when (a) name is set, (b) no explicit non-neutral tone, (c) bgStyle isn't gradient. Explicit dials win. */\n const autoColorClass =\n autoColor &&\n name &&\n bgStyle !== 'gradient' &&\n (tone === undefined || tone === 'neutral')\n ? pickAutoColor(name)\n : undefined;\n\n /* When autoColor is active, suppress the tone variant entirely so its theme-token classes don't compete in the cascade. */\n const effectiveTone = autoColorClass ? 'none' : tone;\n\n return (\n <span\n ref={ref}\n className={cn(\n avatarVariants({ size: sizePreset, shape, tone: effectiveTone, bgStyle, ring, isLoading }),\n autoColorClass,\n className,\n )}\n style={boxStyle}\n data-loading={isLoading ? 'true' : undefined}\n aria-busy={isLoading ? true : undefined}\n {...props}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt ?? name}\n className=\"h-full w-full object-cover\"\n onError={() => setErrored(true)}\n />\n ) : (\n fallback ?? getInitials(name)\n )}\n </span>\n );\n },\n);\n\nAvatar.displayName = COMPONENT_NAME;\n","import { tv, type VariantProps } from '../../utils';\n\nexport const badgeVariants = tv({\n base: 'inline-flex items-center rounded-full font-medium',\n variants: {\n variant: {\n neutral: 'bg-muted text-foreground',\n brand: 'bg-primary-soft text-primary-soft-foreground',\n success: 'bg-success-soft text-success-soft-foreground',\n warning: 'bg-warning-soft text-warning-soft-foreground',\n danger: 'bg-destructive-soft text-destructive-soft-foreground',\n info: 'bg-info-soft text-info-soft-foreground',\n outline: 'border border-border text-foreground',\n },\n size: {\n sm: 'h-5 px-2 text-xs',\n md: 'h-6 px-2.5 text-xs',\n lg: 'h-7 px-3 text-sm',\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'md',\n },\n});\n\nexport type BadgeVariants = VariantProps<typeof badgeVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { badgeVariants, type BadgeVariants } from './Badge.variants';\n\nexport interface BadgeProps extends ComponentPropsWithoutRef<'span'>, BadgeVariants {}\n\n/**\n * Pill-shaped status / category indicator. Non-interactive — for clickable\n * use `Tag`. For severity-tinted callouts at message scale, use `Alert*`.\n */\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, size, ...props }, ref) => (\n <span ref={ref} className={cn(badgeVariants({ variant, size }), className)} {...props} />\n ),\n);\nBadge.displayName = 'Badge';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport interface SeparatorProps extends ComponentPropsWithoutRef<'div'> {\n orientation?: 'horizontal' | 'vertical';\n /** When `true`, the separator is purely decorative — `role=\"none\"` and\n * unannounced. Default `true`. Set `false` when meaningful in context. */\n decorative?: boolean;\n}\n\n/**\n * Visual divider. Defaults to a horizontal hairline; pass `orientation=\"vertical\"`\n * for column dividers (use inside a flex/grid with explicit height).\n */\nexport const Separator = forwardRef<HTMLDivElement, SeparatorProps>(\n ({ orientation = 'horizontal', decorative = true, className, ...props }, ref) => (\n <div\n ref={ref}\n role={decorative ? 'none' : 'separator'}\n aria-orientation={decorative ? undefined : orientation}\n className={cn(\n 'bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'w-px self-stretch',\n className,\n )}\n {...props}\n />\n ),\n);\nSeparator.displayName = 'Separator';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport type MarkProps = ComponentPropsWithoutRef<'mark'>;\n\n/**\n * Highlighted text — semantic `<mark>` with a yellow tint. Use for search\n * matches and \"you mentioned this\" affordances.\n */\nexport const Mark = forwardRef<HTMLElement, MarkProps>(({ className, ...props }, ref) => (\n <mark\n ref={ref}\n className={cn('rounded-sm bg-warning-soft px-0.5 text-warning-soft-foreground', className)}\n {...props}\n />\n));\nMark.displayName = 'Mark';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport type QuoteProps = ComponentPropsWithoutRef<'blockquote'>;\n\n/**\n * Block quote with subtle left border and italic body text.\n */\nexport const Quote = forwardRef<HTMLQuoteElement, QuoteProps>(\n ({ className, ...props }, ref) => (\n <blockquote\n ref={ref}\n className={cn(\n 'border-l-4 border-border pl-4 italic text-muted-foreground',\n className,\n )}\n {...props}\n />\n ),\n);\nQuote.displayName = 'Quote';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\ntype DivProps = ComponentPropsWithoutRef<'div'>;\n\nexport interface CardProps extends DivProps {\n padding?: 'none' | 'sm' | 'md' | 'lg';\n}\n\nconst PADDING: Record<NonNullable<CardProps['padding']>, string> = {\n none: '',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n};\n\nconst CardRoot = forwardRef<HTMLDivElement, CardProps>(\n ({ className, padding = 'none', ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-border bg-card text-card-foreground shadow-xs',\n PADDING[padding],\n className,\n )}\n {...props}\n />\n ),\n);\nCardRoot.displayName = 'Card';\n\nconst CardHeader = forwardRef<HTMLDivElement, DivProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col gap-1 p-4 pb-2', className)} {...props} />\n));\nCardHeader.displayName = 'Card.Header';\n\nconst CardTitle = forwardRef<HTMLHeadingElement, ComponentPropsWithoutRef<'h3'>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('text-lg font-semibold tracking-tight', className)} {...props} />\n ),\n);\nCardTitle.displayName = 'Card.Title';\n\nconst CardDescription = forwardRef<HTMLParagraphElement, ComponentPropsWithoutRef<'p'>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n ),\n);\nCardDescription.displayName = 'Card.Description';\n\nconst CardBody = forwardRef<HTMLDivElement, DivProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-4 pt-2', className)} {...props} />\n));\nCardBody.displayName = 'Card.Body';\n\nconst CardFooter = forwardRef<HTMLDivElement, DivProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center gap-2 border-t border-border p-4', className)} {...props} />\n));\nCardFooter.displayName = 'Card.Footer';\n\n/**\n * Compound `Card` — raised surface for grouped content. Use sub-components\n * for structure: `<Card.Header>` (with optional `<Card.Title>` /\n * `<Card.Description>`), `<Card.Body>`, `<Card.Footer>`. Or pass\n * `padding=\"md\"` and free-form children for the simplest case.\n */\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Title: CardTitle,\n Description: CardDescription,\n Body: CardBody,\n Footer: CardFooter,\n});\n","import { Children, forwardRef, isValidElement, type ComponentPropsWithoutRef, type ReactElement } from 'react';\nimport { cn } from '../../utils';\nimport { Avatar, type AvatarProps } from '../avatar/Avatar';\n\nexport interface AvatarGroupProps extends ComponentPropsWithoutRef<'div'> {\n /** Maximum avatars to render. Excess is shown as a \"+N\" tile. */\n max?: number;\n /** Avatar size applied to all children. Default `md`. */\n size?: AvatarProps['size'];\n /** Negative-margin overlap class applied between avatars. Default `-ml-2`. */\n overlap?: string;\n}\n\n/**\n * Stacked group of `Avatar` children with overlap and an optional \"+N more\"\n * indicator when children exceed `max`.\n */\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ max, size = 'md', overlap = '-ml-2', className, children, ...props }, ref) => {\n const all = Children.toArray(children).filter(isValidElement) as ReactElement<AvatarProps>[];\n const visible = max ? all.slice(0, max) : all;\n const overflow = max ? Math.max(0, all.length - max) : 0;\n\n return (\n <div\n ref={ref}\n className={cn('inline-flex items-center', className)}\n {...props}\n >\n {visible.map((child, i) => (\n <div\n key={i}\n className={cn('ring-2 ring-background rounded-full', i > 0 && overlap)}\n >\n {/* Force consistent size */}\n <Avatar {...child.props} size={size} />\n </div>\n ))}\n {overflow > 0 && (\n <Avatar\n size={size}\n name={`+${overflow}`}\n className={cn(overlap, 'ring-2 ring-background')}\n />\n )}\n </div>\n );\n },\n);\nAvatarGroup.displayName = 'AvatarGroup';\n","import {\n cloneElement,\n isValidElement,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport {\n AnchoredPositioner,\n Portal,\n type AnchoredPositionerProps,\n} from '../../primitives';\n\nexport interface TooltipProps {\n /** Tooltip body. */\n content: ReactNode;\n /** Single child element — the trigger. Receives event handlers + ref. */\n children: ReactElement;\n /** Floating UI placement. Default `top`. */\n placement?: AnchoredPositionerProps['placement'];\n /** Delay before opening on hover, in ms. Default 700. */\n openDelay?: number;\n /** Delay before closing on leave, in ms. Default 0. */\n closeDelay?: number;\n /** Controlled open state. */\n open?: boolean;\n /** Disable rendering even on hover (e.g. when content is empty). */\n disabled?: boolean;\n}\n\n/**\n * Hover-/focus-triggered tooltip. Wraps a single child as the trigger; the\n * tooltip body renders into a Portal positioned by Floating UI. Default\n * delays mirror the OS pattern (700ms in, 0 out).\n */\nexport function Tooltip({\n content,\n children,\n placement = 'top',\n openDelay = 700,\n closeDelay = 0,\n open: controlledOpen,\n disabled,\n}: TooltipProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const open = controlledOpen ?? uncontrolledOpen;\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = null;\n closeTimer.current = null;\n };\n const show = () => {\n clear();\n openTimer.current = setTimeout(() => setUncontrolledOpen(true), openDelay);\n };\n const hide = () => {\n clear();\n closeTimer.current = setTimeout(() => setUncontrolledOpen(false), closeDelay);\n };\n\n if (!isValidElement(children)) return children;\n const trigger = children as ReactElement<{\n ref?: Ref<HTMLElement>;\n onPointerEnter?: (e: React.PointerEvent) => void;\n onPointerLeave?: (e: React.PointerEvent) => void;\n onFocus?: (e: React.FocusEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n }> & { ref?: Ref<HTMLElement> };\n\n const cloned = cloneElement(trigger, {\n ref: composeRefs(setAnchor, trigger.ref),\n onPointerEnter: (e: React.PointerEvent) => {\n trigger.props.onPointerEnter?.(e);\n show();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n trigger.props.onPointerLeave?.(e);\n hide();\n },\n onFocus: (e: React.FocusEvent) => {\n trigger.props.onFocus?.(e);\n show();\n },\n onBlur: (e: React.FocusEvent) => {\n trigger.props.onBlur?.(e);\n hide();\n },\n });\n\n return (\n <>\n {cloned}\n {!disabled && open && content && (\n <Portal>\n <AnchoredPositioner anchor={anchor} placement={placement} offset={6}>\n <div\n role=\"tooltip\"\n className={cn(\n 'z-tooltip rounded-md bg-inverse px-2.5 py-1.5 text-xs text-inverse-foreground shadow-md',\n 'animate-in fade-in-0 zoom-in-95',\n )}\n >\n {content}\n </div>\n </AnchoredPositioner>\n </Portal>\n )}\n </>\n );\n}\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { Heading } from '../heading/Heading';\nimport { Text } from '../text/Text';\n\nexport interface EmptyStateProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {\n /** Optional icon (lucide or custom). */\n icon?: ReactNode;\n /** Heading copy. */\n title: ReactNode;\n /** Body copy below the title. */\n description?: ReactNode;\n /** Action(s) — usually one or two `<Button>` elements. */\n actions?: ReactNode;\n /** Visual size. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst SIZE: Record<NonNullable<EmptyStateProps['size']>, { wrap: string; iconBox: string }> = {\n sm: { wrap: 'gap-2 py-6', iconBox: 'h-10 w-10' },\n md: { wrap: 'gap-3 py-10', iconBox: 'h-14 w-14' },\n lg: { wrap: 'gap-4 py-16', iconBox: 'h-20 w-20' },\n};\n\n/**\n * Empty-list / no-results affordance: icon + title + description + actions.\n * Pass any subset; the component centers everything vertically.\n */\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n ({ icon, title, description, actions, size = 'md', className, ...props }, ref) => {\n const sz = SIZE[size];\n return (\n <div\n ref={ref}\n className={cn('flex flex-col items-center text-center', sz.wrap, className)}\n {...props}\n >\n {icon && (\n <div\n className={cn(\n 'flex items-center justify-center rounded-full bg-muted text-muted-foreground',\n sz.iconBox,\n )}\n >\n {icon}\n </div>\n )}\n <Heading level={3} size={size === 'sm' ? 'md' : size === 'lg' ? 'xl' : 'lg'}>\n {title}\n </Heading>\n {description && <Text color=\"muted\" size={size === 'lg' ? 'md' : 'sm'}>{description}</Text>}\n {actions && <div className=\"mt-2 flex items-center gap-2\">{actions}</div>}\n </div>\n );\n },\n);\nEmptyState.displayName = 'EmptyState';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { TrendingDown, TrendingUp } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { Heading } from '../heading/Heading';\nimport { Text } from '../text/Text';\n\nexport interface StatProps extends ComponentPropsWithoutRef<'div'> {\n /** Label above the value. */\n label: ReactNode;\n /** Primary value (large). */\n value: ReactNode;\n /** Optional trend — positive = up/green, negative = down/red. */\n trend?: { value: number; label?: ReactNode };\n /** Optional helper / supporting text below. */\n helper?: ReactNode;\n /** Visual size. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst VALUE_SIZE: Record<NonNullable<StatProps['size']>, '2xl' | '3xl' | '4xl'> = {\n sm: '2xl',\n md: '3xl',\n lg: '4xl',\n};\n\n/**\n * Single metric tile — label + big value + optional trend + helper. Use\n * inside dashboards / KPI grids.\n */\nexport const Stat = forwardRef<HTMLDivElement, StatProps>(\n ({ label, value, trend, helper, size = 'md', className, ...props }, ref) => {\n const trendUp = trend ? trend.value >= 0 : false;\n return (\n <div ref={ref} className={cn('flex flex-col gap-1', className)} {...props}>\n <Text size=\"sm\" color=\"muted\">{label}</Text>\n <Heading level={3} size={VALUE_SIZE[size]} weight=\"bold\">{value}</Heading>\n {(trend || helper) && (\n <div className=\"mt-1 flex items-center gap-2\">\n {trend && (\n <span\n className={cn(\n 'inline-flex items-center gap-0.5 text-xs font-medium',\n trendUp ? 'text-success' : 'text-destructive',\n )}\n >\n <Icon icon={trendUp ? TrendingUp : TrendingDown} size={12} />\n {trend.value > 0 ? '+' : ''}{trend.value}%\n {trend.label && <span className=\"text-muted-foreground\"> {trend.label}</span>}\n </span>\n )}\n {helper && !trend && <Text size=\"xs\" color=\"muted\">{helper}</Text>}\n </div>\n )}\n </div>\n );\n },\n);\nStat.displayName = 'Stat';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { Check, Copy } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { useClipboard } from '../../hooks';\nimport { Code } from '../code/Code';\n\nexport interface SnippetProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n /** Code text to display + copy. */\n text: string;\n /** Visual variant — `inline` (single line) or `block` (multi-line). Default `inline`. */\n variant?: 'inline' | 'block';\n}\n\n/**\n * Code text with a built-in copy button. Inline variant for one-liners,\n * block variant for multi-line snippets. Copy logic uses the L1\n * `useClipboard` hook directly (Snippet stays in display, can't import the\n * actions/CopyButton component).\n */\nexport const Snippet = forwardRef<HTMLDivElement, SnippetProps>(\n ({ text, variant = 'inline', className, ...props }, ref) => {\n const { copied, copy } = useClipboard();\n return (\n <div\n ref={ref}\n className={cn(\n 'group relative inline-flex w-full items-start',\n variant === 'inline' ? 'gap-2' : 'flex-col gap-0',\n className,\n )}\n {...props}\n >\n <Code variant={variant} className=\"flex-1 pr-10\">{text}</Code>\n <button\n type=\"button\"\n aria-label={copied ? 'Copied' : 'Copy'}\n onClick={() => void copy(text)}\n className={cn(\n 'absolute right-2 grid h-7 w-7 place-items-center rounded text-muted-foreground transition-colors hover:bg-background hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n variant === 'inline' ? 'top-1/2 -translate-y-1/2' : 'top-2',\n )}\n >\n <Icon icon={copied ? Check : Copy} size={14} />\n </button>\n </div>\n );\n },\n);\nSnippet.displayName = 'Snippet';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport interface NotificationDotProps extends ComponentPropsWithoutRef<'span'> {\n tone?: 'destructive' | 'success' | 'warning' | 'info' | 'primary' | 'neutral';\n size?: 'xs' | 'sm' | 'md';\n /** Adds a pulsing ring around the dot. */\n pulse?: boolean;\n /** When set, the dot is positioned absolutely relative to its parent. */\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n}\n\nconst TONE: Record<NonNullable<NotificationDotProps['tone']>, string> = {\n destructive: 'bg-destructive',\n success: 'bg-success',\n warning: 'bg-warning',\n info: 'bg-info',\n primary: 'bg-primary',\n neutral: 'bg-muted-foreground',\n};\n\nconst SIZE: Record<NonNullable<NotificationDotProps['size']>, string> = {\n xs: 'h-1.5 w-1.5',\n sm: 'h-2 w-2',\n md: 'h-2.5 w-2.5',\n};\n\nconst POS: Record<NonNullable<NotificationDotProps['position']>, string> = {\n 'top-right': 'absolute -top-0.5 -right-0.5',\n 'top-left': 'absolute -top-0.5 -left-0.5',\n 'bottom-right': 'absolute -bottom-0.5 -right-0.5',\n 'bottom-left': 'absolute -bottom-0.5 -left-0.5',\n};\n\n/**\n * Tiny colored dot — unread/notification indicator. Pass `position` to\n * absolutely-place over a parent (e.g. on an Avatar or `<Button shape=\"square\"/circle\">`).\n */\nexport const NotificationDot = forwardRef<HTMLSpanElement, NotificationDotProps>(\n ({ tone = 'destructive', size = 'sm', pulse, position, className, ...props }, ref) => (\n <span\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\n 'inline-flex rounded-full ring-2 ring-background',\n TONE[tone],\n SIZE[size],\n position && POS[position],\n pulse && 'after:absolute after:inset-0 after:animate-ping after:rounded-full after:opacity-75 after:content-[\"\"] ' + TONE[tone],\n className,\n )}\n {...props}\n />\n ),\n);\nNotificationDot.displayName = 'NotificationDot';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { Badge, type BadgeProps } from '../badge/Badge';\n\nexport interface CountBadgeProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {\n /** The numeric count. */\n value: number;\n /** Cap value — shows \"max+\" when exceeded. Default 99. */\n max?: number;\n /** Hide entirely when count is 0. Default true. */\n hideZero?: boolean;\n variant?: BadgeProps['variant'];\n}\n\n/**\n * Numeric badge for notification / inbox counts. Displays \"{value}\" or\n * \"{max}+\" once the cap is exceeded. Hides when `value === 0` unless\n * `hideZero={false}`.\n */\nexport const CountBadge = forwardRef<HTMLSpanElement, CountBadgeProps>(\n ({ value, max = 99, hideZero = true, variant = 'danger', className, ...props }, ref) => {\n if (value === 0 && hideZero) return null;\n const display = value > max ? `${max}+` : `${value}`;\n return (\n <Badge\n ref={ref}\n variant={variant}\n size=\"sm\"\n className={cn('min-w-5 justify-center px-1.5', className)}\n {...props}\n >\n {display}\n </Badge>\n );\n },\n);\nCountBadge.displayName = 'CountBadge';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface StatusProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {\n tone?: 'success' | 'warning' | 'destructive' | 'info' | 'neutral';\n /** Optional pulsing ring around the dot. */\n pulse?: boolean;\n children?: ReactNode;\n}\n\nconst TONE: Record<NonNullable<StatusProps['tone']>, string> = {\n success: 'bg-success',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n info: 'bg-info',\n neutral: 'bg-muted-foreground',\n};\n\n/**\n * Colored dot + text label — server status, online presence, build state.\n * Use `Status` (with text) for labelled indicators; `NotificationDot` for\n * the bare positioned dot.\n */\nexport const Status = forwardRef<HTMLSpanElement, StatusProps>(\n ({ tone = 'success', pulse, className, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn('inline-flex items-center gap-2 text-sm text-foreground', className)}\n {...props}\n >\n <span className=\"relative inline-flex\">\n <span className={cn('inline-block h-2 w-2 rounded-full', TONE[tone])} />\n {pulse && (\n <span\n className={cn(\n 'absolute inset-0 inline-block rounded-full opacity-75 animate-ping',\n TONE[tone],\n )}\n />\n )}\n </span>\n {children}\n </span>\n ),\n);\nStatus.displayName = 'Status';\n","import { forwardRef, Fragment, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { Kbd } from '../kbd/Kbd';\n\nexport interface KeyboardShortcutProps extends ComponentPropsWithoutRef<'span'> {\n /** Keys in order — e.g. `['⌘', 'K']` or `['Ctrl', 'Shift', 'P']`. */\n keys: string[];\n /** Connector between keys. Default `'+'`; pass `' '` for spaced keys. */\n separator?: string;\n}\n\n/**\n * Render a sequence of `Kbd` keys with connectors between them — e.g.\n * `<KeyboardShortcut keys={['⌘', 'K']} />` → ⌘ + K.\n */\nexport const KeyboardShortcut = forwardRef<HTMLSpanElement, KeyboardShortcutProps>(\n ({ keys, separator = '+', className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn('inline-flex items-center gap-1 text-muted-foreground', className)}\n {...props}\n >\n {keys.map((key, i) => (\n <Fragment key={i}>\n {i > 0 && <span aria-hidden=\"true\">{separator}</span>}\n <Kbd>{key}</Kbd>\n </Fragment>\n ))}\n </span>\n ),\n);\nKeyboardShortcut.displayName = 'KeyboardShortcut';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface DescriptionListItem {\n label: ReactNode;\n value: ReactNode;\n}\n\nexport interface DescriptionListProps extends Omit<ComponentPropsWithoutRef<'dl'>, 'children'> {\n items: DescriptionListItem[];\n /** Layout direction. `inline` renders label/value on the same line; `stacked` puts label above. */\n layout?: 'inline' | 'stacked';\n /** Density between rows. Default `md`. */\n density?: 'sm' | 'md' | 'lg';\n}\n\nconst ROW_GAP: Record<NonNullable<DescriptionListProps['density']>, string> = {\n sm: 'gap-y-1',\n md: 'gap-y-2',\n lg: 'gap-y-3',\n};\n\n/**\n * Semantic `<dl>` for label-value pairs (settings panels, property lists).\n * Inline layout uses a 2-column grid; stacked puts each value below its label.\n */\nexport const DescriptionList = forwardRef<HTMLDListElement, DescriptionListProps>(\n ({ items, layout = 'inline', density = 'md', className, ...props }, ref) => (\n <dl\n ref={ref}\n className={cn(\n 'text-sm',\n layout === 'inline' ? 'grid grid-cols-[max-content_1fr] gap-x-4' : 'flex flex-col gap-1',\n ROW_GAP[density],\n className,\n )}\n {...props}\n >\n {items.map((item, i) => (\n <div key={i} className={cn('contents', layout === 'stacked' && 'flex flex-col gap-0.5')}>\n <dt className=\"text-muted-foreground\">{item.label}</dt>\n <dd className=\"text-foreground\">{item.value}</dd>\n </div>\n ))}\n </dl>\n ),\n);\nDescriptionList.displayName = 'DescriptionList';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface InfoRowProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n label: ReactNode;\n value: ReactNode;\n /** Optional icon rendered before the label. */\n icon?: ReactNode;\n /** Layout: `inline` puts label-value on one line; `stacked` puts value below. Default `inline`. */\n layout?: 'inline' | 'stacked';\n}\n\n/**\n * Single row of label + value, with optional leading icon. Reach for this\n * when you have one or two pairs to show (e.g. inside a Card row); use\n * `DescriptionList` for many pairs.\n */\nexport const InfoRow = forwardRef<HTMLDivElement, InfoRowProps>(\n ({ label, value, icon, layout = 'inline', className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex text-sm',\n layout === 'inline' ? 'items-center justify-between gap-3' : 'flex-col gap-0.5',\n className,\n )}\n {...props}\n >\n <span className=\"inline-flex items-center gap-1.5 text-muted-foreground\">\n {icon}\n {label}\n </span>\n <span className=\"text-foreground\">{value}</span>\n </div>\n ),\n);\nInfoRow.displayName = 'InfoRow';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface BadgeOverlayProps extends ComponentPropsWithoutRef<'div'> {\n /** Element to overlay on (avatar, button, image). */\n children: ReactNode;\n /** Badge content (count, dot, icon). */\n badge: ReactNode;\n /** Position of the badge relative to the wrapper. Default `top-right`. */\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n /** Hide badge when truthy (e.g. when count is 0). */\n hidden?: boolean;\n}\n\nconst POS: Record<NonNullable<BadgeOverlayProps['position']>, string> = {\n 'top-right': 'top-0 right-0 -translate-y-1/2 translate-x-1/2',\n 'top-left': 'top-0 left-0 -translate-y-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-0 right-0 translate-y-1/2 translate-x-1/2',\n 'bottom-left': 'bottom-0 left-0 translate-y-1/2 -translate-x-1/2',\n};\n\n/**\n * Decorator that overlays a badge / dot on top of any child. Use to\n * attach `CountBadge`, `NotificationDot`, or arbitrary `Badge` to an\n * `Avatar`, icon, or `<Button shape=\"square\"/circle\">`.\n */\nexport const BadgeOverlay = forwardRef<HTMLDivElement, BadgeOverlayProps>(\n ({ children, badge, position = 'top-right', hidden, className, ...props }, ref) => (\n <div ref={ref} className={cn('relative inline-flex', className)} {...props}>\n {children}\n {!hidden && (\n <span className={cn('absolute z-raised', POS[position])}>{badge}</span>\n )}\n </div>\n ),\n);\nBadgeOverlay.displayName = 'BadgeOverlay';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { Heading } from '../heading/Heading';\nimport { Text } from '../text/Text';\n\nexport interface SectionHeaderProps extends Omit<ComponentPropsWithoutRef<'header'>, 'title'> {\n /** Heading copy. */\n title: ReactNode;\n /** Optional description below the title. */\n description?: ReactNode;\n /** Right-aligned actions slot — typically Button(s). Cross-domain by design,\n * passed as content. */\n actions?: ReactNode;\n /** Heading element / size. Default level 2, size lg. */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n size?: 'md' | 'lg' | 'xl' | '2xl';\n /** Add a bottom border. Default true. */\n bordered?: boolean;\n}\n\n/**\n * Section / page header — title + optional description + actions row.\n * Wraps `Heading` (semantic) + `Text` (description) + slot for actions.\n */\nexport const SectionHeader = forwardRef<HTMLElement, SectionHeaderProps>(\n (\n { title, description, actions, level = 2, size = 'lg', bordered = true, className, ...props },\n ref,\n ) => (\n <header\n ref={ref}\n className={cn(\n 'flex items-start justify-between gap-4 pb-3',\n bordered && 'border-b border-border',\n className,\n )}\n {...props}\n >\n <div className=\"flex min-w-0 flex-col gap-1\">\n <Heading level={level} size={size}>{title}</Heading>\n {description && <Text size=\"sm\" color=\"muted\">{description}</Text>}\n </div>\n {actions && <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>}\n </header>\n ),\n);\nSectionHeader.displayName = 'SectionHeader';\n","import { Fragment, forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { Mark } from '../mark/Mark';\n\nexport interface HighlightProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {\n /** Source text to render. */\n children: string;\n /** Substring(s) to highlight. Match is case-insensitive. */\n query: string | string[];\n /** When `true`, only highlights whole-word matches. Default `false`. */\n wholeWord?: boolean;\n}\n\nfunction escape(re: string) {\n return re.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Wraps each occurrence of `query` (or any of `query[]`) inside the\n * `children` text in a `<Mark>`. Case-insensitive; pass `wholeWord` to\n * avoid partial matches.\n */\nexport const Highlight = forwardRef<HTMLSpanElement, HighlightProps>(\n ({ children, query, wholeWord, className, ...props }, ref) => {\n const queries = (Array.isArray(query) ? query : [query]).filter(Boolean);\n if (queries.length === 0) return <span ref={ref} className={cn(className)} {...props}>{children}</span>;\n const pattern = queries.map(escape).join('|');\n const regex = new RegExp(wholeWord ? `\\\\b(${pattern})\\\\b` : `(${pattern})`, 'gi');\n const parts = children.split(regex);\n\n const nodes: ReactNode[] = [];\n parts.forEach((part, i) => {\n if (queries.some((q) => part.toLowerCase() === q.toLowerCase())) {\n nodes.push(<Mark key={i}>{part}</Mark>);\n } else if (part) {\n nodes.push(<Fragment key={i}>{part}</Fragment>);\n }\n });\n\n return (\n <span ref={ref} className={cn(className)} {...props}>\n {nodes}\n </span>\n );\n },\n);\nHighlight.displayName = 'Highlight';\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n useMemo,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn, dataAttr } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Slot } from '../../primitives';\n\ninterface CollapsibleContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n contentId: string;\n triggerId: string;\n disabled: boolean;\n}\n\nconst CollapsibleContext = createContext<CollapsibleContextValue | null>(null);\n\nfunction useCollapsibleContext() {\n const ctx = useContext(CollapsibleContext);\n if (!ctx) throw new Error('Collapsible.* must be used inside <Collapsible>');\n return ctx;\n}\n\nexport interface CollapsibleProps extends HTMLAttributes<HTMLDivElement> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n}\n\nexport const Collapsible = forwardRef<HTMLDivElement, CollapsibleProps>(function Collapsible(\n { open: openProp, defaultOpen = false, onOpenChange, disabled = false, className, children, ...rest },\n ref,\n) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const contentId = useId();\n const triggerId = useId();\n\n const ctx = useMemo<CollapsibleContextValue>(\n () => ({ open, setOpen, contentId, triggerId, disabled }),\n [open, setOpen, contentId, triggerId, disabled],\n );\n\n return (\n <CollapsibleContext.Provider value={ctx}>\n <div\n ref={ref}\n data-state={open ? 'open' : 'closed'}\n data-disabled={dataAttr(disabled)}\n className={className}\n {...rest}\n >\n {children}\n </div>\n </CollapsibleContext.Provider>\n );\n});\n\nexport interface CollapsibleTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const CollapsibleTrigger = forwardRef<HTMLButtonElement, CollapsibleTriggerProps>(\n function CollapsibleTrigger({ asChild, onClick, children, ...rest }, ref) {\n const ctx = useCollapsibleContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={ref as never}\n id={ctx.triggerId}\n type=\"button\"\n aria-expanded={ctx.open}\n aria-controls={ctx.contentId}\n data-state={ctx.open ? 'open' : 'closed'}\n data-disabled={dataAttr(ctx.disabled)}\n disabled={ctx.disabled}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented || ctx.disabled) return;\n ctx.setOpen(!ctx.open);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport interface CollapsibleContentProps extends HTMLAttributes<HTMLDivElement> {\n /** Render hidden content but keep it in the DOM (for animations). */\n forceMount?: boolean;\n children: ReactNode;\n}\n\nexport const CollapsibleContent = forwardRef<HTMLDivElement, CollapsibleContentProps>(\n function CollapsibleContent({ forceMount, className, children, ...rest }, ref) {\n const ctx = useCollapsibleContext();\n if (!ctx.open && !forceMount) return null;\n return (\n <div\n ref={ref}\n id={ctx.contentId}\n role=\"region\"\n aria-labelledby={ctx.triggerId}\n data-state={ctx.open ? 'open' : 'closed'}\n hidden={!ctx.open}\n className={cn(\n 'overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\ntype CollapsibleComponent = typeof Collapsible & {\n Trigger: typeof CollapsibleTrigger;\n Content: typeof CollapsibleContent;\n};\n\n(Collapsible as CollapsibleComponent).Trigger = CollapsibleTrigger;\n(Collapsible as CollapsibleComponent).Content = CollapsibleContent;\n\nexport default Collapsible as CollapsibleComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn, dataAttr } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { RovingFocusGroup, useRovingFocusItem } from '../../primitives';\n\ninterface AccordionContextValue {\n isOpen: (value: string) => boolean;\n toggle: (value: string) => void;\n disabled: boolean;\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\n\nfunction useAccordionContext() {\n const ctx = useContext(AccordionContext);\n if (!ctx) throw new Error('Accordion.* must be used inside <Accordion>');\n return ctx;\n}\n\ninterface AccordionItemContextValue {\n value: string;\n open: boolean;\n contentId: string;\n triggerId: string;\n disabled: boolean;\n}\n\nconst AccordionItemContext = createContext<AccordionItemContextValue | null>(null);\n\nfunction useAccordionItemContext() {\n const ctx = useContext(AccordionItemContext);\n if (!ctx) throw new Error('Accordion.Trigger / Content must be used inside <Accordion.Item>');\n return ctx;\n}\n\ntype SingleProps = {\n type?: 'single';\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n collapsible?: boolean;\n};\n\ntype MultipleProps = {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n collapsible?: never;\n};\n\nexport type AccordionProps = HTMLAttributes<HTMLDivElement> &\n (SingleProps | MultipleProps) & {\n disabled?: boolean;\n };\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n props,\n ref,\n) {\n const {\n type = 'single',\n value,\n defaultValue,\n onValueChange,\n collapsible = false,\n disabled = false,\n className,\n children,\n ...rest\n } = props as AccordionProps & {\n type?: 'single' | 'multiple';\n value?: string | string[];\n defaultValue?: string | string[];\n onValueChange?: ((v: string) => void) | ((v: string[]) => void);\n collapsible?: boolean;\n };\n\n const initial = defaultValue ?? (type === 'multiple' ? [] : '');\n const [current, setCurrent] = useControlled<string | string[]>({\n controlled: value,\n default: initial,\n onChange: onValueChange as (v: string | string[]) => void,\n });\n\n const isOpen = useCallback(\n (val: string) => (Array.isArray(current) ? current.includes(val) : current === val),\n [current],\n );\n\n const toggle = useCallback(\n (val: string) => {\n if (type === 'multiple') {\n const arr = Array.isArray(current) ? current : [];\n setCurrent(arr.includes(val) ? arr.filter((v) => v !== val) : [...arr, val]);\n } else {\n if (current === val) {\n if (collapsible) setCurrent('');\n } else {\n setCurrent(val);\n }\n }\n },\n [collapsible, current, setCurrent, type],\n );\n\n const ctx = useMemo<AccordionContextValue>(\n () => ({ isOpen, toggle, disabled }),\n [isOpen, toggle, disabled],\n );\n\n return (\n <AccordionContext.Provider value={ctx}>\n <RovingFocusGroup\n ref={ref as never}\n orientation=\"vertical\"\n loop\n className={cn('flex flex-col', className)}\n {...rest}\n >\n {children}\n </RovingFocusGroup>\n </AccordionContext.Provider>\n );\n});\n\nexport interface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n function AccordionItem({ value, disabled = false, className, children, ...rest }, ref) {\n const accordion = useAccordionContext();\n const open = accordion.isOpen(value);\n const contentId = useId();\n const triggerId = useId();\n const itemDisabled = disabled || accordion.disabled;\n\n const itemCtx = useMemo<AccordionItemContextValue>(\n () => ({ value, open, contentId, triggerId, disabled: itemDisabled }),\n [value, open, contentId, triggerId, itemDisabled],\n );\n\n return (\n <AccordionItemContext.Provider value={itemCtx}>\n <div\n ref={ref}\n data-state={open ? 'open' : 'closed'}\n data-disabled={dataAttr(itemDisabled)}\n className={cn('border-b border-border', className)}\n {...rest}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n },\n);\n\nexport interface AccordionTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n function AccordionTrigger({ className, onClick, children, ...rest }, ref) {\n const accordion = useAccordionContext();\n const item = useAccordionItemContext();\n const roving = useRovingFocusItem();\n return (\n <h3 className=\"flex\">\n <button\n ref={(node) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n id={item.triggerId}\n type=\"button\"\n aria-expanded={item.open}\n aria-controls={item.contentId}\n data-state={item.open ? 'open' : 'closed'}\n data-disabled={dataAttr(item.disabled)}\n disabled={item.disabled}\n tabIndex={roving.tabIndex}\n onFocus={roving.onFocus}\n onKeyDown={roving.onKeyDown}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || item.disabled) return;\n accordion.toggle(item.value);\n }}\n className={cn(\n 'flex w-full items-center justify-between gap-2 px-3 py-3 text-left text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...rest}\n >\n <span className=\"flex-1\">{children}</span>\n <ChevronDown\n className={cn(\n 'h-4 w-4 shrink-0 text-muted-foreground transition-transform',\n item.open && 'rotate-180',\n )}\n />\n </button>\n </h3>\n );\n },\n);\n\nexport interface AccordionContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n function AccordionContent({ className, children, ...rest }, ref) {\n const item = useAccordionItemContext();\n if (!item.open) return null;\n return (\n <div\n ref={ref}\n id={item.contentId}\n role=\"region\"\n aria-labelledby={item.triggerId}\n data-state=\"open\"\n className={cn('overflow-hidden px-3 pb-3 text-sm text-foreground', className)}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\ntype AccordionComponent = typeof Accordion & {\n Item: typeof AccordionItem;\n Trigger: typeof AccordionTrigger;\n Content: typeof AccordionContent;\n};\n\n(Accordion as AccordionComponent).Item = AccordionItem;\n(Accordion as AccordionComponent).Trigger = AccordionTrigger;\n(Accordion as AccordionComponent).Content = AccordionContent;\n\nexport default Accordion as AccordionComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n useMemo,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn, dataAttr } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { RovingFocusGroup, useRovingFocusItem } from '../../primitives';\n\ninterface TabsContextValue {\n value: string;\n setValue: (value: string) => void;\n orientation: 'horizontal' | 'vertical';\n activationMode: 'automatic' | 'manual';\n baseId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabsContext() {\n const ctx = useContext(TabsContext);\n if (!ctx) throw new Error('Tabs.* must be used inside <Tabs>');\n return ctx;\n}\n\nexport interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: 'horizontal' | 'vertical';\n activationMode?: 'automatic' | 'manual';\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n {\n value,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n activationMode = 'automatic',\n className,\n children,\n ...rest\n },\n ref,\n) {\n const [active, setActive] = useControlled<string>({\n controlled: value,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n const baseId = useId();\n\n const ctx = useMemo<TabsContextValue>(\n () => ({ value: active, setValue: setActive, orientation, activationMode, baseId }),\n [active, setActive, orientation, activationMode, baseId],\n );\n\n return (\n <TabsContext.Provider value={ctx}>\n <div\n ref={ref}\n data-orientation={orientation}\n className={cn(\n orientation === 'vertical' ? 'flex gap-2' : 'flex flex-col gap-2',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n});\n\nexport interface TabsListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const TabsList = forwardRef<HTMLDivElement, TabsListProps>(function TabsList(\n { className, children, ...rest },\n ref,\n) {\n const ctx = useTabsContext();\n return (\n <RovingFocusGroup\n ref={ref as never}\n orientation={ctx.orientation}\n loop\n role=\"tablist\"\n aria-orientation={ctx.orientation}\n data-orientation={ctx.orientation}\n className={cn(\n 'inline-flex border-border',\n ctx.orientation === 'vertical' ? 'flex-col border-r' : 'flex-row border-b',\n className,\n )}\n {...rest}\n >\n {children}\n </RovingFocusGroup>\n );\n});\n\nexport interface TabsTabProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {\n value: string;\n disabled?: boolean;\n}\n\nexport const TabsTab = forwardRef<HTMLButtonElement, TabsTabProps>(function TabsTab(\n { value, disabled = false, className, onClick, onFocus, children, ...rest },\n ref,\n) {\n const ctx = useTabsContext();\n const roving = useRovingFocusItem();\n const selected = ctx.value === value;\n const tabId = `${ctx.baseId}-tab-${value}`;\n const panelId = `${ctx.baseId}-panel-${value}`;\n\n return (\n <button\n ref={(node) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n id={tabId}\n role=\"tab\"\n type=\"button\"\n aria-selected={selected}\n aria-controls={panelId}\n data-state={selected ? 'active' : 'inactive'}\n data-disabled={dataAttr(disabled)}\n tabIndex={roving.tabIndex}\n disabled={disabled}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || disabled) return;\n ctx.setValue(value);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n roving.onFocus();\n if (ctx.activationMode === 'automatic' && !disabled) {\n ctx.setValue(value);\n }\n }}\n onKeyDown={roving.onKeyDown}\n className={cn(\n 'inline-flex items-center justify-center gap-2 px-4 py-2 text-sm font-medium text-muted-foreground transition-colors',\n 'hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'data-[state=active]:text-foreground data-[state=active]:border-primary',\n ctx.orientation === 'vertical'\n ? 'border-r-2 border-transparent data-[state=active]:border-primary'\n : 'border-b-2 border-transparent data-[state=active]:border-primary',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...rest}\n >\n {children}\n </button>\n );\n});\n\nexport interface TabsPanelProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n children: ReactNode;\n}\n\nexport const TabsPanel = forwardRef<HTMLDivElement, TabsPanelProps>(function TabsPanel(\n { value, className, children, ...rest },\n ref,\n) {\n const ctx = useTabsContext();\n if (ctx.value !== value) return null;\n const tabId = `${ctx.baseId}-tab-${value}`;\n const panelId = `${ctx.baseId}-panel-${value}`;\n return (\n <div\n ref={ref}\n id={panelId}\n role=\"tabpanel\"\n aria-labelledby={tabId}\n tabIndex={0}\n className={cn(\n 'flex-1 outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n});\n\ntype TabsComponent = typeof Tabs & {\n List: typeof TabsList;\n Tab: typeof TabsTab;\n Panel: typeof TabsPanel;\n};\n\n(Tabs as TabsComponent).List = TabsList;\n(Tabs as TabsComponent).Tab = TabsTab;\n(Tabs as TabsComponent).Panel = TabsPanel;\n\nexport default Tabs as TabsComponent;\n","import { tv, type VariantProps } from '../../utils';\n\nexport const listVariants = tv({\n base: 'list-outside',\n variants: {\n marker: {\n none: 'list-none pl-0',\n disc: 'list-disc pl-5',\n decimal: 'list-decimal pl-5',\n check: 'list-none pl-0',\n },\n spacing: {\n tight: '[&>li]:py-0.5',\n normal: '[&>li]:py-1',\n loose: '[&>li]:py-2',\n },\n },\n defaultVariants: {\n marker: 'none',\n spacing: 'normal',\n },\n});\n\nexport const listItemVariants = tv({\n base: 'flex items-start gap-3 text-sm text-foreground',\n});\n\nexport type ListVariants = VariantProps<typeof listVariants>;\n","import { forwardRef, type HTMLAttributes, type LiHTMLAttributes, type ReactNode } from 'react';\nimport { Check } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { listItemVariants, listVariants, type ListVariants } from './List.variants';\n\nexport interface ListProps\n extends Omit<HTMLAttributes<HTMLUListElement | HTMLOListElement>, 'type'>,\n ListVariants {\n ordered?: boolean;\n children: ReactNode;\n}\n\nexport const List = forwardRef<HTMLUListElement | HTMLOListElement, ListProps>(function List(\n { ordered, marker, spacing, className, children, ...rest },\n ref,\n) {\n const Component = (ordered ? 'ol' : 'ul') as 'ol';\n return (\n <Component\n ref={ref as React.Ref<HTMLOListElement>}\n className={cn(listVariants({ marker, spacing }), className)}\n {...(rest as HTMLAttributes<HTMLOListElement>)}\n >\n {children}\n </Component>\n );\n});\n\nexport interface ListItemProps extends LiHTMLAttributes<HTMLLIElement> {\n /** Leading slot — icon, avatar, marker. */\n leading?: ReactNode;\n /** Trailing slot — badge, chevron, status. */\n trailing?: ReactNode;\n /** Auto-render a check marker if the parent List uses `marker=\"check\"`. */\n showCheckMarker?: boolean;\n children: ReactNode;\n}\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(function ListItem(\n { leading, trailing, showCheckMarker, className, children, ...rest },\n ref,\n) {\n return (\n <li ref={ref} className={cn(listItemVariants(), className)} {...rest}>\n {showCheckMarker && (\n <span aria-hidden=\"true\" className=\"mt-0.5 shrink-0 text-primary\">\n <Check className=\"h-4 w-4\" />\n </span>\n )}\n {leading && (\n <span aria-hidden=\"true\" className=\"mt-0.5 shrink-0 text-muted-foreground\">\n {leading}\n </span>\n )}\n <span className=\"flex-1\">{children}</span>\n {trailing && <span className=\"shrink-0 text-muted-foreground\">{trailing}</span>}\n </li>\n );\n});\n\ntype ListComponent = typeof List & {\n Item: typeof ListItem;\n};\n\n(List as ListComponent).Item = ListItem;\n\nexport default List as ListComponent;\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport type TimelineStatus =\n | 'default'\n | 'primary'\n | 'success'\n | 'warning'\n | 'destructive'\n | 'info';\n\ninterface TimelineContextValue {\n align: 'left' | 'right';\n total: number;\n}\n\nconst TimelineContext = createContext<TimelineContextValue | null>(null);\n\nexport interface TimelineProps extends HTMLAttributes<HTMLOListElement> {\n align?: 'left' | 'right';\n children: ReactNode;\n}\n\nexport const Timeline = forwardRef<HTMLOListElement, TimelineProps>(function Timeline(\n { align = 'left', className, children, ...rest },\n ref,\n) {\n const total = Children.toArray(children).filter(isValidElement).length;\n return (\n <TimelineContext.Provider value={{ align, total }}>\n <ol\n ref={ref}\n className={cn(\n 'flex list-none flex-col',\n align === 'right' && 'items-end',\n className,\n )}\n {...rest}\n >\n {Children.map(children, (child, idx) => {\n if (!isValidElement(child)) return child;\n return (idx === total - 1\n ? // mark the last item so the connector line is suppressed\n { ...(child as ReactElement<{ 'data-last'?: string }>), props: { ...(child.props as Record<string, unknown>), 'data-last': '' } }\n : child) as ReactNode;\n })}\n </ol>\n </TimelineContext.Provider>\n );\n});\n\nconst STATUS_BG: Record<TimelineStatus, string> = {\n default: 'bg-muted text-muted-foreground border-border',\n primary: 'bg-primary text-primary-foreground border-primary',\n success: 'bg-success text-success-foreground border-success',\n warning: 'bg-warning text-warning-foreground border-warning',\n destructive: 'bg-destructive text-destructive-foreground border-destructive',\n info: 'bg-info text-info-foreground border-info',\n};\n\nexport interface TimelineItemProps extends HTMLAttributes<HTMLLIElement> {\n status?: TimelineStatus;\n icon?: ReactNode;\n children: ReactNode;\n}\n\nexport const TimelineItem = forwardRef<HTMLLIElement, TimelineItemProps>(function TimelineItem(\n { status = 'default', icon, className, children, ...rest },\n ref,\n) {\n const ctx = useContext(TimelineContext);\n const isLast = (rest as { 'data-last'?: string })['data-last'] !== undefined;\n\n return (\n <li\n ref={ref}\n data-status={status}\n className={cn('relative flex gap-3 pb-6 last:pb-0', className)}\n {...rest}\n >\n {/* Marker + connector column */}\n <div className=\"relative flex flex-col items-center\">\n <span\n aria-hidden=\"true\"\n className={cn(\n 'relative z-raised grid h-7 w-7 place-items-center rounded-full border-2',\n STATUS_BG[status],\n )}\n >\n {icon ?? <span className=\"h-1.5 w-1.5 rounded-full bg-current\" />}\n </span>\n {!isLast && (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'absolute left-1/2 top-7 h-full w-px -translate-x-1/2 bg-border',\n )}\n />\n )}\n </div>\n {/* Content */}\n <div className={cn('flex-1 pt-0.5', ctx?.align === 'right' && 'order-first text-right')}>\n {children}\n </div>\n </li>\n );\n});\n\nexport interface TimelineTitleProps extends HTMLAttributes<HTMLHeadingElement> {\n children: ReactNode;\n}\n\nexport function TimelineTitle({ className, children, ...rest }: TimelineTitleProps) {\n return (\n <h4 className={cn('text-sm font-medium text-foreground', className)} {...rest}>\n {children}\n </h4>\n );\n}\n\nexport interface TimelineDescriptionProps extends HTMLAttributes<HTMLParagraphElement> {\n children: ReactNode;\n}\n\nexport function TimelineDescription({\n className,\n children,\n ...rest\n}: TimelineDescriptionProps) {\n return (\n <p className={cn('text-xs text-muted-foreground', className)} {...rest}>\n {children}\n </p>\n );\n}\n\ntype TimelineComponent = typeof Timeline & {\n Item: typeof TimelineItem;\n Title: typeof TimelineTitle;\n Description: typeof TimelineDescription;\n};\n\n(Timeline as TimelineComponent).Item = TimelineItem;\n(Timeline as TimelineComponent).Title = TimelineTitle;\n(Timeline as TimelineComponent).Description = TimelineDescription;\n\nexport default Timeline as TimelineComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport { cn, dataAttr } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { RovingFocusGroup, useRovingFocusItem } from '../../primitives';\n\ninterface TreeContextValue {\n selectedValue: string | null;\n setSelectedValue: (value: string) => void;\n expanded: Set<string>;\n toggleExpanded: (value: string) => void;\n}\n\nconst TreeContext = createContext<TreeContextValue | null>(null);\n\nfunction useTreeContext() {\n const ctx = useContext(TreeContext);\n if (!ctx) throw new Error('Tree.* must be used inside <Tree>');\n return ctx;\n}\n\ninterface TreeLevelContextValue {\n level: number;\n}\n\nconst TreeLevelContext = createContext<TreeLevelContextValue>({ level: 1 });\n\nfunction useTreeLevel() {\n return useContext(TreeLevelContext).level;\n}\n\nexport interface TreeProps extends Omit<HTMLAttributes<HTMLUListElement>, 'defaultValue'> {\n selectedValue?: string | null;\n defaultSelectedValue?: string | null;\n onSelectionChange?: (value: string) => void;\n expanded?: string[];\n defaultExpanded?: string[];\n onExpandedChange?: (values: string[]) => void;\n}\n\nexport const Tree = forwardRef<HTMLUListElement, TreeProps>(function Tree(\n {\n selectedValue,\n defaultSelectedValue,\n onSelectionChange,\n expanded,\n defaultExpanded,\n onExpandedChange,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const [selected, setSelected] = useControlled<string | null>({\n controlled: selectedValue,\n default: defaultSelectedValue ?? null,\n onChange: onSelectionChange as ((v: string | null) => void) | undefined,\n });\n const [expandedList, setExpandedList] = useControlled<string[]>({\n controlled: expanded,\n default: defaultExpanded ?? [],\n onChange: onExpandedChange,\n });\n\n const expandedSet = useMemo(() => new Set(expandedList), [expandedList]);\n\n const toggleExpanded = useCallback(\n (value: string) => {\n const next = new Set(expandedSet);\n if (next.has(value)) next.delete(value);\n else next.add(value);\n setExpandedList(Array.from(next));\n },\n [expandedSet, setExpandedList],\n );\n\n const ctx = useMemo<TreeContextValue>(\n () => ({\n selectedValue: selected,\n setSelectedValue: setSelected,\n expanded: expandedSet,\n toggleExpanded,\n }),\n [selected, setSelected, expandedSet, toggleExpanded],\n );\n\n return (\n <TreeContext.Provider value={ctx}>\n <RovingFocusGroup\n ref={ref as never}\n orientation=\"vertical\"\n loop\n role=\"tree\"\n className={cn('flex flex-col text-sm', className)}\n {...(rest as HTMLAttributes<HTMLDivElement>)}\n >\n {children}\n </RovingFocusGroup>\n </TreeContext.Provider>\n );\n});\n\ninterface NodeRowProps {\n level: number;\n selected: boolean;\n expanded?: boolean;\n hasChildren: boolean;\n disabled: boolean;\n onActivate: () => void;\n label: ReactNode;\n}\n\nfunction NodeRow({\n level,\n selected,\n expanded,\n hasChildren,\n disabled,\n onActivate,\n label,\n}: NodeRowProps) {\n const roving = useRovingFocusItem();\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n roving.onKeyDown(e);\n if (e.defaultPrevented || disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onActivate();\n }\n },\n [roving, disabled, onActivate],\n );\n return (\n <div\n ref={roving.ref as never}\n role=\"treeitem\"\n aria-level={level}\n aria-selected={selected || undefined}\n aria-expanded={hasChildren ? expanded : undefined}\n aria-disabled={disabled || undefined}\n data-selected={dataAttr(selected)}\n data-disabled={dataAttr(disabled)}\n tabIndex={roving.tabIndex}\n onFocus={roving.onFocus}\n onKeyDown={handleKeyDown}\n onClick={() => {\n if (!disabled) onActivate();\n }}\n style={{ paddingLeft: `${(level - 1) * 16}px` }}\n className={cn(\n 'flex cursor-pointer items-center gap-1 rounded-sm px-2 py-1 transition-colors',\n 'hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected && 'bg-primary-soft text-primary-soft-foreground',\n disabled && 'pointer-events-none opacity-50',\n )}\n >\n {hasChildren ? (\n <ChevronRight\n className={cn(\n 'h-4 w-4 shrink-0 text-muted-foreground transition-transform',\n expanded && 'rotate-90',\n )}\n />\n ) : (\n <span className=\"w-4 shrink-0\" />\n )}\n <span className=\"flex-1 truncate\">{label}</span>\n </div>\n );\n}\n\nexport interface TreeGroupProps extends HTMLAttributes<HTMLLIElement> {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const TreeGroup = forwardRef<HTMLLIElement, TreeGroupProps>(function TreeGroup(\n { value, label, disabled = false, className, children, ...rest },\n ref,\n) {\n const ctx = useTreeContext();\n const level = useTreeLevel();\n const expanded = ctx.expanded.has(value);\n\n return (\n <li\n ref={ref}\n role=\"presentation\"\n data-state={expanded ? 'open' : 'closed'}\n className={cn('list-none', className)}\n {...rest}\n >\n <NodeRow\n level={level}\n selected={false}\n expanded={expanded}\n hasChildren\n disabled={disabled}\n onActivate={() => ctx.toggleExpanded(value)}\n label={label}\n />\n {expanded && (\n <TreeLevelContext.Provider value={{ level: level + 1 }}>\n <ul role=\"group\" className=\"flex flex-col\">\n {children}\n </ul>\n </TreeLevelContext.Provider>\n )}\n </li>\n );\n});\n\nexport interface TreeItemProps extends HTMLAttributes<HTMLLIElement> {\n value: string;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const TreeItem = forwardRef<HTMLLIElement, TreeItemProps>(function TreeItem(\n { value, disabled = false, className, children, ...rest },\n ref,\n) {\n const ctx = useTreeContext();\n const level = useTreeLevel();\n const selected = ctx.selectedValue === value;\n\n return (\n <li ref={ref} role=\"presentation\" className={cn('list-none', className)} {...rest}>\n <NodeRow\n level={level}\n selected={selected}\n hasChildren={false}\n disabled={disabled}\n onActivate={() => ctx.setSelectedValue(value)}\n label={children}\n />\n </li>\n );\n});\n\ntype TreeComponent = typeof Tree & {\n Group: typeof TreeGroup;\n Item: typeof TreeItem;\n};\n\n(Tree as TreeComponent).Group = TreeGroup;\n(Tree as TreeComponent).Item = TreeItem;\n\nexport default Tree as TreeComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n type HTMLAttributes,\n type ReactNode,\n type TableHTMLAttributes,\n type ThHTMLAttributes,\n type TdHTMLAttributes,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport type TableDensity = 'compact' | 'cozy' | 'comfortable';\n\ninterface TableContextValue {\n striped: boolean;\n hoverable: boolean;\n density: TableDensity;\n}\n\nconst TableContext = createContext<TableContextValue>({\n striped: false,\n hoverable: false,\n density: 'cozy',\n});\n\nconst DENSITY_CELL: Record<TableDensity, string> = {\n compact: 'px-2 py-1.5 text-sm',\n cozy: 'px-3 py-2 text-sm',\n comfortable: 'px-4 py-3 text-sm',\n};\n\nexport interface TableProps extends TableHTMLAttributes<HTMLTableElement> {\n striped?: boolean;\n hoverable?: boolean;\n density?: TableDensity;\n bare?: boolean;\n children: ReactNode;\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n { striped = false, hoverable = false, density = 'cozy', bare = false, className, children, ...rest },\n ref,\n) {\n const ctx = { striped, hoverable, density };\n const tableEl = (\n <table\n ref={ref}\n className={cn('w-full caption-bottom border-collapse text-left', className)}\n {...rest}\n >\n {children}\n </table>\n );\n return (\n <TableContext.Provider value={ctx}>\n {bare ? tableEl : (\n <div className=\"relative w-full overflow-x-auto rounded-md border border-border\">\n {tableEl}\n </div>\n )}\n </TableContext.Provider>\n );\n});\n\nexport const TableHead = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableHead({ className, ...rest }, ref) {\n return (\n <thead\n ref={ref}\n className={cn('border-b border-border bg-muted/50 text-xs font-semibold uppercase tracking-wide text-muted-foreground', className)}\n {...rest}\n />\n );\n },\n);\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableBody({ className, ...rest }, ref) {\n const ctx = useContext(TableContext);\n return (\n <tbody\n ref={ref}\n className={cn(\n ctx.striped && '[&>tr:nth-child(even)]:bg-muted/30',\n ctx.hoverable && '[&>tr:hover]:bg-muted',\n className,\n )}\n {...rest}\n />\n );\n },\n);\n\nexport const TableFooter = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableFooter({ className, ...rest }, ref) {\n return (\n <tfoot\n ref={ref}\n className={cn('border-t border-border bg-muted/50 font-medium', className)}\n {...rest}\n />\n );\n },\n);\n\nexport const TableRow = forwardRef<HTMLTableRowElement, HTMLAttributes<HTMLTableRowElement>>(\n function TableRow({ className, ...rest }, ref) {\n return (\n <tr\n ref={ref}\n className={cn('border-b border-border last:border-0 transition-colors data-[selected]:bg-primary-soft', className)}\n {...rest}\n />\n );\n },\n);\n\nexport interface TableHeaderCellProps extends ThHTMLAttributes<HTMLTableCellElement> {\n children?: ReactNode;\n}\n\nexport const TableHeaderCell = forwardRef<HTMLTableCellElement, TableHeaderCellProps>(\n function TableHeaderCell({ className, ...rest }, ref) {\n const ctx = useContext(TableContext);\n return (\n <th\n ref={ref}\n scope=\"col\"\n className={cn(DENSITY_CELL[ctx.density], 'font-semibold text-foreground', className)}\n {...rest}\n />\n );\n },\n);\n\nexport interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {\n children?: ReactNode;\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { className, ...rest },\n ref,\n) {\n const ctx = useContext(TableContext);\n return (\n <td\n ref={ref}\n className={cn(DENSITY_CELL[ctx.density], 'align-middle', className)}\n {...rest}\n />\n );\n});\n\nexport const TableCaption = forwardRef<\n HTMLTableCaptionElement,\n HTMLAttributes<HTMLTableCaptionElement>\n>(function TableCaption({ className, ...rest }, ref) {\n return (\n <caption\n ref={ref}\n className={cn('mt-2 text-sm text-muted-foreground', className)}\n {...rest}\n />\n );\n});\n\ntype TableComponent = typeof Table & {\n Head: typeof TableHead;\n Body: typeof TableBody;\n Footer: typeof TableFooter;\n Row: typeof TableRow;\n HeaderCell: typeof TableHeaderCell;\n Cell: typeof TableCell;\n Caption: typeof TableCaption;\n};\n\n(Table as TableComponent).Head = TableHead;\n(Table as TableComponent).Body = TableBody;\n(Table as TableComponent).Footer = TableFooter;\n(Table as TableComponent).Row = TableRow;\n(Table as TableComponent).HeaderCell = TableHeaderCell;\n(Table as TableComponent).Cell = TableCell;\n(Table as TableComponent).Caption = TableCaption;\n\nexport default Table as TableComponent;\n","import { useMemo, type ReactNode } from 'react';\nimport { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeaderCell,\n TableRow,\n type TableDensity,\n} from '../table';\n\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface DataTableSort {\n columnKey: string;\n direction: SortDirection;\n}\n\nexport interface DataTableColumn<T> {\n key: string;\n header: ReactNode;\n accessor?: (row: T) => unknown;\n cell?: (row: T, index: number) => ReactNode;\n sortable?: boolean;\n align?: 'left' | 'center' | 'right';\n width?: string;\n}\n\nexport interface DataTableProps<T> {\n columns: DataTableColumn<T>[];\n data: T[];\n rowKey?: (row: T, index: number) => string | number;\n onRowClick?: (row: T, index: number) => void;\n sortBy?: DataTableSort | null;\n defaultSortBy?: DataTableSort | null;\n onSortChange?: (sort: DataTableSort | null) => void;\n striped?: boolean;\n hoverable?: boolean;\n density?: TableDensity;\n bare?: boolean;\n emptyContent?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nfunction defaultCompare(a: unknown, b: unknown): number {\n if (a === b) return 0;\n if (a === null || a === undefined) return 1;\n if (b === null || b === undefined) return -1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n return String(a).localeCompare(String(b));\n}\n\nexport function DataTable<T>({\n columns,\n data,\n rowKey,\n onRowClick,\n sortBy,\n defaultSortBy,\n onSortChange,\n striped,\n hoverable = !!onRowClick,\n density,\n bare,\n emptyContent = 'No results.',\n className,\n 'aria-label': ariaLabel,\n}: DataTableProps<T>) {\n const [sort, setSort] = useControlled<DataTableSort | null>({\n controlled: sortBy,\n default: defaultSortBy ?? null,\n onChange: onSortChange,\n });\n\n const sortedData = useMemo(() => {\n if (!sort) return data;\n const col = columns.find((c) => c.key === sort.columnKey);\n if (!col?.accessor) return data;\n const accessor = col.accessor;\n const sorted = [...data].sort((a, b) => {\n const r = defaultCompare(accessor(a), accessor(b));\n return sort.direction === 'asc' ? r : -r;\n });\n return sorted;\n }, [data, columns, sort]);\n\n const cycleSort = (columnKey: string) => {\n if (!sort || sort.columnKey !== columnKey) {\n setSort({ columnKey, direction: 'asc' });\n } else if (sort.direction === 'asc') {\n setSort({ columnKey, direction: 'desc' });\n } else {\n setSort(null);\n }\n };\n\n const alignClass = (a: DataTableColumn<T>['align']) =>\n a === 'right' ? 'text-right' : a === 'center' ? 'text-center' : 'text-left';\n\n return (\n <Table\n striped={striped}\n hoverable={hoverable}\n density={density}\n bare={bare}\n className={className}\n aria-label={ariaLabel}\n >\n <TableHead>\n <TableRow>\n {columns.map((col) => {\n const isSorted = sort?.columnKey === col.key;\n const ariaSort = isSorted\n ? sort?.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : col.sortable\n ? 'none'\n : undefined;\n return (\n <TableHeaderCell\n key={col.key}\n aria-sort={ariaSort}\n style={col.width ? { width: col.width } : undefined}\n className={alignClass(col.align)}\n >\n {col.sortable ? (\n <button\n type=\"button\"\n onClick={() => cycleSort(col.key)}\n className={cn(\n 'inline-flex items-center gap-1 rounded-sm transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n >\n <span>{col.header}</span>\n {isSorted ? (\n sort?.direction === 'asc' ? (\n <ArrowUp className=\"h-3.5 w-3.5\" />\n ) : (\n <ArrowDown className=\"h-3.5 w-3.5\" />\n )\n ) : (\n <ArrowUpDown className=\"h-3.5 w-3.5 opacity-50\" />\n )}\n </button>\n ) : (\n col.header\n )}\n </TableHeaderCell>\n );\n })}\n </TableRow>\n </TableHead>\n <TableBody>\n {sortedData.length === 0 ? (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"py-8 text-center text-muted-foreground\">\n {emptyContent}\n </TableCell>\n </TableRow>\n ) : (\n sortedData.map((row, rowIndex) => {\n const key = rowKey ? rowKey(row, rowIndex) : rowIndex;\n return (\n <TableRow\n key={key}\n onClick={onRowClick ? () => onRowClick(row, rowIndex) : undefined}\n className={cn(onRowClick && 'cursor-pointer')}\n >\n {columns.map((col) => (\n <TableCell key={col.key} className={alignClass(col.align)}>\n {col.cell\n ? col.cell(row, rowIndex)\n : col.accessor\n ? (col.accessor(row) as ReactNode)\n : null}\n </TableCell>\n ))}\n </TableRow>\n );\n })\n )}\n </TableBody>\n </Table>\n );\n}\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\n\ninterface CarouselContextValue {\n index: number;\n setIndex: (index: number) => void;\n count: number;\n setCount: (count: number) => void;\n loop: boolean;\n prev: () => void;\n next: () => void;\n paused: boolean;\n setPaused: (paused: boolean) => void;\n autoPlay?: number;\n}\n\nconst CarouselContext = createContext<CarouselContextValue | null>(null);\n\nfunction useCarouselContext() {\n const ctx = useContext(CarouselContext);\n if (!ctx) throw new Error('Carousel.* must be used inside <Carousel>');\n return ctx;\n}\n\nexport interface CarouselProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n index?: number;\n defaultIndex?: number;\n onIndexChange?: (index: number) => void;\n loop?: boolean;\n autoPlay?: number;\n /** When set, overrides the automatic count (use for virtualised slides). */\n slidesCount?: number;\n children: ReactNode;\n}\n\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(function Carousel(\n {\n index: indexProp,\n defaultIndex = 0,\n onIndexChange,\n loop = false,\n autoPlay,\n slidesCount,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const [index, setIndexState] = useControlled({\n controlled: indexProp,\n default: defaultIndex,\n onChange: onIndexChange,\n });\n const [count, setCount] = useState(slidesCount ?? 0);\n const [paused, setPaused] = useState(false);\n\n // External override.\n useEffect(() => {\n if (slidesCount != null) setCount(slidesCount);\n }, [slidesCount]);\n\n const setIndex = useCallback(\n (i: number) => {\n if (count === 0) {\n setIndexState(0);\n return;\n }\n let next = i;\n if (loop) {\n next = ((i % count) + count) % count;\n } else {\n next = Math.max(0, Math.min(count - 1, i));\n }\n setIndexState(next);\n },\n [count, loop, setIndexState],\n );\n\n const prev = useCallback(() => setIndex(index - 1), [index, setIndex]);\n const next = useCallback(() => setIndex(index + 1), [index, setIndex]);\n\n // Auto-play.\n useEffect(() => {\n if (!autoPlay || paused || count === 0) return;\n const handle = window.setInterval(() => {\n setIndex(loop ? index + 1 : Math.min(count - 1, index + 1));\n }, autoPlay);\n return () => window.clearInterval(handle);\n }, [autoPlay, paused, count, index, loop, setIndex]);\n\n const ctx = useMemo<CarouselContextValue>(\n () => ({ index, setIndex, count, setCount, loop, prev, next, paused, setPaused, autoPlay }),\n [index, setIndex, count, loop, prev, next, paused, autoPlay],\n );\n\n return (\n <CarouselContext.Provider value={ctx}>\n <div\n ref={ref}\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}\n onFocus={() => setPaused(true)}\n onBlur={() => setPaused(false)}\n className={cn('relative', className)}\n {...rest}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n});\n\nexport interface CarouselViewportProps extends HTMLAttributes<HTMLDivElement> {\n /** Default `'Carousel'`. */\n 'aria-label'?: string;\n}\n\nexport const CarouselViewport = forwardRef<HTMLDivElement, CarouselViewportProps>(\n function CarouselViewport(\n { 'aria-label': ariaLabel = 'Carousel', className, onKeyDown, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useCarouselContext();\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n ctx.prev();\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n ctx.next();\n }\n };\n return (\n <div\n ref={forwardedRef}\n role=\"group\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(\n 'relative overflow-hidden rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nexport interface CarouselSlidesProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const CarouselSlides = forwardRef<HTMLDivElement, CarouselSlidesProps>(\n function CarouselSlides({ className, children, ...rest }, forwardedRef) {\n const ctx = useCarouselContext();\n const childArray = Children.toArray(children).filter(isValidElement);\n\n useEffect(() => {\n ctx.setCount(childArray.length);\n }, [childArray.length, ctx]);\n\n return (\n <div\n ref={forwardedRef}\n aria-live={ctx.autoPlay ? 'off' : 'polite'}\n className={cn('flex transition-transform duration-300 ease-out', className)}\n style={{ transform: `translateX(-${ctx.index * 100}%)` }}\n {...rest}\n >\n {childArray.map((child, idx) => (\n <div\n key={idx}\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`${idx + 1} of ${childArray.length}`}\n aria-hidden={idx !== ctx.index || undefined}\n className=\"w-full shrink-0\"\n >\n {child}\n </div>\n ))}\n </div>\n );\n },\n);\n\nexport type CarouselSlideProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CarouselSlide = forwardRef<HTMLDivElement, CarouselSlideProps>(\n function CarouselSlide({ className, ...rest }, ref) {\n return <div ref={ref} className={cn('h-full w-full', className)} {...rest} />;\n },\n);\n\nexport interface CarouselNavButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Default `'Previous slide'` / `'Next slide'`. */\n 'aria-label'?: string;\n}\n\nexport const CarouselPrev = forwardRef<HTMLButtonElement, CarouselNavButtonProps>(\n function CarouselPrev(\n { 'aria-label': ariaLabel = 'Previous slide', className, onClick, type = 'button', children, ...rest },\n forwardedRef,\n ) {\n const ctx = useCarouselContext();\n const disabled = !ctx.loop && ctx.index === 0;\n return (\n <button\n ref={forwardedRef}\n type={type}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.prev();\n }}\n className={cn(\n 'absolute left-2 top-1/2 inline-flex h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full bg-background/80 text-foreground shadow ring-1 ring-border transition-colors hover:bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-40',\n className,\n )}\n {...rest}\n >\n {children ?? <Icon icon={ChevronLeft} size={16} />}\n </button>\n );\n },\n);\n\nexport const CarouselNext = forwardRef<HTMLButtonElement, CarouselNavButtonProps>(\n function CarouselNext(\n { 'aria-label': ariaLabel = 'Next slide', className, onClick, type = 'button', children, ...rest },\n forwardedRef,\n ) {\n const ctx = useCarouselContext();\n const disabled = !ctx.loop && ctx.index === ctx.count - 1;\n return (\n <button\n ref={forwardedRef}\n type={type}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.next();\n }}\n className={cn(\n 'absolute right-2 top-1/2 inline-flex h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full bg-background/80 text-foreground shadow ring-1 ring-border transition-colors hover:bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-40',\n className,\n )}\n {...rest}\n >\n {children ?? <Icon icon={ChevronRight} size={16} />}\n </button>\n );\n },\n);\n\nexport type CarouselDotsProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CarouselDots = forwardRef<HTMLDivElement, CarouselDotsProps>(\n function CarouselDots({ className, ...rest }, forwardedRef) {\n const ctx = useCarouselContext();\n return (\n <div\n ref={forwardedRef}\n className={cn('mt-3 flex items-center justify-center gap-1.5', className)}\n {...rest}\n >\n {Array.from({ length: ctx.count }, (_, i) => (\n <CarouselDot key={i} slideIndex={i} />\n ))}\n </div>\n );\n },\n);\n\nexport interface CarouselDotProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n slideIndex: number;\n}\n\nexport const CarouselDot = forwardRef<HTMLButtonElement, CarouselDotProps>(\n function CarouselDot({ slideIndex, className, onClick, type = 'button', ...rest }, forwardedRef) {\n const ctx = useCarouselContext();\n const isActive = ctx.index === slideIndex;\n return (\n <button\n ref={forwardedRef}\n type={type}\n aria-label={`Go to slide ${slideIndex + 1}`}\n aria-current={isActive || undefined}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setIndex(slideIndex);\n }}\n className={cn(\n 'h-1.5 rounded-full bg-border transition-all hover:bg-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isActive ? 'w-6 bg-primary hover:bg-primary' : 'w-1.5',\n className,\n )}\n {...rest}\n />\n );\n },\n);\n\ntype CarouselComponent = typeof Carousel & {\n Viewport: typeof CarouselViewport;\n Slides: typeof CarouselSlides;\n Slide: typeof CarouselSlide;\n Prev: typeof CarouselPrev;\n Next: typeof CarouselNext;\n Dots: typeof CarouselDots;\n Dot: typeof CarouselDot;\n};\n\n(Carousel as CarouselComponent).Viewport = CarouselViewport;\n(Carousel as CarouselComponent).Slides = CarouselSlides;\n(Carousel as CarouselComponent).Slide = CarouselSlide;\n(Carousel as CarouselComponent).Prev = CarouselPrev;\n(Carousel as CarouselComponent).Next = CarouselNext;\n(Carousel as CarouselComponent).Dots = CarouselDots;\n(Carousel as CarouselComponent).Dot = CarouselDot;\n\nexport default Carousel as CarouselComponent;\n","import {\n forwardRef,\n useRef,\n useState,\n type HTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface SwipeActionsProps extends HTMLAttributes<HTMLDivElement> {\n left?: ReactNode;\n right?: ReactNode;\n /** px the user must drag before the row snaps open. */\n threshold?: number;\n /** Used to compute snap distance. Width per action button (px). */\n actionWidth?: number;\n disabled?: boolean;\n children: ReactNode;\n}\n\ntype Side = 'left' | 'right' | null;\n\n/**\n * Drag a row left/right to reveal action slots. Pointer-event based — works\n * with touch and mouse. Tap the row body while open to close.\n */\nexport const SwipeActions = forwardRef<HTMLDivElement, SwipeActionsProps>(\n function SwipeActions(\n {\n left,\n right,\n threshold = 60,\n actionWidth = 72,\n disabled,\n className,\n children,\n ...rest\n },\n forwardedRef,\n ) {\n const startXRef = useRef<number | null>(null);\n const startOffsetRef = useRef(0);\n const [offset, setOffset] = useState(0);\n const [openSide, setOpenSide] = useState<Side>(null);\n\n const leftSlots = countNodes(left);\n const rightSlots = countNodes(right);\n const leftMax = leftSlots * actionWidth;\n const rightMax = rightSlots * actionWidth;\n\n const onPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n startXRef.current = e.clientX;\n startOffsetRef.current = offset;\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n };\n\n const onPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled || startXRef.current == null) return;\n const dx = e.clientX - startXRef.current + startOffsetRef.current;\n const clamped = Math.max(-rightMax, Math.min(leftMax, dx));\n setOffset(clamped);\n };\n\n const onPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (startXRef.current == null) return;\n startXRef.current = null;\n (e.currentTarget as HTMLDivElement).releasePointerCapture?.(e.pointerId);\n // Snap.\n if (offset > threshold && leftMax > 0) {\n setOffset(leftMax);\n setOpenSide('left');\n } else if (offset < -threshold && rightMax > 0) {\n setOffset(-rightMax);\n setOpenSide('right');\n } else {\n setOffset(0);\n setOpenSide(null);\n }\n };\n\n const close = () => {\n setOffset(0);\n setOpenSide(null);\n };\n\n return (\n <div\n ref={forwardedRef}\n className={cn(\n 'relative overflow-hidden bg-card text-card-foreground',\n className,\n )}\n {...rest}\n >\n {left && (\n <div\n className=\"absolute inset-y-0 left-0 flex\"\n style={{ width: leftMax }}\n aria-hidden={openSide !== 'left'}\n >\n {left}\n </div>\n )}\n {right && (\n <div\n className=\"absolute inset-y-0 right-0 flex\"\n style={{ width: rightMax }}\n aria-hidden={openSide !== 'right'}\n >\n {right}\n </div>\n )}\n <div\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n onClick={openSide ? close : undefined}\n style={{\n transform: `translateX(${offset}px)`,\n transition: startXRef.current == null ? 'transform 200ms ease-out' : 'none',\n touchAction: 'pan-y',\n }}\n className=\"relative bg-card\"\n >\n {children}\n </div>\n </div>\n );\n },\n);\n\nfunction countNodes(node: ReactNode): number {\n if (!node) return 0;\n if (Array.isArray(node)) return node.length;\n return 1;\n}\n","import { forwardRef, useMemo, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport type DiffView = 'split' | 'unified';\n\ntype DiffOp = 'unchanged' | 'added' | 'removed';\n\ninterface DiffRow {\n op: DiffOp;\n leftNum: number | null;\n rightNum: number | null;\n text: string;\n}\n\nexport interface DiffViewerProps extends HTMLAttributes<HTMLDivElement> {\n left: string;\n right: string;\n view?: DiffView;\n leftLabel?: ReactNode;\n rightLabel?: ReactNode;\n showStats?: boolean;\n}\n\n/**\n * Line-level diff viewer (split / unified). Own LCS implementation; no\n * external diff dep. For intra-line word highlighting, install `diff` and\n * post-process — deferred.\n */\nexport const DiffViewer = forwardRef<HTMLDivElement, DiffViewerProps>(function DiffViewer(\n { left, right, view = 'split', leftLabel = 'Before', rightLabel = 'After', showStats = true, className, ...rest },\n ref,\n) {\n const rows = useMemo(() => computeDiff(left, right), [left, right]);\n const stats = useMemo(() => {\n let added = 0;\n let removed = 0;\n for (const r of rows) {\n if (r.op === 'added') added += 1;\n if (r.op === 'removed') removed += 1;\n }\n return { added, removed };\n }, [rows]);\n\n return (\n <div\n ref={ref}\n className={cn(\n 'overflow-hidden rounded-md border border-border bg-card font-mono text-xs text-card-foreground shadow-sm',\n className,\n )}\n {...rest}\n >\n {showStats && (\n <div className=\"flex items-center justify-between border-b border-border bg-muted/40 px-3 py-1.5 text-xs\">\n <div className=\"text-muted-foreground\">{leftLabel} → {rightLabel}</div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-success font-medium\">+{stats.added}</span>\n <span className=\"text-destructive font-medium\">−{stats.removed}</span>\n </div>\n </div>\n )}\n {view === 'split' ? <SplitView rows={rows} /> : <UnifiedView rows={rows} />}\n </div>\n );\n});\n\nfunction SplitView({ rows }: { rows: DiffRow[] }) {\n // Pair removed/added rows row-by-row when possible to align them.\n // Simple alignment: walk, when we hit \"removed\" followed by \"added\", pair them.\n const pairs: Array<{ left?: DiffRow; right?: DiffRow }> = [];\n for (let i = 0; i < rows.length; i++) {\n const r = rows[i]!;\n if (r.op === 'unchanged') {\n pairs.push({ left: r, right: r });\n } else if (r.op === 'removed') {\n const next = rows[i + 1];\n if (next && next.op === 'added') {\n pairs.push({ left: r, right: next });\n i++;\n } else {\n pairs.push({ left: r });\n }\n } else if (r.op === 'added') {\n pairs.push({ right: r });\n }\n }\n\n return (\n <div className=\"grid grid-cols-2 divide-x divide-border\">\n <DiffColumn rows={pairs.map((p) => p.left)} />\n <DiffColumn rows={pairs.map((p) => p.right)} side=\"right\" />\n </div>\n );\n}\n\nfunction DiffColumn({ rows, side = 'left' }: { rows: Array<DiffRow | undefined>; side?: 'left' | 'right' }) {\n return (\n <div className=\"overflow-x-auto\">\n {rows.map((r, i) => {\n if (!r) {\n return (\n <div key={i} className=\"flex bg-muted/30\">\n <span className=\"select-none w-10 shrink-0 px-2 py-0.5 text-right text-muted-foreground\">·</span>\n <span className=\"flex-1 whitespace-pre px-2 py-0.5\"> </span>\n </div>\n );\n }\n const num = side === 'left' ? r.leftNum : r.rightNum;\n const isChanged =\n (side === 'left' && r.op === 'removed') || (side === 'right' && r.op === 'added');\n return (\n <div\n key={i}\n data-state={r.op}\n className={cn(\n 'flex',\n isChanged && side === 'left' && 'bg-destructive-soft',\n isChanged && side === 'right' && 'bg-success-soft',\n )}\n >\n <span className=\"select-none w-10 shrink-0 border-r border-border px-2 py-0.5 text-right text-muted-foreground tabular-nums\">\n {num ?? ''}\n </span>\n <span className=\"flex-1 whitespace-pre px-2 py-0.5\">{r.text || ' '}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction UnifiedView({ rows }: { rows: DiffRow[] }) {\n return (\n <div className=\"overflow-x-auto\">\n {rows.map((r, i) => (\n <div\n key={i}\n data-state={r.op}\n className={cn(\n 'flex',\n r.op === 'added' && 'bg-success-soft',\n r.op === 'removed' && 'bg-destructive-soft',\n )}\n >\n <span className=\"select-none w-10 shrink-0 border-r border-border px-2 py-0.5 text-right text-muted-foreground tabular-nums\">\n {r.leftNum ?? ''}\n </span>\n <span className=\"select-none w-10 shrink-0 border-r border-border px-2 py-0.5 text-right text-muted-foreground tabular-nums\">\n {r.rightNum ?? ''}\n </span>\n <span className=\"w-5 shrink-0 px-1 py-0.5 text-center text-muted-foreground\">\n {r.op === 'added' ? '+' : r.op === 'removed' ? '−' : ' '}\n </span>\n <span className=\"flex-1 whitespace-pre px-2 py-0.5\">{r.text || ' '}</span>\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * LCS-based line diff. Returns ordered rows with `unchanged` / `added` /\n * `removed` operations. O(n×m) time + space.\n */\nfunction computeDiff(left: string, right: string): DiffRow[] {\n const a = left.split('\\n');\n const b = right.split('\\n');\n const n = a.length;\n const m = b.length;\n\n // LCS table: dp[i][j] = LCS length of a[0..i] and b[0..j].\n const dp: number[][] = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));\n for (let i = 1; i <= n; i++) {\n for (let j = 1; j <= m; j++) {\n if (a[i - 1] === b[j - 1]) dp[i]![j] = dp[i - 1]![j - 1]! + 1;\n else dp[i]![j] = Math.max(dp[i - 1]![j]!, dp[i]![j - 1]!);\n }\n }\n\n // Backtrack.\n const rows: DiffRow[] = [];\n let i = n;\n let j = m;\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && a[i - 1] === b[j - 1]) {\n rows.push({ op: 'unchanged', leftNum: i, rightNum: j, text: a[i - 1]! });\n i--;\n j--;\n } else if (j > 0 && (i === 0 || dp[i]![j - 1]! >= dp[i - 1]![j]!)) {\n rows.push({ op: 'added', leftNum: null, rightNum: j, text: b[j - 1]! });\n j--;\n } else if (i > 0) {\n rows.push({ op: 'removed', leftNum: i, rightNum: null, text: a[i - 1]! });\n i--;\n } else {\n break;\n }\n }\n rows.reverse();\n return rows;\n}\n","import { forwardRef, useId, useMemo, type SVGAttributes } from 'react';\nimport { cn } from '../../utils';\n\nexport type SparklineVariant = 'line' | 'area' | 'bar' | 'dot';\nexport type SparklineTone = 'brand' | 'success' | 'warning' | 'danger' | 'muted' | 'current';\n\nexport interface SparklineProps extends Omit<SVGAttributes<SVGSVGElement>, 'width' | 'height'> {\n data: number[];\n variant?: SparklineVariant;\n width?: number;\n height?: number;\n tone?: SparklineTone;\n min?: number;\n max?: number;\n showLast?: boolean;\n /** Accessible label summarizing the trend. */\n ariaLabel?: string;\n}\n\nconst TONE_CLASS: Record<SparklineTone, string> = {\n brand: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-destructive',\n muted: 'text-muted-foreground',\n current: '',\n};\n\n/**\n * Inline trend chart — line / area / bar / dot. SVG, no scales/axes/legend.\n * Color via Tailwind tokens (`text-*`); pair with `currentColor` for parent\n * inheritance.\n */\nexport const Sparkline = forwardRef<SVGSVGElement, SparklineProps>(function Sparkline(\n {\n data,\n variant = 'line',\n width = 120,\n height = 32,\n tone = 'brand',\n min: minProp,\n max: maxProp,\n showLast,\n ariaLabel = 'Trend',\n className,\n ...rest\n },\n ref,\n) {\n const titleId = useId();\n const { points, barWidth, lastX, lastY, areaPath, linePath } = useMemo(() => {\n if (data.length === 0) {\n return { points: [], barWidth: 0, lastX: 0, lastY: 0, areaPath: '', linePath: '' };\n }\n const min = minProp ?? Math.min(...data);\n const max = maxProp ?? Math.max(...data);\n const range = max - min || 1;\n const stepX = data.length === 1 ? 0 : width / (data.length - 1);\n const pad = 1; // keep stroke inside the box\n const pointsArr = data.map((v, i) => {\n const x = i * stepX;\n const y = height - ((v - min) / range) * (height - pad * 2) - pad;\n return [x, y] as const;\n });\n const lp = pointsArr.map(([x, y], i) => (i === 0 ? `M${x},${y}` : `L${x},${y}`)).join(' ');\n const ap = `${lp} L${pointsArr[pointsArr.length - 1]![0]},${height} L${pointsArr[0]![0]},${height} Z`;\n const bw = data.length > 0 ? width / data.length - 1 : 0;\n const last = pointsArr[pointsArr.length - 1]!;\n return { points: pointsArr, barWidth: bw, lastX: last[0], lastY: last[1], areaPath: ap, linePath: lp };\n }, [data, height, width, minProp, maxProp]);\n\n return (\n <svg\n ref={ref}\n role=\"img\"\n aria-labelledby={titleId}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n className={cn('inline-block overflow-visible', TONE_CLASS[tone], className)}\n {...rest}\n >\n <title id={titleId}>{ariaLabel}</title>\n {variant === 'area' && (\n <>\n <path d={areaPath} fill=\"currentColor\" fillOpacity={0.15} />\n <path d={linePath} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </>\n )}\n {variant === 'line' && (\n <path d={linePath} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n )}\n {variant === 'bar' && (\n <g>\n {points.map(([x, y], i) => (\n <rect\n key={i}\n x={x - barWidth / 2}\n y={y}\n width={Math.max(1, barWidth)}\n height={height - y}\n fill=\"currentColor\"\n rx={1}\n />\n ))}\n </g>\n )}\n {variant === 'dot' && (\n <g>\n {points.map(([x, y], i) => (\n <circle key={i} cx={x} cy={y} r={1.5} fill=\"currentColor\" />\n ))}\n </g>\n )}\n {showLast && data.length > 0 && variant !== 'dot' && (\n <circle cx={lastX} cy={lastY} r={2.5} fill=\"currentColor\" />\n )}\n </svg>\n );\n});\n","import { forwardRef, useMemo, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\n\nexport type HeatmapCalendarTone = 'brand' | 'success' | 'warning' | 'danger' | 'muted';\n\nconst TONE_CLASSES: Record<HeatmapCalendarTone, string[]> = {\n brand: ['bg-muted/50', 'bg-primary/20', 'bg-primary/40', 'bg-primary/70', 'bg-primary'],\n success: ['bg-muted/50', 'bg-success/20', 'bg-success/40', 'bg-success/70', 'bg-success'],\n warning: ['bg-muted/50', 'bg-warning/20', 'bg-warning/40', 'bg-warning/70', 'bg-warning'],\n danger: ['bg-muted/50', 'bg-destructive/20', 'bg-destructive/40', 'bg-destructive/70', 'bg-destructive'],\n muted: ['bg-muted/30', 'bg-muted', 'bg-muted-foreground/30', 'bg-muted-foreground/60', 'bg-muted-foreground'],\n};\n\nexport interface HeatmapCalendarProps extends HTMLAttributes<HTMLDivElement> {\n values: Record<string, number> | Map<string, number>;\n year?: number;\n weekStart?: 0 | 1;\n cellSize?: number;\n gap?: number;\n levels?: number;\n tone?: HeatmapCalendarTone;\n onCellClick?: (date: string, value: number) => void;\n monthLabels?: string[];\n weekdayLabels?: string[];\n showLegend?: boolean;\n}\n\nconst DEFAULT_MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst DEFAULT_WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\nfunction formatDate(d: Date): string {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${y}-${m}-${day}`;\n}\n\n/**\n * Year-long heatmap. 53 columns (weeks) × 7 rows (weekdays). Per-cell color\n * intensity from `values[YYYY-MM-DD]`, bucketed into `levels` steps.\n */\nexport const HeatmapCalendar = forwardRef<HTMLDivElement, HeatmapCalendarProps>(\n function HeatmapCalendar(\n {\n values,\n year = new Date().getFullYear(),\n weekStart = 0,\n cellSize = 12,\n gap = 2,\n levels = 5,\n tone = 'brand',\n onCellClick,\n monthLabels = DEFAULT_MONTHS,\n weekdayLabels = DEFAULT_WEEKDAYS,\n showLegend = true,\n className,\n ...rest\n },\n ref,\n ) {\n const valueMap = useMemo(() => {\n if (values instanceof Map) return values;\n return new Map(Object.entries(values));\n }, [values]);\n\n const { columns, monthMarkers, maxValue } = useMemo(() => {\n const start = new Date(year, 0, 1);\n const end = new Date(year, 11, 31);\n // Walk back to first weekStart day before/at year start.\n const cur = new Date(start);\n const wd = cur.getDay();\n const offset = (wd - weekStart + 7) % 7;\n cur.setDate(cur.getDate() - offset);\n\n const cols: Array<Array<{ date: Date; inYear: boolean; value: number }>> = [];\n let column: Array<{ date: Date; inYear: boolean; value: number }> = [];\n const months: Array<{ month: number; col: number }> = [];\n let lastSeenMonth = -1;\n let max = 0;\n\n while (cur <= end || column.length > 0) {\n const inYear = cur.getFullYear() === year;\n const key = formatDate(cur);\n const v = valueMap.get(key) ?? 0;\n if (v > max) max = v;\n column.push({ date: new Date(cur), inYear, value: v });\n\n if (inYear && cur.getMonth() !== lastSeenMonth) {\n lastSeenMonth = cur.getMonth();\n months.push({ month: cur.getMonth(), col: cols.length });\n }\n\n if (column.length === 7) {\n cols.push(column);\n column = [];\n }\n cur.setDate(cur.getDate() + 1);\n if (cur > end && column.length === 0) break;\n }\n if (column.length > 0) cols.push(column);\n return { columns: cols, monthMarkers: months, maxValue: max };\n }, [year, weekStart, valueMap]);\n\n const toneSteps = TONE_CLASSES[tone];\n const bucket = (v: number): number => {\n if (v <= 0 || maxValue === 0) return 0;\n const idx = Math.ceil((v / maxValue) * (levels - 1));\n return Math.min(levels - 1, idx);\n };\n\n const totalWidth = columns.length * (cellSize + gap);\n const colHeight = 7 * (cellSize + gap);\n\n // Order weekdays starting from weekStart.\n const weekdayOrder = Array.from({ length: 7 }, (_, i) => weekdayLabels[(i + weekStart) % 7]!);\n\n return (\n <div ref={ref} className={cn('inline-block', className)} {...rest}>\n {/* Month labels */}\n <div className=\"relative ml-8\" style={{ height: cellSize, width: totalWidth }}>\n {monthMarkers.map(({ month, col }) => (\n <span\n key={month}\n className=\"absolute text-[10px] uppercase text-muted-foreground\"\n style={{ left: col * (cellSize + gap) }}\n >\n {monthLabels[month]}\n </span>\n ))}\n </div>\n <div className=\"flex\" style={{ gap }}>\n {/* Weekday labels — show every other to avoid clutter. */}\n <div\n className=\"flex flex-col text-[10px] uppercase text-muted-foreground\"\n style={{ width: 28, gap, height: colHeight }}\n >\n {weekdayOrder.map((wd, i) => (\n <span\n key={i}\n className={i % 2 === 0 ? 'opacity-0' : ''}\n style={{ height: cellSize, lineHeight: `${cellSize}px` }}\n >\n {wd}\n </span>\n ))}\n </div>\n {/* Grid */}\n <div className=\"flex\" style={{ gap }}>\n {columns.map((col, colIdx) => (\n <div key={colIdx} className=\"flex flex-col\" style={{ gap }}>\n {col.map((cell, rowIdx) => {\n const dateStr = formatDate(cell.date);\n const level = bucket(cell.value);\n const interactive = cell.inYear && onCellClick != null;\n const Tag: 'button' | 'div' = interactive ? 'button' : 'div';\n return (\n <Tag\n key={rowIdx}\n type={interactive ? 'button' : undefined}\n aria-label={`${dateStr}: ${cell.value}`}\n aria-valuenow={level}\n aria-valuemin={0}\n aria-valuemax={levels - 1}\n onClick={interactive ? () => onCellClick?.(dateStr, cell.value) : undefined}\n style={{ width: cellSize, height: cellSize }}\n className={cn(\n 'rounded-[2px] transition-colors',\n cell.inYear ? toneSteps[level] : 'bg-transparent',\n interactive && 'cursor-pointer hover:ring-1 hover:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n />\n );\n })}\n </div>\n ))}\n </div>\n </div>\n {showLegend && (\n <div className=\"mt-2 flex items-center justify-end gap-1.5 text-[10px] text-muted-foreground\">\n <span>Less</span>\n {toneSteps.map((cls, i) => (\n <span\n key={i}\n aria-hidden=\"true\"\n style={{ width: cellSize, height: cellSize }}\n className={cn('rounded-[2px]', cls)}\n />\n ))}\n <span>More</span>\n </div>\n )}\n </div>\n );\n },\n);\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport type DataGridCellType = 'text' | 'number' | 'select' | 'boolean';\n\nexport interface DataGridColumn<T> {\n key: string;\n header: ReactNode;\n /** Returns the cell's underlying value. */\n accessor: (row: T) => unknown;\n /** Optional custom cell renderer for read mode. */\n cell?: (row: T) => ReactNode;\n type?: DataGridCellType;\n options?: Array<{ value: string | number; label: ReactNode }>;\n editable?: boolean;\n width?: string;\n align?: 'left' | 'right' | 'center';\n}\n\nexport interface DataGridProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n columns: DataGridColumn<T>[];\n rows: T[];\n rowKey: (row: T) => string;\n onRowChange?: (row: T, colKey: string, value: unknown) => void;\n dense?: boolean;\n}\n\ninterface CellPos {\n row: number;\n col: number;\n}\n\nfunction castValue(raw: string, type: DataGridCellType): unknown {\n if (type === 'number') {\n const n = Number(raw);\n return Number.isFinite(n) ? n : raw;\n }\n if (type === 'boolean') return raw === 'true';\n return raw;\n}\n\n/**\n * First-generation editable DataGrid. Keyboard nav between cells; click /\n * Enter / F2 enter edit; Escape reverts. Range select, fill, paste TSV are\n * deferred — log them in a follow-up batch.\n */\nexport const DataGrid = forwardRef<HTMLDivElement, DataGridProps<unknown>>(\n function DataGrid(\n { columns, rows, rowKey, onRowChange, dense, className, ...rest },\n ref,\n ) {\n const [active, setActive] = useState<CellPos>({ row: 0, col: 0 });\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState('');\n const containerRef = useRef<HTMLDivElement | null>(null);\n const editRef = useRef<HTMLInputElement | HTMLSelectElement | null>(null);\n\n useEffect(() => {\n if (editing && editRef.current) {\n editRef.current.focus();\n if ('select' in editRef.current && typeof editRef.current.select === 'function') {\n editRef.current.select();\n }\n }\n }, [editing]);\n\n const colCount = columns.length;\n const rowCount = rows.length;\n\n const beginEdit = useCallback(() => {\n const col = columns[active.col];\n const row = rows[active.row];\n if (!col || row === undefined) return;\n if (col.editable === false) return;\n const raw = col.accessor(row);\n setDraft(raw == null ? '' : String(raw));\n setEditing(true);\n }, [columns, rows, active]);\n\n const commitEdit = useCallback(\n (move?: 'right' | 'down') => {\n const col = columns[active.col];\n const row = rows[active.row];\n if (!col || row === undefined) {\n setEditing(false);\n return;\n }\n const value = castValue(draft, col.type ?? 'text');\n onRowChange?.(row, col.key, value);\n setEditing(false);\n if (move === 'right') setActive((a) => ({ row: a.row, col: Math.min(colCount - 1, a.col + 1) }));\n if (move === 'down') setActive((a) => ({ row: Math.min(rowCount - 1, a.row + 1), col: a.col }));\n },\n [columns, rows, active, draft, onRowChange, colCount, rowCount],\n );\n\n const cancelEdit = useCallback(() => {\n setEditing(false);\n }, []);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (editing) {\n if (e.key === 'Enter') {\n e.preventDefault();\n commitEdit('down');\n } else if (e.key === 'Tab') {\n e.preventDefault();\n commitEdit('right');\n } else if (e.key === 'Escape') {\n e.preventDefault();\n cancelEdit();\n }\n return;\n }\n switch (e.key) {\n case 'ArrowRight':\n e.preventDefault();\n setActive((a) => ({ row: a.row, col: Math.min(colCount - 1, a.col + 1) }));\n break;\n case 'ArrowLeft':\n e.preventDefault();\n setActive((a) => ({ row: a.row, col: Math.max(0, a.col - 1) }));\n break;\n case 'ArrowDown':\n e.preventDefault();\n setActive((a) => ({ row: Math.min(rowCount - 1, a.row + 1), col: a.col }));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setActive((a) => ({ row: Math.max(0, a.row - 1), col: a.col }));\n break;\n case 'Home':\n e.preventDefault();\n setActive((a) => ({ row: a.row, col: 0 }));\n break;\n case 'End':\n e.preventDefault();\n setActive((a) => ({ row: a.row, col: colCount - 1 }));\n break;\n case 'Enter':\n case 'F2':\n e.preventDefault();\n beginEdit();\n break;\n }\n };\n\n const cellPad = dense ? 'px-2 py-1' : 'px-3 py-2';\n\n return (\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }}\n role=\"grid\"\n aria-rowcount={rowCount + 1}\n aria-colcount={colCount}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(\n 'overflow-auto rounded-md border border-border bg-card text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n <table className=\"w-full border-collapse\">\n <thead role=\"rowgroup\">\n <tr role=\"row\" aria-rowindex={1} className=\"bg-muted/40\">\n {columns.map((col, ci) => (\n <th\n key={col.key}\n role=\"columnheader\"\n aria-colindex={ci + 1}\n scope=\"col\"\n style={{ width: col.width, textAlign: col.align ?? 'left' }}\n className={cn(\n 'border-b border-border font-medium text-muted-foreground',\n cellPad,\n )}\n >\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody role=\"rowgroup\">\n {rows.map((row, ri) => (\n <tr key={rowKey(row)} role=\"row\" aria-rowindex={ri + 2} className=\"border-b border-border last:border-b-0\">\n {columns.map((col, ci) => {\n const isActive = active.row === ri && active.col === ci;\n const value = col.accessor(row);\n const isEditable = col.editable !== false;\n const isEditing = editing && isActive;\n return (\n <td\n key={col.key}\n role=\"gridcell\"\n aria-colindex={ci + 1}\n aria-readonly={!isEditable || undefined}\n aria-selected={isActive || undefined}\n tabIndex={isActive ? 0 : -1}\n onClick={() => {\n setActive({ row: ri, col: ci });\n if (isEditable && !isEditing) {\n // Defer beginEdit to next render so active is set.\n requestAnimationFrame(() => {\n const c = columns[ci];\n if (!c) return;\n const r = rows[ri];\n if (r === undefined) return;\n const raw = c.accessor(r);\n setDraft(raw == null ? '' : String(raw));\n setEditing(true);\n });\n }\n }}\n style={{ textAlign: col.align ?? 'left' }}\n className={cn(\n 'relative cursor-cell whitespace-nowrap',\n cellPad,\n isActive && 'bg-primary-soft/40 ring-2 ring-inset ring-primary',\n !isEditable && 'cursor-default',\n )}\n >\n {isEditing ? (\n <CellEditor\n ref={editRef as React.MutableRefObject<HTMLInputElement | HTMLSelectElement | null>}\n col={col}\n value={draft}\n onChange={setDraft}\n onCommit={commitEdit}\n onCancel={cancelEdit}\n />\n ) : col.cell ? (\n col.cell(row)\n ) : col.type === 'boolean' ? (\n <span className=\"tabular-nums\">{value ? '✓' : '·'}</span>\n ) : (\n <span className=\"tabular-nums\">{String(value ?? '')}</span>\n )}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n },\n) as <T>(props: DataGridProps<T> & { ref?: React.Ref<HTMLDivElement> }) => React.ReactElement;\n\ninterface CellEditorProps {\n col: DataGridColumn<unknown>;\n value: string;\n onChange: (v: string) => void;\n onCommit: (move?: 'right' | 'down') => void;\n onCancel: () => void;\n}\n\nconst CellEditor = forwardRef<HTMLInputElement | HTMLSelectElement, CellEditorProps>(\n function CellEditor({ col, value, onChange, onCommit, onCancel }, ref) {\n const baseClass = 'h-7 w-full rounded-sm border border-input bg-background px-2 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring';\n if (col.type === 'select' && col.options) {\n return (\n <select\n ref={ref as React.Ref<HTMLSelectElement>}\n value={value}\n onChange={(e) => {\n onChange(e.target.value);\n onCommit('down');\n }}\n onBlur={() => onCommit()}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n onCancel();\n }\n }}\n className={baseClass}\n >\n {col.options.map((opt) => (\n <option key={String(opt.value)} value={String(opt.value)}>\n {String(opt.label)}\n </option>\n ))}\n </select>\n );\n }\n if (col.type === 'boolean') {\n return (\n <select\n ref={ref as React.Ref<HTMLSelectElement>}\n value={value}\n onChange={(e) => {\n onChange(e.target.value);\n onCommit('down');\n }}\n onBlur={() => onCommit()}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n onCancel();\n }\n }}\n className={baseClass}\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n );\n }\n return (\n <input\n ref={ref as React.Ref<HTMLInputElement>}\n type={col.type === 'number' ? 'number' : 'text'}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={() => onCommit()}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n onCancel();\n }\n }}\n className={baseClass}\n />\n );\n },\n);\n","import {\n forwardRef,\n useCallback,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport { Maximize, Minus, Plus } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport interface NodeEditorNode {\n id: string;\n x: number;\n y: number;\n data?: Record<string, unknown>;\n label?: ReactNode;\n}\n\nexport interface NodeEditorEdge {\n id: string;\n source: string;\n target: string;\n label?: ReactNode;\n}\n\nexport interface NodeEditorProps extends HTMLAttributes<HTMLDivElement> {\n nodes: NodeEditorNode[];\n edges?: NodeEditorEdge[];\n onNodesChange?: (nodes: NodeEditorNode[]) => void;\n onEdgeClick?: (edge: NodeEditorEdge) => void;\n renderNode?: (node: NodeEditorNode) => ReactNode;\n nodeWidth?: number;\n nodeHeight?: number;\n minZoom?: number;\n maxZoom?: number;\n}\n\ninterface Viewport {\n x: number;\n y: number;\n zoom: number;\n}\n\n/**\n * First-generation node graph editor. Drag nodes to reposition; pan the\n * viewport on background drag; wheel-zoom. Drag-to-connect ports + minimap\n * + auto-layout deferred.\n */\nexport const NodeEditor = forwardRef<HTMLDivElement, NodeEditorProps>(function NodeEditor(\n {\n nodes,\n edges = [],\n onNodesChange,\n onEdgeClick,\n renderNode,\n nodeWidth = 160,\n nodeHeight = 60,\n minZoom = 0.25,\n maxZoom = 2,\n className,\n ...rest\n },\n ref,\n) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [viewport, setViewport] = useState<Viewport>({ x: 0, y: 0, zoom: 1 });\n const dragStateRef = useRef<\n | { kind: 'pan'; startX: number; startY: number; viewportX: number; viewportY: number }\n | { kind: 'node'; nodeId: string; startX: number; startY: number; nodeStartX: number; nodeStartY: number }\n | null\n >(null);\n\n const nodeIndex = useMemo(() => new Map(nodes.map((n) => [n.id, n])), [nodes]);\n\n const onContainerPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (e.button !== 0) return;\n if ((e.target as HTMLElement).closest('[data-node]')) return;\n dragStateRef.current = {\n kind: 'pan',\n startX: e.clientX,\n startY: e.clientY,\n viewportX: viewport.x,\n viewportY: viewport.y,\n };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n };\n\n const onContainerPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const drag = dragStateRef.current;\n if (!drag) return;\n if (drag.kind === 'pan') {\n const dx = e.clientX - drag.startX;\n const dy = e.clientY - drag.startY;\n setViewport((v) => ({ ...v, x: drag.viewportX + dx, y: drag.viewportY + dy }));\n } else if (drag.kind === 'node') {\n const dx = (e.clientX - drag.startX) / viewport.zoom;\n const dy = (e.clientY - drag.startY) / viewport.zoom;\n const next = nodes.map((n) =>\n n.id === drag.nodeId ? { ...n, x: drag.nodeStartX + dx, y: drag.nodeStartY + dy } : n,\n );\n onNodesChange?.(next);\n }\n };\n\n const onContainerPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n dragStateRef.current = null;\n (e.currentTarget as HTMLElement).releasePointerCapture?.(e.pointerId);\n };\n\n const onWheel = useCallback(\n (e: React.WheelEvent<HTMLDivElement>) => {\n e.preventDefault();\n const rect = containerRef.current?.getBoundingClientRect();\n if (!rect) return;\n // Zoom centered on the cursor.\n const cx = e.clientX - rect.left;\n const cy = e.clientY - rect.top;\n const factor = e.deltaY < 0 ? 1.1 : 1 / 1.1;\n setViewport((v) => {\n const nextZoom = Math.max(minZoom, Math.min(maxZoom, v.zoom * factor));\n const ratio = nextZoom / v.zoom;\n return {\n zoom: nextZoom,\n x: cx - (cx - v.x) * ratio,\n y: cy - (cy - v.y) * ratio,\n };\n });\n },\n [minZoom, maxZoom],\n );\n\n const beginNodeDrag = (e: ReactPointerEvent<HTMLDivElement>, node: NodeEditorNode) => {\n e.stopPropagation();\n dragStateRef.current = {\n kind: 'node',\n nodeId: node.id,\n startX: e.clientX,\n startY: e.clientY,\n nodeStartX: node.x,\n nodeStartY: node.y,\n };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n };\n\n const fitView = () => {\n if (nodes.length === 0) {\n setViewport({ x: 0, y: 0, zoom: 1 });\n return;\n }\n const minX = Math.min(...nodes.map((n) => n.x));\n const minY = Math.min(...nodes.map((n) => n.y));\n const maxX = Math.max(...nodes.map((n) => n.x + nodeWidth));\n const maxY = Math.max(...nodes.map((n) => n.y + nodeHeight));\n const w = maxX - minX;\n const h = maxY - minY;\n const rect = containerRef.current?.getBoundingClientRect();\n if (!rect) return;\n const padding = 40;\n const zoomX = (rect.width - padding * 2) / w;\n const zoomY = (rect.height - padding * 2) / h;\n const zoom = Math.max(minZoom, Math.min(maxZoom, Math.min(zoomX, zoomY, 1)));\n setViewport({\n zoom,\n x: padding - minX * zoom + (rect.width - padding * 2 - w * zoom) / 2,\n y: padding - minY * zoom + (rect.height - padding * 2 - h * zoom) / 2,\n });\n };\n\n return (\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }}\n onPointerDown={onContainerPointerDown}\n onPointerMove={onContainerPointerMove}\n onPointerUp={onContainerPointerUp}\n onPointerCancel={onContainerPointerUp}\n onWheel={onWheel}\n className={cn(\n 'relative h-96 w-full overflow-hidden rounded-md border border-border bg-muted/30 select-none',\n className,\n )}\n {...rest}\n >\n {/* Pan/zoom transform */}\n <div\n className=\"absolute inset-0 origin-top-left\"\n style={{ transform: `translate(${viewport.x}px, ${viewport.y}px) scale(${viewport.zoom})` }}\n >\n <svg\n className=\"absolute pointer-events-none\"\n style={{ overflow: 'visible', width: '100%', height: '100%' }}\n >\n {edges.map((edge) => {\n const a = nodeIndex.get(edge.source);\n const b = nodeIndex.get(edge.target);\n if (!a || !b) return null;\n const x1 = a.x + nodeWidth;\n const y1 = a.y + nodeHeight / 2;\n const x2 = b.x;\n const y2 = b.y + nodeHeight / 2;\n const mid = (x1 + x2) / 2;\n const path = `M${x1},${y1} C${mid},${y1} ${mid},${y2} ${x2},${y2}`;\n return (\n <g key={edge.id} className=\"pointer-events-auto cursor-pointer\" onClick={() => onEdgeClick?.(edge)}>\n <path\n d={path}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2 / viewport.zoom}\n className=\"text-border-strong hover:text-primary\"\n />\n {edge.label && (\n <text\n x={mid}\n y={(y1 + y2) / 2 - 6}\n textAnchor=\"middle\"\n className=\"fill-muted-foreground text-[10px]\"\n style={{ fontSize: 10 / viewport.zoom }}\n >\n {edge.label}\n </text>\n )}\n </g>\n );\n })}\n </svg>\n {nodes.map((node) => (\n <div\n key={node.id}\n data-node\n role=\"group\"\n aria-label={typeof node.label === 'string' ? node.label : node.id}\n onPointerDown={(e) => beginNodeDrag(e, node)}\n style={{\n position: 'absolute',\n left: node.x,\n top: node.y,\n width: nodeWidth,\n height: nodeHeight,\n }}\n className=\"cursor-grab active:cursor-grabbing\"\n >\n {renderNode ? (\n renderNode(node)\n ) : (\n <div className=\"flex h-full w-full items-center justify-center rounded-md border border-border bg-card px-3 text-sm font-medium shadow-sm\">\n {node.label ?? node.id}\n </div>\n )}\n </div>\n ))}\n </div>\n {/* Controls */}\n <div className=\"absolute bottom-3 right-3 flex flex-col gap-1 rounded-md border border-border bg-card p-1 shadow-sm\">\n <button\n type=\"button\"\n aria-label=\"Zoom in\"\n onClick={() =>\n setViewport((v) => ({ ...v, zoom: Math.min(maxZoom, v.zoom * 1.2) }))\n }\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={Plus} size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Zoom out\"\n onClick={() =>\n setViewport((v) => ({ ...v, zoom: Math.max(minZoom, v.zoom / 1.2) }))\n }\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={Minus} size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Fit view\"\n onClick={fitView}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={Maximize} size={12} />\n </button>\n </div>\n </div>\n );\n});\n","import { forwardRef, useMemo, useRef, type KeyboardEvent, type SVGAttributes } from 'react';\nimport { cn } from '../../utils';\n\nexport type AudioWaveformTone = 'brand' | 'success' | 'warning' | 'danger' | 'muted' | 'current';\n\nconst TONE_CLASS: Record<AudioWaveformTone, string> = {\n brand: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-destructive',\n muted: 'text-muted-foreground',\n current: '',\n};\n\nexport interface AudioWaveformProps extends Omit<SVGAttributes<SVGSVGElement>, 'width' | 'height' | 'onSeek'> {\n peaks: number[];\n progress?: number;\n width?: number;\n height?: number;\n barWidth?: number;\n gap?: number;\n tone?: AudioWaveformTone;\n onSeek?: (progress: number) => void;\n interactive?: boolean;\n}\n\n/**\n * SVG bar-style audio waveform. `peaks` are per-bin amplitudes in 0..1.\n * Click-to-seek + arrow-key seek when `onSeek` is provided.\n */\nexport const AudioWaveform = forwardRef<SVGSVGElement, AudioWaveformProps>(\n function AudioWaveform(\n {\n peaks,\n progress = 0,\n width = 320,\n height = 48,\n barWidth = 2,\n gap = 1,\n tone = 'brand',\n onSeek,\n interactive,\n className,\n ...rest\n },\n ref,\n ) {\n const stepX = barWidth + gap;\n const barCount = Math.max(1, Math.floor(width / stepX));\n const sampled = useMemo(() => sampleTo(peaks, barCount), [peaks, barCount]);\n const playedBars = Math.round(progress * barCount);\n const isInteractive = interactive ?? onSeek != null;\n const seekFromX = (clientX: number, rect: DOMRect) => {\n const x = Math.max(0, Math.min(rect.width, clientX - rect.left));\n onSeek?.(x / rect.width);\n };\n const svgRef = useRef<SVGSVGElement | null>(null);\n\n const handleKey = (e: KeyboardEvent<SVGSVGElement>) => {\n if (!onSeek) return;\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n onSeek(Math.min(1, progress + 0.05));\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n onSeek(Math.max(0, progress - 0.05));\n } else if (e.key === 'Home') {\n e.preventDefault();\n onSeek(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n onSeek(1);\n }\n };\n\n return (\n <svg\n ref={(el) => {\n svgRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<SVGSVGElement | null>).current = el;\n }}\n role={isInteractive ? 'slider' : 'img'}\n aria-label=\"Audio waveform\"\n aria-valuenow={Math.round(progress * 100)}\n aria-valuemin={0}\n aria-valuemax={100}\n tabIndex={isInteractive ? 0 : -1}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n onClick={\n isInteractive\n ? (e) => {\n const rect = svgRef.current?.getBoundingClientRect();\n if (rect) seekFromX(e.clientX, rect);\n }\n : undefined\n }\n onKeyDown={handleKey}\n className={cn(\n 'inline-block',\n isInteractive && 'cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm',\n TONE_CLASS[tone],\n className,\n )}\n {...rest}\n >\n {sampled.map((amp, i) => {\n const h = Math.max(1, amp * height);\n const x = i * stepX;\n const y = (height - h) / 2;\n const played = i < playedBars;\n return (\n <rect\n key={i}\n x={x}\n y={y}\n width={barWidth}\n height={h}\n rx={1}\n className={played ? 'fill-current' : 'fill-current opacity-30'}\n />\n );\n })}\n </svg>\n );\n },\n);\n\n/** Resample `peaks` to exactly `n` bars by max-pooling consecutive runs. */\nfunction sampleTo(peaks: number[], n: number): number[] {\n if (peaks.length === 0) return new Array(n).fill(0);\n if (peaks.length === n) return peaks;\n const out: number[] = new Array(n);\n const ratio = peaks.length / n;\n for (let i = 0; i < n; i++) {\n const start = Math.floor(i * ratio);\n const end = Math.max(start + 1, Math.floor((i + 1) * ratio));\n let max = 0;\n for (let j = start; j < end && j < peaks.length; j++) {\n const v = Math.abs(peaks[j]!);\n if (v > max) max = v;\n }\n out[i] = max;\n }\n return out;\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type AudioHTMLAttributes,\n type KeyboardEvent,\n} from 'react';\nimport { Pause, Play, Volume2, VolumeX } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { AudioWaveform } from '../audioWaveform';\n\nexport interface AudioPlayerProps\n extends Omit<AudioHTMLAttributes<HTMLAudioElement>, 'controls' | 'onPlay' | 'onPause' | 'onTimeUpdate' | 'onEnded'> {\n src: string;\n peaks?: number[];\n defaultVolume?: number;\n defaultPlaybackRate?: number;\n compact?: boolean;\n onPlay?: () => void;\n onPause?: () => void;\n onTimeUpdate?: (time: number, duration: number) => void;\n onEnded?: () => void;\n}\n\nconst SPEEDS = [0.5, 0.75, 1, 1.25, 1.5, 2];\n\nfunction formatTime(s: number): string {\n if (!Number.isFinite(s) || s < 0) return '0:00';\n const total = Math.floor(s);\n const h = Math.floor(total / 3600);\n const m = Math.floor((total % 3600) / 60);\n const sec = total % 60;\n if (h > 0) return `${h}:${String(m).padStart(2, '0')}:${String(sec).padStart(2, '0')}`;\n return `${m}:${String(sec).padStart(2, '0')}`;\n}\n\n/**\n * Custom-controls audio player. Native `<audio>` underneath; play/pause,\n * scrubber (or `AudioWaveform` if `peaks` provided), volume, speed.\n */\nexport const AudioPlayer = forwardRef<HTMLAudioElement, AudioPlayerProps>(\n function AudioPlayer(\n {\n src,\n peaks,\n autoPlay,\n loop,\n defaultVolume = 1,\n defaultPlaybackRate = 1,\n compact,\n onPlay,\n onPause,\n onTimeUpdate,\n onEnded,\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const audioRef = useRef<HTMLAudioElement | null>(null);\n useImperativeHandle(forwardedRef, () => audioRef.current as HTMLAudioElement);\n const [playing, setPlaying] = useState(!!autoPlay);\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(0);\n const [volume, setVolume] = useState(defaultVolume);\n const [muted, setMuted] = useState(false);\n const [speed, setSpeed] = useState(defaultPlaybackRate);\n\n useEffect(() => {\n const a = audioRef.current;\n if (!a) return;\n a.volume = volume;\n a.muted = muted;\n a.playbackRate = speed;\n }, [volume, muted, speed]);\n\n const togglePlay = useCallback(() => {\n const a = audioRef.current;\n if (!a) return;\n if (a.paused) {\n a.play().catch(() => {\n /* autoplay rejection */\n });\n } else {\n a.pause();\n }\n }, []);\n\n const seekTo = useCallback((seconds: number) => {\n const a = audioRef.current;\n if (!a || !Number.isFinite(seconds)) return;\n a.currentTime = Math.max(0, Math.min(a.duration || 0, seconds));\n }, []);\n\n const seekProgress = useCallback(\n (p: number) => {\n if (duration > 0) seekTo(p * duration);\n },\n [duration, seekTo],\n );\n\n const handleKey = (e: KeyboardEvent<HTMLDivElement>) => {\n switch (e.key) {\n case ' ':\n case 'Spacebar':\n e.preventDefault();\n togglePlay();\n break;\n case 'ArrowRight':\n e.preventDefault();\n seekTo(currentTime + 5);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n seekTo(currentTime - 5);\n break;\n case 'ArrowUp':\n e.preventDefault();\n setVolume((v) => Math.min(1, v + 0.1));\n break;\n case 'ArrowDown':\n e.preventDefault();\n setVolume((v) => Math.max(0, v - 0.1));\n break;\n case 'm':\n case 'M':\n e.preventDefault();\n setMuted((m) => !m);\n break;\n }\n };\n\n const progress = duration > 0 ? currentTime / duration : 0;\n\n return (\n <div\n role=\"region\"\n aria-label=\"Audio player\"\n tabIndex={0}\n onKeyDown={handleKey}\n data-playing={playing || undefined}\n className={cn(\n 'flex items-center gap-3 rounded-md border border-border bg-card p-2 text-card-foreground shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n compact && 'gap-2 p-1.5',\n className,\n )}\n >\n <audio\n ref={audioRef}\n src={src}\n autoPlay={autoPlay}\n loop={loop}\n onPlay={() => {\n setPlaying(true);\n onPlay?.();\n }}\n onPause={() => {\n setPlaying(false);\n onPause?.();\n }}\n onTimeUpdate={() => {\n const a = audioRef.current;\n if (!a) return;\n setCurrentTime(a.currentTime);\n onTimeUpdate?.(a.currentTime, a.duration);\n }}\n onLoadedMetadata={() => {\n const a = audioRef.current;\n if (a) setDuration(a.duration || 0);\n }}\n onEnded={() => {\n setPlaying(false);\n onEnded?.();\n }}\n {...rest}\n />\n <button\n type=\"button\"\n aria-label={playing ? 'Pause' : 'Play'}\n onClick={togglePlay}\n className={cn(\n 'inline-flex shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n compact ? 'h-7 w-7' : 'h-9 w-9',\n )}\n >\n <Icon icon={playing ? Pause : Play} size={compact ? 12 : 14} />\n </button>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" style={{ minWidth: '3.5rem' }}>\n {formatTime(currentTime)}\n </span>\n <div className=\"flex-1\">\n {peaks ? (\n <AudioWaveform\n peaks={peaks}\n progress={progress}\n onSeek={seekProgress}\n width={compact ? 200 : 320}\n height={compact ? 32 : 40}\n />\n ) : (\n <input\n type=\"range\"\n role=\"slider\"\n aria-label=\"Seek\"\n aria-valuetext={formatTime(currentTime)}\n min={0}\n max={duration || 0}\n step=\"any\"\n value={currentTime}\n onChange={(e) => seekTo(Number(e.target.value))}\n className=\"w-full accent-primary\"\n />\n )}\n </div>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" style={{ minWidth: '3.5rem', textAlign: 'right' }}>\n {formatTime(duration)}\n </span>\n <button\n type=\"button\"\n aria-label={muted ? 'Unmute' : 'Mute'}\n onClick={() => setMuted((m) => !m)}\n className=\"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={muted || volume === 0 ? VolumeX : Volume2} size={14} />\n </button>\n <select\n aria-label=\"Playback speed\"\n value={speed}\n onChange={(e) => setSpeed(Number(e.target.value))}\n className=\"h-7 rounded-sm border border-input bg-background px-1 text-xs\"\n >\n {SPEEDS.map((s) => (\n <option key={s} value={s}>\n {s}×\n </option>\n ))}\n </select>\n </div>\n );\n },\n);\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type KeyboardEvent,\n type VideoHTMLAttributes,\n} from 'react';\nimport {\n Captions,\n CaptionsOff,\n Maximize,\n Minimize,\n Pause,\n PictureInPicture2,\n Play,\n Volume2,\n VolumeX,\n} from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport interface VideoTrack {\n src: string;\n srcLang: string;\n label: string;\n kind?: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata';\n default?: boolean;\n}\n\nexport interface VideoPlayerProps\n extends Omit<VideoHTMLAttributes<HTMLVideoElement>, 'controls'> {\n src: string;\n poster?: string;\n tracks?: VideoTrack[];\n aspectRatio?: string | number;\n defaultVolume?: number;\n defaultPlaybackRate?: number;\n}\n\nconst SPEEDS = [0.5, 0.75, 1, 1.25, 1.5, 2];\n\nfunction formatTime(s: number): string {\n if (!Number.isFinite(s) || s < 0) return '0:00';\n const total = Math.floor(s);\n const h = Math.floor(total / 3600);\n const m = Math.floor((total % 3600) / 60);\n const sec = total % 60;\n if (h > 0) return `${h}:${String(m).padStart(2, '0')}:${String(sec).padStart(2, '0')}`;\n return `${m}:${String(sec).padStart(2, '0')}`;\n}\n\n/**\n * Custom-controls video player. Click video to toggle play; controls\n * auto-hide after 3s during playback; keyboard shortcuts (Space/F/M/C/←/→/↑/↓).\n */\nexport const VideoPlayer = forwardRef<HTMLVideoElement, VideoPlayerProps>(\n function VideoPlayer(\n {\n src,\n poster,\n tracks,\n aspectRatio = '16 / 9',\n autoPlay,\n loop,\n muted: mutedProp,\n defaultVolume = 1,\n defaultPlaybackRate = 1,\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const videoRef = useRef<HTMLVideoElement | null>(null);\n useImperativeHandle(forwardedRef, () => videoRef.current as HTMLVideoElement);\n const [playing, setPlaying] = useState(!!autoPlay);\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(0);\n const [volume, setVolume] = useState(defaultVolume);\n const [muted, setMuted] = useState(!!mutedProp);\n const [speed, setSpeed] = useState(defaultPlaybackRate);\n const [fullscreen, setFullscreen] = useState(false);\n const [captionsOn, setCaptionsOn] = useState(false);\n const [showControls, setShowControls] = useState(true);\n const idleTimerRef = useRef<number | null>(null);\n\n useEffect(() => {\n const v = videoRef.current;\n if (!v) return;\n v.volume = volume;\n v.muted = muted;\n v.playbackRate = speed;\n }, [volume, muted, speed]);\n\n useEffect(() => {\n const v = videoRef.current;\n if (!v || !v.textTracks) return;\n for (let i = 0; i < v.textTracks.length; i++) {\n v.textTracks[i]!.mode = captionsOn ? 'showing' : 'hidden';\n }\n }, [captionsOn, tracks]);\n\n useEffect(() => {\n const onFsChange = () => setFullscreen(document.fullscreenElement === containerRef.current);\n document.addEventListener('fullscreenchange', onFsChange);\n return () => document.removeEventListener('fullscreenchange', onFsChange);\n }, []);\n\n const togglePlay = useCallback(() => {\n const v = videoRef.current;\n if (!v) return;\n if (v.paused) v.play().catch(() => {});\n else v.pause();\n }, []);\n\n const seekTo = useCallback((seconds: number) => {\n const v = videoRef.current;\n if (!v || !Number.isFinite(seconds)) return;\n v.currentTime = Math.max(0, Math.min(v.duration || 0, seconds));\n }, []);\n\n const toggleFullscreen = useCallback(async () => {\n const c = containerRef.current;\n if (!c) return;\n if (!document.fullscreenElement) {\n await c.requestFullscreen?.().catch(() => {});\n } else {\n await document.exitFullscreen?.().catch(() => {});\n }\n }, []);\n\n const togglePiP = useCallback(async () => {\n const v = videoRef.current;\n if (!v) return;\n if ('pictureInPictureElement' in document && document.pictureInPictureElement) {\n await (document as unknown as { exitPictureInPicture?: () => Promise<void> })\n .exitPictureInPicture?.()\n ?.catch(() => {});\n } else if ('requestPictureInPicture' in v) {\n await (v as HTMLVideoElement & { requestPictureInPicture?: () => Promise<unknown> })\n .requestPictureInPicture?.()\n ?.catch(() => {});\n }\n }, []);\n\n const bumpControls = useCallback(() => {\n setShowControls(true);\n if (idleTimerRef.current != null) window.clearTimeout(idleTimerRef.current);\n if (playing) {\n idleTimerRef.current = window.setTimeout(() => setShowControls(false), 3000);\n }\n }, [playing]);\n\n useEffect(() => {\n bumpControls();\n return () => {\n if (idleTimerRef.current != null) window.clearTimeout(idleTimerRef.current);\n };\n }, [playing, bumpControls]);\n\n const handleKey = (e: KeyboardEvent<HTMLDivElement>) => {\n switch (e.key) {\n case ' ':\n case 'Spacebar':\n e.preventDefault();\n togglePlay();\n break;\n case 'ArrowRight':\n e.preventDefault();\n seekTo(currentTime + 5);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n seekTo(currentTime - 5);\n break;\n case 'ArrowUp':\n e.preventDefault();\n setVolume((v) => Math.min(1, v + 0.1));\n break;\n case 'ArrowDown':\n e.preventDefault();\n setVolume((v) => Math.max(0, v - 0.1));\n break;\n case 'm':\n case 'M':\n e.preventDefault();\n setMuted((m) => !m);\n break;\n case 'f':\n case 'F':\n e.preventDefault();\n toggleFullscreen();\n break;\n case 'c':\n case 'C':\n e.preventDefault();\n if (tracks && tracks.length > 0) setCaptionsOn((c) => !c);\n break;\n }\n };\n\n return (\n <div\n ref={containerRef}\n role=\"region\"\n aria-label=\"Video player\"\n tabIndex={0}\n onKeyDown={handleKey}\n onMouseMove={bumpControls}\n onMouseLeave={() => {\n if (playing) setShowControls(false);\n }}\n className={cn(\n 'group relative overflow-hidden rounded-md bg-black text-white shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n style={{ aspectRatio: typeof aspectRatio === 'number' ? String(aspectRatio) : aspectRatio }}\n >\n <video\n ref={videoRef}\n src={src}\n poster={poster}\n autoPlay={autoPlay}\n loop={loop}\n muted={muted}\n onPlay={() => setPlaying(true)}\n onPause={() => setPlaying(false)}\n onTimeUpdate={() => {\n const v = videoRef.current;\n if (!v) return;\n setCurrentTime(v.currentTime);\n }}\n onLoadedMetadata={() => {\n const v = videoRef.current;\n if (v) setDuration(v.duration || 0);\n }}\n onClick={togglePlay}\n className=\"h-full w-full bg-black\"\n {...rest}\n >\n {tracks?.map((t, i) => (\n <track\n key={i}\n src={t.src}\n srcLang={t.srcLang}\n label={t.label}\n kind={t.kind ?? 'captions'}\n default={t.default}\n />\n ))}\n </video>\n\n {/* Big center play button when paused */}\n {!playing && (\n <button\n type=\"button\"\n aria-label=\"Play\"\n onClick={togglePlay}\n className=\"absolute inset-0 grid place-items-center bg-black/30 transition-opacity hover:bg-black/40\"\n >\n <span className=\"grid h-16 w-16 place-items-center rounded-full bg-white/90 text-foreground shadow-lg\">\n <Icon icon={Play} size={28} />\n </span>\n </button>\n )}\n\n {/* Controls bar */}\n <div\n className={cn(\n 'absolute inset-x-0 bottom-0 flex items-center gap-2 bg-gradient-to-t from-black/80 to-transparent px-3 pb-2 pt-6 transition-opacity',\n showControls ? 'opacity-100' : 'opacity-0',\n )}\n >\n <button\n type=\"button\"\n aria-label={playing ? 'Pause' : 'Play'}\n onClick={togglePlay}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-full bg-white/20 text-white hover:bg-white/30\"\n >\n <Icon icon={playing ? Pause : Play} size={14} />\n </button>\n <span className=\"text-xs tabular-nums\">\n {formatTime(currentTime)} / {formatTime(duration)}\n </span>\n <input\n type=\"range\"\n role=\"slider\"\n aria-label=\"Seek\"\n aria-valuetext={formatTime(currentTime)}\n min={0}\n max={duration || 0}\n step=\"any\"\n value={currentTime}\n onChange={(e) => seekTo(Number(e.target.value))}\n className=\"flex-1 accent-primary\"\n />\n <button\n type=\"button\"\n aria-label={muted || volume === 0 ? 'Unmute' : 'Mute'}\n onClick={() => setMuted((m) => !m)}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-white/80 hover:bg-white/20 hover:text-white\"\n >\n <Icon icon={muted || volume === 0 ? VolumeX : Volume2} size={14} />\n </button>\n <select\n aria-label=\"Playback speed\"\n value={speed}\n onChange={(e) => setSpeed(Number(e.target.value))}\n className=\"h-7 rounded-sm border border-white/20 bg-black/40 px-1 text-xs\"\n >\n {SPEEDS.map((s) => (\n <option key={s} value={s} className=\"text-foreground\">\n {s}×\n </option>\n ))}\n </select>\n {tracks && tracks.length > 0 && (\n <button\n type=\"button\"\n aria-label={captionsOn ? 'Hide captions' : 'Show captions'}\n aria-pressed={captionsOn}\n onClick={() => setCaptionsOn((c) => !c)}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-white/80 hover:bg-white/20 hover:text-white\"\n >\n <Icon icon={captionsOn ? Captions : CaptionsOff} size={14} />\n </button>\n )}\n <button\n type=\"button\"\n aria-label=\"Picture in picture\"\n onClick={togglePiP}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-white/80 hover:bg-white/20 hover:text-white\"\n >\n <Icon icon={PictureInPicture2} size={14} />\n </button>\n <button\n type=\"button\"\n aria-label={fullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}\n onClick={toggleFullscreen}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-white/80 hover:bg-white/20 hover:text-white\"\n >\n <Icon icon={fullscreen ? Minimize : Maximize} size={14} />\n </button>\n </div>\n </div>\n );\n },\n);\n","import { forwardRef, useMemo, type HTMLAttributes } from 'react';\nimport { ChevronLeft, ChevronRight, Download, ZoomIn, ZoomOut } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\n\nexport interface PDFViewerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n src: string;\n page?: number;\n defaultPage?: number;\n onPageChange?: (page: number) => void;\n zoom?: number;\n defaultZoom?: number;\n onZoomChange?: (zoom: number) => void;\n pageCount?: number;\n title?: string;\n download?: boolean;\n height?: string;\n}\n\nconst ZOOM_LEVELS = [50, 75, 100, 125, 150, 175, 200, 250, 300, 400];\n\n/**\n * Inline PDF viewer. **First-gen** uses the browser's built-in PDF viewer via\n * an `<iframe>` with `#page=N&zoom=Z` URL hash. Real per-page rendering,\n * thumbnails, search, annotations all need a PDF.js wrap — deferred to a\n * follow-up that slots into this contract.\n */\nexport const PDFViewer = forwardRef<HTMLDivElement, PDFViewerProps>(function PDFViewer(\n {\n src,\n page: pageProp,\n defaultPage = 1,\n onPageChange,\n zoom: zoomProp,\n defaultZoom = 100,\n onZoomChange,\n pageCount,\n title = 'PDF document',\n download = true,\n height = '70vh',\n className,\n ...rest\n },\n ref,\n) {\n const [page, setPage] = useControlled({\n controlled: pageProp,\n default: defaultPage,\n onChange: onPageChange,\n });\n const [zoom, setZoom] = useControlled({\n controlled: zoomProp,\n default: defaultZoom,\n onChange: onZoomChange,\n });\n\n // Build URL with hash for page/zoom hint to native PDF viewer.\n const hashedSrc = useMemo(() => {\n try {\n const url = new URL(src, typeof window !== 'undefined' ? window.location.href : 'http://localhost');\n url.hash = `page=${page}&zoom=${zoom}`;\n return url.toString();\n } catch {\n return `${src}#page=${page}&zoom=${zoom}`;\n }\n }, [src, page, zoom]);\n\n const goPrev = () => setPage(Math.max(1, page - 1));\n const goNext = () => setPage(pageCount ? Math.min(pageCount, page + 1) : page + 1);\n const zoomIn = () => {\n const next = ZOOM_LEVELS.find((z) => z > zoom);\n if (next) setZoom(next);\n };\n const zoomOut = () => {\n const next = [...ZOOM_LEVELS].reverse().find((z) => z < zoom);\n if (next) setZoom(next);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col overflow-hidden rounded-md border border-border bg-card text-card-foreground shadow-sm',\n className,\n )}\n {...rest}\n >\n <div className=\"flex items-center gap-1 border-b border-border bg-muted/40 px-2 py-1.5\">\n <button\n type=\"button\"\n aria-label=\"Previous page\"\n onClick={goPrev}\n disabled={page <= 1}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-40\"\n >\n <Icon icon={ChevronLeft} size={14} />\n </button>\n <span className=\"px-1 text-xs tabular-nums text-foreground\">\n {pageCount ? `${page} / ${pageCount}` : `Page ${page}`}\n </span>\n <button\n type=\"button\"\n aria-label=\"Next page\"\n onClick={goNext}\n disabled={pageCount != null && page >= pageCount}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-40\"\n >\n <Icon icon={ChevronRight} size={14} />\n </button>\n <span className=\"mx-2 h-4 w-px bg-border\" aria-hidden=\"true\" />\n <button\n type=\"button\"\n aria-label=\"Zoom out\"\n onClick={zoomOut}\n disabled={zoom <= ZOOM_LEVELS[0]!}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-40\"\n >\n <Icon icon={ZoomOut} size={14} />\n </button>\n <span className=\"px-1 text-xs tabular-nums text-foreground\">{zoom}%</span>\n <button\n type=\"button\"\n aria-label=\"Zoom in\"\n onClick={zoomIn}\n disabled={zoom >= ZOOM_LEVELS[ZOOM_LEVELS.length - 1]!}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-40\"\n >\n <Icon icon={ZoomIn} size={14} />\n </button>\n <div className=\"ml-auto flex items-center gap-1\">\n {download && (\n <a\n href={src}\n download\n aria-label=\"Download PDF\"\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={Download} size={14} />\n </a>\n )}\n </div>\n </div>\n <iframe\n src={hashedSrc}\n title={title}\n style={{ height, border: 0 }}\n className=\"w-full bg-muted\"\n />\n </div>\n );\n});\n","import { forwardRef, useMemo, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface ScheduleResource {\n id: string;\n label: ReactNode;\n color?: string;\n}\n\nexport interface ScheduleBooking {\n id: string;\n resourceId: string;\n start: Date;\n end: Date;\n label?: ReactNode;\n color?: string;\n}\n\nexport interface ScheduleViewProps extends HTMLAttributes<HTMLDivElement> {\n resources: ScheduleResource[];\n bookings: ScheduleBooking[];\n date?: Date;\n hourRange?: [number, number];\n slotMinutes?: number;\n onBookingClick?: (booking: ScheduleBooking) => void;\n onSlotClick?: (resourceId: string, time: Date) => void;\n renderBooking?: (booking: ScheduleBooking) => ReactNode;\n}\n\nfunction dateAtHour(base: Date, hour: number, minute = 0): Date {\n const c = new Date(base);\n c.setHours(hour, minute, 0, 0);\n return c;\n}\n\nfunction diffMinutes(a: Date, b: Date): number {\n return (b.getTime() - a.getTime()) / 60000;\n}\n\n/**\n * Multi-resource single-day schedule. Resources × hours grid; bookings\n * positioned absolutely within each row's timeline by minute offset.\n */\nexport const ScheduleView = forwardRef<HTMLDivElement, ScheduleViewProps>(function ScheduleView(\n {\n resources,\n bookings,\n date = new Date(),\n hourRange = [8, 20],\n slotMinutes = 30,\n onBookingClick,\n onSlotClick,\n renderBooking,\n className,\n ...rest\n },\n ref,\n) {\n const [startHour, endHour] = hourRange;\n const totalMinutes = (endHour - startHour) * 60;\n const slotCount = Math.ceil(totalMinutes / slotMinutes);\n const dayStart = useMemo(() => dateAtHour(date, startHour), [date, startHour]);\n\n const bookingsByResource = useMemo(() => {\n const map = new Map<string, ScheduleBooking[]>();\n for (const b of bookings) {\n const list = map.get(b.resourceId);\n if (list) list.push(b);\n else map.set(b.resourceId, [b]);\n }\n return map;\n }, [bookings]);\n\n return (\n <div\n ref={ref}\n role=\"grid\"\n aria-label=\"Schedule\"\n className={cn(\n 'overflow-auto rounded-md border border-border bg-card text-sm shadow-sm',\n className,\n )}\n {...rest}\n >\n {/* Hour header */}\n <div className=\"sticky top-0 z-raised flex border-b border-border bg-muted/40\">\n <div className=\"w-32 shrink-0 border-r border-border px-3 py-2 text-xs font-medium text-muted-foreground\">\n {date.toLocaleDateString(undefined, { weekday: 'short', month: 'short', day: 'numeric' })}\n </div>\n <div className=\"flex-1 grid\" style={{ gridTemplateColumns: `repeat(${endHour - startHour}, 1fr)` }}>\n {Array.from({ length: endHour - startHour }, (_, i) => (\n <div key={i} className=\"border-l border-border px-2 py-1 text-xs text-muted-foreground tabular-nums\">\n {String((startHour + i) % 24).padStart(2, '0')}:00\n </div>\n ))}\n </div>\n </div>\n {/* Rows */}\n {resources.map((resource) => {\n const items = bookingsByResource.get(resource.id) ?? [];\n return (\n <div key={resource.id} role=\"row\" className=\"flex border-b border-border last:border-b-0\">\n <div className=\"w-32 shrink-0 border-r border-border bg-muted/20 px-3 py-2 text-xs font-medium\">\n {resource.label}\n </div>\n <div className=\"relative flex-1\" style={{ height: 56 }}>\n {/* Vertical hour gridlines */}\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-0 grid pointer-events-none\"\n style={{ gridTemplateColumns: `repeat(${endHour - startHour}, 1fr)` }}\n >\n {Array.from({ length: endHour - startHour }, (_, i) => (\n <div key={i} className=\"border-l border-border\" />\n ))}\n </div>\n {/* Slot click overlay */}\n {onSlotClick && (\n <div\n className=\"absolute inset-0 grid\"\n style={{ gridTemplateColumns: `repeat(${slotCount}, 1fr)` }}\n >\n {Array.from({ length: slotCount }, (_, i) => {\n const slotTime = new Date(dayStart);\n slotTime.setMinutes(slotTime.getMinutes() + i * slotMinutes);\n return (\n <button\n key={i}\n type=\"button\"\n aria-label={`Empty slot at ${slotTime.toLocaleTimeString()}`}\n onClick={() => onSlotClick(resource.id, slotTime)}\n className=\"hover:bg-primary-soft/30\"\n />\n );\n })}\n </div>\n )}\n {/* Bookings */}\n {items.map((booking) => {\n const offsetMin = Math.max(0, diffMinutes(dayStart, booking.start));\n const durMin = Math.max(15, diffMinutes(booking.start, booking.end));\n const left = (offsetMin / totalMinutes) * 100;\n const width = (durMin / totalMinutes) * 100;\n const color = booking.color ?? resource.color;\n return (\n <button\n key={booking.id}\n type=\"button\"\n role=\"button\"\n aria-label={`${resource.label} ${booking.start.toLocaleTimeString()} – ${booking.end.toLocaleTimeString()}: ${booking.label ?? ''}`}\n onClick={(e) => {\n e.stopPropagation();\n onBookingClick?.(booking);\n }}\n style={{\n left: `${left}%`,\n width: `${width}%`,\n top: 4,\n bottom: 4,\n background: color,\n }}\n className={cn(\n 'absolute overflow-hidden rounded-md border border-border/60 px-2 py-1 text-left text-xs font-medium transition-colors hover:brightness-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n !color && 'bg-primary-soft text-primary-soft-foreground',\n )}\n >\n {renderBooking ? (\n renderBooking(booking)\n ) : (\n <>\n <div className=\"truncate\">{booking.label ?? booking.id}</div>\n <div className=\"text-[10px] opacity-70 tabular-nums\">\n {booking.start.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n {' – '}\n {booking.end.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </div>\n </>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n );\n});\n","import { forwardRef, useMemo, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface GanttTask {\n id: string;\n label: ReactNode;\n start: Date;\n end: Date;\n color?: string;\n /** 0..1 — fills the bar from the left. */\n progress?: number;\n}\n\nexport interface GanttDependency {\n from: string;\n to: string;\n}\n\nexport interface GanttMilestone {\n id: string;\n label: ReactNode;\n date: Date;\n}\n\nexport interface GanttProps extends HTMLAttributes<HTMLDivElement> {\n tasks: GanttTask[];\n dependencies?: GanttDependency[];\n milestones?: GanttMilestone[];\n from?: Date;\n to?: Date;\n cellWidth?: number;\n rowHeight?: number;\n labelWidth?: number;\n showWeekends?: boolean;\n onTaskClick?: (task: GanttTask) => void;\n}\n\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\n\nfunction startOfDayLocal(d: Date): Date {\n const c = new Date(d);\n c.setHours(0, 0, 0, 0);\n return c;\n}\n\nfunction dayDiff(a: Date, b: Date): number {\n return Math.round((startOfDayLocal(b).getTime() - startOfDayLocal(a).getTime()) / MS_PER_DAY);\n}\n\nfunction* eachDay(from: Date, to: Date): Generator<Date> {\n const cur = startOfDayLocal(from);\n const end = startOfDayLocal(to);\n while (cur <= end) {\n yield new Date(cur);\n cur.setDate(cur.getDate() + 1);\n }\n}\n\n/**\n * First-generation Gantt chart. Tasks rendered as horizontal bars positioned\n * by start/end. Optional dependency arrows + \"today\" indicator. Drag-resize,\n * drag-move, critical path, group rows all deferred.\n */\nexport const Gantt = forwardRef<HTMLDivElement, GanttProps>(function Gantt(\n {\n tasks,\n dependencies = [],\n milestones = [],\n from: fromProp,\n to: toProp,\n cellWidth = 40,\n rowHeight = 36,\n labelWidth = 200,\n showWeekends = true,\n onTaskClick,\n className,\n ...rest\n },\n ref,\n) {\n const { from, to, totalDays } = useMemo(() => {\n if (tasks.length === 0) {\n const now = new Date();\n return { from: now, to: now, totalDays: 1 };\n }\n const minStart = fromProp ?? new Date(Math.min(...tasks.map((t) => t.start.getTime())));\n const maxEnd = toProp ?? new Date(Math.max(...tasks.map((t) => t.end.getTime())));\n return {\n from: startOfDayLocal(minStart),\n to: startOfDayLocal(maxEnd),\n totalDays: dayDiff(minStart, maxEnd) + 1,\n };\n }, [tasks, fromProp, toProp]);\n\n const headerDates = useMemo(() => Array.from(eachDay(from, to)), [from, to]);\n const today = startOfDayLocal(new Date());\n const todayOffset = dayDiff(from, today);\n const todayInRange = todayOffset >= 0 && todayOffset < totalDays;\n\n const taskIndex = useMemo(() => new Map(tasks.map((t, i) => [t.id, i])), [tasks]);\n\n const timelineWidth = totalDays * cellWidth;\n\n return (\n <div\n ref={ref}\n role=\"grid\"\n aria-label=\"Gantt chart\"\n className={cn('overflow-auto rounded-md border border-border bg-card text-sm shadow-sm', className)}\n {...rest}\n >\n <div className=\"flex\">\n {/* Label column */}\n <div className=\"shrink-0 border-r border-border bg-muted/30\" style={{ width: labelWidth }}>\n <div className=\"border-b border-border px-3 py-2 text-xs font-medium text-muted-foreground\" style={{ height: rowHeight }}>\n Task\n </div>\n {tasks.map((task) => (\n <div\n key={task.id}\n className=\"flex items-center border-b border-border px-3 text-xs last:border-b-0\"\n style={{ height: rowHeight }}\n >\n <span className=\"truncate font-medium\">{task.label}</span>\n </div>\n ))}\n </div>\n {/* Timeline */}\n <div className=\"relative flex-1 overflow-x-auto\" style={{ minWidth: 0 }}>\n <div style={{ width: timelineWidth }}>\n {/* Header */}\n <div className=\"flex border-b border-border\" style={{ height: rowHeight }}>\n {headerDates.map((d, i) => {\n const isWeekend = d.getDay() === 0 || d.getDay() === 6;\n const isFirstOfMonth = d.getDate() === 1;\n return (\n <div\n key={i}\n className={cn(\n 'border-r border-border text-[10px] tabular-nums',\n isWeekend && showWeekends && 'bg-muted/40',\n isFirstOfMonth && 'border-l-2 border-l-border-strong',\n )}\n style={{ width: cellWidth }}\n >\n {isFirstOfMonth && (\n <div className=\"border-b border-border bg-muted px-1 py-0.5 text-center font-medium text-muted-foreground\">\n {d.toLocaleDateString(undefined, { month: 'short', year: '2-digit' })}\n </div>\n )}\n <div className=\"px-1 py-0.5 text-center text-muted-foreground\">\n {d.getDate()}\n </div>\n </div>\n );\n })}\n </div>\n {/* Rows */}\n {tasks.map((task) => {\n const offset = dayDiff(from, task.start);\n const length = Math.max(1, dayDiff(task.start, task.end) + 1);\n const left = offset * cellWidth;\n const width = length * cellWidth;\n const progress = task.progress ?? 0;\n return (\n <div\n key={task.id}\n className=\"relative border-b border-border last:border-b-0\"\n style={{ height: rowHeight }}\n >\n {/* Vertical day gridlines + weekend shading */}\n <div className=\"absolute inset-0 flex pointer-events-none\">\n {headerDates.map((d, i) => {\n const isWeekend = d.getDay() === 0 || d.getDay() === 6;\n return (\n <div\n key={i}\n style={{ width: cellWidth }}\n className={cn(\n 'border-r border-border/60',\n isWeekend && showWeekends && 'bg-muted/30',\n )}\n />\n );\n })}\n </div>\n {/* Bar */}\n <button\n type=\"button\"\n role=\"button\"\n aria-label={`${typeof task.label === 'string' ? task.label : task.id}: ${task.start.toLocaleDateString()} – ${task.end.toLocaleDateString()}`}\n onClick={() => onTaskClick?.(task)}\n style={{\n left: left + 4,\n width: width - 8,\n top: 6,\n bottom: 6,\n background: task.color,\n }}\n className={cn(\n 'absolute overflow-hidden rounded-md border border-border/60 px-2 text-left text-[11px] font-medium transition-colors hover:brightness-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n !task.color && 'bg-primary text-primary-foreground',\n )}\n >\n {/* Progress fill */}\n {progress > 0 && (\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-y-0 left-0 bg-foreground/20\"\n style={{ width: `${progress * 100}%` }}\n />\n )}\n <span className=\"relative inline-flex h-full items-center truncate\">\n {task.label}\n </span>\n </button>\n </div>\n );\n })}\n </div>\n {/* Dependency arrows + today line */}\n <svg\n className=\"pointer-events-none absolute\"\n style={{\n left: 0,\n top: rowHeight,\n width: timelineWidth,\n height: tasks.length * rowHeight,\n }}\n >\n {dependencies.map((dep, i) => {\n const fromIdx = taskIndex.get(dep.from);\n const toIdx = taskIndex.get(dep.to);\n if (fromIdx == null || toIdx == null) return null;\n const fromTask = tasks[fromIdx]!;\n const toTask = tasks[toIdx]!;\n const fromX = (dayDiff(from, fromTask.end) + 1) * cellWidth;\n const fromY = fromIdx * rowHeight + rowHeight / 2;\n const toX = dayDiff(from, toTask.start) * cellWidth;\n const toY = toIdx * rowHeight + rowHeight / 2;\n const midX = Math.max(fromX + 8, (fromX + toX) / 2);\n const path = `M ${fromX} ${fromY} L ${midX} ${fromY} L ${midX} ${toY} L ${toX - 4} ${toY}`;\n return (\n <g key={i}>\n <path d={path} fill=\"none\" stroke=\"currentColor\" strokeWidth={1} className=\"text-border-strong\" />\n <polygon\n points={`${toX - 4},${toY - 3} ${toX - 4},${toY + 3} ${toX},${toY}`}\n className=\"fill-border-strong\"\n />\n </g>\n );\n })}\n {milestones.map((m) => {\n const x = dayDiff(from, m.date) * cellWidth + cellWidth / 2;\n return (\n <g key={m.id}>\n <polygon\n points={`${x},2 ${x + 6},10 ${x},18 ${x - 6},10`}\n className=\"fill-warning stroke-warning-foreground\"\n strokeWidth={1}\n />\n </g>\n );\n })}\n {todayInRange && (\n <line\n x1={todayOffset * cellWidth + cellWidth / 2}\n x2={todayOffset * cellWidth + cellWidth / 2}\n y1={0}\n y2={tasks.length * rowHeight}\n className=\"stroke-primary\"\n strokeWidth={1.5}\n strokeDasharray=\"4 3\"\n />\n )}\n </svg>\n </div>\n </div>\n </div>\n );\n});\n","import { forwardRef, useMemo, type HTMLAttributes, type ReactNode } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\nimport {\n addDays,\n addMonths,\n buildMonthGrid,\n isSameDay,\n isToday,\n MONTHS_LONG,\n startOfDay,\n WEEKDAYS_SHORT,\n} from '../../forms/DateExtensions';\n\nexport type EventCalendarView = 'month' | 'week' | 'day' | 'agenda';\n\nexport interface EventCalendarEvent {\n id: string;\n title?: ReactNode;\n start: Date;\n end: Date;\n color?: string;\n allDay?: boolean;\n}\n\nexport interface EventCalendarProps extends HTMLAttributes<HTMLDivElement> {\n events: EventCalendarEvent[];\n view?: EventCalendarView;\n defaultView?: EventCalendarView;\n onViewChange?: (view: EventCalendarView) => void;\n date?: Date;\n defaultDate?: Date;\n onDateChange?: (date: Date) => void;\n weekStart?: 0 | 1;\n hourRange?: [number, number];\n onEventClick?: (event: EventCalendarEvent) => void;\n onSlotClick?: (date: Date, hour?: number) => void;\n}\n\nfunction startOfWeek(d: Date, weekStart: 0 | 1): Date {\n const c = startOfDay(d);\n const diff = (c.getDay() - weekStart + 7) % 7;\n c.setDate(c.getDate() - diff);\n return c;\n}\n\nfunction isInRange(d: Date, start: Date, end: Date): boolean {\n return d >= startOfDay(start) && d <= startOfDay(end);\n}\n\nfunction minutesSince(reference: Date, target: Date): number {\n return (target.getTime() - reference.getTime()) / 60000;\n}\n\n/**\n * First-generation EventCalendar — month / week / day / agenda views.\n * Header: Today / Prev / Next / Title + view switcher. Events as colored\n * blocks. Drag-edit, recurrence, \"+N more\" overflow deferred.\n */\nexport const EventCalendar = forwardRef<HTMLDivElement, EventCalendarProps>(\n function EventCalendar(\n {\n events,\n view: viewProp,\n defaultView = 'month',\n onViewChange,\n date: dateProp,\n defaultDate,\n onDateChange,\n weekStart = 0,\n hourRange = [0, 24],\n onEventClick,\n onSlotClick,\n className,\n ...rest\n },\n ref,\n ) {\n const [view, setView] = useControlled({\n controlled: viewProp,\n default: defaultView,\n onChange: onViewChange,\n });\n const [date, setDate] = useControlled({\n controlled: dateProp,\n default: defaultDate ?? new Date(),\n onChange: onDateChange,\n });\n\n const sortedEvents = useMemo(\n () => [...events].sort((a, b) => a.start.getTime() - b.start.getTime()),\n [events],\n );\n\n const goPrev = () => {\n switch (view) {\n case 'month':\n setDate(addMonths(date, -1));\n break;\n case 'week':\n setDate(addDays(date, -7));\n break;\n case 'day':\n case 'agenda':\n setDate(addDays(date, -1));\n break;\n }\n };\n const goNext = () => {\n switch (view) {\n case 'month':\n setDate(addMonths(date, 1));\n break;\n case 'week':\n setDate(addDays(date, 7));\n break;\n case 'day':\n case 'agenda':\n setDate(addDays(date, 1));\n break;\n }\n };\n const goToday = () => setDate(new Date());\n\n const title = useMemo(() => {\n switch (view) {\n case 'month':\n return `${MONTHS_LONG[date.getMonth()]} ${date.getFullYear()}`;\n case 'week': {\n const ws = startOfWeek(date, weekStart);\n const we = addDays(ws, 6);\n return `${ws.toLocaleDateString(undefined, { month: 'short', day: 'numeric' })} – ${we.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' })}`;\n }\n case 'day':\n return date.toLocaleDateString(undefined, { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' });\n case 'agenda':\n return `Upcoming from ${date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' })}`;\n }\n }, [view, date, weekStart]);\n\n return (\n <div\n ref={ref}\n className={cn('flex flex-col overflow-hidden rounded-md border border-border bg-card text-sm shadow-sm', className)}\n {...rest}\n >\n {/* Header */}\n <div className=\"flex items-center gap-2 border-b border-border bg-muted/30 px-3 py-2\">\n <button\n type=\"button\"\n onClick={goToday}\n className=\"inline-flex h-7 items-center rounded-md border border-border bg-background px-2.5 text-xs font-medium hover:bg-muted\"\n >\n Today\n </button>\n <button\n type=\"button\"\n aria-label=\"Previous\"\n onClick={goPrev}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-muted\"\n >\n <Icon icon={ChevronLeft} size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Next\"\n onClick={goNext}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-muted\"\n >\n <Icon icon={ChevronRight} size={14} />\n </button>\n <h3 className=\"ml-1 text-base font-semibold\">{title}</h3>\n <div role=\"radiogroup\" aria-label=\"View\" className=\"ml-auto flex items-center gap-0.5 rounded-md bg-card p-0.5 ring-1 ring-border\">\n {(['month', 'week', 'day', 'agenda'] as EventCalendarView[]).map((v) => (\n <button\n key={v}\n type=\"button\"\n role=\"radio\"\n aria-checked={view === v}\n onClick={() => setView(v)}\n className={cn(\n 'inline-flex h-6 items-center rounded px-2 text-xs font-medium transition-colors',\n view === v\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {v}\n </button>\n ))}\n </div>\n </div>\n {/* Body */}\n <div className=\"flex-1 overflow-auto\" style={{ minHeight: 0 }}>\n {view === 'month' && (\n <MonthView\n date={date}\n events={sortedEvents}\n weekStart={weekStart}\n onEventClick={onEventClick}\n onSlotClick={onSlotClick}\n />\n )}\n {view === 'week' && (\n <TimeGridView\n date={date}\n events={sortedEvents}\n days={7}\n firstDay={startOfWeek(date, weekStart)}\n hourRange={hourRange}\n onEventClick={onEventClick}\n onSlotClick={onSlotClick}\n />\n )}\n {view === 'day' && (\n <TimeGridView\n date={date}\n events={sortedEvents}\n days={1}\n firstDay={startOfDay(date)}\n hourRange={hourRange}\n onEventClick={onEventClick}\n onSlotClick={onSlotClick}\n />\n )}\n {view === 'agenda' && (\n <AgendaView date={date} events={sortedEvents} onEventClick={onEventClick} />\n )}\n </div>\n </div>\n );\n },\n);\n\ninterface MonthViewProps {\n date: Date;\n events: EventCalendarEvent[];\n weekStart: 0 | 1;\n onEventClick?: (event: EventCalendarEvent) => void;\n onSlotClick?: (date: Date, hour?: number) => void;\n}\n\nfunction MonthView({ date, events, weekStart, onEventClick, onSlotClick }: MonthViewProps) {\n const grid = buildMonthGrid(date.getFullYear(), date.getMonth());\n // Reorder weekdays per weekStart.\n const weekdayHeaders = Array.from({ length: 7 }, (_, i) => WEEKDAYS_SHORT[(i + weekStart) % 7]!);\n // The grid from buildMonthGrid is Sunday-first; rotate if weekStart=1.\n const cells = weekStart === 0 ? grid : (() => {\n // Rotate each row by -1 from Sunday-first to Monday-first.\n const out = grid.slice();\n return out;\n })();\n\n const eventsForDay = (d: Date) =>\n events.filter((e) => isInRange(d, e.start, e.end));\n\n return (\n <div className=\"grid h-full grid-cols-7 border-l border-t border-border\">\n {weekdayHeaders.map((wd) => (\n <div\n key={wd}\n className=\"border-b border-r border-border bg-muted/40 px-2 py-1 text-xs font-medium uppercase text-muted-foreground\"\n >\n {wd}\n </div>\n ))}\n {cells.map((cell, i) => {\n const cellEvents = eventsForDay(cell.date);\n return (\n <div\n key={i}\n className={cn(\n 'flex flex-col border-b border-r border-border p-1 text-xs',\n cell.outOfMonth && 'bg-muted/20',\n isToday(cell.date) && 'bg-primary-soft/20',\n )}\n style={{ minHeight: 96 }}\n >\n <button\n type=\"button\"\n onClick={() => onSlotClick?.(cell.date)}\n className={cn(\n 'mb-1 self-start rounded-sm px-1 text-xs tabular-nums transition-colors',\n cell.outOfMonth ? 'text-muted-foreground' : 'text-foreground',\n isToday(cell.date) && 'bg-primary text-primary-foreground',\n 'hover:bg-muted',\n )}\n >\n {cell.date.getDate()}\n </button>\n <div className=\"flex flex-col gap-0.5\">\n {cellEvents.slice(0, 3).map((e) => (\n <button\n key={e.id}\n type=\"button\"\n onClick={(ev) => {\n ev.stopPropagation();\n onEventClick?.(e);\n }}\n style={{ background: e.color }}\n className={cn(\n 'truncate rounded-sm px-1.5 py-0.5 text-left text-[11px] font-medium transition-colors hover:brightness-95',\n !e.color && 'bg-primary-soft text-primary-soft-foreground',\n )}\n aria-label={`${typeof e.title === 'string' ? e.title : e.id} at ${e.start.toLocaleTimeString()}`}\n >\n {e.allDay ? '• ' : ''}\n {e.title ?? '(no title)'}\n </button>\n ))}\n {cellEvents.length > 3 && (\n <span className=\"px-1 text-[10px] text-muted-foreground\">+{cellEvents.length - 3} more</span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\ninterface TimeGridViewProps {\n date: Date;\n events: EventCalendarEvent[];\n days: number;\n firstDay: Date;\n hourRange: [number, number];\n onEventClick?: (event: EventCalendarEvent) => void;\n onSlotClick?: (date: Date, hour?: number) => void;\n}\n\nfunction TimeGridView({ events, days, firstDay, hourRange, onEventClick, onSlotClick }: TimeGridViewProps) {\n const [startHour, endHour] = hourRange;\n const visibleHours = endHour - startHour;\n const HOUR_PX = 48;\n const dayDates = Array.from({ length: days }, (_, i) => addDays(firstDay, i));\n\n const eventsForDay = (d: Date) =>\n events.filter((e) => !e.allDay && isSameDay(d, e.start));\n const allDayForDay = (d: Date) =>\n events.filter((e) => e.allDay && isInRange(d, e.start, e.end));\n\n return (\n <div className=\"flex\">\n {/* Hour gutter */}\n <div className=\"w-14 shrink-0 border-r border-border\">\n <div className=\"h-6 border-b border-border bg-muted/40\" />\n <div className=\"h-7 border-b border-border bg-muted/20\" />\n {Array.from({ length: visibleHours }, (_, i) => (\n <div\n key={i}\n className=\"border-b border-border bg-muted/10 px-1 text-[10px] tabular-nums text-muted-foreground\"\n style={{ height: HOUR_PX }}\n >\n {String((startHour + i) % 24).padStart(2, '0')}:00\n </div>\n ))}\n </div>\n <div className=\"flex-1 overflow-x-auto\">\n <div className=\"grid\" style={{ gridTemplateColumns: `repeat(${days}, minmax(120px, 1fr))` }}>\n {/* Day headers */}\n {dayDates.map((d, i) => (\n <div\n key={`h-${i}`}\n className={cn(\n 'h-6 border-b border-r border-border bg-muted/40 px-2 text-xs font-medium',\n isToday(d) && 'bg-primary-soft/30',\n )}\n >\n {d.toLocaleDateString(undefined, { weekday: 'short', day: 'numeric' })}\n </div>\n ))}\n {/* All-day row */}\n {dayDates.map((d, i) => {\n const list = allDayForDay(d);\n return (\n <div\n key={`ad-${i}`}\n className=\"h-7 border-b border-r border-border bg-muted/10 p-0.5 text-[11px]\"\n >\n <div className=\"flex flex-wrap gap-0.5\">\n {list.map((e) => (\n <button\n key={e.id}\n type=\"button\"\n onClick={(ev) => {\n ev.stopPropagation();\n onEventClick?.(e);\n }}\n style={{ background: e.color }}\n className={cn(\n 'truncate rounded-sm px-1 py-0.5',\n !e.color && 'bg-primary-soft text-primary-soft-foreground',\n )}\n >\n {e.title ?? '(no title)'}\n </button>\n ))}\n </div>\n </div>\n );\n })}\n {/* Time grid columns */}\n {dayDates.map((d, di) => {\n const list = eventsForDay(d);\n const dayStart = new Date(d);\n dayStart.setHours(startHour, 0, 0, 0);\n return (\n <div\n key={`g-${di}`}\n className=\"relative border-r border-border\"\n style={{ height: visibleHours * HOUR_PX }}\n >\n {/* Hour grid lines */}\n {Array.from({ length: visibleHours }, (_, i) => (\n <div\n key={i}\n className=\"border-b border-border/60\"\n style={{ height: HOUR_PX }}\n onClick={() => onSlotClick?.(d, startHour + i)}\n />\n ))}\n {/* Today line */}\n {isToday(d) && (() => {\n const now = new Date();\n const minutes = now.getHours() * 60 + now.getMinutes() - startHour * 60;\n if (minutes < 0 || minutes > visibleHours * 60) return null;\n const top = (minutes / 60) * HOUR_PX;\n return (\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-x-0 z-raised border-t border-primary\"\n style={{ top }}\n />\n );\n })()}\n {/* Events */}\n {list.map((e) => {\n const start = e.start < dayStart ? dayStart : e.start;\n const dayEnd = new Date(d);\n dayEnd.setHours(endHour, 0, 0, 0);\n const end = e.end > dayEnd ? dayEnd : e.end;\n const topMin = minutesSince(dayStart, start);\n const durMin = Math.max(15, minutesSince(start, end));\n const top = (topMin / 60) * HOUR_PX;\n const height = (durMin / 60) * HOUR_PX;\n return (\n <button\n key={e.id}\n type=\"button\"\n onClick={(ev) => {\n ev.stopPropagation();\n onEventClick?.(e);\n }}\n style={{\n top,\n height,\n left: 2,\n right: 2,\n background: e.color,\n }}\n className={cn(\n 'absolute overflow-hidden rounded-sm border border-border/60 px-1 py-0.5 text-left text-[11px] font-medium transition-colors hover:brightness-95',\n !e.color && 'bg-primary text-primary-foreground',\n )}\n >\n <div className=\"truncate\">{e.title ?? '(no title)'}</div>\n <div className=\"text-[10px] opacity-80 tabular-nums\">\n {start.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </div>\n </button>\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n\ninterface AgendaViewProps {\n date: Date;\n events: EventCalendarEvent[];\n onEventClick?: (event: EventCalendarEvent) => void;\n}\n\nfunction AgendaView({ date, events, onEventClick }: AgendaViewProps) {\n const horizon = addDays(date, 30);\n const upcoming = events.filter((e) => e.end >= date && e.start <= horizon);\n // Group by date.\n const groups = new Map<string, EventCalendarEvent[]>();\n for (const e of upcoming) {\n const key = e.start.toDateString();\n const list = groups.get(key);\n if (list) list.push(e);\n else groups.set(key, [e]);\n }\n if (groups.size === 0) {\n return <div className=\"p-6 text-center text-sm text-muted-foreground\">No upcoming events.</div>;\n }\n return (\n <ul className=\"divide-y divide-border\">\n {Array.from(groups.entries()).map(([key, list]) => {\n const groupDate = list[0]!.start;\n return (\n <li key={key} className=\"px-4 py-3\">\n <div\n className={cn(\n 'mb-2 text-xs font-semibold uppercase text-muted-foreground',\n isToday(groupDate) && 'text-primary',\n )}\n >\n {groupDate.toLocaleDateString(undefined, {\n weekday: 'long',\n month: 'short',\n day: 'numeric',\n })}\n </div>\n <ul className=\"space-y-1\">\n {list.map((e) => (\n <li key={e.id}>\n <button\n type=\"button\"\n onClick={() => onEventClick?.(e)}\n className=\"flex w-full items-start gap-3 rounded-md p-2 text-left transition-colors hover:bg-muted\"\n >\n <span\n aria-hidden=\"true\"\n className=\"mt-1 h-2 w-2 shrink-0 rounded-full\"\n style={{ background: e.color || 'var(--color-primary)' }}\n />\n <span className=\"flex-1\">\n <span className=\"block text-sm font-medium\">{e.title ?? '(no title)'}</span>\n <span className=\"block text-xs text-muted-foreground tabular-nums\">\n {e.allDay\n ? 'All day'\n : `${e.start.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} – ${e.end.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`}\n </span>\n </span>\n </button>\n </li>\n ))}\n </ul>\n </li>\n );\n })}\n </ul>\n );\n}\n","import { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\n\nexport type GradientTextDirection = 'r' | 'l' | 't' | 'b' | 'tr' | 'br' | 'tl' | 'bl';\nexport type GradientTextTag = 'span' | 'div' | 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\nexport interface GradientTextProps extends HTMLAttributes<HTMLElement> {\n from?: string;\n via?: string;\n to?: string;\n direction?: GradientTextDirection;\n animated?: boolean;\n as?: GradientTextTag;\n}\n\nconst DIR_TO_DEG: Record<GradientTextDirection, number> = {\n r: 90,\n l: 270,\n t: 0,\n b: 180,\n tr: 45,\n br: 135,\n bl: 225,\n tl: 315,\n};\n\n/**\n * Decorative gradient-filled text via `background-clip: text`. Optional\n * `animated` pans the gradient on a 4s loop (skipped under\n * `prefers-reduced-motion` via the global `motion-reduce:` CSS guard).\n */\nexport const GradientText = forwardRef<HTMLElement, GradientTextProps>(\n function GradientText(\n {\n from = 'var(--color-primary)',\n via,\n to = 'var(--color-accent, var(--color-primary))',\n direction = 'r',\n animated,\n as = 'span',\n className,\n style,\n children,\n ...rest\n },\n ref,\n ) {\n const stops = via ? `${from}, ${via}, ${to}` : `${from}, ${to}`;\n const Tag = as as ElementType;\n return (\n <Tag\n ref={ref as React.Ref<HTMLElement>}\n className={cn(\n 'inline-block bg-clip-text text-transparent',\n animated && 'motion-safe:animate-[gradient-shift_4s_ease-in-out_infinite]',\n className,\n )}\n style={{\n backgroundImage: `linear-gradient(${DIR_TO_DEG[direction]}deg, ${stops})`,\n backgroundSize: animated ? '200% 100%' : undefined,\n ...style,\n }}\n {...rest}\n >\n {children}\n </Tag>\n );\n },\n);\n","import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface CountUpProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {\n to: number;\n from?: number;\n duration?: number;\n easing?: (t: number) => number;\n format?: (value: number) => ReactNode;\n triggerOnView?: boolean;\n as?: 'span' | 'div' | 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\nconst easeOutCubic = (t: number) => 1 - Math.pow(1 - t, 3);\nconst defaultFormat = (v: number) => v.toFixed(0);\n\nfunction prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n}\n\n/**\n * Number that animates up to `to` on mount (or on enter-viewport when\n * `triggerOnView`). rAF tween; respects `prefers-reduced-motion` (jumps\n * straight to `to`).\n */\nexport const CountUp = forwardRef<HTMLElement, CountUpProps>(function CountUp(\n {\n to,\n from = 0,\n duration = 1500,\n easing = easeOutCubic,\n format = defaultFormat,\n triggerOnView = false,\n as = 'span',\n className,\n ...rest\n },\n ref,\n) {\n const [value, setValue] = useState(triggerOnView ? from : to);\n const elRef = useRef<HTMLElement | null>(null);\n const startedRef = useRef(false);\n\n useEffect(() => {\n if (prefersReducedMotion()) {\n setValue(to);\n return;\n }\n if (triggerOnView && typeof IntersectionObserver !== 'undefined' && elRef.current) {\n const obs = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting && !startedRef.current) {\n startedRef.current = true;\n animate();\n }\n }\n },\n { threshold: 0.2 },\n );\n obs.observe(elRef.current);\n return () => obs.disconnect();\n }\n animate();\n\n function animate() {\n const start = performance.now();\n let raf = 0;\n const tick = (now: number) => {\n const t = Math.min(1, (now - start) / duration);\n const eased = easing(t);\n setValue(from + (to - from) * eased);\n if (t < 1) raf = requestAnimationFrame(tick);\n };\n raf = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(raf);\n }\n }, [to, from, duration, easing, triggerOnView]);\n\n const Tag = as as ElementType;\n return (\n <Tag\n ref={(el: HTMLElement | null) => {\n elRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLElement | null>).current = el;\n }}\n className={cn('tabular-nums', className)}\n {...rest}\n >\n {format(value)}\n </Tag>\n );\n});\n","import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface AnimatedNumberProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {\n value: number;\n duration?: number;\n easing?: (t: number) => number;\n format?: (value: number) => ReactNode;\n as?: 'span' | 'div' | 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\nconst easeOutCubic = (t: number) => 1 - Math.pow(1 - t, 3);\nconst defaultFormat = (v: number) => v.toFixed(0);\n\nfunction prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n}\n\n/**\n * Animates the displayed number whenever `value` changes. rAF tween between\n * the previous and new value. Respects `prefers-reduced-motion`.\n */\nexport const AnimatedNumber = forwardRef<HTMLElement, AnimatedNumberProps>(\n function AnimatedNumber(\n {\n value,\n duration = 500,\n easing = easeOutCubic,\n format = defaultFormat,\n as = 'span',\n className,\n ...rest\n },\n ref,\n ) {\n const [display, setDisplay] = useState(value);\n const fromRef = useRef(value);\n\n useEffect(() => {\n if (prefersReducedMotion()) {\n setDisplay(value);\n fromRef.current = value;\n return;\n }\n const from = fromRef.current;\n const to = value;\n if (from === to) return;\n const start = performance.now();\n let raf = 0;\n const tick = (now: number) => {\n const t = Math.min(1, (now - start) / duration);\n const eased = easing(t);\n const next = from + (to - from) * eased;\n setDisplay(next);\n if (t < 1) raf = requestAnimationFrame(tick);\n else fromRef.current = to;\n };\n raf = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(raf);\n }, [value, duration, easing]);\n\n const Tag = as as ElementType;\n return (\n <Tag\n ref={ref as React.Ref<HTMLElement>}\n className={cn('tabular-nums', className)}\n {...rest}\n >\n {format(display)}\n </Tag>\n );\n },\n);\n","import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ElementType,\n type HTMLAttributes,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport type ScrollRevealEffect =\n | 'fade'\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n | 'zoom';\n\nexport interface ScrollRevealProps extends HTMLAttributes<HTMLElement> {\n effect?: ScrollRevealEffect;\n duration?: number;\n delay?: number;\n threshold?: number;\n once?: boolean;\n as?: 'div' | 'section' | 'article' | 'span' | 'li';\n}\n\nconst HIDDEN_TRANSFORMS: Record<ScrollRevealEffect, string> = {\n fade: '',\n 'slide-up': 'translateY(20px)',\n 'slide-down': 'translateY(-20px)',\n 'slide-left': 'translateX(20px)',\n 'slide-right': 'translateX(-20px)',\n zoom: 'scale(0.95)',\n};\n\n/**\n * Reveal children on enter-viewport. CSS-driven (opacity + transform);\n * IntersectionObserver toggles `data-revealed`. Honors\n * `prefers-reduced-motion` (no transform / opacity at all — content visible\n * from the start).\n */\nexport const ScrollReveal = forwardRef<HTMLElement, ScrollRevealProps>(\n function ScrollReveal(\n {\n effect = 'fade',\n duration = 600,\n delay = 0,\n threshold = 0.1,\n once = true,\n as = 'div',\n className,\n style,\n children,\n ...rest\n },\n ref,\n ) {\n const [revealed, setRevealed] = useState(false);\n const elRef = useRef<HTMLElement | null>(null);\n const reduced =\n typeof window !== 'undefined' &&\n (window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false);\n\n useEffect(() => {\n if (reduced) {\n setRevealed(true);\n return;\n }\n const el = elRef.current;\n if (!el || typeof IntersectionObserver === 'undefined') {\n setRevealed(true);\n return;\n }\n const obs = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setRevealed(true);\n if (once) obs.disconnect();\n } else if (!once) {\n setRevealed(false);\n }\n }\n },\n { threshold },\n );\n obs.observe(el);\n return () => obs.disconnect();\n }, [reduced, threshold, once]);\n\n const Tag = as as ElementType;\n return (\n <Tag\n ref={(el: HTMLElement | null) => {\n elRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLElement | null>).current = el;\n }}\n data-revealed={revealed || undefined}\n className={cn(className)}\n style={{\n opacity: revealed || reduced ? 1 : 0,\n transform: revealed || reduced ? 'none' : HIDDEN_TRANSFORMS[effect],\n transition: reduced ? undefined : `opacity ${duration}ms ease-out ${delay}ms, transform ${duration}ms ease-out ${delay}ms`,\n ...style,\n }}\n {...rest}\n >\n {children}\n </Tag>\n );\n },\n);\n","import {\n forwardRef,\n useRef,\n useState,\n type ElementType,\n type HTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface TiltProps extends HTMLAttributes<HTMLElement> {\n maxAngle?: number;\n perspective?: number;\n glare?: boolean;\n scale?: number;\n as?: 'div' | 'section' | 'article' | 'span';\n}\n\ninterface TiltState {\n rotateX: number;\n rotateY: number;\n glareX: number;\n glareY: number;\n active: boolean;\n}\n\n/**\n * 3D card tilt — `rotateX`/`rotateY` from cursor position. Disabled under\n * `prefers-reduced-motion`. Optional `glare` paints a soft highlight that\n * follows the cursor.\n */\nexport const Tilt = forwardRef<HTMLElement, TiltProps>(function Tilt(\n {\n maxAngle = 12,\n perspective = 800,\n glare,\n scale = 1,\n as = 'div',\n className,\n style,\n children,\n onPointerMove,\n onPointerLeave,\n ...rest\n },\n ref,\n) {\n const elRef = useRef<HTMLElement | null>(null);\n const [tilt, setTilt] = useState<TiltState>({\n rotateX: 0,\n rotateY: 0,\n glareX: 50,\n glareY: 50,\n active: false,\n });\n\n const reduced =\n typeof window !== 'undefined' &&\n (window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false);\n\n const handleMove = (e: ReactPointerEvent<HTMLElement>) => {\n onPointerMove?.(e);\n if (reduced) return;\n const el = elRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const x = (e.clientX - rect.left) / rect.width;\n const y = (e.clientY - rect.top) / rect.height;\n const rotateY = (x - 0.5) * 2 * maxAngle;\n const rotateX = (0.5 - y) * 2 * maxAngle;\n setTilt({ rotateX, rotateY, glareX: x * 100, glareY: y * 100, active: true });\n };\n\n const handleLeave = (e: ReactPointerEvent<HTMLElement>) => {\n onPointerLeave?.(e);\n setTilt({ rotateX: 0, rotateY: 0, glareX: 50, glareY: 50, active: false });\n };\n\n const Tag = as as ElementType;\n return (\n <Tag\n ref={(el: HTMLElement | null) => {\n elRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLElement | null>).current = el;\n }}\n onPointerMove={handleMove}\n onPointerLeave={handleLeave}\n className={cn('relative', className)}\n style={{\n perspective,\n transform: tilt.active && !reduced\n ? `rotateX(${tilt.rotateX}deg) rotateY(${tilt.rotateY}deg) scale(${scale})`\n : 'rotateX(0) rotateY(0) scale(1)',\n transition: tilt.active ? 'transform 80ms ease-out' : 'transform 220ms ease-out',\n transformStyle: 'preserve-3d',\n ...style,\n }}\n {...rest}\n >\n {children}\n {glare && !reduced && tilt.active && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 rounded-[inherit] mix-blend-overlay\"\n style={{\n background: `radial-gradient(circle at ${tilt.glareX}% ${tilt.glareY}%, rgba(255,255,255,0.35) 0%, transparent 50%)`,\n }}\n />\n )}\n </Tag>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport type MarqueeDirection = 'left' | 'right' | 'up' | 'down';\n\nexport interface MarqueeProps extends HTMLAttributes<HTMLDivElement> {\n direction?: MarqueeDirection;\n /** Seconds for one full traversal of the inner content. */\n speed?: number;\n pauseOnHover?: boolean;\n gap?: number;\n children: ReactNode;\n}\n\n/**\n * Continuously scrolls children. Content is duplicated once for a seamless\n * loop animated by `-50%`. Pause-on-hover toggles `animation-play-state`.\n */\nexport const Marquee = forwardRef<HTMLDivElement, MarqueeProps>(function Marquee(\n { direction = 'left', speed = 30, pauseOnHover = true, gap = 48, className, children, ...rest },\n ref,\n) {\n const horizontal = direction === 'left' || direction === 'right';\n const reverse = direction === 'right' || direction === 'down';\n const animationName = horizontal ? 'marquee-x' : 'marquee-y';\n\n return (\n <div\n ref={ref}\n role=\"marquee\"\n data-direction={direction}\n className={cn(\n 'group/marquee relative overflow-hidden',\n horizontal ? 'flex' : 'flex flex-col',\n className,\n )}\n style={{ '--marquee-gap': `${gap}px` } as React.CSSProperties}\n {...rest}\n >\n {[0, 1].map((i) => (\n <div\n key={i}\n aria-hidden={i === 1}\n className={cn(\n 'shrink-0 motion-safe:animate-(--marquee-anim) motion-reduce:animation-none',\n horizontal ? 'flex shrink-0 items-center' : 'flex flex-col items-center',\n pauseOnHover && 'group-hover/marquee:[animation-play-state:paused]',\n )}\n style={{\n gap,\n paddingInline: horizontal ? gap / 2 : 0,\n paddingBlock: horizontal ? 0 : gap / 2,\n animation: `${animationName} ${speed}s linear infinite ${reverse ? 'reverse' : 'normal'}`,\n }}\n >\n {children}\n </div>\n ))}\n </div>\n );\n});\n","import {\n forwardRef,\n useEffect,\n useMemo,\n useState,\n type ElementType,\n type HTMLAttributes,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface TypewriterProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {\n text: string | string[];\n typeSpeed?: number;\n deleteSpeed?: number;\n pauseBetween?: number;\n loop?: boolean;\n cursor?: boolean;\n cursorChar?: string;\n as?: 'span' | 'div' | 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\n/**\n * Char-by-char typewriter. Single string types once; array of strings cycles\n * through (type → pause → delete → next). `prefers-reduced-motion` short-\n * circuits to the full string.\n */\nexport const Typewriter = forwardRef<HTMLElement, TypewriterProps>(function Typewriter(\n {\n text,\n typeSpeed = 60,\n deleteSpeed = 40,\n pauseBetween = 1500,\n loop,\n cursor = true,\n cursorChar = '│',\n as = 'span',\n className,\n ...rest\n },\n ref,\n) {\n const phrases = useMemo(() => (Array.isArray(text) ? text : [text]), [text]);\n const shouldLoop = loop ?? phrases.length > 1;\n const reduced =\n typeof window !== 'undefined' &&\n (window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false);\n\n const [phraseIndex, setPhraseIndex] = useState(0);\n const [charIndex, setCharIndex] = useState(0);\n const [deleting, setDeleting] = useState(false);\n\n useEffect(() => {\n if (reduced) return;\n const current = phrases[phraseIndex] ?? '';\n let timeout: number;\n\n if (!deleting) {\n // Typing phase.\n if (charIndex < current.length) {\n timeout = window.setTimeout(() => setCharIndex(charIndex + 1), typeSpeed);\n } else {\n // Done typing this phrase.\n if (phrases.length === 1 && !shouldLoop) return;\n timeout = window.setTimeout(() => setDeleting(true), pauseBetween);\n }\n } else {\n // Deleting phase.\n if (charIndex > 0) {\n timeout = window.setTimeout(() => setCharIndex(charIndex - 1), deleteSpeed);\n } else {\n // Move to next phrase.\n const nextIdx = (phraseIndex + 1) % phrases.length;\n if (!shouldLoop && nextIdx === 0) return;\n setDeleting(false);\n setPhraseIndex(nextIdx);\n }\n }\n return () => window.clearTimeout(timeout);\n }, [charIndex, deleting, phraseIndex, phrases, typeSpeed, deleteSpeed, pauseBetween, shouldLoop, reduced]);\n\n const fullText = reduced\n ? (Array.isArray(text) ? text[0] ?? '' : text)\n : (phrases[phraseIndex] ?? '').slice(0, charIndex);\n\n const Tag = as as ElementType;\n return (\n <Tag ref={ref as React.Ref<HTMLElement>} className={cn('inline-block', className)} {...rest}>\n {fullText}\n {cursor && !reduced && (\n <span\n aria-hidden=\"true\"\n className=\"ml-0.5 inline-block motion-safe:animate-[blink-caret_1s_step-end_infinite]\"\n >\n {cursorChar}\n </span>\n )}\n </Tag>\n );\n});\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { Portal } from '../../primitives';\n\nexport interface ConfettiOrigin {\n x?: number;\n y?: number;\n}\n\nexport interface ConfettiFireOptions {\n particleCount?: number;\n colors?: string[];\n spread?: number;\n velocity?: number;\n origin?: ConfettiOrigin;\n}\n\nexport interface ConfettiProps {\n particleCount?: number;\n colors?: string[];\n gravity?: number;\n spread?: number;\n velocity?: number;\n lifetime?: number;\n origin?: ConfettiOrigin;\n /** Auto-fire on mount. Useful for one-shot confetti on a route landing. */\n autoFire?: boolean;\n}\n\nexport interface ConfettiHandle {\n fire: (opts?: ConfettiFireOptions) => void;\n}\n\ninterface Particle {\n id: number;\n x: number;\n y: number;\n vx: number;\n vy: number;\n rotation: number;\n rotationSpeed: number;\n size: number;\n color: string;\n shape: 'rect' | 'circle';\n bornAt: number;\n}\n\nconst DEFAULT_COLORS = ['#ef4444', '#f59e0b', '#10b981', '#3b82f6', '#a855f7', '#ec4899'];\n\nlet nextParticleId = 0;\n\n/**\n * Confetti burst. Imperative `fire()` via ref or `autoFire` on mount. SVG\n * particles animated by rAF. No-op under `prefers-reduced-motion`.\n */\nexport const Confetti = forwardRef<ConfettiHandle, ConfettiProps>(function Confetti(\n {\n particleCount = 60,\n colors = DEFAULT_COLORS,\n gravity = 1200,\n spread = 60,\n velocity = 500,\n lifetime = 3000,\n origin,\n autoFire,\n },\n forwardedRef,\n) {\n const [particles, setParticles] = useState<Particle[]>([]);\n const rafRef = useRef<number | null>(null);\n const lastTimeRef = useRef<number>(0);\n const reducedRef = useRef(\n typeof window !== 'undefined' &&\n (window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false),\n );\n\n const spawn = useCallback(\n (opts?: ConfettiFireOptions) => {\n if (reducedRef.current) return;\n const count = opts?.particleCount ?? particleCount;\n const palette = opts?.colors ?? colors;\n const sp = opts?.spread ?? spread;\n const vel = opts?.velocity ?? velocity;\n const o = opts?.origin ?? origin;\n const x = o?.x ?? (typeof window !== 'undefined' ? window.innerWidth / 2 : 200);\n const y = o?.y ?? (typeof window !== 'undefined' ? window.innerHeight / 2 : 200);\n const burst: Particle[] = [];\n const now = performance.now();\n for (let i = 0; i < count; i++) {\n // Angle: upward (-90deg) ± spread/2.\n const angle = (-Math.PI / 2) + ((Math.random() - 0.5) * (sp * Math.PI)) / 180;\n const speed = vel * (0.7 + Math.random() * 0.6);\n burst.push({\n id: ++nextParticleId,\n x,\n y,\n vx: Math.cos(angle) * speed + (Math.random() - 0.5) * 60,\n vy: Math.sin(angle) * speed,\n rotation: Math.random() * 360,\n rotationSpeed: (Math.random() - 0.5) * 720,\n size: 6 + Math.random() * 6,\n color: palette[Math.floor(Math.random() * palette.length)] ?? '#000',\n shape: Math.random() > 0.5 ? 'rect' : 'circle',\n bornAt: now,\n });\n }\n setParticles((prev) => [...prev, ...burst]);\n },\n [particleCount, colors, spread, velocity, origin],\n );\n\n useImperativeHandle(forwardedRef, () => ({ fire: spawn }), [spawn]);\n\n useEffect(() => {\n if (autoFire) spawn();\n }, [autoFire, spawn]);\n\n // Animation loop.\n useEffect(() => {\n if (particles.length === 0) return;\n\n const tick = (now: number) => {\n const last = lastTimeRef.current || now;\n const dt = (now - last) / 1000;\n lastTimeRef.current = now;\n const viewportH = typeof window !== 'undefined' ? window.innerHeight : 800;\n setParticles((prev) =>\n prev\n .map((p) => ({\n ...p,\n x: p.x + p.vx * dt,\n y: p.y + p.vy * dt,\n vy: p.vy + gravity * dt,\n rotation: p.rotation + p.rotationSpeed * dt,\n }))\n .filter((p) => p.y < viewportH + 80 && now - p.bornAt < lifetime),\n );\n rafRef.current = requestAnimationFrame(tick);\n };\n rafRef.current = requestAnimationFrame(tick);\n return () => {\n if (rafRef.current != null) cancelAnimationFrame(rafRef.current);\n lastTimeRef.current = 0;\n };\n }, [particles.length, gravity, lifetime]);\n\n if (particles.length === 0) return null;\n\n return (\n <Portal>\n <svg\n aria-hidden=\"true\"\n className=\"pointer-events-none fixed inset-0 z-toast\"\n style={{ width: '100vw', height: '100vh' }}\n >\n {particles.map((p) =>\n p.shape === 'rect' ? (\n <rect\n key={p.id}\n x={p.x - p.size / 2}\n y={p.y - p.size / 2}\n width={p.size}\n height={p.size * 0.5}\n fill={p.color}\n transform={`rotate(${p.rotation} ${p.x} ${p.y})`}\n />\n ) : (\n <circle key={p.id} cx={p.x} cy={p.y} r={p.size / 2} fill={p.color} />\n ),\n )}\n </svg>\n </Portal>\n );\n});\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport type AnnotationTone = 'note' | 'comment' | 'suggestion' | 'issue' | 'resolved';\n\nexport interface AnnotationMarkerProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Wrapped text or content the annotation refers to. Omit for a standalone pin. */\n children?: ReactNode;\n /** Numeric badge / index shown in the pin. */\n index?: number | string;\n /** Tone — drives the highlight color. */\n tone?: AnnotationTone;\n /** Show the marker as a small floating pin without underline. */\n pinOnly?: boolean;\n /** Marks the annotation as resolved (dimmed, struck-through highlight). */\n resolved?: boolean;\n /** Marks the annotation as the currently focused / hovered one. */\n active?: boolean;\n}\n\nconst TONE_HIGHLIGHT: Record<AnnotationTone, string> = {\n note: 'bg-info-soft/60 decoration-info',\n comment: 'bg-primary-soft/60 decoration-primary',\n suggestion: 'bg-success-soft/60 decoration-success',\n issue: 'bg-destructive-soft/60 decoration-destructive',\n resolved: 'bg-muted decoration-muted-foreground',\n};\n\nconst TONE_PIN: Record<AnnotationTone, string> = {\n note: 'bg-info text-info-foreground',\n comment: 'bg-primary text-primary-foreground',\n suggestion: 'bg-success text-success-foreground',\n issue: 'bg-destructive text-destructive-foreground',\n resolved: 'bg-muted-foreground text-background',\n};\n\n/**\n * Wraps content (or stands alone) to mark an annotation. Renders as a button\n * so it's keyboard-focusable; click handlers fire the open-thread flow.\n * `pinOnly` collapses to just the small numbered chip — useful for margin\n * markers or floating layers (set `position` via `className`).\n */\nexport const AnnotationMarker = forwardRef<HTMLButtonElement, AnnotationMarkerProps>(\n (\n { children, index, tone = 'comment', pinOnly, resolved, active, className, ...props },\n ref,\n ) => {\n const effectiveTone: AnnotationTone = resolved ? 'resolved' : tone;\n const pin = (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full px-1 text-[10px] font-semibold leading-none',\n TONE_PIN[effectiveTone],\n )}\n >\n {index ?? ''}\n </span>\n );\n\n if (pinOnly || children == null) {\n return (\n <button\n ref={ref}\n type=\"button\"\n data-tone={effectiveTone}\n data-active={active ? '' : undefined}\n className={cn(\n 'inline-flex items-center gap-1 align-middle rounded-full ring-1 ring-transparent transition-shadow',\n active && 'ring-ring',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...props}\n >\n {pin}\n </button>\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-tone={effectiveTone}\n data-active={active ? '' : undefined}\n className={cn(\n 'group inline-flex items-baseline gap-1 align-baseline rounded-sm px-0.5 transition-colors',\n 'underline decoration-2 underline-offset-4',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n TONE_HIGHLIGHT[effectiveTone],\n resolved && 'line-through opacity-70',\n active && 'ring-1 ring-ring',\n className,\n )}\n {...props}\n >\n <span>{children}</span>\n {pin}\n </button>\n );\n },\n);\nAnnotationMarker.displayName = 'AnnotationMarker';\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { SmilePlus } from 'lucide-react';\nimport { cn } from '../../utils';\n\nexport interface Reaction {\n /** Stable id (typically the emoji or shortcode). */\n key: string;\n /** Emoji or icon node displayed in the chip. */\n emoji: ReactNode;\n /** Total count of users who reacted. */\n count: number;\n /** Whether the current viewer has reacted with this. */\n reactedByMe?: boolean;\n /** Optional list of user names — surfaced in the chip's `title`. */\n users?: string[];\n}\n\nexport interface ReactionBarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n reactions: Reaction[];\n /** Click handler for an existing reaction chip. Toggles user's reaction. */\n onReact?: (key: string) => void;\n /** Click handler for the trailing \"add\" button. Opens a picker. */\n onAdd?: () => void;\n /** Hide the trailing \"add reaction\" button. */\n hideAddButton?: boolean;\n /** Compact mode — emoji only, no counts. */\n compact?: boolean;\n /** Hide chips with `count === 0`. Default true. */\n hideEmpty?: boolean;\n}\n\ninterface ChipProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n reactedByMe?: boolean;\n}\n\nfunction ReactionChip({ reactedByMe, className, ...rest }: ChipProps) {\n return (\n <button\n type=\"button\"\n data-active={reactedByMe ? '' : undefined}\n className={cn(\n 'inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs leading-none transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n reactedByMe\n ? 'border-primary bg-primary-soft text-primary-soft-foreground'\n : 'border-border bg-background hover:bg-muted',\n className,\n )}\n {...rest}\n />\n );\n}\n\n/**\n * Row of reaction chips with optional add-reaction button. Each chip toggles\n * `onReact(key)`; the trailing `+` opens a picker via `onAdd`. Pair with\n * `forms/ReactionPicker` to wire the add flow.\n */\nexport const ReactionBar = forwardRef<HTMLDivElement, ReactionBarProps>(\n (\n {\n reactions,\n onReact,\n onAdd,\n hideAddButton,\n compact,\n hideEmpty = true,\n className,\n ...props\n },\n ref,\n ) => {\n const visible = hideEmpty ? reactions.filter((r) => r.count > 0) : reactions;\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label=\"Reactions\"\n className={cn('inline-flex flex-wrap items-center gap-1', className)}\n {...props}\n >\n {visible.map((r) => (\n <ReactionChip\n key={r.key}\n reactedByMe={r.reactedByMe}\n title={r.users?.length ? r.users.join(', ') : undefined}\n onClick={() => onReact?.(r.key)}\n >\n <span className=\"text-sm leading-none\">{r.emoji}</span>\n {!compact && <span className=\"font-medium tabular-nums\">{r.count}</span>}\n </ReactionChip>\n ))}\n {!hideAddButton && onAdd && (\n <button\n type=\"button\"\n onClick={onAdd}\n aria-label=\"Add reaction\"\n className={cn(\n 'inline-flex items-center justify-center rounded-full border border-dashed border-border px-2 py-0.5 text-muted-foreground transition-colors',\n 'hover:bg-muted hover:text-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n >\n <SmilePlus className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n );\n },\n);\nReactionBar.displayName = 'ReactionBar';\n","import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Check, CheckCheck, Clock, AlertTriangle } from 'lucide-react';\nimport { cn } from '../../utils';\n\nexport type ChatSide = 'start' | 'end';\nexport type ChatStatus = 'sending' | 'sent' | 'delivered' | 'read' | 'failed';\nexport type ChatTone = 'default' | 'primary' | 'system' | 'subtle';\n\nexport interface ChatBubbleProps extends HTMLAttributes<HTMLDivElement> {\n /** Which side of the conversation. `start` = them, `end` = me. */\n side?: ChatSide;\n /** Bubble color tone. `system` is centered + muted (e.g. \"Alex joined\"). */\n tone?: ChatTone;\n /** Avatar slot (rendered next to the bubble on the same side). */\n avatar?: ReactNode;\n /** Author label (rendered above the bubble). */\n author?: ReactNode;\n /** Timestamp (rendered next to the status row). */\n timestamp?: ReactNode;\n /** Delivery state. Hidden when `side === 'start'` by default. */\n status?: ChatStatus;\n /** Force-show status even on the inbound side. */\n showStatusOnStart?: boolean;\n /** Hide the bubble's tail (for stacked / grouped messages). */\n tailless?: boolean;\n /** Reactions / footer slot (e.g. `<ReactionBar />`). */\n footer?: ReactNode;\n /** Bubble body. */\n children: ReactNode;\n}\n\nconst TONE_BASE: Record<ChatTone, string> = {\n default: 'bg-muted text-foreground',\n primary: 'bg-primary text-primary-foreground',\n system: 'bg-transparent text-muted-foreground italic',\n subtle: 'bg-card text-card-foreground border border-border',\n};\n\nconst STATUS_ICON: Record<ChatStatus, ReactNode> = {\n sending: <Clock className=\"h-3 w-3\" />,\n sent: <Check className=\"h-3 w-3\" />,\n delivered: <CheckCheck className=\"h-3 w-3\" />,\n read: <CheckCheck className=\"h-3 w-3 text-info\" />,\n failed: <AlertTriangle className=\"h-3 w-3 text-destructive\" />,\n};\n\n/**\n * Single chat message bubble. Compose `<ChatBubble side=\"end\" tone=\"primary\"\n * status=\"read\" timestamp=\"9:42 AM\">…</ChatBubble>` inside a `MessageList`.\n * Use `system` tone for join / leave / metadata rows. Pair the `footer` slot\n * with `display/ReactionBar`.\n */\nexport const ChatBubble = forwardRef<HTMLDivElement, ChatBubbleProps>(\n (\n {\n side = 'start',\n tone,\n avatar,\n author,\n timestamp,\n status,\n showStatusOnStart,\n tailless,\n footer,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const isEnd = side === 'end';\n const effectiveTone: ChatTone = tone ?? (isEnd ? 'primary' : 'default');\n const isSystem = effectiveTone === 'system';\n const showStatus = !!status && (isEnd || showStatusOnStart);\n\n if (isSystem) {\n return (\n <div\n ref={ref}\n data-side={side}\n className={cn('flex w-full justify-center', className)}\n {...props}\n >\n <div className={cn('text-center text-xs', TONE_BASE.system)}>{children}</div>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n data-side={side}\n className={cn(\n 'flex w-full gap-2',\n isEnd ? 'flex-row-reverse' : 'flex-row',\n className,\n )}\n {...props}\n >\n {avatar && <div className=\"shrink-0 self-end\">{avatar}</div>}\n <div\n className={cn(\n 'flex max-w-[75%] flex-col gap-1',\n isEnd ? 'items-end' : 'items-start',\n )}\n >\n {author && (\n <div className=\"text-xs font-medium text-muted-foreground\">{author}</div>\n )}\n <div\n className={cn(\n 'relative inline-block px-3 py-2 text-sm break-words',\n TONE_BASE[effectiveTone],\n tailless ? 'rounded-2xl' : isEnd ? 'rounded-2xl rounded-br-sm' : 'rounded-2xl rounded-bl-sm',\n )}\n >\n {children}\n </div>\n {(timestamp || showStatus) && (\n <div\n className={cn(\n 'flex items-center gap-1 text-[11px] text-muted-foreground',\n isEnd ? 'flex-row-reverse' : 'flex-row',\n )}\n >\n {timestamp && <span>{timestamp}</span>}\n {showStatus && status && (\n <span aria-label={`Status: ${status}`}>{STATUS_ICON[status]}</span>\n )}\n </div>\n )}\n {footer && <div className={cn(isEnd && 'self-end')}>{footer}</div>}\n </div>\n </div>\n );\n },\n);\nChatBubble.displayName = 'ChatBubble';\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils';\n\nexport interface MessageListHandle {\n scrollToBottom: (behavior?: ScrollBehavior) => void;\n isAtBottom: () => boolean;\n}\n\nexport interface MessageListProps extends HTMLAttributes<HTMLDivElement> {\n /** Slot rendered above the message stream (e.g. \"load older\"). */\n header?: ReactNode;\n /** Slot rendered below the message stream (e.g. typing indicator). */\n footer?: ReactNode;\n /** Auto-scroll to bottom when children change *and* the viewer is near\n * the bottom. Default true. */\n stickToBottom?: boolean;\n /** Threshold (px) considered \"at bottom\" for stickiness. Default 32. */\n bottomThreshold?: number;\n /** Show a floating \"jump to bottom\" button when scrolled away. Default true. */\n showJumpToBottom?: boolean;\n /** Reverse-render messages (newest at top). v1 keeps natural top→bottom. */\n reverse?: boolean;\n children: ReactNode;\n}\n\nexport interface DaySeparatorProps extends HTMLAttributes<HTMLDivElement> {\n /** Label (e.g. \"Today\", \"Yesterday\", \"Mar 5\"). */\n label: ReactNode;\n}\n\nexport const DaySeparator = forwardRef<HTMLDivElement, DaySeparatorProps>(\n ({ label, className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"separator\"\n className={cn('flex items-center gap-3 py-2', className)}\n {...props}\n >\n <span className=\"h-px flex-1 bg-border\" aria-hidden=\"true\" />\n <span className=\"text-[11px] font-medium uppercase tracking-wide text-muted-foreground\">\n {label}\n </span>\n <span className=\"h-px flex-1 bg-border\" aria-hidden=\"true\" />\n </div>\n ),\n);\nDaySeparator.displayName = 'MessageList.DaySeparator';\n\nconst MessageListInner = forwardRef<MessageListHandle, MessageListProps>(\n (\n {\n header,\n footer,\n stickToBottom = true,\n bottomThreshold = 32,\n showJumpToBottom = true,\n reverse: _reverse,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n void _reverse;\n const scrollerRef = useRef<HTMLDivElement | null>(null);\n const [atBottom, setAtBottom] = useState(true);\n\n const isNearBottom = useCallback(() => {\n const el = scrollerRef.current;\n if (!el) return true;\n return el.scrollHeight - el.clientHeight - el.scrollTop <= bottomThreshold;\n }, [bottomThreshold]);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior = 'smooth') => {\n const el = scrollerRef.current;\n if (!el) return;\n el.scrollTo({ top: el.scrollHeight, behavior });\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({ scrollToBottom, isAtBottom: isNearBottom }),\n [scrollToBottom, isNearBottom],\n );\n\n useLayoutEffect(() => {\n if (stickToBottom && isNearBottom()) scrollToBottom('auto');\n }, [children, stickToBottom, isNearBottom, scrollToBottom]);\n\n useEffect(() => {\n const el = scrollerRef.current;\n if (!el) return;\n const onScroll = () => setAtBottom(isNearBottom());\n el.addEventListener('scroll', onScroll, { passive: true });\n onScroll();\n return () => el.removeEventListener('scroll', onScroll);\n }, [isNearBottom]);\n\n return (\n <div className={cn('relative flex h-full min-h-0 flex-col', className)} {...props}>\n {header && <div className=\"shrink-0\">{header}</div>}\n <div\n ref={scrollerRef}\n className=\"flex-1 min-h-0 overflow-y-auto px-3 py-3\"\n role=\"log\"\n aria-live=\"polite\"\n aria-relevant=\"additions\"\n >\n <div className=\"flex flex-col gap-2\">{children}</div>\n </div>\n {footer && <div className=\"shrink-0 border-t border-border px-3 py-2\">{footer}</div>}\n {showJumpToBottom && !atBottom && (\n <button\n type=\"button\"\n onClick={() => scrollToBottom('smooth')}\n aria-label=\"Jump to latest\"\n className={cn(\n 'absolute bottom-3 right-3 inline-flex h-9 w-9 items-center justify-center rounded-full',\n 'border border-border bg-background text-foreground shadow-md',\n 'hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n );\n },\n);\nMessageListInner.displayName = 'MessageList';\n\ntype MessageListComponent = typeof MessageListInner & {\n DaySeparator: typeof DaySeparator;\n};\n\nexport const MessageList = MessageListInner as MessageListComponent;\nMessageList.DaySeparator = DaySeparator;\n\nexport default MessageList;\n","import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils';\n\nexport interface ThreadViewProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Title for the thread panel header. */\n title?: ReactNode;\n /** Subtitle shown under the title (e.g. \"in #engineering\"). */\n subtitle?: ReactNode;\n /** Parent message — typically a `<ChatBubble />`. */\n parent: ReactNode;\n /** Reply count label. Pass `null` to hide entirely. */\n replyCount?: ReactNode;\n /** Reply nodes (typically `<ChatBubble />` items). */\n children?: ReactNode;\n /** Composer rendered at the bottom of the panel. */\n composer?: ReactNode;\n /** Fires when the close button is clicked. */\n onClose?: () => void;\n /** Hide the close button. */\n hideCloseButton?: boolean;\n}\n\n/**\n * Side-panel layout for a single thread: parent message + reply count\n * separator + reply list + composer. The actual messages stay as\n * children — `ThreadView` only owns the chrome.\n */\nexport const ThreadView = forwardRef<HTMLDivElement, ThreadViewProps>(\n (\n {\n title = 'Thread',\n subtitle,\n parent,\n replyCount,\n children,\n composer,\n onClose,\n hideCloseButton,\n className,\n ...props\n },\n ref,\n ) => {\n const replies =\n Array.isArray(children) ? children : children == null ? [] : [children];\n const count = replies.length;\n\n return (\n <div\n ref={ref}\n role=\"complementary\"\n aria-label=\"Thread\"\n className={cn(\n 'flex h-full min-h-0 flex-col rounded-md border border-border bg-card',\n className,\n )}\n {...props}\n >\n <header className=\"flex items-start justify-between gap-2 border-b border-border px-4 py-3\">\n <div className=\"min-w-0\">\n <div className=\"text-sm font-semibold text-foreground\">{title}</div>\n {subtitle && <div className=\"text-xs text-muted-foreground\">{subtitle}</div>}\n </div>\n {!hideCloseButton && onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close thread\"\n className=\"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </header>\n <div className=\"flex-1 min-h-0 overflow-y-auto px-4 py-3\">\n <div>{parent}</div>\n {replyCount !== null && (\n <div className=\"my-3 flex items-center gap-3\">\n <span className=\"text-xs text-muted-foreground\">\n {replyCount ??\n (count === 0\n ? 'No replies yet'\n : count === 1\n ? '1 reply'\n : `${count} replies`)}\n </span>\n <span aria-hidden=\"true\" className=\"h-px flex-1 bg-border\" />\n </div>\n )}\n <div className=\"flex flex-col gap-2\">{children}</div>\n </div>\n {composer && (\n <div className=\"border-t border-border px-3 py-2\">{composer}</div>\n )}\n </div>\n );\n },\n);\nThreadView.displayName = 'ThreadView';\n","import {\n Children,\n forwardRef,\n isValidElement,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils';\n\nexport interface CommentThreadProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n}\n\nexport interface CommentProps extends HTMLAttributes<HTMLDivElement> {\n /** Avatar / author photo node. */\n avatar?: ReactNode;\n /** Author name. */\n author: ReactNode;\n /** Timestamp / metadata node. */\n timestamp?: ReactNode;\n /** Trailing chip for badges (e.g. \"OP\", \"Author\"). */\n badge?: ReactNode;\n /** Body / content. */\n children: ReactNode;\n /** Footer actions (e.g. Reply / Vote / Report). */\n actions?: ReactNode;\n /** Nested replies — pass `<CommentThread.Comment>` items. */\n replies?: ReactNode;\n /** Initial collapsed state for replies. */\n defaultCollapsed?: boolean;\n /** Mark as the OP / highlighted comment. */\n highlighted?: boolean;\n}\n\nconst CommentThreadInner = forwardRef<HTMLDivElement, CommentThreadProps>(\n ({ children, className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"tree\"\n aria-label=\"Comments\"\n className={cn('flex flex-col gap-3', className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nCommentThreadInner.displayName = 'CommentThread';\n\nexport const Comment = forwardRef<HTMLDivElement, CommentProps>(\n (\n {\n avatar,\n author,\n timestamp,\n badge,\n children,\n actions,\n replies,\n defaultCollapsed = false,\n highlighted,\n className,\n ...props\n },\n ref,\n ) => {\n const [collapsed, setCollapsed] = useState(defaultCollapsed);\n const replyCount = Children.toArray(replies).filter(isValidElement).length;\n const hasReplies = replyCount > 0;\n\n return (\n <div\n ref={ref}\n role=\"treeitem\"\n aria-expanded={hasReplies ? !collapsed : undefined}\n data-highlighted={highlighted ? '' : undefined}\n className={cn(\n 'flex gap-2 rounded-md',\n highlighted && 'bg-primary-soft/30 ring-1 ring-primary/20 p-2',\n className,\n )}\n {...props}\n >\n {/* Avatar + collapse rail */}\n <div className=\"flex flex-col items-center gap-1\">\n <div className=\"shrink-0\">{avatar}</div>\n {hasReplies && (\n <button\n type=\"button\"\n onClick={() => setCollapsed((c) => !c)}\n aria-label={collapsed ? 'Expand replies' : 'Collapse replies'}\n className={cn(\n 'flex flex-1 items-stretch -my-1 group/rail',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-full',\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'mx-auto w-px flex-1 bg-border transition-colors group-hover/rail:bg-foreground/30',\n collapsed && 'opacity-40',\n )}\n />\n </button>\n )}\n </div>\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-baseline gap-x-2 text-sm\">\n <span className=\"font-medium text-foreground\">{author}</span>\n {badge}\n {timestamp && (\n <span className=\"text-xs text-muted-foreground\">{timestamp}</span>\n )}\n </div>\n <div className=\"mt-1 text-sm text-foreground\">{children}</div>\n {actions && (\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n {actions}\n </div>\n )}\n\n {hasReplies && (\n <div className={cn('mt-2', collapsed && 'hidden')}>\n <div className=\"flex flex-col gap-3 border-l border-border pl-3\">\n {replies}\n </div>\n </div>\n )}\n\n {hasReplies && collapsed && (\n <button\n type=\"button\"\n onClick={() => setCollapsed(false)}\n className={cn(\n 'mt-1 inline-flex items-center gap-1 text-xs text-primary hover:underline',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded',\n )}\n >\n <ChevronRight className=\"h-3 w-3\" />\n Show {replyCount} {replyCount === 1 ? 'reply' : 'replies'}\n </button>\n )}\n {hasReplies && !collapsed && (\n <button\n type=\"button\"\n onClick={() => setCollapsed(true)}\n className={cn(\n 'mt-1 inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded',\n )}\n >\n <ChevronDown className=\"h-3 w-3\" />\n Collapse\n </button>\n )}\n </div>\n </div>\n );\n },\n);\nComment.displayName = 'CommentThread.Comment';\n\ntype CommentThreadComponent = typeof CommentThreadInner & {\n Comment: typeof Comment;\n};\n\nexport const CommentThread = CommentThreadInner as CommentThreadComponent;\nCommentThread.Comment = Comment;\n\nexport default CommentThread;\n","import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface ActivityFeedProps extends HTMLAttributes<HTMLOListElement> {\n /** Compact spacing variant. */\n dense?: boolean;\n children: ReactNode;\n}\n\nexport interface ActivityItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Avatar / icon node rendered in the leading column. */\n avatar?: ReactNode;\n /** The activity sentence (actor + verb + target). */\n children: ReactNode;\n /** Timestamp (relative or absolute). */\n timestamp?: ReactNode;\n /** Optional content preview rendered under the sentence\n * (e.g. quoted comment, file name, image). */\n preview?: ReactNode;\n /** Trailing actions slot (e.g. Reply / Like). */\n actions?: ReactNode;\n /** Suppress the connector line under the leading column. */\n last?: boolean;\n}\n\nconst ActivityFeedInner = forwardRef<HTMLOListElement, ActivityFeedProps>(\n ({ dense, children, className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn('flex list-none flex-col', dense ? 'gap-3' : 'gap-5', className)}\n data-dense={dense ? '' : undefined}\n {...props}\n >\n {children}\n </ol>\n ),\n);\nActivityFeedInner.displayName = 'ActivityFeed';\n\nexport const ActivityItem = forwardRef<HTMLLIElement, ActivityItemProps>(\n (\n { avatar, children, timestamp, preview, actions, last, className, ...props },\n ref,\n ) => (\n <li\n ref={ref}\n className={cn('relative flex gap-3', className)}\n data-last={last ? '' : undefined}\n {...props}\n >\n <div className=\"relative flex flex-col items-center\">\n <div className=\"z-raised shrink-0\">{avatar}</div>\n {!last && (\n <span\n aria-hidden=\"true\"\n className=\"mt-1 w-px flex-1 bg-border\"\n />\n )}\n </div>\n <div className=\"min-w-0 flex-1 pb-1\">\n <div className=\"text-sm leading-relaxed text-foreground\">\n {children}\n {timestamp && (\n <span className=\"ml-2 text-xs text-muted-foreground\">{timestamp}</span>\n )}\n </div>\n {preview && (\n <div className=\"mt-1.5 rounded-md border border-border bg-muted/40 px-3 py-2 text-sm text-muted-foreground\">\n {preview}\n </div>\n )}\n {actions && (\n <div className=\"mt-1 flex items-center gap-3 text-xs text-muted-foreground\">\n {actions}\n </div>\n )}\n </div>\n </li>\n ),\n);\nActivityItem.displayName = 'ActivityFeed.Item';\n\ntype ActivityFeedComponent = typeof ActivityFeedInner & {\n Item: typeof ActivityItem;\n};\n\nexport const ActivityFeed = ActivityFeedInner as ActivityFeedComponent;\nActivityFeed.Item = ActivityItem;\n\nexport default ActivityFeed;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/display/heading/Heading.variants.ts","../src/display/heading/Heading.tsx","../src/display/text/Text.variants.ts","../src/display/text/Text.tsx","../src/display/code/Code.variants.ts","../src/display/code/Code.tsx","../src/display/image/Image.tsx","../src/display/avatar/Avatar.variants.ts","../src/display/avatar/Avatar.tsx","../src/display/badge/Badge.variants.ts","../src/display/badge/Badge.tsx","../src/display/separator/Separator.tsx","../src/display/mark/Mark.tsx","../src/display/quote/Quote.tsx","../src/display/card/Card.tsx","../src/display/avatarGroup/AvatarGroup.tsx","../src/display/tooltip/Tooltip.tsx","../src/display/emptyState/EmptyState.tsx","../src/display/stat/Stat.tsx","../src/display/snippet/Snippet.tsx","../src/display/notificationDot/NotificationDot.tsx","../src/display/countBadge/CountBadge.tsx","../src/display/status/Status.tsx","../src/display/keyboardShortcut/KeyboardShortcut.tsx","../src/display/descriptionList/DescriptionList.tsx","../src/display/infoRow/InfoRow.tsx","../src/display/badgeOverlay/BadgeOverlay.tsx","../src/display/sectionHeader/SectionHeader.tsx","../src/display/highlight/Highlight.tsx","../src/display/collapsible/Collapsible.tsx","../src/display/accordion/Accordion.tsx","../src/display/tabs/Tabs.tsx","../src/display/list/List.variants.ts","../src/display/list/List.tsx","../src/display/timeline/Timeline.tsx","../src/display/tree/Tree.tsx","../src/display/table/Table.tsx","../src/display/dataTable/DataTable.tsx","../src/display/carousel/Carousel.tsx","../src/display/swipeActions/SwipeActions.tsx","../src/display/diffViewer/DiffViewer.tsx","../src/display/sparkline/Sparkline.tsx","../src/display/heatmapCalendar/HeatmapCalendar.tsx","../src/display/dataGrid/DataGrid.tsx","../src/display/nodeEditor/NodeEditor.tsx","../src/display/audioWaveform/AudioWaveform.tsx","../src/display/audioPlayer/AudioPlayer.tsx","../src/display/videoPlayer/VideoPlayer.tsx","../src/display/pdfViewer/PDFViewer.tsx","../src/display/scheduleView/ScheduleView.tsx","../src/display/gantt/Gantt.tsx","../src/display/eventCalendar/EventCalendar.tsx","../src/display/gradientText/GradientText.tsx","../src/display/countUp/CountUp.tsx","../src/display/animatedNumber/AnimatedNumber.tsx","../src/display/scrollReveal/ScrollReveal.tsx","../src/display/tilt/Tilt.tsx","../src/display/marquee/Marquee.tsx","../src/display/typewriter/Typewriter.tsx","../src/display/confetti/Confetti.tsx","../src/display/annotationMarker/AnnotationMarker.tsx","../src/display/reactionBar/ReactionBar.tsx","../src/display/chatBubble/ChatBubble.tsx","../src/display/messageList/MessageList.tsx","../src/display/threadView/ThreadView.tsx","../src/display/commentThread/CommentThread.tsx","../src/display/activityFeed/ActivityFeed.tsx"],"names":["forwardRef","jsx","useState","isValidElement","jsxs","Fragment","SIZE","TONE","POS","Collapsible","CollapsibleTrigger","CollapsibleContent","createContext","useContext","Accordion","useMemo","AccordionItem","useId","AccordionTrigger","AccordionContent","Tabs","TabsList","TabsTab","TabsPanel","List","ListItem","Check","Timeline","Children","TimelineItem","Tree","useCallback","TreeGroup","TreeItem","Table","TableHead","TableBody","TableFooter","TableRow","TableHeaderCell","TableCell","TableCaption","Carousel","next","CarouselViewport","CarouselSlides","CarouselSlide","CarouselPrev","CarouselNext","ChevronRight","CarouselDots","CarouselDot","SwipeActions","useRef","DiffViewer","i","j","Sparkline","HeatmapCalendar","DataGrid","useEffect","CellEditor","NodeEditor","TONE_CLASS","AudioWaveform","AudioPlayer","SPEEDS","formatTime","VideoPlayer","useImperativeHandle","Play","Pause","VolumeX","Volume2","Maximize","PDFViewer","ChevronLeft","ScheduleView","Gantt","EventCalendar","GradientText","CountUp","easeOutCubic","defaultFormat","prefersReducedMotion","AnimatedNumber","ScrollReveal","Tilt","Marquee","Typewriter","Confetti","ChevronDown"],"mappings":"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","file":"chunk-EZ2NOHIL.js","sourcesContent":["import { tv, type VariantProps } from '../../utils';\n\nexport const headingVariants = tv({\n base: 'font-semibold tracking-tight text-foreground',\n variants: {\n size: {\n xs: 'text-sm',\n sm: 'text-base',\n md: 'text-lg',\n lg: 'text-xl',\n xl: 'text-2xl',\n '2xl': 'text-3xl',\n '3xl': 'text-4xl',\n '4xl': 'text-5xl',\n },\n weight: {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n },\n align: {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n },\n },\n defaultVariants: {\n size: 'lg',\n weight: 'semibold',\n },\n});\n\nexport type HeadingVariants = VariantProps<typeof headingVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { headingVariants, type HeadingVariants } from './Heading.variants';\n\ntype HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface HeadingProps\n extends Omit<ComponentPropsWithoutRef<'h2'>, 'size'>,\n HeadingVariants {\n /** Semantic heading level (1–6). Default 2. Visual size is independent — set via `size`. */\n level?: HeadingLevel;\n}\n\n/**\n * Semantic heading. `level` controls the rendered tag (`h1`–`h6`); `size`\n * controls the visual scale independently — so a visually-large heading\n * can still be the right outline level.\n */\nexport const Heading = forwardRef<HTMLHeadingElement, HeadingProps>(\n ({ level = 2, className, size, weight, align, ...props }, ref) => {\n const Tag = `h${level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n return (\n <Tag\n ref={ref}\n className={cn(headingVariants({ size, weight, align }), className)}\n {...props}\n />\n );\n },\n);\nHeading.displayName = 'Heading';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const textVariants = tv({\n base: '',\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n },\n weight: {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n },\n color: {\n default: 'text-foreground',\n muted: 'text-muted-foreground',\n subtle: 'text-subtle-foreground',\n brand: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-destructive',\n },\n align: {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n },\n truncate: {\n true: 'truncate',\n },\n },\n defaultVariants: {\n size: 'md',\n weight: 'normal',\n color: 'default',\n },\n});\n\nexport type TextVariants = VariantProps<typeof textVariants>;\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementType,\n type Ref,\n} from 'react';\nimport { cn } from '../../utils';\nimport { textVariants, type TextVariants } from './Text.variants';\n\nexport interface TextProps\n extends Omit<ComponentPropsWithoutRef<'p'>, 'as' | 'color'>,\n TextVariants {\n as?: ElementType;\n}\n\n/**\n * Body text. Renders as `<p>` by default; pass `as=\"span\"` (or any element)\n * to keep semantics consistent with the surrounding markup.\n */\nexport const Text = forwardRef<HTMLElement, TextProps>(\n ({ as: Component = 'p', className, size, weight, color, align, truncate, ...props }, ref) => (\n <Component\n ref={ref as Ref<HTMLElement>}\n className={cn(textVariants({ size, weight, color, align, truncate }), className)}\n {...props}\n />\n ),\n);\nText.displayName = 'Text';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const codeVariants = tv({\n base: 'font-mono text-sm',\n variants: {\n variant: {\n inline: 'rounded-sm bg-muted px-1 py-0.5 text-foreground',\n block: 'block w-full overflow-x-auto rounded-md bg-muted p-4 text-foreground',\n },\n },\n defaultVariants: {\n variant: 'inline',\n },\n});\n\nexport type CodeVariants = VariantProps<typeof codeVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { codeVariants, type CodeVariants } from './Code.variants';\n\nexport interface CodeProps extends ComponentPropsWithoutRef<'code'>, CodeVariants {}\n\n/**\n * Inline or block code. For block, wrap children in a `<pre>` if you need\n * pre-wrap whitespace; this atom only styles. Syntax highlighting is L5.\n */\nexport const Code = forwardRef<HTMLElement, CodeProps>(\n ({ className, variant, ...props }, ref) => (\n <code ref={ref} className={cn(codeVariants({ variant }), className)} {...props} />\n ),\n);\nCode.displayName = 'Code';\n","import { forwardRef, useState, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface ImageProps extends ComponentPropsWithoutRef<'img'> {\n /** Element rendered when the image fails to load. */\n fallback?: ReactNode;\n}\n\n/**\n * Image with built-in error fallback. The fallback element replaces the\n * `<img>` on error (broken `src`, network failure). For aspect-locked\n * images, wrap in `AspectRatio`.\n */\nexport const Image = forwardRef<HTMLImageElement, ImageProps>(\n ({ fallback, onError, alt = '', className, ...props }, ref) => {\n const [errored, setErrored] = useState(false);\n if (errored && fallback !== undefined) return <>{fallback}</>;\n return (\n <img\n ref={ref}\n alt={alt}\n className={cn('block max-w-full', className)}\n onError={(e) => {\n setErrored(true);\n onError?.(e);\n }}\n {...props}\n />\n );\n },\n);\nImage.displayName = 'Image';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const avatarVariants = tv({\n base: 'inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-medium',\n variants: {\n size: {\n xs: 'h-6 w-6 text-xs',\n sm: 'h-8 w-8 text-sm',\n md: 'h-10 w-10 text-base',\n lg: 'h-12 w-12 text-lg',\n xl: 'h-16 w-16 text-xl',\n '2xl': 'h-20 w-20 text-2xl',\n },\n shape: {\n circle: 'rounded-full',\n square: 'rounded-md',\n },\n tone: {\n // 'none' is used when autoColor takes over — prevents theme tokens from competing in the cascade.\n none: '',\n neutral: 'bg-muted text-muted-foreground',\n primary: 'bg-primary-soft text-primary-soft-foreground',\n danger: 'bg-destructive-soft text-destructive-soft-foreground',\n success: 'bg-success-soft text-success-soft-foreground',\n warning: 'bg-warning-soft text-warning-soft-foreground',\n },\n bgStyle: {\n solid: '',\n // Gradient class composed in compoundVariants × tone.\n gradient: '',\n },\n ring: {\n none: '',\n neutral: 'ring-2 ring-offset-2 ring-border ring-offset-background',\n primary: 'ring-2 ring-offset-2 ring-primary ring-offset-background',\n danger: 'ring-2 ring-offset-2 ring-destructive ring-offset-background',\n success: 'ring-2 ring-offset-2 ring-success ring-offset-background',\n warning: 'ring-2 ring-offset-2 ring-warning ring-offset-background',\n },\n isLoading: {\n true: 'animate-pulse !bg-muted text-transparent',\n false: '',\n },\n },\n compoundVariants: [\n // gradient × tone\n { bgStyle: 'gradient', tone: 'neutral', class: 'bg-gradient-to-br from-muted to-muted/40' },\n { bgStyle: 'gradient', tone: 'primary', class: 'bg-gradient-to-br from-primary-soft to-primary text-primary-foreground' },\n { bgStyle: 'gradient', tone: 'danger', class: 'bg-gradient-to-br from-destructive-soft to-destructive text-destructive-foreground' },\n { bgStyle: 'gradient', tone: 'success', class: 'bg-gradient-to-br from-success-soft to-success text-success-foreground' },\n { bgStyle: 'gradient', tone: 'warning', class: 'bg-gradient-to-br from-warning-soft to-warning text-warning-foreground' },\n ],\n defaultVariants: {\n size: 'md',\n shape: 'circle',\n tone: 'neutral',\n bgStyle: 'solid',\n ring: 'none',\n isLoading: false,\n },\n});\n\nexport type AvatarVariants = VariantProps<typeof avatarVariants>;\n","import {\n forwardRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn, CssExtensions, type SizePreset, type SizeUnion } from '../../utils';\nimport { avatarVariants, type AvatarVariants } from './Avatar.variants';\n\nconst COMPONENT_NAME = 'Avatar';\n\n/* Avatar supports the full canonical preset vocabulary. */\ntype AvatarSizePreset = SizePreset;\nconst AVATAR_SIZE_PRESETS: ReadonlySet<string> = new Set<AvatarSizePreset>([\n 'xs', 'sm', 'md', 'lg', 'xl', '2xl',\n]);\n\n/* Solid palette for autoColor — 17 distinct hues, dark-mode aware. Light: bg-100/text-800. Dark: bg-900/text-100. No opacity — keeps contrast deterministic across themes. */\nconst AUTO_COLOR_PALETTE = [\n 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-100',\n 'bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-100',\n 'bg-amber-100 text-amber-800 dark:bg-amber-900 dark:text-amber-100',\n 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-100',\n 'bg-lime-100 text-lime-800 dark:bg-lime-900 dark:text-lime-100',\n 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100',\n 'bg-emerald-100 text-emerald-800 dark:bg-emerald-900 dark:text-emerald-100',\n 'bg-teal-100 text-teal-800 dark:bg-teal-900 dark:text-teal-100',\n 'bg-cyan-100 text-cyan-800 dark:bg-cyan-900 dark:text-cyan-100',\n 'bg-sky-100 text-sky-800 dark:bg-sky-900 dark:text-sky-100',\n 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-100',\n 'bg-indigo-100 text-indigo-800 dark:bg-indigo-900 dark:text-indigo-100',\n 'bg-violet-100 text-violet-800 dark:bg-violet-900 dark:text-violet-100',\n 'bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-100',\n 'bg-fuchsia-100 text-fuchsia-800 dark:bg-fuchsia-900 dark:text-fuchsia-100',\n 'bg-pink-100 text-pink-800 dark:bg-pink-900 dark:text-pink-100',\n 'bg-rose-100 text-rose-800 dark:bg-rose-900 dark:text-rose-100',\n];\n\nfunction hashName(name: string): number {\n let h = 0;\n for (let i = 0; i < name.length; i++) {\n h = (h * 31 + name.charCodeAt(i)) | 0;\n }\n return Math.abs(h);\n}\n\nfunction pickAutoColor(name: string): string {\n return AUTO_COLOR_PALETTE[hashName(name) % AUTO_COLOR_PALETTE.length]!;\n}\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 0) return '';\n const first = parts[0]?.[0] ?? '';\n const last = parts.length > 1 ? parts[parts.length - 1]?.[0] ?? '' : '';\n return (first + last).toUpperCase();\n}\n\nexport interface AvatarProps\n extends Omit<ComponentPropsWithoutRef<'span'>, 'children'>,\n Omit<AvatarVariants, 'size'> {\n /* Image source. Falls back to `name` initials or `fallback` on error. */\n src?: string;\n\n /* Person/entity name — used to derive initials when no image. */\n name?: string;\n\n /* Custom fallback (overrides initials). */\n fallback?: ReactNode;\n\n /* Alt text for the underlying `<img>`. Defaults to `name`. */\n alt?: string;\n\n /* When true (and no explicit non-neutral `tone` / non-solid `bgStyle`), derive a deterministic soft-color tint from `name` hash → 17-color palette. */\n autoColor?: boolean;\n\n /* Size: preset (`xs|sm|md|lg|xl|2xl`) → variant class · raw number/string → square inline · object → explicit dims. See `SizeUnion`. */\n size?: SizeUnion<AvatarSizePreset>;\n}\n\n/* Image avatar with initials fallback. Supports semantic tones, deterministic auto-color from name hash, gradient bg, ring, and loading skeleton. Composable with `<BadgeOverlay>` for status dots / counts / icons. */\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n (\n {\n src,\n name = '',\n fallback,\n alt,\n autoColor,\n tone,\n bgStyle,\n ring,\n isLoading,\n size,\n shape,\n className,\n ...props\n },\n ref,\n ) => {\n const [errored, setErrored] = useState(false);\n const showImage = !!src && !errored && !isLoading;\n\n /* Parse union-typed `size` — preset routes to variant class, raw/object routes to inline dims. */\n const { preset: sizePreset, box: sizeBox } = CssExtensions.parseSizeUnion<AvatarSizePreset>(\n size,\n AVATAR_SIZE_PRESETS,\n );\n const boxStyle = sizeBox ? CssExtensions.resolveBoxSize(sizeBox) : undefined;\n\n /* autoColor only fires when (a) name is set, (b) no explicit non-neutral tone, (c) bgStyle isn't gradient. Explicit dials win. */\n const autoColorClass =\n autoColor &&\n name &&\n bgStyle !== 'gradient' &&\n (tone === undefined || tone === 'neutral')\n ? pickAutoColor(name)\n : undefined;\n\n /* When autoColor is active, suppress the tone variant entirely so its theme-token classes don't compete in the cascade. */\n const effectiveTone = autoColorClass ? 'none' : tone;\n\n return (\n <span\n ref={ref}\n className={cn(\n avatarVariants({ size: sizePreset, shape, tone: effectiveTone, bgStyle, ring, isLoading }),\n autoColorClass,\n className,\n )}\n style={boxStyle}\n data-loading={isLoading ? 'true' : undefined}\n aria-busy={isLoading ? true : undefined}\n {...props}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt ?? name}\n className=\"h-full w-full object-cover\"\n onError={() => setErrored(true)}\n />\n ) : (\n fallback ?? getInitials(name)\n )}\n </span>\n );\n },\n);\n\nAvatar.displayName = COMPONENT_NAME;\n","import { tv, type VariantProps } from '../../utils';\n\nexport const badgeVariants = tv({\n base: 'inline-flex items-center rounded-full font-medium',\n variants: {\n variant: {\n neutral: 'bg-muted text-foreground',\n brand: 'bg-primary-soft text-primary-soft-foreground',\n success: 'bg-success-soft text-success-soft-foreground',\n warning: 'bg-warning-soft text-warning-soft-foreground',\n danger: 'bg-destructive-soft text-destructive-soft-foreground',\n info: 'bg-info-soft text-info-soft-foreground',\n outline: 'border border-border text-foreground',\n },\n size: {\n sm: 'h-5 px-2 text-xs',\n md: 'h-6 px-2.5 text-xs',\n lg: 'h-7 px-3 text-sm',\n },\n },\n defaultVariants: {\n variant: 'neutral',\n size: 'md',\n },\n});\n\nexport type BadgeVariants = VariantProps<typeof badgeVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { badgeVariants, type BadgeVariants } from './Badge.variants';\n\nexport interface BadgeProps extends ComponentPropsWithoutRef<'span'>, BadgeVariants {}\n\n/**\n * Pill-shaped status / category indicator. Non-interactive — for clickable\n * use `Tag`. For severity-tinted callouts at message scale, use `Alert*`.\n */\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, size, ...props }, ref) => (\n <span ref={ref} className={cn(badgeVariants({ variant, size }), className)} {...props} />\n ),\n);\nBadge.displayName = 'Badge';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport interface SeparatorProps extends ComponentPropsWithoutRef<'div'> {\n orientation?: 'horizontal' | 'vertical';\n /** When `true`, the separator is purely decorative — `role=\"none\"` and\n * unannounced. Default `true`. Set `false` when meaningful in context. */\n decorative?: boolean;\n}\n\n/**\n * Visual divider. Defaults to a horizontal hairline; pass `orientation=\"vertical\"`\n * for column dividers (use inside a flex/grid with explicit height).\n */\nexport const Separator = forwardRef<HTMLDivElement, SeparatorProps>(\n ({ orientation = 'horizontal', decorative = true, className, ...props }, ref) => (\n <div\n ref={ref}\n role={decorative ? 'none' : 'separator'}\n aria-orientation={decorative ? undefined : orientation}\n className={cn(\n 'bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'w-px self-stretch',\n className,\n )}\n {...props}\n />\n ),\n);\nSeparator.displayName = 'Separator';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport type MarkProps = ComponentPropsWithoutRef<'mark'>;\n\n/**\n * Highlighted text — semantic `<mark>` with a yellow tint. Use for search\n * matches and \"you mentioned this\" affordances.\n */\nexport const Mark = forwardRef<HTMLElement, MarkProps>(({ className, ...props }, ref) => (\n <mark\n ref={ref}\n className={cn('rounded-sm bg-warning-soft px-0.5 text-warning-soft-foreground', className)}\n {...props}\n />\n));\nMark.displayName = 'Mark';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport type QuoteProps = ComponentPropsWithoutRef<'blockquote'>;\n\n/**\n * Block quote with subtle left border and italic body text.\n */\nexport const Quote = forwardRef<HTMLQuoteElement, QuoteProps>(\n ({ className, ...props }, ref) => (\n <blockquote\n ref={ref}\n className={cn(\n 'border-l-4 border-border pl-4 italic text-muted-foreground',\n className,\n )}\n {...props}\n />\n ),\n);\nQuote.displayName = 'Quote';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\ntype DivProps = ComponentPropsWithoutRef<'div'>;\n\nexport interface CardProps extends DivProps {\n padding?: 'none' | 'sm' | 'md' | 'lg';\n}\n\nconst PADDING: Record<NonNullable<CardProps['padding']>, string> = {\n none: '',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n};\n\nconst CardRoot = forwardRef<HTMLDivElement, CardProps>(\n ({ className, padding = 'none', ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-border bg-card text-card-foreground shadow-xs',\n PADDING[padding],\n className,\n )}\n {...props}\n />\n ),\n);\nCardRoot.displayName = 'Card';\n\nconst CardHeader = forwardRef<HTMLDivElement, DivProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col gap-1 p-4 pb-2', className)} {...props} />\n));\nCardHeader.displayName = 'Card.Header';\n\nconst CardTitle = forwardRef<HTMLHeadingElement, ComponentPropsWithoutRef<'h3'>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('text-lg font-semibold tracking-tight', className)} {...props} />\n ),\n);\nCardTitle.displayName = 'Card.Title';\n\nconst CardDescription = forwardRef<HTMLParagraphElement, ComponentPropsWithoutRef<'p'>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n ),\n);\nCardDescription.displayName = 'Card.Description';\n\nconst CardBody = forwardRef<HTMLDivElement, DivProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-4 pt-2', className)} {...props} />\n));\nCardBody.displayName = 'Card.Body';\n\nconst CardFooter = forwardRef<HTMLDivElement, DivProps>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center gap-2 border-t border-border p-4', className)} {...props} />\n));\nCardFooter.displayName = 'Card.Footer';\n\n/**\n * Compound `Card` — raised surface for grouped content. Use sub-components\n * for structure: `<Card.Header>` (with optional `<Card.Title>` /\n * `<Card.Description>`), `<Card.Body>`, `<Card.Footer>`. Or pass\n * `padding=\"md\"` and free-form children for the simplest case.\n */\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Title: CardTitle,\n Description: CardDescription,\n Body: CardBody,\n Footer: CardFooter,\n});\n","import { Children, forwardRef, isValidElement, type ComponentPropsWithoutRef, type ReactElement } from 'react';\nimport { cn } from '../../utils';\nimport { Avatar, type AvatarProps } from '../avatar/Avatar';\n\nexport interface AvatarGroupProps extends ComponentPropsWithoutRef<'div'> {\n /** Maximum avatars to render. Excess is shown as a \"+N\" tile. */\n max?: number;\n /** Avatar size applied to all children. Default `md`. */\n size?: AvatarProps['size'];\n /** Negative-margin overlap class applied between avatars. Default `-ml-2`. */\n overlap?: string;\n}\n\n/**\n * Stacked group of `Avatar` children with overlap and an optional \"+N more\"\n * indicator when children exceed `max`.\n */\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ max, size = 'md', overlap = '-ml-2', className, children, ...props }, ref) => {\n const all = Children.toArray(children).filter(isValidElement) as ReactElement<AvatarProps>[];\n const visible = max ? all.slice(0, max) : all;\n const overflow = max ? Math.max(0, all.length - max) : 0;\n\n return (\n <div\n ref={ref}\n className={cn('inline-flex items-center', className)}\n {...props}\n >\n {visible.map((child, i) => (\n <div\n key={i}\n className={cn('ring-2 ring-background rounded-full', i > 0 && overlap)}\n >\n {/* Force consistent size */}\n <Avatar {...child.props} size={size} />\n </div>\n ))}\n {overflow > 0 && (\n <Avatar\n size={size}\n name={`+${overflow}`}\n className={cn(overlap, 'ring-2 ring-background')}\n />\n )}\n </div>\n );\n },\n);\nAvatarGroup.displayName = 'AvatarGroup';\n","import {\n cloneElement,\n isValidElement,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport {\n AnchoredPositioner,\n Portal,\n type AnchoredPositionerProps,\n} from '../../primitives';\n\nexport interface TooltipProps {\n /** Tooltip body. */\n content: ReactNode;\n /** Single child element — the trigger. Receives event handlers + ref. */\n children: ReactElement;\n /** Floating UI placement. Default `top`. */\n placement?: AnchoredPositionerProps['placement'];\n /** Delay before opening on hover, in ms. Default 700. */\n openDelay?: number;\n /** Delay before closing on leave, in ms. Default 0. */\n closeDelay?: number;\n /** Controlled open state. */\n open?: boolean;\n /** Disable rendering even on hover (e.g. when content is empty). */\n disabled?: boolean;\n}\n\n/**\n * Hover-/focus-triggered tooltip. Wraps a single child as the trigger; the\n * tooltip body renders into a Portal positioned by Floating UI. Default\n * delays mirror the OS pattern (700ms in, 0 out).\n */\nexport function Tooltip({\n content,\n children,\n placement = 'top',\n openDelay = 700,\n closeDelay = 0,\n open: controlledOpen,\n disabled,\n}: TooltipProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const open = controlledOpen ?? uncontrolledOpen;\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n const openTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clear = () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = null;\n closeTimer.current = null;\n };\n const show = () => {\n clear();\n openTimer.current = setTimeout(() => setUncontrolledOpen(true), openDelay);\n };\n const hide = () => {\n clear();\n closeTimer.current = setTimeout(() => setUncontrolledOpen(false), closeDelay);\n };\n\n if (!isValidElement(children)) return children;\n const trigger = children as ReactElement<{\n ref?: Ref<HTMLElement>;\n onPointerEnter?: (e: React.PointerEvent) => void;\n onPointerLeave?: (e: React.PointerEvent) => void;\n onFocus?: (e: React.FocusEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n }> & { ref?: Ref<HTMLElement> };\n\n const cloned = cloneElement(trigger, {\n ref: composeRefs(setAnchor, trigger.ref),\n onPointerEnter: (e: React.PointerEvent) => {\n trigger.props.onPointerEnter?.(e);\n show();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n trigger.props.onPointerLeave?.(e);\n hide();\n },\n onFocus: (e: React.FocusEvent) => {\n trigger.props.onFocus?.(e);\n show();\n },\n onBlur: (e: React.FocusEvent) => {\n trigger.props.onBlur?.(e);\n hide();\n },\n });\n\n return (\n <>\n {cloned}\n {!disabled && open && content && (\n <Portal>\n <AnchoredPositioner anchor={anchor} placement={placement} offset={6}>\n <div\n role=\"tooltip\"\n className={cn(\n 'z-tooltip rounded-md bg-inverse px-2.5 py-1.5 text-xs text-inverse-foreground shadow-md',\n 'animate-in fade-in-0 zoom-in-95',\n )}\n >\n {content}\n </div>\n </AnchoredPositioner>\n </Portal>\n )}\n </>\n );\n}\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { Heading } from '../heading/Heading';\nimport { Text } from '../text/Text';\n\nexport interface EmptyStateProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {\n /** Optional icon (lucide or custom). */\n icon?: ReactNode;\n /** Heading copy. */\n title: ReactNode;\n /** Body copy below the title. */\n description?: ReactNode;\n /** Action(s) — usually one or two `<Button>` elements. */\n actions?: ReactNode;\n /** Visual size. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst SIZE: Record<NonNullable<EmptyStateProps['size']>, { wrap: string; iconBox: string }> = {\n sm: { wrap: 'gap-2 py-6', iconBox: 'h-10 w-10' },\n md: { wrap: 'gap-3 py-10', iconBox: 'h-14 w-14' },\n lg: { wrap: 'gap-4 py-16', iconBox: 'h-20 w-20' },\n};\n\n/**\n * Empty-list / no-results affordance: icon + title + description + actions.\n * Pass any subset; the component centers everything vertically.\n */\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n ({ icon, title, description, actions, size = 'md', className, ...props }, ref) => {\n const sz = SIZE[size];\n return (\n <div\n ref={ref}\n className={cn('flex flex-col items-center text-center', sz.wrap, className)}\n {...props}\n >\n {icon && (\n <div\n className={cn(\n 'flex items-center justify-center rounded-full bg-muted text-muted-foreground',\n sz.iconBox,\n )}\n >\n {icon}\n </div>\n )}\n <Heading level={3} size={size === 'sm' ? 'md' : size === 'lg' ? 'xl' : 'lg'}>\n {title}\n </Heading>\n {description && <Text color=\"muted\" size={size === 'lg' ? 'md' : 'sm'}>{description}</Text>}\n {actions && <div className=\"mt-2 flex items-center gap-2\">{actions}</div>}\n </div>\n );\n },\n);\nEmptyState.displayName = 'EmptyState';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { TrendingDown, TrendingUp } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { Heading } from '../heading/Heading';\nimport { Text } from '../text/Text';\n\nexport interface StatProps extends ComponentPropsWithoutRef<'div'> {\n /** Label above the value. */\n label: ReactNode;\n /** Primary value (large). */\n value: ReactNode;\n /** Optional trend — positive = up/green, negative = down/red. */\n trend?: { value: number; label?: ReactNode };\n /** Optional helper / supporting text below. */\n helper?: ReactNode;\n /** Visual size. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst VALUE_SIZE: Record<NonNullable<StatProps['size']>, '2xl' | '3xl' | '4xl'> = {\n sm: '2xl',\n md: '3xl',\n lg: '4xl',\n};\n\n/**\n * Single metric tile — label + big value + optional trend + helper. Use\n * inside dashboards / KPI grids.\n */\nexport const Stat = forwardRef<HTMLDivElement, StatProps>(\n ({ label, value, trend, helper, size = 'md', className, ...props }, ref) => {\n const trendUp = trend ? trend.value >= 0 : false;\n return (\n <div ref={ref} className={cn('flex flex-col gap-1', className)} {...props}>\n <Text size=\"sm\" color=\"muted\">{label}</Text>\n <Heading level={3} size={VALUE_SIZE[size]} weight=\"bold\">{value}</Heading>\n {(trend || helper) && (\n <div className=\"mt-1 flex items-center gap-2\">\n {trend && (\n <span\n className={cn(\n 'inline-flex items-center gap-0.5 text-xs font-medium',\n trendUp ? 'text-success' : 'text-destructive',\n )}\n >\n <Icon icon={trendUp ? TrendingUp : TrendingDown} size={12} />\n {trend.value > 0 ? '+' : ''}{trend.value}%\n {trend.label && <span className=\"text-muted-foreground\"> {trend.label}</span>}\n </span>\n )}\n {helper && !trend && <Text size=\"xs\" color=\"muted\">{helper}</Text>}\n </div>\n )}\n </div>\n );\n },\n);\nStat.displayName = 'Stat';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { Check, Copy } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { useClipboard } from '../../hooks';\nimport { Code } from '../code/Code';\n\nexport interface SnippetProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n /** Code text to display + copy. */\n text: string;\n /** Visual variant — `inline` (single line) or `block` (multi-line). Default `inline`. */\n variant?: 'inline' | 'block';\n}\n\n/**\n * Code text with a built-in copy button. Inline variant for one-liners,\n * block variant for multi-line snippets. Copy logic uses the L1\n * `useClipboard` hook directly (Snippet stays in display, can't import the\n * actions/CopyButton component).\n */\nexport const Snippet = forwardRef<HTMLDivElement, SnippetProps>(\n ({ text, variant = 'inline', className, ...props }, ref) => {\n const { copied, copy } = useClipboard();\n return (\n <div\n ref={ref}\n className={cn(\n 'group relative inline-flex w-full items-start',\n variant === 'inline' ? 'gap-2' : 'flex-col gap-0',\n className,\n )}\n {...props}\n >\n <Code variant={variant} className=\"flex-1 pr-10\">{text}</Code>\n <button\n type=\"button\"\n aria-label={copied ? 'Copied' : 'Copy'}\n onClick={() => void copy(text)}\n className={cn(\n 'absolute right-2 grid h-7 w-7 place-items-center rounded text-muted-foreground transition-colors hover:bg-background hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n variant === 'inline' ? 'top-1/2 -translate-y-1/2' : 'top-2',\n )}\n >\n <Icon icon={copied ? Check : Copy} size={14} />\n </button>\n </div>\n );\n },\n);\nSnippet.displayName = 'Snippet';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport interface NotificationDotProps extends ComponentPropsWithoutRef<'span'> {\n tone?: 'destructive' | 'success' | 'warning' | 'info' | 'primary' | 'neutral';\n size?: 'xs' | 'sm' | 'md';\n /** Adds a pulsing ring around the dot. */\n pulse?: boolean;\n /** When set, the dot is positioned absolutely relative to its parent. */\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n}\n\nconst TONE: Record<NonNullable<NotificationDotProps['tone']>, string> = {\n destructive: 'bg-destructive',\n success: 'bg-success',\n warning: 'bg-warning',\n info: 'bg-info',\n primary: 'bg-primary',\n neutral: 'bg-muted-foreground',\n};\n\nconst SIZE: Record<NonNullable<NotificationDotProps['size']>, string> = {\n xs: 'h-1.5 w-1.5',\n sm: 'h-2 w-2',\n md: 'h-2.5 w-2.5',\n};\n\nconst POS: Record<NonNullable<NotificationDotProps['position']>, string> = {\n 'top-right': 'absolute -top-0.5 -right-0.5',\n 'top-left': 'absolute -top-0.5 -left-0.5',\n 'bottom-right': 'absolute -bottom-0.5 -right-0.5',\n 'bottom-left': 'absolute -bottom-0.5 -left-0.5',\n};\n\n/**\n * Tiny colored dot — unread/notification indicator. Pass `position` to\n * absolutely-place over a parent (e.g. on an Avatar or `<Button shape=\"square\"/circle\">`).\n */\nexport const NotificationDot = forwardRef<HTMLSpanElement, NotificationDotProps>(\n ({ tone = 'destructive', size = 'sm', pulse, position, className, ...props }, ref) => (\n <span\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\n 'inline-flex rounded-full ring-2 ring-background',\n TONE[tone],\n SIZE[size],\n position && POS[position],\n pulse && 'after:absolute after:inset-0 after:animate-ping after:rounded-full after:opacity-75 after:content-[\"\"] ' + TONE[tone],\n className,\n )}\n {...props}\n />\n ),\n);\nNotificationDot.displayName = 'NotificationDot';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { Badge, type BadgeProps } from '../badge/Badge';\n\nexport interface CountBadgeProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {\n /** The numeric count. */\n value: number;\n /** Cap value — shows \"max+\" when exceeded. Default 99. */\n max?: number;\n /** Hide entirely when count is 0. Default true. */\n hideZero?: boolean;\n variant?: BadgeProps['variant'];\n}\n\n/**\n * Numeric badge for notification / inbox counts. Displays \"{value}\" or\n * \"{max}+\" once the cap is exceeded. Hides when `value === 0` unless\n * `hideZero={false}`.\n */\nexport const CountBadge = forwardRef<HTMLSpanElement, CountBadgeProps>(\n ({ value, max = 99, hideZero = true, variant = 'danger', className, ...props }, ref) => {\n if (value === 0 && hideZero) return null;\n const display = value > max ? `${max}+` : `${value}`;\n return (\n <Badge\n ref={ref}\n variant={variant}\n size=\"sm\"\n className={cn('min-w-5 justify-center px-1.5', className)}\n {...props}\n >\n {display}\n </Badge>\n );\n },\n);\nCountBadge.displayName = 'CountBadge';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface StatusProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {\n tone?: 'success' | 'warning' | 'destructive' | 'info' | 'neutral';\n /** Optional pulsing ring around the dot. */\n pulse?: boolean;\n children?: ReactNode;\n}\n\nconst TONE: Record<NonNullable<StatusProps['tone']>, string> = {\n success: 'bg-success',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n info: 'bg-info',\n neutral: 'bg-muted-foreground',\n};\n\n/**\n * Colored dot + text label — server status, online presence, build state.\n * Use `Status` (with text) for labelled indicators; `NotificationDot` for\n * the bare positioned dot.\n */\nexport const Status = forwardRef<HTMLSpanElement, StatusProps>(\n ({ tone = 'success', pulse, className, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn('inline-flex items-center gap-2 text-sm text-foreground', className)}\n {...props}\n >\n <span className=\"relative inline-flex\">\n <span className={cn('inline-block h-2 w-2 rounded-full', TONE[tone])} />\n {pulse && (\n <span\n className={cn(\n 'absolute inset-0 inline-block rounded-full opacity-75 animate-ping',\n TONE[tone],\n )}\n />\n )}\n </span>\n {children}\n </span>\n ),\n);\nStatus.displayName = 'Status';\n","import { forwardRef, Fragment, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { Kbd } from '../kbd/Kbd';\n\nexport interface KeyboardShortcutProps extends ComponentPropsWithoutRef<'span'> {\n /** Keys in order — e.g. `['⌘', 'K']` or `['Ctrl', 'Shift', 'P']`. */\n keys: string[];\n /** Connector between keys. Default `'+'`; pass `' '` for spaced keys. */\n separator?: string;\n}\n\n/**\n * Render a sequence of `Kbd` keys with connectors between them — e.g.\n * `<KeyboardShortcut keys={['⌘', 'K']} />` → ⌘ + K.\n */\nexport const KeyboardShortcut = forwardRef<HTMLSpanElement, KeyboardShortcutProps>(\n ({ keys, separator = '+', className, ...props }, ref) => (\n <span\n ref={ref}\n className={cn('inline-flex items-center gap-1 text-muted-foreground', className)}\n {...props}\n >\n {keys.map((key, i) => (\n <Fragment key={i}>\n {i > 0 && <span aria-hidden=\"true\">{separator}</span>}\n <Kbd>{key}</Kbd>\n </Fragment>\n ))}\n </span>\n ),\n);\nKeyboardShortcut.displayName = 'KeyboardShortcut';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface DescriptionListItem {\n label: ReactNode;\n value: ReactNode;\n}\n\nexport interface DescriptionListProps extends Omit<ComponentPropsWithoutRef<'dl'>, 'children'> {\n items: DescriptionListItem[];\n /** Layout direction. `inline` renders label/value on the same line; `stacked` puts label above. */\n layout?: 'inline' | 'stacked';\n /** Density between rows. Default `md`. */\n density?: 'sm' | 'md' | 'lg';\n}\n\nconst ROW_GAP: Record<NonNullable<DescriptionListProps['density']>, string> = {\n sm: 'gap-y-1',\n md: 'gap-y-2',\n lg: 'gap-y-3',\n};\n\n/**\n * Semantic `<dl>` for label-value pairs (settings panels, property lists).\n * Inline layout uses a 2-column grid; stacked puts each value below its label.\n */\nexport const DescriptionList = forwardRef<HTMLDListElement, DescriptionListProps>(\n ({ items, layout = 'inline', density = 'md', className, ...props }, ref) => (\n <dl\n ref={ref}\n className={cn(\n 'text-sm',\n layout === 'inline' ? 'grid grid-cols-[max-content_1fr] gap-x-4' : 'flex flex-col gap-1',\n ROW_GAP[density],\n className,\n )}\n {...props}\n >\n {items.map((item, i) => (\n <div key={i} className={cn('contents', layout === 'stacked' && 'flex flex-col gap-0.5')}>\n <dt className=\"text-muted-foreground\">{item.label}</dt>\n <dd className=\"text-foreground\">{item.value}</dd>\n </div>\n ))}\n </dl>\n ),\n);\nDescriptionList.displayName = 'DescriptionList';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface InfoRowProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n label: ReactNode;\n value: ReactNode;\n /** Optional icon rendered before the label. */\n icon?: ReactNode;\n /** Layout: `inline` puts label-value on one line; `stacked` puts value below. Default `inline`. */\n layout?: 'inline' | 'stacked';\n}\n\n/**\n * Single row of label + value, with optional leading icon. Reach for this\n * when you have one or two pairs to show (e.g. inside a Card row); use\n * `DescriptionList` for many pairs.\n */\nexport const InfoRow = forwardRef<HTMLDivElement, InfoRowProps>(\n ({ label, value, icon, layout = 'inline', className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex text-sm',\n layout === 'inline' ? 'items-center justify-between gap-3' : 'flex-col gap-0.5',\n className,\n )}\n {...props}\n >\n <span className=\"inline-flex items-center gap-1.5 text-muted-foreground\">\n {icon}\n {label}\n </span>\n <span className=\"text-foreground\">{value}</span>\n </div>\n ),\n);\nInfoRow.displayName = 'InfoRow';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface BadgeOverlayProps extends ComponentPropsWithoutRef<'div'> {\n /** Element to overlay on (avatar, button, image). */\n children: ReactNode;\n /** Badge content (count, dot, icon). */\n badge: ReactNode;\n /** Position of the badge relative to the wrapper. Default `top-right`. */\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n /** Hide badge when truthy (e.g. when count is 0). */\n hidden?: boolean;\n}\n\nconst POS: Record<NonNullable<BadgeOverlayProps['position']>, string> = {\n 'top-right': 'top-0 right-0 -translate-y-1/2 translate-x-1/2',\n 'top-left': 'top-0 left-0 -translate-y-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-0 right-0 translate-y-1/2 translate-x-1/2',\n 'bottom-left': 'bottom-0 left-0 translate-y-1/2 -translate-x-1/2',\n};\n\n/**\n * Decorator that overlays a badge / dot on top of any child. Use to\n * attach `CountBadge`, `NotificationDot`, or arbitrary `Badge` to an\n * `Avatar`, icon, or `<Button shape=\"square\"/circle\">`.\n */\nexport const BadgeOverlay = forwardRef<HTMLDivElement, BadgeOverlayProps>(\n ({ children, badge, position = 'top-right', hidden, className, ...props }, ref) => (\n <div ref={ref} className={cn('relative inline-flex', className)} {...props}>\n {children}\n {!hidden && (\n <span className={cn('absolute z-raised', POS[position])}>{badge}</span>\n )}\n </div>\n ),\n);\nBadgeOverlay.displayName = 'BadgeOverlay';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { Heading } from '../heading/Heading';\nimport { Text } from '../text/Text';\n\nexport interface SectionHeaderProps extends Omit<ComponentPropsWithoutRef<'header'>, 'title'> {\n /** Heading copy. */\n title: ReactNode;\n /** Optional description below the title. */\n description?: ReactNode;\n /** Right-aligned actions slot — typically Button(s). Cross-domain by design,\n * passed as content. */\n actions?: ReactNode;\n /** Heading element / size. Default level 2, size lg. */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n size?: 'md' | 'lg' | 'xl' | '2xl';\n /** Add a bottom border. Default true. */\n bordered?: boolean;\n}\n\n/**\n * Section / page header — title + optional description + actions row.\n * Wraps `Heading` (semantic) + `Text` (description) + slot for actions.\n */\nexport const SectionHeader = forwardRef<HTMLElement, SectionHeaderProps>(\n (\n { title, description, actions, level = 2, size = 'lg', bordered = true, className, ...props },\n ref,\n ) => (\n <header\n ref={ref}\n className={cn(\n 'flex items-start justify-between gap-4 pb-3',\n bordered && 'border-b border-border',\n className,\n )}\n {...props}\n >\n <div className=\"flex min-w-0 flex-col gap-1\">\n <Heading level={level} size={size}>{title}</Heading>\n {description && <Text size=\"sm\" color=\"muted\">{description}</Text>}\n </div>\n {actions && <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>}\n </header>\n ),\n);\nSectionHeader.displayName = 'SectionHeader';\n","import { Fragment, forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { Mark } from '../mark/Mark';\n\nexport interface HighlightProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {\n /** Source text to render. */\n children: string;\n /** Substring(s) to highlight. Match is case-insensitive. */\n query: string | string[];\n /** When `true`, only highlights whole-word matches. Default `false`. */\n wholeWord?: boolean;\n}\n\nfunction escape(re: string) {\n return re.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Wraps each occurrence of `query` (or any of `query[]`) inside the\n * `children` text in a `<Mark>`. Case-insensitive; pass `wholeWord` to\n * avoid partial matches.\n */\nexport const Highlight = forwardRef<HTMLSpanElement, HighlightProps>(\n ({ children, query, wholeWord, className, ...props }, ref) => {\n const queries = (Array.isArray(query) ? query : [query]).filter(Boolean);\n if (queries.length === 0) return <span ref={ref} className={cn(className)} {...props}>{children}</span>;\n const pattern = queries.map(escape).join('|');\n const regex = new RegExp(wholeWord ? `\\\\b(${pattern})\\\\b` : `(${pattern})`, 'gi');\n const parts = children.split(regex);\n\n const nodes: ReactNode[] = [];\n parts.forEach((part, i) => {\n if (queries.some((q) => part.toLowerCase() === q.toLowerCase())) {\n nodes.push(<Mark key={i}>{part}</Mark>);\n } else if (part) {\n nodes.push(<Fragment key={i}>{part}</Fragment>);\n }\n });\n\n return (\n <span ref={ref} className={cn(className)} {...props}>\n {nodes}\n </span>\n );\n },\n);\nHighlight.displayName = 'Highlight';\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n useMemo,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn, dataAttr } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Slot } from '../../primitives';\n\ninterface CollapsibleContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n contentId: string;\n triggerId: string;\n disabled: boolean;\n}\n\nconst CollapsibleContext = createContext<CollapsibleContextValue | null>(null);\n\nfunction useCollapsibleContext() {\n const ctx = useContext(CollapsibleContext);\n if (!ctx) throw new Error('Collapsible.* must be used inside <Collapsible>');\n return ctx;\n}\n\nexport interface CollapsibleProps extends HTMLAttributes<HTMLDivElement> {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n}\n\nexport const Collapsible = forwardRef<HTMLDivElement, CollapsibleProps>(function Collapsible(\n { open: openProp, defaultOpen = false, onOpenChange, disabled = false, className, children, ...rest },\n ref,\n) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const contentId = useId();\n const triggerId = useId();\n\n const ctx = useMemo<CollapsibleContextValue>(\n () => ({ open, setOpen, contentId, triggerId, disabled }),\n [open, setOpen, contentId, triggerId, disabled],\n );\n\n return (\n <CollapsibleContext.Provider value={ctx}>\n <div\n ref={ref}\n data-state={open ? 'open' : 'closed'}\n data-disabled={dataAttr(disabled)}\n className={className}\n {...rest}\n >\n {children}\n </div>\n </CollapsibleContext.Provider>\n );\n});\n\nexport interface CollapsibleTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const CollapsibleTrigger = forwardRef<HTMLButtonElement, CollapsibleTriggerProps>(\n function CollapsibleTrigger({ asChild, onClick, children, ...rest }, ref) {\n const ctx = useCollapsibleContext();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={ref as never}\n id={ctx.triggerId}\n type=\"button\"\n aria-expanded={ctx.open}\n aria-controls={ctx.contentId}\n data-state={ctx.open ? 'open' : 'closed'}\n data-disabled={dataAttr(ctx.disabled)}\n disabled={ctx.disabled}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (e.defaultPrevented || ctx.disabled) return;\n ctx.setOpen(!ctx.open);\n }}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport interface CollapsibleContentProps extends HTMLAttributes<HTMLDivElement> {\n /** Render hidden content but keep it in the DOM (for animations). */\n forceMount?: boolean;\n children: ReactNode;\n}\n\nexport const CollapsibleContent = forwardRef<HTMLDivElement, CollapsibleContentProps>(\n function CollapsibleContent({ forceMount, className, children, ...rest }, ref) {\n const ctx = useCollapsibleContext();\n if (!ctx.open && !forceMount) return null;\n return (\n <div\n ref={ref}\n id={ctx.contentId}\n role=\"region\"\n aria-labelledby={ctx.triggerId}\n data-state={ctx.open ? 'open' : 'closed'}\n hidden={!ctx.open}\n className={cn(\n 'overflow-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\ntype CollapsibleComponent = typeof Collapsible & {\n Trigger: typeof CollapsibleTrigger;\n Content: typeof CollapsibleContent;\n};\n\n(Collapsible as CollapsibleComponent).Trigger = CollapsibleTrigger;\n(Collapsible as CollapsibleComponent).Content = CollapsibleContent;\n\nexport default Collapsible as CollapsibleComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useId,\n useMemo,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn, dataAttr } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { RovingFocusGroup, useRovingFocusItem } from '../../primitives';\n\ninterface AccordionContextValue {\n isOpen: (value: string) => boolean;\n toggle: (value: string) => void;\n disabled: boolean;\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\n\nfunction useAccordionContext() {\n const ctx = useContext(AccordionContext);\n if (!ctx) throw new Error('Accordion.* must be used inside <Accordion>');\n return ctx;\n}\n\ninterface AccordionItemContextValue {\n value: string;\n open: boolean;\n contentId: string;\n triggerId: string;\n disabled: boolean;\n}\n\nconst AccordionItemContext = createContext<AccordionItemContextValue | null>(null);\n\nfunction useAccordionItemContext() {\n const ctx = useContext(AccordionItemContext);\n if (!ctx) throw new Error('Accordion.Trigger / Content must be used inside <Accordion.Item>');\n return ctx;\n}\n\ntype SingleProps = {\n type?: 'single';\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n collapsible?: boolean;\n};\n\ntype MultipleProps = {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n collapsible?: never;\n};\n\nexport type AccordionProps = HTMLAttributes<HTMLDivElement> &\n (SingleProps | MultipleProps) & {\n disabled?: boolean;\n };\n\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n props,\n ref,\n) {\n const {\n type = 'single',\n value,\n defaultValue,\n onValueChange,\n collapsible = false,\n disabled = false,\n className,\n children,\n ...rest\n } = props as AccordionProps & {\n type?: 'single' | 'multiple';\n value?: string | string[];\n defaultValue?: string | string[];\n onValueChange?: ((v: string) => void) | ((v: string[]) => void);\n collapsible?: boolean;\n };\n\n const initial = defaultValue ?? (type === 'multiple' ? [] : '');\n const [current, setCurrent] = useControlled<string | string[]>({\n controlled: value,\n default: initial,\n onChange: onValueChange as (v: string | string[]) => void,\n });\n\n const isOpen = useCallback(\n (val: string) => (Array.isArray(current) ? current.includes(val) : current === val),\n [current],\n );\n\n const toggle = useCallback(\n (val: string) => {\n if (type === 'multiple') {\n const arr = Array.isArray(current) ? current : [];\n setCurrent(arr.includes(val) ? arr.filter((v) => v !== val) : [...arr, val]);\n } else {\n if (current === val) {\n if (collapsible) setCurrent('');\n } else {\n setCurrent(val);\n }\n }\n },\n [collapsible, current, setCurrent, type],\n );\n\n const ctx = useMemo<AccordionContextValue>(\n () => ({ isOpen, toggle, disabled }),\n [isOpen, toggle, disabled],\n );\n\n return (\n <AccordionContext.Provider value={ctx}>\n <RovingFocusGroup\n ref={ref as never}\n orientation=\"vertical\"\n loop\n className={cn('flex flex-col', className)}\n {...rest}\n >\n {children}\n </RovingFocusGroup>\n </AccordionContext.Provider>\n );\n});\n\nexport interface AccordionItemProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n function AccordionItem({ value, disabled = false, className, children, ...rest }, ref) {\n const accordion = useAccordionContext();\n const open = accordion.isOpen(value);\n const contentId = useId();\n const triggerId = useId();\n const itemDisabled = disabled || accordion.disabled;\n\n const itemCtx = useMemo<AccordionItemContextValue>(\n () => ({ value, open, contentId, triggerId, disabled: itemDisabled }),\n [value, open, contentId, triggerId, itemDisabled],\n );\n\n return (\n <AccordionItemContext.Provider value={itemCtx}>\n <div\n ref={ref}\n data-state={open ? 'open' : 'closed'}\n data-disabled={dataAttr(itemDisabled)}\n className={cn('border-b border-border', className)}\n {...rest}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n },\n);\n\nexport interface AccordionTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const AccordionTrigger = forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n function AccordionTrigger({ className, onClick, children, ...rest }, ref) {\n const accordion = useAccordionContext();\n const item = useAccordionItemContext();\n const roving = useRovingFocusItem();\n return (\n <h3 className=\"flex\">\n <button\n ref={(node) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n id={item.triggerId}\n type=\"button\"\n aria-expanded={item.open}\n aria-controls={item.contentId}\n data-state={item.open ? 'open' : 'closed'}\n data-disabled={dataAttr(item.disabled)}\n disabled={item.disabled}\n tabIndex={roving.tabIndex}\n onFocus={roving.onFocus}\n onKeyDown={roving.onKeyDown}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || item.disabled) return;\n accordion.toggle(item.value);\n }}\n className={cn(\n 'flex w-full items-center justify-between gap-2 px-3 py-3 text-left text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...rest}\n >\n <span className=\"flex-1\">{children}</span>\n <ChevronDown\n className={cn(\n 'h-4 w-4 shrink-0 text-muted-foreground transition-transform',\n item.open && 'rotate-180',\n )}\n />\n </button>\n </h3>\n );\n },\n);\n\nexport interface AccordionContentProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n function AccordionContent({ className, children, ...rest }, ref) {\n const item = useAccordionItemContext();\n if (!item.open) return null;\n return (\n <div\n ref={ref}\n id={item.contentId}\n role=\"region\"\n aria-labelledby={item.triggerId}\n data-state=\"open\"\n className={cn('overflow-hidden px-3 pb-3 text-sm text-foreground', className)}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\ntype AccordionComponent = typeof Accordion & {\n Item: typeof AccordionItem;\n Trigger: typeof AccordionTrigger;\n Content: typeof AccordionContent;\n};\n\n(Accordion as AccordionComponent).Item = AccordionItem;\n(Accordion as AccordionComponent).Trigger = AccordionTrigger;\n(Accordion as AccordionComponent).Content = AccordionContent;\n\nexport default Accordion as AccordionComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n useMemo,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn, dataAttr } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { RovingFocusGroup, useRovingFocusItem } from '../../primitives';\n\ninterface TabsContextValue {\n value: string;\n setValue: (value: string) => void;\n orientation: 'horizontal' | 'vertical';\n activationMode: 'automatic' | 'manual';\n baseId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabsContext() {\n const ctx = useContext(TabsContext);\n if (!ctx) throw new Error('Tabs.* must be used inside <Tabs>');\n return ctx;\n}\n\nexport interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: 'horizontal' | 'vertical';\n activationMode?: 'automatic' | 'manual';\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n {\n value,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n activationMode = 'automatic',\n className,\n children,\n ...rest\n },\n ref,\n) {\n const [active, setActive] = useControlled<string>({\n controlled: value,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n const baseId = useId();\n\n const ctx = useMemo<TabsContextValue>(\n () => ({ value: active, setValue: setActive, orientation, activationMode, baseId }),\n [active, setActive, orientation, activationMode, baseId],\n );\n\n return (\n <TabsContext.Provider value={ctx}>\n <div\n ref={ref}\n data-orientation={orientation}\n className={cn(\n orientation === 'vertical' ? 'flex gap-2' : 'flex flex-col gap-2',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n});\n\nexport interface TabsListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const TabsList = forwardRef<HTMLDivElement, TabsListProps>(function TabsList(\n { className, children, ...rest },\n ref,\n) {\n const ctx = useTabsContext();\n return (\n <RovingFocusGroup\n ref={ref as never}\n orientation={ctx.orientation}\n loop\n role=\"tablist\"\n aria-orientation={ctx.orientation}\n data-orientation={ctx.orientation}\n className={cn(\n 'inline-flex border-border',\n ctx.orientation === 'vertical' ? 'flex-col border-r' : 'flex-row border-b',\n className,\n )}\n {...rest}\n >\n {children}\n </RovingFocusGroup>\n );\n});\n\nexport interface TabsTabProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {\n value: string;\n disabled?: boolean;\n}\n\nexport const TabsTab = forwardRef<HTMLButtonElement, TabsTabProps>(function TabsTab(\n { value, disabled = false, className, onClick, onFocus, children, ...rest },\n ref,\n) {\n const ctx = useTabsContext();\n const roving = useRovingFocusItem();\n const selected = ctx.value === value;\n const tabId = `${ctx.baseId}-tab-${value}`;\n const panelId = `${ctx.baseId}-panel-${value}`;\n\n return (\n <button\n ref={(node) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n id={tabId}\n role=\"tab\"\n type=\"button\"\n aria-selected={selected}\n aria-controls={panelId}\n data-state={selected ? 'active' : 'inactive'}\n data-disabled={dataAttr(disabled)}\n tabIndex={roving.tabIndex}\n disabled={disabled}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || disabled) return;\n ctx.setValue(value);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n roving.onFocus();\n if (ctx.activationMode === 'automatic' && !disabled) {\n ctx.setValue(value);\n }\n }}\n onKeyDown={roving.onKeyDown}\n className={cn(\n 'inline-flex items-center justify-center gap-2 px-4 py-2 text-sm font-medium text-muted-foreground transition-colors',\n 'hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'data-[state=active]:text-foreground data-[state=active]:border-primary',\n ctx.orientation === 'vertical'\n ? 'border-r-2 border-transparent data-[state=active]:border-primary'\n : 'border-b-2 border-transparent data-[state=active]:border-primary',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...rest}\n >\n {children}\n </button>\n );\n});\n\nexport interface TabsPanelProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n children: ReactNode;\n}\n\nexport const TabsPanel = forwardRef<HTMLDivElement, TabsPanelProps>(function TabsPanel(\n { value, className, children, ...rest },\n ref,\n) {\n const ctx = useTabsContext();\n if (ctx.value !== value) return null;\n const tabId = `${ctx.baseId}-tab-${value}`;\n const panelId = `${ctx.baseId}-panel-${value}`;\n return (\n <div\n ref={ref}\n id={panelId}\n role=\"tabpanel\"\n aria-labelledby={tabId}\n tabIndex={0}\n className={cn(\n 'flex-1 outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n});\n\ntype TabsComponent = typeof Tabs & {\n List: typeof TabsList;\n Tab: typeof TabsTab;\n Panel: typeof TabsPanel;\n};\n\n(Tabs as TabsComponent).List = TabsList;\n(Tabs as TabsComponent).Tab = TabsTab;\n(Tabs as TabsComponent).Panel = TabsPanel;\n\nexport default Tabs as TabsComponent;\n","import { tv, type VariantProps } from '../../utils';\n\nexport const listVariants = tv({\n base: 'list-outside',\n variants: {\n marker: {\n none: 'list-none pl-0',\n disc: 'list-disc pl-5',\n decimal: 'list-decimal pl-5',\n check: 'list-none pl-0',\n },\n spacing: {\n tight: '[&>li]:py-0.5',\n normal: '[&>li]:py-1',\n loose: '[&>li]:py-2',\n },\n },\n defaultVariants: {\n marker: 'none',\n spacing: 'normal',\n },\n});\n\nexport const listItemVariants = tv({\n base: 'flex items-start gap-3 text-sm text-foreground',\n});\n\nexport type ListVariants = VariantProps<typeof listVariants>;\n","import { forwardRef, type HTMLAttributes, type LiHTMLAttributes, type ReactNode } from 'react';\nimport { Check } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { listItemVariants, listVariants, type ListVariants } from './List.variants';\n\nexport interface ListProps\n extends Omit<HTMLAttributes<HTMLUListElement | HTMLOListElement>, 'type'>,\n ListVariants {\n ordered?: boolean;\n children: ReactNode;\n}\n\nexport const List = forwardRef<HTMLUListElement | HTMLOListElement, ListProps>(function List(\n { ordered, marker, spacing, className, children, ...rest },\n ref,\n) {\n const Component = (ordered ? 'ol' : 'ul') as 'ol';\n return (\n <Component\n ref={ref as React.Ref<HTMLOListElement>}\n className={cn(listVariants({ marker, spacing }), className)}\n {...(rest as HTMLAttributes<HTMLOListElement>)}\n >\n {children}\n </Component>\n );\n});\n\nexport interface ListItemProps extends LiHTMLAttributes<HTMLLIElement> {\n /** Leading slot — icon, avatar, marker. */\n leading?: ReactNode;\n /** Trailing slot — badge, chevron, status. */\n trailing?: ReactNode;\n /** Auto-render a check marker if the parent List uses `marker=\"check\"`. */\n showCheckMarker?: boolean;\n children: ReactNode;\n}\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(function ListItem(\n { leading, trailing, showCheckMarker, className, children, ...rest },\n ref,\n) {\n return (\n <li ref={ref} className={cn(listItemVariants(), className)} {...rest}>\n {showCheckMarker && (\n <span aria-hidden=\"true\" className=\"mt-0.5 shrink-0 text-primary\">\n <Check className=\"h-4 w-4\" />\n </span>\n )}\n {leading && (\n <span aria-hidden=\"true\" className=\"mt-0.5 shrink-0 text-muted-foreground\">\n {leading}\n </span>\n )}\n <span className=\"flex-1\">{children}</span>\n {trailing && <span className=\"shrink-0 text-muted-foreground\">{trailing}</span>}\n </li>\n );\n});\n\ntype ListComponent = typeof List & {\n Item: typeof ListItem;\n};\n\n(List as ListComponent).Item = ListItem;\n\nexport default List as ListComponent;\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport type TimelineStatus =\n | 'default'\n | 'primary'\n | 'success'\n | 'warning'\n | 'destructive'\n | 'info';\n\ninterface TimelineContextValue {\n align: 'left' | 'right';\n total: number;\n}\n\nconst TimelineContext = createContext<TimelineContextValue | null>(null);\n\nexport interface TimelineProps extends HTMLAttributes<HTMLOListElement> {\n align?: 'left' | 'right';\n children: ReactNode;\n}\n\nexport const Timeline = forwardRef<HTMLOListElement, TimelineProps>(function Timeline(\n { align = 'left', className, children, ...rest },\n ref,\n) {\n const total = Children.toArray(children).filter(isValidElement).length;\n return (\n <TimelineContext.Provider value={{ align, total }}>\n <ol\n ref={ref}\n className={cn(\n 'flex list-none flex-col',\n align === 'right' && 'items-end',\n className,\n )}\n {...rest}\n >\n {Children.map(children, (child, idx) => {\n if (!isValidElement(child)) return child;\n return (idx === total - 1\n ? // mark the last item so the connector line is suppressed\n { ...(child as ReactElement<{ 'data-last'?: string }>), props: { ...(child.props as Record<string, unknown>), 'data-last': '' } }\n : child) as ReactNode;\n })}\n </ol>\n </TimelineContext.Provider>\n );\n});\n\nconst STATUS_BG: Record<TimelineStatus, string> = {\n default: 'bg-muted text-muted-foreground border-border',\n primary: 'bg-primary text-primary-foreground border-primary',\n success: 'bg-success text-success-foreground border-success',\n warning: 'bg-warning text-warning-foreground border-warning',\n destructive: 'bg-destructive text-destructive-foreground border-destructive',\n info: 'bg-info text-info-foreground border-info',\n};\n\nexport interface TimelineItemProps extends HTMLAttributes<HTMLLIElement> {\n status?: TimelineStatus;\n icon?: ReactNode;\n children: ReactNode;\n}\n\nexport const TimelineItem = forwardRef<HTMLLIElement, TimelineItemProps>(function TimelineItem(\n { status = 'default', icon, className, children, ...rest },\n ref,\n) {\n const ctx = useContext(TimelineContext);\n const isLast = (rest as { 'data-last'?: string })['data-last'] !== undefined;\n\n return (\n <li\n ref={ref}\n data-status={status}\n className={cn('relative flex gap-3 pb-6 last:pb-0', className)}\n {...rest}\n >\n {/* Marker + connector column */}\n <div className=\"relative flex flex-col items-center\">\n <span\n aria-hidden=\"true\"\n className={cn(\n 'relative z-raised grid h-7 w-7 place-items-center rounded-full border-2',\n STATUS_BG[status],\n )}\n >\n {icon ?? <span className=\"h-1.5 w-1.5 rounded-full bg-current\" />}\n </span>\n {!isLast && (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'absolute left-1/2 top-7 h-full w-px -translate-x-1/2 bg-border',\n )}\n />\n )}\n </div>\n {/* Content */}\n <div className={cn('flex-1 pt-0.5', ctx?.align === 'right' && 'order-first text-right')}>\n {children}\n </div>\n </li>\n );\n});\n\nexport interface TimelineTitleProps extends HTMLAttributes<HTMLHeadingElement> {\n children: ReactNode;\n}\n\nexport function TimelineTitle({ className, children, ...rest }: TimelineTitleProps) {\n return (\n <h4 className={cn('text-sm font-medium text-foreground', className)} {...rest}>\n {children}\n </h4>\n );\n}\n\nexport interface TimelineDescriptionProps extends HTMLAttributes<HTMLParagraphElement> {\n children: ReactNode;\n}\n\nexport function TimelineDescription({\n className,\n children,\n ...rest\n}: TimelineDescriptionProps) {\n return (\n <p className={cn('text-xs text-muted-foreground', className)} {...rest}>\n {children}\n </p>\n );\n}\n\ntype TimelineComponent = typeof Timeline & {\n Item: typeof TimelineItem;\n Title: typeof TimelineTitle;\n Description: typeof TimelineDescription;\n};\n\n(Timeline as TimelineComponent).Item = TimelineItem;\n(Timeline as TimelineComponent).Title = TimelineTitle;\n(Timeline as TimelineComponent).Description = TimelineDescription;\n\nexport default Timeline as TimelineComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport { cn, dataAttr } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { RovingFocusGroup, useRovingFocusItem } from '../../primitives';\n\ninterface TreeContextValue {\n selectedValue: string | null;\n setSelectedValue: (value: string) => void;\n expanded: Set<string>;\n toggleExpanded: (value: string) => void;\n}\n\nconst TreeContext = createContext<TreeContextValue | null>(null);\n\nfunction useTreeContext() {\n const ctx = useContext(TreeContext);\n if (!ctx) throw new Error('Tree.* must be used inside <Tree>');\n return ctx;\n}\n\ninterface TreeLevelContextValue {\n level: number;\n}\n\nconst TreeLevelContext = createContext<TreeLevelContextValue>({ level: 1 });\n\nfunction useTreeLevel() {\n return useContext(TreeLevelContext).level;\n}\n\nexport interface TreeProps extends Omit<HTMLAttributes<HTMLUListElement>, 'defaultValue'> {\n selectedValue?: string | null;\n defaultSelectedValue?: string | null;\n onSelectionChange?: (value: string) => void;\n expanded?: string[];\n defaultExpanded?: string[];\n onExpandedChange?: (values: string[]) => void;\n}\n\nexport const Tree = forwardRef<HTMLUListElement, TreeProps>(function Tree(\n {\n selectedValue,\n defaultSelectedValue,\n onSelectionChange,\n expanded,\n defaultExpanded,\n onExpandedChange,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const [selected, setSelected] = useControlled<string | null>({\n controlled: selectedValue,\n default: defaultSelectedValue ?? null,\n onChange: onSelectionChange as ((v: string | null) => void) | undefined,\n });\n const [expandedList, setExpandedList] = useControlled<string[]>({\n controlled: expanded,\n default: defaultExpanded ?? [],\n onChange: onExpandedChange,\n });\n\n const expandedSet = useMemo(() => new Set(expandedList), [expandedList]);\n\n const toggleExpanded = useCallback(\n (value: string) => {\n const next = new Set(expandedSet);\n if (next.has(value)) next.delete(value);\n else next.add(value);\n setExpandedList(Array.from(next));\n },\n [expandedSet, setExpandedList],\n );\n\n const ctx = useMemo<TreeContextValue>(\n () => ({\n selectedValue: selected,\n setSelectedValue: setSelected,\n expanded: expandedSet,\n toggleExpanded,\n }),\n [selected, setSelected, expandedSet, toggleExpanded],\n );\n\n return (\n <TreeContext.Provider value={ctx}>\n <RovingFocusGroup\n ref={ref as never}\n orientation=\"vertical\"\n loop\n role=\"tree\"\n className={cn('flex flex-col text-sm', className)}\n {...(rest as HTMLAttributes<HTMLDivElement>)}\n >\n {children}\n </RovingFocusGroup>\n </TreeContext.Provider>\n );\n});\n\ninterface NodeRowProps {\n level: number;\n selected: boolean;\n expanded?: boolean;\n hasChildren: boolean;\n disabled: boolean;\n onActivate: () => void;\n label: ReactNode;\n}\n\nfunction NodeRow({\n level,\n selected,\n expanded,\n hasChildren,\n disabled,\n onActivate,\n label,\n}: NodeRowProps) {\n const roving = useRovingFocusItem();\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n roving.onKeyDown(e);\n if (e.defaultPrevented || disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onActivate();\n }\n },\n [roving, disabled, onActivate],\n );\n return (\n <div\n ref={roving.ref as never}\n role=\"treeitem\"\n aria-level={level}\n aria-selected={selected || undefined}\n aria-expanded={hasChildren ? expanded : undefined}\n aria-disabled={disabled || undefined}\n data-selected={dataAttr(selected)}\n data-disabled={dataAttr(disabled)}\n tabIndex={roving.tabIndex}\n onFocus={roving.onFocus}\n onKeyDown={handleKeyDown}\n onClick={() => {\n if (!disabled) onActivate();\n }}\n style={{ paddingLeft: `${(level - 1) * 16}px` }}\n className={cn(\n 'flex cursor-pointer items-center gap-1 rounded-sm px-2 py-1 transition-colors',\n 'hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected && 'bg-primary-soft text-primary-soft-foreground',\n disabled && 'pointer-events-none opacity-50',\n )}\n >\n {hasChildren ? (\n <ChevronRight\n className={cn(\n 'h-4 w-4 shrink-0 text-muted-foreground transition-transform',\n expanded && 'rotate-90',\n )}\n />\n ) : (\n <span className=\"w-4 shrink-0\" />\n )}\n <span className=\"flex-1 truncate\">{label}</span>\n </div>\n );\n}\n\nexport interface TreeGroupProps extends HTMLAttributes<HTMLLIElement> {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const TreeGroup = forwardRef<HTMLLIElement, TreeGroupProps>(function TreeGroup(\n { value, label, disabled = false, className, children, ...rest },\n ref,\n) {\n const ctx = useTreeContext();\n const level = useTreeLevel();\n const expanded = ctx.expanded.has(value);\n\n return (\n <li\n ref={ref}\n role=\"presentation\"\n data-state={expanded ? 'open' : 'closed'}\n className={cn('list-none', className)}\n {...rest}\n >\n <NodeRow\n level={level}\n selected={false}\n expanded={expanded}\n hasChildren\n disabled={disabled}\n onActivate={() => ctx.toggleExpanded(value)}\n label={label}\n />\n {expanded && (\n <TreeLevelContext.Provider value={{ level: level + 1 }}>\n <ul role=\"group\" className=\"flex flex-col\">\n {children}\n </ul>\n </TreeLevelContext.Provider>\n )}\n </li>\n );\n});\n\nexport interface TreeItemProps extends HTMLAttributes<HTMLLIElement> {\n value: string;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const TreeItem = forwardRef<HTMLLIElement, TreeItemProps>(function TreeItem(\n { value, disabled = false, className, children, ...rest },\n ref,\n) {\n const ctx = useTreeContext();\n const level = useTreeLevel();\n const selected = ctx.selectedValue === value;\n\n return (\n <li ref={ref} role=\"presentation\" className={cn('list-none', className)} {...rest}>\n <NodeRow\n level={level}\n selected={selected}\n hasChildren={false}\n disabled={disabled}\n onActivate={() => ctx.setSelectedValue(value)}\n label={children}\n />\n </li>\n );\n});\n\ntype TreeComponent = typeof Tree & {\n Group: typeof TreeGroup;\n Item: typeof TreeItem;\n};\n\n(Tree as TreeComponent).Group = TreeGroup;\n(Tree as TreeComponent).Item = TreeItem;\n\nexport default Tree as TreeComponent;\n","import {\n createContext,\n forwardRef,\n useContext,\n type HTMLAttributes,\n type ReactNode,\n type TableHTMLAttributes,\n type ThHTMLAttributes,\n type TdHTMLAttributes,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport type TableDensity = 'compact' | 'cozy' | 'comfortable';\n\ninterface TableContextValue {\n striped: boolean;\n hoverable: boolean;\n density: TableDensity;\n}\n\nconst TableContext = createContext<TableContextValue>({\n striped: false,\n hoverable: false,\n density: 'cozy',\n});\n\nconst DENSITY_CELL: Record<TableDensity, string> = {\n compact: 'px-2 py-1.5 text-sm',\n cozy: 'px-3 py-2 text-sm',\n comfortable: 'px-4 py-3 text-sm',\n};\n\nexport interface TableProps extends TableHTMLAttributes<HTMLTableElement> {\n striped?: boolean;\n hoverable?: boolean;\n density?: TableDensity;\n bare?: boolean;\n children: ReactNode;\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n { striped = false, hoverable = false, density = 'cozy', bare = false, className, children, ...rest },\n ref,\n) {\n const ctx = { striped, hoverable, density };\n const tableEl = (\n <table\n ref={ref}\n className={cn('w-full caption-bottom border-collapse text-left', className)}\n {...rest}\n >\n {children}\n </table>\n );\n return (\n <TableContext.Provider value={ctx}>\n {bare ? tableEl : (\n <div className=\"relative w-full overflow-x-auto rounded-md border border-border\">\n {tableEl}\n </div>\n )}\n </TableContext.Provider>\n );\n});\n\nexport const TableHead = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableHead({ className, ...rest }, ref) {\n return (\n <thead\n ref={ref}\n className={cn('border-b border-border bg-muted/50 text-xs font-semibold uppercase tracking-wide text-muted-foreground', className)}\n {...rest}\n />\n );\n },\n);\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableBody({ className, ...rest }, ref) {\n const ctx = useContext(TableContext);\n return (\n <tbody\n ref={ref}\n className={cn(\n ctx.striped && '[&>tr:nth-child(even)]:bg-muted/30',\n ctx.hoverable && '[&>tr:hover]:bg-muted',\n className,\n )}\n {...rest}\n />\n );\n },\n);\n\nexport const TableFooter = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableFooter({ className, ...rest }, ref) {\n return (\n <tfoot\n ref={ref}\n className={cn('border-t border-border bg-muted/50 font-medium', className)}\n {...rest}\n />\n );\n },\n);\n\nexport const TableRow = forwardRef<HTMLTableRowElement, HTMLAttributes<HTMLTableRowElement>>(\n function TableRow({ className, ...rest }, ref) {\n return (\n <tr\n ref={ref}\n className={cn('border-b border-border last:border-0 transition-colors data-[selected]:bg-primary-soft', className)}\n {...rest}\n />\n );\n },\n);\n\nexport interface TableHeaderCellProps extends ThHTMLAttributes<HTMLTableCellElement> {\n children?: ReactNode;\n}\n\nexport const TableHeaderCell = forwardRef<HTMLTableCellElement, TableHeaderCellProps>(\n function TableHeaderCell({ className, ...rest }, ref) {\n const ctx = useContext(TableContext);\n return (\n <th\n ref={ref}\n scope=\"col\"\n className={cn(DENSITY_CELL[ctx.density], 'font-semibold text-foreground', className)}\n {...rest}\n />\n );\n },\n);\n\nexport interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {\n children?: ReactNode;\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { className, ...rest },\n ref,\n) {\n const ctx = useContext(TableContext);\n return (\n <td\n ref={ref}\n className={cn(DENSITY_CELL[ctx.density], 'align-middle', className)}\n {...rest}\n />\n );\n});\n\nexport const TableCaption = forwardRef<\n HTMLTableCaptionElement,\n HTMLAttributes<HTMLTableCaptionElement>\n>(function TableCaption({ className, ...rest }, ref) {\n return (\n <caption\n ref={ref}\n className={cn('mt-2 text-sm text-muted-foreground', className)}\n {...rest}\n />\n );\n});\n\ntype TableComponent = typeof Table & {\n Head: typeof TableHead;\n Body: typeof TableBody;\n Footer: typeof TableFooter;\n Row: typeof TableRow;\n HeaderCell: typeof TableHeaderCell;\n Cell: typeof TableCell;\n Caption: typeof TableCaption;\n};\n\n(Table as TableComponent).Head = TableHead;\n(Table as TableComponent).Body = TableBody;\n(Table as TableComponent).Footer = TableFooter;\n(Table as TableComponent).Row = TableRow;\n(Table as TableComponent).HeaderCell = TableHeaderCell;\n(Table as TableComponent).Cell = TableCell;\n(Table as TableComponent).Caption = TableCaption;\n\nexport default Table as TableComponent;\n","import { useMemo, type ReactNode } from 'react';\nimport { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeaderCell,\n TableRow,\n type TableDensity,\n} from '../table';\n\nexport type SortDirection = 'asc' | 'desc';\n\nexport interface DataTableSort {\n columnKey: string;\n direction: SortDirection;\n}\n\nexport interface DataTableColumn<T> {\n key: string;\n header: ReactNode;\n accessor?: (row: T) => unknown;\n cell?: (row: T, index: number) => ReactNode;\n sortable?: boolean;\n align?: 'left' | 'center' | 'right';\n width?: string;\n}\n\nexport interface DataTableProps<T> {\n columns: DataTableColumn<T>[];\n data: T[];\n rowKey?: (row: T, index: number) => string | number;\n onRowClick?: (row: T, index: number) => void;\n sortBy?: DataTableSort | null;\n defaultSortBy?: DataTableSort | null;\n onSortChange?: (sort: DataTableSort | null) => void;\n striped?: boolean;\n hoverable?: boolean;\n density?: TableDensity;\n bare?: boolean;\n emptyContent?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n}\n\nfunction defaultCompare(a: unknown, b: unknown): number {\n if (a === b) return 0;\n if (a === null || a === undefined) return 1;\n if (b === null || b === undefined) return -1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n return String(a).localeCompare(String(b));\n}\n\nexport function DataTable<T>({\n columns,\n data,\n rowKey,\n onRowClick,\n sortBy,\n defaultSortBy,\n onSortChange,\n striped,\n hoverable = !!onRowClick,\n density,\n bare,\n emptyContent = 'No results.',\n className,\n 'aria-label': ariaLabel,\n}: DataTableProps<T>) {\n const [sort, setSort] = useControlled<DataTableSort | null>({\n controlled: sortBy,\n default: defaultSortBy ?? null,\n onChange: onSortChange,\n });\n\n const sortedData = useMemo(() => {\n if (!sort) return data;\n const col = columns.find((c) => c.key === sort.columnKey);\n if (!col?.accessor) return data;\n const accessor = col.accessor;\n const sorted = [...data].sort((a, b) => {\n const r = defaultCompare(accessor(a), accessor(b));\n return sort.direction === 'asc' ? r : -r;\n });\n return sorted;\n }, [data, columns, sort]);\n\n const cycleSort = (columnKey: string) => {\n if (!sort || sort.columnKey !== columnKey) {\n setSort({ columnKey, direction: 'asc' });\n } else if (sort.direction === 'asc') {\n setSort({ columnKey, direction: 'desc' });\n } else {\n setSort(null);\n }\n };\n\n const alignClass = (a: DataTableColumn<T>['align']) =>\n a === 'right' ? 'text-right' : a === 'center' ? 'text-center' : 'text-left';\n\n return (\n <Table\n striped={striped}\n hoverable={hoverable}\n density={density}\n bare={bare}\n className={className}\n aria-label={ariaLabel}\n >\n <TableHead>\n <TableRow>\n {columns.map((col) => {\n const isSorted = sort?.columnKey === col.key;\n const ariaSort = isSorted\n ? sort?.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : col.sortable\n ? 'none'\n : undefined;\n return (\n <TableHeaderCell\n key={col.key}\n aria-sort={ariaSort}\n style={col.width ? { width: col.width } : undefined}\n className={alignClass(col.align)}\n >\n {col.sortable ? (\n <button\n type=\"button\"\n onClick={() => cycleSort(col.key)}\n className={cn(\n 'inline-flex items-center gap-1 rounded-sm transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n >\n <span>{col.header}</span>\n {isSorted ? (\n sort?.direction === 'asc' ? (\n <ArrowUp className=\"h-3.5 w-3.5\" />\n ) : (\n <ArrowDown className=\"h-3.5 w-3.5\" />\n )\n ) : (\n <ArrowUpDown className=\"h-3.5 w-3.5 opacity-50\" />\n )}\n </button>\n ) : (\n col.header\n )}\n </TableHeaderCell>\n );\n })}\n </TableRow>\n </TableHead>\n <TableBody>\n {sortedData.length === 0 ? (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"py-8 text-center text-muted-foreground\">\n {emptyContent}\n </TableCell>\n </TableRow>\n ) : (\n sortedData.map((row, rowIndex) => {\n const key = rowKey ? rowKey(row, rowIndex) : rowIndex;\n return (\n <TableRow\n key={key}\n onClick={onRowClick ? () => onRowClick(row, rowIndex) : undefined}\n className={cn(onRowClick && 'cursor-pointer')}\n >\n {columns.map((col) => (\n <TableCell key={col.key} className={alignClass(col.align)}>\n {col.cell\n ? col.cell(row, rowIndex)\n : col.accessor\n ? (col.accessor(row) as ReactNode)\n : null}\n </TableCell>\n ))}\n </TableRow>\n );\n })\n )}\n </TableBody>\n </Table>\n );\n}\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\n\ninterface CarouselContextValue {\n index: number;\n setIndex: (index: number) => void;\n count: number;\n setCount: (count: number) => void;\n loop: boolean;\n prev: () => void;\n next: () => void;\n paused: boolean;\n setPaused: (paused: boolean) => void;\n autoPlay?: number;\n}\n\nconst CarouselContext = createContext<CarouselContextValue | null>(null);\n\nfunction useCarouselContext() {\n const ctx = useContext(CarouselContext);\n if (!ctx) throw new Error('Carousel.* must be used inside <Carousel>');\n return ctx;\n}\n\nexport interface CarouselProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n index?: number;\n defaultIndex?: number;\n onIndexChange?: (index: number) => void;\n loop?: boolean;\n autoPlay?: number;\n /** When set, overrides the automatic count (use for virtualised slides). */\n slidesCount?: number;\n children: ReactNode;\n}\n\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(function Carousel(\n {\n index: indexProp,\n defaultIndex = 0,\n onIndexChange,\n loop = false,\n autoPlay,\n slidesCount,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const [index, setIndexState] = useControlled({\n controlled: indexProp,\n default: defaultIndex,\n onChange: onIndexChange,\n });\n const [count, setCount] = useState(slidesCount ?? 0);\n const [paused, setPaused] = useState(false);\n\n // External override.\n useEffect(() => {\n if (slidesCount != null) setCount(slidesCount);\n }, [slidesCount]);\n\n const setIndex = useCallback(\n (i: number) => {\n if (count === 0) {\n setIndexState(0);\n return;\n }\n let next = i;\n if (loop) {\n next = ((i % count) + count) % count;\n } else {\n next = Math.max(0, Math.min(count - 1, i));\n }\n setIndexState(next);\n },\n [count, loop, setIndexState],\n );\n\n const prev = useCallback(() => setIndex(index - 1), [index, setIndex]);\n const next = useCallback(() => setIndex(index + 1), [index, setIndex]);\n\n // Auto-play.\n useEffect(() => {\n if (!autoPlay || paused || count === 0) return;\n const handle = window.setInterval(() => {\n setIndex(loop ? index + 1 : Math.min(count - 1, index + 1));\n }, autoPlay);\n return () => window.clearInterval(handle);\n }, [autoPlay, paused, count, index, loop, setIndex]);\n\n const ctx = useMemo<CarouselContextValue>(\n () => ({ index, setIndex, count, setCount, loop, prev, next, paused, setPaused, autoPlay }),\n [index, setIndex, count, loop, prev, next, paused, autoPlay],\n );\n\n return (\n <CarouselContext.Provider value={ctx}>\n <div\n ref={ref}\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}\n onFocus={() => setPaused(true)}\n onBlur={() => setPaused(false)}\n className={cn('relative', className)}\n {...rest}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n});\n\nexport interface CarouselViewportProps extends HTMLAttributes<HTMLDivElement> {\n /** Default `'Carousel'`. */\n 'aria-label'?: string;\n}\n\nexport const CarouselViewport = forwardRef<HTMLDivElement, CarouselViewportProps>(\n function CarouselViewport(\n { 'aria-label': ariaLabel = 'Carousel', className, onKeyDown, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useCarouselContext();\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n ctx.prev();\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n ctx.next();\n }\n };\n return (\n <div\n ref={forwardedRef}\n role=\"group\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(\n 'relative overflow-hidden rounded-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nexport interface CarouselSlidesProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const CarouselSlides = forwardRef<HTMLDivElement, CarouselSlidesProps>(\n function CarouselSlides({ className, children, ...rest }, forwardedRef) {\n const ctx = useCarouselContext();\n const childArray = Children.toArray(children).filter(isValidElement);\n\n useEffect(() => {\n ctx.setCount(childArray.length);\n }, [childArray.length, ctx]);\n\n return (\n <div\n ref={forwardedRef}\n aria-live={ctx.autoPlay ? 'off' : 'polite'}\n className={cn('flex transition-transform duration-300 ease-out', className)}\n style={{ transform: `translateX(-${ctx.index * 100}%)` }}\n {...rest}\n >\n {childArray.map((child, idx) => (\n <div\n key={idx}\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`${idx + 1} of ${childArray.length}`}\n aria-hidden={idx !== ctx.index || undefined}\n className=\"w-full shrink-0\"\n >\n {child}\n </div>\n ))}\n </div>\n );\n },\n);\n\nexport type CarouselSlideProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CarouselSlide = forwardRef<HTMLDivElement, CarouselSlideProps>(\n function CarouselSlide({ className, ...rest }, ref) {\n return <div ref={ref} className={cn('h-full w-full', className)} {...rest} />;\n },\n);\n\nexport interface CarouselNavButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Default `'Previous slide'` / `'Next slide'`. */\n 'aria-label'?: string;\n}\n\nexport const CarouselPrev = forwardRef<HTMLButtonElement, CarouselNavButtonProps>(\n function CarouselPrev(\n { 'aria-label': ariaLabel = 'Previous slide', className, onClick, type = 'button', children, ...rest },\n forwardedRef,\n ) {\n const ctx = useCarouselContext();\n const disabled = !ctx.loop && ctx.index === 0;\n return (\n <button\n ref={forwardedRef}\n type={type}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.prev();\n }}\n className={cn(\n 'absolute left-2 top-1/2 inline-flex h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full bg-background/80 text-foreground shadow ring-1 ring-border transition-colors hover:bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-40',\n className,\n )}\n {...rest}\n >\n {children ?? <Icon icon={ChevronLeft} size={16} />}\n </button>\n );\n },\n);\n\nexport const CarouselNext = forwardRef<HTMLButtonElement, CarouselNavButtonProps>(\n function CarouselNext(\n { 'aria-label': ariaLabel = 'Next slide', className, onClick, type = 'button', children, ...rest },\n forwardedRef,\n ) {\n const ctx = useCarouselContext();\n const disabled = !ctx.loop && ctx.index === ctx.count - 1;\n return (\n <button\n ref={forwardedRef}\n type={type}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.next();\n }}\n className={cn(\n 'absolute right-2 top-1/2 inline-flex h-8 w-8 -translate-y-1/2 items-center justify-center rounded-full bg-background/80 text-foreground shadow ring-1 ring-border transition-colors hover:bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-40',\n className,\n )}\n {...rest}\n >\n {children ?? <Icon icon={ChevronRight} size={16} />}\n </button>\n );\n },\n);\n\nexport type CarouselDotsProps = HTMLAttributes<HTMLDivElement>;\n\nexport const CarouselDots = forwardRef<HTMLDivElement, CarouselDotsProps>(\n function CarouselDots({ className, ...rest }, forwardedRef) {\n const ctx = useCarouselContext();\n return (\n <div\n ref={forwardedRef}\n className={cn('mt-3 flex items-center justify-center gap-1.5', className)}\n {...rest}\n >\n {Array.from({ length: ctx.count }, (_, i) => (\n <CarouselDot key={i} slideIndex={i} />\n ))}\n </div>\n );\n },\n);\n\nexport interface CarouselDotProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n slideIndex: number;\n}\n\nexport const CarouselDot = forwardRef<HTMLButtonElement, CarouselDotProps>(\n function CarouselDot({ slideIndex, className, onClick, type = 'button', ...rest }, forwardedRef) {\n const ctx = useCarouselContext();\n const isActive = ctx.index === slideIndex;\n return (\n <button\n ref={forwardedRef}\n type={type}\n aria-label={`Go to slide ${slideIndex + 1}`}\n aria-current={isActive || undefined}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setIndex(slideIndex);\n }}\n className={cn(\n 'h-1.5 rounded-full bg-border transition-all hover:bg-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isActive ? 'w-6 bg-primary hover:bg-primary' : 'w-1.5',\n className,\n )}\n {...rest}\n />\n );\n },\n);\n\ntype CarouselComponent = typeof Carousel & {\n Viewport: typeof CarouselViewport;\n Slides: typeof CarouselSlides;\n Slide: typeof CarouselSlide;\n Prev: typeof CarouselPrev;\n Next: typeof CarouselNext;\n Dots: typeof CarouselDots;\n Dot: typeof CarouselDot;\n};\n\n(Carousel as CarouselComponent).Viewport = CarouselViewport;\n(Carousel as CarouselComponent).Slides = CarouselSlides;\n(Carousel as CarouselComponent).Slide = CarouselSlide;\n(Carousel as CarouselComponent).Prev = CarouselPrev;\n(Carousel as CarouselComponent).Next = CarouselNext;\n(Carousel as CarouselComponent).Dots = CarouselDots;\n(Carousel as CarouselComponent).Dot = CarouselDot;\n\nexport default Carousel as CarouselComponent;\n","import {\n forwardRef,\n useRef,\n useState,\n type HTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface SwipeActionsProps extends HTMLAttributes<HTMLDivElement> {\n left?: ReactNode;\n right?: ReactNode;\n /** px the user must drag before the row snaps open. */\n threshold?: number;\n /** Used to compute snap distance. Width per action button (px). */\n actionWidth?: number;\n disabled?: boolean;\n children: ReactNode;\n}\n\ntype Side = 'left' | 'right' | null;\n\n/**\n * Drag a row left/right to reveal action slots. Pointer-event based — works\n * with touch and mouse. Tap the row body while open to close.\n */\nexport const SwipeActions = forwardRef<HTMLDivElement, SwipeActionsProps>(\n function SwipeActions(\n {\n left,\n right,\n threshold = 60,\n actionWidth = 72,\n disabled,\n className,\n children,\n ...rest\n },\n forwardedRef,\n ) {\n const startXRef = useRef<number | null>(null);\n const startOffsetRef = useRef(0);\n const [offset, setOffset] = useState(0);\n const [openSide, setOpenSide] = useState<Side>(null);\n\n const leftSlots = countNodes(left);\n const rightSlots = countNodes(right);\n const leftMax = leftSlots * actionWidth;\n const rightMax = rightSlots * actionWidth;\n\n const onPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n startXRef.current = e.clientX;\n startOffsetRef.current = offset;\n (e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n };\n\n const onPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled || startXRef.current == null) return;\n const dx = e.clientX - startXRef.current + startOffsetRef.current;\n const clamped = Math.max(-rightMax, Math.min(leftMax, dx));\n setOffset(clamped);\n };\n\n const onPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (startXRef.current == null) return;\n startXRef.current = null;\n (e.currentTarget as HTMLDivElement).releasePointerCapture?.(e.pointerId);\n // Snap.\n if (offset > threshold && leftMax > 0) {\n setOffset(leftMax);\n setOpenSide('left');\n } else if (offset < -threshold && rightMax > 0) {\n setOffset(-rightMax);\n setOpenSide('right');\n } else {\n setOffset(0);\n setOpenSide(null);\n }\n };\n\n const close = () => {\n setOffset(0);\n setOpenSide(null);\n };\n\n return (\n <div\n ref={forwardedRef}\n className={cn(\n 'relative overflow-hidden bg-card text-card-foreground',\n className,\n )}\n {...rest}\n >\n {left && (\n <div\n className=\"absolute inset-y-0 left-0 flex\"\n style={{ width: leftMax }}\n aria-hidden={openSide !== 'left'}\n >\n {left}\n </div>\n )}\n {right && (\n <div\n className=\"absolute inset-y-0 right-0 flex\"\n style={{ width: rightMax }}\n aria-hidden={openSide !== 'right'}\n >\n {right}\n </div>\n )}\n <div\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n onClick={openSide ? close : undefined}\n style={{\n transform: `translateX(${offset}px)`,\n transition: startXRef.current == null ? 'transform 200ms ease-out' : 'none',\n touchAction: 'pan-y',\n }}\n className=\"relative bg-card\"\n >\n {children}\n </div>\n </div>\n );\n },\n);\n\nfunction countNodes(node: ReactNode): number {\n if (!node) return 0;\n if (Array.isArray(node)) return node.length;\n return 1;\n}\n","import { forwardRef, useMemo, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport type DiffView = 'split' | 'unified';\n\ntype DiffOp = 'unchanged' | 'added' | 'removed';\n\ninterface DiffRow {\n op: DiffOp;\n leftNum: number | null;\n rightNum: number | null;\n text: string;\n}\n\nexport interface DiffViewerProps extends HTMLAttributes<HTMLDivElement> {\n left: string;\n right: string;\n view?: DiffView;\n leftLabel?: ReactNode;\n rightLabel?: ReactNode;\n showStats?: boolean;\n}\n\n/**\n * Line-level diff viewer (split / unified). Own LCS implementation; no\n * external diff dep. For intra-line word highlighting, install `diff` and\n * post-process — deferred.\n */\nexport const DiffViewer = forwardRef<HTMLDivElement, DiffViewerProps>(function DiffViewer(\n { left, right, view = 'split', leftLabel = 'Before', rightLabel = 'After', showStats = true, className, ...rest },\n ref,\n) {\n const rows = useMemo(() => computeDiff(left, right), [left, right]);\n const stats = useMemo(() => {\n let added = 0;\n let removed = 0;\n for (const r of rows) {\n if (r.op === 'added') added += 1;\n if (r.op === 'removed') removed += 1;\n }\n return { added, removed };\n }, [rows]);\n\n return (\n <div\n ref={ref}\n className={cn(\n 'overflow-hidden rounded-md border border-border bg-card font-mono text-xs text-card-foreground shadow-sm',\n className,\n )}\n {...rest}\n >\n {showStats && (\n <div className=\"flex items-center justify-between border-b border-border bg-muted/40 px-3 py-1.5 text-xs\">\n <div className=\"text-muted-foreground\">{leftLabel} → {rightLabel}</div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-success font-medium\">+{stats.added}</span>\n <span className=\"text-destructive font-medium\">−{stats.removed}</span>\n </div>\n </div>\n )}\n {view === 'split' ? <SplitView rows={rows} /> : <UnifiedView rows={rows} />}\n </div>\n );\n});\n\nfunction SplitView({ rows }: { rows: DiffRow[] }) {\n // Pair removed/added rows row-by-row when possible to align them.\n // Simple alignment: walk, when we hit \"removed\" followed by \"added\", pair them.\n const pairs: Array<{ left?: DiffRow; right?: DiffRow }> = [];\n for (let i = 0; i < rows.length; i++) {\n const r = rows[i]!;\n if (r.op === 'unchanged') {\n pairs.push({ left: r, right: r });\n } else if (r.op === 'removed') {\n const next = rows[i + 1];\n if (next && next.op === 'added') {\n pairs.push({ left: r, right: next });\n i++;\n } else {\n pairs.push({ left: r });\n }\n } else if (r.op === 'added') {\n pairs.push({ right: r });\n }\n }\n\n return (\n <div className=\"grid grid-cols-2 divide-x divide-border\">\n <DiffColumn rows={pairs.map((p) => p.left)} />\n <DiffColumn rows={pairs.map((p) => p.right)} side=\"right\" />\n </div>\n );\n}\n\nfunction DiffColumn({ rows, side = 'left' }: { rows: Array<DiffRow | undefined>; side?: 'left' | 'right' }) {\n return (\n <div className=\"overflow-x-auto\">\n {rows.map((r, i) => {\n if (!r) {\n return (\n <div key={i} className=\"flex bg-muted/30\">\n <span className=\"select-none w-10 shrink-0 px-2 py-0.5 text-right text-muted-foreground\">·</span>\n <span className=\"flex-1 whitespace-pre px-2 py-0.5\"> </span>\n </div>\n );\n }\n const num = side === 'left' ? r.leftNum : r.rightNum;\n const isChanged =\n (side === 'left' && r.op === 'removed') || (side === 'right' && r.op === 'added');\n return (\n <div\n key={i}\n data-state={r.op}\n className={cn(\n 'flex',\n isChanged && side === 'left' && 'bg-destructive-soft',\n isChanged && side === 'right' && 'bg-success-soft',\n )}\n >\n <span className=\"select-none w-10 shrink-0 border-r border-border px-2 py-0.5 text-right text-muted-foreground tabular-nums\">\n {num ?? ''}\n </span>\n <span className=\"flex-1 whitespace-pre px-2 py-0.5\">{r.text || ' '}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction UnifiedView({ rows }: { rows: DiffRow[] }) {\n return (\n <div className=\"overflow-x-auto\">\n {rows.map((r, i) => (\n <div\n key={i}\n data-state={r.op}\n className={cn(\n 'flex',\n r.op === 'added' && 'bg-success-soft',\n r.op === 'removed' && 'bg-destructive-soft',\n )}\n >\n <span className=\"select-none w-10 shrink-0 border-r border-border px-2 py-0.5 text-right text-muted-foreground tabular-nums\">\n {r.leftNum ?? ''}\n </span>\n <span className=\"select-none w-10 shrink-0 border-r border-border px-2 py-0.5 text-right text-muted-foreground tabular-nums\">\n {r.rightNum ?? ''}\n </span>\n <span className=\"w-5 shrink-0 px-1 py-0.5 text-center text-muted-foreground\">\n {r.op === 'added' ? '+' : r.op === 'removed' ? '−' : ' '}\n </span>\n <span className=\"flex-1 whitespace-pre px-2 py-0.5\">{r.text || ' '}</span>\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * LCS-based line diff. Returns ordered rows with `unchanged` / `added` /\n * `removed` operations. O(n×m) time + space.\n */\nfunction computeDiff(left: string, right: string): DiffRow[] {\n const a = left.split('\\n');\n const b = right.split('\\n');\n const n = a.length;\n const m = b.length;\n\n // LCS table: dp[i][j] = LCS length of a[0..i] and b[0..j].\n const dp: number[][] = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));\n for (let i = 1; i <= n; i++) {\n for (let j = 1; j <= m; j++) {\n if (a[i - 1] === b[j - 1]) dp[i]![j] = dp[i - 1]![j - 1]! + 1;\n else dp[i]![j] = Math.max(dp[i - 1]![j]!, dp[i]![j - 1]!);\n }\n }\n\n // Backtrack.\n const rows: DiffRow[] = [];\n let i = n;\n let j = m;\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && a[i - 1] === b[j - 1]) {\n rows.push({ op: 'unchanged', leftNum: i, rightNum: j, text: a[i - 1]! });\n i--;\n j--;\n } else if (j > 0 && (i === 0 || dp[i]![j - 1]! >= dp[i - 1]![j]!)) {\n rows.push({ op: 'added', leftNum: null, rightNum: j, text: b[j - 1]! });\n j--;\n } else if (i > 0) {\n rows.push({ op: 'removed', leftNum: i, rightNum: null, text: a[i - 1]! });\n i--;\n } else {\n break;\n }\n }\n rows.reverse();\n return rows;\n}\n","import { forwardRef, useId, useMemo, type SVGAttributes } from 'react';\nimport { cn } from '../../utils';\n\nexport type SparklineVariant = 'line' | 'area' | 'bar' | 'dot';\nexport type SparklineTone = 'brand' | 'success' | 'warning' | 'danger' | 'muted' | 'current';\n\nexport interface SparklineProps extends Omit<SVGAttributes<SVGSVGElement>, 'width' | 'height'> {\n data: number[];\n variant?: SparklineVariant;\n width?: number;\n height?: number;\n tone?: SparklineTone;\n min?: number;\n max?: number;\n showLast?: boolean;\n /** Accessible label summarizing the trend. */\n ariaLabel?: string;\n}\n\nconst TONE_CLASS: Record<SparklineTone, string> = {\n brand: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-destructive',\n muted: 'text-muted-foreground',\n current: '',\n};\n\n/**\n * Inline trend chart — line / area / bar / dot. SVG, no scales/axes/legend.\n * Color via Tailwind tokens (`text-*`); pair with `currentColor` for parent\n * inheritance.\n */\nexport const Sparkline = forwardRef<SVGSVGElement, SparklineProps>(function Sparkline(\n {\n data,\n variant = 'line',\n width = 120,\n height = 32,\n tone = 'brand',\n min: minProp,\n max: maxProp,\n showLast,\n ariaLabel = 'Trend',\n className,\n ...rest\n },\n ref,\n) {\n const titleId = useId();\n const { points, barWidth, lastX, lastY, areaPath, linePath } = useMemo(() => {\n if (data.length === 0) {\n return { points: [], barWidth: 0, lastX: 0, lastY: 0, areaPath: '', linePath: '' };\n }\n const min = minProp ?? Math.min(...data);\n const max = maxProp ?? Math.max(...data);\n const range = max - min || 1;\n const stepX = data.length === 1 ? 0 : width / (data.length - 1);\n const pad = 1; // keep stroke inside the box\n const pointsArr = data.map((v, i) => {\n const x = i * stepX;\n const y = height - ((v - min) / range) * (height - pad * 2) - pad;\n return [x, y] as const;\n });\n const lp = pointsArr.map(([x, y], i) => (i === 0 ? `M${x},${y}` : `L${x},${y}`)).join(' ');\n const ap = `${lp} L${pointsArr[pointsArr.length - 1]![0]},${height} L${pointsArr[0]![0]},${height} Z`;\n const bw = data.length > 0 ? width / data.length - 1 : 0;\n const last = pointsArr[pointsArr.length - 1]!;\n return { points: pointsArr, barWidth: bw, lastX: last[0], lastY: last[1], areaPath: ap, linePath: lp };\n }, [data, height, width, minProp, maxProp]);\n\n return (\n <svg\n ref={ref}\n role=\"img\"\n aria-labelledby={titleId}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n className={cn('inline-block overflow-visible', TONE_CLASS[tone], className)}\n {...rest}\n >\n <title id={titleId}>{ariaLabel}</title>\n {variant === 'area' && (\n <>\n <path d={areaPath} fill=\"currentColor\" fillOpacity={0.15} />\n <path d={linePath} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </>\n )}\n {variant === 'line' && (\n <path d={linePath} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n )}\n {variant === 'bar' && (\n <g>\n {points.map(([x, y], i) => (\n <rect\n key={i}\n x={x - barWidth / 2}\n y={y}\n width={Math.max(1, barWidth)}\n height={height - y}\n fill=\"currentColor\"\n rx={1}\n />\n ))}\n </g>\n )}\n {variant === 'dot' && (\n <g>\n {points.map(([x, y], i) => (\n <circle key={i} cx={x} cy={y} r={1.5} fill=\"currentColor\" />\n ))}\n </g>\n )}\n {showLast && data.length > 0 && variant !== 'dot' && (\n <circle cx={lastX} cy={lastY} r={2.5} fill=\"currentColor\" />\n )}\n </svg>\n );\n});\n","import { forwardRef, useMemo, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\n\nexport type HeatmapCalendarTone = 'brand' | 'success' | 'warning' | 'danger' | 'muted';\n\nconst TONE_CLASSES: Record<HeatmapCalendarTone, string[]> = {\n brand: ['bg-muted/50', 'bg-primary/20', 'bg-primary/40', 'bg-primary/70', 'bg-primary'],\n success: ['bg-muted/50', 'bg-success/20', 'bg-success/40', 'bg-success/70', 'bg-success'],\n warning: ['bg-muted/50', 'bg-warning/20', 'bg-warning/40', 'bg-warning/70', 'bg-warning'],\n danger: ['bg-muted/50', 'bg-destructive/20', 'bg-destructive/40', 'bg-destructive/70', 'bg-destructive'],\n muted: ['bg-muted/30', 'bg-muted', 'bg-muted-foreground/30', 'bg-muted-foreground/60', 'bg-muted-foreground'],\n};\n\nexport interface HeatmapCalendarProps extends HTMLAttributes<HTMLDivElement> {\n values: Record<string, number> | Map<string, number>;\n year?: number;\n weekStart?: 0 | 1;\n cellSize?: number;\n gap?: number;\n levels?: number;\n tone?: HeatmapCalendarTone;\n onCellClick?: (date: string, value: number) => void;\n monthLabels?: string[];\n weekdayLabels?: string[];\n showLegend?: boolean;\n}\n\nconst DEFAULT_MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nconst DEFAULT_WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\nfunction formatDate(d: Date): string {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${y}-${m}-${day}`;\n}\n\n/**\n * Year-long heatmap. 53 columns (weeks) × 7 rows (weekdays). Per-cell color\n * intensity from `values[YYYY-MM-DD]`, bucketed into `levels` steps.\n */\nexport const HeatmapCalendar = forwardRef<HTMLDivElement, HeatmapCalendarProps>(\n function HeatmapCalendar(\n {\n values,\n year = new Date().getFullYear(),\n weekStart = 0,\n cellSize = 12,\n gap = 2,\n levels = 5,\n tone = 'brand',\n onCellClick,\n monthLabels = DEFAULT_MONTHS,\n weekdayLabels = DEFAULT_WEEKDAYS,\n showLegend = true,\n className,\n ...rest\n },\n ref,\n ) {\n const valueMap = useMemo(() => {\n if (values instanceof Map) return values;\n return new Map(Object.entries(values));\n }, [values]);\n\n const { columns, monthMarkers, maxValue } = useMemo(() => {\n const start = new Date(year, 0, 1);\n const end = new Date(year, 11, 31);\n // Walk back to first weekStart day before/at year start.\n const cur = new Date(start);\n const wd = cur.getDay();\n const offset = (wd - weekStart + 7) % 7;\n cur.setDate(cur.getDate() - offset);\n\n const cols: Array<Array<{ date: Date; inYear: boolean; value: number }>> = [];\n let column: Array<{ date: Date; inYear: boolean; value: number }> = [];\n const months: Array<{ month: number; col: number }> = [];\n let lastSeenMonth = -1;\n let max = 0;\n\n while (cur <= end || column.length > 0) {\n const inYear = cur.getFullYear() === year;\n const key = formatDate(cur);\n const v = valueMap.get(key) ?? 0;\n if (v > max) max = v;\n column.push({ date: new Date(cur), inYear, value: v });\n\n if (inYear && cur.getMonth() !== lastSeenMonth) {\n lastSeenMonth = cur.getMonth();\n months.push({ month: cur.getMonth(), col: cols.length });\n }\n\n if (column.length === 7) {\n cols.push(column);\n column = [];\n }\n cur.setDate(cur.getDate() + 1);\n if (cur > end && column.length === 0) break;\n }\n if (column.length > 0) cols.push(column);\n return { columns: cols, monthMarkers: months, maxValue: max };\n }, [year, weekStart, valueMap]);\n\n const toneSteps = TONE_CLASSES[tone];\n const bucket = (v: number): number => {\n if (v <= 0 || maxValue === 0) return 0;\n const idx = Math.ceil((v / maxValue) * (levels - 1));\n return Math.min(levels - 1, idx);\n };\n\n const totalWidth = columns.length * (cellSize + gap);\n const colHeight = 7 * (cellSize + gap);\n\n // Order weekdays starting from weekStart.\n const weekdayOrder = Array.from({ length: 7 }, (_, i) => weekdayLabels[(i + weekStart) % 7]!);\n\n return (\n <div ref={ref} className={cn('inline-block', className)} {...rest}>\n {/* Month labels */}\n <div className=\"relative ml-8\" style={{ height: cellSize, width: totalWidth }}>\n {monthMarkers.map(({ month, col }) => (\n <span\n key={month}\n className=\"absolute text-[10px] uppercase text-muted-foreground\"\n style={{ left: col * (cellSize + gap) }}\n >\n {monthLabels[month]}\n </span>\n ))}\n </div>\n <div className=\"flex\" style={{ gap }}>\n {/* Weekday labels — show every other to avoid clutter. */}\n <div\n className=\"flex flex-col text-[10px] uppercase text-muted-foreground\"\n style={{ width: 28, gap, height: colHeight }}\n >\n {weekdayOrder.map((wd, i) => (\n <span\n key={i}\n className={i % 2 === 0 ? 'opacity-0' : ''}\n style={{ height: cellSize, lineHeight: `${cellSize}px` }}\n >\n {wd}\n </span>\n ))}\n </div>\n {/* Grid */}\n <div className=\"flex\" style={{ gap }}>\n {columns.map((col, colIdx) => (\n <div key={colIdx} className=\"flex flex-col\" style={{ gap }}>\n {col.map((cell, rowIdx) => {\n const dateStr = formatDate(cell.date);\n const level = bucket(cell.value);\n const interactive = cell.inYear && onCellClick != null;\n const Tag: 'button' | 'div' = interactive ? 'button' : 'div';\n return (\n <Tag\n key={rowIdx}\n type={interactive ? 'button' : undefined}\n aria-label={`${dateStr}: ${cell.value}`}\n aria-valuenow={level}\n aria-valuemin={0}\n aria-valuemax={levels - 1}\n onClick={interactive ? () => onCellClick?.(dateStr, cell.value) : undefined}\n style={{ width: cellSize, height: cellSize }}\n className={cn(\n 'rounded-[2px] transition-colors',\n cell.inYear ? toneSteps[level] : 'bg-transparent',\n interactive && 'cursor-pointer hover:ring-1 hover:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n />\n );\n })}\n </div>\n ))}\n </div>\n </div>\n {showLegend && (\n <div className=\"mt-2 flex items-center justify-end gap-1.5 text-[10px] text-muted-foreground\">\n <span>Less</span>\n {toneSteps.map((cls, i) => (\n <span\n key={i}\n aria-hidden=\"true\"\n style={{ width: cellSize, height: cellSize }}\n className={cn('rounded-[2px]', cls)}\n />\n ))}\n <span>More</span>\n </div>\n )}\n </div>\n );\n },\n);\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport type DataGridCellType = 'text' | 'number' | 'select' | 'boolean';\n\nexport interface DataGridColumn<T> {\n key: string;\n header: ReactNode;\n /** Returns the cell's underlying value. */\n accessor: (row: T) => unknown;\n /** Optional custom cell renderer for read mode. */\n cell?: (row: T) => ReactNode;\n type?: DataGridCellType;\n options?: Array<{ value: string | number; label: ReactNode }>;\n editable?: boolean;\n width?: string;\n align?: 'left' | 'right' | 'center';\n}\n\nexport interface DataGridProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n columns: DataGridColumn<T>[];\n rows: T[];\n rowKey: (row: T) => string;\n onRowChange?: (row: T, colKey: string, value: unknown) => void;\n dense?: boolean;\n}\n\ninterface CellPos {\n row: number;\n col: number;\n}\n\nfunction castValue(raw: string, type: DataGridCellType): unknown {\n if (type === 'number') {\n const n = Number(raw);\n return Number.isFinite(n) ? n : raw;\n }\n if (type === 'boolean') return raw === 'true';\n return raw;\n}\n\n/**\n * First-generation editable DataGrid. Keyboard nav between cells; click /\n * Enter / F2 enter edit; Escape reverts. Range select, fill, paste TSV are\n * deferred — log them in a follow-up batch.\n */\nexport const DataGrid = forwardRef<HTMLDivElement, DataGridProps<unknown>>(\n function DataGrid(\n { columns, rows, rowKey, onRowChange, dense, className, ...rest },\n ref,\n ) {\n const [active, setActive] = useState<CellPos>({ row: 0, col: 0 });\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState('');\n const containerRef = useRef<HTMLDivElement | null>(null);\n const editRef = useRef<HTMLInputElement | HTMLSelectElement | null>(null);\n\n useEffect(() => {\n if (editing && editRef.current) {\n editRef.current.focus();\n if ('select' in editRef.current && typeof editRef.current.select === 'function') {\n editRef.current.select();\n }\n }\n }, [editing]);\n\n const colCount = columns.length;\n const rowCount = rows.length;\n\n const beginEdit = useCallback(() => {\n const col = columns[active.col];\n const row = rows[active.row];\n if (!col || row === undefined) return;\n if (col.editable === false) return;\n const raw = col.accessor(row);\n setDraft(raw == null ? '' : String(raw));\n setEditing(true);\n }, [columns, rows, active]);\n\n const commitEdit = useCallback(\n (move?: 'right' | 'down') => {\n const col = columns[active.col];\n const row = rows[active.row];\n if (!col || row === undefined) {\n setEditing(false);\n return;\n }\n const value = castValue(draft, col.type ?? 'text');\n onRowChange?.(row, col.key, value);\n setEditing(false);\n if (move === 'right') setActive((a) => ({ row: a.row, col: Math.min(colCount - 1, a.col + 1) }));\n if (move === 'down') setActive((a) => ({ row: Math.min(rowCount - 1, a.row + 1), col: a.col }));\n },\n [columns, rows, active, draft, onRowChange, colCount, rowCount],\n );\n\n const cancelEdit = useCallback(() => {\n setEditing(false);\n }, []);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (editing) {\n if (e.key === 'Enter') {\n e.preventDefault();\n commitEdit('down');\n } else if (e.key === 'Tab') {\n e.preventDefault();\n commitEdit('right');\n } else if (e.key === 'Escape') {\n e.preventDefault();\n cancelEdit();\n }\n return;\n }\n switch (e.key) {\n case 'ArrowRight':\n e.preventDefault();\n setActive((a) => ({ row: a.row, col: Math.min(colCount - 1, a.col + 1) }));\n break;\n case 'ArrowLeft':\n e.preventDefault();\n setActive((a) => ({ row: a.row, col: Math.max(0, a.col - 1) }));\n break;\n case 'ArrowDown':\n e.preventDefault();\n setActive((a) => ({ row: Math.min(rowCount - 1, a.row + 1), col: a.col }));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setActive((a) => ({ row: Math.max(0, a.row - 1), col: a.col }));\n break;\n case 'Home':\n e.preventDefault();\n setActive((a) => ({ row: a.row, col: 0 }));\n break;\n case 'End':\n e.preventDefault();\n setActive((a) => ({ row: a.row, col: colCount - 1 }));\n break;\n case 'Enter':\n case 'F2':\n e.preventDefault();\n beginEdit();\n break;\n }\n };\n\n const cellPad = dense ? 'px-2 py-1' : 'px-3 py-2';\n\n return (\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }}\n role=\"grid\"\n aria-rowcount={rowCount + 1}\n aria-colcount={colCount}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(\n 'overflow-auto rounded-md border border-border bg-card text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n <table className=\"w-full border-collapse\">\n <thead role=\"rowgroup\">\n <tr role=\"row\" aria-rowindex={1} className=\"bg-muted/40\">\n {columns.map((col, ci) => (\n <th\n key={col.key}\n role=\"columnheader\"\n aria-colindex={ci + 1}\n scope=\"col\"\n style={{ width: col.width, textAlign: col.align ?? 'left' }}\n className={cn(\n 'border-b border-border font-medium text-muted-foreground',\n cellPad,\n )}\n >\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody role=\"rowgroup\">\n {rows.map((row, ri) => (\n <tr key={rowKey(row)} role=\"row\" aria-rowindex={ri + 2} className=\"border-b border-border last:border-b-0\">\n {columns.map((col, ci) => {\n const isActive = active.row === ri && active.col === ci;\n const value = col.accessor(row);\n const isEditable = col.editable !== false;\n const isEditing = editing && isActive;\n return (\n <td\n key={col.key}\n role=\"gridcell\"\n aria-colindex={ci + 1}\n aria-readonly={!isEditable || undefined}\n aria-selected={isActive || undefined}\n tabIndex={isActive ? 0 : -1}\n onClick={() => {\n setActive({ row: ri, col: ci });\n if (isEditable && !isEditing) {\n // Defer beginEdit to next render so active is set.\n requestAnimationFrame(() => {\n const c = columns[ci];\n if (!c) return;\n const r = rows[ri];\n if (r === undefined) return;\n const raw = c.accessor(r);\n setDraft(raw == null ? '' : String(raw));\n setEditing(true);\n });\n }\n }}\n style={{ textAlign: col.align ?? 'left' }}\n className={cn(\n 'relative cursor-cell whitespace-nowrap',\n cellPad,\n isActive && 'bg-primary-soft/40 ring-2 ring-inset ring-primary',\n !isEditable && 'cursor-default',\n )}\n >\n {isEditing ? (\n <CellEditor\n ref={editRef as React.MutableRefObject<HTMLInputElement | HTMLSelectElement | null>}\n col={col}\n value={draft}\n onChange={setDraft}\n onCommit={commitEdit}\n onCancel={cancelEdit}\n />\n ) : col.cell ? (\n col.cell(row)\n ) : col.type === 'boolean' ? (\n <span className=\"tabular-nums\">{value ? '✓' : '·'}</span>\n ) : (\n <span className=\"tabular-nums\">{String(value ?? '')}</span>\n )}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n },\n) as <T>(props: DataGridProps<T> & { ref?: React.Ref<HTMLDivElement> }) => React.ReactElement;\n\ninterface CellEditorProps {\n col: DataGridColumn<unknown>;\n value: string;\n onChange: (v: string) => void;\n onCommit: (move?: 'right' | 'down') => void;\n onCancel: () => void;\n}\n\nconst CellEditor = forwardRef<HTMLInputElement | HTMLSelectElement, CellEditorProps>(\n function CellEditor({ col, value, onChange, onCommit, onCancel }, ref) {\n const baseClass = 'h-7 w-full rounded-sm border border-input bg-background px-2 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring';\n if (col.type === 'select' && col.options) {\n return (\n <select\n ref={ref as React.Ref<HTMLSelectElement>}\n value={value}\n onChange={(e) => {\n onChange(e.target.value);\n onCommit('down');\n }}\n onBlur={() => onCommit()}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n onCancel();\n }\n }}\n className={baseClass}\n >\n {col.options.map((opt) => (\n <option key={String(opt.value)} value={String(opt.value)}>\n {String(opt.label)}\n </option>\n ))}\n </select>\n );\n }\n if (col.type === 'boolean') {\n return (\n <select\n ref={ref as React.Ref<HTMLSelectElement>}\n value={value}\n onChange={(e) => {\n onChange(e.target.value);\n onCommit('down');\n }}\n onBlur={() => onCommit()}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n onCancel();\n }\n }}\n className={baseClass}\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n );\n }\n return (\n <input\n ref={ref as React.Ref<HTMLInputElement>}\n type={col.type === 'number' ? 'number' : 'text'}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={() => onCommit()}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n onCancel();\n }\n }}\n className={baseClass}\n />\n );\n },\n);\n","import {\n forwardRef,\n useCallback,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport { Maximize, Minus, Plus } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport interface NodeEditorNode {\n id: string;\n x: number;\n y: number;\n data?: Record<string, unknown>;\n label?: ReactNode;\n}\n\nexport interface NodeEditorEdge {\n id: string;\n source: string;\n target: string;\n label?: ReactNode;\n}\n\nexport interface NodeEditorProps extends HTMLAttributes<HTMLDivElement> {\n nodes: NodeEditorNode[];\n edges?: NodeEditorEdge[];\n onNodesChange?: (nodes: NodeEditorNode[]) => void;\n onEdgeClick?: (edge: NodeEditorEdge) => void;\n renderNode?: (node: NodeEditorNode) => ReactNode;\n nodeWidth?: number;\n nodeHeight?: number;\n minZoom?: number;\n maxZoom?: number;\n}\n\ninterface Viewport {\n x: number;\n y: number;\n zoom: number;\n}\n\n/**\n * First-generation node graph editor. Drag nodes to reposition; pan the\n * viewport on background drag; wheel-zoom. Drag-to-connect ports + minimap\n * + auto-layout deferred.\n */\nexport const NodeEditor = forwardRef<HTMLDivElement, NodeEditorProps>(function NodeEditor(\n {\n nodes,\n edges = [],\n onNodesChange,\n onEdgeClick,\n renderNode,\n nodeWidth = 160,\n nodeHeight = 60,\n minZoom = 0.25,\n maxZoom = 2,\n className,\n ...rest\n },\n ref,\n) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [viewport, setViewport] = useState<Viewport>({ x: 0, y: 0, zoom: 1 });\n const dragStateRef = useRef<\n | { kind: 'pan'; startX: number; startY: number; viewportX: number; viewportY: number }\n | { kind: 'node'; nodeId: string; startX: number; startY: number; nodeStartX: number; nodeStartY: number }\n | null\n >(null);\n\n const nodeIndex = useMemo(() => new Map(nodes.map((n) => [n.id, n])), [nodes]);\n\n const onContainerPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (e.button !== 0) return;\n if ((e.target as HTMLElement).closest('[data-node]')) return;\n dragStateRef.current = {\n kind: 'pan',\n startX: e.clientX,\n startY: e.clientY,\n viewportX: viewport.x,\n viewportY: viewport.y,\n };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n };\n\n const onContainerPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const drag = dragStateRef.current;\n if (!drag) return;\n if (drag.kind === 'pan') {\n const dx = e.clientX - drag.startX;\n const dy = e.clientY - drag.startY;\n setViewport((v) => ({ ...v, x: drag.viewportX + dx, y: drag.viewportY + dy }));\n } else if (drag.kind === 'node') {\n const dx = (e.clientX - drag.startX) / viewport.zoom;\n const dy = (e.clientY - drag.startY) / viewport.zoom;\n const next = nodes.map((n) =>\n n.id === drag.nodeId ? { ...n, x: drag.nodeStartX + dx, y: drag.nodeStartY + dy } : n,\n );\n onNodesChange?.(next);\n }\n };\n\n const onContainerPointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n dragStateRef.current = null;\n (e.currentTarget as HTMLElement).releasePointerCapture?.(e.pointerId);\n };\n\n const onWheel = useCallback(\n (e: React.WheelEvent<HTMLDivElement>) => {\n e.preventDefault();\n const rect = containerRef.current?.getBoundingClientRect();\n if (!rect) return;\n // Zoom centered on the cursor.\n const cx = e.clientX - rect.left;\n const cy = e.clientY - rect.top;\n const factor = e.deltaY < 0 ? 1.1 : 1 / 1.1;\n setViewport((v) => {\n const nextZoom = Math.max(minZoom, Math.min(maxZoom, v.zoom * factor));\n const ratio = nextZoom / v.zoom;\n return {\n zoom: nextZoom,\n x: cx - (cx - v.x) * ratio,\n y: cy - (cy - v.y) * ratio,\n };\n });\n },\n [minZoom, maxZoom],\n );\n\n const beginNodeDrag = (e: ReactPointerEvent<HTMLDivElement>, node: NodeEditorNode) => {\n e.stopPropagation();\n dragStateRef.current = {\n kind: 'node',\n nodeId: node.id,\n startX: e.clientX,\n startY: e.clientY,\n nodeStartX: node.x,\n nodeStartY: node.y,\n };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n };\n\n const fitView = () => {\n if (nodes.length === 0) {\n setViewport({ x: 0, y: 0, zoom: 1 });\n return;\n }\n const minX = Math.min(...nodes.map((n) => n.x));\n const minY = Math.min(...nodes.map((n) => n.y));\n const maxX = Math.max(...nodes.map((n) => n.x + nodeWidth));\n const maxY = Math.max(...nodes.map((n) => n.y + nodeHeight));\n const w = maxX - minX;\n const h = maxY - minY;\n const rect = containerRef.current?.getBoundingClientRect();\n if (!rect) return;\n const padding = 40;\n const zoomX = (rect.width - padding * 2) / w;\n const zoomY = (rect.height - padding * 2) / h;\n const zoom = Math.max(minZoom, Math.min(maxZoom, Math.min(zoomX, zoomY, 1)));\n setViewport({\n zoom,\n x: padding - minX * zoom + (rect.width - padding * 2 - w * zoom) / 2,\n y: padding - minY * zoom + (rect.height - padding * 2 - h * zoom) / 2,\n });\n };\n\n return (\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }}\n onPointerDown={onContainerPointerDown}\n onPointerMove={onContainerPointerMove}\n onPointerUp={onContainerPointerUp}\n onPointerCancel={onContainerPointerUp}\n onWheel={onWheel}\n className={cn(\n 'relative h-96 w-full overflow-hidden rounded-md border border-border bg-muted/30 select-none',\n className,\n )}\n {...rest}\n >\n {/* Pan/zoom transform */}\n <div\n className=\"absolute inset-0 origin-top-left\"\n style={{ transform: `translate(${viewport.x}px, ${viewport.y}px) scale(${viewport.zoom})` }}\n >\n <svg\n className=\"absolute pointer-events-none\"\n style={{ overflow: 'visible', width: '100%', height: '100%' }}\n >\n {edges.map((edge) => {\n const a = nodeIndex.get(edge.source);\n const b = nodeIndex.get(edge.target);\n if (!a || !b) return null;\n const x1 = a.x + nodeWidth;\n const y1 = a.y + nodeHeight / 2;\n const x2 = b.x;\n const y2 = b.y + nodeHeight / 2;\n const mid = (x1 + x2) / 2;\n const path = `M${x1},${y1} C${mid},${y1} ${mid},${y2} ${x2},${y2}`;\n return (\n <g key={edge.id} className=\"pointer-events-auto cursor-pointer\" onClick={() => onEdgeClick?.(edge)}>\n <path\n d={path}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2 / viewport.zoom}\n className=\"text-border-strong hover:text-primary\"\n />\n {edge.label && (\n <text\n x={mid}\n y={(y1 + y2) / 2 - 6}\n textAnchor=\"middle\"\n className=\"fill-muted-foreground text-[10px]\"\n style={{ fontSize: 10 / viewport.zoom }}\n >\n {edge.label}\n </text>\n )}\n </g>\n );\n })}\n </svg>\n {nodes.map((node) => (\n <div\n key={node.id}\n data-node\n role=\"group\"\n aria-label={typeof node.label === 'string' ? node.label : node.id}\n onPointerDown={(e) => beginNodeDrag(e, node)}\n style={{\n position: 'absolute',\n left: node.x,\n top: node.y,\n width: nodeWidth,\n height: nodeHeight,\n }}\n className=\"cursor-grab active:cursor-grabbing\"\n >\n {renderNode ? (\n renderNode(node)\n ) : (\n <div className=\"flex h-full w-full items-center justify-center rounded-md border border-border bg-card px-3 text-sm font-medium shadow-sm\">\n {node.label ?? node.id}\n </div>\n )}\n </div>\n ))}\n </div>\n {/* Controls */}\n <div className=\"absolute bottom-3 right-3 flex flex-col gap-1 rounded-md border border-border bg-card p-1 shadow-sm\">\n <button\n type=\"button\"\n aria-label=\"Zoom in\"\n onClick={() =>\n setViewport((v) => ({ ...v, zoom: Math.min(maxZoom, v.zoom * 1.2) }))\n }\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={Plus} size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Zoom out\"\n onClick={() =>\n setViewport((v) => ({ ...v, zoom: Math.max(minZoom, v.zoom / 1.2) }))\n }\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={Minus} size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Fit view\"\n onClick={fitView}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={Maximize} size={12} />\n </button>\n </div>\n </div>\n );\n});\n","import { forwardRef, useMemo, useRef, type KeyboardEvent, type SVGAttributes } from 'react';\nimport { cn } from '../../utils';\n\nexport type AudioWaveformTone = 'brand' | 'success' | 'warning' | 'danger' | 'muted' | 'current';\n\nconst TONE_CLASS: Record<AudioWaveformTone, string> = {\n brand: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-destructive',\n muted: 'text-muted-foreground',\n current: '',\n};\n\nexport interface AudioWaveformProps extends Omit<SVGAttributes<SVGSVGElement>, 'width' | 'height' | 'onSeek'> {\n peaks: number[];\n progress?: number;\n width?: number;\n height?: number;\n barWidth?: number;\n gap?: number;\n tone?: AudioWaveformTone;\n onSeek?: (progress: number) => void;\n interactive?: boolean;\n}\n\n/**\n * SVG bar-style audio waveform. `peaks` are per-bin amplitudes in 0..1.\n * Click-to-seek + arrow-key seek when `onSeek` is provided.\n */\nexport const AudioWaveform = forwardRef<SVGSVGElement, AudioWaveformProps>(\n function AudioWaveform(\n {\n peaks,\n progress = 0,\n width = 320,\n height = 48,\n barWidth = 2,\n gap = 1,\n tone = 'brand',\n onSeek,\n interactive,\n className,\n ...rest\n },\n ref,\n ) {\n const stepX = barWidth + gap;\n const barCount = Math.max(1, Math.floor(width / stepX));\n const sampled = useMemo(() => sampleTo(peaks, barCount), [peaks, barCount]);\n const playedBars = Math.round(progress * barCount);\n const isInteractive = interactive ?? onSeek != null;\n const seekFromX = (clientX: number, rect: DOMRect) => {\n const x = Math.max(0, Math.min(rect.width, clientX - rect.left));\n onSeek?.(x / rect.width);\n };\n const svgRef = useRef<SVGSVGElement | null>(null);\n\n const handleKey = (e: KeyboardEvent<SVGSVGElement>) => {\n if (!onSeek) return;\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n onSeek(Math.min(1, progress + 0.05));\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n onSeek(Math.max(0, progress - 0.05));\n } else if (e.key === 'Home') {\n e.preventDefault();\n onSeek(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n onSeek(1);\n }\n };\n\n return (\n <svg\n ref={(el) => {\n svgRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<SVGSVGElement | null>).current = el;\n }}\n role={isInteractive ? 'slider' : 'img'}\n aria-label=\"Audio waveform\"\n aria-valuenow={Math.round(progress * 100)}\n aria-valuemin={0}\n aria-valuemax={100}\n tabIndex={isInteractive ? 0 : -1}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n onClick={\n isInteractive\n ? (e) => {\n const rect = svgRef.current?.getBoundingClientRect();\n if (rect) seekFromX(e.clientX, rect);\n }\n : undefined\n }\n onKeyDown={handleKey}\n className={cn(\n 'inline-block',\n isInteractive && 'cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm',\n TONE_CLASS[tone],\n className,\n )}\n {...rest}\n >\n {sampled.map((amp, i) => {\n const h = Math.max(1, amp * height);\n const x = i * stepX;\n const y = (height - h) / 2;\n const played = i < playedBars;\n return (\n <rect\n key={i}\n x={x}\n y={y}\n width={barWidth}\n height={h}\n rx={1}\n className={played ? 'fill-current' : 'fill-current opacity-30'}\n />\n );\n })}\n </svg>\n );\n },\n);\n\n/** Resample `peaks` to exactly `n` bars by max-pooling consecutive runs. */\nfunction sampleTo(peaks: number[], n: number): number[] {\n if (peaks.length === 0) return new Array(n).fill(0);\n if (peaks.length === n) return peaks;\n const out: number[] = new Array(n);\n const ratio = peaks.length / n;\n for (let i = 0; i < n; i++) {\n const start = Math.floor(i * ratio);\n const end = Math.max(start + 1, Math.floor((i + 1) * ratio));\n let max = 0;\n for (let j = start; j < end && j < peaks.length; j++) {\n const v = Math.abs(peaks[j]!);\n if (v > max) max = v;\n }\n out[i] = max;\n }\n return out;\n}\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type AudioHTMLAttributes,\n type KeyboardEvent,\n} from 'react';\nimport { Pause, Play, Volume2, VolumeX } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { AudioWaveform } from '../audioWaveform';\n\nexport interface AudioPlayerProps\n extends Omit<AudioHTMLAttributes<HTMLAudioElement>, 'controls' | 'onPlay' | 'onPause' | 'onTimeUpdate' | 'onEnded'> {\n src: string;\n peaks?: number[];\n defaultVolume?: number;\n defaultPlaybackRate?: number;\n compact?: boolean;\n onPlay?: () => void;\n onPause?: () => void;\n onTimeUpdate?: (time: number, duration: number) => void;\n onEnded?: () => void;\n}\n\nconst SPEEDS = [0.5, 0.75, 1, 1.25, 1.5, 2];\n\nfunction formatTime(s: number): string {\n if (!Number.isFinite(s) || s < 0) return '0:00';\n const total = Math.floor(s);\n const h = Math.floor(total / 3600);\n const m = Math.floor((total % 3600) / 60);\n const sec = total % 60;\n if (h > 0) return `${h}:${String(m).padStart(2, '0')}:${String(sec).padStart(2, '0')}`;\n return `${m}:${String(sec).padStart(2, '0')}`;\n}\n\n/**\n * Custom-controls audio player. Native `<audio>` underneath; play/pause,\n * scrubber (or `AudioWaveform` if `peaks` provided), volume, speed.\n */\nexport const AudioPlayer = forwardRef<HTMLAudioElement, AudioPlayerProps>(\n function AudioPlayer(\n {\n src,\n peaks,\n autoPlay,\n loop,\n defaultVolume = 1,\n defaultPlaybackRate = 1,\n compact,\n onPlay,\n onPause,\n onTimeUpdate,\n onEnded,\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const audioRef = useRef<HTMLAudioElement | null>(null);\n useImperativeHandle(forwardedRef, () => audioRef.current as HTMLAudioElement);\n const [playing, setPlaying] = useState(!!autoPlay);\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(0);\n const [volume, setVolume] = useState(defaultVolume);\n const [muted, setMuted] = useState(false);\n const [speed, setSpeed] = useState(defaultPlaybackRate);\n\n useEffect(() => {\n const a = audioRef.current;\n if (!a) return;\n a.volume = volume;\n a.muted = muted;\n a.playbackRate = speed;\n }, [volume, muted, speed]);\n\n const togglePlay = useCallback(() => {\n const a = audioRef.current;\n if (!a) return;\n if (a.paused) {\n a.play().catch(() => {\n /* autoplay rejection */\n });\n } else {\n a.pause();\n }\n }, []);\n\n const seekTo = useCallback((seconds: number) => {\n const a = audioRef.current;\n if (!a || !Number.isFinite(seconds)) return;\n a.currentTime = Math.max(0, Math.min(a.duration || 0, seconds));\n }, []);\n\n const seekProgress = useCallback(\n (p: number) => {\n if (duration > 0) seekTo(p * duration);\n },\n [duration, seekTo],\n );\n\n const handleKey = (e: KeyboardEvent<HTMLDivElement>) => {\n switch (e.key) {\n case ' ':\n case 'Spacebar':\n e.preventDefault();\n togglePlay();\n break;\n case 'ArrowRight':\n e.preventDefault();\n seekTo(currentTime + 5);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n seekTo(currentTime - 5);\n break;\n case 'ArrowUp':\n e.preventDefault();\n setVolume((v) => Math.min(1, v + 0.1));\n break;\n case 'ArrowDown':\n e.preventDefault();\n setVolume((v) => Math.max(0, v - 0.1));\n break;\n case 'm':\n case 'M':\n e.preventDefault();\n setMuted((m) => !m);\n break;\n }\n };\n\n const progress = duration > 0 ? currentTime / duration : 0;\n\n return (\n <div\n role=\"region\"\n aria-label=\"Audio player\"\n tabIndex={0}\n onKeyDown={handleKey}\n data-playing={playing || undefined}\n className={cn(\n 'flex items-center gap-3 rounded-md border border-border bg-card p-2 text-card-foreground shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n compact && 'gap-2 p-1.5',\n className,\n )}\n >\n <audio\n ref={audioRef}\n src={src}\n autoPlay={autoPlay}\n loop={loop}\n onPlay={() => {\n setPlaying(true);\n onPlay?.();\n }}\n onPause={() => {\n setPlaying(false);\n onPause?.();\n }}\n onTimeUpdate={() => {\n const a = audioRef.current;\n if (!a) return;\n setCurrentTime(a.currentTime);\n onTimeUpdate?.(a.currentTime, a.duration);\n }}\n onLoadedMetadata={() => {\n const a = audioRef.current;\n if (a) setDuration(a.duration || 0);\n }}\n onEnded={() => {\n setPlaying(false);\n onEnded?.();\n }}\n {...rest}\n />\n <button\n type=\"button\"\n aria-label={playing ? 'Pause' : 'Play'}\n onClick={togglePlay}\n className={cn(\n 'inline-flex shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n compact ? 'h-7 w-7' : 'h-9 w-9',\n )}\n >\n <Icon icon={playing ? Pause : Play} size={compact ? 12 : 14} />\n </button>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" style={{ minWidth: '3.5rem' }}>\n {formatTime(currentTime)}\n </span>\n <div className=\"flex-1\">\n {peaks ? (\n <AudioWaveform\n peaks={peaks}\n progress={progress}\n onSeek={seekProgress}\n width={compact ? 200 : 320}\n height={compact ? 32 : 40}\n />\n ) : (\n <input\n type=\"range\"\n role=\"slider\"\n aria-label=\"Seek\"\n aria-valuetext={formatTime(currentTime)}\n min={0}\n max={duration || 0}\n step=\"any\"\n value={currentTime}\n onChange={(e) => seekTo(Number(e.target.value))}\n className=\"w-full accent-primary\"\n />\n )}\n </div>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\" style={{ minWidth: '3.5rem', textAlign: 'right' }}>\n {formatTime(duration)}\n </span>\n <button\n type=\"button\"\n aria-label={muted ? 'Unmute' : 'Mute'}\n onClick={() => setMuted((m) => !m)}\n className=\"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={muted || volume === 0 ? VolumeX : Volume2} size={14} />\n </button>\n <select\n aria-label=\"Playback speed\"\n value={speed}\n onChange={(e) => setSpeed(Number(e.target.value))}\n className=\"h-7 rounded-sm border border-input bg-background px-1 text-xs\"\n >\n {SPEEDS.map((s) => (\n <option key={s} value={s}>\n {s}×\n </option>\n ))}\n </select>\n </div>\n );\n },\n);\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n type KeyboardEvent,\n type VideoHTMLAttributes,\n} from 'react';\nimport {\n Captions,\n CaptionsOff,\n Maximize,\n Minimize,\n Pause,\n PictureInPicture2,\n Play,\n Volume2,\n VolumeX,\n} from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport interface VideoTrack {\n src: string;\n srcLang: string;\n label: string;\n kind?: 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata';\n default?: boolean;\n}\n\nexport interface VideoPlayerProps\n extends Omit<VideoHTMLAttributes<HTMLVideoElement>, 'controls'> {\n src: string;\n poster?: string;\n tracks?: VideoTrack[];\n aspectRatio?: string | number;\n defaultVolume?: number;\n defaultPlaybackRate?: number;\n}\n\nconst SPEEDS = [0.5, 0.75, 1, 1.25, 1.5, 2];\n\nfunction formatTime(s: number): string {\n if (!Number.isFinite(s) || s < 0) return '0:00';\n const total = Math.floor(s);\n const h = Math.floor(total / 3600);\n const m = Math.floor((total % 3600) / 60);\n const sec = total % 60;\n if (h > 0) return `${h}:${String(m).padStart(2, '0')}:${String(sec).padStart(2, '0')}`;\n return `${m}:${String(sec).padStart(2, '0')}`;\n}\n\n/**\n * Custom-controls video player. Click video to toggle play; controls\n * auto-hide after 3s during playback; keyboard shortcuts (Space/F/M/C/←/→/↑/↓).\n */\nexport const VideoPlayer = forwardRef<HTMLVideoElement, VideoPlayerProps>(\n function VideoPlayer(\n {\n src,\n poster,\n tracks,\n aspectRatio = '16 / 9',\n autoPlay,\n loop,\n muted: mutedProp,\n defaultVolume = 1,\n defaultPlaybackRate = 1,\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const videoRef = useRef<HTMLVideoElement | null>(null);\n useImperativeHandle(forwardedRef, () => videoRef.current as HTMLVideoElement);\n const [playing, setPlaying] = useState(!!autoPlay);\n const [currentTime, setCurrentTime] = useState(0);\n const [duration, setDuration] = useState(0);\n const [volume, setVolume] = useState(defaultVolume);\n const [muted, setMuted] = useState(!!mutedProp);\n const [speed, setSpeed] = useState(defaultPlaybackRate);\n const [fullscreen, setFullscreen] = useState(false);\n const [captionsOn, setCaptionsOn] = useState(false);\n const [showControls, setShowControls] = useState(true);\n const idleTimerRef = useRef<number | null>(null);\n\n useEffect(() => {\n const v = videoRef.current;\n if (!v) return;\n v.volume = volume;\n v.muted = muted;\n v.playbackRate = speed;\n }, [volume, muted, speed]);\n\n useEffect(() => {\n const v = videoRef.current;\n if (!v || !v.textTracks) return;\n for (let i = 0; i < v.textTracks.length; i++) {\n v.textTracks[i]!.mode = captionsOn ? 'showing' : 'hidden';\n }\n }, [captionsOn, tracks]);\n\n useEffect(() => {\n const onFsChange = () => setFullscreen(document.fullscreenElement === containerRef.current);\n document.addEventListener('fullscreenchange', onFsChange);\n return () => document.removeEventListener('fullscreenchange', onFsChange);\n }, []);\n\n const togglePlay = useCallback(() => {\n const v = videoRef.current;\n if (!v) return;\n if (v.paused) v.play().catch(() => {});\n else v.pause();\n }, []);\n\n const seekTo = useCallback((seconds: number) => {\n const v = videoRef.current;\n if (!v || !Number.isFinite(seconds)) return;\n v.currentTime = Math.max(0, Math.min(v.duration || 0, seconds));\n }, []);\n\n const toggleFullscreen = useCallback(async () => {\n const c = containerRef.current;\n if (!c) return;\n if (!document.fullscreenElement) {\n await c.requestFullscreen?.().catch(() => {});\n } else {\n await document.exitFullscreen?.().catch(() => {});\n }\n }, []);\n\n const togglePiP = useCallback(async () => {\n const v = videoRef.current;\n if (!v) return;\n if ('pictureInPictureElement' in document && document.pictureInPictureElement) {\n await (document as unknown as { exitPictureInPicture?: () => Promise<void> })\n .exitPictureInPicture?.()\n ?.catch(() => {});\n } else if ('requestPictureInPicture' in v) {\n await (v as HTMLVideoElement & { requestPictureInPicture?: () => Promise<unknown> })\n .requestPictureInPicture?.()\n ?.catch(() => {});\n }\n }, []);\n\n const bumpControls = useCallback(() => {\n setShowControls(true);\n if (idleTimerRef.current != null) window.clearTimeout(idleTimerRef.current);\n if (playing) {\n idleTimerRef.current = window.setTimeout(() => setShowControls(false), 3000);\n }\n }, [playing]);\n\n useEffect(() => {\n bumpControls();\n return () => {\n if (idleTimerRef.current != null) window.clearTimeout(idleTimerRef.current);\n };\n }, [playing, bumpControls]);\n\n const handleKey = (e: KeyboardEvent<HTMLDivElement>) => {\n switch (e.key) {\n case ' ':\n case 'Spacebar':\n e.preventDefault();\n togglePlay();\n break;\n case 'ArrowRight':\n e.preventDefault();\n seekTo(currentTime + 5);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n seekTo(currentTime - 5);\n break;\n case 'ArrowUp':\n e.preventDefault();\n setVolume((v) => Math.min(1, v + 0.1));\n break;\n case 'ArrowDown':\n e.preventDefault();\n setVolume((v) => Math.max(0, v - 0.1));\n break;\n case 'm':\n case 'M':\n e.preventDefault();\n setMuted((m) => !m);\n break;\n case 'f':\n case 'F':\n e.preventDefault();\n toggleFullscreen();\n break;\n case 'c':\n case 'C':\n e.preventDefault();\n if (tracks && tracks.length > 0) setCaptionsOn((c) => !c);\n break;\n }\n };\n\n return (\n <div\n ref={containerRef}\n role=\"region\"\n aria-label=\"Video player\"\n tabIndex={0}\n onKeyDown={handleKey}\n onMouseMove={bumpControls}\n onMouseLeave={() => {\n if (playing) setShowControls(false);\n }}\n className={cn(\n 'group relative overflow-hidden rounded-md bg-black text-white shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n style={{ aspectRatio: typeof aspectRatio === 'number' ? String(aspectRatio) : aspectRatio }}\n >\n <video\n ref={videoRef}\n src={src}\n poster={poster}\n autoPlay={autoPlay}\n loop={loop}\n muted={muted}\n onPlay={() => setPlaying(true)}\n onPause={() => setPlaying(false)}\n onTimeUpdate={() => {\n const v = videoRef.current;\n if (!v) return;\n setCurrentTime(v.currentTime);\n }}\n onLoadedMetadata={() => {\n const v = videoRef.current;\n if (v) setDuration(v.duration || 0);\n }}\n onClick={togglePlay}\n className=\"h-full w-full bg-black\"\n {...rest}\n >\n {tracks?.map((t, i) => (\n <track\n key={i}\n src={t.src}\n srcLang={t.srcLang}\n label={t.label}\n kind={t.kind ?? 'captions'}\n default={t.default}\n />\n ))}\n </video>\n\n {/* Big center play button when paused */}\n {!playing && (\n <button\n type=\"button\"\n aria-label=\"Play\"\n onClick={togglePlay}\n className=\"absolute inset-0 grid place-items-center bg-black/30 transition-opacity hover:bg-black/40\"\n >\n <span className=\"grid h-16 w-16 place-items-center rounded-full bg-white/90 text-foreground shadow-lg\">\n <Icon icon={Play} size={28} />\n </span>\n </button>\n )}\n\n {/* Controls bar */}\n <div\n className={cn(\n 'absolute inset-x-0 bottom-0 flex items-center gap-2 bg-gradient-to-t from-black/80 to-transparent px-3 pb-2 pt-6 transition-opacity',\n showControls ? 'opacity-100' : 'opacity-0',\n )}\n >\n <button\n type=\"button\"\n aria-label={playing ? 'Pause' : 'Play'}\n onClick={togglePlay}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-full bg-white/20 text-white hover:bg-white/30\"\n >\n <Icon icon={playing ? Pause : Play} size={14} />\n </button>\n <span className=\"text-xs tabular-nums\">\n {formatTime(currentTime)} / {formatTime(duration)}\n </span>\n <input\n type=\"range\"\n role=\"slider\"\n aria-label=\"Seek\"\n aria-valuetext={formatTime(currentTime)}\n min={0}\n max={duration || 0}\n step=\"any\"\n value={currentTime}\n onChange={(e) => seekTo(Number(e.target.value))}\n className=\"flex-1 accent-primary\"\n />\n <button\n type=\"button\"\n aria-label={muted || volume === 0 ? 'Unmute' : 'Mute'}\n onClick={() => setMuted((m) => !m)}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-white/80 hover:bg-white/20 hover:text-white\"\n >\n <Icon icon={muted || volume === 0 ? VolumeX : Volume2} size={14} />\n </button>\n <select\n aria-label=\"Playback speed\"\n value={speed}\n onChange={(e) => setSpeed(Number(e.target.value))}\n className=\"h-7 rounded-sm border border-white/20 bg-black/40 px-1 text-xs\"\n >\n {SPEEDS.map((s) => (\n <option key={s} value={s} className=\"text-foreground\">\n {s}×\n </option>\n ))}\n </select>\n {tracks && tracks.length > 0 && (\n <button\n type=\"button\"\n aria-label={captionsOn ? 'Hide captions' : 'Show captions'}\n aria-pressed={captionsOn}\n onClick={() => setCaptionsOn((c) => !c)}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-white/80 hover:bg-white/20 hover:text-white\"\n >\n <Icon icon={captionsOn ? Captions : CaptionsOff} size={14} />\n </button>\n )}\n <button\n type=\"button\"\n aria-label=\"Picture in picture\"\n onClick={togglePiP}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-white/80 hover:bg-white/20 hover:text-white\"\n >\n <Icon icon={PictureInPicture2} size={14} />\n </button>\n <button\n type=\"button\"\n aria-label={fullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}\n onClick={toggleFullscreen}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-white/80 hover:bg-white/20 hover:text-white\"\n >\n <Icon icon={fullscreen ? Minimize : Maximize} size={14} />\n </button>\n </div>\n </div>\n );\n },\n);\n","import { forwardRef, useMemo, type HTMLAttributes } from 'react';\nimport { ChevronLeft, ChevronRight, Download, ZoomIn, ZoomOut } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\n\nexport interface PDFViewerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n src: string;\n page?: number;\n defaultPage?: number;\n onPageChange?: (page: number) => void;\n zoom?: number;\n defaultZoom?: number;\n onZoomChange?: (zoom: number) => void;\n pageCount?: number;\n title?: string;\n download?: boolean;\n height?: string;\n}\n\nconst ZOOM_LEVELS = [50, 75, 100, 125, 150, 175, 200, 250, 300, 400];\n\n/**\n * Inline PDF viewer. **First-gen** uses the browser's built-in PDF viewer via\n * an `<iframe>` with `#page=N&zoom=Z` URL hash. Real per-page rendering,\n * thumbnails, search, annotations all need a PDF.js wrap — deferred to a\n * follow-up that slots into this contract.\n */\nexport const PDFViewer = forwardRef<HTMLDivElement, PDFViewerProps>(function PDFViewer(\n {\n src,\n page: pageProp,\n defaultPage = 1,\n onPageChange,\n zoom: zoomProp,\n defaultZoom = 100,\n onZoomChange,\n pageCount,\n title = 'PDF document',\n download = true,\n height = '70vh',\n className,\n ...rest\n },\n ref,\n) {\n const [page, setPage] = useControlled({\n controlled: pageProp,\n default: defaultPage,\n onChange: onPageChange,\n });\n const [zoom, setZoom] = useControlled({\n controlled: zoomProp,\n default: defaultZoom,\n onChange: onZoomChange,\n });\n\n // Build URL with hash for page/zoom hint to native PDF viewer.\n const hashedSrc = useMemo(() => {\n try {\n const url = new URL(src, typeof window !== 'undefined' ? window.location.href : 'http://localhost');\n url.hash = `page=${page}&zoom=${zoom}`;\n return url.toString();\n } catch {\n return `${src}#page=${page}&zoom=${zoom}`;\n }\n }, [src, page, zoom]);\n\n const goPrev = () => setPage(Math.max(1, page - 1));\n const goNext = () => setPage(pageCount ? Math.min(pageCount, page + 1) : page + 1);\n const zoomIn = () => {\n const next = ZOOM_LEVELS.find((z) => z > zoom);\n if (next) setZoom(next);\n };\n const zoomOut = () => {\n const next = [...ZOOM_LEVELS].reverse().find((z) => z < zoom);\n if (next) setZoom(next);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col overflow-hidden rounded-md border border-border bg-card text-card-foreground shadow-sm',\n className,\n )}\n {...rest}\n >\n <div className=\"flex items-center gap-1 border-b border-border bg-muted/40 px-2 py-1.5\">\n <button\n type=\"button\"\n aria-label=\"Previous page\"\n onClick={goPrev}\n disabled={page <= 1}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-40\"\n >\n <Icon icon={ChevronLeft} size={14} />\n </button>\n <span className=\"px-1 text-xs tabular-nums text-foreground\">\n {pageCount ? `${page} / ${pageCount}` : `Page ${page}`}\n </span>\n <button\n type=\"button\"\n aria-label=\"Next page\"\n onClick={goNext}\n disabled={pageCount != null && page >= pageCount}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-40\"\n >\n <Icon icon={ChevronRight} size={14} />\n </button>\n <span className=\"mx-2 h-4 w-px bg-border\" aria-hidden=\"true\" />\n <button\n type=\"button\"\n aria-label=\"Zoom out\"\n onClick={zoomOut}\n disabled={zoom <= ZOOM_LEVELS[0]!}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-40\"\n >\n <Icon icon={ZoomOut} size={14} />\n </button>\n <span className=\"px-1 text-xs tabular-nums text-foreground\">{zoom}%</span>\n <button\n type=\"button\"\n aria-label=\"Zoom in\"\n onClick={zoomIn}\n disabled={zoom >= ZOOM_LEVELS[ZOOM_LEVELS.length - 1]!}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-40\"\n >\n <Icon icon={ZoomIn} size={14} />\n </button>\n <div className=\"ml-auto flex items-center gap-1\">\n {download && (\n <a\n href={src}\n download\n aria-label=\"Download PDF\"\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={Download} size={14} />\n </a>\n )}\n </div>\n </div>\n <iframe\n src={hashedSrc}\n title={title}\n style={{ height, border: 0 }}\n className=\"w-full bg-muted\"\n />\n </div>\n );\n});\n","import { forwardRef, useMemo, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface ScheduleResource {\n id: string;\n label: ReactNode;\n color?: string;\n}\n\nexport interface ScheduleBooking {\n id: string;\n resourceId: string;\n start: Date;\n end: Date;\n label?: ReactNode;\n color?: string;\n}\n\nexport interface ScheduleViewProps extends HTMLAttributes<HTMLDivElement> {\n resources: ScheduleResource[];\n bookings: ScheduleBooking[];\n date?: Date;\n hourRange?: [number, number];\n slotMinutes?: number;\n onBookingClick?: (booking: ScheduleBooking) => void;\n onSlotClick?: (resourceId: string, time: Date) => void;\n renderBooking?: (booking: ScheduleBooking) => ReactNode;\n}\n\nfunction dateAtHour(base: Date, hour: number, minute = 0): Date {\n const c = new Date(base);\n c.setHours(hour, minute, 0, 0);\n return c;\n}\n\nfunction diffMinutes(a: Date, b: Date): number {\n return (b.getTime() - a.getTime()) / 60000;\n}\n\n/**\n * Multi-resource single-day schedule. Resources × hours grid; bookings\n * positioned absolutely within each row's timeline by minute offset.\n */\nexport const ScheduleView = forwardRef<HTMLDivElement, ScheduleViewProps>(function ScheduleView(\n {\n resources,\n bookings,\n date = new Date(),\n hourRange = [8, 20],\n slotMinutes = 30,\n onBookingClick,\n onSlotClick,\n renderBooking,\n className,\n ...rest\n },\n ref,\n) {\n const [startHour, endHour] = hourRange;\n const totalMinutes = (endHour - startHour) * 60;\n const slotCount = Math.ceil(totalMinutes / slotMinutes);\n const dayStart = useMemo(() => dateAtHour(date, startHour), [date, startHour]);\n\n const bookingsByResource = useMemo(() => {\n const map = new Map<string, ScheduleBooking[]>();\n for (const b of bookings) {\n const list = map.get(b.resourceId);\n if (list) list.push(b);\n else map.set(b.resourceId, [b]);\n }\n return map;\n }, [bookings]);\n\n return (\n <div\n ref={ref}\n role=\"grid\"\n aria-label=\"Schedule\"\n className={cn(\n 'overflow-auto rounded-md border border-border bg-card text-sm shadow-sm',\n className,\n )}\n {...rest}\n >\n {/* Hour header */}\n <div className=\"sticky top-0 z-raised flex border-b border-border bg-muted/40\">\n <div className=\"w-32 shrink-0 border-r border-border px-3 py-2 text-xs font-medium text-muted-foreground\">\n {date.toLocaleDateString(undefined, { weekday: 'short', month: 'short', day: 'numeric' })}\n </div>\n <div className=\"flex-1 grid\" style={{ gridTemplateColumns: `repeat(${endHour - startHour}, 1fr)` }}>\n {Array.from({ length: endHour - startHour }, (_, i) => (\n <div key={i} className=\"border-l border-border px-2 py-1 text-xs text-muted-foreground tabular-nums\">\n {String((startHour + i) % 24).padStart(2, '0')}:00\n </div>\n ))}\n </div>\n </div>\n {/* Rows */}\n {resources.map((resource) => {\n const items = bookingsByResource.get(resource.id) ?? [];\n return (\n <div key={resource.id} role=\"row\" className=\"flex border-b border-border last:border-b-0\">\n <div className=\"w-32 shrink-0 border-r border-border bg-muted/20 px-3 py-2 text-xs font-medium\">\n {resource.label}\n </div>\n <div className=\"relative flex-1\" style={{ height: 56 }}>\n {/* Vertical hour gridlines */}\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-0 grid pointer-events-none\"\n style={{ gridTemplateColumns: `repeat(${endHour - startHour}, 1fr)` }}\n >\n {Array.from({ length: endHour - startHour }, (_, i) => (\n <div key={i} className=\"border-l border-border\" />\n ))}\n </div>\n {/* Slot click overlay */}\n {onSlotClick && (\n <div\n className=\"absolute inset-0 grid\"\n style={{ gridTemplateColumns: `repeat(${slotCount}, 1fr)` }}\n >\n {Array.from({ length: slotCount }, (_, i) => {\n const slotTime = new Date(dayStart);\n slotTime.setMinutes(slotTime.getMinutes() + i * slotMinutes);\n return (\n <button\n key={i}\n type=\"button\"\n aria-label={`Empty slot at ${slotTime.toLocaleTimeString()}`}\n onClick={() => onSlotClick(resource.id, slotTime)}\n className=\"hover:bg-primary-soft/30\"\n />\n );\n })}\n </div>\n )}\n {/* Bookings */}\n {items.map((booking) => {\n const offsetMin = Math.max(0, diffMinutes(dayStart, booking.start));\n const durMin = Math.max(15, diffMinutes(booking.start, booking.end));\n const left = (offsetMin / totalMinutes) * 100;\n const width = (durMin / totalMinutes) * 100;\n const color = booking.color ?? resource.color;\n return (\n <button\n key={booking.id}\n type=\"button\"\n role=\"button\"\n aria-label={`${resource.label} ${booking.start.toLocaleTimeString()} – ${booking.end.toLocaleTimeString()}: ${booking.label ?? ''}`}\n onClick={(e) => {\n e.stopPropagation();\n onBookingClick?.(booking);\n }}\n style={{\n left: `${left}%`,\n width: `${width}%`,\n top: 4,\n bottom: 4,\n background: color,\n }}\n className={cn(\n 'absolute overflow-hidden rounded-md border border-border/60 px-2 py-1 text-left text-xs font-medium transition-colors hover:brightness-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n !color && 'bg-primary-soft text-primary-soft-foreground',\n )}\n >\n {renderBooking ? (\n renderBooking(booking)\n ) : (\n <>\n <div className=\"truncate\">{booking.label ?? booking.id}</div>\n <div className=\"text-[10px] opacity-70 tabular-nums\">\n {booking.start.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n {' – '}\n {booking.end.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </div>\n </>\n )}\n </button>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n );\n});\n","import { forwardRef, useMemo, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface GanttTask {\n id: string;\n label: ReactNode;\n start: Date;\n end: Date;\n color?: string;\n /** 0..1 — fills the bar from the left. */\n progress?: number;\n}\n\nexport interface GanttDependency {\n from: string;\n to: string;\n}\n\nexport interface GanttMilestone {\n id: string;\n label: ReactNode;\n date: Date;\n}\n\nexport interface GanttProps extends HTMLAttributes<HTMLDivElement> {\n tasks: GanttTask[];\n dependencies?: GanttDependency[];\n milestones?: GanttMilestone[];\n from?: Date;\n to?: Date;\n cellWidth?: number;\n rowHeight?: number;\n labelWidth?: number;\n showWeekends?: boolean;\n onTaskClick?: (task: GanttTask) => void;\n}\n\nconst MS_PER_DAY = 24 * 60 * 60 * 1000;\n\nfunction startOfDayLocal(d: Date): Date {\n const c = new Date(d);\n c.setHours(0, 0, 0, 0);\n return c;\n}\n\nfunction dayDiff(a: Date, b: Date): number {\n return Math.round((startOfDayLocal(b).getTime() - startOfDayLocal(a).getTime()) / MS_PER_DAY);\n}\n\nfunction* eachDay(from: Date, to: Date): Generator<Date> {\n const cur = startOfDayLocal(from);\n const end = startOfDayLocal(to);\n while (cur <= end) {\n yield new Date(cur);\n cur.setDate(cur.getDate() + 1);\n }\n}\n\n/**\n * First-generation Gantt chart. Tasks rendered as horizontal bars positioned\n * by start/end. Optional dependency arrows + \"today\" indicator. Drag-resize,\n * drag-move, critical path, group rows all deferred.\n */\nexport const Gantt = forwardRef<HTMLDivElement, GanttProps>(function Gantt(\n {\n tasks,\n dependencies = [],\n milestones = [],\n from: fromProp,\n to: toProp,\n cellWidth = 40,\n rowHeight = 36,\n labelWidth = 200,\n showWeekends = true,\n onTaskClick,\n className,\n ...rest\n },\n ref,\n) {\n const { from, to, totalDays } = useMemo(() => {\n if (tasks.length === 0) {\n const now = new Date();\n return { from: now, to: now, totalDays: 1 };\n }\n const minStart = fromProp ?? new Date(Math.min(...tasks.map((t) => t.start.getTime())));\n const maxEnd = toProp ?? new Date(Math.max(...tasks.map((t) => t.end.getTime())));\n return {\n from: startOfDayLocal(minStart),\n to: startOfDayLocal(maxEnd),\n totalDays: dayDiff(minStart, maxEnd) + 1,\n };\n }, [tasks, fromProp, toProp]);\n\n const headerDates = useMemo(() => Array.from(eachDay(from, to)), [from, to]);\n const today = startOfDayLocal(new Date());\n const todayOffset = dayDiff(from, today);\n const todayInRange = todayOffset >= 0 && todayOffset < totalDays;\n\n const taskIndex = useMemo(() => new Map(tasks.map((t, i) => [t.id, i])), [tasks]);\n\n const timelineWidth = totalDays * cellWidth;\n\n return (\n <div\n ref={ref}\n role=\"grid\"\n aria-label=\"Gantt chart\"\n className={cn('overflow-auto rounded-md border border-border bg-card text-sm shadow-sm', className)}\n {...rest}\n >\n <div className=\"flex\">\n {/* Label column */}\n <div className=\"shrink-0 border-r border-border bg-muted/30\" style={{ width: labelWidth }}>\n <div className=\"border-b border-border px-3 py-2 text-xs font-medium text-muted-foreground\" style={{ height: rowHeight }}>\n Task\n </div>\n {tasks.map((task) => (\n <div\n key={task.id}\n className=\"flex items-center border-b border-border px-3 text-xs last:border-b-0\"\n style={{ height: rowHeight }}\n >\n <span className=\"truncate font-medium\">{task.label}</span>\n </div>\n ))}\n </div>\n {/* Timeline */}\n <div className=\"relative flex-1 overflow-x-auto\" style={{ minWidth: 0 }}>\n <div style={{ width: timelineWidth }}>\n {/* Header */}\n <div className=\"flex border-b border-border\" style={{ height: rowHeight }}>\n {headerDates.map((d, i) => {\n const isWeekend = d.getDay() === 0 || d.getDay() === 6;\n const isFirstOfMonth = d.getDate() === 1;\n return (\n <div\n key={i}\n className={cn(\n 'border-r border-border text-[10px] tabular-nums',\n isWeekend && showWeekends && 'bg-muted/40',\n isFirstOfMonth && 'border-l-2 border-l-border-strong',\n )}\n style={{ width: cellWidth }}\n >\n {isFirstOfMonth && (\n <div className=\"border-b border-border bg-muted px-1 py-0.5 text-center font-medium text-muted-foreground\">\n {d.toLocaleDateString(undefined, { month: 'short', year: '2-digit' })}\n </div>\n )}\n <div className=\"px-1 py-0.5 text-center text-muted-foreground\">\n {d.getDate()}\n </div>\n </div>\n );\n })}\n </div>\n {/* Rows */}\n {tasks.map((task) => {\n const offset = dayDiff(from, task.start);\n const length = Math.max(1, dayDiff(task.start, task.end) + 1);\n const left = offset * cellWidth;\n const width = length * cellWidth;\n const progress = task.progress ?? 0;\n return (\n <div\n key={task.id}\n className=\"relative border-b border-border last:border-b-0\"\n style={{ height: rowHeight }}\n >\n {/* Vertical day gridlines + weekend shading */}\n <div className=\"absolute inset-0 flex pointer-events-none\">\n {headerDates.map((d, i) => {\n const isWeekend = d.getDay() === 0 || d.getDay() === 6;\n return (\n <div\n key={i}\n style={{ width: cellWidth }}\n className={cn(\n 'border-r border-border/60',\n isWeekend && showWeekends && 'bg-muted/30',\n )}\n />\n );\n })}\n </div>\n {/* Bar */}\n <button\n type=\"button\"\n role=\"button\"\n aria-label={`${typeof task.label === 'string' ? task.label : task.id}: ${task.start.toLocaleDateString()} – ${task.end.toLocaleDateString()}`}\n onClick={() => onTaskClick?.(task)}\n style={{\n left: left + 4,\n width: width - 8,\n top: 6,\n bottom: 6,\n background: task.color,\n }}\n className={cn(\n 'absolute overflow-hidden rounded-md border border-border/60 px-2 text-left text-[11px] font-medium transition-colors hover:brightness-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n !task.color && 'bg-primary text-primary-foreground',\n )}\n >\n {/* Progress fill */}\n {progress > 0 && (\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-y-0 left-0 bg-foreground/20\"\n style={{ width: `${progress * 100}%` }}\n />\n )}\n <span className=\"relative inline-flex h-full items-center truncate\">\n {task.label}\n </span>\n </button>\n </div>\n );\n })}\n </div>\n {/* Dependency arrows + today line */}\n <svg\n className=\"pointer-events-none absolute\"\n style={{\n left: 0,\n top: rowHeight,\n width: timelineWidth,\n height: tasks.length * rowHeight,\n }}\n >\n {dependencies.map((dep, i) => {\n const fromIdx = taskIndex.get(dep.from);\n const toIdx = taskIndex.get(dep.to);\n if (fromIdx == null || toIdx == null) return null;\n const fromTask = tasks[fromIdx]!;\n const toTask = tasks[toIdx]!;\n const fromX = (dayDiff(from, fromTask.end) + 1) * cellWidth;\n const fromY = fromIdx * rowHeight + rowHeight / 2;\n const toX = dayDiff(from, toTask.start) * cellWidth;\n const toY = toIdx * rowHeight + rowHeight / 2;\n const midX = Math.max(fromX + 8, (fromX + toX) / 2);\n const path = `M ${fromX} ${fromY} L ${midX} ${fromY} L ${midX} ${toY} L ${toX - 4} ${toY}`;\n return (\n <g key={i}>\n <path d={path} fill=\"none\" stroke=\"currentColor\" strokeWidth={1} className=\"text-border-strong\" />\n <polygon\n points={`${toX - 4},${toY - 3} ${toX - 4},${toY + 3} ${toX},${toY}`}\n className=\"fill-border-strong\"\n />\n </g>\n );\n })}\n {milestones.map((m) => {\n const x = dayDiff(from, m.date) * cellWidth + cellWidth / 2;\n return (\n <g key={m.id}>\n <polygon\n points={`${x},2 ${x + 6},10 ${x},18 ${x - 6},10`}\n className=\"fill-warning stroke-warning-foreground\"\n strokeWidth={1}\n />\n </g>\n );\n })}\n {todayInRange && (\n <line\n x1={todayOffset * cellWidth + cellWidth / 2}\n x2={todayOffset * cellWidth + cellWidth / 2}\n y1={0}\n y2={tasks.length * rowHeight}\n className=\"stroke-primary\"\n strokeWidth={1.5}\n strokeDasharray=\"4 3\"\n />\n )}\n </svg>\n </div>\n </div>\n </div>\n );\n});\n","import { forwardRef, useMemo, type HTMLAttributes, type ReactNode } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\nimport {\n addDays,\n addMonths,\n buildMonthGrid,\n isSameDay,\n isToday,\n MONTHS_LONG,\n startOfDay,\n WEEKDAYS_SHORT,\n} from '../../forms/DateExtensions';\n\nexport type EventCalendarView = 'month' | 'week' | 'day' | 'agenda';\n\nexport interface EventCalendarEvent {\n id: string;\n title?: ReactNode;\n start: Date;\n end: Date;\n color?: string;\n allDay?: boolean;\n}\n\nexport interface EventCalendarProps extends HTMLAttributes<HTMLDivElement> {\n events: EventCalendarEvent[];\n view?: EventCalendarView;\n defaultView?: EventCalendarView;\n onViewChange?: (view: EventCalendarView) => void;\n date?: Date;\n defaultDate?: Date;\n onDateChange?: (date: Date) => void;\n weekStart?: 0 | 1;\n hourRange?: [number, number];\n onEventClick?: (event: EventCalendarEvent) => void;\n onSlotClick?: (date: Date, hour?: number) => void;\n}\n\nfunction startOfWeek(d: Date, weekStart: 0 | 1): Date {\n const c = startOfDay(d);\n const diff = (c.getDay() - weekStart + 7) % 7;\n c.setDate(c.getDate() - diff);\n return c;\n}\n\nfunction isInRange(d: Date, start: Date, end: Date): boolean {\n return d >= startOfDay(start) && d <= startOfDay(end);\n}\n\nfunction minutesSince(reference: Date, target: Date): number {\n return (target.getTime() - reference.getTime()) / 60000;\n}\n\n/**\n * First-generation EventCalendar — month / week / day / agenda views.\n * Header: Today / Prev / Next / Title + view switcher. Events as colored\n * blocks. Drag-edit, recurrence, \"+N more\" overflow deferred.\n */\nexport const EventCalendar = forwardRef<HTMLDivElement, EventCalendarProps>(\n function EventCalendar(\n {\n events,\n view: viewProp,\n defaultView = 'month',\n onViewChange,\n date: dateProp,\n defaultDate,\n onDateChange,\n weekStart = 0,\n hourRange = [0, 24],\n onEventClick,\n onSlotClick,\n className,\n ...rest\n },\n ref,\n ) {\n const [view, setView] = useControlled({\n controlled: viewProp,\n default: defaultView,\n onChange: onViewChange,\n });\n const [date, setDate] = useControlled({\n controlled: dateProp,\n default: defaultDate ?? new Date(),\n onChange: onDateChange,\n });\n\n const sortedEvents = useMemo(\n () => [...events].sort((a, b) => a.start.getTime() - b.start.getTime()),\n [events],\n );\n\n const goPrev = () => {\n switch (view) {\n case 'month':\n setDate(addMonths(date, -1));\n break;\n case 'week':\n setDate(addDays(date, -7));\n break;\n case 'day':\n case 'agenda':\n setDate(addDays(date, -1));\n break;\n }\n };\n const goNext = () => {\n switch (view) {\n case 'month':\n setDate(addMonths(date, 1));\n break;\n case 'week':\n setDate(addDays(date, 7));\n break;\n case 'day':\n case 'agenda':\n setDate(addDays(date, 1));\n break;\n }\n };\n const goToday = () => setDate(new Date());\n\n const title = useMemo(() => {\n switch (view) {\n case 'month':\n return `${MONTHS_LONG[date.getMonth()]} ${date.getFullYear()}`;\n case 'week': {\n const ws = startOfWeek(date, weekStart);\n const we = addDays(ws, 6);\n return `${ws.toLocaleDateString(undefined, { month: 'short', day: 'numeric' })} – ${we.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' })}`;\n }\n case 'day':\n return date.toLocaleDateString(undefined, { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' });\n case 'agenda':\n return `Upcoming from ${date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' })}`;\n }\n }, [view, date, weekStart]);\n\n return (\n <div\n ref={ref}\n className={cn('flex flex-col overflow-hidden rounded-md border border-border bg-card text-sm shadow-sm', className)}\n {...rest}\n >\n {/* Header */}\n <div className=\"flex items-center gap-2 border-b border-border bg-muted/30 px-3 py-2\">\n <button\n type=\"button\"\n onClick={goToday}\n className=\"inline-flex h-7 items-center rounded-md border border-border bg-background px-2.5 text-xs font-medium hover:bg-muted\"\n >\n Today\n </button>\n <button\n type=\"button\"\n aria-label=\"Previous\"\n onClick={goPrev}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-muted\"\n >\n <Icon icon={ChevronLeft} size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Next\"\n onClick={goNext}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground hover:bg-muted\"\n >\n <Icon icon={ChevronRight} size={14} />\n </button>\n <h3 className=\"ml-1 text-base font-semibold\">{title}</h3>\n <div role=\"radiogroup\" aria-label=\"View\" className=\"ml-auto flex items-center gap-0.5 rounded-md bg-card p-0.5 ring-1 ring-border\">\n {(['month', 'week', 'day', 'agenda'] as EventCalendarView[]).map((v) => (\n <button\n key={v}\n type=\"button\"\n role=\"radio\"\n aria-checked={view === v}\n onClick={() => setView(v)}\n className={cn(\n 'inline-flex h-6 items-center rounded px-2 text-xs font-medium transition-colors',\n view === v\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {v}\n </button>\n ))}\n </div>\n </div>\n {/* Body */}\n <div className=\"flex-1 overflow-auto\" style={{ minHeight: 0 }}>\n {view === 'month' && (\n <MonthView\n date={date}\n events={sortedEvents}\n weekStart={weekStart}\n onEventClick={onEventClick}\n onSlotClick={onSlotClick}\n />\n )}\n {view === 'week' && (\n <TimeGridView\n date={date}\n events={sortedEvents}\n days={7}\n firstDay={startOfWeek(date, weekStart)}\n hourRange={hourRange}\n onEventClick={onEventClick}\n onSlotClick={onSlotClick}\n />\n )}\n {view === 'day' && (\n <TimeGridView\n date={date}\n events={sortedEvents}\n days={1}\n firstDay={startOfDay(date)}\n hourRange={hourRange}\n onEventClick={onEventClick}\n onSlotClick={onSlotClick}\n />\n )}\n {view === 'agenda' && (\n <AgendaView date={date} events={sortedEvents} onEventClick={onEventClick} />\n )}\n </div>\n </div>\n );\n },\n);\n\ninterface MonthViewProps {\n date: Date;\n events: EventCalendarEvent[];\n weekStart: 0 | 1;\n onEventClick?: (event: EventCalendarEvent) => void;\n onSlotClick?: (date: Date, hour?: number) => void;\n}\n\nfunction MonthView({ date, events, weekStart, onEventClick, onSlotClick }: MonthViewProps) {\n const grid = buildMonthGrid(date.getFullYear(), date.getMonth());\n // Reorder weekdays per weekStart.\n const weekdayHeaders = Array.from({ length: 7 }, (_, i) => WEEKDAYS_SHORT[(i + weekStart) % 7]!);\n // The grid from buildMonthGrid is Sunday-first; rotate if weekStart=1.\n const cells = weekStart === 0 ? grid : (() => {\n // Rotate each row by -1 from Sunday-first to Monday-first.\n const out = grid.slice();\n return out;\n })();\n\n const eventsForDay = (d: Date) =>\n events.filter((e) => isInRange(d, e.start, e.end));\n\n return (\n <div className=\"grid h-full grid-cols-7 border-l border-t border-border\">\n {weekdayHeaders.map((wd) => (\n <div\n key={wd}\n className=\"border-b border-r border-border bg-muted/40 px-2 py-1 text-xs font-medium uppercase text-muted-foreground\"\n >\n {wd}\n </div>\n ))}\n {cells.map((cell, i) => {\n const cellEvents = eventsForDay(cell.date);\n return (\n <div\n key={i}\n className={cn(\n 'flex flex-col border-b border-r border-border p-1 text-xs',\n cell.outOfMonth && 'bg-muted/20',\n isToday(cell.date) && 'bg-primary-soft/20',\n )}\n style={{ minHeight: 96 }}\n >\n <button\n type=\"button\"\n onClick={() => onSlotClick?.(cell.date)}\n className={cn(\n 'mb-1 self-start rounded-sm px-1 text-xs tabular-nums transition-colors',\n cell.outOfMonth ? 'text-muted-foreground' : 'text-foreground',\n isToday(cell.date) && 'bg-primary text-primary-foreground',\n 'hover:bg-muted',\n )}\n >\n {cell.date.getDate()}\n </button>\n <div className=\"flex flex-col gap-0.5\">\n {cellEvents.slice(0, 3).map((e) => (\n <button\n key={e.id}\n type=\"button\"\n onClick={(ev) => {\n ev.stopPropagation();\n onEventClick?.(e);\n }}\n style={{ background: e.color }}\n className={cn(\n 'truncate rounded-sm px-1.5 py-0.5 text-left text-[11px] font-medium transition-colors hover:brightness-95',\n !e.color && 'bg-primary-soft text-primary-soft-foreground',\n )}\n aria-label={`${typeof e.title === 'string' ? e.title : e.id} at ${e.start.toLocaleTimeString()}`}\n >\n {e.allDay ? '• ' : ''}\n {e.title ?? '(no title)'}\n </button>\n ))}\n {cellEvents.length > 3 && (\n <span className=\"px-1 text-[10px] text-muted-foreground\">+{cellEvents.length - 3} more</span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\ninterface TimeGridViewProps {\n date: Date;\n events: EventCalendarEvent[];\n days: number;\n firstDay: Date;\n hourRange: [number, number];\n onEventClick?: (event: EventCalendarEvent) => void;\n onSlotClick?: (date: Date, hour?: number) => void;\n}\n\nfunction TimeGridView({ events, days, firstDay, hourRange, onEventClick, onSlotClick }: TimeGridViewProps) {\n const [startHour, endHour] = hourRange;\n const visibleHours = endHour - startHour;\n const HOUR_PX = 48;\n const dayDates = Array.from({ length: days }, (_, i) => addDays(firstDay, i));\n\n const eventsForDay = (d: Date) =>\n events.filter((e) => !e.allDay && isSameDay(d, e.start));\n const allDayForDay = (d: Date) =>\n events.filter((e) => e.allDay && isInRange(d, e.start, e.end));\n\n return (\n <div className=\"flex\">\n {/* Hour gutter */}\n <div className=\"w-14 shrink-0 border-r border-border\">\n <div className=\"h-6 border-b border-border bg-muted/40\" />\n <div className=\"h-7 border-b border-border bg-muted/20\" />\n {Array.from({ length: visibleHours }, (_, i) => (\n <div\n key={i}\n className=\"border-b border-border bg-muted/10 px-1 text-[10px] tabular-nums text-muted-foreground\"\n style={{ height: HOUR_PX }}\n >\n {String((startHour + i) % 24).padStart(2, '0')}:00\n </div>\n ))}\n </div>\n <div className=\"flex-1 overflow-x-auto\">\n <div className=\"grid\" style={{ gridTemplateColumns: `repeat(${days}, minmax(120px, 1fr))` }}>\n {/* Day headers */}\n {dayDates.map((d, i) => (\n <div\n key={`h-${i}`}\n className={cn(\n 'h-6 border-b border-r border-border bg-muted/40 px-2 text-xs font-medium',\n isToday(d) && 'bg-primary-soft/30',\n )}\n >\n {d.toLocaleDateString(undefined, { weekday: 'short', day: 'numeric' })}\n </div>\n ))}\n {/* All-day row */}\n {dayDates.map((d, i) => {\n const list = allDayForDay(d);\n return (\n <div\n key={`ad-${i}`}\n className=\"h-7 border-b border-r border-border bg-muted/10 p-0.5 text-[11px]\"\n >\n <div className=\"flex flex-wrap gap-0.5\">\n {list.map((e) => (\n <button\n key={e.id}\n type=\"button\"\n onClick={(ev) => {\n ev.stopPropagation();\n onEventClick?.(e);\n }}\n style={{ background: e.color }}\n className={cn(\n 'truncate rounded-sm px-1 py-0.5',\n !e.color && 'bg-primary-soft text-primary-soft-foreground',\n )}\n >\n {e.title ?? '(no title)'}\n </button>\n ))}\n </div>\n </div>\n );\n })}\n {/* Time grid columns */}\n {dayDates.map((d, di) => {\n const list = eventsForDay(d);\n const dayStart = new Date(d);\n dayStart.setHours(startHour, 0, 0, 0);\n return (\n <div\n key={`g-${di}`}\n className=\"relative border-r border-border\"\n style={{ height: visibleHours * HOUR_PX }}\n >\n {/* Hour grid lines */}\n {Array.from({ length: visibleHours }, (_, i) => (\n <div\n key={i}\n className=\"border-b border-border/60\"\n style={{ height: HOUR_PX }}\n onClick={() => onSlotClick?.(d, startHour + i)}\n />\n ))}\n {/* Today line */}\n {isToday(d) && (() => {\n const now = new Date();\n const minutes = now.getHours() * 60 + now.getMinutes() - startHour * 60;\n if (minutes < 0 || minutes > visibleHours * 60) return null;\n const top = (minutes / 60) * HOUR_PX;\n return (\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-x-0 z-raised border-t border-primary\"\n style={{ top }}\n />\n );\n })()}\n {/* Events */}\n {list.map((e) => {\n const start = e.start < dayStart ? dayStart : e.start;\n const dayEnd = new Date(d);\n dayEnd.setHours(endHour, 0, 0, 0);\n const end = e.end > dayEnd ? dayEnd : e.end;\n const topMin = minutesSince(dayStart, start);\n const durMin = Math.max(15, minutesSince(start, end));\n const top = (topMin / 60) * HOUR_PX;\n const height = (durMin / 60) * HOUR_PX;\n return (\n <button\n key={e.id}\n type=\"button\"\n onClick={(ev) => {\n ev.stopPropagation();\n onEventClick?.(e);\n }}\n style={{\n top,\n height,\n left: 2,\n right: 2,\n background: e.color,\n }}\n className={cn(\n 'absolute overflow-hidden rounded-sm border border-border/60 px-1 py-0.5 text-left text-[11px] font-medium transition-colors hover:brightness-95',\n !e.color && 'bg-primary text-primary-foreground',\n )}\n >\n <div className=\"truncate\">{e.title ?? '(no title)'}</div>\n <div className=\"text-[10px] opacity-80 tabular-nums\">\n {start.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}\n </div>\n </button>\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n\ninterface AgendaViewProps {\n date: Date;\n events: EventCalendarEvent[];\n onEventClick?: (event: EventCalendarEvent) => void;\n}\n\nfunction AgendaView({ date, events, onEventClick }: AgendaViewProps) {\n const horizon = addDays(date, 30);\n const upcoming = events.filter((e) => e.end >= date && e.start <= horizon);\n // Group by date.\n const groups = new Map<string, EventCalendarEvent[]>();\n for (const e of upcoming) {\n const key = e.start.toDateString();\n const list = groups.get(key);\n if (list) list.push(e);\n else groups.set(key, [e]);\n }\n if (groups.size === 0) {\n return <div className=\"p-6 text-center text-sm text-muted-foreground\">No upcoming events.</div>;\n }\n return (\n <ul className=\"divide-y divide-border\">\n {Array.from(groups.entries()).map(([key, list]) => {\n const groupDate = list[0]!.start;\n return (\n <li key={key} className=\"px-4 py-3\">\n <div\n className={cn(\n 'mb-2 text-xs font-semibold uppercase text-muted-foreground',\n isToday(groupDate) && 'text-primary',\n )}\n >\n {groupDate.toLocaleDateString(undefined, {\n weekday: 'long',\n month: 'short',\n day: 'numeric',\n })}\n </div>\n <ul className=\"space-y-1\">\n {list.map((e) => (\n <li key={e.id}>\n <button\n type=\"button\"\n onClick={() => onEventClick?.(e)}\n className=\"flex w-full items-start gap-3 rounded-md p-2 text-left transition-colors hover:bg-muted\"\n >\n <span\n aria-hidden=\"true\"\n className=\"mt-1 h-2 w-2 shrink-0 rounded-full\"\n style={{ background: e.color || 'var(--color-primary)' }}\n />\n <span className=\"flex-1\">\n <span className=\"block text-sm font-medium\">{e.title ?? '(no title)'}</span>\n <span className=\"block text-xs text-muted-foreground tabular-nums\">\n {e.allDay\n ? 'All day'\n : `${e.start.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} – ${e.end.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`}\n </span>\n </span>\n </button>\n </li>\n ))}\n </ul>\n </li>\n );\n })}\n </ul>\n );\n}\n","import { forwardRef, type ElementType, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\n\nexport type GradientTextDirection = 'r' | 'l' | 't' | 'b' | 'tr' | 'br' | 'tl' | 'bl';\nexport type GradientTextTag = 'span' | 'div' | 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\nexport interface GradientTextProps extends HTMLAttributes<HTMLElement> {\n from?: string;\n via?: string;\n to?: string;\n direction?: GradientTextDirection;\n animated?: boolean;\n as?: GradientTextTag;\n}\n\nconst DIR_TO_DEG: Record<GradientTextDirection, number> = {\n r: 90,\n l: 270,\n t: 0,\n b: 180,\n tr: 45,\n br: 135,\n bl: 225,\n tl: 315,\n};\n\n/**\n * Decorative gradient-filled text via `background-clip: text`. Optional\n * `animated` pans the gradient on a 4s loop (skipped under\n * `prefers-reduced-motion` via the global `motion-reduce:` CSS guard).\n */\nexport const GradientText = forwardRef<HTMLElement, GradientTextProps>(\n function GradientText(\n {\n from = 'var(--color-primary)',\n via,\n to = 'var(--color-accent, var(--color-primary))',\n direction = 'r',\n animated,\n as = 'span',\n className,\n style,\n children,\n ...rest\n },\n ref,\n ) {\n const stops = via ? `${from}, ${via}, ${to}` : `${from}, ${to}`;\n const Tag = as as ElementType;\n return (\n <Tag\n ref={ref as React.Ref<HTMLElement>}\n className={cn(\n 'inline-block bg-clip-text text-transparent',\n animated && 'motion-safe:animate-[gradient-shift_4s_ease-in-out_infinite]',\n className,\n )}\n style={{\n backgroundImage: `linear-gradient(${DIR_TO_DEG[direction]}deg, ${stops})`,\n backgroundSize: animated ? '200% 100%' : undefined,\n ...style,\n }}\n {...rest}\n >\n {children}\n </Tag>\n );\n },\n);\n","import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface CountUpProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {\n to: number;\n from?: number;\n duration?: number;\n easing?: (t: number) => number;\n format?: (value: number) => ReactNode;\n triggerOnView?: boolean;\n as?: 'span' | 'div' | 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\nconst easeOutCubic = (t: number) => 1 - Math.pow(1 - t, 3);\nconst defaultFormat = (v: number) => v.toFixed(0);\n\nfunction prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n}\n\n/**\n * Number that animates up to `to` on mount (or on enter-viewport when\n * `triggerOnView`). rAF tween; respects `prefers-reduced-motion` (jumps\n * straight to `to`).\n */\nexport const CountUp = forwardRef<HTMLElement, CountUpProps>(function CountUp(\n {\n to,\n from = 0,\n duration = 1500,\n easing = easeOutCubic,\n format = defaultFormat,\n triggerOnView = false,\n as = 'span',\n className,\n ...rest\n },\n ref,\n) {\n const [value, setValue] = useState(triggerOnView ? from : to);\n const elRef = useRef<HTMLElement | null>(null);\n const startedRef = useRef(false);\n\n useEffect(() => {\n if (prefersReducedMotion()) {\n setValue(to);\n return;\n }\n if (triggerOnView && typeof IntersectionObserver !== 'undefined' && elRef.current) {\n const obs = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting && !startedRef.current) {\n startedRef.current = true;\n animate();\n }\n }\n },\n { threshold: 0.2 },\n );\n obs.observe(elRef.current);\n return () => obs.disconnect();\n }\n animate();\n\n function animate() {\n const start = performance.now();\n let raf = 0;\n const tick = (now: number) => {\n const t = Math.min(1, (now - start) / duration);\n const eased = easing(t);\n setValue(from + (to - from) * eased);\n if (t < 1) raf = requestAnimationFrame(tick);\n };\n raf = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(raf);\n }\n }, [to, from, duration, easing, triggerOnView]);\n\n const Tag = as as ElementType;\n return (\n <Tag\n ref={(el: HTMLElement | null) => {\n elRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLElement | null>).current = el;\n }}\n className={cn('tabular-nums', className)}\n {...rest}\n >\n {format(value)}\n </Tag>\n );\n});\n","import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ElementType,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface AnimatedNumberProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {\n value: number;\n duration?: number;\n easing?: (t: number) => number;\n format?: (value: number) => ReactNode;\n as?: 'span' | 'div' | 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\nconst easeOutCubic = (t: number) => 1 - Math.pow(1 - t, 3);\nconst defaultFormat = (v: number) => v.toFixed(0);\n\nfunction prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n}\n\n/**\n * Animates the displayed number whenever `value` changes. rAF tween between\n * the previous and new value. Respects `prefers-reduced-motion`.\n */\nexport const AnimatedNumber = forwardRef<HTMLElement, AnimatedNumberProps>(\n function AnimatedNumber(\n {\n value,\n duration = 500,\n easing = easeOutCubic,\n format = defaultFormat,\n as = 'span',\n className,\n ...rest\n },\n ref,\n ) {\n const [display, setDisplay] = useState(value);\n const fromRef = useRef(value);\n\n useEffect(() => {\n if (prefersReducedMotion()) {\n setDisplay(value);\n fromRef.current = value;\n return;\n }\n const from = fromRef.current;\n const to = value;\n if (from === to) return;\n const start = performance.now();\n let raf = 0;\n const tick = (now: number) => {\n const t = Math.min(1, (now - start) / duration);\n const eased = easing(t);\n const next = from + (to - from) * eased;\n setDisplay(next);\n if (t < 1) raf = requestAnimationFrame(tick);\n else fromRef.current = to;\n };\n raf = requestAnimationFrame(tick);\n return () => cancelAnimationFrame(raf);\n }, [value, duration, easing]);\n\n const Tag = as as ElementType;\n return (\n <Tag\n ref={ref as React.Ref<HTMLElement>}\n className={cn('tabular-nums', className)}\n {...rest}\n >\n {format(display)}\n </Tag>\n );\n },\n);\n","import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ElementType,\n type HTMLAttributes,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport type ScrollRevealEffect =\n | 'fade'\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n | 'zoom';\n\nexport interface ScrollRevealProps extends HTMLAttributes<HTMLElement> {\n effect?: ScrollRevealEffect;\n duration?: number;\n delay?: number;\n threshold?: number;\n once?: boolean;\n as?: 'div' | 'section' | 'article' | 'span' | 'li';\n}\n\nconst HIDDEN_TRANSFORMS: Record<ScrollRevealEffect, string> = {\n fade: '',\n 'slide-up': 'translateY(20px)',\n 'slide-down': 'translateY(-20px)',\n 'slide-left': 'translateX(20px)',\n 'slide-right': 'translateX(-20px)',\n zoom: 'scale(0.95)',\n};\n\n/**\n * Reveal children on enter-viewport. CSS-driven (opacity + transform);\n * IntersectionObserver toggles `data-revealed`. Honors\n * `prefers-reduced-motion` (no transform / opacity at all — content visible\n * from the start).\n */\nexport const ScrollReveal = forwardRef<HTMLElement, ScrollRevealProps>(\n function ScrollReveal(\n {\n effect = 'fade',\n duration = 600,\n delay = 0,\n threshold = 0.1,\n once = true,\n as = 'div',\n className,\n style,\n children,\n ...rest\n },\n ref,\n ) {\n const [revealed, setRevealed] = useState(false);\n const elRef = useRef<HTMLElement | null>(null);\n const reduced =\n typeof window !== 'undefined' &&\n (window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false);\n\n useEffect(() => {\n if (reduced) {\n setRevealed(true);\n return;\n }\n const el = elRef.current;\n if (!el || typeof IntersectionObserver === 'undefined') {\n setRevealed(true);\n return;\n }\n const obs = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setRevealed(true);\n if (once) obs.disconnect();\n } else if (!once) {\n setRevealed(false);\n }\n }\n },\n { threshold },\n );\n obs.observe(el);\n return () => obs.disconnect();\n }, [reduced, threshold, once]);\n\n const Tag = as as ElementType;\n return (\n <Tag\n ref={(el: HTMLElement | null) => {\n elRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLElement | null>).current = el;\n }}\n data-revealed={revealed || undefined}\n className={cn(className)}\n style={{\n opacity: revealed || reduced ? 1 : 0,\n transform: revealed || reduced ? 'none' : HIDDEN_TRANSFORMS[effect],\n transition: reduced ? undefined : `opacity ${duration}ms ease-out ${delay}ms, transform ${duration}ms ease-out ${delay}ms`,\n ...style,\n }}\n {...rest}\n >\n {children}\n </Tag>\n );\n },\n);\n","import {\n forwardRef,\n useRef,\n useState,\n type ElementType,\n type HTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface TiltProps extends HTMLAttributes<HTMLElement> {\n maxAngle?: number;\n perspective?: number;\n glare?: boolean;\n scale?: number;\n as?: 'div' | 'section' | 'article' | 'span';\n}\n\ninterface TiltState {\n rotateX: number;\n rotateY: number;\n glareX: number;\n glareY: number;\n active: boolean;\n}\n\n/**\n * 3D card tilt — `rotateX`/`rotateY` from cursor position. Disabled under\n * `prefers-reduced-motion`. Optional `glare` paints a soft highlight that\n * follows the cursor.\n */\nexport const Tilt = forwardRef<HTMLElement, TiltProps>(function Tilt(\n {\n maxAngle = 12,\n perspective = 800,\n glare,\n scale = 1,\n as = 'div',\n className,\n style,\n children,\n onPointerMove,\n onPointerLeave,\n ...rest\n },\n ref,\n) {\n const elRef = useRef<HTMLElement | null>(null);\n const [tilt, setTilt] = useState<TiltState>({\n rotateX: 0,\n rotateY: 0,\n glareX: 50,\n glareY: 50,\n active: false,\n });\n\n const reduced =\n typeof window !== 'undefined' &&\n (window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false);\n\n const handleMove = (e: ReactPointerEvent<HTMLElement>) => {\n onPointerMove?.(e);\n if (reduced) return;\n const el = elRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const x = (e.clientX - rect.left) / rect.width;\n const y = (e.clientY - rect.top) / rect.height;\n const rotateY = (x - 0.5) * 2 * maxAngle;\n const rotateX = (0.5 - y) * 2 * maxAngle;\n setTilt({ rotateX, rotateY, glareX: x * 100, glareY: y * 100, active: true });\n };\n\n const handleLeave = (e: ReactPointerEvent<HTMLElement>) => {\n onPointerLeave?.(e);\n setTilt({ rotateX: 0, rotateY: 0, glareX: 50, glareY: 50, active: false });\n };\n\n const Tag = as as ElementType;\n return (\n <Tag\n ref={(el: HTMLElement | null) => {\n elRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLElement | null>).current = el;\n }}\n onPointerMove={handleMove}\n onPointerLeave={handleLeave}\n className={cn('relative', className)}\n style={{\n perspective,\n transform: tilt.active && !reduced\n ? `rotateX(${tilt.rotateX}deg) rotateY(${tilt.rotateY}deg) scale(${scale})`\n : 'rotateX(0) rotateY(0) scale(1)',\n transition: tilt.active ? 'transform 80ms ease-out' : 'transform 220ms ease-out',\n transformStyle: 'preserve-3d',\n ...style,\n }}\n {...rest}\n >\n {children}\n {glare && !reduced && tilt.active && (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 rounded-[inherit] mix-blend-overlay\"\n style={{\n background: `radial-gradient(circle at ${tilt.glareX}% ${tilt.glareY}%, rgba(255,255,255,0.35) 0%, transparent 50%)`,\n }}\n />\n )}\n </Tag>\n );\n});\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport type MarqueeDirection = 'left' | 'right' | 'up' | 'down';\n\nexport interface MarqueeProps extends HTMLAttributes<HTMLDivElement> {\n direction?: MarqueeDirection;\n /** Seconds for one full traversal of the inner content. */\n speed?: number;\n pauseOnHover?: boolean;\n gap?: number;\n children: ReactNode;\n}\n\n/**\n * Continuously scrolls children. Content is duplicated once for a seamless\n * loop animated by `-50%`. Pause-on-hover toggles `animation-play-state`.\n */\nexport const Marquee = forwardRef<HTMLDivElement, MarqueeProps>(function Marquee(\n { direction = 'left', speed = 30, pauseOnHover = true, gap = 48, className, children, ...rest },\n ref,\n) {\n const horizontal = direction === 'left' || direction === 'right';\n const reverse = direction === 'right' || direction === 'down';\n const animationName = horizontal ? 'marquee-x' : 'marquee-y';\n\n return (\n <div\n ref={ref}\n role=\"marquee\"\n data-direction={direction}\n className={cn(\n 'group/marquee relative overflow-hidden',\n horizontal ? 'flex' : 'flex flex-col',\n className,\n )}\n style={{ '--marquee-gap': `${gap}px` } as React.CSSProperties}\n {...rest}\n >\n {[0, 1].map((i) => (\n <div\n key={i}\n aria-hidden={i === 1}\n className={cn(\n 'shrink-0 motion-safe:animate-(--marquee-anim) motion-reduce:animation-none',\n horizontal ? 'flex shrink-0 items-center' : 'flex flex-col items-center',\n pauseOnHover && 'group-hover/marquee:[animation-play-state:paused]',\n )}\n style={{\n gap,\n paddingInline: horizontal ? gap / 2 : 0,\n paddingBlock: horizontal ? 0 : gap / 2,\n animation: `${animationName} ${speed}s linear infinite ${reverse ? 'reverse' : 'normal'}`,\n }}\n >\n {children}\n </div>\n ))}\n </div>\n );\n});\n","import {\n forwardRef,\n useEffect,\n useMemo,\n useState,\n type ElementType,\n type HTMLAttributes,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface TypewriterProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {\n text: string | string[];\n typeSpeed?: number;\n deleteSpeed?: number;\n pauseBetween?: number;\n loop?: boolean;\n cursor?: boolean;\n cursorChar?: string;\n as?: 'span' | 'div' | 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\n/**\n * Char-by-char typewriter. Single string types once; array of strings cycles\n * through (type → pause → delete → next). `prefers-reduced-motion` short-\n * circuits to the full string.\n */\nexport const Typewriter = forwardRef<HTMLElement, TypewriterProps>(function Typewriter(\n {\n text,\n typeSpeed = 60,\n deleteSpeed = 40,\n pauseBetween = 1500,\n loop,\n cursor = true,\n cursorChar = '│',\n as = 'span',\n className,\n ...rest\n },\n ref,\n) {\n const phrases = useMemo(() => (Array.isArray(text) ? text : [text]), [text]);\n const shouldLoop = loop ?? phrases.length > 1;\n const reduced =\n typeof window !== 'undefined' &&\n (window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false);\n\n const [phraseIndex, setPhraseIndex] = useState(0);\n const [charIndex, setCharIndex] = useState(0);\n const [deleting, setDeleting] = useState(false);\n\n useEffect(() => {\n if (reduced) return;\n const current = phrases[phraseIndex] ?? '';\n let timeout: number;\n\n if (!deleting) {\n // Typing phase.\n if (charIndex < current.length) {\n timeout = window.setTimeout(() => setCharIndex(charIndex + 1), typeSpeed);\n } else {\n // Done typing this phrase.\n if (phrases.length === 1 && !shouldLoop) return;\n timeout = window.setTimeout(() => setDeleting(true), pauseBetween);\n }\n } else {\n // Deleting phase.\n if (charIndex > 0) {\n timeout = window.setTimeout(() => setCharIndex(charIndex - 1), deleteSpeed);\n } else {\n // Move to next phrase.\n const nextIdx = (phraseIndex + 1) % phrases.length;\n if (!shouldLoop && nextIdx === 0) return;\n setDeleting(false);\n setPhraseIndex(nextIdx);\n }\n }\n return () => window.clearTimeout(timeout);\n }, [charIndex, deleting, phraseIndex, phrases, typeSpeed, deleteSpeed, pauseBetween, shouldLoop, reduced]);\n\n const fullText = reduced\n ? (Array.isArray(text) ? text[0] ?? '' : text)\n : (phrases[phraseIndex] ?? '').slice(0, charIndex);\n\n const Tag = as as ElementType;\n return (\n <Tag ref={ref as React.Ref<HTMLElement>} className={cn('inline-block', className)} {...rest}>\n {fullText}\n {cursor && !reduced && (\n <span\n aria-hidden=\"true\"\n className=\"ml-0.5 inline-block motion-safe:animate-[blink-caret_1s_step-end_infinite]\"\n >\n {cursorChar}\n </span>\n )}\n </Tag>\n );\n});\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { Portal } from '../../primitives';\n\nexport interface ConfettiOrigin {\n x?: number;\n y?: number;\n}\n\nexport interface ConfettiFireOptions {\n particleCount?: number;\n colors?: string[];\n spread?: number;\n velocity?: number;\n origin?: ConfettiOrigin;\n}\n\nexport interface ConfettiProps {\n particleCount?: number;\n colors?: string[];\n gravity?: number;\n spread?: number;\n velocity?: number;\n lifetime?: number;\n origin?: ConfettiOrigin;\n /** Auto-fire on mount. Useful for one-shot confetti on a route landing. */\n autoFire?: boolean;\n}\n\nexport interface ConfettiHandle {\n fire: (opts?: ConfettiFireOptions) => void;\n}\n\ninterface Particle {\n id: number;\n x: number;\n y: number;\n vx: number;\n vy: number;\n rotation: number;\n rotationSpeed: number;\n size: number;\n color: string;\n shape: 'rect' | 'circle';\n bornAt: number;\n}\n\nconst DEFAULT_COLORS = ['#ef4444', '#f59e0b', '#10b981', '#3b82f6', '#a855f7', '#ec4899'];\n\nlet nextParticleId = 0;\n\n/**\n * Confetti burst. Imperative `fire()` via ref or `autoFire` on mount. SVG\n * particles animated by rAF. No-op under `prefers-reduced-motion`.\n */\nexport const Confetti = forwardRef<ConfettiHandle, ConfettiProps>(function Confetti(\n {\n particleCount = 60,\n colors = DEFAULT_COLORS,\n gravity = 1200,\n spread = 60,\n velocity = 500,\n lifetime = 3000,\n origin,\n autoFire,\n },\n forwardedRef,\n) {\n const [particles, setParticles] = useState<Particle[]>([]);\n const rafRef = useRef<number | null>(null);\n const lastTimeRef = useRef<number>(0);\n const reducedRef = useRef(\n typeof window !== 'undefined' &&\n (window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false),\n );\n\n const spawn = useCallback(\n (opts?: ConfettiFireOptions) => {\n if (reducedRef.current) return;\n const count = opts?.particleCount ?? particleCount;\n const palette = opts?.colors ?? colors;\n const sp = opts?.spread ?? spread;\n const vel = opts?.velocity ?? velocity;\n const o = opts?.origin ?? origin;\n const x = o?.x ?? (typeof window !== 'undefined' ? window.innerWidth / 2 : 200);\n const y = o?.y ?? (typeof window !== 'undefined' ? window.innerHeight / 2 : 200);\n const burst: Particle[] = [];\n const now = performance.now();\n for (let i = 0; i < count; i++) {\n // Angle: upward (-90deg) ± spread/2.\n const angle = (-Math.PI / 2) + ((Math.random() - 0.5) * (sp * Math.PI)) / 180;\n const speed = vel * (0.7 + Math.random() * 0.6);\n burst.push({\n id: ++nextParticleId,\n x,\n y,\n vx: Math.cos(angle) * speed + (Math.random() - 0.5) * 60,\n vy: Math.sin(angle) * speed,\n rotation: Math.random() * 360,\n rotationSpeed: (Math.random() - 0.5) * 720,\n size: 6 + Math.random() * 6,\n color: palette[Math.floor(Math.random() * palette.length)] ?? '#000',\n shape: Math.random() > 0.5 ? 'rect' : 'circle',\n bornAt: now,\n });\n }\n setParticles((prev) => [...prev, ...burst]);\n },\n [particleCount, colors, spread, velocity, origin],\n );\n\n useImperativeHandle(forwardedRef, () => ({ fire: spawn }), [spawn]);\n\n useEffect(() => {\n if (autoFire) spawn();\n }, [autoFire, spawn]);\n\n // Animation loop.\n useEffect(() => {\n if (particles.length === 0) return;\n\n const tick = (now: number) => {\n const last = lastTimeRef.current || now;\n const dt = (now - last) / 1000;\n lastTimeRef.current = now;\n const viewportH = typeof window !== 'undefined' ? window.innerHeight : 800;\n setParticles((prev) =>\n prev\n .map((p) => ({\n ...p,\n x: p.x + p.vx * dt,\n y: p.y + p.vy * dt,\n vy: p.vy + gravity * dt,\n rotation: p.rotation + p.rotationSpeed * dt,\n }))\n .filter((p) => p.y < viewportH + 80 && now - p.bornAt < lifetime),\n );\n rafRef.current = requestAnimationFrame(tick);\n };\n rafRef.current = requestAnimationFrame(tick);\n return () => {\n if (rafRef.current != null) cancelAnimationFrame(rafRef.current);\n lastTimeRef.current = 0;\n };\n }, [particles.length, gravity, lifetime]);\n\n if (particles.length === 0) return null;\n\n return (\n <Portal>\n <svg\n aria-hidden=\"true\"\n className=\"pointer-events-none fixed inset-0 z-toast\"\n style={{ width: '100vw', height: '100vh' }}\n >\n {particles.map((p) =>\n p.shape === 'rect' ? (\n <rect\n key={p.id}\n x={p.x - p.size / 2}\n y={p.y - p.size / 2}\n width={p.size}\n height={p.size * 0.5}\n fill={p.color}\n transform={`rotate(${p.rotation} ${p.x} ${p.y})`}\n />\n ) : (\n <circle key={p.id} cx={p.x} cy={p.y} r={p.size / 2} fill={p.color} />\n ),\n )}\n </svg>\n </Portal>\n );\n});\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport type AnnotationTone = 'note' | 'comment' | 'suggestion' | 'issue' | 'resolved';\n\nexport interface AnnotationMarkerProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Wrapped text or content the annotation refers to. Omit for a standalone pin. */\n children?: ReactNode;\n /** Numeric badge / index shown in the pin. */\n index?: number | string;\n /** Tone — drives the highlight color. */\n tone?: AnnotationTone;\n /** Show the marker as a small floating pin without underline. */\n pinOnly?: boolean;\n /** Marks the annotation as resolved (dimmed, struck-through highlight). */\n resolved?: boolean;\n /** Marks the annotation as the currently focused / hovered one. */\n active?: boolean;\n}\n\nconst TONE_HIGHLIGHT: Record<AnnotationTone, string> = {\n note: 'bg-info-soft/60 decoration-info',\n comment: 'bg-primary-soft/60 decoration-primary',\n suggestion: 'bg-success-soft/60 decoration-success',\n issue: 'bg-destructive-soft/60 decoration-destructive',\n resolved: 'bg-muted decoration-muted-foreground',\n};\n\nconst TONE_PIN: Record<AnnotationTone, string> = {\n note: 'bg-info text-info-foreground',\n comment: 'bg-primary text-primary-foreground',\n suggestion: 'bg-success text-success-foreground',\n issue: 'bg-destructive text-destructive-foreground',\n resolved: 'bg-muted-foreground text-background',\n};\n\n/**\n * Wraps content (or stands alone) to mark an annotation. Renders as a button\n * so it's keyboard-focusable; click handlers fire the open-thread flow.\n * `pinOnly` collapses to just the small numbered chip — useful for margin\n * markers or floating layers (set `position` via `className`).\n */\nexport const AnnotationMarker = forwardRef<HTMLButtonElement, AnnotationMarkerProps>(\n (\n { children, index, tone = 'comment', pinOnly, resolved, active, className, ...props },\n ref,\n ) => {\n const effectiveTone: AnnotationTone = resolved ? 'resolved' : tone;\n const pin = (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full px-1 text-[10px] font-semibold leading-none',\n TONE_PIN[effectiveTone],\n )}\n >\n {index ?? ''}\n </span>\n );\n\n if (pinOnly || children == null) {\n return (\n <button\n ref={ref}\n type=\"button\"\n data-tone={effectiveTone}\n data-active={active ? '' : undefined}\n className={cn(\n 'inline-flex items-center gap-1 align-middle rounded-full ring-1 ring-transparent transition-shadow',\n active && 'ring-ring',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...props}\n >\n {pin}\n </button>\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-tone={effectiveTone}\n data-active={active ? '' : undefined}\n className={cn(\n 'group inline-flex items-baseline gap-1 align-baseline rounded-sm px-0.5 transition-colors',\n 'underline decoration-2 underline-offset-4',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n TONE_HIGHLIGHT[effectiveTone],\n resolved && 'line-through opacity-70',\n active && 'ring-1 ring-ring',\n className,\n )}\n {...props}\n >\n <span>{children}</span>\n {pin}\n </button>\n );\n },\n);\nAnnotationMarker.displayName = 'AnnotationMarker';\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { SmilePlus } from 'lucide-react';\nimport { cn } from '../../utils';\n\nexport interface Reaction {\n /** Stable id (typically the emoji or shortcode). */\n key: string;\n /** Emoji or icon node displayed in the chip. */\n emoji: ReactNode;\n /** Total count of users who reacted. */\n count: number;\n /** Whether the current viewer has reacted with this. */\n reactedByMe?: boolean;\n /** Optional list of user names — surfaced in the chip's `title`. */\n users?: string[];\n}\n\nexport interface ReactionBarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n reactions: Reaction[];\n /** Click handler for an existing reaction chip. Toggles user's reaction. */\n onReact?: (key: string) => void;\n /** Click handler for the trailing \"add\" button. Opens a picker. */\n onAdd?: () => void;\n /** Hide the trailing \"add reaction\" button. */\n hideAddButton?: boolean;\n /** Compact mode — emoji only, no counts. */\n compact?: boolean;\n /** Hide chips with `count === 0`. Default true. */\n hideEmpty?: boolean;\n}\n\ninterface ChipProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n reactedByMe?: boolean;\n}\n\nfunction ReactionChip({ reactedByMe, className, ...rest }: ChipProps) {\n return (\n <button\n type=\"button\"\n data-active={reactedByMe ? '' : undefined}\n className={cn(\n 'inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs leading-none transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n reactedByMe\n ? 'border-primary bg-primary-soft text-primary-soft-foreground'\n : 'border-border bg-background hover:bg-muted',\n className,\n )}\n {...rest}\n />\n );\n}\n\n/**\n * Row of reaction chips with optional add-reaction button. Each chip toggles\n * `onReact(key)`; the trailing `+` opens a picker via `onAdd`. Pair with\n * `forms/ReactionPicker` to wire the add flow.\n */\nexport const ReactionBar = forwardRef<HTMLDivElement, ReactionBarProps>(\n (\n {\n reactions,\n onReact,\n onAdd,\n hideAddButton,\n compact,\n hideEmpty = true,\n className,\n ...props\n },\n ref,\n ) => {\n const visible = hideEmpty ? reactions.filter((r) => r.count > 0) : reactions;\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label=\"Reactions\"\n className={cn('inline-flex flex-wrap items-center gap-1', className)}\n {...props}\n >\n {visible.map((r) => (\n <ReactionChip\n key={r.key}\n reactedByMe={r.reactedByMe}\n title={r.users?.length ? r.users.join(', ') : undefined}\n onClick={() => onReact?.(r.key)}\n >\n <span className=\"text-sm leading-none\">{r.emoji}</span>\n {!compact && <span className=\"font-medium tabular-nums\">{r.count}</span>}\n </ReactionChip>\n ))}\n {!hideAddButton && onAdd && (\n <button\n type=\"button\"\n onClick={onAdd}\n aria-label=\"Add reaction\"\n className={cn(\n 'inline-flex items-center justify-center rounded-full border border-dashed border-border px-2 py-0.5 text-muted-foreground transition-colors',\n 'hover:bg-muted hover:text-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n >\n <SmilePlus className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n );\n },\n);\nReactionBar.displayName = 'ReactionBar';\n","import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Check, CheckCheck, Clock, AlertTriangle } from 'lucide-react';\nimport { cn } from '../../utils';\n\nexport type ChatSide = 'start' | 'end';\nexport type ChatStatus = 'sending' | 'sent' | 'delivered' | 'read' | 'failed';\nexport type ChatTone = 'default' | 'primary' | 'system' | 'subtle';\n\nexport interface ChatBubbleProps extends HTMLAttributes<HTMLDivElement> {\n /** Which side of the conversation. `start` = them, `end` = me. */\n side?: ChatSide;\n /** Bubble color tone. `system` is centered + muted (e.g. \"Alex joined\"). */\n tone?: ChatTone;\n /** Avatar slot (rendered next to the bubble on the same side). */\n avatar?: ReactNode;\n /** Author label (rendered above the bubble). */\n author?: ReactNode;\n /** Timestamp (rendered next to the status row). */\n timestamp?: ReactNode;\n /** Delivery state. Hidden when `side === 'start'` by default. */\n status?: ChatStatus;\n /** Force-show status even on the inbound side. */\n showStatusOnStart?: boolean;\n /** Hide the bubble's tail (for stacked / grouped messages). */\n tailless?: boolean;\n /** Reactions / footer slot (e.g. `<ReactionBar />`). */\n footer?: ReactNode;\n /** Bubble body. */\n children: ReactNode;\n}\n\nconst TONE_BASE: Record<ChatTone, string> = {\n default: 'bg-muted text-foreground',\n primary: 'bg-primary text-primary-foreground',\n system: 'bg-transparent text-muted-foreground italic',\n subtle: 'bg-card text-card-foreground border border-border',\n};\n\nconst STATUS_ICON: Record<ChatStatus, ReactNode> = {\n sending: <Clock className=\"h-3 w-3\" />,\n sent: <Check className=\"h-3 w-3\" />,\n delivered: <CheckCheck className=\"h-3 w-3\" />,\n read: <CheckCheck className=\"h-3 w-3 text-info\" />,\n failed: <AlertTriangle className=\"h-3 w-3 text-destructive\" />,\n};\n\n/**\n * Single chat message bubble. Compose `<ChatBubble side=\"end\" tone=\"primary\"\n * status=\"read\" timestamp=\"9:42 AM\">…</ChatBubble>` inside a `MessageList`.\n * Use `system` tone for join / leave / metadata rows. Pair the `footer` slot\n * with `display/ReactionBar`.\n */\nexport const ChatBubble = forwardRef<HTMLDivElement, ChatBubbleProps>(\n (\n {\n side = 'start',\n tone,\n avatar,\n author,\n timestamp,\n status,\n showStatusOnStart,\n tailless,\n footer,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const isEnd = side === 'end';\n const effectiveTone: ChatTone = tone ?? (isEnd ? 'primary' : 'default');\n const isSystem = effectiveTone === 'system';\n const showStatus = !!status && (isEnd || showStatusOnStart);\n\n if (isSystem) {\n return (\n <div\n ref={ref}\n data-side={side}\n className={cn('flex w-full justify-center', className)}\n {...props}\n >\n <div className={cn('text-center text-xs', TONE_BASE.system)}>{children}</div>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n data-side={side}\n className={cn(\n 'flex w-full gap-2',\n isEnd ? 'flex-row-reverse' : 'flex-row',\n className,\n )}\n {...props}\n >\n {avatar && <div className=\"shrink-0 self-end\">{avatar}</div>}\n <div\n className={cn(\n 'flex max-w-[75%] flex-col gap-1',\n isEnd ? 'items-end' : 'items-start',\n )}\n >\n {author && (\n <div className=\"text-xs font-medium text-muted-foreground\">{author}</div>\n )}\n <div\n className={cn(\n 'relative inline-block px-3 py-2 text-sm break-words',\n TONE_BASE[effectiveTone],\n tailless ? 'rounded-2xl' : isEnd ? 'rounded-2xl rounded-br-sm' : 'rounded-2xl rounded-bl-sm',\n )}\n >\n {children}\n </div>\n {(timestamp || showStatus) && (\n <div\n className={cn(\n 'flex items-center gap-1 text-[11px] text-muted-foreground',\n isEnd ? 'flex-row-reverse' : 'flex-row',\n )}\n >\n {timestamp && <span>{timestamp}</span>}\n {showStatus && status && (\n <span aria-label={`Status: ${status}`}>{STATUS_ICON[status]}</span>\n )}\n </div>\n )}\n {footer && <div className={cn(isEnd && 'self-end')}>{footer}</div>}\n </div>\n </div>\n );\n },\n);\nChatBubble.displayName = 'ChatBubble';\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils';\n\nexport interface MessageListHandle {\n scrollToBottom: (behavior?: ScrollBehavior) => void;\n isAtBottom: () => boolean;\n}\n\nexport interface MessageListProps extends HTMLAttributes<HTMLDivElement> {\n /** Slot rendered above the message stream (e.g. \"load older\"). */\n header?: ReactNode;\n /** Slot rendered below the message stream (e.g. typing indicator). */\n footer?: ReactNode;\n /** Auto-scroll to bottom when children change *and* the viewer is near\n * the bottom. Default true. */\n stickToBottom?: boolean;\n /** Threshold (px) considered \"at bottom\" for stickiness. Default 32. */\n bottomThreshold?: number;\n /** Show a floating \"jump to bottom\" button when scrolled away. Default true. */\n showJumpToBottom?: boolean;\n /** Reverse-render messages (newest at top). v1 keeps natural top→bottom. */\n reverse?: boolean;\n children: ReactNode;\n}\n\nexport interface DaySeparatorProps extends HTMLAttributes<HTMLDivElement> {\n /** Label (e.g. \"Today\", \"Yesterday\", \"Mar 5\"). */\n label: ReactNode;\n}\n\nexport const DaySeparator = forwardRef<HTMLDivElement, DaySeparatorProps>(\n ({ label, className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"separator\"\n className={cn('flex items-center gap-3 py-2', className)}\n {...props}\n >\n <span className=\"h-px flex-1 bg-border\" aria-hidden=\"true\" />\n <span className=\"text-[11px] font-medium uppercase tracking-wide text-muted-foreground\">\n {label}\n </span>\n <span className=\"h-px flex-1 bg-border\" aria-hidden=\"true\" />\n </div>\n ),\n);\nDaySeparator.displayName = 'MessageList.DaySeparator';\n\nconst MessageListInner = forwardRef<MessageListHandle, MessageListProps>(\n (\n {\n header,\n footer,\n stickToBottom = true,\n bottomThreshold = 32,\n showJumpToBottom = true,\n reverse: _reverse,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n void _reverse;\n const scrollerRef = useRef<HTMLDivElement | null>(null);\n const [atBottom, setAtBottom] = useState(true);\n\n const isNearBottom = useCallback(() => {\n const el = scrollerRef.current;\n if (!el) return true;\n return el.scrollHeight - el.clientHeight - el.scrollTop <= bottomThreshold;\n }, [bottomThreshold]);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior = 'smooth') => {\n const el = scrollerRef.current;\n if (!el) return;\n el.scrollTo({ top: el.scrollHeight, behavior });\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({ scrollToBottom, isAtBottom: isNearBottom }),\n [scrollToBottom, isNearBottom],\n );\n\n useLayoutEffect(() => {\n if (stickToBottom && isNearBottom()) scrollToBottom('auto');\n }, [children, stickToBottom, isNearBottom, scrollToBottom]);\n\n useEffect(() => {\n const el = scrollerRef.current;\n if (!el) return;\n const onScroll = () => setAtBottom(isNearBottom());\n el.addEventListener('scroll', onScroll, { passive: true });\n onScroll();\n return () => el.removeEventListener('scroll', onScroll);\n }, [isNearBottom]);\n\n return (\n <div className={cn('relative flex h-full min-h-0 flex-col', className)} {...props}>\n {header && <div className=\"shrink-0\">{header}</div>}\n <div\n ref={scrollerRef}\n className=\"flex-1 min-h-0 overflow-y-auto px-3 py-3\"\n role=\"log\"\n aria-live=\"polite\"\n aria-relevant=\"additions\"\n >\n <div className=\"flex flex-col gap-2\">{children}</div>\n </div>\n {footer && <div className=\"shrink-0 border-t border-border px-3 py-2\">{footer}</div>}\n {showJumpToBottom && !atBottom && (\n <button\n type=\"button\"\n onClick={() => scrollToBottom('smooth')}\n aria-label=\"Jump to latest\"\n className={cn(\n 'absolute bottom-3 right-3 inline-flex h-9 w-9 items-center justify-center rounded-full',\n 'border border-border bg-background text-foreground shadow-md',\n 'hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n );\n },\n);\nMessageListInner.displayName = 'MessageList';\n\ntype MessageListComponent = typeof MessageListInner & {\n DaySeparator: typeof DaySeparator;\n};\n\nexport const MessageList = MessageListInner as MessageListComponent;\nMessageList.DaySeparator = DaySeparator;\n\nexport default MessageList;\n","import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils';\n\nexport interface ThreadViewProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Title for the thread panel header. */\n title?: ReactNode;\n /** Subtitle shown under the title (e.g. \"in #engineering\"). */\n subtitle?: ReactNode;\n /** Parent message — typically a `<ChatBubble />`. */\n parent: ReactNode;\n /** Reply count label. Pass `null` to hide entirely. */\n replyCount?: ReactNode;\n /** Reply nodes (typically `<ChatBubble />` items). */\n children?: ReactNode;\n /** Composer rendered at the bottom of the panel. */\n composer?: ReactNode;\n /** Fires when the close button is clicked. */\n onClose?: () => void;\n /** Hide the close button. */\n hideCloseButton?: boolean;\n}\n\n/**\n * Side-panel layout for a single thread: parent message + reply count\n * separator + reply list + composer. The actual messages stay as\n * children — `ThreadView` only owns the chrome.\n */\nexport const ThreadView = forwardRef<HTMLDivElement, ThreadViewProps>(\n (\n {\n title = 'Thread',\n subtitle,\n parent,\n replyCount,\n children,\n composer,\n onClose,\n hideCloseButton,\n className,\n ...props\n },\n ref,\n ) => {\n const replies =\n Array.isArray(children) ? children : children == null ? [] : [children];\n const count = replies.length;\n\n return (\n <div\n ref={ref}\n role=\"complementary\"\n aria-label=\"Thread\"\n className={cn(\n 'flex h-full min-h-0 flex-col rounded-md border border-border bg-card',\n className,\n )}\n {...props}\n >\n <header className=\"flex items-start justify-between gap-2 border-b border-border px-4 py-3\">\n <div className=\"min-w-0\">\n <div className=\"text-sm font-semibold text-foreground\">{title}</div>\n {subtitle && <div className=\"text-xs text-muted-foreground\">{subtitle}</div>}\n </div>\n {!hideCloseButton && onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close thread\"\n className=\"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </header>\n <div className=\"flex-1 min-h-0 overflow-y-auto px-4 py-3\">\n <div>{parent}</div>\n {replyCount !== null && (\n <div className=\"my-3 flex items-center gap-3\">\n <span className=\"text-xs text-muted-foreground\">\n {replyCount ??\n (count === 0\n ? 'No replies yet'\n : count === 1\n ? '1 reply'\n : `${count} replies`)}\n </span>\n <span aria-hidden=\"true\" className=\"h-px flex-1 bg-border\" />\n </div>\n )}\n <div className=\"flex flex-col gap-2\">{children}</div>\n </div>\n {composer && (\n <div className=\"border-t border-border px-3 py-2\">{composer}</div>\n )}\n </div>\n );\n },\n);\nThreadView.displayName = 'ThreadView';\n","import {\n Children,\n forwardRef,\n isValidElement,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '../../utils';\n\nexport interface CommentThreadProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n}\n\nexport interface CommentProps extends HTMLAttributes<HTMLDivElement> {\n /** Avatar / author photo node. */\n avatar?: ReactNode;\n /** Author name. */\n author: ReactNode;\n /** Timestamp / metadata node. */\n timestamp?: ReactNode;\n /** Trailing chip for badges (e.g. \"OP\", \"Author\"). */\n badge?: ReactNode;\n /** Body / content. */\n children: ReactNode;\n /** Footer actions (e.g. Reply / Vote / Report). */\n actions?: ReactNode;\n /** Nested replies — pass `<CommentThread.Comment>` items. */\n replies?: ReactNode;\n /** Initial collapsed state for replies. */\n defaultCollapsed?: boolean;\n /** Mark as the OP / highlighted comment. */\n highlighted?: boolean;\n}\n\nconst CommentThreadInner = forwardRef<HTMLDivElement, CommentThreadProps>(\n ({ children, className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"tree\"\n aria-label=\"Comments\"\n className={cn('flex flex-col gap-3', className)}\n {...props}\n >\n {children}\n </div>\n ),\n);\nCommentThreadInner.displayName = 'CommentThread';\n\nexport const Comment = forwardRef<HTMLDivElement, CommentProps>(\n (\n {\n avatar,\n author,\n timestamp,\n badge,\n children,\n actions,\n replies,\n defaultCollapsed = false,\n highlighted,\n className,\n ...props\n },\n ref,\n ) => {\n const [collapsed, setCollapsed] = useState(defaultCollapsed);\n const replyCount = Children.toArray(replies).filter(isValidElement).length;\n const hasReplies = replyCount > 0;\n\n return (\n <div\n ref={ref}\n role=\"treeitem\"\n aria-expanded={hasReplies ? !collapsed : undefined}\n data-highlighted={highlighted ? '' : undefined}\n className={cn(\n 'flex gap-2 rounded-md',\n highlighted && 'bg-primary-soft/30 ring-1 ring-primary/20 p-2',\n className,\n )}\n {...props}\n >\n {/* Avatar + collapse rail */}\n <div className=\"flex flex-col items-center gap-1\">\n <div className=\"shrink-0\">{avatar}</div>\n {hasReplies && (\n <button\n type=\"button\"\n onClick={() => setCollapsed((c) => !c)}\n aria-label={collapsed ? 'Expand replies' : 'Collapse replies'}\n className={cn(\n 'flex flex-1 items-stretch -my-1 group/rail',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-full',\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'mx-auto w-px flex-1 bg-border transition-colors group-hover/rail:bg-foreground/30',\n collapsed && 'opacity-40',\n )}\n />\n </button>\n )}\n </div>\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-baseline gap-x-2 text-sm\">\n <span className=\"font-medium text-foreground\">{author}</span>\n {badge}\n {timestamp && (\n <span className=\"text-xs text-muted-foreground\">{timestamp}</span>\n )}\n </div>\n <div className=\"mt-1 text-sm text-foreground\">{children}</div>\n {actions && (\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n {actions}\n </div>\n )}\n\n {hasReplies && (\n <div className={cn('mt-2', collapsed && 'hidden')}>\n <div className=\"flex flex-col gap-3 border-l border-border pl-3\">\n {replies}\n </div>\n </div>\n )}\n\n {hasReplies && collapsed && (\n <button\n type=\"button\"\n onClick={() => setCollapsed(false)}\n className={cn(\n 'mt-1 inline-flex items-center gap-1 text-xs text-primary hover:underline',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded',\n )}\n >\n <ChevronRight className=\"h-3 w-3\" />\n Show {replyCount} {replyCount === 1 ? 'reply' : 'replies'}\n </button>\n )}\n {hasReplies && !collapsed && (\n <button\n type=\"button\"\n onClick={() => setCollapsed(true)}\n className={cn(\n 'mt-1 inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded',\n )}\n >\n <ChevronDown className=\"h-3 w-3\" />\n Collapse\n </button>\n )}\n </div>\n </div>\n );\n },\n);\nComment.displayName = 'CommentThread.Comment';\n\ntype CommentThreadComponent = typeof CommentThreadInner & {\n Comment: typeof Comment;\n};\n\nexport const CommentThread = CommentThreadInner as CommentThreadComponent;\nCommentThread.Comment = Comment;\n\nexport default CommentThread;\n","import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\n\nexport interface ActivityFeedProps extends HTMLAttributes<HTMLOListElement> {\n /** Compact spacing variant. */\n dense?: boolean;\n children: ReactNode;\n}\n\nexport interface ActivityItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Avatar / icon node rendered in the leading column. */\n avatar?: ReactNode;\n /** The activity sentence (actor + verb + target). */\n children: ReactNode;\n /** Timestamp (relative or absolute). */\n timestamp?: ReactNode;\n /** Optional content preview rendered under the sentence\n * (e.g. quoted comment, file name, image). */\n preview?: ReactNode;\n /** Trailing actions slot (e.g. Reply / Like). */\n actions?: ReactNode;\n /** Suppress the connector line under the leading column. */\n last?: boolean;\n}\n\nconst ActivityFeedInner = forwardRef<HTMLOListElement, ActivityFeedProps>(\n ({ dense, children, className, ...props }, ref) => (\n <ol\n ref={ref}\n className={cn('flex list-none flex-col', dense ? 'gap-3' : 'gap-5', className)}\n data-dense={dense ? '' : undefined}\n {...props}\n >\n {children}\n </ol>\n ),\n);\nActivityFeedInner.displayName = 'ActivityFeed';\n\nexport const ActivityItem = forwardRef<HTMLLIElement, ActivityItemProps>(\n (\n { avatar, children, timestamp, preview, actions, last, className, ...props },\n ref,\n ) => (\n <li\n ref={ref}\n className={cn('relative flex gap-3', className)}\n data-last={last ? '' : undefined}\n {...props}\n >\n <div className=\"relative flex flex-col items-center\">\n <div className=\"z-raised shrink-0\">{avatar}</div>\n {!last && (\n <span\n aria-hidden=\"true\"\n className=\"mt-1 w-px flex-1 bg-border\"\n />\n )}\n </div>\n <div className=\"min-w-0 flex-1 pb-1\">\n <div className=\"text-sm leading-relaxed text-foreground\">\n {children}\n {timestamp && (\n <span className=\"ml-2 text-xs text-muted-foreground\">{timestamp}</span>\n )}\n </div>\n {preview && (\n <div className=\"mt-1.5 rounded-md border border-border bg-muted/40 px-3 py-2 text-sm text-muted-foreground\">\n {preview}\n </div>\n )}\n {actions && (\n <div className=\"mt-1 flex items-center gap-3 text-xs text-muted-foreground\">\n {actions}\n </div>\n )}\n </div>\n </li>\n ),\n);\nActivityItem.displayName = 'ActivityFeed.Item';\n\ntype ActivityFeedComponent = typeof ActivityFeedInner & {\n Item: typeof ActivityItem;\n};\n\nexport const ActivityFeed = ActivityFeedInner as ActivityFeedComponent;\nActivityFeed.Item = ActivityItem;\n\nexport default ActivityFeed;\n"]}
|