@lukeashford/aurelius 2.9.0 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +888 -192
- package/dist/index.d.ts +888 -192
- package/dist/index.js +2236 -355
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2147 -284
- package/dist/index.mjs.map +1 -1
- package/dist/styles/theme.css +20 -2
- package/llms.md +29 -6
- package/package.json +5 -3
- package/scripts/eslint.mjs +10 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/Button.tsx","../src/utils/cx.ts","../src/components/Input.tsx","../src/components/Card.tsx","../src/components/Container.tsx","../src/components/Row.tsx","../src/components/Col.tsx","../src/components/Stack.tsx","../src/components/Divider.tsx","../src/components/Avatar.tsx","../src/components/Badge.tsx","../src/components/Tooltip.tsx","../src/components/Table.tsx","../src/components/List.tsx","../src/components/Label.tsx","../src/components/HelperText.tsx","../src/components/Textarea.tsx","../src/components/Select.tsx","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/Switch.tsx","../src/components/Slider.tsx","../src/components/InputGroup.tsx","../src/components/Alert.tsx","../src/components/Spinner.tsx","../src/components/Skeleton.tsx","../src/components/Progress.tsx","../src/components/Toast.tsx","../src/components/Modal.tsx","../src/components/Drawer.tsx","../src/components/Popover.tsx","../src/components/Dialog.tsx","../src/components/Tabs.tsx","../src/components/Accordion.tsx","../src/components/Menu.tsx","../src/components/Navbar.tsx","../src/components/Breadcrumb.tsx","../src/components/Pagination.tsx","../src/components/Stepper.tsx","../src/components/Message.tsx","../src/components/MarkdownContent.tsx","../src/components/StreamingCursor.tsx","../src/components/ChatHistory.tsx","../src/components/BrandIcon.tsx","../src/components/ColorSwatch.tsx","../src/components/ImageCard.tsx","../src/components/VideoCard.tsx","../src/components/SectionHeading.tsx"],"sourcesContent":["/**\n * Aurelius Design System\n *\n * A cohesive visual language for creative technologists.\n * Combines technical sophistication with artistic sensibility.\n *\n * CSS-first Tailwind v4 design system.\n * Import '@lukeashford/aurelius/styles/base.css' for complete styling.\n */\n\n// React components\nexport * from './components'\n\n// Version\nexport const version = '2.0.0'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type ButtonVariant =\n | 'primary'\n | 'important'\n | 'elevated'\n | 'outlined'\n | 'featured'\n | 'ghost'\n | 'danger'\n\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({variant = 'primary', size = 'md', loading = false, className, disabled, children, ...rest},\n ref) => {\n const isDisabled = disabled || loading\n\n // Base button styles - common to all variants\n const base =\n 'inline-flex items-center justify-center font-semibold tracking-wide ' +\n 'transition-all duration-fast ' +\n 'rounded-none ' +\n 'disabled:opacity-50 disabled:cursor-not-allowed'\n\n // Variant styles\n const variantClasses = {\n primary:\n 'bg-charcoal text-white border border-gold/30 ' +\n 'hover:border-gold hover:shadow-glow hover:text-gold-light ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n important:\n 'bg-gold text-obsidian border border-gold ' +\n 'hover:bg-gold-light hover:text-obsidian ' +\n 'active:bg-gold-bright ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n elevated:\n 'bg-charcoal text-white border-0 shadow-lg ' +\n 'hover:shadow-xl hover:text-gold-light ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n outlined:\n 'bg-transparent text-white border border-ash ' +\n 'hover:border-white hover:text-white ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n featured:\n 'bg-charcoal text-white border border-gold ' +\n 'glow-sm ' +\n 'hover:glow-md hover:text-gold-light ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n ghost:\n 'bg-transparent text-gold border-0 ' +\n 'hover:text-gold-light ' +\n 'active:text-gold-bright ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n danger:\n 'bg-error text-white border-0 ' +\n 'hover:bg-error/90 ' +\n 'active:bg-error/80 ' +\n 'focus-visible:ring-2 focus-visible:ring-error focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n }\n\n // Size styles\n const sizeClasses = {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-4 text-sm',\n lg: 'h-12 px-6 text-base',\n xl: 'h-14 px-8 text-lg',\n }\n\n const variantClass = variantClasses[variant]\n const sizeClass = sizeClasses[size]\n\n return (\n <button\n ref={ref}\n className={cx(base, variantClass, sizeClass, loading && 'opacity-80', className)}\n disabled={isDisabled}\n {...rest}\n >\n {loading && (\n <span\n className=\"mr-2 inline-block h-4 w-4 animate-pulse rounded-full bg-gold\"\n aria-hidden\n />\n )}\n {children}\n </button>\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport default Button\n","import {twMerge} from 'tailwind-merge';\nimport {clsx, type ClassValue} from 'clsx';\n\n/**\n * Concatenates class names and merges Tailwind utility classes correctly.\n * Uses clsx for conditional classes and tailwind-merge to handle overrides.\n */\nexport function cx(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n error?: boolean\n leadingIcon?: React.ReactNode\n trailingIcon?: React.ReactNode\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ error = false, className, leadingIcon, trailingIcon, disabled, ...rest }, ref) => {\n const base =\n 'w-full h-10 px-3 bg-graphite border border-ash rounded-none ' +\n 'text-white placeholder:text-zinc ' +\n 'transition-all duration-fast ' +\n 'focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none ' +\n 'disabled:bg-slate disabled:text-dim disabled:cursor-not-allowed'\n\n const errorCls = error ? 'border-error focus:border-error focus:ring-error' : ''\n\n return (\n <div className={cx('relative', disabled && 'opacity-90')}>\n {leadingIcon && (\n <span className=\"pointer-events-none absolute inset-y-0 left-3 flex items-center text-silver\">\n {leadingIcon}\n </span>\n )}\n <input\n ref={ref}\n className={cx(\n base,\n errorCls,\n leadingIcon ? 'pl-9' : false,\n trailingIcon ? 'pr-9' : false,\n className\n )}\n disabled={disabled}\n {...rest}\n />\n {trailingIcon && (\n <span className=\"pointer-events-none absolute inset-y-0 right-3 flex items-center text-silver\">\n {trailingIcon}\n </span>\n )}\n </div>\n )\n }\n)\n\nInput.displayName = 'Input'\n\nexport default Input\n","import React from 'react'\nimport ReactPlayer from 'react-player'\nimport {Check} from 'lucide-react'\nimport {cx} from '../utils'\n\nexport type CardVariant = 'default' | 'elevated' | 'outlined' | 'ghost' | 'featured'\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: CardVariant\n interactive?: boolean\n selected?: boolean\n noPadding?: boolean\n}\n\nconst VARIANT_STYLES: Record<CardVariant, string> = {\n default: 'bg-charcoal shadow-sm border border-gold/30',\n elevated: 'bg-charcoal shadow-lg border-0',\n outlined: 'bg-charcoal shadow-none border border-ash',\n ghost: 'bg-transparent shadow-none border-0',\n featured: 'bg-charcoal border border-gold glow-sm',\n}\n\nconst CardBase = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n variant = 'default',\n interactive = false,\n selected = false,\n noPadding = false,\n className,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'rounded-none relative',\n !noPadding && 'p-6',\n VARIANT_STYLES[variant],\n interactive &&\n 'transition-all duration-200 hover:border-gold hover:shadow-glow cursor-pointer',\n selected && 'border-gold shadow-glow-md',\n className\n )}\n {...props}\n >\n {children}\n {selected && (\n <div\n className=\"absolute top-3 right-3 flex items-center justify-center h-6 w-6 rounded-full bg-gold text-obsidian\">\n <Check className=\"h-4 w-4\"/>\n </div>\n )}\n </div>\n )\n }\n)\n\nCardBase.displayName = 'Card'\n\n// Card.Header - header section with title and optional actions\nexport interface CardHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode\n subtitle?: React.ReactNode\n action?: React.ReactNode\n}\n\nconst CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({title, subtitle, action, className, children, ...props}, ref) => {\n return (\n <div\n ref={ref}\n className={cx('px-6 py-4 border-b border-ash', className)}\n {...props}\n >\n {(title || subtitle || action) ? (\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h3 className=\"text-lg font-semibold text-white m-0\">{title}</h3>\n )}\n {subtitle && (\n <p className=\"text-sm text-silver mt-1 m-0\">{subtitle}</p>\n )}\n </div>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n ) : (\n children\n )}\n </div>\n )\n }\n)\n\nCardHeader.displayName = 'CardHeader'\n\n// Card.Body - main content area\nexport interface CardBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n}\n\nconst CardBody = React.forwardRef<HTMLDivElement, CardBodyProps>(\n ({className, children, ...props}, ref) => {\n return (\n <div ref={ref} className={cx('px-6 py-4', className)} {...props}>\n {children}\n </div>\n )\n }\n)\n\nCardBody.displayName = 'CardBody'\n\n// Card.Footer - footer section, typically for actions\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: 'start' | 'center' | 'end' | 'between'\n}\n\nconst CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({align = 'end', className, children, ...props}, ref) => {\n const alignClass = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n }[align]\n\n return (\n <div\n ref={ref}\n className={cx(\n 'px-6 py-4 border-t border-ash flex items-center gap-3',\n alignClass,\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nCardFooter.displayName = 'CardFooter'\n\n// Card.Media - image or media section\nexport interface CardMediaProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string\n alt?: string\n aspect?: 'video' | 'square' | 'wide'\n position?: 'top' | 'bottom'\n isVideo?: boolean\n}\n\nconst CardMedia = React.forwardRef<HTMLDivElement, CardMediaProps>(\n ({\n src,\n alt = '',\n aspect = 'video',\n position = 'top',\n isVideo = false,\n className,\n children,\n ...props\n }, ref) => {\n const aspectClass = {\n video: 'aspect-video',\n square: 'aspect-square',\n wide: 'aspect-wide',\n }[aspect]\n\n return (\n <div\n ref={ref}\n className={cx(\n 'overflow-hidden relative',\n aspectClass,\n position === 'top' && 'border-b border-ash',\n position === 'bottom' && 'border-t border-ash',\n className\n )}\n {...props}\n >\n {src ? (\n isVideo ? (\n <ReactPlayer\n src={src}\n width=\"100%\"\n height=\"100%\"\n className=\"absolute top-0 left-0\"\n controls\n />\n ) : (\n <img src={src} alt={alt} className=\"w-full h-full object-cover\"/>\n )\n ) : (\n children\n )}\n </div>\n )\n }\n)\n\nCardMedia.displayName = 'CardMedia'\n\n// Compound component pattern\nexport const Card = Object.assign(CardBase, {\n Header: CardHeader,\n Body: CardBody,\n Footer: CardFooter,\n Media: CardMedia,\n})","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | 'fluid' | 'responsive'\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: ContainerSize\n}\n\nconst SIZE_CLASSES: Record<ContainerSize, string> = {\n sm: 'container-sm',\n md: 'container-md',\n lg: 'container-lg',\n xl: 'container-xl',\n fluid: 'container-fluid',\n responsive: 'container',\n}\n\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ size = 'responsive', className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cx(SIZE_CLASSES[size], className)} {...props}>\n {children}\n </div>\n )\n }\n)\n\nContainer.displayName = 'Container'\n","import React from 'react'\nimport {cx} from '../utils'\n\nexport type RowGutter = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12\nexport type RowJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'\nexport type RowAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline'\n\nexport interface RowProps extends React.HTMLAttributes<HTMLDivElement> {\n gutter?: RowGutter\n gutterX?: RowGutter\n gutterY?: RowGutter\n justify?: RowJustify\n align?: RowAlign\n}\n\nconst JUSTIFY_MAP: Record<RowJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n}\n\nconst ALIGN_MAP: Record<RowAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n}\n\nconst GAP_MAP: Record<RowGutter, string> = {\n 0: 'gap-0',\n 1: 'gap-1',\n 2: 'gap-2',\n 3: 'gap-3',\n 4: 'gap-4',\n 5: 'gap-5',\n 6: 'gap-6',\n 8: 'gap-8',\n 10: 'gap-10',\n 12: 'gap-12',\n}\n\nconst GAP_X_MAP: Record<RowGutter, string> = {\n 0: 'gap-x-0',\n 1: 'gap-x-1',\n 2: 'gap-x-2',\n 3: 'gap-x-3',\n 4: 'gap-x-4',\n 5: 'gap-x-5',\n 6: 'gap-x-6',\n 8: 'gap-x-8',\n 10: 'gap-x-10',\n 12: 'gap-x-12',\n}\n\nconst GAP_Y_MAP: Record<RowGutter, string> = {\n 0: 'gap-y-0',\n 1: 'gap-y-1',\n 2: 'gap-y-2',\n 3: 'gap-y-3',\n 4: 'gap-y-4',\n 5: 'gap-y-5',\n 6: 'gap-y-6',\n 8: 'gap-y-8',\n 10: 'gap-y-10',\n 12: 'gap-y-12',\n}\n\nexport const Row = React.forwardRef<HTMLDivElement, RowProps>(\n ({gutter = 4, gutterX, gutterY, justify, align, className, children, ...props}, ref) => {\n // Directional gutters take precedence over uniform gutter\n const gapClass = gutterX === undefined && gutterY === undefined ? GAP_MAP[gutter] : ''\n const gapXClass = gutterX !== undefined ? GAP_X_MAP[gutterX] : ''\n const gapYClass = gutterY !== undefined ? GAP_Y_MAP[gutterY] : ''\n\n return (\n <div\n ref={ref}\n className={cx(\n 'row',\n gapClass,\n gapXClass,\n gapYClass,\n justify && JUSTIFY_MAP[justify],\n align && ALIGN_MAP[align],\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nRow.displayName = 'Row'\n","import React from 'react'\nimport {cx} from '../utils'\n\nexport type ColSpan = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'auto' | 'full'\nexport type ColOffset = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11\nexport type ColOrder = 'first' | 'last' | 'none' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12\n\nexport interface ResponsiveValue<T> {\n base?: T\n sm?: T\n md?: T\n lg?: T\n xl?: T\n '2xl'?: T\n}\n\nexport interface ColProps extends React.HTMLAttributes<HTMLDivElement> {\n span?: ColSpan | ResponsiveValue<ColSpan>\n offset?: ColOffset | ResponsiveValue<ColOffset>\n order?: ColOrder | ResponsiveValue<ColOrder>\n}\n\ntype Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nconst SPAN_CLASS_MAP: Record<Breakpoint, Record<ColSpan, string>> = {\n base: {\n 1: 'col-span-1',\n 2: 'col-span-2',\n 3: 'col-span-3',\n 4: 'col-span-4',\n 5: 'col-span-5',\n 6: 'col-span-6',\n 7: 'col-span-7',\n 8: 'col-span-8',\n 9: 'col-span-9',\n 10: 'col-span-10',\n 11: 'col-span-11',\n 12: 'col-span-12',\n auto: 'col-auto',\n full: 'col-span-full',\n },\n sm: {\n 1: 'sm:col-span-1',\n 2: 'sm:col-span-2',\n 3: 'sm:col-span-3',\n 4: 'sm:col-span-4',\n 5: 'sm:col-span-5',\n 6: 'sm:col-span-6',\n 7: 'sm:col-span-7',\n 8: 'sm:col-span-8',\n 9: 'sm:col-span-9',\n 10: 'sm:col-span-10',\n 11: 'sm:col-span-11',\n 12: 'sm:col-span-12',\n auto: 'sm:col-auto',\n full: 'sm:col-span-full',\n },\n md: {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n 5: 'md:col-span-5',\n 6: 'md:col-span-6',\n 7: 'md:col-span-7',\n 8: 'md:col-span-8',\n 9: 'md:col-span-9',\n 10: 'md:col-span-10',\n 11: 'md:col-span-11',\n 12: 'md:col-span-12',\n auto: 'md:col-auto',\n full: 'md:col-span-full',\n },\n lg: {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n 5: 'lg:col-span-5',\n 6: 'lg:col-span-6',\n 7: 'lg:col-span-7',\n 8: 'lg:col-span-8',\n 9: 'lg:col-span-9',\n 10: 'lg:col-span-10',\n 11: 'lg:col-span-11',\n 12: 'lg:col-span-12',\n auto: 'lg:col-auto',\n full: 'lg:col-span-full',\n },\n xl: {\n 1: 'xl:col-span-1',\n 2: 'xl:col-span-2',\n 3: 'xl:col-span-3',\n 4: 'xl:col-span-4',\n 5: 'xl:col-span-5',\n 6: 'xl:col-span-6',\n 7: 'xl:col-span-7',\n 8: 'xl:col-span-8',\n 9: 'xl:col-span-9',\n 10: 'xl:col-span-10',\n 11: 'xl:col-span-11',\n 12: 'xl:col-span-12',\n auto: 'xl:col-auto',\n full: 'xl:col-span-full',\n },\n '2xl': {\n 1: '2xl:col-span-1',\n 2: '2xl:col-span-2',\n 3: '2xl:col-span-3',\n 4: '2xl:col-span-4',\n 5: '2xl:col-span-5',\n 6: '2xl:col-span-6',\n 7: '2xl:col-span-7',\n 8: '2xl:col-span-8',\n 9: '2xl:col-span-9',\n 10: '2xl:col-span-10',\n 11: '2xl:col-span-11',\n 12: '2xl:col-span-12',\n auto: '2xl:col-auto',\n full: '2xl:col-span-full',\n },\n}\n\nconst OFFSET_CLASS_MAP: Record<Breakpoint, Record<ColOffset, string>> = {\n base: {\n 0: '',\n 1: 'col-start-2',\n 2: 'col-start-3',\n 3: 'col-start-4',\n 4: 'col-start-5',\n 5: 'col-start-6',\n 6: 'col-start-7',\n 7: 'col-start-8',\n 8: 'col-start-9',\n 9: 'col-start-10',\n 10: 'col-start-11',\n 11: 'col-start-12',\n },\n sm: {\n 0: '',\n 1: 'sm:col-start-2',\n 2: 'sm:col-start-3',\n 3: 'sm:col-start-4',\n 4: 'sm:col-start-5',\n 5: 'sm:col-start-6',\n 6: 'sm:col-start-7',\n 7: 'sm:col-start-8',\n 8: 'sm:col-start-9',\n 9: 'sm:col-start-10',\n 10: 'sm:col-start-11',\n 11: 'sm:col-start-12',\n },\n md: {\n 0: '',\n 1: 'md:col-start-2',\n 2: 'md:col-start-3',\n 3: 'md:col-start-4',\n 4: 'md:col-start-5',\n 5: 'md:col-start-6',\n 6: 'md:col-start-7',\n 7: 'md:col-start-8',\n 8: 'md:col-start-9',\n 9: 'md:col-start-10',\n 10: 'md:col-start-11',\n 11: 'md:col-start-12',\n },\n lg: {\n 0: '',\n 1: 'lg:col-start-2',\n 2: 'lg:col-start-3',\n 3: 'lg:col-start-4',\n 4: 'lg:col-start-5',\n 5: 'lg:col-start-6',\n 6: 'lg:col-start-7',\n 7: 'lg:col-start-8',\n 8: 'lg:col-start-9',\n 9: 'lg:col-start-10',\n 10: 'lg:col-start-11',\n 11: 'lg:col-start-12',\n },\n xl: {\n 0: '',\n 1: 'xl:col-start-2',\n 2: 'xl:col-start-3',\n 3: 'xl:col-start-4',\n 4: 'xl:col-start-5',\n 5: 'xl:col-start-6',\n 6: 'xl:col-start-7',\n 7: 'xl:col-start-8',\n 8: 'xl:col-start-9',\n 9: 'xl:col-start-10',\n 10: 'xl:col-start-11',\n 11: 'xl:col-start-12',\n },\n '2xl': {\n 0: '',\n 1: '2xl:col-start-2',\n 2: '2xl:col-start-3',\n 3: '2xl:col-start-4',\n 4: '2xl:col-start-5',\n 5: '2xl:col-start-6',\n 6: '2xl:col-start-7',\n 7: '2xl:col-start-8',\n 8: '2xl:col-start-9',\n 9: '2xl:col-start-10',\n 10: '2xl:col-start-11',\n 11: '2xl:col-start-12',\n },\n}\n\nconst ORDER_CLASS_MAP: Record<Breakpoint, Record<ColOrder, string>> = {\n base: {\n first: 'order-first',\n last: 'order-last',\n none: 'order-none',\n 1: 'order-1',\n 2: 'order-2',\n 3: 'order-3',\n 4: 'order-4',\n 5: 'order-5',\n 6: 'order-6',\n 7: 'order-7',\n 8: 'order-8',\n 9: 'order-9',\n 10: 'order-10',\n 11: 'order-11',\n 12: 'order-12',\n },\n sm: {\n first: 'sm:order-first',\n last: 'sm:order-last',\n none: 'sm:order-none',\n 1: 'sm:order-1',\n 2: 'sm:order-2',\n 3: 'sm:order-3',\n 4: 'sm:order-4',\n 5: 'sm:order-5',\n 6: 'sm:order-6',\n 7: 'sm:order-7',\n 8: 'sm:order-8',\n 9: 'sm:order-9',\n 10: 'sm:order-10',\n 11: 'sm:order-11',\n 12: 'sm:order-12',\n },\n md: {\n first: 'md:order-first',\n last: 'md:order-last',\n none: 'md:order-none',\n 1: 'md:order-1',\n 2: 'md:order-2',\n 3: 'md:order-3',\n 4: 'md:order-4',\n 5: 'md:order-5',\n 6: 'md:order-6',\n 7: 'md:order-7',\n 8: 'md:order-8',\n 9: 'md:order-9',\n 10: 'md:order-10',\n 11: 'md:order-11',\n 12: 'md:order-12',\n },\n lg: {\n first: 'lg:order-first',\n last: 'lg:order-last',\n none: 'lg:order-none',\n 1: 'lg:order-1',\n 2: 'lg:order-2',\n 3: 'lg:order-3',\n 4: 'lg:order-4',\n 5: 'lg:order-5',\n 6: 'lg:order-6',\n 7: 'lg:order-7',\n 8: 'lg:order-8',\n 9: 'lg:order-9',\n 10: 'lg:order-10',\n 11: 'lg:order-11',\n 12: 'lg:order-12',\n },\n xl: {\n first: 'xl:order-first',\n last: 'xl:order-last',\n none: 'xl:order-none',\n 1: 'xl:order-1',\n 2: 'xl:order-2',\n 3: 'xl:order-3',\n 4: 'xl:order-4',\n 5: 'xl:order-5',\n 6: 'xl:order-6',\n 7: 'xl:order-7',\n 8: 'xl:order-8',\n 9: 'xl:order-9',\n 10: 'xl:order-10',\n 11: 'xl:order-11',\n 12: 'xl:order-12',\n },\n '2xl': {\n first: '2xl:order-first',\n last: '2xl:order-last',\n none: '2xl:order-none',\n 1: '2xl:order-1',\n 2: '2xl:order-2',\n 3: '2xl:order-3',\n 4: '2xl:order-4',\n 5: '2xl:order-5',\n 6: '2xl:order-6',\n 7: '2xl:order-7',\n 8: '2xl:order-8',\n 9: '2xl:order-9',\n 10: '2xl:order-10',\n 11: '2xl:order-11',\n 12: '2xl:order-12',\n },\n}\n\nfunction isResponsiveValue<T>(value: T | ResponsiveValue<T>): value is ResponsiveValue<T> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction buildResponsiveClasses<T extends string | number>(\n value: T | ResponsiveValue<T> | undefined,\n classMap: Record<Breakpoint, Record<T, string>>\n): string[] {\n if (value === undefined) {\n return []\n }\n\n if (!isResponsiveValue(value)) {\n const cls = classMap.base[value]\n return cls ? [cls] : []\n }\n\n const classes: string[] = []\n for (const [breakpoint, val] of Object.entries(value) as [Breakpoint, T][]) {\n if (val !== undefined) {\n const cls = classMap[breakpoint]?.[val]\n if (cls) {\n classes.push(cls)\n }\n }\n }\n return classes\n}\n\nexport const Col = React.forwardRef<HTMLDivElement, ColProps>(\n ({span, offset, order, className, children, ...props}, ref) => {\n const spanClasses = buildResponsiveClasses(span, SPAN_CLASS_MAP)\n const offsetClasses = buildResponsiveClasses(offset, OFFSET_CLASS_MAP)\n const orderClasses = buildResponsiveClasses(order, ORDER_CLASS_MAP)\n\n // Default to full width if no span specified\n const hasSpan = span !== undefined\n const defaultSpan = hasSpan ? '' : 'col-span-12'\n\n return (\n <div\n ref={ref}\n className={cx(\n defaultSpan,\n ...spanClasses,\n ...offsetClasses,\n ...orderClasses,\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nCol.displayName = 'Col'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type StackDirection = 'horizontal' | 'vertical'\nexport type StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline'\nexport type StackJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'\nexport type StackGap = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: StackDirection\n align?: StackAlign\n justify?: StackJustify\n gap?: StackGap\n wrap?: boolean\n as?: 'div' | 'section' | 'article' | 'nav' | 'aside' | 'header' | 'footer' | 'main'\n}\n\nconst ALIGN_MAP: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n}\n\nconst JUSTIFY_MAP: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n}\n\nconst GAP_MAP: Record<StackGap, string> = {\n 0: 'gap-0',\n 1: 'gap-1',\n 2: 'gap-2',\n 3: 'gap-3',\n 4: 'gap-4',\n 5: 'gap-5',\n 6: 'gap-6',\n 8: 'gap-8',\n 10: 'gap-10',\n 12: 'gap-12',\n}\n\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(\n (\n {\n direction = 'vertical',\n align,\n justify,\n gap = 4,\n wrap = false,\n as: Component = 'div',\n className,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <Component\n ref={ref}\n className={cx(\n 'flex',\n direction === 'horizontal' ? 'flex-row' : 'flex-col',\n align && ALIGN_MAP[align],\n justify && JUSTIFY_MAP[justify],\n GAP_MAP[gap],\n wrap && 'flex-wrap',\n className\n )}\n {...props}\n >\n {children}\n </Component>\n )\n }\n)\n\nStack.displayName = 'Stack'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\nexport type DividerVariant = 'solid' | 'dashed' | 'dotted'\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLHRElement> {\n orientation?: DividerOrientation\n variant?: DividerVariant\n label?: React.ReactNode\n color?: 'default' | 'gold' | 'muted'\n}\n\nconst COLOR_MAP: Record<string, string> = {\n default: 'border-ash',\n gold: 'border-gold/50',\n muted: 'border-slate',\n}\n\nconst VARIANT_MAP: Record<DividerVariant, string> = {\n solid: 'border-solid',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n}\n\nexport const Divider = React.forwardRef<HTMLHRElement, DividerProps>(\n (\n {\n orientation = 'horizontal',\n variant = 'solid',\n label,\n color = 'default',\n className,\n ...props\n },\n ref\n ) => {\n const isHorizontal = orientation === 'horizontal'\n\n if (label && isHorizontal) {\n return (\n <div\n className={cx('flex items-center gap-4', className)}\n role=\"separator\"\n aria-orientation={orientation}\n >\n <div\n className={cx(\n 'flex-1 border-t',\n VARIANT_MAP[variant],\n COLOR_MAP[color]\n )}\n />\n <span className=\"text-sm text-silver shrink-0\">{label}</span>\n <div\n className={cx(\n 'flex-1 border-t',\n VARIANT_MAP[variant],\n COLOR_MAP[color]\n )}\n />\n </div>\n )\n }\n\n return (\n <hr\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n className={cx(\n isHorizontal ? 'border-t w-full' : 'border-l h-full',\n VARIANT_MAP[variant],\n COLOR_MAP[color],\n 'border-0',\n isHorizontal ? 'border-t' : 'border-l',\n className\n )}\n {...props}\n />\n )\n }\n)\n\nDivider.displayName = 'Divider'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\nexport type AvatarStatus = 'online' | 'offline' | 'busy'\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string\n alt?: string\n name?: string\n size?: AvatarSize\n status?: AvatarStatus\n}\n\nconst sizeMap: Record<AvatarSize, string> = {\n xs: 'h-6 w-6 text-[10px]',\n sm: 'h-8 w-8 text-[11px]',\n md: 'h-10 w-10 text-xs',\n lg: 'h-12 w-12 text-sm',\n xl: 'h-16 w-16 text-base',\n '2xl': 'h-24 w-24 text-lg',\n}\n\nfunction initials(name?: string) {\n if (!name) return ''\n const parts = name.trim().split(/\\s+/)\n return parts.slice(0, 2).map(p => p[0]!.toUpperCase()).join('')\n}\n\nexport const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n ({ src, alt = '', name, size = 'md', status, className, ...rest }, ref) => {\n const statusColor =\n status === 'online' ? 'bg-success' : status === 'busy' ? 'bg-warning' : 'bg-zinc'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'relative inline-flex items-center justify-center rounded-full border-2 border-ash bg-slate text-silver font-semibold select-none overflow-hidden',\n sizeMap[size],\n className\n )}\n {...rest}\n >\n {src ? (\n <img src={src} alt={alt || name || 'Avatar'} className=\"h-full w-full object-cover\" />\n ) : (\n <span aria-hidden>{initials(name) || '·'}</span>\n )}\n {status && (\n <span\n className={cx(\n 'absolute bottom-0 right-0 rounded-full ring-2 ring-charcoal',\n // 25% of avatar size\n size === 'xs' ? 'h-1.5 w-1.5' :\n size === 'sm' ? 'h-2 w-2' :\n size === 'md' ? 'h-2.5 w-2.5' :\n size === 'lg' ? 'h-3 w-3' :\n size === 'xl' ? 'h-4 w-4' : 'h-5 w-5',\n statusColor\n )}\n />\n )}\n </div>\n )\n }\n)\n\nAvatar.displayName = 'Avatar'\n\nexport default Avatar\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type BadgeVariant = 'default' | 'gold' | 'success' | 'error' | 'warning' | 'info'\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant\n}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ variant = 'default', className, ...rest }, ref) => {\n // Base badge styles\n const base = 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium border'\n\n // Variant styles\n const variantClasses = {\n default: 'bg-slate text-silver border-slate',\n gold: 'bg-gold/20 text-gold border-gold/30',\n success: 'bg-success/20 text-success border-success/30',\n error: 'bg-error/20 text-error border-error/30',\n warning: 'bg-warning/20 text-warning border-warning/30',\n info: 'bg-info/20 text-info border-info/30',\n }\n\n const variantClass = variantClasses[variant]\n\n return <span ref={ref} className={cx(base, variantClass, className)} {...rest} />\n }\n)\n\nBadge.displayName = 'Badge'\n\nexport default Badge\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type TooltipSide = 'top' | 'right' | 'bottom' | 'left'\n\nexport interface TooltipProps {\n content: React.ReactNode\n children: React.ReactElement\n open?: boolean\n side?: TooltipSide\n}\n\n// Simple, controlled tooltip. Consumer handles open state.\nexport const Tooltip: React.FC<TooltipProps> = ({ content, children, open = false, side = 'top' }) => {\n return (\n <span className=\"relative inline-block\">\n {children}\n <span\n role=\"tooltip\"\n className={cx(\n 'pointer-events-none absolute z-50 whitespace-nowrap rounded-md border border-ash bg-graphite px-3 py-1.5 text-sm text-white shadow-lg transition-opacity duration-200 ease-out',\n open ? 'opacity-100' : 'opacity-0',\n side === 'top' && 'left-1/2 -translate-x-1/2 -top-2 -translate-y-full',\n side === 'bottom' && 'left-1/2 -translate-x-1/2 -bottom-2 translate-y-full',\n side === 'left' && 'top-1/2 -translate-y-1/2 -left-2 -translate-x-full',\n side === 'right' && 'top-1/2 -translate-y-1/2 -right-2 translate-x-full'\n )}\n >\n {content}\n </span>\n </span>\n )\n}\n\nexport default Tooltip\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\n// Table container\nexport interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {\n responsive?: boolean\n}\n\nexport const Table = React.forwardRef<HTMLTableElement, TableProps>(\n ({ responsive = true, className, children, ...props }, ref) => {\n const table = (\n <table\n ref={ref}\n className={cx('w-full text-sm', className)}\n {...props}\n >\n {children}\n </table>\n )\n\n if (responsive) {\n return <div className=\"w-full overflow-x-auto\">{table}</div>\n }\n\n return table\n }\n)\n\nTable.displayName = 'Table'\n\n// Table header\nexport interface TableHeaderProps extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nexport const TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ className, children, ...props }, ref) => (\n <thead\n ref={ref}\n className={cx('bg-graphite', className)}\n {...props}\n >\n {children}\n </thead>\n )\n)\n\nTableHeader.displayName = 'TableHeader'\n\n// Table body\nexport interface TableBodyProps extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nexport const TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ className, children, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cx('divide-y divide-ash', className)}\n {...props}\n >\n {children}\n </tbody>\n )\n)\n\nTableBody.displayName = 'TableBody'\n\n// Table footer\nexport interface TableFooterProps extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nexport const TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(\n ({ className, children, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cx('bg-graphite font-medium', className)}\n {...props}\n >\n {children}\n </tfoot>\n )\n)\n\nTableFooter.displayName = 'TableFooter'\n\n// Table row\nexport interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\n hoverable?: boolean\n selected?: boolean\n}\n\nexport const TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ hoverable = true, selected = false, className, children, ...props }, ref) => (\n <tr\n ref={ref}\n className={cx(\n 'transition-colors duration-fast',\n hoverable && 'hover:bg-graphite/50',\n selected && 'bg-gold/10',\n className\n )}\n {...props}\n >\n {children}\n </tr>\n )\n)\n\nTableRow.displayName = 'TableRow'\n\n// Table header cell\nexport interface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n sortable?: boolean\n sortDirection?: 'asc' | 'desc' | null\n}\n\nexport const TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ sortable, sortDirection, className, children, ...props }, ref) => (\n <th\n ref={ref}\n className={cx(\n 'px-4 py-3 text-left font-semibold text-silver',\n sortable && 'cursor-pointer hover:text-white select-none',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {children}\n {sortable && sortDirection && (\n <span className=\"text-gold\">\n {sortDirection === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </div>\n </th>\n )\n)\n\nTableHead.displayName = 'TableHead'\n\n// Table data cell\nexport interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {}\n\nexport const TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, children, ...props }, ref) => (\n <td\n ref={ref}\n className={cx('px-4 py-3 text-white', className)}\n {...props}\n >\n {children}\n </td>\n )\n)\n\nTableCell.displayName = 'TableCell'\n\n// Table caption\nexport interface TableCaptionProps extends React.HTMLAttributes<HTMLTableCaptionElement> {}\n\nexport const TableCaption = React.forwardRef<HTMLTableCaptionElement, TableCaptionProps>(\n ({ className, children, ...props }, ref) => (\n <caption\n ref={ref}\n className={cx('mt-4 text-sm text-silver', className)}\n {...props}\n >\n {children}\n </caption>\n )\n)\n\nTableCaption.displayName = 'TableCaption'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\n// List container\nexport interface ListProps extends React.HTMLAttributes<HTMLUListElement> {\n variant?: 'default' | 'bordered' | 'divided'\n ordered?: boolean\n}\n\nexport const List = React.forwardRef<HTMLUListElement, ListProps>(\n ({ variant = 'default', ordered = false, className, children, ...props }, ref) => {\n const Component = ordered ? 'ol' : 'ul'\n\n return (\n <Component\n ref={ref as any}\n className={cx(\n 'list-none m-0 p-0',\n variant === 'bordered' && 'border border-ash',\n variant === 'divided' && 'divide-y divide-ash',\n className\n )}\n {...props}\n >\n {children}\n </Component>\n )\n }\n)\n\nList.displayName = 'List'\n\n// ListItem\nexport interface ListItemProps extends React.LiHTMLAttributes<HTMLLIElement> {\n leading?: React.ReactNode\n trailing?: React.ReactNode\n interactive?: boolean\n selected?: boolean\n disabled?: boolean\n}\n\nexport const ListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n (\n {\n leading,\n trailing,\n interactive = false,\n selected = false,\n disabled = false,\n className,\n children,\n onClick,\n ...props\n },\n ref\n ) => {\n const handleClick = (e: React.MouseEvent<HTMLLIElement>) => {\n if (disabled) return\n onClick?.(e)\n }\n\n return (\n <li\n ref={ref}\n onClick={handleClick}\n className={cx(\n 'flex items-center gap-3 px-4 py-3',\n interactive && 'cursor-pointer transition-colors duration-fast',\n interactive && !disabled && 'hover:bg-graphite',\n selected && 'bg-gold/10',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n {...props}\n >\n {leading && <div className=\"shrink-0\">{leading}</div>}\n <div className=\"flex-1 min-w-0\">{children}</div>\n {trailing && <div className=\"shrink-0\">{trailing}</div>}\n </li>\n )\n }\n)\n\nListItem.displayName = 'ListItem'\n\n// ListItemText - for structured text content\nexport interface ListItemTextProps extends React.HTMLAttributes<HTMLDivElement> {\n primary: React.ReactNode\n secondary?: React.ReactNode\n}\n\nexport const ListItemText = React.forwardRef<HTMLDivElement, ListItemTextProps>(\n ({ primary, secondary, className, ...props }, ref) => {\n return (\n <div ref={ref} className={cx('flex flex-col', className)} {...props}>\n <span className=\"text-sm font-medium text-white\">{primary}</span>\n {secondary && (\n <span className=\"text-xs text-silver mt-0.5\">{secondary}</span>\n )}\n </div>\n )\n }\n)\n\nListItemText.displayName = 'ListItemText'\n\n// ListSubheader - section header within a list\nexport interface ListSubheaderProps extends React.HTMLAttributes<HTMLLIElement> {}\n\nexport const ListSubheader = React.forwardRef<HTMLLIElement, ListSubheaderProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={cx(\n 'px-4 py-2 text-xs font-semibold text-gold uppercase tracking-wider bg-graphite',\n className\n )}\n {...props}\n >\n {children}\n </li>\n )\n }\n)\n\nListSubheader.displayName = 'ListSubheader'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, required, children, ...rest }, ref) => {\n return (\n <label\n ref={ref}\n className={cx('block text-sm font-medium text-silver mb-1.5', className)}\n {...rest}\n >\n {children}\n {required && <span className=\"text-error ml-1\">*</span>}\n </label>\n )\n }\n)\n\nLabel.displayName = 'Label'\n\nexport default Label\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface HelperTextProps extends React.HTMLAttributes<HTMLParagraphElement> {\n error?: boolean\n}\n\nexport const HelperText = React.forwardRef<HTMLParagraphElement, HelperTextProps>(\n ({ className, error, children, ...rest }, ref) => {\n return (\n <p\n ref={ref}\n className={cx('mt-1.5 text-xs', error ? 'text-error' : 'text-silver', className)}\n {...rest}\n >\n {children}\n </p>\n )\n }\n)\n\nHelperText.displayName = 'HelperText'\n\nexport default HelperText\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ error = false, className, disabled, ...rest }, ref) => {\n // Base textarea styles\n const base =\n 'w-full px-3 py-2 bg-graphite border border-ash rounded-none ' +\n 'text-white placeholder:text-zinc min-h-[80px] ' +\n 'transition-all duration-fast ' +\n 'focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none ' +\n 'disabled:bg-slate disabled:text-dim disabled:cursor-not-allowed'\n\n // Error styles\n const errorCls = error ? 'border-error focus:border-error focus:ring-error' : ''\n\n return (\n <textarea\n ref={ref}\n className={cx(base, errorCls, disabled && 'opacity-90', className)}\n disabled={disabled}\n {...rest}\n />\n )\n }\n)\n\nTextarea.displayName = 'Textarea'\n\nexport default Textarea\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface SelectOption {\n label: string\n value: string | number\n}\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n error?: boolean\n options?: SelectOption[]\n}\n\nconst selectBgImage = \"url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23C9A227' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\\\")\"\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ error = false, className, disabled, options, children, ...rest }, ref) => {\n return (\n <select\n ref={ref}\n className={cx(\n 'appearance-none bg-graphite border border-ash rounded-none text-white px-3 py-2 pr-8',\n 'focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n error && 'border-error focus:border-error focus:ring-error',\n className\n )}\n style={{\n backgroundImage: selectBgImage,\n backgroundPosition: 'right 0.5rem center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '1.5em 1.5em',\n }}\n disabled={disabled}\n {...rest}\n >\n {options\n ? options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))\n : children}\n </select>\n )\n }\n)\n\nSelect.displayName = 'Select'\n\nexport default Select\n","import React, { useCallback } from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string\n}\n\nconst checkmarkSvg = \"url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='%231A1A1A' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\\\")\"\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, id, ...rest }, ref) => {\n const inputId = id || rest.name || Math.random().toString(36).substr(2, 9)\n\n const setRef = useCallback((node: HTMLInputElement | null) => {\n if (node) {\n // Set initial background image based on checked state\n if (node.checked) {\n node.style.backgroundImage = checkmarkSvg\n }\n }\n // Forward ref\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }, [ref])\n\n return (\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id={inputId}\n ref={setRef}\n className={cx(\n 'appearance-none h-4 w-4 border border-ash rounded-sm bg-graphite',\n 'checked:bg-gold checked:border-gold',\n 'focus:ring-1 focus:ring-gold focus:ring-offset-1 focus:ring-offset-obsidian',\n 'transition duration-200 ease-in-out cursor-pointer',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n className\n )}\n style={{\n backgroundPosition: 'center',\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }}\n onChange={(e) => {\n const input = e.currentTarget\n if (input.checked) {\n input.style.backgroundImage = checkmarkSvg\n } else {\n input.style.backgroundImage = 'none'\n }\n rest.onChange?.(e)\n }}\n {...rest}\n />\n {label && (\n <label htmlFor={inputId} className=\"ml-2 text-sm text-silver cursor-pointer select-none\">\n {label}\n </label>\n )}\n </div>\n )\n }\n)\n\nCheckbox.displayName = 'Checkbox'\n\nexport default Checkbox\n","import React, { useCallback } from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string\n}\n\nconst radioDotSvg = \"url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='%231A1A1A' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\\\")\"\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n ({ className, label, id, ...rest }, ref) => {\n const inputId = id || rest.name || Math.random().toString(36).substr(2, 9)\n\n const setRef = useCallback((node: HTMLInputElement | null) => {\n if (node) {\n // Set initial background image based on checked state\n if (node.checked) {\n node.style.backgroundImage = radioDotSvg\n }\n }\n // Forward ref\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }, [ref])\n\n return (\n <div className=\"flex items-center\">\n <input\n type=\"radio\"\n id={inputId}\n ref={setRef}\n className={cx(\n 'appearance-none h-4 w-4 border border-ash rounded-full bg-graphite',\n 'checked:bg-gold checked:border-gold',\n 'focus:ring-1 focus:ring-gold focus:ring-offset-1 focus:ring-offset-obsidian',\n 'transition duration-200 ease-in-out cursor-pointer',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n className\n )}\n style={{\n backgroundPosition: 'center',\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }}\n onChange={(e) => {\n const input = e.currentTarget\n if (input.checked) {\n input.style.backgroundImage = radioDotSvg\n // Clear other radios in the same group\n if (input.name) {\n const radios = document.querySelectorAll<HTMLInputElement>(`input[type=\"radio\"][name=\"${input.name}\"]`)\n radios.forEach((radio) => {\n if (radio !== input) {\n radio.style.backgroundImage = 'none'\n }\n })\n }\n } else {\n input.style.backgroundImage = 'none'\n }\n rest.onChange?.(e)\n }}\n {...rest}\n />\n {label && (\n <label htmlFor={inputId} className=\"ml-2 text-sm text-silver cursor-pointer select-none\">\n {label}\n </label>\n )}\n </div>\n )\n }\n)\n\nRadio.displayName = 'Radio'\n\nexport default Radio\n","import React, { useCallback, useRef, useState } from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n label?: string\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ checked: controlledChecked, defaultChecked = false, onCheckedChange, disabled, className, label, ...rest }, ref) => {\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isControlled = controlledChecked !== undefined\n const checked = isControlled ? controlledChecked : internalChecked\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const setRefs = useCallback(\n (node: HTMLButtonElement | null) => {\n buttonRef.current = node\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n },\n [ref]\n )\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return\n const newChecked = !checked\n if (!isControlled) {\n setInternalChecked(newChecked)\n }\n onCheckedChange?.(newChecked)\n rest.onClick?.(e)\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-state={checked ? 'checked' : 'unchecked'}\n disabled={disabled}\n ref={setRefs}\n onClick={handleClick}\n className={cx(\n 'relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent',\n 'transition-colors duration-200 ease-in-out',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n checked ? 'bg-gold' : 'bg-charcoal',\n className\n )}\n {...rest}\n >\n <span\n className={cx(\n 'pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0',\n 'transition duration-200 ease-in-out',\n checked ? 'translate-x-5' : 'translate-x-0'\n )}\n />\n </button>\n {label && (\n <span\n className=\"text-sm text-silver cursor-pointer\"\n onClick={() => {\n if (disabled) return\n buttonRef.current?.click()\n }}\n >\n {label}\n </span>\n )}\n </div>\n )\n }\n)\n\nSwitch.displayName = 'Switch'\n\nexport default Switch\n","import React, { useState, useRef, useCallback } from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface SliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: number\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n onChange?: (value: number) => void\n onChangeEnd?: (value: number) => void\n disabled?: boolean\n showTooltip?: boolean\n formatValue?: (value: number) => string\n size?: 'sm' | 'md' | 'lg'\n}\n\nconst SIZE_TRACK: Record<string, string> = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n}\n\nconst SIZE_THUMB: Record<string, string> = {\n sm: 'h-3 w-3',\n md: 'h-4 w-4',\n lg: 'h-5 w-5',\n}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n value: controlledValue,\n defaultValue = 0,\n min = 0,\n max = 100,\n step = 1,\n onChange,\n onChangeEnd,\n disabled = false,\n showTooltip = false,\n formatValue = (v) => String(v),\n size = 'md',\n className,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [isDragging, setIsDragging] = useState(false)\n const trackRef = useRef<HTMLDivElement>(null)\n\n const isControlled = controlledValue !== undefined\n const value = isControlled ? controlledValue : internalValue\n\n const percentage = ((value - min) / (max - min)) * 100\n\n const updateValue = useCallback(\n (clientX: number) => {\n if (!trackRef.current || disabled) return\n\n const rect = trackRef.current.getBoundingClientRect()\n const percent = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n const rawValue = min + percent * (max - min)\n const steppedValue = Math.round(rawValue / step) * step\n const clampedValue = Math.max(min, Math.min(max, steppedValue))\n\n if (!isControlled) {\n setInternalValue(clampedValue)\n }\n onChange?.(clampedValue)\n },\n [min, max, step, disabled, isControlled, onChange]\n )\n\n const handleMouseDown = (e: React.MouseEvent) => {\n if (disabled) return\n setIsDragging(true)\n updateValue(e.clientX)\n\n const handleMouseMove = (e: MouseEvent) => {\n updateValue(e.clientX)\n }\n\n const handleMouseUp = (e: MouseEvent) => {\n setIsDragging(false)\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n\n if (trackRef.current) {\n const rect = trackRef.current.getBoundingClientRect()\n const percent = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n const rawValue = min + percent * (max - min)\n const steppedValue = Math.round(rawValue / step) * step\n const clampedValue = Math.max(min, Math.min(max, steppedValue))\n onChangeEnd?.(clampedValue)\n }\n }\n\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return\n\n let newValue = value\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = Math.min(max, value + step)\n break\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = Math.max(min, value - step)\n break\n case 'Home':\n newValue = min\n break\n case 'End':\n newValue = max\n break\n default:\n return\n }\n\n e.preventDefault()\n if (!isControlled) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n onChangeEnd?.(newValue)\n }\n\n return (\n <div\n ref={ref}\n className={cx('relative w-full py-2', disabled && 'opacity-50', className)}\n {...props}\n >\n <div\n ref={trackRef}\n className={cx(\n 'relative w-full bg-charcoal border border-ash cursor-pointer',\n SIZE_TRACK[size]\n )}\n onMouseDown={handleMouseDown}\n >\n {/* Filled track */}\n <div\n className={cx('absolute inset-y-0 left-0 bg-gold', SIZE_TRACK[size])}\n style={{ width: `${percentage}%` }}\n />\n\n {/* Thumb */}\n <div\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled}\n onKeyDown={handleKeyDown}\n className={cx(\n 'absolute top-1/2 -translate-y-1/2 -translate-x-1/2',\n 'bg-gold border-2 border-gold-light rounded-full',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian',\n 'transition-transform duration-fast',\n isDragging && 'scale-110',\n !disabled && 'cursor-grab active:cursor-grabbing',\n SIZE_THUMB[size]\n )}\n style={{ left: `${percentage}%` }}\n >\n {/* Tooltip */}\n {showTooltip && isDragging && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-graphite border border-ash text-xs text-white whitespace-nowrap\">\n {formatValue(value)}\n </div>\n )}\n </div>\n </div>\n </div>\n )\n }\n)\n\nSlider.displayName = 'Slider'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\n// InputGroup container\nexport interface InputGroupProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx('flex', className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputGroup.displayName = 'InputGroup'\n\n// InputLeftAddon - static text/icon on the left\nexport interface InputAddonProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const InputLeftAddon = React.forwardRef<HTMLDivElement, InputAddonProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center px-3 bg-slate border border-r-0 border-ash',\n 'text-sm text-silver whitespace-nowrap',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputLeftAddon.displayName = 'InputLeftAddon'\n\n// InputRightAddon - static text/icon on the right\nexport const InputRightAddon = React.forwardRef<HTMLDivElement, InputAddonProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center px-3 bg-slate border border-l-0 border-ash',\n 'text-sm text-silver whitespace-nowrap',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputRightAddon.displayName = 'InputRightAddon'\n\n// InputLeftElement - overlaid element on the left (like an icon inside the input)\nexport interface InputElementProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const InputLeftElement = React.forwardRef<HTMLDivElement, InputElementProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'absolute left-0 inset-y-0 flex items-center pl-3',\n 'pointer-events-none text-silver',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputLeftElement.displayName = 'InputLeftElement'\n\n// InputRightElement - overlaid element on the right (like a button inside the input)\nexport const InputRightElement = React.forwardRef<HTMLDivElement, InputElementProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'absolute right-0 inset-y-0 flex items-center pr-3',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputRightElement.displayName = 'InputRightElement'\n\n// InputWrapper - for relative positioning when using left/right elements\nexport interface InputWrapperProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const InputWrapper = React.forwardRef<HTMLDivElement, InputWrapperProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx('relative flex-1', className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputWrapper.displayName = 'InputWrapper'\n","import React from 'react'\nimport { Info, CheckCircle, AlertTriangle, XCircle } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant\n title?: string\n}\n\nconst icons = {\n info: Info,\n success: CheckCircle,\n warning: AlertTriangle,\n error: XCircle,\n}\n\nconst variantStyles = {\n info: 'bg-info/10 border-info text-info',\n success: 'bg-success/10 border-success text-success',\n warning: 'bg-warning/10 border-warning text-warning',\n error: 'bg-error/10 border-error text-error',\n}\n\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ variant = 'info', title, children, className, ...rest }, ref) => {\n const Icon = icons[variant]\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cx(\n 'relative w-full p-4 rounded-none border border-l-4 flex gap-3',\n variantStyles[variant],\n className\n )}\n {...rest}\n >\n <Icon className=\"h-5 w-5 shrink-0\" />\n <div className=\"flex-1\">\n {title && <h5 className=\"mb-1 font-medium leading-none tracking-tight text-current\">{title}</h5>}\n <div className=\"text-sm opacity-90\">{children}</div>\n </div>\n </div>\n )\n }\n)\n\nAlert.displayName = 'Alert'\n\nexport default Alert\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg'\n\nexport interface SpinnerProps extends React.SVGAttributes<SVGElement> {\n size?: SpinnerSize\n}\n\nexport const Spinner = ({ className, size = 'md', ...rest }: SpinnerProps) => {\n const sizeClass =\n size === 'sm' ? 'h-4 w-4' : size === 'lg' ? 'h-8 w-8' : 'h-6 w-6'\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cx('animate-spin text-gold', sizeClass, className)}\n {...rest}\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n )\n}\n\nSpinner.displayName = 'Spinner'\n\nexport default Spinner\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cx('animate-pulse bg-ash rounded-sm', className)}\n {...rest}\n />\n )\n }\n)\n\nSkeleton.displayName = 'Skeleton'\n\nexport default Skeleton\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type ProgressSize = 'sm' | 'md' | 'lg'\nexport type ProgressVariant = 'default' | 'success' | 'warning' | 'error'\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: number\n max?: number\n size?: ProgressSize\n variant?: ProgressVariant\n showValue?: boolean\n formatValue?: (value: number, max: number) => string\n indeterminate?: boolean\n}\n\nconst SIZE_MAP: Record<ProgressSize, string> = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n}\n\nconst VARIANT_MAP: Record<ProgressVariant, string> = {\n default: 'bg-gold',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n}\n\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n value = 0,\n max = 100,\n size = 'md',\n variant = 'default',\n showValue = false,\n formatValue,\n indeterminate = false,\n className,\n ...props\n },\n ref\n ) => {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100))\n const displayValue = formatValue\n ? formatValue(value, max)\n : `${Math.round(percentage)}%`\n\n return (\n <div ref={ref} className={cx('w-full', className)} {...props}>\n {showValue && (\n <div className=\"flex justify-between mb-1\">\n <span className=\"text-sm text-silver\">Progress</span>\n <span className=\"text-sm text-white font-medium\">{displayValue}</span>\n </div>\n )}\n <div\n className={cx(\n 'w-full bg-charcoal border border-ash overflow-hidden rounded-none',\n SIZE_MAP[size]\n )}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n >\n <div\n className={cx(\n 'h-full transition-all duration-300 ease-out',\n VARIANT_MAP[variant],\n indeterminate && 'animate-pulse'\n )}\n style={{\n width: indeterminate ? '100%' : `${percentage}%`,\n }}\n />\n </div>\n </div>\n )\n }\n)\n\nProgress.displayName = 'Progress'\n","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, CheckCircle, AlertCircle, AlertTriangle, Info } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\nexport type ToastVariant = 'default' | 'success' | 'error' | 'warning' | 'info'\nexport type ToastPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center'\n\nexport interface ToastData {\n id: string\n title?: string\n description?: string\n variant?: ToastVariant\n duration?: number\n action?: React.ReactNode\n}\n\ninterface ToastContextValue {\n toasts: ToastData[]\n addToast: (toast: Omit<ToastData, 'id'>) => string\n removeToast: (id: string) => void\n position: ToastPosition\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nexport function useToast() {\n const context = useContext(ToastContext)\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider')\n }\n\n const toast = useCallback(\n (options: Omit<ToastData, 'id'>) => {\n return context.addToast(options)\n },\n [context]\n )\n\n return {\n toast,\n dismiss: context.removeToast,\n }\n}\n\n// ToastProvider - wrap your app with this\nexport interface ToastProviderProps {\n children: React.ReactNode\n position?: ToastPosition\n defaultDuration?: number\n}\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n children,\n position = 'bottom-right',\n defaultDuration = 5000,\n}) => {\n const [toasts, setToasts] = useState<ToastData[]>([])\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n const addToast = useCallback(\n (toast: Omit<ToastData, 'id'>) => {\n const id = Math.random().toString(36).substr(2, 9)\n const newToast: ToastData = {\n ...toast,\n id,\n duration: toast.duration ?? defaultDuration,\n }\n setToasts((prev) => [...prev, newToast])\n return id\n },\n [defaultDuration]\n )\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast, position }}>\n {children}\n {mounted && <ToastViewport />}\n </ToastContext.Provider>\n )\n}\n\nToastProvider.displayName = 'ToastProvider'\n\n// ToastViewport - container for all toasts\nconst ToastViewport: React.FC = () => {\n const context = useContext(ToastContext)\n if (!context) return null\n\n const { toasts, position } = context\n\n const positionClasses: Record<ToastPosition, string> = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n }\n\n return createPortal(\n <div\n className={cx(\n 'fixed z-50 flex flex-col gap-2 pointer-events-none',\n positionClasses[position]\n )}\n >\n {toasts.map((toast) => (\n <Toast key={toast.id} {...toast} />\n ))}\n </div>,\n document.body\n )\n}\n\n// Individual Toast\ninterface ToastProps extends ToastData {}\n\nconst VARIANT_STYLES: Record<ToastVariant, string> = {\n default: 'bg-charcoal border-ash',\n success: 'bg-charcoal border-success/50',\n error: 'bg-charcoal border-error/50',\n warning: 'bg-charcoal border-warning/50',\n info: 'bg-charcoal border-info/50',\n}\n\nconst VARIANT_ICONS: Record<ToastVariant, React.ReactNode> = {\n default: null,\n success: <CheckCircle className=\"h-5 w-5 text-success\" />,\n error: <AlertCircle className=\"h-5 w-5 text-error\" />,\n warning: <AlertTriangle className=\"h-5 w-5 text-warning\" />,\n info: <Info className=\"h-5 w-5 text-info\" />,\n}\n\nconst Toast: React.FC<ToastProps> = ({\n id,\n title,\n description,\n variant = 'default',\n duration,\n action,\n}) => {\n const context = useContext(ToastContext)\n\n useEffect(() => {\n if (duration && duration > 0) {\n const timer = setTimeout(() => {\n context?.removeToast(id)\n }, duration)\n return () => clearTimeout(timer)\n }\n }, [id, duration, context])\n\n const icon = VARIANT_ICONS[variant]\n\n return (\n <div\n role=\"alert\"\n className={cx(\n 'pointer-events-auto w-80 p-4 border shadow-lg animate-slide-in-right',\n VARIANT_STYLES[variant]\n )}\n >\n <div className=\"flex gap-3\">\n {icon && <div className=\"shrink-0 mt-0.5\">{icon}</div>}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <p className=\"text-sm font-medium text-white\">{title}</p>\n )}\n {description && (\n <p className=\"text-sm text-silver mt-1\">{description}</p>\n )}\n {action && <div className=\"mt-3\">{action}</div>}\n </div>\n <button\n onClick={() => context?.removeToast(id)}\n className=\"shrink-0 text-silver hover:text-white transition-colors\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Dismiss</span>\n </button>\n </div>\n </div>\n )\n}\n\nToast.displayName = 'Toast'\n","import React, { useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\nexport interface ModalProps {\n isOpen: boolean\n onClose: () => void\n title?: string\n children: React.ReactNode\n className?: string\n}\n\nexport const Modal = ({ isOpen, onClose, title, children, className }: ModalProps) => {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n useEffect(() => {\n if (isOpen) {\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n document.body.style.overflow = 'hidden'\n document.body.style.paddingRight = `${scrollbarWidth}px`\n } else {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n return () => {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n }, [isOpen])\n\n useEffect(() => {\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n window.addEventListener('keydown', handleEsc)\n return () => window.removeEventListener('keydown', handleEsc)\n }, [onClose])\n\n if (!mounted) return null\n\n // Don't render anything if closed, unless we want exit animations. \n // My CSS relies on data-state, but if I unmount immediately, exit animation won't play.\n // To support exit animations, I'd need a transition manager (like framer-motion or headlessui).\n // For this simple implementation, I'll render conditionally. \n // If I want animation, I need to keep it mounted until animation ends.\n // Given the prompt \"add all suggestions\" and \"premium\", a simple unmount is acceptable for v1 without heavy deps.\n // However, the CSS I wrote has `data-state=closed`. \n // Without a transition library, handling exit animation is tricky. \n // I'll just conditional render for now. The entry animation `animate-fade-in` will play.\n \n if (!isOpen) return null;\n\n const content = (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6\" onClick={onClose}>\n <div className=\"fixed inset-0 z-40 bg-obsidian/80 backdrop-blur-sm\" aria-hidden=\"true\" />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className={cx(\n 'bg-charcoal border border-gold/30 shadow-2xl z-50 w-full max-w-lg p-6 rounded-none relative',\n className\n )}\n data-state=\"open\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between mb-2\">\n {title ? <h3 className=\"text-xl font-semibold text-white m-0\">{title}</h3> : <div />}\n <button onClick={onClose} className=\"text-silver hover:text-white transition-colors ml-auto\">\n <X className=\"h-5 w-5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n <div>{children}</div>\n </div>\n </div>\n )\n\n return createPortal(content, document.body)\n}\n\nModal.displayName = 'Modal'\n\nexport default Modal\n","import React, { useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\nexport type DrawerPosition = 'left' | 'right' | 'top' | 'bottom'\n\nexport interface DrawerProps {\n isOpen: boolean\n onClose: () => void\n position?: DrawerPosition\n title?: string\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full'\n children: React.ReactNode\n className?: string\n}\n\nconst SIZE_MAP: Record<string, Record<DrawerPosition, string>> = {\n sm: {\n left: 'w-64',\n right: 'w-64',\n top: 'h-48',\n bottom: 'h-48',\n },\n md: {\n left: 'w-80',\n right: 'w-80',\n top: 'h-64',\n bottom: 'h-64',\n },\n lg: {\n left: 'w-96',\n right: 'w-96',\n top: 'h-80',\n bottom: 'h-80',\n },\n xl: {\n left: 'w-[32rem]',\n right: 'w-[32rem]',\n top: 'h-96',\n bottom: 'h-96',\n },\n full: {\n left: 'w-full',\n right: 'w-full',\n top: 'h-full',\n bottom: 'h-full',\n },\n}\n\nconst POSITION_CLASSES: Record<DrawerPosition, string> = {\n left: 'left-0 top-0 h-full',\n right: 'right-0 top-0 h-full',\n top: 'top-0 left-0 w-full',\n bottom: 'bottom-0 left-0 w-full',\n}\n\nconst TRANSFORM_CLASSES: Record<DrawerPosition, { open: string; closed: string }> = {\n left: { open: 'translate-x-0', closed: '-translate-x-full' },\n right: { open: 'translate-x-0', closed: 'translate-x-full' },\n top: { open: 'translate-y-0', closed: '-translate-y-full' },\n bottom: { open: 'translate-y-0', closed: 'translate-y-full' },\n}\n\nexport const Drawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n position = 'right',\n title,\n size = 'md',\n children,\n className,\n}) => {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n useEffect(() => {\n if (isOpen) {\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n document.body.style.overflow = 'hidden'\n document.body.style.paddingRight = `${scrollbarWidth}px`\n } else {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n return () => {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n }, [isOpen])\n\n useEffect(() => {\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n window.addEventListener('keydown', handleEsc)\n return () => window.removeEventListener('keydown', handleEsc)\n }, [onClose])\n\n if (!mounted) return null\n\n const content = (\n <div\n className={cx(\n 'fixed inset-0 z-50',\n isOpen ? 'pointer-events-auto' : 'pointer-events-none'\n )}\n >\n {/* Backdrop */}\n <div\n className={cx(\n 'fixed inset-0 bg-obsidian/80 backdrop-blur-sm transition-opacity duration-300',\n isOpen ? 'opacity-100' : 'opacity-0'\n )}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n\n {/* Drawer panel */}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className={cx(\n 'fixed bg-charcoal border-ash shadow-2xl flex flex-col',\n 'transition-transform duration-300 ease-out',\n POSITION_CLASSES[position],\n SIZE_MAP[size][position],\n position === 'left' && 'border-r',\n position === 'right' && 'border-l',\n position === 'top' && 'border-b',\n position === 'bottom' && 'border-t',\n isOpen ? TRANSFORM_CLASSES[position].open : TRANSFORM_CLASSES[position].closed,\n className\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-ash\">\n {title ? (\n <h2 className=\"text-lg font-semibold text-white m-0\">{title}</h2>\n ) : (\n <div />\n )}\n <button\n onClick={onClose}\n className=\"text-silver hover:text-white transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto p-4\">{children}</div>\n </div>\n </div>\n )\n\n return createPortal(content, document.body)\n}\n\nDrawer.displayName = 'Drawer'\n","import React, { useState, useRef, useEffect, useCallback, useId } from 'react'\nimport { cx } from '../utils/cx'\n\nexport type PopoverPosition = 'top' | 'bottom' | 'left' | 'right'\nexport type PopoverAlign = 'start' | 'center' | 'end'\n\nexport interface PopoverProps {\n children: React.ReactNode\n /** The trigger element */\n trigger: React.ReactElement\n /** Position relative to trigger */\n position?: PopoverPosition\n /** Alignment along the position axis */\n align?: PopoverAlign\n /** Controlled open state */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Close when clicking outside */\n closeOnClickOutside?: boolean\n}\n\nconst POSITION_CLASSES: Record<PopoverPosition, Record<PopoverAlign, string>> = {\n top: {\n start: 'bottom-full left-0 mb-2',\n center: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n end: 'bottom-full right-0 mb-2',\n },\n bottom: {\n start: 'top-full left-0 mt-2',\n center: 'top-full left-1/2 -translate-x-1/2 mt-2',\n end: 'top-full right-0 mt-2',\n },\n left: {\n start: 'right-full top-0 mr-2',\n center: 'right-full top-1/2 -translate-y-1/2 mr-2',\n end: 'right-full bottom-0 mr-2',\n },\n right: {\n start: 'left-full top-0 ml-2',\n center: 'left-full top-1/2 -translate-y-1/2 ml-2',\n end: 'left-full bottom-0 ml-2',\n },\n}\n\nexport const Popover: React.FC<PopoverProps> = ({\n children,\n trigger,\n position = 'bottom',\n align = 'center',\n open: controlledOpen,\n onOpenChange,\n closeOnClickOutside = true,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const containerRef = useRef<HTMLDivElement>(null)\n const baseId = useId()\n\n const setIsOpen = useCallback(\n (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n },\n [isControlled, onOpenChange]\n )\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen || !closeOnClickOutside) return\n\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [isOpen, closeOnClickOutside, setIsOpen])\n\n // Close on escape\n useEffect(() => {\n if (!isOpen) return\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('keydown', handleEscape)\n return () => document.removeEventListener('keydown', handleEscape)\n }, [isOpen, setIsOpen])\n\n const handleTriggerClick = () => {\n setIsOpen(!isOpen)\n }\n\n const triggerElement = React.cloneElement(trigger as React.ReactElement<any>, {\n onClick: handleTriggerClick,\n 'aria-haspopup': 'dialog',\n 'aria-expanded': isOpen,\n 'aria-controls': `${baseId}-popover`,\n id: `${baseId}-trigger`,\n })\n\n return (\n <div ref={containerRef} className=\"relative inline-block\">\n {triggerElement}\n {isOpen && (\n <div\n id={`${baseId}-popover`}\n role=\"dialog\"\n aria-labelledby={`${baseId}-trigger`}\n className={cx(\n 'absolute z-50 min-w-48 p-4',\n 'bg-charcoal border border-ash shadow-lg',\n 'animate-fade-in',\n POSITION_CLASSES[position][align]\n )}\n >\n {children}\n </div>\n )}\n </div>\n )\n}\n\nPopover.displayName = 'Popover'\n","import React, { useCallback } from 'react'\nimport { Modal, type ModalProps } from './Modal'\nimport { Button } from './Button'\nimport { cx } from '../utils/cx'\n\n// ConfirmDialog - for confirmation actions\nexport interface ConfirmDialogProps extends Omit<ModalProps, 'children'> {\n description?: React.ReactNode\n confirmText?: string\n cancelText?: string\n onConfirm: () => void | Promise<void>\n onCancel?: () => void\n confirmVariant?: 'primary' | 'important' | 'danger'\n isLoading?: boolean\n}\n\nexport const ConfirmDialog: React.FC<ConfirmDialogProps> = ({\n title = 'Confirm',\n description,\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n onConfirm,\n onCancel,\n onClose,\n confirmVariant = 'important',\n isLoading = false,\n ...props\n}) => {\n const handleCancel = useCallback(() => {\n onCancel?.()\n onClose()\n }, [onCancel, onClose])\n\n const handleConfirm = useCallback(async () => {\n await onConfirm()\n onClose()\n }, [onConfirm, onClose])\n\n return (\n <Modal title={title} onClose={onClose} {...props}>\n {description && (\n <p className=\"text-sm text-silver mb-6\">{description}</p>\n )}\n <div className=\"flex justify-end gap-3\">\n <Button variant=\"outlined\" onClick={handleCancel} disabled={isLoading}>\n {cancelText}\n </Button>\n <Button\n variant={confirmVariant}\n onClick={handleConfirm}\n loading={isLoading}\n >\n {confirmText}\n </Button>\n </div>\n </Modal>\n )\n}\n\nConfirmDialog.displayName = 'ConfirmDialog'\n\n// AlertDialog - for important alerts\nexport interface AlertDialogProps extends Omit<ModalProps, 'children'> {\n description?: React.ReactNode\n acknowledgeText?: string\n variant?: 'default' | 'warning' | 'error'\n}\n\nexport const AlertDialog: React.FC<AlertDialogProps> = ({\n title = 'Alert',\n description,\n acknowledgeText = 'OK',\n variant = 'default',\n onClose,\n ...props\n}) => {\n const titleClass = cx(\n variant === 'warning' && 'text-warning',\n variant === 'error' && 'text-error'\n )\n\n return (\n <Modal onClose={onClose} {...props}>\n <h3 className={cx('text-xl font-semibold mb-2', titleClass)}>{title}</h3>\n {description && (\n <p className=\"text-sm text-silver mb-6\">{description}</p>\n )}\n <div className=\"flex justify-end\">\n <Button variant=\"primary\" onClick={onClose}>\n {acknowledgeText}\n </Button>\n </div>\n </Modal>\n )\n}\n\nAlertDialog.displayName = 'AlertDialog'\n\n// PromptDialog - for user input\nexport interface PromptDialogProps extends Omit<ModalProps, 'children'> {\n description?: React.ReactNode\n placeholder?: string\n defaultValue?: string\n submitText?: string\n cancelText?: string\n onSubmit: (value: string) => void | Promise<void>\n onCancel?: () => void\n isLoading?: boolean\n}\n\nexport const PromptDialog: React.FC<PromptDialogProps> = ({\n title = 'Enter Value',\n description,\n placeholder,\n defaultValue = '',\n submitText = 'Submit',\n cancelText = 'Cancel',\n onSubmit,\n onCancel,\n onClose,\n isLoading = false,\n ...props\n}) => {\n const [value, setValue] = React.useState(defaultValue)\n\n const handleCancel = useCallback(() => {\n onCancel?.()\n onClose()\n }, [onCancel, onClose])\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault()\n await onSubmit(value)\n onClose()\n },\n [onSubmit, value, onClose]\n )\n\n return (\n <Modal title={title} onClose={onClose} {...props}>\n <form onSubmit={handleSubmit}>\n {description && (\n <p className=\"text-sm text-silver mb-4\">{description}</p>\n )}\n <input\n type=\"text\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={placeholder}\n className={cx(\n 'w-full px-3 py-2 bg-graphite border border-ash',\n 'text-white placeholder:text-zinc',\n 'focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none',\n 'mb-6'\n )}\n autoFocus\n />\n <div className=\"flex justify-end gap-3\">\n <Button\n type=\"button\"\n variant=\"outlined\"\n onClick={handleCancel}\n disabled={isLoading}\n >\n {cancelText}\n </Button>\n <Button type=\"submit\" variant=\"important\" loading={isLoading}>\n {submitText}\n </Button>\n </div>\n </form>\n </Modal>\n )\n}\n\nPromptDialog.displayName = 'PromptDialog'\n","import React, { createContext, useContext, useState, useCallback, useId } from 'react'\nimport { cx } from '../utils/cx'\n\n// Context for managing tab state\ninterface TabsContextValue {\n activeTab: string\n setActiveTab: (id: string) => void\n baseId: string\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null)\n\nfunction useTabsContext() {\n const context = useContext(TabsContext)\n if (!context) {\n throw new Error('Tabs components must be used within a Tabs provider')\n }\n return context\n}\n\n// Main Tabs container\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The id of the initially active tab */\n defaultValue?: string\n /** Controlled active tab value */\n value?: string\n /** Callback when active tab changes */\n onValueChange?: (value: string) => void\n}\n\nexport const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n ({ defaultValue, value, onValueChange, children, className, ...props }, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue ?? '')\n const isControlled = value !== undefined\n const activeTab = isControlled ? value : internalValue\n const baseId = useId()\n\n const setActiveTab = useCallback(\n (id: string) => {\n if (!isControlled) {\n setInternalValue(id)\n }\n onValueChange?.(id)\n },\n [isControlled, onValueChange]\n )\n\n return (\n <TabsContext.Provider value={{ activeTab, setActiveTab, baseId }}>\n <div ref={ref} className={cx('w-full', className)} {...props}>\n {children}\n </div>\n </TabsContext.Provider>\n )\n }\n)\n\nTabs.displayName = 'Tabs'\n\n// TabList - container for Tab buttons\nexport interface TabListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const TabList = React.forwardRef<HTMLDivElement, TabListProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"tablist\"\n className={cx(\n 'flex border-b border-ash',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nTabList.displayName = 'TabList'\n\n// Tab - individual tab button\nexport interface TabProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Unique identifier for this tab */\n value: string\n}\n\nexport const Tab = React.forwardRef<HTMLButtonElement, TabProps>(\n ({ value, children, className, disabled, ...props }, ref) => {\n const { activeTab, setActiveTab, baseId } = useTabsContext()\n const isActive = activeTab === value\n const panelId = `${baseId}-panel-${value}`\n const tabId = `${baseId}-tab-${value}`\n\n return (\n <button\n ref={ref}\n id={tabId}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={panelId}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n onClick={() => setActiveTab(value)}\n className={cx(\n 'px-4 py-2 text-sm font-medium transition-all duration-fast',\n 'border-b-2 -mb-px',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-inset',\n isActive\n ? 'border-gold text-gold'\n : 'border-transparent text-silver hover:text-white hover:border-ash',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\n\nTab.displayName = 'Tab'\n\n// TabPanel - content panel for a tab\nexport interface TabPanelProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Value matching the corresponding Tab */\n value: string\n /** Force the panel to stay mounted when inactive */\n forceMount?: boolean\n}\n\nexport const TabPanel = React.forwardRef<HTMLDivElement, TabPanelProps>(\n ({ value, forceMount = false, children, className, ...props }, ref) => {\n const { activeTab, baseId } = useTabsContext()\n const isActive = activeTab === value\n const panelId = `${baseId}-panel-${value}`\n const tabId = `${baseId}-tab-${value}`\n\n if (!isActive && !forceMount) {\n return null\n }\n\n return (\n <div\n ref={ref}\n id={panelId}\n role=\"tabpanel\"\n aria-labelledby={tabId}\n tabIndex={0}\n hidden={!isActive}\n className={cx(\n 'pt-4 focus-visible:outline-none',\n !isActive && 'hidden',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nTabPanel.displayName = 'TabPanel'\n","import React, { createContext, useContext, useState, useCallback, useId } from 'react'\nimport { ChevronDown } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\n// Context for managing accordion state\ninterface AccordionContextValue {\n expandedItems: Set<string>\n toggleItem: (id: string) => void\n type: 'single' | 'multiple'\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null)\n\nfunction useAccordionContext() {\n const context = useContext(AccordionContext)\n if (!context) {\n throw new Error('Accordion components must be used within an Accordion provider')\n }\n return context\n}\n\n// Main Accordion container\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Allow multiple items to be open at once */\n type?: 'single' | 'multiple'\n /** Default expanded item(s) */\n defaultValue?: string | string[]\n /** Controlled expanded item(s) */\n value?: string | string[]\n /** Callback when expanded items change */\n onValueChange?: (value: string | string[]) => void\n}\n\nexport const Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n (\n { type = 'single', defaultValue, value, onValueChange, children, className, ...props },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState<Set<string>>(() => {\n if (defaultValue) {\n return new Set(Array.isArray(defaultValue) ? defaultValue : [defaultValue])\n }\n return new Set()\n })\n\n const isControlled = value !== undefined\n const expandedItems = isControlled\n ? new Set(Array.isArray(value) ? value : [value])\n : internalValue\n\n const toggleItem = useCallback(\n (id: string) => {\n const newSet = new Set(expandedItems)\n\n if (newSet.has(id)) {\n newSet.delete(id)\n } else {\n if (type === 'single') {\n newSet.clear()\n }\n newSet.add(id)\n }\n\n if (!isControlled) {\n setInternalValue(newSet)\n }\n\n const newValue = Array.from(newSet)\n onValueChange?.(type === 'single' ? newValue[0] ?? '' : newValue)\n },\n [expandedItems, type, isControlled, onValueChange]\n )\n\n return (\n <AccordionContext.Provider value={{ expandedItems, toggleItem, type }}>\n <div\n ref={ref}\n className={cx('divide-y divide-ash border border-ash', className)}\n {...props}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n )\n }\n)\n\nAccordion.displayName = 'Accordion'\n\n// AccordionItem - individual accordion section\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Unique identifier for this item */\n value: string\n /** Disable this item */\n disabled?: boolean\n}\n\nconst AccordionItemContext = createContext<{ value: string; disabled: boolean } | null>(null)\n\nexport const AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ value, disabled = false, children, className, ...props }, ref) => {\n return (\n <AccordionItemContext.Provider value={{ value, disabled }}>\n <div\n ref={ref}\n data-state={useAccordionContext().expandedItems.has(value) ? 'open' : 'closed'}\n className={cx('bg-charcoal', className)}\n {...props}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n )\n }\n)\n\nAccordionItem.displayName = 'AccordionItem'\n\n// AccordionTrigger - clickable header\nexport interface AccordionTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nexport const AccordionTrigger = React.forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n ({ children, className, ...props }, ref) => {\n const { expandedItems, toggleItem } = useAccordionContext()\n const itemContext = useContext(AccordionItemContext)\n const baseId = useId()\n\n if (!itemContext) {\n throw new Error('AccordionTrigger must be used within an AccordionItem')\n }\n\n const { value, disabled } = itemContext\n const isExpanded = expandedItems.has(value)\n\n return (\n <h3 className=\"m-0\">\n <button\n ref={ref}\n type=\"button\"\n id={`${baseId}-trigger-${value}`}\n aria-expanded={isExpanded}\n aria-controls={`${baseId}-content-${value}`}\n disabled={disabled}\n onClick={() => toggleItem(value)}\n className={cx(\n 'flex w-full items-center justify-between px-4 py-3',\n 'text-left text-sm font-medium text-white',\n 'transition-colors duration-fast',\n 'hover:bg-graphite',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-inset',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n {...props}\n >\n <span>{children}</span>\n <ChevronDown\n className={cx(\n 'h-4 w-4 text-silver transition-transform duration-200',\n isExpanded && 'rotate-180'\n )}\n />\n </button>\n </h3>\n )\n }\n)\n\nAccordionTrigger.displayName = 'AccordionTrigger'\n\n// AccordionContent - expandable content\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const AccordionContent = React.forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ children, className, ...props }, ref) => {\n const { expandedItems } = useAccordionContext()\n const itemContext = useContext(AccordionItemContext)\n const baseId = useId()\n\n if (!itemContext) {\n throw new Error('AccordionContent must be used within an AccordionItem')\n }\n\n const { value } = itemContext\n const isExpanded = expandedItems.has(value)\n\n return (\n <div\n ref={ref}\n id={`${baseId}-content-${value}`}\n role=\"region\"\n aria-labelledby={`${baseId}-trigger-${value}`}\n hidden={!isExpanded}\n className={cx(\n 'overflow-hidden transition-all duration-200',\n isExpanded ? 'animate-fade-in' : 'hidden',\n className\n )}\n {...props}\n >\n <div className=\"px-4 pb-4 text-sm text-silver\">{children}</div>\n </div>\n )\n }\n)\n\nAccordionContent.displayName = 'AccordionContent'\n","import React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n useEffect,\n useId,\n} from 'react'\nimport { cx } from '../utils/cx'\n\n// Context for managing menu state\ninterface MenuContextValue {\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n triggerId: string\n menuId: string\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu provider')\n }\n return context\n}\n\n// Main Menu container\nexport interface MenuProps {\n children: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\nexport const Menu: React.FC<MenuProps> = ({ children, open, onOpenChange }) => {\n const [internalOpen, setInternalOpen] = useState(false)\n const isControlled = open !== undefined\n const isOpen = isControlled ? open : internalOpen\n const baseId = useId()\n\n const setIsOpen = useCallback(\n (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n },\n [isControlled, onOpenChange]\n )\n\n return (\n <MenuContext.Provider\n value={{\n isOpen,\n setIsOpen,\n triggerId: `${baseId}-trigger`,\n menuId: `${baseId}-menu`,\n }}\n >\n <div className=\"relative inline-block\">{children}</div>\n </MenuContext.Provider>\n )\n}\n\nMenu.displayName = 'Menu'\n\n// MenuTrigger - button that opens the menu\nexport interface MenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n}\n\nexport const MenuTrigger = React.forwardRef<HTMLButtonElement, MenuTriggerProps>(\n ({ children, className, asChild, ...props }, ref) => {\n const { isOpen, setIsOpen, triggerId, menuId } = useMenuContext()\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault()\n setIsOpen(!isOpen)\n props.onClick?.(e)\n }\n\n return (\n <button\n ref={ref}\n id={triggerId}\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-controls={menuId}\n onClick={handleClick}\n className={cx(\n 'inline-flex items-center justify-center',\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\n\nMenuTrigger.displayName = 'MenuTrigger'\n\n// MenuContent - the dropdown menu\nexport interface MenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: 'start' | 'center' | 'end'\n side?: 'top' | 'bottom'\n}\n\nexport const MenuContent = React.forwardRef<HTMLDivElement, MenuContentProps>(\n ({ children, className, align = 'start', side = 'bottom', ...props }, ref) => {\n const { isOpen, setIsOpen, triggerId, menuId } = useMenuContext()\n const menuRef = useRef<HTMLDivElement>(null)\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return\n\n const handleClickOutside = (e: MouseEvent) => {\n const trigger = document.getElementById(triggerId)\n if (\n menuRef.current &&\n !menuRef.current.contains(e.target as Node) &&\n trigger &&\n !trigger.contains(e.target as Node)\n ) {\n setIsOpen(false)\n }\n }\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n document.addEventListener('keydown', handleEscape)\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n document.removeEventListener('keydown', handleEscape)\n }\n }, [isOpen, setIsOpen, triggerId])\n\n if (!isOpen) return null\n\n const alignmentClasses = {\n start: 'left-0',\n center: 'left-1/2 -translate-x-1/2',\n end: 'right-0',\n }\n\n const sideClasses = {\n top: 'bottom-full mb-1',\n bottom: 'top-full mt-1',\n }\n\n return (\n <div\n ref={(node) => {\n menuRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n id={menuId}\n role=\"menu\"\n aria-labelledby={triggerId}\n className={cx(\n 'absolute z-50 min-w-40 py-1',\n 'bg-charcoal border border-ash shadow-lg',\n 'animate-fade-in',\n alignmentClasses[align],\n sideClasses[side],\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nMenuContent.displayName = 'MenuContent'\n\n// MenuItem - individual menu option\nexport interface MenuItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n destructive?: boolean\n}\n\nexport const MenuItem = React.forwardRef<HTMLButtonElement, MenuItemProps>(\n ({ children, className, icon, destructive, disabled, onClick, ...props }, ref) => {\n const { setIsOpen } = useMenuContext()\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return\n onClick?.(e)\n setIsOpen(false)\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"menuitem\"\n disabled={disabled}\n onClick={handleClick}\n className={cx(\n 'flex w-full items-center gap-2 px-3 py-2 text-sm text-left',\n 'transition-colors duration-fast',\n destructive\n ? 'text-error hover:bg-error/10'\n : 'text-white hover:bg-graphite',\n 'focus-visible:outline-none focus-visible:bg-graphite',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n {...props}\n >\n {icon && <span className=\"w-4 h-4 shrink-0\">{icon}</span>}\n {children}\n </button>\n )\n }\n)\n\nMenuItem.displayName = 'MenuItem'\n\n// MenuSeparator - divider between menu items\nexport const MenuSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"separator\"\n className={cx('my-1 h-px bg-ash', className)}\n {...props}\n />\n))\n\nMenuSeparator.displayName = 'MenuSeparator'\n\n// MenuLabel - non-interactive label\nexport const MenuLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cx('px-3 py-1.5 text-xs font-medium text-silver', className)}\n {...props}\n >\n {children}\n </div>\n))\n\nMenuLabel.displayName = 'MenuLabel'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\n// Main Navbar container\nexport interface NavbarProps extends React.HTMLAttributes<HTMLElement> {\n fixed?: boolean\n bordered?: boolean\n}\n\nexport const Navbar = React.forwardRef<HTMLElement, NavbarProps>(\n ({ fixed = false, bordered = true, className, children, ...props }, ref) => {\n return (\n <nav\n ref={ref}\n className={cx(\n 'w-full bg-charcoal px-4 py-3',\n bordered && 'border-b border-ash',\n fixed && 'fixed top-0 left-0 right-0 z-40',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between\">{children}</div>\n </nav>\n )\n }\n)\n\nNavbar.displayName = 'Navbar'\n\n// NavbarBrand - logo/brand section\nexport interface NavbarBrandProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const NavbarBrand = React.forwardRef<HTMLDivElement, NavbarBrandProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx('flex items-center gap-2', className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nNavbarBrand.displayName = 'NavbarBrand'\n\n// NavbarContent - center or end content area\nexport interface NavbarContentProps extends React.HTMLAttributes<HTMLDivElement> {\n position?: 'start' | 'center' | 'end'\n}\n\nexport const NavbarContent = React.forwardRef<HTMLDivElement, NavbarContentProps>(\n ({ position = 'center', className, children, ...props }, ref) => {\n const positionClasses = {\n start: 'mr-auto',\n center: 'mx-auto',\n end: 'ml-auto',\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center gap-4',\n positionClasses[position],\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nNavbarContent.displayName = 'NavbarContent'\n\n// NavbarItem - individual navigation item\nexport interface NavbarItemProps extends React.HTMLAttributes<HTMLDivElement> {\n active?: boolean\n}\n\nexport const NavbarItem = React.forwardRef<HTMLDivElement, NavbarItemProps>(\n ({ active = false, className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nNavbarItem.displayName = 'NavbarItem'\n\n// NavbarLink - navigation link\nexport interface NavbarLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n active?: boolean\n}\n\nexport const NavbarLink = React.forwardRef<HTMLAnchorElement, NavbarLinkProps>(\n ({ active = false, className, children, ...props }, ref) => {\n return (\n <a\n ref={ref}\n className={cx(\n 'text-sm font-medium transition-colors duration-fast',\n active ? 'text-gold' : 'text-silver hover:text-white',\n className\n )}\n {...props}\n >\n {children}\n </a>\n )\n }\n)\n\nNavbarLink.displayName = 'NavbarLink'\n\n// NavbarDivider - vertical separator\nexport const NavbarDivider = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cx('h-6 w-px bg-ash mx-2', className)}\n {...props}\n />\n))\n\nNavbarDivider.displayName = 'NavbarDivider'\n","import React from 'react'\nimport {ChevronRight} from 'lucide-react'\nimport {cx} from '../utils'\n\n// Breadcrumb container\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n separator?: React.ReactNode\n}\n\nexport const Breadcrumb = React.forwardRef<HTMLElement, BreadcrumbProps>(\n ({separator, className, children, ...props}, ref) => {\n const items = React.Children.toArray(children)\n const defaultSeparator = <ChevronRight className=\"h-4 w-4 text-ash\"/>\n\n return (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={className} {...props}>\n <ol className=\"flex items-center gap-2\">\n {items.map((child, index) => (\n <li key={index} className=\"flex items-center gap-2\">\n {child}\n {index < items.length - 1 && (\n <span aria-hidden=\"true\">{separator ?? defaultSeparator}</span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n )\n }\n)\n\nBreadcrumb.displayName = 'Breadcrumb'\n\n// BreadcrumbItem - individual breadcrumb item\nexport interface BreadcrumbItemProps extends React.HTMLAttributes<HTMLSpanElement> {\n current?: boolean\n}\n\nexport const BreadcrumbItem = React.forwardRef<HTMLSpanElement, BreadcrumbItemProps>(\n ({current = false, className, children, ...props}, ref) => {\n return (\n <span\n ref={ref}\n aria-current={current ? 'page' : undefined}\n className={cx(\n 'text-sm',\n current ? 'text-white font-medium' : 'text-silver',\n className\n )}\n {...props}\n >\n {children}\n </span>\n )\n }\n)\n\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n\n// BreadcrumbLink - clickable breadcrumb link\nexport interface BreadcrumbLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n}\n\nexport const BreadcrumbLink = React.forwardRef<HTMLAnchorElement, BreadcrumbLinkProps>(\n ({className, children, ...props}, ref) => {\n return (\n <a\n ref={ref}\n className={cx(\n 'text-sm text-silver hover:text-gold transition-colors duration-fast',\n className\n )}\n {...props}\n >\n {children}\n </a>\n )\n }\n)\n\nBreadcrumbLink.displayName = 'BreadcrumbLink'\n","import React from 'react'\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\nexport interface PaginationProps extends React.HTMLAttributes<HTMLElement> {\n page: number\n totalPages: number\n onPageChange: (page: number) => void\n siblingCount?: number\n showEdges?: boolean\n}\n\nfunction generatePagination(\n currentPage: number,\n totalPages: number,\n siblingCount: number\n): (number | 'ellipsis')[] {\n const totalSlots = siblingCount * 2 + 5 // siblings + current + 2 edges + 2 ellipses max\n\n if (totalPages <= totalSlots) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1)\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages)\n\n const showLeftEllipsis = leftSiblingIndex > 2\n const showRightEllipsis = rightSiblingIndex < totalPages - 1\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftItemCount = 3 + 2 * siblingCount\n const leftRange = Array.from({ length: leftItemCount }, (_, i) => i + 1)\n return [...leftRange, 'ellipsis', totalPages]\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightItemCount = 3 + 2 * siblingCount\n const rightRange = Array.from(\n { length: rightItemCount },\n (_, i) => totalPages - rightItemCount + i + 1\n )\n return [1, 'ellipsis', ...rightRange]\n }\n\n const middleRange = Array.from(\n { length: rightSiblingIndex - leftSiblingIndex + 1 },\n (_, i) => leftSiblingIndex + i\n )\n return [1, 'ellipsis', ...middleRange, 'ellipsis', totalPages]\n}\n\nexport const Pagination = React.forwardRef<HTMLElement, PaginationProps>(\n (\n {\n page,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showEdges = true,\n className,\n ...props\n },\n ref\n ) => {\n const pages = generatePagination(page, totalPages, siblingCount)\n\n const buttonBaseClass =\n 'flex items-center justify-center h-8 min-w-8 px-2 text-sm ' +\n 'border border-ash transition-colors duration-fast ' +\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gold'\n\n return (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label=\"Pagination\"\n className={cx('flex items-center gap-1', className)}\n {...props}\n >\n {/* Previous button */}\n <button\n type=\"button\"\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n aria-label=\"Go to previous page\"\n className={cx(\n buttonBaseClass,\n 'text-silver hover:text-white hover:border-gold',\n page <= 1 && 'opacity-50 cursor-not-allowed hover:border-ash'\n )}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n\n {/* Page numbers */}\n {pages.map((pageNum, index) =>\n pageNum === 'ellipsis' ? (\n <span\n key={`ellipsis-${index}`}\n className=\"flex items-center justify-center h-8 w-8 text-silver\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </span>\n ) : (\n <button\n key={pageNum}\n type=\"button\"\n onClick={() => onPageChange(pageNum)}\n aria-label={`Go to page ${pageNum}`}\n aria-current={page === pageNum ? 'page' : undefined}\n className={cx(\n buttonBaseClass,\n page === pageNum\n ? 'bg-gold text-obsidian border-gold font-medium'\n : 'text-silver hover:text-white hover:border-gold'\n )}\n >\n {pageNum}\n </button>\n )\n )}\n\n {/* Next button */}\n <button\n type=\"button\"\n onClick={() => onPageChange(page + 1)}\n disabled={page >= totalPages}\n aria-label=\"Go to next page\"\n className={cx(\n buttonBaseClass,\n 'text-silver hover:text-white hover:border-gold',\n page >= totalPages && 'opacity-50 cursor-not-allowed hover:border-ash'\n )}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </nav>\n )\n }\n)\n\nPagination.displayName = 'Pagination'\n","import React from 'react'\nimport {Check} from 'lucide-react'\nimport {cx} from '../utils/cx'\n\nexport type StepStatus = 'complete' | 'error'\n\nexport interface Step {\n id: string | number\n label: string\n}\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Array of steps. Each requires: id (string | number), label (string). */\n steps: Step[]\n /** ID of the current step (must match a step.id from the steps array). */\n currentStep: string | number\n status?: StepStatus\n}\n\nexport const Stepper = React.forwardRef<HTMLDivElement, StepperProps>(\n ({steps, currentStep, status, className, ...rest}, ref) => {\n const currentIndex = steps.findIndex(step => step.id === currentStep)\n\n const getStepState = (index: number) => {\n if (index < currentIndex) {\n return 'complete'\n }\n if (index === currentIndex) {\n return status || 'current'\n }\n return 'future'\n }\n\n return (\n <div\n ref={ref}\n className={cx('flex items-center w-full', className)}\n {...rest}\n >\n {steps.map((step, index) => {\n const state = getStepState(index)\n const isLast = index === steps.length - 1\n\n return (\n <React.Fragment key={step.id}>\n <div className=\"flex flex-col items-center\">\n <div\n className={cx(\n 'flex items-center justify-center w-10 h-10 rounded-full border-2 font-semibold text-sm transition-all duration-200',\n state === 'complete' && 'bg-gold border-gold text-obsidian',\n state === 'current' && 'bg-charcoal border-gold text-gold',\n state === 'error' && 'bg-error border-error text-white',\n state === 'future' && 'bg-charcoal border-ash text-silver'\n )}\n >\n {state === 'complete' ? (\n <Check className=\"h-5 w-5\"/>\n ) : (\n <span>{index + 1}</span>\n )}\n </div>\n <span\n className={cx(\n 'mt-2 text-xs font-medium',\n state === 'complete' && 'text-gold',\n state === 'current' && 'text-white',\n state === 'error' && 'text-error',\n state === 'future' && 'text-silver'\n )}\n >\n {step.label}\n </span>\n </div>\n {!isLast && (\n <div\n className={cx(\n 'flex-1 h-0.5 mx-4 transition-all duration-200',\n index < currentIndex ? 'bg-gold' : 'bg-ash'\n )}\n />\n )}\n </React.Fragment>\n )\n })}\n </div>\n )\n }\n)\n\nStepper.displayName = 'Stepper'\n\nexport default Stepper\n","import React from 'react'\nimport { MarkdownContent } from './MarkdownContent'\nimport { StreamingCursor } from './StreamingCursor'\nimport { cx } from '../utils/cx'\n\nexport type MessageVariant = 'user' | 'assistant'\n\nexport interface MessageProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: MessageVariant\n content: string\n isStreaming?: boolean\n}\n\nconst variantStyles: Record<MessageVariant, string> = {\n user: 'bg-gold text-obsidian ml-auto',\n assistant: 'bg-charcoal border border-ash text-white mr-auto',\n}\n\nexport const Message = React.forwardRef<HTMLDivElement, MessageProps>(\n ({variant = 'assistant', className, content, isStreaming, ...rest},\n ref) => {\n const isUser = variant === 'user'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'px-3 py-2 w-fit',\n variantStyles[variant],\n className\n )}\n {...rest}\n >\n <MarkdownContent\n content={content}\n className={cx('prose-sm', isUser ? 'prose-inherit' : 'prose-invert')}\n />\n {isStreaming && <StreamingCursor className=\"ml-0.5\"/>}\n </div>\n )\n }\n)\n\nMessage.displayName = 'Message'\n\nexport default Message","import React, { useMemo } from 'react'\nimport DOMPurify, { type Config } from 'dompurify'\nimport { cx } from '../utils/cx'\n\nexport interface MarkdownContentProps extends React.HTMLAttributes<HTMLDivElement> {\n content: string\n sanitizeConfig?: Config\n}\n\nconst DEFAULT_SANITIZE_CONFIG: Config = {\n ALLOWED_TAGS: [\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'p', 'br', 'hr',\n 'strong', 'b', 'em', 'i', 'u', 's', 'strike', 'del', 'ins',\n 'sup', 'sub', 'mark', 'small',\n 'ul', 'ol', 'li',\n 'a',\n 'code', 'pre', 'kbd', 'samp', 'var',\n 'blockquote', 'q', 'cite', 'abbr',\n 'table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'caption', 'colgroup', 'col',\n 'div', 'span', 'details', 'summary',\n ],\n ALLOWED_ATTR: [\n 'href', 'title', 'target', 'rel',\n 'class', 'id',\n 'colspan', 'rowspan', 'scope',\n 'open',\n ],\n ADD_ATTR: ['target', 'rel'],\n ALLOWED_URI_REGEXP: /^(?:(?:https?|mailto|tel):|[^a-z]|[a-z+.-]+(?:[^a-z+.\\-:]|$))/i,\n}\n\nfunction useDOMPurifySetup() {\n useMemo(() => {\n DOMPurify.addHook('afterSanitizeAttributes', (node) => {\n if (node.tagName === 'A') {\n node.setAttribute('target', '_blank')\n node.setAttribute('rel', 'noopener noreferrer')\n }\n })\n }, [])\n}\n\nexport const MarkdownContent = React.forwardRef<HTMLDivElement, MarkdownContentProps>(\n ({className, content, sanitizeConfig, ...rest}, ref) => {\n useDOMPurifySetup()\n\n const sanitizedHtml = useMemo(() => {\n if (!content) {\n return ''\n }\n const config = sanitizeConfig ?? DEFAULT_SANITIZE_CONFIG\n return DOMPurify.sanitize(content, config)\n }, [content, sanitizeConfig])\n\n return (\n <div\n ref={ref}\n className={cx('prose', className)}\n dangerouslySetInnerHTML={{__html: sanitizedHtml}}\n {...rest}\n />\n )\n }\n)\n\nMarkdownContent.displayName = 'MarkdownContent'\n\nexport default MarkdownContent","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface StreamingCursorProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: 'block' | 'line' | 'underscore'\n}\n\nexport const StreamingCursor = React.forwardRef<HTMLSpanElement, StreamingCursorProps>(\n ({className, variant = 'line', ...rest}, ref) => {\n const variantStyles = {\n block: 'w-2.5 h-cursor translate-y-cursor-offset',\n line: 'w-0.5 h-cursor translate-y-cursor-offset',\n underscore: 'w-2.5 h-0.5 self-end mb-0.5'\n }\n\n return (\n <span\n ref={ref}\n className={cx(\n 'inline-block bg-current animate-cursor-blink',\n variantStyles[variant],\n className\n )}\n aria-hidden=\"true\"\n {...rest}\n />\n )\n }\n)\n\nStreamingCursor.displayName = 'StreamingCursor'\n\nexport default StreamingCursor\n","import React, {useEffect, useRef} from 'react'\nimport {Message, type MessageProps, type MessageVariant} from './Message'\nimport {cx} from '../utils/cx'\n\nexport interface ChatHistoryItem extends Omit<MessageProps, 'variant' | 'children'> {\n id?: string\n variant?: MessageVariant\n}\n\nexport interface ChatHistoryProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Array of chat messages. Each item requires: content (string), variant ('user' | 'assistant'). Optional: id, isStreaming. */\n messages: ChatHistoryItem[]\n}\n\nexport const ChatHistory: React.FC<ChatHistoryProps> = ({messages, className, ...rest}) => {\n const innerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const el = innerRef.current\n if (!el) {\n return\n }\n\n if (typeof el.scrollTo === 'function') {\n el.scrollTo({top: el.scrollHeight, behavior: 'smooth'})\n } else {\n el.scrollTop = el.scrollHeight\n }\n }, [messages])\n\n return (\n <div\n ref={innerRef}\n className={cx(\n 'flex flex-col gap-3 justify-end w-full h-96 bg-charcoal/50 border border-ash/40 p-4 overflow-y-auto',\n className\n )}\n {...rest}\n >\n {messages.map(({id, variant, className: messageClassName, ...messageProps}, index) => (\n <Message\n key={id ?? index}\n variant={variant}\n className={messageClassName}\n {...messageProps}\n />\n ))}\n </div>\n )\n}\n\nChatHistory.displayName = 'ChatHistory'\n\nexport default ChatHistory","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type BrandIconSize = 'sm' | 'md' | 'lg'\nexport type BrandIconVariant = 'solid' | 'outline'\n\nexport interface BrandIconProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: BrandIconSize\n variant?: BrandIconVariant\n}\n\nconst sizeMap: Record<BrandIconSize, string> = {\n sm: 'h-8 w-8 text-sm',\n md: 'h-12 w-12 text-base',\n lg: 'h-16 w-16 text-lg',\n}\n\nexport const BrandIcon = React.forwardRef<HTMLDivElement, BrandIconProps>(\n ({size = 'md', variant = 'solid', children, className, ...rest}, ref) => {\n const variantClasses =\n variant === 'solid'\n ? 'bg-gold text-obsidian border-2 border-gold'\n : 'bg-transparent text-gold border-2 border-gold'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'inline-flex items-center justify-center rounded-none font-bold select-none overflow-hidden',\n sizeMap[size],\n variantClasses,\n className\n )}\n {...rest}\n >\n {children}\n </div>\n )\n }\n)\n\nBrandIcon.displayName = 'BrandIcon'\n\nexport default BrandIcon\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface ColorSwatchProps extends React.HTMLAttributes<HTMLDivElement> {\n color: string\n label?: string\n}\n\nexport const ColorSwatch = React.forwardRef<HTMLDivElement, ColorSwatchProps>(\n ({color, label, className, ...rest}, ref) => {\n return (\n <div\n ref={ref}\n className={cx('flex flex-col items-center gap-2', className)}\n {...rest}\n >\n <div\n className=\"h-16 w-16 border-2 border-ash rounded-none shadow-sm\"\n style={{backgroundColor: color}}\n aria-label={label || color}\n />\n {label && (\n <span className=\"text-xs text-silver font-medium\">{label}</span>\n )}\n </div>\n )\n }\n)\n\nColorSwatch.displayName = 'ColorSwatch'\n\nexport default ColorSwatch\n","import React from 'react'\nimport {Card, type CardProps} from './Card'\nimport {cx} from '../utils'\n\nexport type AspectRatioPreset = 'landscape' | 'portrait' | 'square'\nexport type AspectRatio = AspectRatioPreset | `${number}/${number}`\n\nexport interface ImageCardProps extends Omit<CardProps, 'title'> {\n src: string\n alt: string\n title?: React.ReactNode\n subtitle?: React.ReactNode\n aspectRatio?: AspectRatio\n objectFit?: 'cover' | 'contain'\n overlay?: React.ReactNode\n mediaClassName?: string\n contentClassName?: string\n}\n\nconst ASPECT_RATIO_PRESETS: Record<AspectRatioPreset, string> = {\n landscape: '3 / 2',\n portrait: '2 / 3',\n square: '1 / 1',\n}\n\nfunction resolveAspectRatio(ratio: AspectRatio): string {\n if (ratio in ASPECT_RATIO_PRESETS) {\n return ASPECT_RATIO_PRESETS[ratio as AspectRatioPreset]\n }\n return ratio.replace('/', ' / ')\n}\n\nexport const ImageCard = React.forwardRef<HTMLDivElement, ImageCardProps>(\n (\n {\n src,\n alt,\n title,\n subtitle,\n aspectRatio,\n objectFit = 'cover',\n overlay,\n mediaClassName,\n contentClassName,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const hasAspectRatio = aspectRatio !== undefined\n const isContain = objectFit === 'contain'\n\n return (\n <Card ref={ref} className={cx('p-0 overflow-hidden group w-fit', className)} {...props}>\n {/* Media container */}\n <div\n className={cx(\n 'relative',\n hasAspectRatio && 'overflow-hidden',\n mediaClassName\n )}\n style={hasAspectRatio ? {aspectRatio: resolveAspectRatio(aspectRatio)} : undefined}\n >\n <img\n src={src}\n alt={alt}\n className={cx(\n 'block max-w-full',\n hasAspectRatio && 'w-full h-full',\n hasAspectRatio && (isContain ? 'object-contain' : 'object-cover'),\n !hasAspectRatio && 'h-auto'\n )}\n />\n\n {/* Hover overlay */}\n {overlay && (\n <div\n className=\"absolute inset-0 bg-obsidian/80 opacity-0 group-hover:opacity-100 transition-opacity duration-200 flex items-center justify-center\">\n {overlay}\n </div>\n )}\n </div>\n\n {/* Content section */}\n {(title || subtitle || children) && (\n <div className={cx('px-4 py-4', contentClassName)}>\n {title && <h4 className=\"text-lg font-semibold leading-tight\">{title}</h4>}\n {subtitle && <p className=\"text-sm text-silver leading-normal\">{subtitle}</p>}\n {children}\n </div>\n )}\n </Card>\n )\n }\n)\n\nImageCard.displayName = 'ImageCard'","import React from 'react'\nimport ReactPlayer from 'react-player'\nimport {Card, type CardProps} from './Card'\nimport {cx} from '../utils/cx'\n\nexport type VideoAspectRatioPreset = 'video' | 'cinema' | 'square'\nexport type VideoAspectRatio = VideoAspectRatioPreset | `${number}/${number}`\n\nexport interface VideoCardProps extends Omit<CardProps, 'title'> {\n src: string\n title?: React.ReactNode\n subtitle?: React.ReactNode\n aspectRatio?: VideoAspectRatio\n playing?: boolean\n controls?: boolean\n light?: boolean | string\n volume?: number\n muted?: boolean\n loop?: boolean\n mediaClassName?: string\n contentClassName?: string\n playerProps?: any\n}\n\nconst ASPECT_RATIO_PRESETS: Record<VideoAspectRatioPreset, string> = {\n video: '16 / 9',\n cinema: '21 / 9',\n square: '1 / 1',\n}\n\nfunction resolveAspectRatio(ratio: VideoAspectRatio): string {\n if (ratio in ASPECT_RATIO_PRESETS) {\n return ASPECT_RATIO_PRESETS[ratio as VideoAspectRatioPreset]\n }\n return ratio.replace('/', ' / ')\n}\n\nexport const VideoCard = React.forwardRef<HTMLDivElement, VideoCardProps>(\n (\n {\n src,\n title,\n subtitle,\n aspectRatio = 'video',\n playing = false,\n controls = true,\n light = false,\n volume,\n muted = false,\n loop = false,\n mediaClassName,\n contentClassName,\n className,\n children,\n playerProps,\n ...props\n },\n ref\n ) => {\n const hasAspectRatio = aspectRatio !== undefined\n\n return (\n <Card ref={ref} className={cx('p-0 overflow-hidden group w-full', className)} {...props}>\n {/* Media container */}\n <div\n className={cx(\n 'relative bg-black overflow-hidden',\n mediaClassName\n )}\n style={{aspectRatio: resolveAspectRatio(aspectRatio)}}\n >\n <ReactPlayer\n src={src}\n playing={playing}\n controls={controls}\n light={light}\n volume={volume}\n muted={muted}\n loop={loop}\n width=\"100%\"\n height=\"100%\"\n className=\"absolute top-0 left-0\"\n {...playerProps}\n />\n </div>\n\n {/* Content section */}\n {(title || subtitle || children) && (\n <div className={cx('px-4 py-4', contentClassName)}>\n {title && <h4 className=\"text-lg font-semibold leading-tight\">{title}</h4>}\n {subtitle && <p\n className=\"text-sm text-silver leading-normal mt-1\">{subtitle}</p>}\n {children}\n </div>\n )}\n </Card>\n )\n }\n)\n\nVideoCard.displayName = 'VideoCard'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type SectionHeadingLevel = 'h2' | 'h3'\n\nexport interface SectionHeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n level?: SectionHeadingLevel\n}\n\nconst levelStyles = {\n h2: 'text-2xl mb-4',\n h3: 'text-xl mb-3',\n}\n\nexport const SectionHeading = React.forwardRef<HTMLHeadingElement, SectionHeadingProps>(\n ({level = 'h2', children, className, ...rest}, ref) => {\n const Component = level\n\n return (\n <Component\n ref={ref as any}\n className={cx(\n 'text-gold font-semibold tracking-tight',\n levelStyles[level],\n className\n )}\n {...rest}\n >\n {children}\n </Component>\n )\n }\n)\n\nSectionHeading.displayName = 'SectionHeading'\n\nexport default SectionHeading\n"],"mappings":"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","names":["React","import_react","React","import_react","React","ReactPlayer","import_react","React","import_react","React","import_react","React","import_react","ALIGN_MAP","JUSTIFY_MAP","GAP_MAP","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","e","import_react","React","import_react","import_lucide_react","React","import_react","React","import_react","React","import_react","VARIANT_MAP","React","import_react","import_lucide_react","React","VARIANT_STYLES","import_react","import_react_dom","import_lucide_react","React","import_react","import_react_dom","import_lucide_react","SIZE_MAP","React","import_react","POSITION_CLASSES","React","import_react","React","import_react","React","import_react","import_lucide_react","React","import_react","React","import_react","React","import_react","import_lucide_react","React","import_react","import_lucide_react","React","import_react","import_lucide_react","React","import_react","import_react","DOMPurify","React","import_react","React","variantStyles","variantStyles","React","import_react","React","import_react","sizeMap","React","import_react","React","import_react","React","import_react","import_react_player","ASPECT_RATIO_PRESETS","resolveAspectRatio","React","ReactPlayer","import_react","React"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/Button.tsx","../src/utils/cx.ts","../src/components/Input.tsx","../src/components/Card.tsx","../src/components/Container.tsx","../src/components/Row.tsx","../src/components/Col.tsx","../src/components/Stack.tsx","../src/components/Divider.tsx","../src/components/Avatar.tsx","../src/components/Badge.tsx","../src/components/Tooltip.tsx","../src/components/Table.tsx","../src/components/List.tsx","../src/components/FileChip.tsx","../src/components/AttachmentPreview.tsx","../src/components/Label.tsx","../src/components/HelperText.tsx","../src/components/Textarea.tsx","../src/components/Select.tsx","../src/components/Checkbox.tsx","../src/components/Radio.tsx","../src/components/Switch.tsx","../src/components/Slider.tsx","../src/components/InputGroup.tsx","../src/components/Alert.tsx","../src/components/Spinner.tsx","../src/components/Skeleton.tsx","../src/components/Progress.tsx","../src/components/Toast.tsx","../src/components/Modal.tsx","../src/components/Drawer.tsx","../src/components/Popover.tsx","../src/components/Dialog.tsx","../src/components/Tabs.tsx","../src/components/Accordion.tsx","../src/components/Menu.tsx","../src/components/Navbar.tsx","../src/components/Breadcrumb.tsx","../src/components/Pagination.tsx","../src/components/Stepper.tsx","../src/components/Message.tsx","../src/components/MarkdownContent.tsx","../src/components/StreamingCursor.tsx","../src/components/chat/ChatInterface.tsx","../src/components/chat/ChatView.tsx","../src/components/chat/hooks/useScrollAnchor.ts","../src/components/chat/hooks/useAdaptiveSpacer.ts","../src/components/chat/ThinkingIndicator.tsx","../src/components/chat/ChatInput.tsx","../src/components/chat/types.ts","../src/components/chat/ConversationSidebar.tsx","../src/components/chat/ArtifactsPanel.tsx","../src/components/ImageCard.tsx","../src/components/VideoCard.tsx","../src/components/chat/hooks/useArtifactParser.ts","../src/components/chat/MessageActions.tsx","../src/components/chat/BranchNavigator.tsx","../src/components/BrandIcon.tsx","../src/components/ColorSwatch.tsx","../src/components/SectionHeading.tsx"],"sourcesContent":["/**\n * Aurelius Design System\n *\n * A cohesive visual language for creative technologists.\n * Combines technical sophistication with artistic sensibility.\n *\n * CSS-first Tailwind v4 design system.\n * Import '@lukeashford/aurelius/styles/base.css' for complete styling.\n */\n\n// React components\nexport * from './components'\n\n// Version\nexport const version = '2.0.0'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type ButtonVariant =\n | 'primary'\n | 'important'\n | 'elevated'\n | 'outlined'\n | 'featured'\n | 'ghost'\n | 'danger'\n\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n size?: ButtonSize\n loading?: boolean\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({variant = 'primary', size = 'md', loading = false, className, disabled, children, ...rest},\n ref) => {\n const isDisabled = disabled || loading\n\n // Base button styles - common to all variants\n const base =\n 'inline-flex items-center justify-center font-semibold tracking-wide ' +\n 'transition-all duration-fast ' +\n 'rounded-none ' +\n 'disabled:opacity-50 disabled:cursor-not-allowed'\n\n // Variant styles\n const variantClasses = {\n primary:\n 'bg-charcoal text-white border border-gold/30 ' +\n 'hover:border-gold hover:shadow-glow hover:text-gold-light ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n important:\n 'bg-gold text-obsidian border border-gold ' +\n 'hover:bg-gold-light hover:text-obsidian ' +\n 'active:bg-gold-bright ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n elevated:\n 'bg-charcoal text-white border-0 shadow-lg ' +\n 'hover:shadow-xl hover:text-gold-light ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n outlined:\n 'bg-transparent text-white border border-ash ' +\n 'hover:border-white hover:text-white ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n featured:\n 'bg-charcoal text-white border border-gold ' +\n 'glow-sm ' +\n 'hover:glow-md hover:text-gold-light ' +\n 'active:bg-white/5 ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n ghost:\n 'bg-transparent text-gold border-0 ' +\n 'hover:text-gold-light ' +\n 'active:text-gold-bright ' +\n 'focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n\n danger:\n 'bg-error text-white border-0 ' +\n 'hover:bg-error/90 ' +\n 'active:bg-error/80 ' +\n 'focus-visible:ring-2 focus-visible:ring-error focus-visible:ring-offset-2 ' +\n 'focus-visible:ring-offset-obsidian',\n }\n\n // Size styles\n const sizeClasses = {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-4 text-sm',\n lg: 'h-12 px-6 text-base',\n xl: 'h-14 px-8 text-lg',\n }\n\n const variantClass = variantClasses[variant]\n const sizeClass = sizeClasses[size]\n\n return (\n <button\n ref={ref}\n className={cx(base, variantClass, sizeClass, loading && 'opacity-80', className)}\n disabled={isDisabled}\n {...rest}\n >\n {loading && (\n <span\n className=\"mr-2 inline-block h-4 w-4 animate-pulse rounded-full bg-gold\"\n aria-hidden\n />\n )}\n {children}\n </button>\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport default Button\n","import {twMerge} from 'tailwind-merge';\nimport {clsx, type ClassValue} from 'clsx';\n\n/**\n * Concatenates class names and merges Tailwind utility classes correctly.\n * Uses clsx for conditional classes and tailwind-merge to handle overrides.\n */\nexport function cx(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n error?: boolean\n leadingIcon?: React.ReactNode\n trailingIcon?: React.ReactNode\n}\n\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ error = false, className, leadingIcon, trailingIcon, disabled, ...rest }, ref) => {\n const base =\n 'w-full h-10 px-3 bg-graphite border border-ash rounded-none ' +\n 'text-white placeholder:text-zinc ' +\n 'transition-all duration-fast ' +\n 'focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none ' +\n 'disabled:bg-slate disabled:text-dim disabled:cursor-not-allowed'\n\n const errorCls = error ? 'border-error focus:border-error focus:ring-error' : ''\n\n return (\n <div className={cx('relative', disabled && 'opacity-90')}>\n {leadingIcon && (\n <span className=\"pointer-events-none absolute inset-y-0 left-3 flex items-center text-silver\">\n {leadingIcon}\n </span>\n )}\n <input\n ref={ref}\n className={cx(\n base,\n errorCls,\n leadingIcon ? 'pl-9' : false,\n trailingIcon ? 'pr-9' : false,\n className\n )}\n disabled={disabled}\n {...rest}\n />\n {trailingIcon && (\n <span className=\"pointer-events-none absolute inset-y-0 right-3 flex items-center text-silver\">\n {trailingIcon}\n </span>\n )}\n </div>\n )\n }\n)\n\nInput.displayName = 'Input'\n\nexport default Input\n","import React from 'react'\nimport ReactPlayer from 'react-player'\nimport {Check} from 'lucide-react'\nimport {cx} from '../utils'\n\nexport type CardVariant = 'default' | 'elevated' | 'outlined' | 'ghost' | 'featured'\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: CardVariant\n interactive?: boolean\n selected?: boolean\n noPadding?: boolean\n}\n\nconst VARIANT_STYLES: Record<CardVariant, string> = {\n default: 'bg-charcoal shadow-sm border border-gold/30',\n elevated: 'bg-charcoal shadow-lg border-0',\n outlined: 'bg-charcoal shadow-none border border-ash',\n ghost: 'bg-transparent shadow-none border-0',\n featured: 'bg-charcoal border border-gold glow-sm',\n}\n\nconst CardBase = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n variant = 'default',\n interactive = false,\n selected = false,\n noPadding = false,\n className,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'rounded-none relative',\n !noPadding && 'p-6',\n VARIANT_STYLES[variant],\n interactive &&\n 'transition-all duration-200 hover:border-gold hover:shadow-glow cursor-pointer',\n selected && 'border-gold shadow-glow-md',\n className\n )}\n {...props}\n >\n {children}\n {selected && (\n <div\n className=\"absolute top-3 right-3 flex items-center justify-center h-6 w-6 rounded-full bg-gold text-obsidian\">\n <Check className=\"h-4 w-4\"/>\n </div>\n )}\n </div>\n )\n }\n)\n\nCardBase.displayName = 'Card'\n\n// Card.Header - header section with title and optional actions\nexport interface CardHeaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: React.ReactNode\n subtitle?: React.ReactNode\n action?: React.ReactNode\n}\n\nconst CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({title, subtitle, action, className, children, ...props}, ref) => {\n return (\n <div\n ref={ref}\n className={cx('px-6 py-4 border-b border-ash', className)}\n {...props}\n >\n {(title || subtitle || action) ? (\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h3 className=\"text-lg font-semibold text-white m-0\">{title}</h3>\n )}\n {subtitle && (\n <p className=\"text-sm text-silver mt-1 m-0\">{subtitle}</p>\n )}\n </div>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n ) : (\n children\n )}\n </div>\n )\n }\n)\n\nCardHeader.displayName = 'CardHeader'\n\n// Card.Body - main content area\nexport interface CardBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n}\n\nconst CardBody = React.forwardRef<HTMLDivElement, CardBodyProps>(\n ({className, children, ...props}, ref) => {\n return (\n <div ref={ref} className={cx('px-6 py-4', className)} {...props}>\n {children}\n </div>\n )\n }\n)\n\nCardBody.displayName = 'CardBody'\n\n// Card.Footer - footer section, typically for actions\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: 'start' | 'center' | 'end' | 'between'\n}\n\nconst CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({align = 'end', className, children, ...props}, ref) => {\n const alignClass = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n }[align]\n\n return (\n <div\n ref={ref}\n className={cx(\n 'px-6 py-4 border-t border-ash flex items-center gap-3',\n alignClass,\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nCardFooter.displayName = 'CardFooter'\n\n// Card.Media - image or media section\nexport interface CardMediaProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string\n alt?: string\n aspect?: 'video' | 'square' | 'wide'\n position?: 'top' | 'bottom'\n isVideo?: boolean\n}\n\nconst CardMedia = React.forwardRef<HTMLDivElement, CardMediaProps>(\n ({\n src,\n alt = '',\n aspect = 'video',\n position = 'top',\n isVideo = false,\n className,\n children,\n ...props\n }, ref) => {\n const aspectClass = {\n video: 'aspect-video',\n square: 'aspect-square',\n wide: 'aspect-wide',\n }[aspect]\n\n return (\n <div\n ref={ref}\n className={cx(\n 'overflow-hidden relative',\n aspectClass,\n position === 'top' && 'border-b border-ash',\n position === 'bottom' && 'border-t border-ash',\n className\n )}\n {...props}\n >\n {src ? (\n isVideo ? (\n <ReactPlayer\n src={src}\n width=\"100%\"\n height=\"100%\"\n className=\"absolute top-0 left-0\"\n controls\n />\n ) : (\n <img src={src} alt={alt} className=\"w-full h-full object-cover\"/>\n )\n ) : (\n children\n )}\n </div>\n )\n }\n)\n\nCardMedia.displayName = 'CardMedia'\n\n// Compound component pattern\nexport const Card = Object.assign(CardBase, {\n Header: CardHeader,\n Body: CardBody,\n Footer: CardFooter,\n Media: CardMedia,\n})","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | 'fluid' | 'responsive'\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: ContainerSize\n}\n\nconst SIZE_CLASSES: Record<ContainerSize, string> = {\n sm: 'container-sm',\n md: 'container-md',\n lg: 'container-lg',\n xl: 'container-xl',\n fluid: 'container-fluid',\n responsive: 'container',\n}\n\nexport const Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ size = 'responsive', className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cx(SIZE_CLASSES[size], className)} {...props}>\n {children}\n </div>\n )\n }\n)\n\nContainer.displayName = 'Container'\n","import React from 'react'\nimport {cx} from '../utils'\n\nexport type RowGutter = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12\nexport type RowJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'\nexport type RowAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline'\n\nexport interface RowProps extends React.HTMLAttributes<HTMLDivElement> {\n gutter?: RowGutter\n gutterX?: RowGutter\n gutterY?: RowGutter\n justify?: RowJustify\n align?: RowAlign\n}\n\nconst JUSTIFY_MAP: Record<RowJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n}\n\nconst ALIGN_MAP: Record<RowAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n}\n\nconst GAP_MAP: Record<RowGutter, string> = {\n 0: 'gap-0',\n 1: 'gap-1',\n 2: 'gap-2',\n 3: 'gap-3',\n 4: 'gap-4',\n 5: 'gap-5',\n 6: 'gap-6',\n 8: 'gap-8',\n 10: 'gap-10',\n 12: 'gap-12',\n}\n\nconst GAP_X_MAP: Record<RowGutter, string> = {\n 0: 'gap-x-0',\n 1: 'gap-x-1',\n 2: 'gap-x-2',\n 3: 'gap-x-3',\n 4: 'gap-x-4',\n 5: 'gap-x-5',\n 6: 'gap-x-6',\n 8: 'gap-x-8',\n 10: 'gap-x-10',\n 12: 'gap-x-12',\n}\n\nconst GAP_Y_MAP: Record<RowGutter, string> = {\n 0: 'gap-y-0',\n 1: 'gap-y-1',\n 2: 'gap-y-2',\n 3: 'gap-y-3',\n 4: 'gap-y-4',\n 5: 'gap-y-5',\n 6: 'gap-y-6',\n 8: 'gap-y-8',\n 10: 'gap-y-10',\n 12: 'gap-y-12',\n}\n\nexport const Row = React.forwardRef<HTMLDivElement, RowProps>(\n ({gutter = 4, gutterX, gutterY, justify, align, className, children, ...props}, ref) => {\n // Directional gutters take precedence over uniform gutter\n const gapClass = gutterX === undefined && gutterY === undefined ? GAP_MAP[gutter] : ''\n const gapXClass = gutterX !== undefined ? GAP_X_MAP[gutterX] : ''\n const gapYClass = gutterY !== undefined ? GAP_Y_MAP[gutterY] : ''\n\n return (\n <div\n ref={ref}\n className={cx(\n 'row',\n gapClass,\n gapXClass,\n gapYClass,\n justify && JUSTIFY_MAP[justify],\n align && ALIGN_MAP[align],\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nRow.displayName = 'Row'\n","import React from 'react'\nimport {cx} from '../utils'\n\nexport type ColSpan = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'auto' | 'full'\nexport type ColOffset = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11\nexport type ColOrder = 'first' | 'last' | 'none' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12\n\nexport interface ResponsiveValue<T> {\n base?: T\n sm?: T\n md?: T\n lg?: T\n xl?: T\n '2xl'?: T\n}\n\nexport interface ColProps extends React.HTMLAttributes<HTMLDivElement> {\n span?: ColSpan | ResponsiveValue<ColSpan>\n offset?: ColOffset | ResponsiveValue<ColOffset>\n order?: ColOrder | ResponsiveValue<ColOrder>\n}\n\ntype Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nconst SPAN_CLASS_MAP: Record<Breakpoint, Record<ColSpan, string>> = {\n base: {\n 1: 'col-span-1',\n 2: 'col-span-2',\n 3: 'col-span-3',\n 4: 'col-span-4',\n 5: 'col-span-5',\n 6: 'col-span-6',\n 7: 'col-span-7',\n 8: 'col-span-8',\n 9: 'col-span-9',\n 10: 'col-span-10',\n 11: 'col-span-11',\n 12: 'col-span-12',\n auto: 'col-auto',\n full: 'col-span-full',\n },\n sm: {\n 1: 'sm:col-span-1',\n 2: 'sm:col-span-2',\n 3: 'sm:col-span-3',\n 4: 'sm:col-span-4',\n 5: 'sm:col-span-5',\n 6: 'sm:col-span-6',\n 7: 'sm:col-span-7',\n 8: 'sm:col-span-8',\n 9: 'sm:col-span-9',\n 10: 'sm:col-span-10',\n 11: 'sm:col-span-11',\n 12: 'sm:col-span-12',\n auto: 'sm:col-auto',\n full: 'sm:col-span-full',\n },\n md: {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n 5: 'md:col-span-5',\n 6: 'md:col-span-6',\n 7: 'md:col-span-7',\n 8: 'md:col-span-8',\n 9: 'md:col-span-9',\n 10: 'md:col-span-10',\n 11: 'md:col-span-11',\n 12: 'md:col-span-12',\n auto: 'md:col-auto',\n full: 'md:col-span-full',\n },\n lg: {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n 5: 'lg:col-span-5',\n 6: 'lg:col-span-6',\n 7: 'lg:col-span-7',\n 8: 'lg:col-span-8',\n 9: 'lg:col-span-9',\n 10: 'lg:col-span-10',\n 11: 'lg:col-span-11',\n 12: 'lg:col-span-12',\n auto: 'lg:col-auto',\n full: 'lg:col-span-full',\n },\n xl: {\n 1: 'xl:col-span-1',\n 2: 'xl:col-span-2',\n 3: 'xl:col-span-3',\n 4: 'xl:col-span-4',\n 5: 'xl:col-span-5',\n 6: 'xl:col-span-6',\n 7: 'xl:col-span-7',\n 8: 'xl:col-span-8',\n 9: 'xl:col-span-9',\n 10: 'xl:col-span-10',\n 11: 'xl:col-span-11',\n 12: 'xl:col-span-12',\n auto: 'xl:col-auto',\n full: 'xl:col-span-full',\n },\n '2xl': {\n 1: '2xl:col-span-1',\n 2: '2xl:col-span-2',\n 3: '2xl:col-span-3',\n 4: '2xl:col-span-4',\n 5: '2xl:col-span-5',\n 6: '2xl:col-span-6',\n 7: '2xl:col-span-7',\n 8: '2xl:col-span-8',\n 9: '2xl:col-span-9',\n 10: '2xl:col-span-10',\n 11: '2xl:col-span-11',\n 12: '2xl:col-span-12',\n auto: '2xl:col-auto',\n full: '2xl:col-span-full',\n },\n}\n\nconst OFFSET_CLASS_MAP: Record<Breakpoint, Record<ColOffset, string>> = {\n base: {\n 0: '',\n 1: 'col-start-2',\n 2: 'col-start-3',\n 3: 'col-start-4',\n 4: 'col-start-5',\n 5: 'col-start-6',\n 6: 'col-start-7',\n 7: 'col-start-8',\n 8: 'col-start-9',\n 9: 'col-start-10',\n 10: 'col-start-11',\n 11: 'col-start-12',\n },\n sm: {\n 0: '',\n 1: 'sm:col-start-2',\n 2: 'sm:col-start-3',\n 3: 'sm:col-start-4',\n 4: 'sm:col-start-5',\n 5: 'sm:col-start-6',\n 6: 'sm:col-start-7',\n 7: 'sm:col-start-8',\n 8: 'sm:col-start-9',\n 9: 'sm:col-start-10',\n 10: 'sm:col-start-11',\n 11: 'sm:col-start-12',\n },\n md: {\n 0: '',\n 1: 'md:col-start-2',\n 2: 'md:col-start-3',\n 3: 'md:col-start-4',\n 4: 'md:col-start-5',\n 5: 'md:col-start-6',\n 6: 'md:col-start-7',\n 7: 'md:col-start-8',\n 8: 'md:col-start-9',\n 9: 'md:col-start-10',\n 10: 'md:col-start-11',\n 11: 'md:col-start-12',\n },\n lg: {\n 0: '',\n 1: 'lg:col-start-2',\n 2: 'lg:col-start-3',\n 3: 'lg:col-start-4',\n 4: 'lg:col-start-5',\n 5: 'lg:col-start-6',\n 6: 'lg:col-start-7',\n 7: 'lg:col-start-8',\n 8: 'lg:col-start-9',\n 9: 'lg:col-start-10',\n 10: 'lg:col-start-11',\n 11: 'lg:col-start-12',\n },\n xl: {\n 0: '',\n 1: 'xl:col-start-2',\n 2: 'xl:col-start-3',\n 3: 'xl:col-start-4',\n 4: 'xl:col-start-5',\n 5: 'xl:col-start-6',\n 6: 'xl:col-start-7',\n 7: 'xl:col-start-8',\n 8: 'xl:col-start-9',\n 9: 'xl:col-start-10',\n 10: 'xl:col-start-11',\n 11: 'xl:col-start-12',\n },\n '2xl': {\n 0: '',\n 1: '2xl:col-start-2',\n 2: '2xl:col-start-3',\n 3: '2xl:col-start-4',\n 4: '2xl:col-start-5',\n 5: '2xl:col-start-6',\n 6: '2xl:col-start-7',\n 7: '2xl:col-start-8',\n 8: '2xl:col-start-9',\n 9: '2xl:col-start-10',\n 10: '2xl:col-start-11',\n 11: '2xl:col-start-12',\n },\n}\n\nconst ORDER_CLASS_MAP: Record<Breakpoint, Record<ColOrder, string>> = {\n base: {\n first: 'order-first',\n last: 'order-last',\n none: 'order-none',\n 1: 'order-1',\n 2: 'order-2',\n 3: 'order-3',\n 4: 'order-4',\n 5: 'order-5',\n 6: 'order-6',\n 7: 'order-7',\n 8: 'order-8',\n 9: 'order-9',\n 10: 'order-10',\n 11: 'order-11',\n 12: 'order-12',\n },\n sm: {\n first: 'sm:order-first',\n last: 'sm:order-last',\n none: 'sm:order-none',\n 1: 'sm:order-1',\n 2: 'sm:order-2',\n 3: 'sm:order-3',\n 4: 'sm:order-4',\n 5: 'sm:order-5',\n 6: 'sm:order-6',\n 7: 'sm:order-7',\n 8: 'sm:order-8',\n 9: 'sm:order-9',\n 10: 'sm:order-10',\n 11: 'sm:order-11',\n 12: 'sm:order-12',\n },\n md: {\n first: 'md:order-first',\n last: 'md:order-last',\n none: 'md:order-none',\n 1: 'md:order-1',\n 2: 'md:order-2',\n 3: 'md:order-3',\n 4: 'md:order-4',\n 5: 'md:order-5',\n 6: 'md:order-6',\n 7: 'md:order-7',\n 8: 'md:order-8',\n 9: 'md:order-9',\n 10: 'md:order-10',\n 11: 'md:order-11',\n 12: 'md:order-12',\n },\n lg: {\n first: 'lg:order-first',\n last: 'lg:order-last',\n none: 'lg:order-none',\n 1: 'lg:order-1',\n 2: 'lg:order-2',\n 3: 'lg:order-3',\n 4: 'lg:order-4',\n 5: 'lg:order-5',\n 6: 'lg:order-6',\n 7: 'lg:order-7',\n 8: 'lg:order-8',\n 9: 'lg:order-9',\n 10: 'lg:order-10',\n 11: 'lg:order-11',\n 12: 'lg:order-12',\n },\n xl: {\n first: 'xl:order-first',\n last: 'xl:order-last',\n none: 'xl:order-none',\n 1: 'xl:order-1',\n 2: 'xl:order-2',\n 3: 'xl:order-3',\n 4: 'xl:order-4',\n 5: 'xl:order-5',\n 6: 'xl:order-6',\n 7: 'xl:order-7',\n 8: 'xl:order-8',\n 9: 'xl:order-9',\n 10: 'xl:order-10',\n 11: 'xl:order-11',\n 12: 'xl:order-12',\n },\n '2xl': {\n first: '2xl:order-first',\n last: '2xl:order-last',\n none: '2xl:order-none',\n 1: '2xl:order-1',\n 2: '2xl:order-2',\n 3: '2xl:order-3',\n 4: '2xl:order-4',\n 5: '2xl:order-5',\n 6: '2xl:order-6',\n 7: '2xl:order-7',\n 8: '2xl:order-8',\n 9: '2xl:order-9',\n 10: '2xl:order-10',\n 11: '2xl:order-11',\n 12: '2xl:order-12',\n },\n}\n\nfunction isResponsiveValue<T>(value: T | ResponsiveValue<T>): value is ResponsiveValue<T> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction buildResponsiveClasses<T extends string | number>(\n value: T | ResponsiveValue<T> | undefined,\n classMap: Record<Breakpoint, Record<T, string>>\n): string[] {\n if (value === undefined) {\n return []\n }\n\n if (!isResponsiveValue(value)) {\n const cls = classMap.base[value]\n return cls ? [cls] : []\n }\n\n const classes: string[] = []\n for (const [breakpoint, val] of Object.entries(value) as [Breakpoint, T][]) {\n if (val !== undefined) {\n const cls = classMap[breakpoint]?.[val]\n if (cls) {\n classes.push(cls)\n }\n }\n }\n return classes\n}\n\nexport const Col = React.forwardRef<HTMLDivElement, ColProps>(\n ({span, offset, order, className, children, ...props}, ref) => {\n const spanClasses = buildResponsiveClasses(span, SPAN_CLASS_MAP)\n const offsetClasses = buildResponsiveClasses(offset, OFFSET_CLASS_MAP)\n const orderClasses = buildResponsiveClasses(order, ORDER_CLASS_MAP)\n\n // Default to full width if no span specified\n const hasSpan = span !== undefined\n const defaultSpan = hasSpan ? '' : 'col-span-12'\n\n return (\n <div\n ref={ref}\n className={cx(\n defaultSpan,\n ...spanClasses,\n ...offsetClasses,\n ...orderClasses,\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nCol.displayName = 'Col'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type StackDirection = 'horizontal' | 'vertical'\nexport type StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline'\nexport type StackJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'\nexport type StackGap = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: StackDirection\n align?: StackAlign\n justify?: StackJustify\n gap?: StackGap\n wrap?: boolean\n as?: 'div' | 'section' | 'article' | 'nav' | 'aside' | 'header' | 'footer' | 'main'\n}\n\nconst ALIGN_MAP: Record<StackAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n}\n\nconst JUSTIFY_MAP: Record<StackJustify, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n}\n\nconst GAP_MAP: Record<StackGap, string> = {\n 0: 'gap-0',\n 1: 'gap-1',\n 2: 'gap-2',\n 3: 'gap-3',\n 4: 'gap-4',\n 5: 'gap-5',\n 6: 'gap-6',\n 8: 'gap-8',\n 10: 'gap-10',\n 12: 'gap-12',\n}\n\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(\n (\n {\n direction = 'vertical',\n align,\n justify,\n gap = 4,\n wrap = false,\n as: Component = 'div',\n className,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <Component\n ref={ref}\n className={cx(\n 'flex',\n direction === 'horizontal' ? 'flex-row' : 'flex-col',\n align && ALIGN_MAP[align],\n justify && JUSTIFY_MAP[justify],\n GAP_MAP[gap],\n wrap && 'flex-wrap',\n className\n )}\n {...props}\n >\n {children}\n </Component>\n )\n }\n)\n\nStack.displayName = 'Stack'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type DividerOrientation = 'horizontal' | 'vertical'\nexport type DividerVariant = 'solid' | 'dashed' | 'dotted'\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLHRElement> {\n orientation?: DividerOrientation\n variant?: DividerVariant\n label?: React.ReactNode\n color?: 'default' | 'gold' | 'muted'\n}\n\nconst COLOR_MAP: Record<string, string> = {\n default: 'border-ash',\n gold: 'border-gold/50',\n muted: 'border-slate',\n}\n\nconst VARIANT_MAP: Record<DividerVariant, string> = {\n solid: 'border-solid',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n}\n\nexport const Divider = React.forwardRef<HTMLHRElement, DividerProps>(\n (\n {\n orientation = 'horizontal',\n variant = 'solid',\n label,\n color = 'default',\n className,\n ...props\n },\n ref\n ) => {\n const isHorizontal = orientation === 'horizontal'\n\n if (label && isHorizontal) {\n return (\n <div\n className={cx('flex items-center gap-4', className)}\n role=\"separator\"\n aria-orientation={orientation}\n >\n <div\n className={cx(\n 'flex-1 border-t',\n VARIANT_MAP[variant],\n COLOR_MAP[color]\n )}\n />\n <span className=\"text-sm text-silver shrink-0\">{label}</span>\n <div\n className={cx(\n 'flex-1 border-t',\n VARIANT_MAP[variant],\n COLOR_MAP[color]\n )}\n />\n </div>\n )\n }\n\n return (\n <hr\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n className={cx(\n isHorizontal ? 'border-t w-full' : 'border-l h-full',\n VARIANT_MAP[variant],\n COLOR_MAP[color],\n 'border-0',\n isHorizontal ? 'border-t' : 'border-l',\n className\n )}\n {...props}\n />\n )\n }\n)\n\nDivider.displayName = 'Divider'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\nexport type AvatarStatus = 'online' | 'offline' | 'busy'\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string\n alt?: string\n name?: string\n size?: AvatarSize\n status?: AvatarStatus\n}\n\nconst sizeMap: Record<AvatarSize, string> = {\n xs: 'h-6 w-6 text-[10px]',\n sm: 'h-8 w-8 text-[11px]',\n md: 'h-10 w-10 text-xs',\n lg: 'h-12 w-12 text-sm',\n xl: 'h-16 w-16 text-base',\n '2xl': 'h-24 w-24 text-lg',\n}\n\nfunction initials(name?: string) {\n if (!name) return ''\n const parts = name.trim().split(/\\s+/)\n return parts.slice(0, 2).map(p => p[0]!.toUpperCase()).join('')\n}\n\nexport const Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n ({ src, alt = '', name, size = 'md', status, className, ...rest }, ref) => {\n const statusColor =\n status === 'online' ? 'bg-success' : status === 'busy' ? 'bg-warning' : 'bg-zinc'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'relative inline-flex items-center justify-center rounded-full border-2 border-ash bg-slate text-silver font-semibold select-none overflow-hidden',\n sizeMap[size],\n className\n )}\n {...rest}\n >\n {src ? (\n <img src={src} alt={alt || name || 'Avatar'} className=\"h-full w-full object-cover\" />\n ) : (\n <span aria-hidden>{initials(name) || '·'}</span>\n )}\n {status && (\n <span\n className={cx(\n 'absolute bottom-0 right-0 rounded-full ring-2 ring-charcoal',\n // 25% of avatar size\n size === 'xs' ? 'h-1.5 w-1.5' :\n size === 'sm' ? 'h-2 w-2' :\n size === 'md' ? 'h-2.5 w-2.5' :\n size === 'lg' ? 'h-3 w-3' :\n size === 'xl' ? 'h-4 w-4' : 'h-5 w-5',\n statusColor\n )}\n />\n )}\n </div>\n )\n }\n)\n\nAvatar.displayName = 'Avatar'\n\nexport default Avatar\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type BadgeVariant = 'default' | 'gold' | 'success' | 'error' | 'warning' | 'info'\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant\n}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ variant = 'default', className, ...rest }, ref) => {\n // Base badge styles\n const base = 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium border'\n\n // Variant styles\n const variantClasses = {\n default: 'bg-slate text-silver border-slate',\n gold: 'bg-gold/20 text-gold border-gold/30',\n success: 'bg-success/20 text-success border-success/30',\n error: 'bg-error/20 text-error border-error/30',\n warning: 'bg-warning/20 text-warning border-warning/30',\n info: 'bg-info/20 text-info border-info/30',\n }\n\n const variantClass = variantClasses[variant]\n\n return <span ref={ref} className={cx(base, variantClass, className)} {...rest} />\n }\n)\n\nBadge.displayName = 'Badge'\n\nexport default Badge\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type TooltipSide = 'top' | 'right' | 'bottom' | 'left'\n\nexport interface TooltipProps {\n content: React.ReactNode\n children: React.ReactElement\n open?: boolean\n side?: TooltipSide\n}\n\n// Simple, controlled tooltip. Consumer handles open state.\nexport const Tooltip: React.FC<TooltipProps> = ({ content, children, open = false, side = 'top' }) => {\n return (\n <span className=\"relative inline-block\">\n {children}\n <span\n role=\"tooltip\"\n className={cx(\n 'pointer-events-none absolute z-50 whitespace-nowrap border border-ash bg-graphite px-3 py-1.5 text-sm text-white shadow-lg transition-opacity duration-200 ease-out',\n open ? 'opacity-100' : 'opacity-0',\n side === 'top' && 'left-1/2 -translate-x-1/2 -top-2 -translate-y-full',\n side === 'bottom' && 'left-1/2 -translate-x-1/2 -bottom-2 translate-y-full',\n side === 'left' && 'top-1/2 -translate-y-1/2 -left-2 -translate-x-full',\n side === 'right' && 'top-1/2 -translate-y-1/2 -right-2 translate-x-full'\n )}\n >\n {content}\n </span>\n </span>\n )\n}\n\nexport default Tooltip\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\n// Table container\nexport interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {\n responsive?: boolean\n}\n\nexport const Table = React.forwardRef<HTMLTableElement, TableProps>(\n ({ responsive = true, className, children, ...props }, ref) => {\n const table = (\n <table\n ref={ref}\n className={cx('w-full text-sm', className)}\n {...props}\n >\n {children}\n </table>\n )\n\n if (responsive) {\n return <div className=\"w-full overflow-x-auto\">{table}</div>\n }\n\n return table\n }\n)\n\nTable.displayName = 'Table'\n\n// Table header\nexport interface TableHeaderProps extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nexport const TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ className, children, ...props }, ref) => (\n <thead\n ref={ref}\n className={cx('bg-graphite', className)}\n {...props}\n >\n {children}\n </thead>\n )\n)\n\nTableHeader.displayName = 'TableHeader'\n\n// Table body\nexport interface TableBodyProps extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nexport const TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ className, children, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cx('divide-y divide-ash', className)}\n {...props}\n >\n {children}\n </tbody>\n )\n)\n\nTableBody.displayName = 'TableBody'\n\n// Table footer\nexport interface TableFooterProps extends React.HTMLAttributes<HTMLTableSectionElement> {}\n\nexport const TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(\n ({ className, children, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cx('bg-graphite font-medium', className)}\n {...props}\n >\n {children}\n </tfoot>\n )\n)\n\nTableFooter.displayName = 'TableFooter'\n\n// Table row\nexport interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\n hoverable?: boolean\n selected?: boolean\n}\n\nexport const TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ hoverable = true, selected = false, className, children, ...props }, ref) => (\n <tr\n ref={ref}\n className={cx(\n 'transition-colors duration-fast',\n hoverable && 'hover:bg-graphite/50',\n selected && 'bg-gold/10',\n className\n )}\n {...props}\n >\n {children}\n </tr>\n )\n)\n\nTableRow.displayName = 'TableRow'\n\n// Table header cell\nexport interface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n sortable?: boolean\n sortDirection?: 'asc' | 'desc' | null\n}\n\nexport const TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ sortable, sortDirection, className, children, ...props }, ref) => (\n <th\n ref={ref}\n className={cx(\n 'px-4 py-3 text-left font-semibold text-silver',\n sortable && 'cursor-pointer hover:text-white select-none',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {children}\n {sortable && sortDirection && (\n <span className=\"text-gold\">\n {sortDirection === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </div>\n </th>\n )\n)\n\nTableHead.displayName = 'TableHead'\n\n// Table data cell\nexport interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {}\n\nexport const TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, children, ...props }, ref) => (\n <td\n ref={ref}\n className={cx('px-4 py-3 text-white', className)}\n {...props}\n >\n {children}\n </td>\n )\n)\n\nTableCell.displayName = 'TableCell'\n\n// Table caption\nexport interface TableCaptionProps extends React.HTMLAttributes<HTMLTableCaptionElement> {}\n\nexport const TableCaption = React.forwardRef<HTMLTableCaptionElement, TableCaptionProps>(\n ({ className, children, ...props }, ref) => (\n <caption\n ref={ref}\n className={cx('mt-4 text-sm text-silver', className)}\n {...props}\n >\n {children}\n </caption>\n )\n)\n\nTableCaption.displayName = 'TableCaption'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\n// List container\nexport interface ListProps extends React.HTMLAttributes<HTMLUListElement> {\n variant?: 'default' | 'bordered' | 'divided'\n ordered?: boolean\n}\n\nexport const List = React.forwardRef<HTMLUListElement, ListProps>(\n ({ variant = 'default', ordered = false, className, children, ...props }, ref) => {\n const Component = ordered ? 'ol' : 'ul'\n\n return (\n <Component\n ref={ref as any}\n className={cx(\n 'list-none m-0 p-0',\n variant === 'bordered' && 'border border-ash',\n variant === 'divided' && 'divide-y divide-ash',\n className\n )}\n {...props}\n >\n {children}\n </Component>\n )\n }\n)\n\nList.displayName = 'List'\n\n// ListItem\nexport interface ListItemProps extends React.LiHTMLAttributes<HTMLLIElement> {\n leading?: React.ReactNode\n trailing?: React.ReactNode\n interactive?: boolean\n selected?: boolean\n disabled?: boolean\n}\n\nexport const ListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n (\n {\n leading,\n trailing,\n interactive = false,\n selected = false,\n disabled = false,\n className,\n children,\n onClick,\n ...props\n },\n ref\n ) => {\n const handleClick = (e: React.MouseEvent<HTMLLIElement>) => {\n if (disabled) return\n onClick?.(e)\n }\n\n return (\n <li\n ref={ref}\n onClick={handleClick}\n className={cx(\n 'flex items-center gap-3 px-4 py-3',\n interactive && 'cursor-pointer transition-colors duration-fast',\n interactive && !disabled && 'hover:bg-graphite',\n selected && 'bg-gold/10',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n {...props}\n >\n {leading && <div className=\"shrink-0\">{leading}</div>}\n <div className=\"flex-1 min-w-0\">{children}</div>\n {trailing && <div className=\"shrink-0\">{trailing}</div>}\n </li>\n )\n }\n)\n\nListItem.displayName = 'ListItem'\n\n// ListItemText - for structured text content\nexport interface ListItemTextProps extends React.HTMLAttributes<HTMLDivElement> {\n primary: React.ReactNode\n secondary?: React.ReactNode\n}\n\nexport const ListItemText = React.forwardRef<HTMLDivElement, ListItemTextProps>(\n ({ primary, secondary, className, ...props }, ref) => {\n return (\n <div ref={ref} className={cx('flex flex-col', className)} {...props}>\n <span className=\"text-sm font-medium text-white\">{primary}</span>\n {secondary && (\n <span className=\"text-xs text-silver mt-0.5\">{secondary}</span>\n )}\n </div>\n )\n }\n)\n\nListItemText.displayName = 'ListItemText'\n\n// ListSubheader - section header within a list\nexport interface ListSubheaderProps extends React.HTMLAttributes<HTMLLIElement> {}\n\nexport const ListSubheader = React.forwardRef<HTMLLIElement, ListSubheaderProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <li\n ref={ref}\n className={cx(\n 'px-4 py-2 text-xs font-semibold text-gold uppercase tracking-wider bg-graphite',\n className\n )}\n {...props}\n >\n {children}\n </li>\n )\n }\n)\n\nListSubheader.displayName = 'ListSubheader'\n","import React from 'react'\nimport {cx} from '../utils/cx'\nimport {File, FileImage, FileVideo, FileAudio, FileText, FileCode, FileArchive, X, Loader2} from 'lucide-react'\n\nexport type FileChipStatus = 'pending' | 'uploading' | 'complete' | 'error'\n\nexport interface FileChipProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /**\n * File name to display\n */\n name: string\n /**\n * File size in bytes (optional, will be formatted)\n */\n size?: number\n /**\n * MIME type for icon selection\n */\n type?: string\n /**\n * Upload/processing status\n */\n status?: FileChipStatus\n /**\n * Preview image URL (for images)\n */\n previewUrl?: string\n /**\n * Called when the remove button is clicked\n */\n onRemove?: () => void\n /**\n * Whether the chip is removable\n */\n removable?: boolean\n /**\n * Error message to display (when status is 'error')\n */\n error?: string\n}\n\n/**\n * Format bytes to human-readable string\n */\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B'\n const k = 1024\n const sizes = ['B', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`\n}\n\n/**\n * Get icon component based on MIME type\n */\nfunction getFileIcon(type?: string) {\n if (!type) return File\n\n if (type.startsWith('image/')) return FileImage\n if (type.startsWith('video/')) return FileVideo\n if (type.startsWith('audio/')) return FileAudio\n if (type.startsWith('text/')) return FileText\n if (type.includes('javascript') || type.includes('typescript') || type.includes('json') || type.includes('xml')) {\n return FileCode\n }\n if (type.includes('zip') || type.includes('rar') || type.includes('tar') || type.includes('gz')) {\n return FileArchive\n }\n\n return File\n}\n\nconst statusStyles: Record<FileChipStatus, string> = {\n pending: 'border-silver/30',\n uploading: 'border-gold/50',\n complete: 'border-success/50',\n error: 'border-error/50',\n}\n\nexport const FileChip = React.forwardRef<HTMLDivElement, FileChipProps>(\n (\n {\n name,\n size,\n type,\n status = 'complete',\n previewUrl,\n onRemove,\n removable = true,\n error,\n className,\n ...rest\n },\n ref\n ) => {\n const Icon = getFileIcon(type)\n const isImage = type?.startsWith('image/')\n const showPreview = isImage && previewUrl\n\n return (\n <div\n ref={ref}\n className={cx(\n 'group relative inline-flex items-center gap-2 px-2 py-1.5',\n 'bg-charcoal border text-sm text-white',\n 'transition-colors duration-150',\n statusStyles[status],\n status === 'error' && 'bg-error/10',\n className\n )}\n role=\"listitem\"\n {...rest}\n >\n {/* Preview thumbnail or icon */}\n {showPreview ? (\n <div className=\"w-8 h-8 flex-shrink-0 overflow-hidden bg-slate\">\n <img\n src={previewUrl}\n alt=\"\"\n className=\"w-full h-full object-cover\"\n />\n </div>\n ) : (\n <Icon className={cx(\n 'w-4 h-4 flex-shrink-0',\n status === 'error' ? 'text-error' : 'text-silver'\n )} />\n )}\n\n {/* File info */}\n <div className=\"flex flex-col min-w-0 flex-1\">\n <span className=\"truncate max-w-40\" title={name}>\n {name}\n </span>\n {size !== undefined && status !== 'error' && (\n <span className=\"text-xs text-silver/60\">\n {formatBytes(size)}\n </span>\n )}\n {status === 'error' && error && (\n <span className=\"text-xs text-error truncate\" title={error}>\n {error}\n </span>\n )}\n </div>\n\n {/* Status indicator */}\n {status === 'uploading' && (\n <Loader2 className=\"w-3.5 h-3.5 text-gold animate-spin flex-shrink-0\" />\n )}\n {status === 'pending' && (\n <div className=\"w-2 h-2 rounded-full bg-silver/50 flex-shrink-0\" />\n )}\n\n {/* Remove button */}\n {removable && onRemove && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n onRemove()\n }}\n className={cx(\n 'p-0.5 text-silver/40 hover:text-white transition-colors',\n 'hover:bg-white/10',\n 'opacity-0 group-hover:opacity-100',\n 'focus:opacity-100'\n )}\n aria-label={`Remove ${name}`}\n >\n <X className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n )\n }\n)\n\nFileChip.displayName = 'FileChip'\n\nexport default FileChip\n","import React from 'react'\nimport {cx} from '../utils/cx'\nimport {FileChip, type FileChipStatus} from './FileChip'\n\nexport interface AttachmentItem {\n /**\n * Unique identifier\n */\n id: string\n /**\n * The File object\n */\n file: File\n /**\n * Blob URL for image previews\n */\n previewUrl?: string\n /**\n * Current status\n */\n status: FileChipStatus\n /**\n * Error message if status is 'error'\n */\n error?: string\n}\n\nexport interface AttachmentPreviewProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Array of attachments to display\n */\n attachments: AttachmentItem[]\n /**\n * Called when an attachment should be removed\n */\n onRemove?: (id: string) => void\n /**\n * Whether attachments are removable\n */\n removable?: boolean\n /**\n * Maximum number of attachments to show before collapsing\n * Set to 0 or undefined to show all\n */\n maxVisible?: number\n}\n\nexport const AttachmentPreview = React.forwardRef<HTMLDivElement, AttachmentPreviewProps>(\n (\n {\n attachments,\n onRemove,\n removable = true,\n maxVisible,\n className,\n ...rest\n },\n ref\n ) => {\n if (attachments.length === 0) return null\n\n const visibleAttachments = maxVisible && maxVisible > 0\n ? attachments.slice(0, maxVisible)\n : attachments\n\n const hiddenCount = maxVisible && maxVisible > 0\n ? Math.max(0, attachments.length - maxVisible)\n : 0\n\n return (\n <div\n ref={ref}\n className={cx('flex flex-wrap gap-2', className)}\n role=\"list\"\n aria-label=\"Attached files\"\n {...rest}\n >\n {visibleAttachments.map((attachment) => (\n <FileChip\n key={attachment.id}\n name={attachment.file.name}\n size={attachment.file.size}\n type={attachment.file.type}\n status={attachment.status}\n previewUrl={attachment.previewUrl}\n error={attachment.error}\n removable={removable}\n onRemove={onRemove ? () => onRemove(attachment.id) : undefined}\n />\n ))}\n {hiddenCount > 0 && (\n <div className=\"inline-flex items-center px-2 py-1.5 bg-charcoal border border-silver/30 text-sm text-silver\">\n +{hiddenCount} more\n </div>\n )}\n </div>\n )\n }\n)\n\nAttachmentPreview.displayName = 'AttachmentPreview'\n\nexport default AttachmentPreview\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n required?: boolean\n}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, required, children, ...rest }, ref) => {\n return (\n <label\n ref={ref}\n className={cx('block text-sm font-medium text-silver mb-1.5', className)}\n {...rest}\n >\n {children}\n {required && <span className=\"text-error ml-1\">*</span>}\n </label>\n )\n }\n)\n\nLabel.displayName = 'Label'\n\nexport default Label\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface HelperTextProps extends React.HTMLAttributes<HTMLParagraphElement> {\n error?: boolean\n}\n\nexport const HelperText = React.forwardRef<HTMLParagraphElement, HelperTextProps>(\n ({ className, error, children, ...rest }, ref) => {\n return (\n <p\n ref={ref}\n className={cx('mt-1.5 text-xs', error ? 'text-error' : 'text-silver', className)}\n {...rest}\n >\n {children}\n </p>\n )\n }\n)\n\nHelperText.displayName = 'HelperText'\n\nexport default HelperText\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean\n}\n\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ error = false, className, disabled, ...rest }, ref) => {\n // Base textarea styles\n const base =\n 'w-full px-3 py-2 bg-graphite border border-ash rounded-none ' +\n 'text-white placeholder:text-zinc min-h-[80px] ' +\n 'transition-all duration-fast ' +\n 'focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none ' +\n 'disabled:bg-slate disabled:text-dim disabled:cursor-not-allowed'\n\n // Error styles\n const errorCls = error ? 'border-error focus:border-error focus:ring-error' : ''\n\n return (\n <textarea\n ref={ref}\n className={cx(base, errorCls, disabled && 'opacity-90', className)}\n disabled={disabled}\n {...rest}\n />\n )\n }\n)\n\nTextarea.displayName = 'Textarea'\n\nexport default Textarea\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface SelectOption {\n label: string\n value: string | number\n}\n\nexport interface SelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {\n error?: boolean\n options?: SelectOption[]\n}\n\nconst selectBgImage = \"url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23C9A227' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\\\")\"\n\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ error = false, className, disabled, options, children, ...rest }, ref) => {\n return (\n <select\n ref={ref}\n className={cx(\n 'appearance-none bg-graphite border border-ash rounded-none text-white px-3 py-2 pr-8',\n 'focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n error && 'border-error focus:border-error focus:ring-error',\n className\n )}\n style={{\n backgroundImage: selectBgImage,\n backgroundPosition: 'right 0.5rem center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: '1.5em 1.5em',\n }}\n disabled={disabled}\n {...rest}\n >\n {options\n ? options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))\n : children}\n </select>\n )\n }\n)\n\nSelect.displayName = 'Select'\n\nexport default Select\n","import React, { useCallback } from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string\n}\n\nconst checkmarkSvg = \"url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='%231A1A1A' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\\\")\"\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, id, ...rest }, ref) => {\n const inputId = id || rest.name || Math.random().toString(36).substr(2, 9)\n\n const setRef = useCallback((node: HTMLInputElement | null) => {\n if (node) {\n // Set initial background image based on checked state\n if (node.checked) {\n node.style.backgroundImage = checkmarkSvg\n }\n }\n // Forward ref\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }, [ref])\n\n return (\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id={inputId}\n ref={setRef}\n className={cx(\n 'appearance-none h-4 w-4 border border-ash bg-graphite',\n 'checked:bg-gold checked:border-gold',\n 'focus:ring-1 focus:ring-gold focus:ring-offset-1 focus:ring-offset-obsidian',\n 'transition duration-200 ease-in-out cursor-pointer',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n className\n )}\n style={{\n backgroundPosition: 'center',\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }}\n onChange={(e) => {\n const input = e.currentTarget\n if (input.checked) {\n input.style.backgroundImage = checkmarkSvg\n } else {\n input.style.backgroundImage = 'none'\n }\n rest.onChange?.(e)\n }}\n {...rest}\n />\n {label && (\n <label htmlFor={inputId} className=\"ml-2 text-sm text-silver cursor-pointer select-none\">\n {label}\n </label>\n )}\n </div>\n )\n }\n)\n\nCheckbox.displayName = 'Checkbox'\n\nexport default Checkbox\n","import React, { useCallback } from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: string\n}\n\nconst radioDotSvg = \"url(\\\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='%231A1A1A' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\\\")\"\n\nexport const Radio = React.forwardRef<HTMLInputElement, RadioProps>(\n ({ className, label, id, ...rest }, ref) => {\n const inputId = id || rest.name || Math.random().toString(36).substr(2, 9)\n\n const setRef = useCallback((node: HTMLInputElement | null) => {\n if (node) {\n // Set initial background image based on checked state\n if (node.checked) {\n node.style.backgroundImage = radioDotSvg\n }\n }\n // Forward ref\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }, [ref])\n\n return (\n <div className=\"flex items-center\">\n <input\n type=\"radio\"\n id={inputId}\n ref={setRef}\n className={cx(\n 'appearance-none h-4 w-4 border border-ash rounded-full bg-graphite',\n 'checked:bg-gold checked:border-gold',\n 'focus:ring-1 focus:ring-gold focus:ring-offset-1 focus:ring-offset-obsidian',\n 'transition duration-200 ease-in-out cursor-pointer',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n className\n )}\n style={{\n backgroundPosition: 'center',\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n }}\n onChange={(e) => {\n const input = e.currentTarget\n if (input.checked) {\n input.style.backgroundImage = radioDotSvg\n // Clear other radios in the same group\n if (input.name) {\n const radios = document.querySelectorAll<HTMLInputElement>(`input[type=\"radio\"][name=\"${input.name}\"]`)\n radios.forEach((radio) => {\n if (radio !== input) {\n radio.style.backgroundImage = 'none'\n }\n })\n }\n } else {\n input.style.backgroundImage = 'none'\n }\n rest.onChange?.(e)\n }}\n {...rest}\n />\n {label && (\n <label htmlFor={inputId} className=\"ml-2 text-sm text-silver cursor-pointer select-none\">\n {label}\n </label>\n )}\n </div>\n )\n }\n)\n\nRadio.displayName = 'Radio'\n\nexport default Radio\n","import React, { useCallback, useRef, useState } from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n label?: string\n}\n\nexport const Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ checked: controlledChecked, defaultChecked = false, onCheckedChange, disabled, className, label, ...rest }, ref) => {\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isControlled = controlledChecked !== undefined\n const checked = isControlled ? controlledChecked : internalChecked\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const setRefs = useCallback(\n (node: HTMLButtonElement | null) => {\n buttonRef.current = node\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n },\n [ref]\n )\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return\n const newChecked = !checked\n if (!isControlled) {\n setInternalChecked(newChecked)\n }\n onCheckedChange?.(newChecked)\n rest.onClick?.(e)\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-state={checked ? 'checked' : 'unchecked'}\n disabled={disabled}\n ref={setRefs}\n onClick={handleClick}\n className={cx(\n 'relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full border-2 border-transparent',\n 'transition-colors duration-200 ease-in-out',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n checked ? 'bg-gold' : 'bg-charcoal',\n className\n )}\n {...rest}\n >\n <span\n className={cx(\n 'pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0',\n 'transition duration-200 ease-in-out',\n checked ? 'translate-x-5' : 'translate-x-0'\n )}\n />\n </button>\n {label && (\n <span\n className=\"text-sm text-silver cursor-pointer\"\n onClick={() => {\n if (disabled) return\n buttonRef.current?.click()\n }}\n >\n {label}\n </span>\n )}\n </div>\n )\n }\n)\n\nSwitch.displayName = 'Switch'\n\nexport default Switch\n","import React, { useState, useRef, useCallback } from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface SliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: number\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n onChange?: (value: number) => void\n onChangeEnd?: (value: number) => void\n disabled?: boolean\n showTooltip?: boolean\n formatValue?: (value: number) => string\n size?: 'sm' | 'md' | 'lg'\n}\n\nconst SIZE_TRACK: Record<string, string> = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n}\n\nconst SIZE_THUMB: Record<string, string> = {\n sm: 'h-3 w-3',\n md: 'h-4 w-4',\n lg: 'h-5 w-5',\n}\n\nexport const Slider = React.forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n value: controlledValue,\n defaultValue = 0,\n min = 0,\n max = 100,\n step = 1,\n onChange,\n onChangeEnd,\n disabled = false,\n showTooltip = false,\n formatValue = (v) => String(v),\n size = 'md',\n className,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [isDragging, setIsDragging] = useState(false)\n const trackRef = useRef<HTMLDivElement>(null)\n\n const isControlled = controlledValue !== undefined\n const value = isControlled ? controlledValue : internalValue\n\n const percentage = ((value - min) / (max - min)) * 100\n\n const updateValue = useCallback(\n (clientX: number) => {\n if (!trackRef.current || disabled) return\n\n const rect = trackRef.current.getBoundingClientRect()\n const percent = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n const rawValue = min + percent * (max - min)\n const steppedValue = Math.round(rawValue / step) * step\n const clampedValue = Math.max(min, Math.min(max, steppedValue))\n\n if (!isControlled) {\n setInternalValue(clampedValue)\n }\n onChange?.(clampedValue)\n },\n [min, max, step, disabled, isControlled, onChange]\n )\n\n const handleMouseDown = (e: React.MouseEvent) => {\n if (disabled) return\n setIsDragging(true)\n updateValue(e.clientX)\n\n const handleMouseMove = (e: MouseEvent) => {\n updateValue(e.clientX)\n }\n\n const handleMouseUp = (e: MouseEvent) => {\n setIsDragging(false)\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n\n if (trackRef.current) {\n const rect = trackRef.current.getBoundingClientRect()\n const percent = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n const rawValue = min + percent * (max - min)\n const steppedValue = Math.round(rawValue / step) * step\n const clampedValue = Math.max(min, Math.min(max, steppedValue))\n onChangeEnd?.(clampedValue)\n }\n }\n\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return\n\n let newValue = value\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = Math.min(max, value + step)\n break\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = Math.max(min, value - step)\n break\n case 'Home':\n newValue = min\n break\n case 'End':\n newValue = max\n break\n default:\n return\n }\n\n e.preventDefault()\n if (!isControlled) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n onChangeEnd?.(newValue)\n }\n\n return (\n <div\n ref={ref}\n className={cx('relative w-full py-2', disabled && 'opacity-50', className)}\n {...props}\n >\n <div\n ref={trackRef}\n className={cx(\n 'relative w-full bg-charcoal border border-ash cursor-pointer',\n SIZE_TRACK[size]\n )}\n onMouseDown={handleMouseDown}\n >\n {/* Filled track */}\n <div\n className={cx('absolute inset-y-0 left-0 bg-gold', SIZE_TRACK[size])}\n style={{ width: `${percentage}%` }}\n />\n\n {/* Thumb */}\n <div\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled}\n onKeyDown={handleKeyDown}\n className={cx(\n 'absolute top-1/2 -translate-y-1/2 -translate-x-1/2',\n 'bg-gold border-2 border-gold-light rounded-full',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-offset-2 focus-visible:ring-offset-obsidian',\n 'transition-transform duration-fast',\n isDragging && 'scale-110',\n !disabled && 'cursor-grab active:cursor-grabbing',\n SIZE_THUMB[size]\n )}\n style={{ left: `${percentage}%` }}\n >\n {/* Tooltip */}\n {showTooltip && isDragging && (\n <div className=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-graphite border border-ash text-xs text-white whitespace-nowrap\">\n {formatValue(value)}\n </div>\n )}\n </div>\n </div>\n </div>\n )\n }\n)\n\nSlider.displayName = 'Slider'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\n// InputGroup container\nexport interface InputGroupProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx('flex', className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputGroup.displayName = 'InputGroup'\n\n// InputLeftAddon - static text/icon on the left\nexport interface InputAddonProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const InputLeftAddon = React.forwardRef<HTMLDivElement, InputAddonProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center px-3 bg-slate border border-r-0 border-ash',\n 'text-sm text-silver whitespace-nowrap',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputLeftAddon.displayName = 'InputLeftAddon'\n\n// InputRightAddon - static text/icon on the right\nexport const InputRightAddon = React.forwardRef<HTMLDivElement, InputAddonProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center px-3 bg-slate border border-l-0 border-ash',\n 'text-sm text-silver whitespace-nowrap',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputRightAddon.displayName = 'InputRightAddon'\n\n// InputLeftElement - overlaid element on the left (like an icon inside the input)\nexport interface InputElementProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const InputLeftElement = React.forwardRef<HTMLDivElement, InputElementProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'absolute left-0 inset-y-0 flex items-center pl-3',\n 'pointer-events-none text-silver',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputLeftElement.displayName = 'InputLeftElement'\n\n// InputRightElement - overlaid element on the right (like a button inside the input)\nexport const InputRightElement = React.forwardRef<HTMLDivElement, InputElementProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'absolute right-0 inset-y-0 flex items-center pr-3',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputRightElement.displayName = 'InputRightElement'\n\n// InputWrapper - for relative positioning when using left/right elements\nexport interface InputWrapperProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const InputWrapper = React.forwardRef<HTMLDivElement, InputWrapperProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx('relative flex-1', className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nInputWrapper.displayName = 'InputWrapper'\n","import React from 'react'\nimport { Info, CheckCircle, AlertTriangle, XCircle } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant\n title?: string\n}\n\nconst icons = {\n info: Info,\n success: CheckCircle,\n warning: AlertTriangle,\n error: XCircle,\n}\n\nconst variantStyles = {\n info: 'bg-info/10 border-info text-info',\n success: 'bg-success/10 border-success text-success',\n warning: 'bg-warning/10 border-warning text-warning',\n error: 'bg-error/10 border-error text-error',\n}\n\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ variant = 'info', title, children, className, ...rest }, ref) => {\n const Icon = icons[variant]\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cx(\n 'relative w-full p-4 rounded-none border border-l-4 flex gap-3',\n variantStyles[variant],\n className\n )}\n {...rest}\n >\n <Icon className=\"h-5 w-5 shrink-0\" />\n <div className=\"flex-1\">\n {title && <h5 className=\"mb-1 font-medium leading-none tracking-tight text-current\">{title}</h5>}\n <div className=\"text-sm opacity-90\">{children}</div>\n </div>\n </div>\n )\n }\n)\n\nAlert.displayName = 'Alert'\n\nexport default Alert\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg'\n\nexport interface SpinnerProps extends React.SVGAttributes<SVGElement> {\n size?: SpinnerSize\n}\n\nexport const Spinner = ({ className, size = 'md', ...rest }: SpinnerProps) => {\n const sizeClass =\n size === 'sm' ? 'h-4 w-4' : size === 'lg' ? 'h-8 w-8' : 'h-6 w-6'\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cx('animate-spin text-gold', sizeClass, className)}\n {...rest}\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n )\n}\n\nSpinner.displayName = 'Spinner'\n\nexport default Spinner\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cx('animate-pulse bg-ash', className)}\n {...rest}\n />\n )\n }\n)\n\nSkeleton.displayName = 'Skeleton'\n\nexport default Skeleton\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type ProgressSize = 'sm' | 'md' | 'lg'\nexport type ProgressVariant = 'default' | 'success' | 'warning' | 'error'\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: number\n max?: number\n size?: ProgressSize\n variant?: ProgressVariant\n showValue?: boolean\n formatValue?: (value: number, max: number) => string\n indeterminate?: boolean\n}\n\nconst SIZE_MAP: Record<ProgressSize, string> = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n}\n\nconst VARIANT_MAP: Record<ProgressVariant, string> = {\n default: 'bg-gold',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n}\n\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n value = 0,\n max = 100,\n size = 'md',\n variant = 'default',\n showValue = false,\n formatValue,\n indeterminate = false,\n className,\n ...props\n },\n ref\n ) => {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100))\n const displayValue = formatValue\n ? formatValue(value, max)\n : `${Math.round(percentage)}%`\n\n return (\n <div ref={ref} className={cx('w-full', className)} {...props}>\n {showValue && (\n <div className=\"flex justify-between mb-1\">\n <span className=\"text-sm text-silver\">Progress</span>\n <span className=\"text-sm text-white font-medium\">{displayValue}</span>\n </div>\n )}\n <div\n className={cx(\n 'w-full bg-charcoal border border-ash overflow-hidden rounded-none',\n SIZE_MAP[size]\n )}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n >\n <div\n className={cx(\n 'h-full transition-all duration-300 ease-out',\n VARIANT_MAP[variant],\n indeterminate && 'animate-pulse'\n )}\n style={{\n width: indeterminate ? '100%' : `${percentage}%`,\n }}\n />\n </div>\n </div>\n )\n }\n)\n\nProgress.displayName = 'Progress'\n","import React, { createContext, useContext, useState, useCallback, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, CheckCircle, AlertCircle, AlertTriangle, Info } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\nexport type ToastVariant = 'default' | 'success' | 'error' | 'warning' | 'info'\nexport type ToastPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center'\n\nexport interface ToastData {\n id: string\n title?: string\n description?: string\n variant?: ToastVariant\n duration?: number\n action?: React.ReactNode\n}\n\ninterface ToastContextValue {\n toasts: ToastData[]\n addToast: (toast: Omit<ToastData, 'id'>) => string\n removeToast: (id: string) => void\n position: ToastPosition\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nexport function useToast() {\n const context = useContext(ToastContext)\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider')\n }\n\n const toast = useCallback(\n (options: Omit<ToastData, 'id'>) => {\n return context.addToast(options)\n },\n [context]\n )\n\n return {\n toast,\n dismiss: context.removeToast,\n }\n}\n\n// ToastProvider - wrap your app with this\nexport interface ToastProviderProps {\n children: React.ReactNode\n position?: ToastPosition\n defaultDuration?: number\n}\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n children,\n position = 'bottom-right',\n defaultDuration = 5000,\n}) => {\n const [toasts, setToasts] = useState<ToastData[]>([])\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n const addToast = useCallback(\n (toast: Omit<ToastData, 'id'>) => {\n const id = Math.random().toString(36).substr(2, 9)\n const newToast: ToastData = {\n ...toast,\n id,\n duration: toast.duration ?? defaultDuration,\n }\n setToasts((prev) => [...prev, newToast])\n return id\n },\n [defaultDuration]\n )\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n return (\n <ToastContext.Provider value={{ toasts, addToast, removeToast, position }}>\n {children}\n {mounted && <ToastViewport />}\n </ToastContext.Provider>\n )\n}\n\nToastProvider.displayName = 'ToastProvider'\n\n// ToastViewport - container for all toasts\nconst ToastViewport: React.FC = () => {\n const context = useContext(ToastContext)\n if (!context) return null\n\n const { toasts, position } = context\n\n const positionClasses: Record<ToastPosition, string> = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n }\n\n return createPortal(\n <div\n className={cx(\n 'fixed z-50 flex flex-col gap-2 pointer-events-none',\n positionClasses[position]\n )}\n >\n {toasts.map((toast) => (\n <Toast key={toast.id} {...toast} />\n ))}\n </div>,\n document.body\n )\n}\n\n// Individual Toast\ninterface ToastProps extends ToastData {}\n\nconst VARIANT_STYLES: Record<ToastVariant, string> = {\n default: 'bg-charcoal border-ash',\n success: 'bg-charcoal border-success/50',\n error: 'bg-charcoal border-error/50',\n warning: 'bg-charcoal border-warning/50',\n info: 'bg-charcoal border-info/50',\n}\n\nconst VARIANT_ICONS: Record<ToastVariant, React.ReactNode> = {\n default: null,\n success: <CheckCircle className=\"h-5 w-5 text-success\" />,\n error: <AlertCircle className=\"h-5 w-5 text-error\" />,\n warning: <AlertTriangle className=\"h-5 w-5 text-warning\" />,\n info: <Info className=\"h-5 w-5 text-info\" />,\n}\n\nconst Toast: React.FC<ToastProps> = ({\n id,\n title,\n description,\n variant = 'default',\n duration,\n action,\n}) => {\n const context = useContext(ToastContext)\n\n useEffect(() => {\n if (duration && duration > 0) {\n const timer = setTimeout(() => {\n context?.removeToast(id)\n }, duration)\n return () => clearTimeout(timer)\n }\n }, [id, duration, context])\n\n const icon = VARIANT_ICONS[variant]\n\n return (\n <div\n role=\"alert\"\n className={cx(\n 'pointer-events-auto w-80 p-4 border shadow-lg animate-slide-in-right',\n VARIANT_STYLES[variant]\n )}\n >\n <div className=\"flex gap-3\">\n {icon && <div className=\"shrink-0 mt-0.5\">{icon}</div>}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <p className=\"text-sm font-medium text-white\">{title}</p>\n )}\n {description && (\n <p className=\"text-sm text-silver mt-1\">{description}</p>\n )}\n {action && <div className=\"mt-3\">{action}</div>}\n </div>\n <button\n onClick={() => context?.removeToast(id)}\n className=\"shrink-0 text-silver hover:text-white transition-colors\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Dismiss</span>\n </button>\n </div>\n </div>\n )\n}\n\nToast.displayName = 'Toast'\n","import React, { useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\nexport interface ModalProps {\n isOpen: boolean\n onClose: () => void\n title?: string\n children: React.ReactNode\n className?: string\n}\n\nexport const Modal = ({ isOpen, onClose, title, children, className }: ModalProps) => {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n useEffect(() => {\n if (isOpen) {\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n document.body.style.overflow = 'hidden'\n document.body.style.paddingRight = `${scrollbarWidth}px`\n } else {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n return () => {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n }, [isOpen])\n\n useEffect(() => {\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n window.addEventListener('keydown', handleEsc)\n return () => window.removeEventListener('keydown', handleEsc)\n }, [onClose])\n\n if (!mounted) return null\n\n // Don't render anything if closed, unless we want exit animations. \n // My CSS relies on data-state, but if I unmount immediately, exit animation won't play.\n // To support exit animations, I'd need a transition manager (like framer-motion or headlessui).\n // For this simple implementation, I'll render conditionally. \n // If I want animation, I need to keep it mounted until animation ends.\n // Given the prompt \"add all suggestions\" and \"premium\", a simple unmount is acceptable for v1 without heavy deps.\n // However, the CSS I wrote has `data-state=closed`. \n // Without a transition library, handling exit animation is tricky. \n // I'll just conditional render for now. The entry animation `animate-fade-in` will play.\n \n if (!isOpen) return null;\n\n const content = (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4 sm:p-6\" onClick={onClose}>\n <div className=\"fixed inset-0 z-40 bg-obsidian/80 backdrop-blur-sm\" aria-hidden=\"true\" />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className={cx(\n 'bg-charcoal border border-gold/30 shadow-2xl z-50 w-full max-w-lg p-6 rounded-none relative',\n className\n )}\n data-state=\"open\"\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between mb-2\">\n {title ? <h3 className=\"text-xl font-semibold text-white m-0\">{title}</h3> : <div />}\n <button onClick={onClose} className=\"text-silver hover:text-white transition-colors ml-auto\">\n <X className=\"h-5 w-5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n <div>{children}</div>\n </div>\n </div>\n )\n\n return createPortal(content, document.body)\n}\n\nModal.displayName = 'Modal'\n\nexport default Modal\n","import React, { useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\nexport type DrawerPosition = 'left' | 'right' | 'top' | 'bottom'\n\nexport interface DrawerProps {\n isOpen: boolean\n onClose: () => void\n position?: DrawerPosition\n title?: string\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full'\n children: React.ReactNode\n className?: string\n}\n\nconst SIZE_MAP: Record<string, Record<DrawerPosition, string>> = {\n sm: {\n left: 'w-64',\n right: 'w-64',\n top: 'h-48',\n bottom: 'h-48',\n },\n md: {\n left: 'w-80',\n right: 'w-80',\n top: 'h-64',\n bottom: 'h-64',\n },\n lg: {\n left: 'w-96',\n right: 'w-96',\n top: 'h-80',\n bottom: 'h-80',\n },\n xl: {\n left: 'w-[32rem]',\n right: 'w-[32rem]',\n top: 'h-96',\n bottom: 'h-96',\n },\n full: {\n left: 'w-full',\n right: 'w-full',\n top: 'h-full',\n bottom: 'h-full',\n },\n}\n\nconst POSITION_CLASSES: Record<DrawerPosition, string> = {\n left: 'left-0 top-0 h-full',\n right: 'right-0 top-0 h-full',\n top: 'top-0 left-0 w-full',\n bottom: 'bottom-0 left-0 w-full',\n}\n\nconst TRANSFORM_CLASSES: Record<DrawerPosition, { open: string; closed: string }> = {\n left: { open: 'translate-x-0', closed: '-translate-x-full' },\n right: { open: 'translate-x-0', closed: 'translate-x-full' },\n top: { open: 'translate-y-0', closed: '-translate-y-full' },\n bottom: { open: 'translate-y-0', closed: 'translate-y-full' },\n}\n\nexport const Drawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n position = 'right',\n title,\n size = 'md',\n children,\n className,\n}) => {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n useEffect(() => {\n if (isOpen) {\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n document.body.style.overflow = 'hidden'\n document.body.style.paddingRight = `${scrollbarWidth}px`\n } else {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n return () => {\n document.body.style.overflow = 'unset'\n document.body.style.paddingRight = '0px'\n }\n }, [isOpen])\n\n useEffect(() => {\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n window.addEventListener('keydown', handleEsc)\n return () => window.removeEventListener('keydown', handleEsc)\n }, [onClose])\n\n if (!mounted) return null\n\n const content = (\n <div\n className={cx(\n 'fixed inset-0 z-50',\n isOpen ? 'pointer-events-auto' : 'pointer-events-none'\n )}\n >\n {/* Backdrop */}\n <div\n className={cx(\n 'fixed inset-0 bg-obsidian/80 backdrop-blur-sm transition-opacity duration-300',\n isOpen ? 'opacity-100' : 'opacity-0'\n )}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n\n {/* Drawer panel */}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n className={cx(\n 'fixed bg-charcoal border-ash shadow-2xl flex flex-col',\n 'transition-transform duration-300 ease-out',\n POSITION_CLASSES[position],\n SIZE_MAP[size][position],\n position === 'left' && 'border-r',\n position === 'right' && 'border-l',\n position === 'top' && 'border-b',\n position === 'bottom' && 'border-t',\n isOpen ? TRANSFORM_CLASSES[position].open : TRANSFORM_CLASSES[position].closed,\n className\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-ash\">\n {title ? (\n <h2 className=\"text-lg font-semibold text-white m-0\">{title}</h2>\n ) : (\n <div />\n )}\n <button\n onClick={onClose}\n className=\"text-silver hover:text-white transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-auto p-4\">{children}</div>\n </div>\n </div>\n )\n\n return createPortal(content, document.body)\n}\n\nDrawer.displayName = 'Drawer'\n","import React, { useState, useRef, useEffect, useCallback, useId } from 'react'\nimport { cx } from '../utils/cx'\n\nexport type PopoverPosition = 'top' | 'bottom' | 'left' | 'right'\nexport type PopoverAlign = 'start' | 'center' | 'end'\n\nexport interface PopoverProps {\n children: React.ReactNode\n /** The trigger element */\n trigger: React.ReactElement\n /** Position relative to trigger */\n position?: PopoverPosition\n /** Alignment along the position axis */\n align?: PopoverAlign\n /** Controlled open state */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Close when clicking outside */\n closeOnClickOutside?: boolean\n}\n\nconst POSITION_CLASSES: Record<PopoverPosition, Record<PopoverAlign, string>> = {\n top: {\n start: 'bottom-full left-0 mb-2',\n center: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n end: 'bottom-full right-0 mb-2',\n },\n bottom: {\n start: 'top-full left-0 mt-2',\n center: 'top-full left-1/2 -translate-x-1/2 mt-2',\n end: 'top-full right-0 mt-2',\n },\n left: {\n start: 'right-full top-0 mr-2',\n center: 'right-full top-1/2 -translate-y-1/2 mr-2',\n end: 'right-full bottom-0 mr-2',\n },\n right: {\n start: 'left-full top-0 ml-2',\n center: 'left-full top-1/2 -translate-y-1/2 ml-2',\n end: 'left-full bottom-0 ml-2',\n },\n}\n\nexport const Popover: React.FC<PopoverProps> = ({\n children,\n trigger,\n position = 'bottom',\n align = 'center',\n open: controlledOpen,\n onOpenChange,\n closeOnClickOutside = true,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const containerRef = useRef<HTMLDivElement>(null)\n const baseId = useId()\n\n const setIsOpen = useCallback(\n (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n },\n [isControlled, onOpenChange]\n )\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen || !closeOnClickOutside) return\n\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [isOpen, closeOnClickOutside, setIsOpen])\n\n // Close on escape\n useEffect(() => {\n if (!isOpen) return\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('keydown', handleEscape)\n return () => document.removeEventListener('keydown', handleEscape)\n }, [isOpen, setIsOpen])\n\n const handleTriggerClick = () => {\n setIsOpen(!isOpen)\n }\n\n const triggerElement = React.cloneElement(trigger as React.ReactElement<any>, {\n onClick: handleTriggerClick,\n 'aria-haspopup': 'dialog',\n 'aria-expanded': isOpen,\n 'aria-controls': `${baseId}-popover`,\n id: `${baseId}-trigger`,\n })\n\n return (\n <div ref={containerRef} className=\"relative inline-block\">\n {triggerElement}\n {isOpen && (\n <div\n id={`${baseId}-popover`}\n role=\"dialog\"\n aria-labelledby={`${baseId}-trigger`}\n className={cx(\n 'absolute z-50 min-w-48 p-4',\n 'bg-charcoal border border-ash shadow-lg',\n 'animate-fade-in',\n POSITION_CLASSES[position][align]\n )}\n >\n {children}\n </div>\n )}\n </div>\n )\n}\n\nPopover.displayName = 'Popover'\n","import React, { useCallback } from 'react'\nimport { Modal, type ModalProps } from './Modal'\nimport { Button } from './Button'\nimport { cx } from '../utils/cx'\n\n// ConfirmDialog - for confirmation actions\nexport interface ConfirmDialogProps extends Omit<ModalProps, 'children'> {\n description?: React.ReactNode\n confirmText?: string\n cancelText?: string\n onConfirm: () => void | Promise<void>\n onCancel?: () => void\n confirmVariant?: 'primary' | 'important' | 'danger'\n isLoading?: boolean\n}\n\nexport const ConfirmDialog: React.FC<ConfirmDialogProps> = ({\n title = 'Confirm',\n description,\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n onConfirm,\n onCancel,\n onClose,\n confirmVariant = 'important',\n isLoading = false,\n ...props\n}) => {\n const handleCancel = useCallback(() => {\n onCancel?.()\n onClose()\n }, [onCancel, onClose])\n\n const handleConfirm = useCallback(async () => {\n await onConfirm()\n onClose()\n }, [onConfirm, onClose])\n\n return (\n <Modal title={title} onClose={onClose} {...props}>\n {description && (\n <p className=\"text-sm text-silver mb-6\">{description}</p>\n )}\n <div className=\"flex justify-end gap-3\">\n <Button variant=\"outlined\" onClick={handleCancel} disabled={isLoading}>\n {cancelText}\n </Button>\n <Button\n variant={confirmVariant}\n onClick={handleConfirm}\n loading={isLoading}\n >\n {confirmText}\n </Button>\n </div>\n </Modal>\n )\n}\n\nConfirmDialog.displayName = 'ConfirmDialog'\n\n// AlertDialog - for important alerts\nexport interface AlertDialogProps extends Omit<ModalProps, 'children'> {\n description?: React.ReactNode\n acknowledgeText?: string\n variant?: 'default' | 'warning' | 'error'\n}\n\nexport const AlertDialog: React.FC<AlertDialogProps> = ({\n title = 'Alert',\n description,\n acknowledgeText = 'OK',\n variant = 'default',\n onClose,\n ...props\n}) => {\n const titleClass = cx(\n variant === 'warning' && 'text-warning',\n variant === 'error' && 'text-error'\n )\n\n return (\n <Modal onClose={onClose} {...props}>\n <h3 className={cx('text-xl font-semibold mb-2', titleClass)}>{title}</h3>\n {description && (\n <p className=\"text-sm text-silver mb-6\">{description}</p>\n )}\n <div className=\"flex justify-end\">\n <Button variant=\"primary\" onClick={onClose}>\n {acknowledgeText}\n </Button>\n </div>\n </Modal>\n )\n}\n\nAlertDialog.displayName = 'AlertDialog'\n\n// PromptDialog - for user input\nexport interface PromptDialogProps extends Omit<ModalProps, 'children'> {\n description?: React.ReactNode\n placeholder?: string\n defaultValue?: string\n submitText?: string\n cancelText?: string\n onSubmit: (value: string) => void | Promise<void>\n onCancel?: () => void\n isLoading?: boolean\n}\n\nexport const PromptDialog: React.FC<PromptDialogProps> = ({\n title = 'Enter Value',\n description,\n placeholder,\n defaultValue = '',\n submitText = 'Submit',\n cancelText = 'Cancel',\n onSubmit,\n onCancel,\n onClose,\n isLoading = false,\n ...props\n}) => {\n const [value, setValue] = React.useState(defaultValue)\n\n const handleCancel = useCallback(() => {\n onCancel?.()\n onClose()\n }, [onCancel, onClose])\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault()\n await onSubmit(value)\n onClose()\n },\n [onSubmit, value, onClose]\n )\n\n return (\n <Modal title={title} onClose={onClose} {...props}>\n <form onSubmit={handleSubmit}>\n {description && (\n <p className=\"text-sm text-silver mb-4\">{description}</p>\n )}\n <input\n type=\"text\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={placeholder}\n className={cx(\n 'w-full px-3 py-2 bg-graphite border border-ash',\n 'text-white placeholder:text-zinc',\n 'focus:border-gold focus:ring-1 focus:ring-gold focus:outline-none',\n 'mb-6'\n )}\n autoFocus\n />\n <div className=\"flex justify-end gap-3\">\n <Button\n type=\"button\"\n variant=\"outlined\"\n onClick={handleCancel}\n disabled={isLoading}\n >\n {cancelText}\n </Button>\n <Button type=\"submit\" variant=\"important\" loading={isLoading}>\n {submitText}\n </Button>\n </div>\n </form>\n </Modal>\n )\n}\n\nPromptDialog.displayName = 'PromptDialog'\n","import React, { createContext, useContext, useState, useCallback, useId } from 'react'\nimport { cx } from '../utils/cx'\n\n// Context for managing tab state\ninterface TabsContextValue {\n activeTab: string\n setActiveTab: (id: string) => void\n baseId: string\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null)\n\nfunction useTabsContext() {\n const context = useContext(TabsContext)\n if (!context) {\n throw new Error('Tabs components must be used within a Tabs provider')\n }\n return context\n}\n\n// Main Tabs container\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The id of the initially active tab */\n defaultValue?: string\n /** Controlled active tab value */\n value?: string\n /** Callback when active tab changes */\n onValueChange?: (value: string) => void\n}\n\nexport const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n ({ defaultValue, value, onValueChange, children, className, ...props }, ref) => {\n const [internalValue, setInternalValue] = useState(defaultValue ?? '')\n const isControlled = value !== undefined\n const activeTab = isControlled ? value : internalValue\n const baseId = useId()\n\n const setActiveTab = useCallback(\n (id: string) => {\n if (!isControlled) {\n setInternalValue(id)\n }\n onValueChange?.(id)\n },\n [isControlled, onValueChange]\n )\n\n return (\n <TabsContext.Provider value={{ activeTab, setActiveTab, baseId }}>\n <div ref={ref} className={cx('w-full', className)} {...props}>\n {children}\n </div>\n </TabsContext.Provider>\n )\n }\n)\n\nTabs.displayName = 'Tabs'\n\n// TabList - container for Tab buttons\nexport interface TabListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const TabList = React.forwardRef<HTMLDivElement, TabListProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"tablist\"\n className={cx(\n 'flex border-b border-ash',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nTabList.displayName = 'TabList'\n\n// Tab - individual tab button\nexport interface TabProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Unique identifier for this tab */\n value: string\n}\n\nexport const Tab = React.forwardRef<HTMLButtonElement, TabProps>(\n ({ value, children, className, disabled, ...props }, ref) => {\n const { activeTab, setActiveTab, baseId } = useTabsContext()\n const isActive = activeTab === value\n const panelId = `${baseId}-panel-${value}`\n const tabId = `${baseId}-tab-${value}`\n\n return (\n <button\n ref={ref}\n id={tabId}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={panelId}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n onClick={() => setActiveTab(value)}\n className={cx(\n 'px-4 py-2 text-sm font-medium transition-all duration-fast',\n 'border-b-2 -mb-px',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-inset',\n isActive\n ? 'border-gold text-gold'\n : 'border-transparent text-silver hover:text-white hover:border-ash',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\n\nTab.displayName = 'Tab'\n\n// TabPanel - content panel for a tab\nexport interface TabPanelProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Value matching the corresponding Tab */\n value: string\n /** Force the panel to stay mounted when inactive */\n forceMount?: boolean\n}\n\nexport const TabPanel = React.forwardRef<HTMLDivElement, TabPanelProps>(\n ({ value, forceMount = false, children, className, ...props }, ref) => {\n const { activeTab, baseId } = useTabsContext()\n const isActive = activeTab === value\n const panelId = `${baseId}-panel-${value}`\n const tabId = `${baseId}-tab-${value}`\n\n if (!isActive && !forceMount) {\n return null\n }\n\n return (\n <div\n ref={ref}\n id={panelId}\n role=\"tabpanel\"\n aria-labelledby={tabId}\n tabIndex={0}\n hidden={!isActive}\n className={cx(\n 'pt-4 focus-visible:outline-none',\n !isActive && 'hidden',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nTabPanel.displayName = 'TabPanel'\n","import React, { createContext, useContext, useState, useCallback, useId } from 'react'\nimport { ChevronDown } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\n// Context for managing accordion state\ninterface AccordionContextValue {\n expandedItems: Set<string>\n toggleItem: (id: string) => void\n type: 'single' | 'multiple'\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null)\n\nfunction useAccordionContext() {\n const context = useContext(AccordionContext)\n if (!context) {\n throw new Error('Accordion components must be used within an Accordion provider')\n }\n return context\n}\n\n// Main Accordion container\nexport interface AccordionProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Allow multiple items to be open at once */\n type?: 'single' | 'multiple'\n /** Default expanded item(s) */\n defaultValue?: string | string[]\n /** Controlled expanded item(s) */\n value?: string | string[]\n /** Callback when expanded items change */\n onValueChange?: (value: string | string[]) => void\n}\n\nexport const Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n (\n { type = 'single', defaultValue, value, onValueChange, children, className, ...props },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState<Set<string>>(() => {\n if (defaultValue) {\n return new Set(Array.isArray(defaultValue) ? defaultValue : [defaultValue])\n }\n return new Set()\n })\n\n const isControlled = value !== undefined\n const expandedItems = isControlled\n ? new Set(Array.isArray(value) ? value : [value])\n : internalValue\n\n const toggleItem = useCallback(\n (id: string) => {\n const newSet = new Set(expandedItems)\n\n if (newSet.has(id)) {\n newSet.delete(id)\n } else {\n if (type === 'single') {\n newSet.clear()\n }\n newSet.add(id)\n }\n\n if (!isControlled) {\n setInternalValue(newSet)\n }\n\n const newValue = Array.from(newSet)\n onValueChange?.(type === 'single' ? newValue[0] ?? '' : newValue)\n },\n [expandedItems, type, isControlled, onValueChange]\n )\n\n return (\n <AccordionContext.Provider value={{ expandedItems, toggleItem, type }}>\n <div\n ref={ref}\n className={cx('divide-y divide-ash border border-ash', className)}\n {...props}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n )\n }\n)\n\nAccordion.displayName = 'Accordion'\n\n// AccordionItem - individual accordion section\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Unique identifier for this item */\n value: string\n /** Disable this item */\n disabled?: boolean\n}\n\nconst AccordionItemContext = createContext<{ value: string; disabled: boolean } | null>(null)\n\nexport const AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ value, disabled = false, children, className, ...props }, ref) => {\n return (\n <AccordionItemContext.Provider value={{ value, disabled }}>\n <div\n ref={ref}\n data-state={useAccordionContext().expandedItems.has(value) ? 'open' : 'closed'}\n className={cx('bg-charcoal', className)}\n {...props}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n )\n }\n)\n\nAccordionItem.displayName = 'AccordionItem'\n\n// AccordionTrigger - clickable header\nexport interface AccordionTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nexport const AccordionTrigger = React.forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n ({ children, className, ...props }, ref) => {\n const { expandedItems, toggleItem } = useAccordionContext()\n const itemContext = useContext(AccordionItemContext)\n const baseId = useId()\n\n if (!itemContext) {\n throw new Error('AccordionTrigger must be used within an AccordionItem')\n }\n\n const { value, disabled } = itemContext\n const isExpanded = expandedItems.has(value)\n\n return (\n <h3 className=\"m-0\">\n <button\n ref={ref}\n type=\"button\"\n id={`${baseId}-trigger-${value}`}\n aria-expanded={isExpanded}\n aria-controls={`${baseId}-content-${value}`}\n disabled={disabled}\n onClick={() => toggleItem(value)}\n className={cx(\n 'flex w-full items-center justify-between px-4 py-3',\n 'text-left text-sm font-medium text-white',\n 'transition-colors duration-fast',\n 'hover:bg-graphite',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gold focus-visible:ring-inset',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n {...props}\n >\n <span>{children}</span>\n <ChevronDown\n className={cx(\n 'h-4 w-4 text-silver transition-transform duration-200',\n isExpanded && 'rotate-180'\n )}\n />\n </button>\n </h3>\n )\n }\n)\n\nAccordionTrigger.displayName = 'AccordionTrigger'\n\n// AccordionContent - expandable content\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const AccordionContent = React.forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ children, className, ...props }, ref) => {\n const { expandedItems } = useAccordionContext()\n const itemContext = useContext(AccordionItemContext)\n const baseId = useId()\n\n if (!itemContext) {\n throw new Error('AccordionContent must be used within an AccordionItem')\n }\n\n const { value } = itemContext\n const isExpanded = expandedItems.has(value)\n\n return (\n <div\n ref={ref}\n id={`${baseId}-content-${value}`}\n role=\"region\"\n aria-labelledby={`${baseId}-trigger-${value}`}\n hidden={!isExpanded}\n className={cx(\n 'overflow-hidden transition-all duration-200',\n isExpanded ? 'animate-fade-in' : 'hidden',\n className\n )}\n {...props}\n >\n <div className=\"px-4 pb-4 text-sm text-silver\">{children}</div>\n </div>\n )\n }\n)\n\nAccordionContent.displayName = 'AccordionContent'\n","import React, {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n useEffect,\n useId,\n} from 'react'\nimport { cx } from '../utils/cx'\n\n// Context for managing menu state\ninterface MenuContextValue {\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n triggerId: string\n menuId: string\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu provider')\n }\n return context\n}\n\n// Main Menu container\nexport interface MenuProps {\n children: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\nexport const Menu: React.FC<MenuProps> = ({ children, open, onOpenChange }) => {\n const [internalOpen, setInternalOpen] = useState(false)\n const isControlled = open !== undefined\n const isOpen = isControlled ? open : internalOpen\n const baseId = useId()\n\n const setIsOpen = useCallback(\n (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n },\n [isControlled, onOpenChange]\n )\n\n return (\n <MenuContext.Provider\n value={{\n isOpen,\n setIsOpen,\n triggerId: `${baseId}-trigger`,\n menuId: `${baseId}-menu`,\n }}\n >\n <div className=\"relative inline-block\">{children}</div>\n </MenuContext.Provider>\n )\n}\n\nMenu.displayName = 'Menu'\n\n// MenuTrigger - button that opens the menu\nexport interface MenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n}\n\nexport const MenuTrigger = React.forwardRef<HTMLButtonElement, MenuTriggerProps>(\n ({ children, className, asChild, ...props }, ref) => {\n const { isOpen, setIsOpen, triggerId, menuId } = useMenuContext()\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault()\n setIsOpen(!isOpen)\n props.onClick?.(e)\n }\n\n return (\n <button\n ref={ref}\n id={triggerId}\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-controls={menuId}\n onClick={handleClick}\n className={cx(\n 'inline-flex items-center justify-center',\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\n\nMenuTrigger.displayName = 'MenuTrigger'\n\n// MenuContent - the dropdown menu\nexport interface MenuContentProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: 'start' | 'center' | 'end'\n side?: 'top' | 'bottom'\n}\n\nexport const MenuContent = React.forwardRef<HTMLDivElement, MenuContentProps>(\n ({ children, className, align = 'start', side = 'bottom', ...props }, ref) => {\n const { isOpen, setIsOpen, triggerId, menuId } = useMenuContext()\n const menuRef = useRef<HTMLDivElement>(null)\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return\n\n const handleClickOutside = (e: MouseEvent) => {\n const trigger = document.getElementById(triggerId)\n if (\n menuRef.current &&\n !menuRef.current.contains(e.target as Node) &&\n trigger &&\n !trigger.contains(e.target as Node)\n ) {\n setIsOpen(false)\n }\n }\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n document.addEventListener('keydown', handleEscape)\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n document.removeEventListener('keydown', handleEscape)\n }\n }, [isOpen, setIsOpen, triggerId])\n\n if (!isOpen) return null\n\n const alignmentClasses = {\n start: 'left-0',\n center: 'left-1/2 -translate-x-1/2',\n end: 'right-0',\n }\n\n const sideClasses = {\n top: 'bottom-full mb-1',\n bottom: 'top-full mt-1',\n }\n\n return (\n <div\n ref={(node) => {\n menuRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n id={menuId}\n role=\"menu\"\n aria-labelledby={triggerId}\n className={cx(\n 'absolute z-50 min-w-40 py-1',\n 'bg-charcoal border border-ash shadow-lg',\n 'animate-fade-in',\n alignmentClasses[align],\n sideClasses[side],\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nMenuContent.displayName = 'MenuContent'\n\n// MenuItem - individual menu option\nexport interface MenuItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n destructive?: boolean\n}\n\nexport const MenuItem = React.forwardRef<HTMLButtonElement, MenuItemProps>(\n ({ children, className, icon, destructive, disabled, onClick, ...props }, ref) => {\n const { setIsOpen } = useMenuContext()\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return\n onClick?.(e)\n setIsOpen(false)\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"menuitem\"\n disabled={disabled}\n onClick={handleClick}\n className={cx(\n 'flex w-full items-center gap-2 px-3 py-2 text-sm text-left',\n 'transition-colors duration-fast',\n destructive\n ? 'text-error hover:bg-error/10'\n : 'text-white hover:bg-graphite',\n 'focus-visible:outline-none focus-visible:bg-graphite',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n {...props}\n >\n {icon && <span className=\"w-4 h-4 shrink-0\">{icon}</span>}\n {children}\n </button>\n )\n }\n)\n\nMenuItem.displayName = 'MenuItem'\n\n// MenuSeparator - divider between menu items\nexport const MenuSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"separator\"\n className={cx('my-1 h-px bg-ash', className)}\n {...props}\n />\n))\n\nMenuSeparator.displayName = 'MenuSeparator'\n\n// MenuLabel - non-interactive label\nexport const MenuLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cx('px-3 py-1.5 text-xs font-medium text-silver', className)}\n {...props}\n >\n {children}\n </div>\n))\n\nMenuLabel.displayName = 'MenuLabel'\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\n// Main Navbar container\nexport interface NavbarProps extends React.HTMLAttributes<HTMLElement> {\n fixed?: boolean\n bordered?: boolean\n}\n\nexport const Navbar = React.forwardRef<HTMLElement, NavbarProps>(\n ({ fixed = false, bordered = true, className, children, ...props }, ref) => {\n return (\n <nav\n ref={ref}\n className={cx(\n 'w-full bg-charcoal px-4 py-3',\n bordered && 'border-b border-ash',\n fixed && 'fixed top-0 left-0 right-0 z-40',\n className\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between\">{children}</div>\n </nav>\n )\n }\n)\n\nNavbar.displayName = 'Navbar'\n\n// NavbarBrand - logo/brand section\nexport interface NavbarBrandProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const NavbarBrand = React.forwardRef<HTMLDivElement, NavbarBrandProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx('flex items-center gap-2', className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nNavbarBrand.displayName = 'NavbarBrand'\n\n// NavbarContent - center or end content area\nexport interface NavbarContentProps extends React.HTMLAttributes<HTMLDivElement> {\n position?: 'start' | 'center' | 'end'\n}\n\nexport const NavbarContent = React.forwardRef<HTMLDivElement, NavbarContentProps>(\n ({ position = 'center', className, children, ...props }, ref) => {\n const positionClasses = {\n start: 'mr-auto',\n center: 'mx-auto',\n end: 'ml-auto',\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center gap-4',\n positionClasses[position],\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nNavbarContent.displayName = 'NavbarContent'\n\n// NavbarItem - individual navigation item\nexport interface NavbarItemProps extends React.HTMLAttributes<HTMLDivElement> {\n active?: boolean\n}\n\nexport const NavbarItem = React.forwardRef<HTMLDivElement, NavbarItemProps>(\n ({ active = false, className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nNavbarItem.displayName = 'NavbarItem'\n\n// NavbarLink - navigation link\nexport interface NavbarLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n active?: boolean\n}\n\nexport const NavbarLink = React.forwardRef<HTMLAnchorElement, NavbarLinkProps>(\n ({ active = false, className, children, ...props }, ref) => {\n return (\n <a\n ref={ref}\n className={cx(\n 'text-sm font-medium transition-colors duration-fast',\n active ? 'text-gold' : 'text-silver hover:text-white',\n className\n )}\n {...props}\n >\n {children}\n </a>\n )\n }\n)\n\nNavbarLink.displayName = 'NavbarLink'\n\n// NavbarDivider - vertical separator\nexport const NavbarDivider = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cx('h-6 w-px bg-ash mx-2', className)}\n {...props}\n />\n))\n\nNavbarDivider.displayName = 'NavbarDivider'\n","import React from 'react'\nimport {ChevronRight} from 'lucide-react'\nimport {cx} from '../utils'\n\n// Breadcrumb container\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n separator?: React.ReactNode\n}\n\nexport const Breadcrumb = React.forwardRef<HTMLElement, BreadcrumbProps>(\n ({separator, className, children, ...props}, ref) => {\n const items = React.Children.toArray(children)\n const defaultSeparator = <ChevronRight className=\"h-4 w-4 text-ash\"/>\n\n return (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={className} {...props}>\n <ol className=\"flex items-center gap-2\">\n {items.map((child, index) => (\n <li key={index} className=\"flex items-center gap-2\">\n {child}\n {index < items.length - 1 && (\n <span aria-hidden=\"true\">{separator ?? defaultSeparator}</span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n )\n }\n)\n\nBreadcrumb.displayName = 'Breadcrumb'\n\n// BreadcrumbItem - individual breadcrumb item\nexport interface BreadcrumbItemProps extends React.HTMLAttributes<HTMLSpanElement> {\n current?: boolean\n}\n\nexport const BreadcrumbItem = React.forwardRef<HTMLSpanElement, BreadcrumbItemProps>(\n ({current = false, className, children, ...props}, ref) => {\n return (\n <span\n ref={ref}\n aria-current={current ? 'page' : undefined}\n className={cx(\n 'text-sm',\n current ? 'text-white font-medium' : 'text-silver',\n className\n )}\n {...props}\n >\n {children}\n </span>\n )\n }\n)\n\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n\n// BreadcrumbLink - clickable breadcrumb link\nexport interface BreadcrumbLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n}\n\nexport const BreadcrumbLink = React.forwardRef<HTMLAnchorElement, BreadcrumbLinkProps>(\n ({className, children, ...props}, ref) => {\n return (\n <a\n ref={ref}\n className={cx(\n 'text-sm text-silver hover:text-gold transition-colors duration-fast',\n className\n )}\n {...props}\n >\n {children}\n </a>\n )\n }\n)\n\nBreadcrumbLink.displayName = 'BreadcrumbLink'\n","import React from 'react'\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react'\nimport { cx } from '../utils/cx'\n\nexport interface PaginationProps extends React.HTMLAttributes<HTMLElement> {\n page: number\n totalPages: number\n onPageChange: (page: number) => void\n siblingCount?: number\n showEdges?: boolean\n}\n\nfunction generatePagination(\n currentPage: number,\n totalPages: number,\n siblingCount: number\n): (number | 'ellipsis')[] {\n const totalSlots = siblingCount * 2 + 5 // siblings + current + 2 edges + 2 ellipses max\n\n if (totalPages <= totalSlots) {\n return Array.from({ length: totalPages }, (_, i) => i + 1)\n }\n\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1)\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages)\n\n const showLeftEllipsis = leftSiblingIndex > 2\n const showRightEllipsis = rightSiblingIndex < totalPages - 1\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftItemCount = 3 + 2 * siblingCount\n const leftRange = Array.from({ length: leftItemCount }, (_, i) => i + 1)\n return [...leftRange, 'ellipsis', totalPages]\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightItemCount = 3 + 2 * siblingCount\n const rightRange = Array.from(\n { length: rightItemCount },\n (_, i) => totalPages - rightItemCount + i + 1\n )\n return [1, 'ellipsis', ...rightRange]\n }\n\n const middleRange = Array.from(\n { length: rightSiblingIndex - leftSiblingIndex + 1 },\n (_, i) => leftSiblingIndex + i\n )\n return [1, 'ellipsis', ...middleRange, 'ellipsis', totalPages]\n}\n\nexport const Pagination = React.forwardRef<HTMLElement, PaginationProps>(\n (\n {\n page,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showEdges = true,\n className,\n ...props\n },\n ref\n ) => {\n const pages = generatePagination(page, totalPages, siblingCount)\n\n const buttonBaseClass =\n 'flex items-center justify-center h-8 min-w-8 px-2 text-sm ' +\n 'border border-ash transition-colors duration-fast ' +\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gold'\n\n return (\n <nav\n ref={ref}\n role=\"navigation\"\n aria-label=\"Pagination\"\n className={cx('flex items-center gap-1', className)}\n {...props}\n >\n {/* Previous button */}\n <button\n type=\"button\"\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n aria-label=\"Go to previous page\"\n className={cx(\n buttonBaseClass,\n 'text-silver hover:text-white hover:border-gold',\n page <= 1 && 'opacity-50 cursor-not-allowed hover:border-ash'\n )}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n\n {/* Page numbers */}\n {pages.map((pageNum, index) =>\n pageNum === 'ellipsis' ? (\n <span\n key={`ellipsis-${index}`}\n className=\"flex items-center justify-center h-8 w-8 text-silver\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </span>\n ) : (\n <button\n key={pageNum}\n type=\"button\"\n onClick={() => onPageChange(pageNum)}\n aria-label={`Go to page ${pageNum}`}\n aria-current={page === pageNum ? 'page' : undefined}\n className={cx(\n buttonBaseClass,\n page === pageNum\n ? 'bg-gold text-obsidian border-gold font-medium'\n : 'text-silver hover:text-white hover:border-gold'\n )}\n >\n {pageNum}\n </button>\n )\n )}\n\n {/* Next button */}\n <button\n type=\"button\"\n onClick={() => onPageChange(page + 1)}\n disabled={page >= totalPages}\n aria-label=\"Go to next page\"\n className={cx(\n buttonBaseClass,\n 'text-silver hover:text-white hover:border-gold',\n page >= totalPages && 'opacity-50 cursor-not-allowed hover:border-ash'\n )}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </nav>\n )\n }\n)\n\nPagination.displayName = 'Pagination'\n","import React from 'react'\nimport {Check} from 'lucide-react'\nimport {cx} from '../utils/cx'\n\nexport type StepStatus = 'complete' | 'error'\n\nexport interface Step {\n id: string | number\n label: string\n}\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Array of steps. Each requires: id (string | number), label (string). */\n steps: Step[]\n /** ID of the current step (must match a step.id from the steps array). */\n currentStep: string | number\n status?: StepStatus\n}\n\nexport const Stepper = React.forwardRef<HTMLDivElement, StepperProps>(\n ({steps, currentStep, status, className, ...rest}, ref) => {\n const currentIndex = steps.findIndex(step => step.id === currentStep)\n\n const getStepState = (index: number) => {\n if (index < currentIndex) {\n return 'complete'\n }\n if (index === currentIndex) {\n return status || 'current'\n }\n return 'future'\n }\n\n return (\n <div\n ref={ref}\n className={cx('flex items-center w-full', className)}\n {...rest}\n >\n {steps.map((step, index) => {\n const state = getStepState(index)\n const isLast = index === steps.length - 1\n\n return (\n <React.Fragment key={step.id}>\n <div className=\"flex flex-col items-center\">\n <div\n className={cx(\n 'flex items-center justify-center w-10 h-10 rounded-full border-2 font-semibold text-sm transition-all duration-200',\n state === 'complete' && 'bg-gold border-gold text-obsidian',\n state === 'current' && 'bg-charcoal border-gold text-gold',\n state === 'error' && 'bg-error border-error text-white',\n state === 'future' && 'bg-charcoal border-ash text-silver'\n )}\n >\n {state === 'complete' ? (\n <Check className=\"h-5 w-5\"/>\n ) : (\n <span>{index + 1}</span>\n )}\n </div>\n <span\n className={cx(\n 'mt-2 text-xs font-medium',\n state === 'complete' && 'text-gold',\n state === 'current' && 'text-white',\n state === 'error' && 'text-error',\n state === 'future' && 'text-silver'\n )}\n >\n {step.label}\n </span>\n </div>\n {!isLast && (\n <div\n className={cx(\n 'flex-1 h-0.5 mx-4 transition-all duration-200',\n index < currentIndex ? 'bg-gold' : 'bg-ash'\n )}\n />\n )}\n </React.Fragment>\n )\n })}\n </div>\n )\n }\n)\n\nStepper.displayName = 'Stepper'\n\nexport default Stepper\n","import React, {useState, useEffect, useRef} from 'react'\nimport {MarkdownContent} from './MarkdownContent'\nimport {cx} from '../utils/cx'\n\nexport type MessageVariant = 'user' | 'assistant'\n\nexport interface MessageBranchInfo {\n /**\n * Current branch index (1-based)\n */\n current: number\n /**\n * Total number of sibling branches\n */\n total: number\n /**\n * Navigate to previous branch\n */\n onPrevious?: () => void\n /**\n * Navigate to next branch\n */\n onNext?: () => void\n}\n\nexport interface MessageActionsConfig {\n /**\n * Called when user edits a user message (creates a branch)\n */\n onEdit?: (newContent: string) => void\n /**\n * Called when user retries an assistant message (creates a branch)\n */\n onRetry?: () => void\n /**\n * Whether to show the copy button\n * @default true\n */\n showCopy?: boolean\n}\n\nexport interface MessageProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: MessageVariant\n content: string\n isStreaming?: boolean\n /**\n * Branch navigation info (shows branch indicator if provided and total > 1)\n */\n branchInfo?: MessageBranchInfo\n /**\n * Actions configuration (shows action bar if provided)\n */\n actions?: MessageActionsConfig\n /**\n * Whether to hide actions (e.g., during streaming)\n */\n hideActions?: boolean\n}\n\nconst variantStyles: Record<MessageVariant, string> = {\n user: 'bg-gold text-obsidian ml-auto',\n assistant: 'bg-charcoal border border-ash text-white mr-auto',\n}\n\n// Inline action button component\nconst ActionButton: React.FC<{\n onClick: () => void\n label: string\n children: React.ReactNode\n className?: string\n disabled?: boolean\n}> = ({onClick, label, children, className, disabled}) => (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className={cx(\n 'p-1.5 text-silver/60 hover:text-silver transition-colors duration-150',\n 'hover:bg-white/5',\n 'disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-transparent',\n className\n )}\n aria-label={label}\n >\n {children}\n </button>\n)\n\n// Simple inline icons to avoid importing full icon library\nconst CopyIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-3.5 h-3.5\">\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/>\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>\n </svg>\n)\n\nconst CheckIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-3.5 h-3.5 text-success\">\n <polyline points=\"20 6 9 17 4 12\"/>\n </svg>\n)\n\nconst PencilIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-3.5 h-3.5\">\n <path d=\"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\"/>\n <path d=\"m15 5 4 4\"/>\n </svg>\n)\n\nconst RetryIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-3.5 h-3.5\">\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"/>\n <path d=\"M21 3v5h-5\"/>\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"/>\n <path d=\"M8 16H3v5\"/>\n </svg>\n)\n\nconst ChevronLeftIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-3 h-3\">\n <path d=\"m15 18-6-6 6-6\"/>\n </svg>\n)\n\nconst ChevronRightIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-3 h-3\">\n <path d=\"m9 18 6-6-6-6\"/>\n </svg>\n)\n\nconst GitBranchIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-3 h-3 mr-0.5 text-silver/50\">\n <line x1=\"6\" x2=\"6\" y1=\"3\" y2=\"15\"/>\n <circle cx=\"18\" cy=\"6\" r=\"3\"/>\n <circle cx=\"6\" cy=\"18\" r=\"3\"/>\n <path d=\"M18 9a9 9 0 0 1-9 9\"/>\n </svg>\n)\n\nconst XIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-4 h-4\">\n <path d=\"M18 6 6 18\"/>\n <path d=\"m6 6 12 12\"/>\n </svg>\n)\n\nconst SendIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-4 h-4\">\n <path d=\"m22 2-7 20-4-9-9-4Z\"/>\n <path d=\"M22 2 11 13\"/>\n </svg>\n)\n\nexport const Message = React.forwardRef<HTMLDivElement, MessageProps>(\n ({variant = 'assistant', className, content, isStreaming, branchInfo, actions, hideActions, ...rest}, ref) => {\n const isUser = variant === 'user'\n const [copied, setCopied] = useState(false)\n const [isEditing, setIsEditing] = useState(false)\n const [editValue, setEditValue] = useState(content)\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n const showBranchNav = branchInfo && branchInfo.total > 1\n const showActions = actions && !hideActions && !isStreaming\n\n // Auto-resize textarea when editing\n useEffect(() => {\n if (isEditing && textareaRef.current) {\n const textarea = textareaRef.current\n textarea.style.height = 'auto'\n textarea.style.height = `${textarea.scrollHeight}px`\n textarea.focus()\n // Move cursor to end\n textarea.setSelectionRange(textarea.value.length, textarea.value.length)\n }\n }, [isEditing])\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(content)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch {\n // Fallback\n const textArea = document.createElement('textarea')\n textArea.value = content\n document.body.appendChild(textArea)\n textArea.select()\n document.execCommand('copy')\n document.body.removeChild(textArea)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n }\n\n const handleStartEdit = () => {\n setEditValue(content)\n setIsEditing(true)\n }\n\n const handleCancelEdit = () => {\n setIsEditing(false)\n setEditValue(content)\n }\n\n const handleSubmitEdit = () => {\n const trimmed = editValue.trim()\n if (trimmed && trimmed !== content) {\n actions?.onEdit?.(trimmed)\n }\n setIsEditing(false)\n }\n\n const handleEditKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSubmitEdit()\n } else if (e.key === 'Escape') {\n handleCancelEdit()\n }\n }\n\n const handleEditChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setEditValue(e.target.value)\n // Auto-resize\n const textarea = e.target\n textarea.style.height = 'auto'\n textarea.style.height = `${textarea.scrollHeight}px`\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex flex-col',\n isUser ? 'items-end' : 'items-start',\n className\n )}\n {...rest}\n >\n {/* Message bubble OR Edit input (replaces message when editing) */}\n {isUser && isEditing ? (\n <div className=\"w-full max-w-11/12\">\n <div className=\"relative bg-gold\">\n <textarea\n ref={textareaRef}\n value={editValue}\n onChange={handleEditChange}\n onKeyDown={handleEditKeyDown}\n className=\"w-full bg-transparent text-obsidian px-3 py-2 pr-20 resize-none outline-none min-h-10 text-sm\"\n rows={1}\n />\n <div className=\"absolute right-1 top-1/2 -translate-y-1/2 flex gap-0.5\">\n <button\n type=\"button\"\n onClick={handleCancelEdit}\n className=\"p-1.5 text-obsidian/60 hover:text-obsidian transition-colors\"\n aria-label=\"Cancel edit\"\n >\n <XIcon />\n </button>\n <button\n type=\"button\"\n onClick={handleSubmitEdit}\n disabled={!editValue.trim() || editValue.trim() === content}\n className=\"p-1.5 text-obsidian/60 hover:text-obsidian transition-colors disabled:opacity-30\"\n aria-label=\"Submit edit\"\n >\n <SendIcon />\n </button>\n </div>\n </div>\n </div>\n ) : (\n <div\n className={cx(\n 'px-3 py-2 w-fit max-w-11/12',\n variantStyles[variant]\n )}\n >\n <MarkdownContent\n content={content}\n className={cx('prose-sm', isUser ? 'prose-inherit' : 'prose-invert')}\n isStreaming={isStreaming}\n cursorClassName=\"ml-0.5\"\n />\n </div>\n )}\n\n {/* Action bar - below the message, includes branch nav on the right */}\n {showActions && !isEditing && (\n <div className={cx(\n 'flex items-center gap-0.5 mt-1',\n isUser ? 'mr-1' : 'ml-1'\n )}>\n {/* Copy - available for both */}\n {(actions.showCopy !== false) && (\n <ActionButton onClick={handleCopy} label={copied ? 'Copied!' : 'Copy message'}>\n {copied ? <CheckIcon /> : <CopyIcon />}\n </ActionButton>\n )}\n\n {/* Edit - only for user messages */}\n {isUser && actions.onEdit && (\n <ActionButton onClick={handleStartEdit} label=\"Edit message\">\n <PencilIcon />\n </ActionButton>\n )}\n\n {/* Retry - only for assistant messages */}\n {!isUser && actions.onRetry && (\n <ActionButton onClick={actions.onRetry} label=\"Regenerate response\">\n <RetryIcon />\n </ActionButton>\n )}\n\n {/* Branch navigator - to the right of action buttons */}\n {showBranchNav && (\n <>\n <div className=\"w-px h-4 bg-ash/40 mx-1\" />\n <div className=\"flex items-center gap-0.5 text-silver/70\">\n <GitBranchIcon />\n <button\n type=\"button\"\n onClick={branchInfo.onPrevious}\n disabled={branchInfo.current <= 1}\n className={cx(\n 'p-0.5 hover:text-white hover:bg-white/10 transition-colors',\n 'disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent disabled:hover:text-silver/70'\n )}\n aria-label=\"Previous branch\"\n >\n <ChevronLeftIcon />\n </button>\n <span className=\"text-xs tabular-nums min-w-6 text-center\">\n {branchInfo.current}/{branchInfo.total}\n </span>\n <button\n type=\"button\"\n onClick={branchInfo.onNext}\n disabled={branchInfo.current >= branchInfo.total}\n className={cx(\n 'p-0.5 hover:text-white hover:bg-white/10 transition-colors',\n 'disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent disabled:hover:text-silver/70'\n )}\n aria-label=\"Next branch\"\n >\n <ChevronRightIcon />\n </button>\n </div>\n </>\n )}\n </div>\n )}\n </div>\n )\n }\n)\n\nMessage.displayName = 'Message'\n\nexport default Message\n","import React, { useMemo } from 'react'\nimport DOMPurify, { type Config } from 'dompurify'\nimport { cx } from '../utils/cx'\n\nexport interface MarkdownContentProps extends React.HTMLAttributes<HTMLDivElement> {\n content: string\n sanitizeConfig?: Config\n /**\n * When true, injects a streaming cursor at the end of the content\n */\n isStreaming?: boolean\n /**\n * Additional classes for the streaming cursor\n */\n cursorClassName?: string\n}\n\nconst DEFAULT_SANITIZE_CONFIG: Config = {\n ALLOWED_TAGS: [\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'p', 'br', 'hr',\n 'strong', 'b', 'em', 'i', 'u', 's', 'strike', 'del', 'ins',\n 'sup', 'sub', 'mark', 'small',\n 'ul', 'ol', 'li',\n 'a',\n 'code', 'pre', 'kbd', 'samp', 'var',\n 'blockquote', 'q', 'cite', 'abbr',\n 'table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'caption', 'colgroup', 'col',\n 'div', 'span', 'details', 'summary',\n ],\n ALLOWED_ATTR: [\n 'href', 'title', 'target', 'rel',\n 'class', 'id',\n 'colspan', 'rowspan', 'scope',\n 'open',\n ],\n ADD_ATTR: ['target', 'rel'],\n ALLOWED_URI_REGEXP: /^(?:(?:https?|mailto|tel):|[^a-z]|[a-z+.-]+(?:[^a-z+.\\-:]|$))/i,\n}\n\nfunction useDOMPurifySetup() {\n useMemo(() => {\n DOMPurify.addHook('afterSanitizeAttributes', (node) => {\n if (node.tagName === 'A') {\n node.setAttribute('target', '_blank')\n node.setAttribute('rel', 'noopener noreferrer')\n }\n })\n }, [])\n}\n\nconst CURSOR_BASE_CLASSES = 'inline-block bg-current animate-cursor-blink w-0.5 h-cursor translate-y-cursor-offset'\n\n/**\n * Injects a streaming cursor at the end of the HTML content.\n * Finds the deepest last element and appends the cursor inside it.\n */\nfunction injectStreamingCursor(html: string, cursorClassName?: string): string {\n if (!html.trim()) {\n // Empty content - just return the cursor\n return `<span class=\"${cx(CURSOR_BASE_CLASSES, cursorClassName)}\" aria-hidden=\"true\"></span>`\n }\n\n const cursorHtml = `<span class=\"${cx(CURSOR_BASE_CLASSES, cursorClassName)}\" aria-hidden=\"true\"></span>`\n\n // Parse the HTML to find the right injection point\n const parser = new DOMParser()\n const doc = parser.parseFromString(`<div>${html}</div>`, 'text/html')\n const container = doc.body.firstChild as HTMLElement\n\n if (!container) {\n return html + cursorHtml\n }\n\n // Find the deepest last element to append the cursor to\n let target: Element = container\n while (target.lastElementChild) {\n const lastChild = target.lastElementChild\n // Stop at inline elements or elements that shouldn't have block children\n const tagName = lastChild.tagName.toLowerCase()\n if (['code', 'a', 'strong', 'em', 'b', 'i', 'span', 'mark', 'del', 's'].includes(tagName)) {\n break\n }\n target = lastChild\n }\n\n // Append cursor to the target element\n target.insertAdjacentHTML('beforeend', cursorHtml)\n\n // Return the inner HTML (excluding our wrapper div)\n return container.innerHTML\n}\n\nexport const MarkdownContent = React.forwardRef<HTMLDivElement, MarkdownContentProps>(\n ({className, content, sanitizeConfig, isStreaming, cursorClassName, ...rest}, ref) => {\n useDOMPurifySetup()\n\n const sanitizedHtml = useMemo(() => {\n if (!content && !isStreaming) {\n return ''\n }\n const config = sanitizeConfig ?? DEFAULT_SANITIZE_CONFIG\n const sanitized = content ? DOMPurify.sanitize(content, config) : ''\n\n if (isStreaming) {\n return injectStreamingCursor(sanitized, cursorClassName)\n }\n\n return sanitized\n }, [content, sanitizeConfig, isStreaming, cursorClassName])\n\n return (\n <div\n ref={ref}\n className={cx('prose', className)}\n dangerouslySetInnerHTML={{__html: sanitizedHtml}}\n {...rest}\n />\n )\n }\n)\n\nMarkdownContent.displayName = 'MarkdownContent'\n\nexport default MarkdownContent","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface StreamingCursorProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: 'block' | 'line' | 'underscore'\n}\n\nexport const StreamingCursor = React.forwardRef<HTMLSpanElement, StreamingCursorProps>(\n ({className, variant = 'line', ...rest}, ref) => {\n const variantStyles = {\n block: 'w-2.5 h-cursor translate-y-cursor-offset',\n line: 'w-0.5 h-cursor translate-y-cursor-offset',\n underscore: 'w-2.5 h-0.5 self-end mb-0.5'\n }\n\n return (\n <span\n ref={ref}\n className={cx(\n 'inline-block bg-current animate-cursor-blink',\n variantStyles[variant],\n className\n )}\n aria-hidden=\"true\"\n {...rest}\n />\n )\n }\n)\n\nStreamingCursor.displayName = 'StreamingCursor'\n\nexport default StreamingCursor\n","import React, {useCallback, useMemo, useState} from 'react'\nimport {cx} from '../../utils'\nimport {ChatView, type ChatViewItem} from './ChatView'\nimport {type Attachment, ChatInput} from './ChatInput'\nimport {type Conversation, ConversationSidebar} from './ConversationSidebar'\nimport {ArtifactsPanel} from './ArtifactsPanel'\nimport {type Artifact, useArtifactParser} from './hooks'\nimport {type ConversationTree, getActivePathMessages, getSiblingInfo, switchBranch,} from './types'\n\nexport interface ChatMessage {\n id: string\n variant: 'user' | 'assistant'\n content: string\n isStreaming?: boolean\n}\n\nexport interface ChatInterfaceProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSubmit'> {\n /**\n * Array of messages in the conversation (flat mode)\n * Use this OR conversationTree, not both\n */\n messages?: ChatMessage[]\n /**\n * Conversation tree for branching support\n * Use this OR messages, not both\n */\n conversationTree?: ConversationTree\n /**\n * Called when the conversation tree changes (for tree mode)\n */\n onTreeChange?: (tree: ConversationTree) => void\n /**\n * List of past conversations for the sidebar\n */\n conversations?: Conversation[]\n /**\n * Called when a message is submitted\n */\n onMessageSubmit?: (message: string, attachments?: Attachment[]) => void\n /**\n * Called when a user message is edited (creates a branch)\n */\n onEditMessage?: (messageId: string, newContent: string) => void\n /**\n * Called when an assistant message is retried (creates a branch)\n */\n onRetryMessage?: (messageId: string) => void\n /**\n * Called when Stop button is clicked during streaming\n */\n onStop?: () => void\n /**\n * Called when a conversation is selected from sidebar\n */\n onSelectConversation?: (id: string) => void\n /**\n * Called when \"New Chat\" is clicked\n */\n onNewChat?: () => void\n /**\n * Whether the assistant is currently streaming a response\n */\n isStreaming?: boolean\n /**\n * Whether to show the thinking indicator (before first response token)\n */\n isThinking?: boolean\n /**\n * Input placeholder text\n */\n placeholder?: string\n /**\n * Helper text shown in empty state\n */\n emptyStateHelper?: React.ReactNode\n /**\n * Initial sidebar collapsed state\n */\n initialSidebarCollapsed?: boolean\n /**\n * Custom empty state content\n */\n emptyState?: React.ReactNode\n /**\n * Whether to show attachment button\n */\n showAttachmentButton?: boolean\n /**\n * Whether to enable message actions (copy, edit, retry)\n */\n enableMessageActions?: boolean\n /**\n * Current attachments for the input\n */\n attachments?: Attachment[]\n /**\n * Called when attachments change in the input\n */\n onAttachmentsChange?: (attachments: Attachment[]) => void\n}\n\n/**\n * ChatInterface is the main orchestrator for a full-featured chat experience.\n *\n * Features:\n * - ConversationSidebar (left) — collapsible list of past conversations\n * - ChatView (center) — main conversation area with smart scrolling\n * - ArtifactsPanel (right) — agent-controlled panel for rich content\n * - ChatInput — position-aware input that centers in empty state\n * - Branching — support for conversation tree with branch navigation\n * - Message Actions — copy, edit, retry\n * - Thinking Indicator — shown between user message and response\n */\nexport const ChatInterface = React.forwardRef<HTMLDivElement, ChatInterfaceProps>(\n (\n {\n messages = [],\n conversationTree,\n onTreeChange,\n conversations = [],\n onMessageSubmit,\n onEditMessage,\n onRetryMessage,\n onStop,\n onSelectConversation,\n onNewChat,\n isStreaming = false,\n isThinking = false,\n placeholder = 'Send a message...',\n emptyStateHelper = 'Type anything to start a conversation',\n initialSidebarCollapsed = false,\n emptyState,\n showAttachmentButton = true,\n enableMessageActions = true,\n attachments: propsAttachments,\n onAttachmentsChange,\n className,\n ...rest\n },\n ref\n ) => {\n const [sidebarCollapsed, setSidebarCollapsed] = useState(initialSidebarCollapsed)\n const [artifactsPanelOpen, setArtifactsPanelOpen] = useState(false)\n\n // Determine if we're using tree mode or flat mode\n const isTreeMode = !!conversationTree\n\n // Get messages from tree or use flat array\n const effectiveMessages: ChatMessage[] = useMemo(() => {\n if (isTreeMode && conversationTree) {\n const pathNodes = getActivePathMessages(conversationTree)\n return pathNodes.map((node) => ({\n id: node.id,\n variant: node.role,\n content: node.content,\n isStreaming: node.isStreaming,\n }))\n }\n return messages\n }, [isTreeMode, conversationTree, messages])\n\n // Track the latest user message index for scroll anchoring\n const latestUserMessageIndex = useMemo(() => {\n for (let i = effectiveMessages.length - 1; i >= 0; i--) {\n if (effectiveMessages[i].variant === 'user') {\n return i\n }\n }\n return -1\n }, [effectiveMessages])\n\n // Get all assistant message contents for artifact parsing\n const allAssistantContent = useMemo(() => {\n return effectiveMessages\n .filter((msg) => msg.variant === 'assistant')\n .map((msg) => msg.content)\n .join('\\n\\n')\n }, [effectiveMessages])\n\n // Parse artifacts from all assistant messages\n const {artifacts, hasPendingArtifact} = useArtifactParser(allAssistantContent)\n\n // Get clean content for just the currently streaming message (if any)\n const currentStreamingCleanContent = useMemo(() => {\n if (!isStreaming || effectiveMessages.length === 0) {\n return null\n }\n const lastMessage = effectiveMessages[effectiveMessages.length - 1]\n if (lastMessage.variant === 'assistant') {\n // Strip artifact syntax from the streaming message\n const content = lastMessage.content\n // Remove complete artifacts\n let clean = content.replace(/:::artifact\\{[^}]+}(?:[^:]*?)?:::/gs, '')\n // Remove incomplete artifacts (still streaming)\n const startMatch = clean.match(/:::artifact\\{/)\n if (startMatch && startMatch.index !== undefined) {\n clean = clean.substring(0, startMatch.index)\n }\n return clean.trim()\n }\n return null\n }, [effectiveMessages, isStreaming])\n\n // Auto-open artifacts panel when artifacts are found (including pending)\n React.useEffect(() => {\n if ((artifacts.length > 0 || hasPendingArtifact) && !artifactsPanelOpen) {\n setArtifactsPanelOpen(true)\n }\n }, [artifacts.length, hasPendingArtifact, artifactsPanelOpen])\n\n // Handle branch switching\n const handleBranchSwitch = useCallback(\n (nodeId: string, direction: 'prev' | 'next') => {\n if (!isTreeMode || !conversationTree || !onTreeChange) {\n return\n }\n const newTree = switchBranch(conversationTree, nodeId, direction)\n onTreeChange(newTree)\n },\n [isTreeMode, conversationTree, onTreeChange]\n )\n\n // Build the messages array with cleaned content (artifact syntax stripped)\n const displayMessages: ChatViewItem[] = useMemo(() => {\n return effectiveMessages.map((msg, idx) => {\n let cleanContent = msg.content\n\n if (msg.variant === 'assistant') {\n // For the currently streaming message, use the streaming-specific clean content\n if (isStreaming && idx === effectiveMessages.length - 1 && currentStreamingCleanContent\n !== null) {\n cleanContent = currentStreamingCleanContent\n } else {\n // For completed assistant messages, strip artifact syntax\n let clean = msg.content.replace(/:::artifact\\{[^}]+}(?:[^:]*?)?:::/gs, '')\n const startMatch = clean.match(/:::artifact\\{/)\n if (startMatch && startMatch.index !== undefined) {\n clean = clean.substring(0, startMatch.index)\n }\n cleanContent = clean.trim()\n }\n }\n\n // Get branch info if in tree mode\n let branchInfo = undefined\n if (isTreeMode && conversationTree) {\n const siblingInfo = getSiblingInfo(conversationTree, msg.id)\n if (siblingInfo.total > 1) {\n branchInfo = {\n current: siblingInfo.current,\n total: siblingInfo.total,\n onPrevious: () => handleBranchSwitch(msg.id, 'prev'),\n onNext: () => handleBranchSwitch(msg.id, 'next'),\n }\n }\n }\n\n // Build actions config\n const actions = enableMessageActions\n ? {\n showCopy: true,\n onEdit: msg.variant === 'user' && onEditMessage\n ? (newContent: string) => onEditMessage(msg.id, newContent)\n : undefined,\n onRetry: msg.variant === 'assistant' && onRetryMessage\n ? () => onRetryMessage(msg.id)\n : undefined,\n }\n : undefined\n\n return {\n ...msg,\n content: cleanContent,\n branchInfo,\n actions,\n }\n })\n }, [effectiveMessages, isStreaming, currentStreamingCleanContent, isTreeMode,\n conversationTree, enableMessageActions, onEditMessage, onRetryMessage, handleBranchSwitch])\n\n // All artifacts parsed from all assistant messages via useArtifactParser\n const allArtifacts: Artifact[] = useMemo(() => {\n return artifacts\n }, [artifacts])\n\n const handleSubmit = useCallback(\n (message: string, attachments?: Attachment[]) => {\n onMessageSubmit?.(message, attachments)\n },\n [onMessageSubmit]\n )\n\n const toggleSidebar = useCallback(() => {\n setSidebarCollapsed((prev) => !prev)\n }, [])\n\n const toggleArtifactsPanel = useCallback(() => {\n setArtifactsPanelOpen((prev) => !prev)\n }, [])\n\n const isEmpty = effectiveMessages.length === 0\n\n return (\n <div\n ref={ref}\n className={cx('flex h-full w-full bg-obsidian overflow-hidden', className)}\n {...rest}\n >\n {/* Sidebar */}\n <ConversationSidebar\n conversations={conversations}\n isCollapsed={sidebarCollapsed}\n onSelectConversation={onSelectConversation}\n onNewChat={onNewChat}\n onToggleCollapse={toggleSidebar}\n />\n\n {/* Main content area */}\n <div className=\"flex-1 flex flex-col min-w-0 relative\">\n <div className={cx(\n \"flex-1 flex flex-col min-h-0 relative transition-all duration-500\",\n isEmpty ? \"justify-center\" : \"justify-start\"\n )}>\n {/* Top spacer for centering in empty state */}\n <div className={cx(\n \"transition-all duration-500 ease-in-out\",\n isEmpty ? \"flex-1\" : \"flex-zero\"\n )}/>\n\n {/* Messages Area */}\n <div className={cx(\n \"transition-all duration-500 ease-in-out overflow-hidden flex flex-col\",\n isEmpty ? \"flex-zero opacity-0\" : \"flex-1 opacity-100\"\n )}>\n <ChatView\n messages={displayMessages}\n latestUserMessageIndex={latestUserMessageIndex}\n isStreaming={isStreaming}\n isThinking={isThinking}\n className=\"flex-1\"\n />\n </div>\n\n {/* Input Area */}\n <div className={cx(\n \"transition-all duration-500 ease-in-out z-10 w-full\",\n isEmpty ? \"p-4\" : \"shrink-0 p-4 border-t border-ash/40 bg-obsidian\"\n )}>\n {isEmpty && emptyState ? (\n <div className=\"flex justify-center\">\n {emptyState}\n </div>\n ) : (\n <ChatInput\n position={isEmpty ? \"centered\" : \"bottom\"}\n placeholder={placeholder}\n helperText={isEmpty ? emptyStateHelper : undefined}\n onSubmit={handleSubmit}\n disabled={isEmpty ? isStreaming : (isStreaming && !onStop)}\n isStreaming={isStreaming}\n onStop={onStop}\n showAttachmentButton={showAttachmentButton}\n attachments={propsAttachments}\n onAttachmentsChange={onAttachmentsChange}\n />\n )}\n </div>\n\n {/* Bottom spacer for centering in empty state */}\n <div className={cx(\n \"transition-all duration-500 ease-in-out\",\n isEmpty ? \"flex-1\" : \"flex-zero\"\n )}/>\n </div>\n </div>\n\n {/* Artifacts panel */}\n <ArtifactsPanel\n artifacts={allArtifacts}\n isOpen={artifactsPanelOpen}\n onClose={toggleArtifactsPanel}\n isLoading={isStreaming && hasPendingArtifact}\n />\n </div>\n )\n }\n)\n\nChatInterface.displayName = 'ChatInterface'\n","import React, {useEffect} from 'react'\nimport {\n Message,\n type MessageActionsConfig,\n type MessageBranchInfo,\n type MessageProps,\n type MessageVariant\n} from '../Message'\nimport {cx} from '../../utils'\nimport {useScrollAnchor} from './hooks/useScrollAnchor'\nimport {useAdaptiveSpacer} from './hooks/useAdaptiveSpacer'\nimport {ThinkingIndicator} from './ThinkingIndicator'\n\nexport interface ChatViewItem extends Omit<MessageProps, 'variant' | 'children'> {\n id?: string\n variant?: MessageVariant\n /**\n * Branch navigation info for this message\n */\n branchInfo?: MessageBranchInfo\n /**\n * Actions configuration for this message\n */\n actions?: MessageActionsConfig\n}\n\nexport interface ChatViewProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Array of chat messages to display\n */\n messages: ChatViewItem[]\n /**\n * Index of the latest user message to anchor scroll to.\n * When this changes, the component scrolls that message to the top.\n */\n latestUserMessageIndex?: number\n /**\n * Whether the assistant is currently streaming a response\n */\n isStreaming?: boolean\n /**\n * Whether to show the thinking indicator (between user message and response)\n */\n isThinking?: boolean\n /**\n * Callback when the user scrolls manually\n */\n onScroll?: (e: React.UIEvent<HTMLDivElement>) => void\n}\n\n/**\n * ChatView displays a conversation thread with smart scrolling behavior.\n *\n * Key behaviors:\n * - When a user message is sent, it anchors to the top of the viewport\n * - Does NOT auto-scroll during streaming (respects user's reading position)\n * - Smooth transitions and animations\n */\nexport const ChatView = React.forwardRef<HTMLDivElement, ChatViewProps>(\n ({messages, latestUserMessageIndex, isStreaming, isThinking, onScroll, className, ...rest},\n ref) => {\n const {containerRef, anchorRef, scrollToAnchor} = useScrollAnchor({\n behavior: 'smooth',\n block: 'start',\n })\n\n const {contentRef, spacerRef, spacerHeight} = useAdaptiveSpacer({\n containerRef,\n anchorRef,\n })\n\n // Scroll to anchor when latest user message index changes\n useEffect(() => {\n if (latestUserMessageIndex !== undefined && latestUserMessageIndex >= 0) {\n scrollToAnchor()\n }\n }, [latestUserMessageIndex, scrollToAnchor])\n\n // Find the latest user message for anchoring\n const latestUserIdx =\n latestUserMessageIndex ??\n messages.reduceRight((found, msg, idx) => {\n if (found === -1 && msg.variant === 'user') {\n return idx\n }\n return found\n }, -1)\n\n // Determine if we should show thinking indicator\n // Show when isThinking is true AND there are messages AND the last message is from user\n const showThinking = isThinking && messages.length > 0 && messages[messages.length\n - 1]?.variant === 'user'\n\n return (\n <div\n ref={(node) => {\n // Handle both refs\n ;(containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n }}\n onScroll={onScroll}\n className={cx(\n 'flex flex-col w-full h-full overflow-y-auto scroll-smooth',\n 'px-4 py-6 overscroll-contain',\n className\n )}\n {...rest}\n >\n {/* Content wrapper for adaptive spacer measurement */}\n <div ref={contentRef} className=\"relative flex flex-col gap-3\">\n {messages.map(({\n id,\n variant,\n className: messageClassName,\n branchInfo,\n actions,\n isStreaming: nodeIsStreaming,\n ...messageProps\n }, index) => {\n const isAnchor = index === latestUserIdx\n const isLastMessage = index === messages.length - 1\n const showStreaming = isLastMessage && isStreaming && variant === 'assistant'\n const isMessageStreaming = showStreaming || !!nodeIsStreaming\n // Hide actions during streaming\n return (\n <div\n key={id ?? `msg-${index}`}\n ref={isAnchor ? anchorRef : undefined}\n className={isAnchor ? 'scroll-mt-4' : undefined}\n >\n <Message\n variant={variant}\n isStreaming={isMessageStreaming}\n className={messageClassName}\n branchInfo={branchInfo}\n actions={actions}\n hideActions={isMessageStreaming}\n {...messageProps}\n />\n </div>\n )\n })}\n\n {/* Thinking indicator */}\n {showThinking && (\n <ThinkingIndicator isVisible/>\n )}\n </div>\n\n {/* Adaptive bottom spacer - fills remaining space exactly */}\n <div\n ref={spacerRef}\n className=\"shrink-0 pointer-events-none\"\n style={{height: spacerHeight}}\n aria-hidden=\"true\"\n />\n </div>\n )\n }\n)\n\nChatView.displayName = 'ChatView'\n\nexport default ChatView\n","import {useCallback, useRef} from 'react'\n\nexport interface UseScrollAnchorOptions {\n /**\n * Behavior for scrolling. Defaults to 'smooth'.\n */\n behavior?: ScrollBehavior\n /**\n * Block alignment for scrollIntoView. Defaults to 'start'.\n */\n block?: ScrollLogicalPosition\n}\n\nexport interface UseScrollAnchorReturn {\n /**\n * Ref to attach to the scrollable container\n */\n containerRef: React.RefObject<HTMLDivElement | null>\n /**\n * Ref to attach to the anchor element (latest user message)\n */\n anchorRef: React.RefObject<HTMLDivElement | null>\n /**\n * Scroll the anchor element into view. Call this on user message submission.\n */\n scrollToAnchor: () => void\n /**\n * Scroll to the bottom of the container.\n */\n scrollToBottom: () => void\n /**\n * Check if user has scrolled away from the bottom.\n */\n isScrolledToBottom: () => boolean\n}\n\n/**\n * Hook for smart scroll behavior in chat interfaces.\n *\n * Key behaviors:\n * - Anchors user messages to the top of the viewport when they send a message\n * - Does NOT auto-scroll during streaming to respect user's reading position\n * - Allows manual scroll detection\n */\nexport function useScrollAnchor(\n options: UseScrollAnchorOptions = {}\n): UseScrollAnchorReturn {\n const {behavior = 'smooth', block = 'start'} = options\n\n const containerRef = useRef<HTMLDivElement>(null)\n const anchorRef = useRef<HTMLDivElement>(null)\n\n const scrollToAnchor = useCallback(() => {\n const el = anchorRef.current\n if (!el) return\n\n // Double rAF to ensure layout updates (e.g., adaptive spacer) have been applied.\n // First frame: other rAF callbacks (like spacer recalculation) run\n // Second frame: scroll happens with correct layout\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n el.scrollIntoView({behavior, block})\n })\n })\n }, [behavior, block])\n\n const scrollToBottom = useCallback(() => {\n const container = containerRef.current\n if (!container) return\n\n if (typeof container.scrollTo === 'function') {\n container.scrollTo({top: container.scrollHeight, behavior})\n } else {\n container.scrollTop = container.scrollHeight\n }\n }, [behavior])\n\n const isScrolledToBottom = useCallback(() => {\n const container = containerRef.current\n if (!container) return true\n\n const threshold = 50 // pixels from bottom to consider \"at bottom\"\n const {scrollTop, scrollHeight, clientHeight} = container\n return scrollHeight - scrollTop - clientHeight < threshold\n }, [])\n\n return {\n containerRef,\n anchorRef,\n scrollToAnchor,\n scrollToBottom,\n isScrolledToBottom,\n }\n}\n\nexport default useScrollAnchor\n","import {useCallback, useEffect, useRef, useState} from 'react'\n\nexport interface UseAdaptiveSpacerOptions {\n /**\n * Minimum spacer height. Defaults to 0.\n */\n minHeight?: number\n /**\n * External container ref to use instead of creating one internally.\n * Useful when sharing the container ref with other hooks (e.g., useScrollAnchor).\n */\n containerRef?: React.RefObject<HTMLDivElement | null>\n /**\n * Ref to the anchor element (e.g., latest user message).\n * When provided, spacer is calculated to allow anchor to scroll to top.\n */\n anchorRef?: React.RefObject<HTMLDivElement | null>\n}\n\nexport interface UseAdaptiveSpacerReturn {\n /**\n * Ref to attach to the scrollable container (only use if not providing external ref)\n */\n containerRef: React.RefObject<HTMLDivElement | null>\n /**\n * Ref to attach to the content wrapper (excludes spacer)\n */\n contentRef: React.RefObject<HTMLDivElement | null>\n /**\n * Ref to attach to the spacer element for imperative height updates\n */\n spacerRef: React.RefObject<HTMLDivElement | null>\n /**\n * Calculated spacer height in pixels\n */\n spacerHeight: number\n /**\n * Force recalculation of spacer height\n */\n recalculate: () => void\n}\n\n/**\n * Hook that calculates the exact spacer height needed to fill remaining viewport space\n * while allowing the anchor element to scroll to the top.\n *\n * The spacer height is calculated as:\n * spacerHeight = containerHeight - padding - heightFromAnchorToBottom\n *\n * This ensures:\n * - The anchor message can scroll to the top of the viewport\n * - Below the anchor, content + spacer fills exactly the remaining space\n * - As content below anchor grows, spacer shrinks\n * - When content exceeds available space, spacer becomes 0\n */\nexport function useAdaptiveSpacer(\n options: UseAdaptiveSpacerOptions = {}\n): UseAdaptiveSpacerReturn {\n const {minHeight = 0, containerRef: externalContainerRef, anchorRef} = options\n\n const internalContainerRef = useRef<HTMLDivElement>(null)\n const containerRef = externalContainerRef ?? internalContainerRef\n const contentRef = useRef<HTMLDivElement>(null)\n const spacerRef = useRef<HTMLDivElement>(null)\n const [spacerHeight, setSpacerHeight] = useState(0)\n\n const recalculate = useCallback(() => {\n const container = containerRef.current\n const content = contentRef.current\n if (!container || !content) return\n\n // Get container's computed padding\n const style = getComputedStyle(container)\n const paddingTop = parseFloat(style.paddingTop) || 0\n const paddingBottom = parseFloat(style.paddingBottom) || 0\n const availableHeight = container.clientHeight - paddingTop - paddingBottom\n\n // Calculate height from anchor to bottom of content\n // Using offsetTop for stable measurement from \"zero\" (content top)\n let heightFromAnchorToBottom: number\n const anchor = anchorRef?.current\n\n if (anchor && content.contains(anchor)) {\n // Anchor's position from the top of content (the \"zero\" point)\n // Content wrapper has position:relative, so offsetTop is relative to it\n const anchorTop = anchor.offsetTop\n heightFromAnchorToBottom = content.scrollHeight - anchorTop\n } else {\n // No anchor, use total content height\n heightFromAnchorToBottom = content.scrollHeight\n }\n\n const newSpacerHeight = Math.max(minHeight, availableHeight - heightFromAnchorToBottom)\n\n // Update DOM imperatively for immediate effect (before React commits state)\n // This ensures scrollToAnchor sees the correct spacer height\n if (spacerRef.current) {\n spacerRef.current.style.height = `${newSpacerHeight}px`\n }\n\n // Also update state for React reconciliation\n setSpacerHeight(newSpacerHeight)\n }, [minHeight, anchorRef])\n\n useEffect(() => {\n const container = containerRef.current\n const content = contentRef.current\n if (!container || !content) return\n\n // Initial calculation\n recalculate()\n\n // Observe both container and content for size changes\n const resizeObserver = new ResizeObserver(() => {\n recalculate()\n })\n\n resizeObserver.observe(container)\n resizeObserver.observe(content)\n\n // Also observe mutations in content (for DOM changes that don't trigger resize)\n const mutationObserver = new MutationObserver(() => {\n // Use requestAnimationFrame to batch with render\n requestAnimationFrame(recalculate)\n })\n\n mutationObserver.observe(content, {\n childList: true,\n subtree: true,\n characterData: true,\n })\n\n return () => {\n resizeObserver.disconnect()\n mutationObserver.disconnect()\n }\n }, [recalculate])\n\n return {\n containerRef,\n contentRef,\n spacerRef,\n spacerHeight,\n recalculate,\n }\n}\n\nexport default useAdaptiveSpacer\n","import React, {useState, useEffect} from 'react'\nimport {cx} from '../../utils/cx'\n\nconst THINKING_PHRASES = [\n 'Consulting the ancient tomes...',\n 'Parsing the ineffable...',\n 'Traversing the manifold of possibilities...',\n 'Genuflecting before the oracle...',\n 'Distilling quintessence...',\n 'Communing with the machine spirits...',\n 'Unfolding higher dimensions...',\n 'Perturbing the probability matrix...',\n 'Invoking the categorical imperative...',\n 'Reticulating splines...',\n 'Brewing a fresh batch of tokens...',\n 'Consulting my inner monologue...',\n 'Summoning the muse...',\n]\n\nexport interface ThinkingIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Whether the indicator is visible/active\n */\n isVisible?: boolean\n /**\n * Interval between phrase changes in ms\n * @default 2500\n */\n phraseInterval?: number\n /**\n * Custom phrases to cycle through (defaults to built-in phrases)\n */\n phrases?: string[]\n}\n\nexport const ThinkingIndicator = React.forwardRef<HTMLDivElement, ThinkingIndicatorProps>(\n (\n {\n isVisible = true,\n phraseInterval = 2500,\n phrases = THINKING_PHRASES,\n className,\n ...rest\n },\n ref\n ) => {\n // Start at a random phrase each time\n const [currentIndex, setCurrentIndex] = useState(() => Math.floor(Math.random() * phrases.length))\n const [isTransitioning, setIsTransitioning] = useState(false)\n\n useEffect(() => {\n if (!isVisible || phrases.length <= 1) return\n\n const interval = setInterval(() => {\n setIsTransitioning(true)\n\n // Wait for fade out, then change phrase\n setTimeout(() => {\n setCurrentIndex((prev) => (prev + 1) % phrases.length)\n setIsTransitioning(false)\n }, 200)\n }, phraseInterval)\n\n return () => clearInterval(interval)\n }, [isVisible, phrases.length, phraseInterval])\n\n if (!isVisible) return null\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center gap-2 px-3 py-2 w-fit',\n 'bg-charcoal border border-ash text-silver',\n 'mr-auto',\n className\n )}\n role=\"status\"\n aria-live=\"polite\"\n {...rest}\n >\n {/* Animated dots */}\n <div className=\"flex gap-1\" aria-hidden=\"true\">\n <span className=\"w-1.5 h-1.5 bg-gold/60 rounded-full animate-pulse\" style={{animationDelay: '0ms'}} />\n <span className=\"w-1.5 h-1.5 bg-gold/60 rounded-full animate-pulse\" style={{animationDelay: '150ms'}} />\n <span className=\"w-1.5 h-1.5 bg-gold/60 rounded-full animate-pulse\" style={{animationDelay: '300ms'}} />\n </div>\n\n {/* Phrase with fade transition */}\n <span\n className={cx(\n 'text-sm italic transition-opacity duration-200',\n isTransitioning ? 'opacity-0' : 'opacity-100'\n )}\n >\n {phrases[currentIndex]}\n </span>\n </div>\n )\n }\n)\n\nThinkingIndicator.displayName = 'ThinkingIndicator'\n\nexport default ThinkingIndicator\n","import React, {useCallback, useEffect, useRef, useState} from 'react'\nimport {cx} from '../../utils'\nimport {Paperclip, Send, Square} from 'lucide-react'\nimport {type AttachmentItem, AttachmentPreview} from '../AttachmentPreview'\nimport {createPreviewUrl, generateId, isImageFile} from './types'\n\nexport type ChatInputPosition = 'centered' | 'bottom'\n\nexport type AttachmentStatus = 'pending' | 'uploading' | 'complete' | 'error'\n\nexport interface Attachment {\n id: string\n file: File\n previewUrl?: string\n status: AttachmentStatus\n error?: string\n progress?: number\n}\n\nexport interface ChatInputProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSubmit'> {\n /**\n * Position of the input: 'centered' for empty state, 'bottom' for conversation mode\n */\n position?: ChatInputPosition\n /**\n * Placeholder text for the input\n */\n placeholder?: string\n /**\n * Helper text shown above the input in centered mode\n */\n helperText?: React.ReactNode\n /**\n * Called when the user submits a message\n */\n onSubmit?: (message: string, attachments?: Attachment[]) => void\n /**\n * Whether the input is disabled (e.g., during streaming)\n */\n disabled?: boolean\n /**\n * Whether to animate the transition between positions\n */\n animate?: boolean\n /**\n * Whether the assistant is currently streaming (shows Stop button)\n */\n isStreaming?: boolean\n /**\n * Called when the Stop button is clicked during streaming\n */\n onStop?: () => void\n /**\n * Current attachments (controlled mode)\n */\n attachments?: Attachment[]\n /**\n * Called when attachments change (controlled mode)\n */\n onAttachmentsChange?: (attachments: Attachment[]) => void\n /**\n * Whether to show the attachment button\n */\n showAttachmentButton?: boolean\n /**\n * Accepted file types for attachments\n */\n acceptedFileTypes?: string\n}\n\nexport const ChatInput = React.forwardRef<HTMLDivElement, ChatInputProps>(\n (\n {\n position = 'bottom',\n placeholder = 'Send a message...',\n helperText,\n onSubmit,\n disabled = false,\n animate = true,\n isStreaming = false,\n onStop,\n attachments: controlledAttachments,\n onAttachmentsChange,\n showAttachmentButton = true,\n acceptedFileTypes,\n className,\n ...rest\n },\n ref\n ) => {\n const [value, setValue] = useState('')\n const [localAttachments, setLocalAttachments] = useState<Attachment[]>([])\n const [isDragOver, setIsDragOver] = useState(false)\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n // Determine if using controlled or uncontrolled attachments\n const attachments = controlledAttachments ?? localAttachments\n const setAttachments = useCallback(\n (newAttachments: Attachment[] | ((prev: Attachment[]) => Attachment[])) => {\n if (onAttachmentsChange) {\n if (typeof newAttachments === 'function') {\n onAttachmentsChange(newAttachments(attachments))\n } else {\n onAttachmentsChange(newAttachments)\n }\n } else {\n setLocalAttachments(newAttachments)\n }\n },\n [attachments, onAttachmentsChange]\n )\n\n const handleSubmit = useCallback(() => {\n const trimmed = value.trim()\n if (!trimmed || disabled || isStreaming) {\n return\n }\n\n onSubmit?.(trimmed, attachments.length > 0 ? attachments : undefined)\n setValue('')\n setAttachments([])\n\n // Reset textarea height\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto'\n }\n }, [value, disabled, isStreaming, onSubmit, attachments, setAttachments])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSubmit()\n }\n },\n [handleSubmit]\n )\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setValue(e.target.value)\n\n // Auto-resize textarea\n const textarea = e.target\n textarea.style.height = 'auto'\n textarea.style.height = `${Math.min(textarea.scrollHeight, 200)}px`\n }, [])\n\n // Focus input when it becomes enabled\n useEffect(() => {\n if (!disabled && !isStreaming && textareaRef.current) {\n textareaRef.current.focus()\n }\n }, [disabled, isStreaming])\n\n // File handling\n const addFiles = useCallback(\n (files: FileList | File[]) => {\n const newAttachments: Attachment[] = Array.from(files).map((file) => ({\n id: generateId(),\n file,\n previewUrl: isImageFile(file) ? createPreviewUrl(file) : undefined,\n status: 'pending' as const,\n }))\n setAttachments((prev) => [...prev, ...newAttachments])\n },\n [setAttachments]\n )\n\n const handleFileSelect = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files\n if (files && files.length > 0) {\n addFiles(files)\n }\n // Reset input so the same file can be selected again\n e.target.value = ''\n },\n [addFiles]\n )\n\n const handleRemoveAttachment = useCallback(\n (id: string) => {\n setAttachments((prev) => {\n const attachment = prev.find((a) => a.id === id)\n if (attachment?.previewUrl) {\n URL.revokeObjectURL(attachment.previewUrl)\n }\n return prev.filter((a) => a.id !== id)\n })\n },\n [setAttachments]\n )\n\n // Drag and drop handlers\n const handleDragEnter = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(true)\n }, [])\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n // Only set to false if we're leaving the container entirely\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n setIsDragOver(false)\n }\n }, [])\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }, [])\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragOver(false)\n\n const files = e.dataTransfer.files\n if (files && files.length > 0) {\n addFiles(files)\n }\n },\n [addFiles]\n )\n\n const isCentered = position === 'centered'\n const hasAttachments = attachments.length > 0\n const canSubmit = value.trim() && !disabled && !isStreaming\n\n return (\n <div\n ref={ref}\n className={cx(\n 'w-full',\n isCentered && 'flex flex-col items-center justify-center',\n animate && 'transition-all duration-300 ease-out',\n className\n )}\n {...rest}\n >\n {/* Helper text for centered mode */}\n {isCentered && helperText && (\n <p className=\"text-silver text-sm mb-4 text-center\">{helperText}</p>\n )}\n\n {/* Input container */}\n <div\n className={cx(\n 'relative w-full bg-charcoal border',\n isDragOver ? 'border-gold ring-1 ring-gold/30' : 'border-ash/60',\n 'focus-within:border-gold/60 focus-within:ring-1 focus-within:ring-gold/20',\n 'transition-colors duration-200',\n isCentered && 'max-w-lg'\n )}\n onDragEnter={showAttachmentButton ? handleDragEnter : undefined}\n onDragLeave={showAttachmentButton ? handleDragLeave : undefined}\n onDragOver={showAttachmentButton ? handleDragOver : undefined}\n onDrop={showAttachmentButton ? handleDrop : undefined}\n >\n {/* Attachments preview */}\n {hasAttachments && (\n <div className=\"px-3 pt-3 pb-1\">\n <AttachmentPreview\n attachments={attachments as AttachmentItem[]}\n onRemove={handleRemoveAttachment}\n removable={!isStreaming}\n />\n </div>\n )}\n\n {/* Drag overlay */}\n {isDragOver && (\n <div\n className=\"absolute inset-0 bg-gold/10 flex items-center justify-center z-10 pointer-events-none\">\n <span className=\"text-gold text-sm font-medium\">Drop files here</span>\n </div>\n )}\n\n {/* Textarea row */}\n <div className=\"flex items-end\">\n {/* Attachment button */}\n {showAttachmentButton && (\n <>\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n disabled={disabled || isStreaming}\n className={cx(\n 'p-3 text-silver/60 hover:text-silver transition-colors',\n 'disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n aria-label=\"Attach file\"\n >\n <Paperclip className=\"w-5 h-5\"/>\n </button>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={acceptedFileTypes}\n onChange={handleFileSelect}\n className=\"hidden\"\n aria-hidden=\"true\"\n />\n </>\n )}\n\n <textarea\n ref={textareaRef}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled || isStreaming}\n rows={1}\n className={cx(\n 'flex-1 bg-transparent text-white placeholder:text-silver/60',\n 'py-3 pr-12 resize-none outline-none min-h-12',\n !showAttachmentButton && 'pl-4',\n (disabled || isStreaming) && 'opacity-50 cursor-not-allowed'\n )}\n style={{maxHeight: 200}}\n />\n\n {/* Submit or Stop button */}\n {isStreaming ? (\n <button\n type=\"button\"\n onClick={onStop}\n className={cx(\n 'absolute right-2 bottom-2 p-2',\n 'text-error hover:bg-error/10 transition-colors duration-200'\n )}\n aria-label=\"Stop generation\"\n >\n <Square className=\"w-5 h-5 fill-current\"/>\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!canSubmit}\n className={cx(\n 'absolute right-2 bottom-2 p-2',\n 'transition-colors duration-200',\n canSubmit\n ? 'text-gold hover:bg-gold/10'\n : 'text-silver/40 cursor-not-allowed'\n )}\n aria-label=\"Send message\"\n >\n <Send className=\"w-5 h-5\"/>\n </button>\n )}\n </div>\n </div>\n </div>\n )\n }\n)\n\nChatInput.displayName = 'ChatInput'\n\nexport default ChatInput\n","/**\n * Conversation Tree Types\n *\n * These types support branching conversations where users can:\n * - Edit their messages (creating a new branch)\n * - Retry assistant responses (creating a new branch)\n * - Navigate between different conversation branches\n */\n\n/**\n * A node in the conversation tree\n */\nexport interface MessageNode {\n /**\n * Unique identifier for this message\n */\n id: string\n /**\n * The role of the message author\n */\n role: 'user' | 'assistant'\n /**\n * The message content (may include HTML/markdown)\n */\n content: string\n /**\n * ID of the parent message (null for root messages)\n */\n parentId: string | null\n /**\n * IDs of child messages (branches/continuations)\n */\n children: string[]\n /**\n * Which sibling branch this message is (0, 1, 2...)\n * Used for UI display like \"1/3\"\n */\n branchIndex?: number\n /**\n * Whether this message is currently being streamed\n */\n isStreaming?: boolean\n /**\n * Timestamp when the message was created\n */\n createdAt?: number\n}\n\n/**\n * The full conversation tree structure\n */\nexport interface ConversationTree {\n /**\n * All nodes indexed by their ID\n */\n nodes: Record<string, MessageNode>\n /**\n * IDs of root-level messages (messages with no parent)\n */\n rootIds: string[]\n /**\n * The current \"head\" of the viewed branch\n * This is the leaf node that determines which path we're viewing\n */\n activeLeafId: string | null\n}\n\n/**\n * Attachment types for file uploads\n */\nexport type AttachmentStatus = 'pending' | 'uploading' | 'complete' | 'error'\n\nexport interface Attachment {\n /**\n * Unique identifier for the attachment\n */\n id: string\n /**\n * The File object\n */\n file: File\n /**\n * Blob URL for image previews\n */\n previewUrl?: string\n /**\n * Current upload status\n */\n status: AttachmentStatus\n /**\n * Error message if status is 'error'\n */\n error?: string\n /**\n * Upload progress (0-100)\n */\n progress?: number\n}\n\n/**\n * Helper to check if a file is an image\n */\nexport function isImageFile(file: File): boolean {\n return file.type.startsWith('image/')\n}\n\n/**\n * Helper to create a preview URL for an image file\n */\nexport function createPreviewUrl(file: File): string | undefined {\n if (isImageFile(file)) {\n return URL.createObjectURL(file)\n }\n return undefined\n}\n\n/**\n * Helper to revoke a preview URL when no longer needed\n */\nexport function revokePreviewUrl(url: string | undefined): void {\n if (url) {\n URL.revokeObjectURL(url)\n }\n}\n\n/**\n * Generate a unique ID\n */\nexport function generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`\n}\n\n/**\n * Create an empty conversation tree\n */\nexport function createEmptyTree(): ConversationTree {\n return {\n nodes: {},\n rootIds: [],\n activeLeafId: null,\n }\n}\n\n/**\n * Add a message to the tree\n */\nexport function addMessageToTree(\n tree: ConversationTree,\n message: Omit<MessageNode, 'children' | 'branchIndex'>,\n parentId: string | null = null\n): ConversationTree {\n const newNodes = {...tree.nodes}\n const newRootIds = [...tree.rootIds]\n\n // Determine branch index among siblings\n let branchIndex = 0\n if (parentId && newNodes[parentId]) {\n branchIndex = newNodes[parentId].children.length\n } else if (!parentId) {\n branchIndex = newRootIds.length\n }\n\n // Create the new node\n const newNode: MessageNode = {\n ...message,\n parentId,\n children: [],\n branchIndex,\n createdAt: message.createdAt ?? Date.now(),\n }\n\n newNodes[message.id] = newNode\n\n // Update parent's children array\n if (parentId && newNodes[parentId]) {\n newNodes[parentId] = {\n ...newNodes[parentId],\n children: [...newNodes[parentId].children, message.id],\n }\n } else {\n newRootIds.push(message.id)\n }\n\n return {\n nodes: newNodes,\n rootIds: newRootIds,\n activeLeafId: message.id,\n }\n}\n\n/**\n * Get the linear path from root to the active leaf\n */\nexport function getActivePathMessages(tree: ConversationTree): MessageNode[] {\n if (!tree.activeLeafId) return []\n\n const path: MessageNode[] = []\n let currentId: string | null = tree.activeLeafId\n\n // Walk up to the root\n while (currentId) {\n const node: MessageNode | undefined = tree.nodes[currentId]\n if (!node) break\n path.unshift(node)\n currentId = node.parentId\n }\n\n return path\n}\n\n/**\n * Get sibling count and current index for a node\n */\nexport function getSiblingInfo(tree: ConversationTree, nodeId: string): {total: number; current: number} {\n const node = tree.nodes[nodeId]\n if (!node) return {total: 1, current: 1}\n\n if (node.parentId) {\n const parent = tree.nodes[node.parentId]\n if (parent) {\n const index = parent.children.indexOf(nodeId)\n return {\n total: parent.children.length,\n current: index + 1,\n }\n }\n } else {\n // Root level node\n const index = tree.rootIds.indexOf(nodeId)\n return {\n total: tree.rootIds.length,\n current: index + 1,\n }\n }\n\n return {total: 1, current: 1}\n}\n\n/**\n * Switch to a different branch at a given node\n */\nexport function switchBranch(\n tree: ConversationTree,\n nodeId: string,\n direction: 'prev' | 'next'\n): ConversationTree {\n const node = tree.nodes[nodeId]\n if (!node) return tree\n\n let siblings: string[]\n let currentIndex: number\n\n if (node.parentId) {\n const parent = tree.nodes[node.parentId]\n if (!parent) return tree\n siblings = parent.children\n currentIndex = siblings.indexOf(nodeId)\n } else {\n siblings = tree.rootIds\n currentIndex = siblings.indexOf(nodeId)\n }\n\n if (siblings.length <= 1) return tree\n\n // Calculate new index\n const newIndex = direction === 'next'\n ? (currentIndex + 1) % siblings.length\n : (currentIndex - 1 + siblings.length) % siblings.length\n\n const newNodeId = siblings[newIndex]\n\n // Find the leaf of the new branch (follow first children down)\n let leafId = newNodeId\n let currentNode: MessageNode | undefined = tree.nodes[leafId]\n while (currentNode && currentNode.children.length > 0) {\n leafId = currentNode.children[0]\n currentNode = tree.nodes[leafId]\n }\n\n return {\n ...tree,\n activeLeafId: leafId,\n }\n}\n\n/**\n * Update a node's content (e.g., during streaming)\n */\nexport function updateNodeContent(\n tree: ConversationTree,\n nodeId: string,\n content: string,\n isStreaming?: boolean\n): ConversationTree {\n const node = tree.nodes[nodeId]\n if (!node) return tree\n\n return {\n ...tree,\n nodes: {\n ...tree.nodes,\n [nodeId]: {\n ...node,\n content,\n isStreaming: isStreaming ?? node.isStreaming,\n },\n },\n }\n}\n\n/**\n * Convert a flat message array to a conversation tree\n */\nexport function messagesToTree(\n messages: Array<{id: string; role: 'user' | 'assistant'; content: string; isStreaming?: boolean}>\n): ConversationTree {\n let tree = createEmptyTree()\n\n for (const msg of messages) {\n const parentId = tree.activeLeafId\n tree = addMessageToTree(tree, {\n id: msg.id,\n role: msg.role,\n content: msg.content,\n parentId,\n isStreaming: msg.isStreaming,\n }, parentId)\n }\n\n return tree\n}\n\n/**\n * Check if a node has multiple children (is a branch point)\n */\nexport function isBranchPoint(tree: ConversationTree, nodeId: string): boolean {\n const node = tree.nodes[nodeId]\n return node ? node.children.length > 1 : false\n}\n","import React from 'react'\nimport {cx} from '../../utils/cx'\n\nexport interface Conversation {\n id: string\n title: string\n preview?: string\n timestamp?: string\n isActive?: boolean\n}\n\nexport interface ConversationSidebarProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * List of conversations to display\n */\n conversations: Conversation[]\n /**\n * Whether the sidebar is collapsed\n */\n isCollapsed?: boolean\n /**\n * Callback when a conversation is selected\n */\n onSelectConversation?: (id: string) => void\n /**\n * Callback when \"New Chat\" is clicked\n */\n onNewChat?: () => void\n /**\n * Callback to toggle collapse state\n */\n onToggleCollapse?: () => void\n}\n\n/**\n * History icon for expanding collapsed sidebar\n */\nfunction HistoryIcon({className}: {className?: string}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm.75-13a.75.75 0 00-1.5 0v5c0 .414.336.75.75.75h4a.75.75 0 000-1.5h-3.25V5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )\n}\n\n/**\n * Chevron left icon for collapsing expanded sidebar\n */\nfunction ChevronLeftIcon({className}: {className?: string}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n d=\"M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )\n}\n\n/**\n * ConversationSidebar displays a collapsible list of past conversations.\n *\n * When collapsed, shows a thin strip with history icon at top.\n * When expanded, shows chevron at top-left to collapse.\n */\nexport const ConversationSidebar = React.forwardRef<HTMLDivElement, ConversationSidebarProps>(\n (\n {\n conversations,\n isCollapsed = false,\n onSelectConversation,\n onNewChat,\n onToggleCollapse,\n className,\n ...rest\n },\n ref\n ) => {\n // Collapsed state: thin strip with history icon at top\n if (isCollapsed) {\n return (\n <div\n ref={ref}\n className={cx(\n 'h-full bg-charcoal/80 border-r border-ash/40 flex flex-col items-center py-3',\n 'w-12 flex-shrink-0',\n className\n )}\n {...rest}\n >\n <button\n onClick={onToggleCollapse}\n className={cx(\n 'p-2',\n 'text-silver hover:text-white hover:bg-ash/20',\n 'transition-colors duration-150'\n )}\n aria-label=\"Expand sidebar\"\n >\n <HistoryIcon className=\"w-5 h-5\" />\n </button>\n </div>\n )\n }\n\n // Expanded state: full sidebar with chevron collapse button in header\n return (\n <div\n ref={ref}\n className={cx(\n 'h-full bg-charcoal/80 border-r border-ash/40 flex flex-col',\n 'w-64 flex-shrink-0',\n className\n )}\n {...rest}\n >\n {/* Header with collapse chevron and New Chat button */}\n <div className=\"p-3 border-b border-ash/40 flex-shrink-0 flex items-center gap-2\">\n <button\n onClick={onToggleCollapse}\n className={cx(\n 'p-1.5',\n 'text-silver hover:text-white hover:bg-ash/20',\n 'transition-colors duration-150'\n )}\n aria-label=\"Collapse sidebar\"\n >\n <ChevronLeftIcon className=\"w-5 h-5\" />\n </button>\n <button\n onClick={onNewChat}\n className={cx(\n 'flex-1 px-3 py-2',\n 'bg-gold/10 hover:bg-gold/20 text-gold',\n 'border border-gold/30',\n 'flex items-center justify-center gap-2',\n 'transition-colors duration-200'\n )}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className=\"w-4 h-4\"\n >\n <path d=\"M10.75 4.75a.75.75 0 00-1.5 0v4.5h-4.5a.75.75 0 000 1.5h4.5v4.5a.75.75 0 001.5 0v-4.5h4.5a.75.75 0 000-1.5h-4.5v-4.5z\" />\n </svg>\n <span className=\"text-sm font-medium\">New Chat</span>\n </button>\n </div>\n\n {/* Conversation list */}\n <div className=\"flex-1 overflow-y-auto py-2\">\n {conversations.length === 0 ? (\n <p className=\"px-4 py-2 text-sm text-silver/60\">No conversations yet</p>\n ) : (\n <div className=\"space-y-1 px-2\">\n {conversations.map((conversation) => (\n <button\n key={conversation.id}\n onClick={() => onSelectConversation?.(conversation.id)}\n className={cx(\n 'w-full px-3 py-2 text-left',\n 'transition-colors duration-150',\n conversation.isActive\n ? 'bg-ash/40 text-white'\n : 'text-silver hover:bg-ash/20 hover:text-white'\n )}\n >\n <p className=\"text-sm font-medium truncate\">{conversation.title}</p>\n {conversation.preview && (\n <p className=\"text-xs text-silver/60 truncate mt-0.5\">\n {conversation.preview}\n </p>\n )}\n {conversation.timestamp && (\n <p className=\"text-xs text-silver/40 mt-1\">{conversation.timestamp}</p>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n }\n)\n\nConversationSidebar.displayName = 'ConversationSidebar'\n\n/**\n * Collapsed sidebar toggle button (for external use if needed)\n */\nexport interface CollapsedSidebarToggleProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n onExpand?: () => void\n}\n\nexport const CollapsedSidebarToggle = React.forwardRef<\n HTMLButtonElement,\n CollapsedSidebarToggleProps\n>(({onExpand, className, ...rest}, ref) => {\n return (\n <button\n ref={ref}\n onClick={onExpand}\n className={cx(\n 'p-2',\n 'bg-charcoal/80 border border-ash/40',\n 'text-silver hover:text-white hover:bg-ash/20',\n 'transition-colors duration-150',\n className\n )}\n aria-label=\"Expand sidebar\"\n {...rest}\n >\n <HistoryIcon className=\"w-5 h-5\" />\n </button>\n )\n})\n\nCollapsedSidebarToggle.displayName = 'CollapsedSidebarToggle'\n\nexport default ConversationSidebar\n","import React, {useState, useEffect} from 'react'\nimport {cx} from '../../utils/cx'\nimport {ImageCard} from '../ImageCard'\nimport {VideoCard} from '../VideoCard'\nimport {MarkdownContent} from '../MarkdownContent'\nimport {Skeleton} from '../Skeleton'\nimport type {Artifact} from './hooks/useArtifactParser'\n\nexport interface ArtifactsPanelProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Array of artifacts to display\n */\n artifacts: Artifact[]\n /**\n * Whether the panel is visible\n */\n isOpen?: boolean\n /**\n * Callback to close/collapse the panel\n */\n onClose?: () => void\n /**\n * Whether artifacts are still loading (show skeletons)\n */\n isLoading?: boolean\n}\n\n/**\n * Layers/documents icon for expanding collapsed artifacts panel\n */\nfunction LayersIcon({className}: {className?: string}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className={className}\n >\n <path d=\"M3.196 12.87l-.825.483a.75.75 0 000 1.294l7.25 4.25a.75.75 0 00.758 0l7.25-4.25a.75.75 0 000-1.294l-.825-.484-5.666 3.322a2.25 2.25 0 01-2.276 0L3.196 12.87z\" />\n <path d=\"M3.196 8.87l-.825.483a.75.75 0 000 1.294l7.25 4.25a.75.75 0 00.758 0l7.25-4.25a.75.75 0 000-1.294l-.825-.484-5.666 3.322a2.25 2.25 0 01-2.276 0L3.196 8.87z\" />\n <path d=\"M10.38 1.103a.75.75 0 00-.76 0l-7.25 4.25a.75.75 0 000 1.294l7.25 4.25a.75.75 0 00.76 0l7.25-4.25a.75.75 0 000-1.294l-7.25-4.25z\" />\n </svg>\n )\n}\n\n/**\n * Chevron right icon for collapsing expanded artifacts panel\n */\nfunction ChevronRightIcon({className}: {className?: string}) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )\n}\n\n/**\n * Render a skeleton placeholder for an artifact\n */\nfunction ArtifactSkeleton({type}: {type: Artifact['type']}) {\n if (type === 'image') {\n return (\n <div className=\"overflow-hidden\">\n <Skeleton className=\"w-full h-48\" />\n <div className=\"p-4 bg-charcoal border border-ash/40 border-t-0\">\n <Skeleton className=\"h-5 w-3/4 mb-2\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </div>\n </div>\n )\n }\n\n if (type === 'video') {\n return (\n <div className=\"overflow-hidden\">\n <Skeleton className=\"w-full aspect-video\" />\n <div className=\"p-4 bg-charcoal border border-ash/40 border-t-0\">\n <Skeleton className=\"h-5 w-3/4 mb-2\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </div>\n </div>\n )\n }\n\n // Text artifact skeleton\n return (\n <div className=\"p-4 bg-charcoal border border-ash/40 space-y-2\">\n <Skeleton className=\"h-5 w-1/2\" />\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-3/4\" />\n </div>\n )\n}\n\n/**\n * Render an individual artifact based on its type\n */\nfunction ArtifactRenderer({artifact, isLoading}: {artifact: Artifact; isLoading?: boolean}) {\n const [imageLoaded, setImageLoaded] = useState(false)\n const [minDelayPassed, setMinDelayPassed] = useState(false)\n\n // Reset states when artifact changes and start minimum delay timer\n useEffect(() => {\n setImageLoaded(false)\n setMinDelayPassed(false)\n\n // Minimum skeleton display time (800ms) before revealing image\n const timer = setTimeout(() => {\n setMinDelayPassed(true)\n }, 800)\n\n return () => clearTimeout(timer)\n }, [artifact.src, artifact.id])\n\n // Show skeleton for pending artifacts or when loading\n if (isLoading || artifact.isPending) {\n return <ArtifactSkeleton type={artifact.type} />\n }\n\n // Only show the actual content when both image is loaded AND minimum delay has passed\n const showContent = imageLoaded && minDelayPassed\n\n switch (artifact.type) {\n case 'image':\n return (\n <div className=\"relative\">\n {!showContent && <ArtifactSkeleton type=\"image\" />}\n <ImageCard\n src={artifact.src || ''}\n alt={artifact.alt || 'Artifact image'}\n title={artifact.title}\n subtitle={artifact.subtitle}\n aspectRatio=\"landscape\"\n className={cx(\n 'w-full transition-opacity duration-300',\n showContent ? 'opacity-100' : 'opacity-0 absolute inset-0'\n )}\n onLoad={() => setImageLoaded(true)}\n />\n </div>\n )\n\n case 'video':\n return (\n <VideoCard\n src={artifact.src || ''}\n title={artifact.title}\n subtitle={artifact.subtitle}\n aspectRatio=\"video\"\n controls\n className=\"w-full\"\n />\n )\n\n case 'text':\n return (\n <div className=\"p-4 bg-charcoal border border-ash/40\">\n {artifact.title && (\n <h4 className=\"text-lg font-semibold text-white mb-2\">{artifact.title}</h4>\n )}\n <MarkdownContent\n content={artifact.content || ''}\n className=\"prose-sm prose-invert\"\n />\n </div>\n )\n\n default:\n return null\n }\n}\n\n/**\n * ArtifactsPanel displays rich content artifacts in a slide-in panel.\n *\n * When collapsed, shows a thin strip with layers icon at top.\n * When expanded, shows chevron at top-right to collapse.\n */\nexport const ArtifactsPanel = React.forwardRef<HTMLDivElement, ArtifactsPanelProps>(\n ({artifacts, isOpen = false, onClose, isLoading = false, className, ...rest}, ref) => {\n // Collapsed state: thin strip with layers icon at top\n if (!isOpen) {\n return (\n <div\n ref={ref}\n className={cx(\n 'h-full bg-charcoal/80 border-l border-ash/40 flex flex-col items-center py-3',\n 'w-12 flex-shrink-0',\n className\n )}\n {...rest}\n >\n <button\n onClick={onClose}\n className={cx(\n 'p-2',\n 'text-silver hover:text-white hover:bg-ash/20',\n 'transition-colors duration-150',\n 'relative'\n )}\n aria-label=\"Expand artifacts panel\"\n >\n <LayersIcon className=\"w-5 h-5\" />\n {artifacts.length > 0 && (\n <span className=\"absolute -top-1 -right-1 w-4 h-4 bg-gold text-obsidian text-xs font-medium flex items-center justify-center rounded-full\">\n {artifacts.length}\n </span>\n )}\n </button>\n </div>\n )\n }\n\n // Expanded state: full panel with chevron collapse button\n return (\n <div\n ref={ref}\n className={cx(\n 'h-full bg-charcoal/50 border-l border-ash/40 flex flex-col',\n 'w-96 flex-shrink-0',\n className\n )}\n {...rest}\n >\n {/* Header with title and collapse chevron */}\n <div className=\"flex items-center justify-between p-4 border-b border-ash/40 flex-shrink-0\">\n <h3 className=\"text-lg font-semibold text-white\">Artifacts</h3>\n <button\n onClick={onClose}\n className={cx(\n 'p-1.5',\n 'text-silver hover:text-white hover:bg-ash/20',\n 'transition-colors duration-150'\n )}\n aria-label=\"Collapse artifacts panel\"\n >\n <ChevronRightIcon className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Artifacts list */}\n <div className=\"flex-1 overflow-y-auto p-4 space-y-4\">\n {artifacts.length === 0 && !isLoading ? (\n <p className=\"text-sm text-silver/60 text-center py-8\">\n No artifacts to display\n </p>\n ) : (\n artifacts.map((artifact) => (\n <ArtifactRenderer\n key={artifact.id}\n artifact={artifact}\n isLoading={isLoading}\n />\n ))\n )}\n </div>\n </div>\n )\n }\n)\n\nArtifactsPanel.displayName = 'ArtifactsPanel'\n\n/**\n * Toggle button to expand collapsed artifacts panel\n */\nexport interface ArtifactsPanelToggleProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n artifactCount?: number\n onExpand?: () => void\n}\n\nexport const ArtifactsPanelToggle = React.forwardRef<\n HTMLButtonElement,\n ArtifactsPanelToggleProps\n>(({artifactCount = 0, onExpand, className, ...rest}, ref) => {\n return (\n <button\n ref={ref}\n onClick={onExpand}\n className={cx(\n 'p-2',\n 'bg-charcoal/80 border border-ash/40',\n 'text-silver hover:text-white hover:bg-ash/20',\n 'transition-colors duration-150',\n 'flex items-center gap-2',\n 'relative',\n className\n )}\n aria-label=\"Expand artifacts panel\"\n {...rest}\n >\n <LayersIcon className=\"w-5 h-5\" />\n {artifactCount > 0 && (\n <span className=\"absolute -top-1 -right-1 w-4 h-4 bg-gold text-obsidian text-xs font-medium flex items-center justify-center rounded-full\">\n {artifactCount}\n </span>\n )}\n </button>\n )\n})\n\nArtifactsPanelToggle.displayName = 'ArtifactsPanelToggle'\n\nexport default ArtifactsPanel\n","import React from 'react'\nimport {Card, type CardProps} from './Card'\nimport {cx} from '../utils'\n\nexport type AspectRatioPreset = 'landscape' | 'portrait' | 'square'\nexport type AspectRatio = AspectRatioPreset | `${number}/${number}`\n\nexport interface ImageCardProps extends Omit<CardProps, 'title'> {\n src: string\n alt: string\n title?: React.ReactNode\n subtitle?: React.ReactNode\n aspectRatio?: AspectRatio\n objectFit?: 'cover' | 'contain'\n overlay?: React.ReactNode\n mediaClassName?: string\n contentClassName?: string\n}\n\nconst ASPECT_RATIO_PRESETS: Record<AspectRatioPreset, string> = {\n landscape: '3 / 2',\n portrait: '2 / 3',\n square: '1 / 1',\n}\n\nfunction resolveAspectRatio(ratio: AspectRatio): string {\n if (ratio in ASPECT_RATIO_PRESETS) {\n return ASPECT_RATIO_PRESETS[ratio as AspectRatioPreset]\n }\n return ratio.replace('/', ' / ')\n}\n\nexport const ImageCard = React.forwardRef<HTMLDivElement, ImageCardProps>(\n (\n {\n src,\n alt,\n title,\n subtitle,\n aspectRatio,\n objectFit = 'cover',\n overlay,\n mediaClassName,\n contentClassName,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const hasAspectRatio = aspectRatio !== undefined\n const isContain = objectFit === 'contain'\n\n return (\n <Card ref={ref} className={cx('p-0 overflow-hidden group w-fit', className)} {...props}>\n {/* Media container */}\n <div\n className={cx(\n 'relative',\n hasAspectRatio && 'overflow-hidden',\n mediaClassName\n )}\n style={hasAspectRatio ? {aspectRatio: resolveAspectRatio(aspectRatio)} : undefined}\n >\n <img\n src={src}\n alt={alt}\n className={cx(\n 'block max-w-full',\n hasAspectRatio && 'w-full h-full',\n hasAspectRatio && (isContain ? 'object-contain' : 'object-cover'),\n !hasAspectRatio && 'h-auto'\n )}\n />\n\n {/* Hover overlay */}\n {overlay && (\n <div\n className=\"absolute inset-0 bg-obsidian/80 opacity-0 group-hover:opacity-100 transition-opacity duration-200 flex items-center justify-center\">\n {overlay}\n </div>\n )}\n </div>\n\n {/* Content section */}\n {(title || subtitle || children) && (\n <div className={cx('px-4 py-4', contentClassName)}>\n {title && <h4 className=\"text-lg font-semibold leading-tight\">{title}</h4>}\n {subtitle && <p className=\"text-sm text-silver leading-normal\">{subtitle}</p>}\n {children}\n </div>\n )}\n </Card>\n )\n }\n)\n\nImageCard.displayName = 'ImageCard'","import React from 'react'\nimport ReactPlayer from 'react-player'\nimport {Card, type CardProps} from './Card'\nimport {cx} from '../utils/cx'\n\nexport type VideoAspectRatioPreset = 'video' | 'cinema' | 'square'\nexport type VideoAspectRatio = VideoAspectRatioPreset | `${number}/${number}`\n\nexport interface VideoCardProps extends Omit<CardProps, 'title'> {\n src: string\n title?: React.ReactNode\n subtitle?: React.ReactNode\n aspectRatio?: VideoAspectRatio\n playing?: boolean\n controls?: boolean\n light?: boolean | string\n volume?: number\n muted?: boolean\n loop?: boolean\n mediaClassName?: string\n contentClassName?: string\n playerProps?: any\n}\n\nconst ASPECT_RATIO_PRESETS: Record<VideoAspectRatioPreset, string> = {\n video: '16 / 9',\n cinema: '21 / 9',\n square: '1 / 1',\n}\n\nfunction resolveAspectRatio(ratio: VideoAspectRatio): string {\n if (ratio in ASPECT_RATIO_PRESETS) {\n return ASPECT_RATIO_PRESETS[ratio as VideoAspectRatioPreset]\n }\n return ratio.replace('/', ' / ')\n}\n\nexport const VideoCard = React.forwardRef<HTMLDivElement, VideoCardProps>(\n (\n {\n src,\n title,\n subtitle,\n aspectRatio = 'video',\n playing = false,\n controls = true,\n light = false,\n volume,\n muted = false,\n loop = false,\n mediaClassName,\n contentClassName,\n className,\n children,\n playerProps,\n ...props\n },\n ref\n ) => {\n const hasAspectRatio = aspectRatio !== undefined\n\n return (\n <Card ref={ref} className={cx('p-0 overflow-hidden group w-full', className)} {...props}>\n {/* Media container */}\n <div\n className={cx(\n 'relative bg-obsidian overflow-hidden',\n mediaClassName\n )}\n style={{aspectRatio: resolveAspectRatio(aspectRatio)}}\n >\n <ReactPlayer\n src={src}\n playing={playing}\n controls={controls}\n light={light}\n volume={volume}\n muted={muted}\n loop={loop}\n width=\"100%\"\n height=\"100%\"\n className=\"absolute top-0 left-0\"\n {...playerProps}\n />\n </div>\n\n {/* Content section */}\n {(title || subtitle || children) && (\n <div className={cx('px-4 py-4', contentClassName)}>\n {title && <h4 className=\"text-lg font-semibold leading-tight\">{title}</h4>}\n {subtitle && <p\n className=\"text-sm text-silver leading-normal mt-1\">{subtitle}</p>}\n {children}\n </div>\n )}\n </Card>\n )\n }\n)\n\nVideoCard.displayName = 'VideoCard'\n","import {useMemo} from 'react'\n\nexport type ArtifactType = 'text' | 'image' | 'video'\n\nexport interface Artifact {\n id: string\n type: ArtifactType\n // For text artifacts\n content?: string\n // For image artifacts\n src?: string\n alt?: string\n // For video artifacts (also uses src)\n // Common metadata\n title?: string\n subtitle?: string\n // Whether this artifact is still being parsed (incomplete)\n isPending?: boolean\n}\n\nexport interface UseArtifactParserReturn {\n /**\n * Content with artifact blocks stripped out (including incomplete ones)\n */\n cleanContent: string\n /**\n * Parsed artifacts array\n */\n artifacts: Artifact[]\n /**\n * Whether there's an incomplete artifact currently being streamed\n */\n hasPendingArtifact: boolean\n}\n\n/**\n * Regex to match complete artifact blocks.\n * Matches: :::artifact{type=\"image\" src=\"...\" alt=\"...\" title=\"...\" subtitle=\"...\"}:::\n */\nconst COMPLETE_ARTIFACT_REGEX = /:::artifact\\{([^}]+)\\}(?:([^:]*?))?:::/gs\n\n/**\n * Regex to detect start of an artifact block (even if incomplete)\n */\nconst ARTIFACT_START_REGEX = /:::artifact\\{/\n\n/**\n * Parse attribute string like: type=\"image\" src=\"https://...\" alt=\"Chart\"\n */\nfunction parseAttributes(attrString: string): Record<string, string> {\n const attrs: Record<string, string> = {}\n const regex = /(\\w+)=\"([^\"]*)\"/g\n let match\n\n while ((match = regex.exec(attrString)) !== null) {\n attrs[match[1]] = match[2]\n }\n\n return attrs\n}\n\n/**\n * Generate a stable ID for an artifact based on its content.\n * This ensures React can properly reconcile artifacts during streaming\n * without constantly remounting components.\n */\nfunction generateStableArtifactId(type: string, identifier: string): string {\n const str = `${type}:${identifier}`\n let hash = 0\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = ((hash << 5) - hash) + char\n hash = hash & hash // Convert to 32-bit integer\n }\n return `artifact-${Math.abs(hash).toString(36)}`\n}\n\n/**\n * Hook to parse :::artifact{...}::: blocks from streaming content.\n *\n * Key streaming behavior:\n * - As soon as :::artifact{ is detected, everything from that point is stripped\n * - This prevents artifact syntax from showing in the message during streaming\n * - Complete artifacts are parsed and returned\n * - Incomplete artifacts trigger hasPendingArtifact flag for loading states\n *\n * Supported artifact types:\n * - text: Rendered with MarkdownContent (content attribute)\n * - image: Rendered with ImageCard (src, alt, title, subtitle)\n * - video: Rendered with VideoCard (src, title, subtitle)\n */\nexport function useArtifactParser(content: string): UseArtifactParserReturn {\n return useMemo(() => {\n if (!content) {\n return {cleanContent: '', artifacts: [], hasPendingArtifact: false}\n }\n\n const artifacts: Artifact[] = []\n let workingContent = content\n\n // First, extract all complete artifacts\n let artifactIndex = 0\n workingContent = workingContent.replace(COMPLETE_ARTIFACT_REGEX, (_, attrString, innerContent) => {\n const attrs = parseAttributes(attrString)\n const type = (attrs.type || 'text') as ArtifactType\n\n // Generate stable ID based on content (src for media, content for text)\n const identifier = attrs.src || attrs.content || innerContent || `idx-${artifactIndex++}`\n const id = generateStableArtifactId(type, identifier)\n\n const artifact: Artifact = {\n id,\n type,\n title: attrs.title,\n subtitle: attrs.subtitle,\n }\n\n if (type === 'text') {\n artifact.content = innerContent?.trim() || attrs.content\n } else if (type === 'image') {\n artifact.src = attrs.src\n artifact.alt = attrs.alt || 'Image'\n } else if (type === 'video') {\n artifact.src = attrs.src\n }\n\n artifacts.push(artifact)\n return ''\n })\n\n // Check for incomplete artifact at the end (still streaming)\n const startMatch = workingContent.match(ARTIFACT_START_REGEX)\n let hasPendingArtifact = false\n\n if (startMatch && startMatch.index !== undefined) {\n // Strip from the start of the incomplete artifact to the end\n workingContent = workingContent.substring(0, startMatch.index)\n hasPendingArtifact = true\n\n // Add a pending artifact placeholder with stable ID\n // (there can only be one pending artifact at a time)\n artifacts.push({\n id: 'artifact-pending',\n type: 'image', // Default to image for skeleton\n isPending: true,\n })\n }\n\n return {\n cleanContent: workingContent.trim(),\n artifacts,\n hasPendingArtifact,\n }\n }, [content])\n}\n\nexport default useArtifactParser\n","import React, {useState, useCallback} from 'react'\nimport {cx} from '../../utils/cx'\nimport {\n Copy,\n Check,\n Pencil,\n RotateCcw,\n X,\n Send,\n} from 'lucide-react'\n\nexport type MessageActionsVariant = 'user' | 'assistant'\n\nexport interface MessageActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Whether this is for a user or assistant message\n */\n variant: MessageActionsVariant\n /**\n * The message content for copy functionality\n */\n content: string\n /**\n * Called when user wants to edit their message\n * Consumer should handle creating a branch with the edited content\n */\n onEdit?: (newContent: string) => void\n /**\n * Called when user wants to retry/regenerate the assistant response\n * Consumer should handle creating a branch with a new response\n */\n onRetry?: () => void\n /**\n * Whether the message is currently being edited\n */\n isEditing?: boolean\n /**\n * Callback to set editing state (controlled from parent)\n */\n onEditingChange?: (isEditing: boolean) => void\n /**\n * Initial content for the edit input (defaults to content prop)\n */\n editValue?: string\n}\n\nconst ActionButton: React.FC<{\n onClick: () => void\n label: string\n children: React.ReactNode\n className?: string\n disabled?: boolean\n}> = ({onClick, label, children, className, disabled}) => (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className={cx(\n 'p-1.5 text-silver/60 hover:text-silver transition-colors duration-150',\n 'hover:bg-white/5 ',\n 'disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-transparent',\n className\n )}\n aria-label={label}\n >\n {children}\n </button>\n)\n\nexport const MessageActions = React.forwardRef<HTMLDivElement, MessageActionsProps>(\n (\n {\n variant,\n content,\n onEdit,\n onRetry,\n isEditing: controlledIsEditing,\n onEditingChange,\n editValue: controlledEditValue,\n className,\n ...rest\n },\n ref\n ) => {\n // Local state for uncontrolled mode\n const [localIsEditing, setLocalIsEditing] = useState(false)\n const [localEditValue, setLocalEditValue] = useState(content)\n const [copied, setCopied] = useState(false)\n\n // Determine if controlled or uncontrolled\n const isEditing = controlledIsEditing ?? localIsEditing\n const editValue = controlledEditValue ?? localEditValue\n\n const setIsEditing = useCallback(\n (value: boolean) => {\n if (onEditingChange) {\n onEditingChange(value)\n } else {\n setLocalIsEditing(value)\n }\n },\n [onEditingChange]\n )\n\n const setEditValue = useCallback((value: string) => {\n setLocalEditValue(value)\n }, [])\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(content)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch {\n // Fallback for older browsers\n const textArea = document.createElement('textarea')\n textArea.value = content\n document.body.appendChild(textArea)\n textArea.select()\n document.execCommand('copy')\n document.body.removeChild(textArea)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }\n }, [content])\n\n const handleStartEdit = useCallback(() => {\n setLocalEditValue(content)\n setIsEditing(true)\n }, [content, setIsEditing])\n\n const handleCancelEdit = useCallback(() => {\n setIsEditing(false)\n setLocalEditValue(content)\n }, [content, setIsEditing])\n\n const handleSubmitEdit = useCallback(() => {\n const trimmed = editValue.trim()\n if (trimmed && trimmed !== content) {\n onEdit?.(trimmed)\n }\n setIsEditing(false)\n }, [editValue, content, onEdit, setIsEditing])\n\n const handleEditKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSubmitEdit()\n } else if (e.key === 'Escape') {\n handleCancelEdit()\n }\n },\n [handleSubmitEdit, handleCancelEdit]\n )\n\n const isUser = variant === 'user'\n\n // Render edit mode inline\n if (isUser && isEditing) {\n return (\n <div\n ref={ref}\n className={cx('mt-2', className)}\n {...rest}\n >\n <div className=\"relative bg-charcoal border border-ash/60 focus-within:border-gold/60 focus-within:ring-1 focus-within:ring-gold/20\">\n <textarea\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onKeyDown={handleEditKeyDown}\n className=\"w-full bg-transparent text-white px-3 py-2 pr-20 resize-none outline-none min-h-16 text-sm\"\n autoFocus\n rows={2}\n />\n <div className=\"absolute right-2 bottom-2 flex gap-1\">\n <ActionButton\n onClick={handleCancelEdit}\n label=\"Cancel edit\"\n className=\"text-silver/60 hover:text-error\"\n >\n <X className=\"w-4 h-4\" />\n </ActionButton>\n <ActionButton\n onClick={handleSubmitEdit}\n label=\"Submit edit\"\n className=\"text-silver/60 hover:text-gold\"\n disabled={!editValue.trim() || editValue.trim() === content}\n >\n <Send className=\"w-4 h-4\" />\n </ActionButton>\n </div>\n </div>\n <p className=\"text-xs text-silver/50 mt-1\">\n Press Enter to submit, Esc to cancel. This will create a new branch.\n </p>\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center gap-0.5 mt-1',\n isUser ? 'justify-end' : 'justify-start',\n className\n )}\n {...rest}\n >\n {/* Copy - available for both user and assistant */}\n <ActionButton onClick={handleCopy} label={copied ? 'Copied!' : 'Copy message'}>\n {copied ? (\n <Check className=\"w-3.5 h-3.5 text-success\" />\n ) : (\n <Copy className=\"w-3.5 h-3.5\" />\n )}\n </ActionButton>\n\n {/* Edit - only for user messages */}\n {isUser && onEdit && (\n <ActionButton onClick={handleStartEdit} label=\"Edit message\">\n <Pencil className=\"w-3.5 h-3.5\" />\n </ActionButton>\n )}\n\n {/* Retry - only for assistant messages */}\n {!isUser && onRetry && (\n <ActionButton onClick={onRetry} label=\"Regenerate response\">\n <RotateCcw className=\"w-3.5 h-3.5\" />\n </ActionButton>\n )}\n </div>\n )\n }\n)\n\nMessageActions.displayName = 'MessageActions'\n\nexport default MessageActions\n","import React from 'react'\nimport {cx} from '../../utils/cx'\nimport {ChevronLeft, ChevronRight, GitBranch} from 'lucide-react'\n\nexport interface BranchNavigatorProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Current branch index (1-based for display)\n */\n current: number\n /**\n * Total number of sibling branches\n */\n total: number\n /**\n * Called when navigating to previous branch\n */\n onPrevious?: () => void\n /**\n * Called when navigating to next branch\n */\n onNext?: () => void\n /**\n * Size variant\n */\n size?: 'sm' | 'md'\n /**\n * Whether to show the branch icon\n */\n showIcon?: boolean\n}\n\nexport const BranchNavigator = React.forwardRef<HTMLDivElement, BranchNavigatorProps>(\n (\n {\n current,\n total,\n onPrevious,\n onNext,\n size = 'sm',\n showIcon = true,\n className,\n ...rest\n },\n ref\n ) => {\n // Don't render if there's only one branch\n if (total <= 1) return null\n\n const isFirst = current <= 1\n const isLast = current >= total\n\n const buttonSize = size === 'sm' ? 'p-0.5' : 'p-1'\n const iconSize = size === 'sm' ? 'w-3 h-3' : 'w-4 h-4'\n const textSize = size === 'sm' ? 'text-xs' : 'text-sm'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'inline-flex items-center gap-0.5 text-silver/70',\n className\n )}\n role=\"navigation\"\n aria-label=\"Branch navigation\"\n {...rest}\n >\n {/* Branch icon */}\n {showIcon && (\n <GitBranch className={cx(iconSize, 'mr-0.5 text-silver/50')} aria-hidden=\"true\" />\n )}\n\n {/* Previous button */}\n <button\n type=\"button\"\n onClick={onPrevious}\n disabled={isFirst}\n className={cx(\n buttonSize,\n 'hover:text-white hover:bg-white/10 transition-colors',\n 'disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent disabled:hover:text-silver/70'\n )}\n aria-label=\"Previous branch\"\n >\n <ChevronLeft className={iconSize} />\n </button>\n\n {/* Counter */}\n <span className={cx(textSize, 'tabular-nums min-w-6 text-center')}>\n {current}/{total}\n </span>\n\n {/* Next button */}\n <button\n type=\"button\"\n onClick={onNext}\n disabled={isLast}\n className={cx(\n buttonSize,\n 'hover:text-white hover:bg-white/10 transition-colors',\n 'disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-transparent disabled:hover:text-silver/70'\n )}\n aria-label=\"Next branch\"\n >\n <ChevronRight className={iconSize} />\n </button>\n </div>\n )\n }\n)\n\nBranchNavigator.displayName = 'BranchNavigator'\n\nexport default BranchNavigator\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type BrandIconSize = 'sm' | 'md' | 'lg'\nexport type BrandIconVariant = 'solid' | 'outline'\n\nexport interface BrandIconProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: BrandIconSize\n variant?: BrandIconVariant\n}\n\nconst sizeMap: Record<BrandIconSize, string> = {\n sm: 'h-8 w-8 text-sm',\n md: 'h-12 w-12 text-base',\n lg: 'h-16 w-16 text-lg',\n}\n\nexport const BrandIcon = React.forwardRef<HTMLDivElement, BrandIconProps>(\n ({size = 'md', variant = 'solid', children, className, ...rest}, ref) => {\n const variantClasses =\n variant === 'solid'\n ? 'bg-gold text-obsidian border-2 border-gold'\n : 'bg-transparent text-gold border-2 border-gold'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'inline-flex items-center justify-center rounded-none font-bold select-none overflow-hidden',\n sizeMap[size],\n variantClasses,\n className\n )}\n {...rest}\n >\n {children}\n </div>\n )\n }\n)\n\nBrandIcon.displayName = 'BrandIcon'\n\nexport default BrandIcon\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport interface ColorSwatchProps extends React.HTMLAttributes<HTMLDivElement> {\n color: string\n label?: string\n}\n\nexport const ColorSwatch = React.forwardRef<HTMLDivElement, ColorSwatchProps>(\n ({color, label, className, ...rest}, ref) => {\n return (\n <div\n ref={ref}\n className={cx('flex flex-col items-center gap-2', className)}\n {...rest}\n >\n <div\n className=\"h-16 w-16 border-2 border-ash rounded-none shadow-sm\"\n style={{backgroundColor: color}}\n aria-label={label || color}\n />\n {label && (\n <span className=\"text-xs text-silver font-medium\">{label}</span>\n )}\n </div>\n )\n }\n)\n\nColorSwatch.displayName = 'ColorSwatch'\n\nexport default ColorSwatch\n","import React from 'react'\nimport { cx } from '../utils/cx'\n\nexport type SectionHeadingLevel = 'h2' | 'h3'\n\nexport interface SectionHeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n level?: SectionHeadingLevel\n}\n\nconst levelStyles = {\n h2: 'text-2xl mb-4',\n h3: 'text-xl mb-3',\n}\n\nexport const SectionHeading = React.forwardRef<HTMLHeadingElement, SectionHeadingProps>(\n ({level = 'h2', children, className, ...rest}, ref) => {\n const Component = level\n\n return (\n <Component\n ref={ref as any}\n className={cx(\n 'text-gold font-semibold tracking-tight',\n levelStyles[level],\n className\n )}\n {...rest}\n >\n {children}\n </Component>\n )\n }\n)\n\nSectionHeading.displayName = 'SectionHeading'\n\nexport default SectionHeading\n"],"mappings":"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","names":["React","import_react","React","import_react","React","ReactPlayer","import_react","React","import_react","React","import_react","React","import_react","ALIGN_MAP","JUSTIFY_MAP","GAP_MAP","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","import_lucide_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","import_react","React","e","import_react","React","import_react","import_lucide_react","React","import_react","React","import_react","React","import_react","VARIANT_MAP","React","import_react","import_lucide_react","React","VARIANT_STYLES","import_react","import_react_dom","import_lucide_react","React","import_react","import_react_dom","import_lucide_react","SIZE_MAP","React","import_react","POSITION_CLASSES","React","import_react","React","import_react","React","import_react","import_lucide_react","React","import_react","React","import_react","React","import_react","import_lucide_react","React","import_react","import_lucide_react","React","import_react","import_lucide_react","React","import_react","import_react","DOMPurify","React","variantStyles","React","import_react","React","variantStyles","import_react","import_react","import_react","import_react","import_react","React","React","import_react","import_lucide_react","React","import_react","React","ChevronLeftIcon","import_react","import_react","React","import_react","import_react_player","ASPECT_RATIO_PRESETS","resolveAspectRatio","React","ReactPlayer","React","ChevronRightIcon","import_react","React","import_react","import_lucide_react","ActionButton","React","import_react","import_lucide_react","React","import_react","sizeMap","React","import_react","React","import_react","React"]}
|