@mirror-physics/fractal-ui 0.2.0-next.8 → 0.2.0-next.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Button/Button.tsx","../src/utils/cn.ts","../src/components/Card/Card.tsx","../src/components/PromptCard/PromptCard.tsx","../src/components/Input/Input.tsx","../src/components/Label/Label.tsx","../src/components/Alert/Alert.tsx","../src/components/Toggle/Toggle.tsx","../src/components/Modal/Modal.tsx","../src/hooks/useEscapeDismiss.ts","../src/components/DataTable/DataTable.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Link/Link.tsx","../src/components/Chip/Chip.tsx","../src/components/SortableTable/SortableTable.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Disclosure/Disclosure.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/SidePanel/SidePanel.tsx","../src/components/Textarea/Textarea.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Button.css'\n\nexport type ButtonType = 'primary' | 'secondary' | 'ghost' | 'danger'\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type ButtonColor = 'blue' | 'pink' | 'orange' | 'green'\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual hierarchy. Primary = strongest action, Secondary = neutral bordered, Ghost = minimal, Danger = destructive. */\n buttonType?: ButtonType\n /** Size preset matching the component height scale. */\n buttonSize?: ButtonSize\n /** Color theme — maps to the design system's color scales. */\n color?: ButtonColor\n /** Icon element. */\n icon?: React.ReactNode\n /** Whether the button displays only an icon (no text). Must include aria-label. */\n hasIconOnly?: boolean\n /** Position of the icon relative to the label. */\n iconPosition?: 'left' | 'right'\n}\n\n/*\n * Color palette mapping per the color guide's semantic stop roles:\n * 0 = bg (non-interactive reading surfaces)\n * 50 = surface (tertiary button fill — interactive)\n * 100 = surface-hover (tertiary button hover — darken)\n * 200 = surface-stroke (tertiary pressed, borders)\n * 500 = md-stroke (strong chromatic hover — lighten from 600)\n * 600 = strong (strong chromatic fill — rest)\n * 700 = strong-pressed (strong chromatic pressed — darken)\n */\nconst colorPalette = {\n blue: {\n 0: 'var(--blue-0)',\n 50: 'var(--blue-50)',\n 100: 'var(--blue-100)',\n 200: 'var(--blue-200)',\n 500: 'var(--blue-500)',\n 600: 'var(--blue-600)',\n 700: 'var(--blue-700)',\n },\n pink: {\n 0: 'var(--pink-0)',\n 50: 'var(--pink-50)',\n 100: 'var(--pink-100)',\n 200: 'var(--pink-200)',\n 500: 'var(--pink-500)',\n 600: 'var(--pink-600)',\n 700: 'var(--pink-700)',\n },\n orange: {\n 0: 'var(--orange-0)',\n 50: 'var(--orange-50)',\n 100: 'var(--orange-100)',\n 200: 'var(--orange-200)',\n 500: 'var(--orange-500)',\n 600: 'var(--orange-600)',\n 700: 'var(--orange-700)',\n },\n green: {\n 0: 'var(--green-0)',\n 50: 'var(--green-50)',\n 100: 'var(--green-100)',\n 200: 'var(--green-200)',\n 500: 'var(--green-500)',\n 600: 'var(--green-600)',\n 700: 'var(--green-700)',\n },\n}\n\n/*\n * Component height scale from component-guide.md.\n * Heights + padding. Horizontal padding = 2× vertical padding.\n */\nconst sizeConfig = {\n xs: { height: '28px', padding: '4px 8px', iconOnly: '28px', fontSize: '0.75rem' },\n sm: { height: '32px', padding: '6px 12px', iconOnly: '32px', fontSize: '0.75rem' },\n md: { height: '40px', padding: '8px 16px', iconOnly: '40px', fontSize: '0.875rem' },\n lg: { height: '44px', padding: '10px 20px', iconOnly: '44px', fontSize: '1rem' },\n xl: { height: '56px', padding: '14px 28px', iconOnly: '56px', fontSize: '1rem' },\n}\n\nfunction getButtonStyles(\n buttonType: ButtonType,\n isHovered: boolean,\n isActive: boolean,\n buttonSize: ButtonSize,\n disabled: boolean,\n color: ButtonColor,\n hasIconOnly: boolean | undefined,\n): React.CSSProperties {\n const palette = colorPalette[color]\n const size = sizeConfig[buttonSize]\n\n const base: React.CSSProperties = {\n height: size.height,\n padding: hasIconOnly ? '0' : size.padding,\n borderRadius: hasIconOnly ? 'var(--radius-lg, 8px)' : 'var(--radius-full, 9999px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontSize: size.fontSize,\n transition: 'background-color 0.15s ease, border-color 0.15s ease, opacity 0.15s ease',\n }\n\n if (hasIconOnly) {\n base.width = size.iconOnly\n base.justifyContent = 'center'\n }\n\n // Disabled: bordered buttons get transparent bg + disabled border + disabled text.\n // Others just get opacity: 0.5 (handled by CSS).\n // Per principles.md Interaction States > Disabled\n if (disabled) {\n if (buttonType === 'ghost') {\n return { ...base, backgroundColor: 'transparent', border: 'none', color: 'var(--fg-disabled)' }\n }\n return { ...base, backgroundColor: 'transparent', border: '1px solid var(--fg-disabled)', color: 'var(--fg-disabled)' }\n }\n\n switch (buttonType) {\n // Primary with text: dark pill. Icon-only: color palette (Synapse style).\n case 'primary':\n if (hasIconOnly) {\n return {\n ...base,\n backgroundColor: isActive ? palette[700] : isHovered ? palette[500] : palette[600],\n border: 'none',\n color: 'var(--fg-inverse)',\n }\n }\n return {\n ...base,\n backgroundColor: 'var(--fg-primary)',\n border: '1px solid var(--fg-primary)',\n color: 'var(--fg-inverse)',\n ...(isHovered || isActive ? { opacity: 0.85 } : {}),\n }\n\n // Secondary: neutral. Rest=canvas, hover=surface-1 (darken), pressed=surface-2. Subtle border, dark text.\n case 'secondary':\n return {\n ...base,\n backgroundColor: isActive ? 'var(--bg-surface-2)' : isHovered ? 'var(--bg-surface-1)' : 'var(--bg-canvas)',\n border: '1px solid var(--border-subtle)',\n color: 'var(--fg-primary)',\n }\n\n // Ghost: no border. Rest=transparent, hover/press=surface-1.\n case 'ghost':\n return {\n ...base,\n backgroundColor: isHovered || isActive ? 'var(--bg-surface-1)' : 'transparent',\n border: 'none',\n color: 'var(--fg-primary)',\n }\n\n // Danger: low-intensity destructive action. Text stays steady; hover deepens the light red surface.\n case 'danger':\n return {\n ...base,\n backgroundColor: isHovered || isActive ? 'var(--danger-button-surface-hover)' : 'var(--danger-button-surface)',\n border: 'none',\n color: 'var(--danger-button-fg)',\n }\n\n default:\n return base\n }\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, buttonType = 'primary', buttonSize = 'md', color = 'blue', icon, hasIconOnly, iconPosition = 'left', style, disabled, children, ...props }, ref) => {\n const [isHovered, setIsHovered] = React.useState(false)\n const [isActive, setIsActive] = React.useState(false)\n\n const typeStyles = getButtonStyles(buttonType, isHovered, isActive, buttonSize, !!disabled, color, hasIconOnly)\n const hasIconAndText = icon && children && !hasIconOnly\n const finalStyles = hasIconAndText\n ? { ...typeStyles, gap: 'var(--space-2, 8px)', ...style }\n : { ...typeStyles, ...style }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn('fractal-button', `fractal-button--${buttonType}`, className)}\n style={finalStyles}\n disabled={disabled}\n onMouseEnter={(e) => { setIsHovered(true); props.onMouseEnter?.(e) }}\n onMouseLeave={(e) => { setIsHovered(false); setIsActive(false); props.onMouseLeave?.(e) }}\n onMouseDown={(e) => { setIsActive(true); props.onMouseDown?.(e) }}\n onMouseUp={(e) => { setIsActive(false); props.onMouseUp?.(e) }}\n {...props}\n >\n {iconPosition !== 'right' && icon}\n {!hasIconOnly && children}\n {iconPosition === 'right' && icon}\n </button>\n )\n }\n)\nButton.displayName = 'Button'\n\nexport { Button }\n","import { clsx, type ClassValue } from 'clsx'\n\nexport function cn(...inputs: ClassValue[]) {\n return clsx(inputs)\n}\n","import * as React from 'react'\nimport { Folder as FolderIcon } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Card.css'\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-card', className)} {...props} />\n )\n)\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-card-header', className)} {...props} />\n )\n)\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('fractal-card-title', className)} {...props} />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn('fractal-card-description', className)} {...props} />\n )\n)\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-card-content', className)} {...props} />\n )\n)\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-card-footer', className)} {...props} />\n )\n)\nCardFooter.displayName = 'CardFooter'\n\nexport interface FeatureCardProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode\n title: string\n description: string\n}\n\nconst FeatureCard = React.forwardRef<HTMLDivElement, FeatureCardProps>(\n ({ icon, title, description, className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-feature-card', className)} {...props}>\n {icon && <div className=\"fractal-feature-card__icon\">{icon}</div>}\n <h3 className=\"fractal-feature-card__title\">{title}</h3>\n <p className=\"fractal-feature-card__description\">{description}</p>\n </div>\n )\n)\nFeatureCard.displayName = 'FeatureCard'\n\nexport interface FolderCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string\n sessionCount?: number\n selected?: boolean\n}\n\nconst FolderCard = React.forwardRef<HTMLDivElement, FolderCardProps>(\n ({ name, sessionCount, selected, className, onClick, ...props }, ref) => (\n <div\n ref={ref}\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick?.(e as unknown as React.MouseEvent<HTMLDivElement>)\n }\n }}\n className={cn('fractal-folder-card', selected && 'fractal-folder-card--selected', className)}\n {...props}\n >\n <div className=\"fractal-folder-card__header\">\n <FolderIcon size={16} className=\"fractal-folder-card__icon\" aria-hidden />\n <span className=\"fractal-folder-card__name\">{name}</span>\n </div>\n {sessionCount !== undefined && (\n <div className=\"fractal-folder-card__footer\">\n <span className=\"fractal-folder-card__sessions\">{sessionCount} {sessionCount === 1 ? 'session' : 'sessions'}</span>\n </div>\n )}\n </div>\n )\n)\nFolderCard.displayName = 'FolderCard'\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, FeatureCard, FolderCard }\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './PromptCard.css'\n\nexport type PromptCardTone =\n | 'blue'\n | 'pink'\n | 'orange'\n | 'green'\n | 'purple'\n | 'red'\n | 'yellow'\n | 'neutral'\n\nexport interface PromptCardProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'color' | 'title'> {\n title: React.ReactNode\n icon?: React.ReactNode\n prompt?: string\n tone?: PromptCardTone\n highlighted?: boolean\n onPromptSelect?: (prompt: string) => void\n}\n\nconst titleToPrompt = (title: React.ReactNode) =>\n typeof title === 'string' || typeof title === 'number' ? String(title) : ''\n\nconst PromptCard = React.forwardRef<HTMLButtonElement, PromptCardProps>(\n (\n {\n title,\n icon,\n prompt,\n tone = 'blue',\n highlighted,\n disabled,\n className,\n onClick,\n onPromptSelect,\n ...props\n },\n ref,\n ) => {\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n onPromptSelect?.(prompt ?? titleToPrompt(title))\n }\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cn(\n 'fractal-prompt-card',\n `fractal-prompt-card--${tone}`,\n highlighted && 'fractal-prompt-card--highlighted',\n className,\n )}\n onClick={handleClick}\n {...props}\n >\n {icon && (\n <span className=\"fractal-prompt-card__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <span className=\"fractal-prompt-card__title\">{title}</span>\n </button>\n )\n },\n)\nPromptCard.displayName = 'PromptCard'\n\nexport interface PromptGridProps extends React.HTMLAttributes<HTMLDivElement> {\n compact?: boolean\n padded?: boolean\n}\n\nconst PromptGrid = React.forwardRef<HTMLDivElement, PromptGridProps>(\n ({ compact, padded, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'fractal-prompt-grid',\n compact && 'fractal-prompt-grid--compact',\n padded && 'fractal-prompt-grid--padded',\n className,\n )}\n {...props}\n />\n ),\n)\nPromptGrid.displayName = 'PromptGrid'\n\nexport { PromptCard, PromptGrid }\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Input.css'\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => (\n <input\n type={type}\n ref={ref}\n className={cn('fractal-input', className)}\n {...props}\n />\n )\n)\nInput.displayName = 'Input'\n\nexport { Input }\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Label.css'\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {}\n\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, ...props }, ref) => (\n <label\n ref={ref}\n className={cn('fractal-label', className)}\n {...props}\n />\n )\n)\nLabel.displayName = 'Label'\n\nexport { Label }\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Alert.css'\n\nexport type AlertVariant = 'default' | 'info' | 'success' | 'warning' | 'error'\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant\n icon?: React.ReactNode\n}\n\nconst defaultIcons: Record<AlertVariant, string> = {\n default: 'ℹ',\n info: 'ℹ',\n success: '✓',\n warning: '⚠',\n error: '✕',\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant = 'default', icon, children, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn('fractal-alert', `fractal-alert--${variant}`, className)}\n {...props}\n >\n <span className=\"fractal-alert-icon\" aria-hidden>\n {icon ?? defaultIcons[variant]}\n </span>\n <div className=\"fractal-alert-content\">{children}</div>\n </div>\n )\n)\nAlert.displayName = 'Alert'\n\nconst AlertTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h5 ref={ref} className={cn('fractal-alert-title', className)} {...props} />\n )\n)\nAlertTitle.displayName = 'AlertTitle'\n\nconst AlertDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-alert-description', className)} {...props} />\n )\n)\nAlertDescription.displayName = 'AlertDescription'\n\nexport { Alert, AlertTitle, AlertDescription }\n","import { cn } from '../../utils/cn'\nimport './Toggle.css'\n\nexport interface ToggleProps {\n checked: boolean\n onChange: (checked: boolean) => void\n label?: string\n className?: string\n}\n\nexport function Toggle({ checked, onChange, label, className }: ToggleProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n className={cn('fractal-toggle', className)}\n onClick={() => onChange(!checked)}\n >\n <span className={cn('fractal-toggle-track', checked && 'fractal-toggle-track--checked')}>\n <span className={cn('fractal-toggle-thumb', checked && 'fractal-toggle-thumb--checked')} />\n </span>\n {label && <span className=\"fractal-toggle-label\">{label}</span>}\n </button>\n )\n}\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { useEscapeDismiss } from '../../hooks/useEscapeDismiss'\nimport { cn } from '../../utils/cn'\nimport './Modal.css'\n\nexport interface ModalProps {\n open: boolean\n onClose: () => void\n title: React.ReactNode\n children: React.ReactNode\n /** When true, uses red accent for destructive actions. */\n danger?: boolean\n /** When true, uses yellow/warning accent. */\n warn?: boolean\n /** Optional footer content (e.g. action buttons). */\n footer?: React.ReactNode\n /** When true, prevents closing via overlay click or Escape. */\n noClose?: boolean\n /** Modal width: 'sm' (420px), 'md' (756px), 'lg' (near-fullscreen). */\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nconst CloseIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 4L4 12M4 4L12 12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nexport function Modal({ open, onClose, title, children, danger, warn, footer, noClose, size = 'sm', className }: ModalProps) {\n useEscapeDismiss(80, onClose, open && !noClose)\n\n if (!open) return null\n\n const sizeClass = `fractal-modal-panel--${size}`\n const accentClass = danger ? 'fractal-modal-panel--danger' : warn ? 'fractal-modal-panel--warn' : ''\n\n return createPortal(\n <div className=\"fractal-modal-overlay\" onClick={noClose ? undefined : onClose}>\n <div\n className={cn('fractal-modal-panel', sizeClass, accentClass, className)}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"fractal-modal-title-row\">\n <h3 className={cn('fractal-modal-title', danger && 'fractal-modal-title--danger', warn && 'fractal-modal-title--warn')}>\n {title}\n </h3>\n {!noClose && (\n <button type=\"button\" onClick={onClose} title=\"Close\" className=\"fractal-modal-close\">\n <CloseIcon />\n </button>\n )}\n </div>\n <div className={cn('fractal-modal-body', size === 'lg' && 'fractal-modal-body--lg')}>\n {children}\n </div>\n {footer && <div className=\"fractal-modal-footer\">{footer}</div>}\n </div>\n </div>,\n document.body,\n )\n}\n","import { useEffect, useRef } from 'react'\n\n/**\n * Centralized Escape-key dismiss system with priority ordering.\n *\n * Components register a handler via `useEscapeDismiss(priority, handler)`.\n * When the user presses Escape, only the highest-priority active handler fires.\n * If two handlers share the same priority, the most recently registered one wins.\n *\n * Priority guidelines (higher = dismissed first):\n * 120 Sidebar search filter\n * 100 Context menus, tooltips\n * 80 Modals / dialogs\n * 60 Search overlay, drawers\n * 40 Inline editors\n */\n\ninterface EscapeEntry {\n id: number\n priority: number\n handler: () => void\n}\n\nlet nextId = 0\nconst stack: EscapeEntry[] = []\n\nfunction insertSorted(entry: EscapeEntry): void {\n let i = 0\n while (i < stack.length && stack[i].priority >= entry.priority) {\n if (stack[i].priority === entry.priority) break\n i++\n }\n stack.splice(i, 0, entry)\n}\n\nfunction remove(id: number): void {\n const idx = stack.findIndex((e) => e.id === id)\n if (idx >= 0) stack.splice(idx, 1)\n}\n\nlet listenerInstalled = false\n\nfunction ensureGlobalListener(): void {\n if (listenerInstalled) return\n listenerInstalled = true\n\n window.addEventListener(\n 'keydown',\n (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return\n if (stack.length === 0) return\n\n e.preventDefault()\n e.stopImmediatePropagation()\n\n const top = stack[0]\n top.handler()\n },\n { capture: true },\n )\n}\n\n/**\n * Register an Escape-key dismiss handler with the global priority stack.\n *\n * @param priority Higher values are dismissed first. See header for guidelines.\n * @param handler Called when this entry is the top-of-stack and Escape is pressed.\n * @param enabled When false the handler is not registered.\n */\nexport function useEscapeDismiss(\n priority: number,\n handler: () => void,\n enabled = true,\n): void {\n const handlerRef = useRef(handler)\n handlerRef.current = handler\n\n useEffect(() => {\n if (!enabled) return\n\n ensureGlobalListener()\n\n const id = nextId++\n const entry: EscapeEntry = {\n id,\n priority,\n handler: () => handlerRef.current(),\n }\n insertSorted(entry)\n\n return () => remove(id)\n }, [priority, enabled])\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '../../utils/cn'\nimport './DataTable.css'\n\nexport interface DataTableColumn<T> {\n key: string\n header: string\n width?: string\n render: (row: T, index: number) => ReactNode\n}\n\nexport interface DataTableProps<T> {\n columns: DataTableColumn<T>[]\n data: T[]\n emptyMessage?: string\n header?: ReactNode\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nexport function DataTable<T>({ columns, data, emptyMessage, header, size = 'md', className }: DataTableProps<T>) {\n return (\n <div className={cn('fractal-datatable', `fractal-datatable--${size}`, className)}>\n <div className=\"fractal-datatable-surface\">\n {header && (\n <div className=\"fractal-datatable-header\">\n {header}\n </div>\n )}\n\n {data.length === 0 ? (\n <div className=\"fractal-datatable-empty\">\n {emptyMessage || 'No data'}\n </div>\n ) : (\n <table className=\"fractal-datatable-table\">\n <thead>\n <tr className=\"fractal-datatable-thead-row\">\n {columns.map((col) => (\n <th key={col.key} className=\"fractal-datatable-th\" style={{ width: col.width }}>\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className=\"fractal-datatable-row\"\n >\n {columns.map((col) => (\n <td key={col.key} className=\"fractal-datatable-td\" style={{ width: col.width }}>\n {col.render(row, rowIndex)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n )}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { ChevronDown, ChevronUp } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Dropdown.css'\n\nexport interface DropdownItem {\n value: string\n icon?: React.ReactNode\n description?: string | React.ReactNode\n border?: 'top' | 'bottom'\n kind?: 'item' | 'header'\n trailing?: React.ReactNode\n}\n\nexport interface DropdownProps {\n items: DropdownItem[]\n selectedValue: string\n onSelect: (value: string) => void\n triggerLabel?: string\n direction?: 'up' | 'down'\n align?: 'left' | 'right'\n triggerContent?: React.ReactNode\n label?: React.ReactNode\n noChevron?: boolean\n size?: 'sm' | 'md'\n triggerVariant?: 'outline' | 'tertiary'\n className?: string\n triggerClassName?: string\n panelClassName?: string\n closeOnSelect?: boolean\n}\n\nconst MARGIN = 4\n\nexport function Dropdown({\n items,\n selectedValue,\n onSelect,\n triggerLabel = 'Options',\n direction = 'down',\n align = 'left',\n triggerContent,\n label,\n noChevron = false,\n size = 'md',\n triggerVariant = 'outline',\n className,\n triggerClassName,\n panelClassName,\n closeOnSelect = true,\n}: DropdownProps) {\n const [open, setOpen] = React.useState(false)\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const panelRef = React.useRef<HTMLDivElement>(null)\n const [panelStyle, setPanelStyle] = React.useState<React.CSSProperties>({})\n\n const visibleItems = items.filter(\n (item) =>\n item.icon != null ||\n (item.description != null &&\n (typeof item.description === 'string' ? item.description !== '' : true))\n )\n if (visibleItems.length === 0) return null\n\n const selectableItems = visibleItems.filter((i) => i.kind !== 'header')\n const selected = items.find((i) => i.value === selectedValue && i.kind !== 'header') ?? selectableItems[0] ?? visibleItems[0]\n const isUp = direction === 'up'\n const ChevronIcon = isUp ? ChevronUp : ChevronDown\n\n React.useLayoutEffect(() => {\n if (!open || !triggerRef.current || !panelRef.current) return\n\n const triggerRect = triggerRef.current.getBoundingClientRect()\n const panelRect = panelRef.current.getBoundingClientRect()\n const vw = window.innerWidth\n const vh = window.innerHeight\n\n const spaceBelow = vh - triggerRect.bottom - MARGIN\n const spaceAbove = triggerRect.top - MARGIN\n let placeAbove = isUp\n\n if (placeAbove && panelRect.height > spaceAbove && spaceBelow > spaceAbove) {\n placeAbove = false\n } else if (!placeAbove && panelRect.height > spaceBelow && spaceAbove > spaceBelow) {\n placeAbove = true\n }\n\n const top = placeAbove\n ? -(panelRect.height + MARGIN)\n : triggerRect.height + MARGIN\n\n let left: number | undefined\n let right: number | undefined\n\n if (align === 'right') {\n right = 0\n const panelLeft = triggerRect.right - panelRect.width\n if (panelLeft < 0) {\n right = undefined\n left = 0\n }\n } else {\n left = 0\n const panelRight = triggerRect.left + panelRect.width\n if (panelRight > vw) {\n left = undefined\n right = 0\n }\n }\n\n setPanelStyle({ top, left, right })\n }, [open, isUp, align])\n\n React.useEffect(() => {\n if (!open) return\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node\n if (triggerRef.current?.contains(target) || panelRef.current?.contains(target)) return\n setOpen(false)\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [open])\n\n return (\n <div className={cn('fractal-dropdown', className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-label={triggerLabel}\n onClick={() => setOpen((o) => !o)}\n className={cn(\n 'fractal-dropdown-trigger',\n `fractal-dropdown-trigger--${size}`,\n `fractal-dropdown-trigger--${triggerVariant}`,\n triggerClassName,\n )}\n >\n {triggerContent != null ? (\n triggerContent\n ) : (\n <>\n {selected.icon != null && (\n <span className=\"fractal-dropdown-icon fractal-dropdown-icon--trigger\">{selected.icon}</span>\n )}\n {selected.description != null &&\n (typeof selected.description !== 'string' || selected.description !== '') && (\n <span className=\"fractal-dropdown-selected-text\">{selected.description}</span>\n )}\n </>\n )}\n {!noChevron && (\n <span className=\"fractal-dropdown-chevron\" aria-hidden>\n <ChevronIcon size={size === 'sm' ? 14 : 16} />\n </span>\n )}\n </button>\n\n {open && (\n <div\n ref={panelRef}\n role=\"listbox\"\n aria-label={triggerLabel}\n className={cn('fractal-dropdown-panel', `fractal-dropdown-panel--${size}`, panelClassName)}\n style={panelStyle}\n >\n {label != null && (\n <div className=\"fractal-dropdown-label\">{label}</div>\n )}\n {visibleItems.map((item, index) => {\n const topDivider = item.border === 'top' ? <div className=\"fractal-dropdown-separator\" /> : null\n const bottomDivider = item.border === 'bottom' ? <div className=\"fractal-dropdown-separator\" /> : null\n if (item.kind === 'header') {\n return (\n <React.Fragment key={`header-${index}`}>\n {topDivider}\n <div role=\"presentation\" className=\"fractal-dropdown-label\">\n {item.description}\n </div>\n {bottomDivider}\n </React.Fragment>\n )\n }\n const isSelected = item.value === selectedValue\n return (\n <React.Fragment key={item.value}>\n {topDivider}\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => {\n onSelect(item.value)\n if (closeOnSelect) setOpen(false)\n }}\n className=\"fractal-dropdown-option\"\n >\n {item.icon != null && (\n <span className=\"fractal-dropdown-icon\">{item.icon}</span>\n )}\n {item.description != null &&\n (typeof item.description !== 'string' || item.description !== '') && (\n <span className=\"fractal-dropdown-option-text\">\n {item.description}\n </span>\n )}\n {item.trailing != null && (\n <span className=\"fractal-dropdown-trailing\">{item.trailing}</span>\n )}\n </button>\n {bottomDivider}\n </React.Fragment>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Link.css'\n\nexport type LinkTheme = 'default' | 'muted' | 'accent'\nexport type LinkSize = 'sm' | 'md' | 'lg'\n\nexport interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n theme?: LinkTheme\n size?: LinkSize\n}\n\nconst Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n ({ className, theme = 'default', size = 'md', ...props }, ref) => (\n <a\n ref={ref}\n className={cn('fractal-link', `fractal-link--${theme}`, `fractal-link--${size}`, className)}\n {...props}\n />\n )\n)\nLink.displayName = 'Link'\n\nexport { Link }\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Chip.css'\n\nexport type ChipTone = 'neutral' | 'success' | 'warning' | 'error' | 'info'\n\nexport interface ChipProps extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: ChipTone\n}\n\nconst Chip = React.forwardRef<HTMLSpanElement, ChipProps>(\n ({ className, tone = 'neutral', ...props }, ref) => (\n <span\n ref={ref}\n className={cn('fractal-chip', `fractal-chip--${tone}`, className)}\n {...props}\n />\n )\n)\nChip.displayName = 'Chip'\n\nexport { Chip }\n","import { useMemo, useState, type ReactNode } from 'react'\nimport { ArrowUp, ArrowDown, ArrowsUpDown } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './SortableTable.css'\n\nexport type SortDirection = 'asc' | 'desc' | null\n\nexport interface SortableTableColumn<T> {\n key: string\n header: string\n width?: string\n sortable?: boolean\n sortAccessor?: (row: T) => string | number | null | undefined\n render: (row: T, index: number) => ReactNode\n align?: 'left' | 'right'\n}\n\nexport interface SortableTableProps<T> {\n columns: SortableTableColumn<T>[]\n data: T[]\n emptyMessage?: string\n header?: ReactNode\n size?: 'sm' | 'md' | 'lg'\n className?: string\n defaultSortKey?: string\n defaultSortDirection?: SortDirection\n sortKey?: string | null\n sortDirection?: SortDirection\n onSortChange?: (key: string | null, direction: SortDirection) => void\n highlightRow?: (row: T, index: number) => boolean\n /** Invoked when a row is selected. Enables pointer and keyboard row activation. */\n onRowClick?: (row: T, index: number) => void\n}\n\nexport function SortableTable<T>({\n columns,\n data,\n emptyMessage,\n header,\n size = 'md',\n className,\n defaultSortKey = undefined,\n defaultSortDirection = null,\n sortKey: controlledKey,\n sortDirection: controlledDirection,\n onSortChange,\n highlightRow,\n onRowClick,\n}: SortableTableProps<T>) {\n const [internalKey, setInternalKey] = useState<string | null>(defaultSortKey ?? null)\n const [internalDirection, setInternalDirection] = useState<SortDirection>(defaultSortDirection)\n\n const isControlled = controlledKey !== undefined && controlledDirection !== undefined\n const activeKey = isControlled ? controlledKey : internalKey\n const activeDirection = isControlled ? controlledDirection : internalDirection\n\n const sorted = useMemo(() => {\n if (!activeKey || !activeDirection) return data\n const col = columns.find((c) => c.key === activeKey)\n if (!col) return data\n const accessor =\n col.sortAccessor ??\n ((row: T) => {\n const value = (row as Record<string, unknown>)[activeKey]\n return typeof value === 'string' || typeof value === 'number' ? value : null\n })\n const copy = [...data]\n copy.sort((a, b) => {\n const av = accessor(a)\n const bv = accessor(b)\n if (av == null && bv == null) return 0\n if (av == null) return 1\n if (bv == null) return -1\n if (typeof av === 'number' && typeof bv === 'number') {\n return activeDirection === 'asc' ? av - bv : bv - av\n }\n const as = String(av).toLowerCase()\n const bs = String(bv).toLowerCase()\n if (as < bs) return activeDirection === 'asc' ? -1 : 1\n if (as > bs) return activeDirection === 'asc' ? 1 : -1\n return 0\n })\n return copy\n }, [data, columns, activeKey, activeDirection])\n\n const handleSortClick = (key: string) => {\n let nextDirection: SortDirection\n if (activeKey !== key) {\n nextDirection = 'asc'\n } else if (activeDirection === 'asc') {\n nextDirection = 'desc'\n } else if (activeDirection === 'desc') {\n nextDirection = null\n } else {\n nextDirection = 'asc'\n }\n const nextKey = nextDirection === null ? null : key\n\n if (isControlled) {\n onSortChange?.(nextKey, nextDirection)\n } else {\n setInternalKey(nextKey)\n setInternalDirection(nextDirection)\n onSortChange?.(nextKey, nextDirection)\n }\n }\n\n return (\n <div className={cn('fractal-sortable-table', `fractal-sortable-table--${size}`, className)}>\n <div className=\"fractal-sortable-table-surface\">\n {header && <div className=\"fractal-sortable-table-header\">{header}</div>}\n\n {sorted.length === 0 ? (\n <div className=\"fractal-sortable-table-empty\">{emptyMessage || 'No data'}</div>\n ) : (\n <table className=\"fractal-sortable-table-table\">\n <thead>\n <tr className=\"fractal-sortable-table-thead-row\">\n {columns.map((col) => {\n const isActive = activeKey === col.key && activeDirection !== null\n if (!col.sortable) {\n return (\n <th\n key={col.key}\n className=\"fractal-sortable-table-th\"\n style={{ width: col.width }}\n >\n {col.header}\n </th>\n )\n }\n return (\n <th\n key={col.key}\n className=\"fractal-sortable-table-th fractal-sortable-table-th--sortable\"\n style={{ width: col.width }}\n >\n <button\n type=\"button\"\n className={cn(\n 'fractal-sortable-table-sort-button',\n isActive && 'fractal-sortable-table-sort-button--active',\n )}\n onClick={() => handleSortClick(col.key)}\n aria-sort={\n isActive\n ? activeDirection === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n }\n >\n <span>{col.header}</span>\n <span className=\"fractal-sortable-table-sort-icon\" aria-hidden=\"true\">\n {isActive && activeDirection === 'asc' ? (\n <ArrowUp size={14} />\n ) : isActive && activeDirection === 'desc' ? (\n <ArrowDown size={14} />\n ) : (\n <ArrowsUpDown size={14} />\n )}\n </span>\n </button>\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {sorted.map((row, rowIndex) => {\n const highlighted = highlightRow?.(row, rowIndex) ?? false\n return (\n <tr\n key={rowIndex}\n className={cn(\n 'fractal-sortable-table-row',\n highlighted && 'fractal-sortable-table-row--highlighted',\n onRowClick && 'fractal-sortable-table-row--interactive',\n )}\n onClick={onRowClick ? () => onRowClick(row, rowIndex) : undefined}\n onKeyDown={onRowClick ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n onRowClick(row, rowIndex)\n }\n } : undefined}\n role={onRowClick ? 'button' : undefined}\n tabIndex={onRowClick ? 0 : undefined}\n >\n {columns.map((col) => (\n <td\n key={col.key}\n className=\"fractal-sortable-table-td\"\n style={{ width: col.width, textAlign: col.align ?? 'left' }}\n >\n {col.render(row, rowIndex)}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n )}\n </div>\n </div>\n )\n}\n","import { useId, useRef, useState, type KeyboardEvent, type ReactNode } from 'react'\nimport { cn } from '../../utils/cn'\nimport './Tabs.css'\n\nexport interface TabItem {\n id: string\n label: ReactNode\n content: ReactNode\n disabled?: boolean\n}\n\nexport interface TabsProps {\n items: TabItem[]\n defaultValue?: string\n value?: string\n onValueChange?: (id: string) => void\n className?: string\n ariaLabel?: string\n}\n\nexport function Tabs({\n items,\n defaultValue,\n value: controlledValue,\n onValueChange,\n className,\n ariaLabel,\n}: TabsProps) {\n const reactId = useId()\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? items.find((i) => !i.disabled)?.id ?? items[0]?.id ?? '',\n )\n const isControlled = controlledValue !== undefined\n const activeId = isControlled ? controlledValue : internalValue\n\n const tabRefs = useRef<Record<string, HTMLButtonElement | null>>({})\n\n const selectTab = (id: string) => {\n if (isControlled) {\n onValueChange?.(id)\n } else {\n setInternalValue(id)\n onValueChange?.(id)\n }\n }\n\n const focusable = items.filter((i) => !i.disabled)\n\n const onKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n const currentIndex = focusable.findIndex((i) => i.id === activeId)\n if (currentIndex === -1) return\n let nextIndex = currentIndex\n switch (event.key) {\n case 'ArrowRight':\n nextIndex = (currentIndex + 1) % focusable.length\n break\n case 'ArrowLeft':\n nextIndex = (currentIndex - 1 + focusable.length) % focusable.length\n break\n case 'Home':\n nextIndex = 0\n break\n case 'End':\n nextIndex = focusable.length - 1\n break\n default:\n return\n }\n event.preventDefault()\n const nextId = focusable[nextIndex].id\n selectTab(nextId)\n requestAnimationFrame(() => tabRefs.current[nextId]?.focus())\n }\n\n return (\n <div className={cn('fractal-tabs', className)}>\n <div role=\"tablist\" aria-label={ariaLabel} className=\"fractal-tabs-list\">\n {items.map((item) => {\n const isActive = item.id === activeId\n const tabId = `${reactId}-tab-${item.id}`\n const panelId = `${reactId}-panel-${item.id}`\n return (\n <button\n key={item.id}\n ref={(el) => {\n tabRefs.current[item.id] = el\n }}\n id={tabId}\n role=\"tab\"\n type=\"button\"\n aria-selected={isActive}\n aria-controls={panelId}\n tabIndex={isActive ? 0 : -1}\n disabled={item.disabled}\n className={cn(\n 'fractal-tabs-trigger',\n isActive && 'fractal-tabs-trigger--active',\n item.disabled && 'fractal-tabs-trigger--disabled',\n )}\n onClick={() => !item.disabled && selectTab(item.id)}\n onKeyDown={onKeyDown}\n >\n {item.label}\n </button>\n )\n })}\n </div>\n {items.map((item) => {\n const tabId = `${reactId}-tab-${item.id}`\n const panelId = `${reactId}-panel-${item.id}`\n const isActive = item.id === activeId\n return (\n <div\n key={item.id}\n id={panelId}\n role=\"tabpanel\"\n aria-labelledby={tabId}\n hidden={!isActive}\n className=\"fractal-tabs-panel\"\n >\n {isActive && item.content}\n </div>\n )\n })}\n </div>\n )\n}\n","import { useId, useState, type ReactNode } from 'react'\nimport { ChevronRight, ChevronDown } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Disclosure.css'\n\nexport interface DisclosureProps {\n title: ReactNode\n meta?: ReactNode\n children: ReactNode\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n className?: string\n variant?: 'card' | 'plain'\n}\n\nexport function Disclosure({\n title,\n meta,\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n className,\n variant = 'card',\n}: DisclosureProps) {\n const reactId = useId()\n const headerId = `${reactId}-header`\n const panelId = `${reactId}-panel`\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const toggle = () => {\n const next = !isOpen\n if (isControlled) {\n onOpenChange?.(next)\n } else {\n setInternalOpen(next)\n onOpenChange?.(next)\n }\n }\n\n return (\n <div\n className={cn(\n 'fractal-disclosure',\n variant === 'card' && 'fractal-disclosure--card',\n isOpen && 'fractal-disclosure--open',\n className,\n )}\n >\n <button\n type=\"button\"\n id={headerId}\n className=\"fractal-disclosure-trigger\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n onClick={toggle}\n >\n <span className=\"fractal-disclosure-icon\" aria-hidden=\"true\">\n {isOpen ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </span>\n <span className=\"fractal-disclosure-title\">{title}</span>\n {meta && <span className=\"fractal-disclosure-meta\">{meta}</span>}\n </button>\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={headerId}\n className=\"fractal-disclosure-panel\"\n hidden={!isOpen}\n >\n <div className=\"fractal-disclosure-panel-inner\">{children}</div>\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Sidebar.css'\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n /** Fixed sidebar width. Defaults to the standard application width. */\n width?: string\n}\n\nconst Sidebar = React.forwardRef<HTMLElement, SidebarProps>(\n ({ className, width, style, ...props }, ref) => (\n <aside\n ref={ref}\n className={cn('fractal-sidebar', className)}\n style={{ ...style, ...(width ? { '--fractal-sidebar-width': width } : {}) } as React.CSSProperties}\n {...props}\n />\n ),\n)\nSidebar.displayName = 'Sidebar'\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-sidebar__header', className)} {...props} />\n ),\n)\nSidebarHeader.displayName = 'SidebarHeader'\n\nconst SidebarBrand = React.forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className, type = 'button', ...props }, ref) => (\n <button ref={ref} type={type} className={cn('fractal-sidebar__brand', className)} {...props} />\n ),\n)\nSidebarBrand.displayName = 'SidebarBrand'\n\nconst SidebarNav = React.forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n ({ className, ...props }, ref) => (\n <nav ref={ref} className={cn('fractal-sidebar__nav', className)} {...props} />\n ),\n)\nSidebarNav.displayName = 'SidebarNav'\n\nconst SidebarSection = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-sidebar__section', className)} {...props} />\n ),\n)\nSidebarSection.displayName = 'SidebarSection'\n\nexport interface SidebarNavItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Marks the current destination. */\n active?: boolean\n /** Leading visual identifier. */\n icon?: React.ReactNode\n /** Optional right-aligned metadata or status. */\n endAdornment?: React.ReactNode\n}\n\nconst SidebarNavItem = React.forwardRef<HTMLButtonElement, SidebarNavItemProps>(\n ({ active = false, icon, endAdornment, className, type = 'button', children, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n className={cn('fractal-sidebar__nav-item', className)}\n data-active={active || undefined}\n aria-current={active ? 'page' : undefined}\n {...props}\n >\n {icon && <span className=\"fractal-sidebar__nav-item-icon\" aria-hidden=\"true\">{icon}</span>}\n <span className=\"fractal-sidebar__nav-item-label\">{children}</span>\n {endAdornment && <span className=\"fractal-sidebar__nav-item-end\">{endAdornment}</span>}\n </button>\n ),\n)\nSidebarNavItem.displayName = 'SidebarNavItem'\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-sidebar__footer', className)} {...props} />\n ),\n)\nSidebarFooter.displayName = 'SidebarFooter'\n\nexport {\n Sidebar,\n SidebarHeader,\n SidebarBrand,\n SidebarNav,\n SidebarSection,\n SidebarNavItem,\n SidebarFooter,\n}\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { Close } from '@mirror-physics/fractal-icons'\nimport { useEscapeDismiss } from '../../hooks/useEscapeDismiss'\nimport { cn } from '../../utils/cn'\nimport './SidePanel.css'\n\nexport interface SidePanelProps {\n open: boolean\n onClose: () => void\n title: React.ReactNode\n description?: React.ReactNode\n children: React.ReactNode\n footer?: React.ReactNode\n /** Panel width: sm (420px), md (540px), or lg (680px). */\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nexport function SidePanel({ open, onClose, title, description, children, footer, size = 'md', className }: SidePanelProps) {\n useEscapeDismiss(80, onClose, open)\n\n if (!open) return null\n\n return createPortal(\n <div className=\"fractal-side-panel-overlay\" onMouseDown={onClose}>\n <aside\n className={cn('fractal-side-panel', `fractal-side-panel--${size}`, className)}\n aria-modal=\"true\"\n aria-label={typeof title === 'string' ? title : 'Side panel'}\n role=\"dialog\"\n onMouseDown={(event) => event.stopPropagation()}\n >\n <header className=\"fractal-side-panel__header\">\n <div className=\"fractal-side-panel__heading\">\n <h2 className=\"fractal-side-panel__title\">{title}</h2>\n {description && <p className=\"fractal-side-panel__description\">{description}</p>}\n </div>\n <button type=\"button\" className=\"fractal-side-panel__close\" aria-label=\"Close panel\" onClick={onClose}>\n <Close size={18} />\n </button>\n </header>\n <div className=\"fractal-side-panel__body\">{children}</div>\n {footer && <footer className=\"fractal-side-panel__footer\">{footer}</footer>}\n </aside>\n </div>,\n document.body,\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Textarea.css'\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => <textarea ref={ref} className={cn('fractal-textarea', className)} {...props} />,\n)\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }\n"],"mappings":"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","names":["React","jsxs","React","jsx","jsxs","React","jsx","React","jsx","React","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","React","Fragment","jsx","jsxs","React","jsx","React","jsx","useState","jsx","jsxs","useState","useRef","useState","jsx","jsxs","useState","useRef","nextId","useId","useState","ChevronDown","jsx","jsxs","useId","useState","ChevronDown","React","jsx","jsxs","createPortal","jsx","jsxs","createPortal","React","jsx"]}
1
+ {"version":3,"sources":["../src/components/Button/Button.tsx","../src/utils/cn.ts","../src/components/Card/Card.tsx","../src/components/PromptCard/PromptCard.tsx","../src/components/Input/Input.tsx","../src/components/Label/Label.tsx","../src/components/Alert/Alert.tsx","../src/components/Toggle/Toggle.tsx","../src/components/Modal/Modal.tsx","../src/hooks/useEscapeDismiss.ts","../src/components/DataTable/DataTable.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Link/Link.tsx","../src/components/Chip/Chip.tsx","../src/components/SortableTable/SortableTable.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Disclosure/Disclosure.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/SidePanel/SidePanel.tsx","../src/components/Textarea/Textarea.tsx","../src/components/FileDropzone/FileDropzone.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Button.css'\n\nexport type ButtonType = 'primary' | 'secondary' | 'ghost' | 'danger'\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type ButtonColor = 'blue' | 'pink' | 'orange' | 'green'\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual hierarchy. Primary = strongest action, Secondary = neutral bordered, Ghost = minimal, Danger = destructive. */\n buttonType?: ButtonType\n /** Size preset matching the component height scale. */\n buttonSize?: ButtonSize\n /** Color theme — maps to the design system's color scales. */\n color?: ButtonColor\n /** Icon element. */\n icon?: React.ReactNode\n /** Whether the button displays only an icon (no text). Must include aria-label. */\n hasIconOnly?: boolean\n /** Position of the icon relative to the label. */\n iconPosition?: 'left' | 'right'\n}\n\n/*\n * Color palette mapping per the color guide's semantic stop roles:\n * 0 = bg (non-interactive reading surfaces)\n * 50 = surface (tertiary button fill — interactive)\n * 100 = surface-hover (tertiary button hover — darken)\n * 200 = surface-stroke (tertiary pressed, borders)\n * 500 = md-stroke (strong chromatic hover — lighten from 600)\n * 600 = strong (strong chromatic fill — rest)\n * 700 = strong-pressed (strong chromatic pressed — darken)\n */\nconst colorPalette = {\n blue: {\n 0: 'var(--blue-0)',\n 50: 'var(--blue-50)',\n 100: 'var(--blue-100)',\n 200: 'var(--blue-200)',\n 500: 'var(--blue-500)',\n 600: 'var(--blue-600)',\n 700: 'var(--blue-700)',\n },\n pink: {\n 0: 'var(--pink-0)',\n 50: 'var(--pink-50)',\n 100: 'var(--pink-100)',\n 200: 'var(--pink-200)',\n 500: 'var(--pink-500)',\n 600: 'var(--pink-600)',\n 700: 'var(--pink-700)',\n },\n orange: {\n 0: 'var(--orange-0)',\n 50: 'var(--orange-50)',\n 100: 'var(--orange-100)',\n 200: 'var(--orange-200)',\n 500: 'var(--orange-500)',\n 600: 'var(--orange-600)',\n 700: 'var(--orange-700)',\n },\n green: {\n 0: 'var(--green-0)',\n 50: 'var(--green-50)',\n 100: 'var(--green-100)',\n 200: 'var(--green-200)',\n 500: 'var(--green-500)',\n 600: 'var(--green-600)',\n 700: 'var(--green-700)',\n },\n}\n\n/*\n * Component height scale from component-guide.md.\n * Heights + padding. Horizontal padding = 2× vertical padding.\n */\nconst sizeConfig = {\n xs: { height: '28px', padding: '4px 8px', iconOnly: '28px', fontSize: '0.75rem' },\n sm: { height: '32px', padding: '6px 12px', iconOnly: '32px', fontSize: '0.75rem' },\n md: { height: '40px', padding: '8px 16px', iconOnly: '40px', fontSize: '0.875rem' },\n lg: { height: '44px', padding: '10px 20px', iconOnly: '44px', fontSize: '1rem' },\n xl: { height: '56px', padding: '14px 28px', iconOnly: '56px', fontSize: '1rem' },\n}\n\nfunction getButtonStyles(\n buttonType: ButtonType,\n isHovered: boolean,\n isActive: boolean,\n buttonSize: ButtonSize,\n disabled: boolean,\n color: ButtonColor,\n hasIconOnly: boolean | undefined,\n): React.CSSProperties {\n const palette = colorPalette[color]\n const size = sizeConfig[buttonSize]\n\n const base: React.CSSProperties = {\n height: size.height,\n padding: hasIconOnly ? '0' : size.padding,\n borderRadius: hasIconOnly ? 'var(--radius-lg, 8px)' : 'var(--radius-full, 9999px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontSize: size.fontSize,\n transition: 'background-color 0.15s ease, border-color 0.15s ease, opacity 0.15s ease',\n }\n\n if (hasIconOnly) {\n base.width = size.iconOnly\n base.justifyContent = 'center'\n }\n\n // Disabled: bordered buttons get transparent bg + disabled border + disabled text.\n // Others just get opacity: 0.5 (handled by CSS).\n // Per principles.md Interaction States > Disabled\n if (disabled) {\n if (buttonType === 'ghost') {\n return { ...base, backgroundColor: 'transparent', border: 'none', color: 'var(--fg-disabled)' }\n }\n return { ...base, backgroundColor: 'transparent', border: '1px solid var(--fg-disabled)', color: 'var(--fg-disabled)' }\n }\n\n switch (buttonType) {\n // Primary with text: dark pill. Icon-only: color palette (Synapse style).\n case 'primary':\n if (hasIconOnly) {\n return {\n ...base,\n backgroundColor: isActive ? palette[700] : isHovered ? palette[500] : palette[600],\n border: 'none',\n color: 'var(--fg-inverse)',\n }\n }\n return {\n ...base,\n backgroundColor: 'var(--fg-primary)',\n border: '1px solid var(--fg-primary)',\n color: 'var(--fg-inverse)',\n ...(isHovered || isActive ? { opacity: 0.85 } : {}),\n }\n\n // Secondary: neutral. Rest=canvas, hover=surface-1 (darken), pressed=surface-2. Subtle border, dark text.\n case 'secondary':\n return {\n ...base,\n backgroundColor: isActive ? 'var(--bg-surface-2)' : isHovered ? 'var(--bg-surface-1)' : 'var(--bg-canvas)',\n border: '1px solid var(--border-subtle)',\n color: 'var(--fg-primary)',\n }\n\n // Ghost: no border. Rest=transparent, hover/press=surface-1.\n case 'ghost':\n return {\n ...base,\n backgroundColor: isHovered || isActive ? 'var(--bg-surface-1)' : 'transparent',\n border: 'none',\n color: 'var(--fg-primary)',\n }\n\n // Danger: low-intensity destructive action. Text stays steady; hover deepens the light red surface.\n case 'danger':\n return {\n ...base,\n backgroundColor: isHovered || isActive ? 'var(--danger-button-surface-hover)' : 'var(--danger-button-surface)',\n border: 'none',\n color: 'var(--danger-button-fg)',\n }\n\n default:\n return base\n }\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, buttonType = 'primary', buttonSize = 'md', color = 'blue', icon, hasIconOnly, iconPosition = 'left', style, disabled, children, ...props }, ref) => {\n const [isHovered, setIsHovered] = React.useState(false)\n const [isActive, setIsActive] = React.useState(false)\n\n const typeStyles = getButtonStyles(buttonType, isHovered, isActive, buttonSize, !!disabled, color, hasIconOnly)\n const hasIconAndText = icon && children && !hasIconOnly\n const finalStyles = hasIconAndText\n ? { ...typeStyles, gap: 'var(--space-2, 8px)', ...style }\n : { ...typeStyles, ...style }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn('fractal-button', `fractal-button--${buttonType}`, className)}\n style={finalStyles}\n disabled={disabled}\n onMouseEnter={(e) => { setIsHovered(true); props.onMouseEnter?.(e) }}\n onMouseLeave={(e) => { setIsHovered(false); setIsActive(false); props.onMouseLeave?.(e) }}\n onMouseDown={(e) => { setIsActive(true); props.onMouseDown?.(e) }}\n onMouseUp={(e) => { setIsActive(false); props.onMouseUp?.(e) }}\n {...props}\n >\n {iconPosition !== 'right' && icon}\n {!hasIconOnly && children}\n {iconPosition === 'right' && icon}\n </button>\n )\n }\n)\nButton.displayName = 'Button'\n\nexport { Button }\n","import { clsx, type ClassValue } from 'clsx'\n\nexport function cn(...inputs: ClassValue[]) {\n return clsx(inputs)\n}\n","import * as React from 'react'\nimport { Folder as FolderIcon } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Card.css'\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-card', className)} {...props} />\n )\n)\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-card-header', className)} {...props} />\n )\n)\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('fractal-card-title', className)} {...props} />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn('fractal-card-description', className)} {...props} />\n )\n)\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-card-content', className)} {...props} />\n )\n)\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-card-footer', className)} {...props} />\n )\n)\nCardFooter.displayName = 'CardFooter'\n\nexport interface FeatureCardProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode\n title: string\n description: string\n}\n\nconst FeatureCard = React.forwardRef<HTMLDivElement, FeatureCardProps>(\n ({ icon, title, description, className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-feature-card', className)} {...props}>\n {icon && <div className=\"fractal-feature-card__icon\">{icon}</div>}\n <h3 className=\"fractal-feature-card__title\">{title}</h3>\n <p className=\"fractal-feature-card__description\">{description}</p>\n </div>\n )\n)\nFeatureCard.displayName = 'FeatureCard'\n\nexport interface FolderCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string\n sessionCount?: number\n selected?: boolean\n}\n\nconst FolderCard = React.forwardRef<HTMLDivElement, FolderCardProps>(\n ({ name, sessionCount, selected, className, onClick, ...props }, ref) => (\n <div\n ref={ref}\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick?.(e as unknown as React.MouseEvent<HTMLDivElement>)\n }\n }}\n className={cn('fractal-folder-card', selected && 'fractal-folder-card--selected', className)}\n {...props}\n >\n <div className=\"fractal-folder-card__header\">\n <FolderIcon size={16} className=\"fractal-folder-card__icon\" aria-hidden />\n <span className=\"fractal-folder-card__name\">{name}</span>\n </div>\n {sessionCount !== undefined && (\n <div className=\"fractal-folder-card__footer\">\n <span className=\"fractal-folder-card__sessions\">{sessionCount} {sessionCount === 1 ? 'session' : 'sessions'}</span>\n </div>\n )}\n </div>\n )\n)\nFolderCard.displayName = 'FolderCard'\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter, FeatureCard, FolderCard }\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './PromptCard.css'\n\nexport type PromptCardTone =\n | 'blue'\n | 'pink'\n | 'orange'\n | 'green'\n | 'purple'\n | 'red'\n | 'yellow'\n | 'neutral'\n\nexport interface PromptCardProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'color' | 'title'> {\n title: React.ReactNode\n icon?: React.ReactNode\n prompt?: string\n tone?: PromptCardTone\n highlighted?: boolean\n onPromptSelect?: (prompt: string) => void\n}\n\nconst titleToPrompt = (title: React.ReactNode) =>\n typeof title === 'string' || typeof title === 'number' ? String(title) : ''\n\nconst PromptCard = React.forwardRef<HTMLButtonElement, PromptCardProps>(\n (\n {\n title,\n icon,\n prompt,\n tone = 'blue',\n highlighted,\n disabled,\n className,\n onClick,\n onPromptSelect,\n ...props\n },\n ref,\n ) => {\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n onPromptSelect?.(prompt ?? titleToPrompt(title))\n }\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled}\n className={cn(\n 'fractal-prompt-card',\n `fractal-prompt-card--${tone}`,\n highlighted && 'fractal-prompt-card--highlighted',\n className,\n )}\n onClick={handleClick}\n {...props}\n >\n {icon && (\n <span className=\"fractal-prompt-card__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <span className=\"fractal-prompt-card__title\">{title}</span>\n </button>\n )\n },\n)\nPromptCard.displayName = 'PromptCard'\n\nexport interface PromptGridProps extends React.HTMLAttributes<HTMLDivElement> {\n compact?: boolean\n padded?: boolean\n}\n\nconst PromptGrid = React.forwardRef<HTMLDivElement, PromptGridProps>(\n ({ compact, padded, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'fractal-prompt-grid',\n compact && 'fractal-prompt-grid--compact',\n padded && 'fractal-prompt-grid--padded',\n className,\n )}\n {...props}\n />\n ),\n)\nPromptGrid.displayName = 'PromptGrid'\n\nexport { PromptCard, PromptGrid }\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Input.css'\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => (\n <input\n type={type}\n ref={ref}\n className={cn('fractal-input', className)}\n {...props}\n />\n )\n)\nInput.displayName = 'Input'\n\nexport { Input }\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Label.css'\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {}\n\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, ...props }, ref) => (\n <label\n ref={ref}\n className={cn('fractal-label', className)}\n {...props}\n />\n )\n)\nLabel.displayName = 'Label'\n\nexport { Label }\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Alert.css'\n\nexport type AlertVariant = 'default' | 'info' | 'success' | 'warning' | 'error'\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant\n icon?: React.ReactNode\n}\n\nconst defaultIcons: Record<AlertVariant, string> = {\n default: 'ℹ',\n info: 'ℹ',\n success: '✓',\n warning: '⚠',\n error: '✕',\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant = 'default', icon, children, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn('fractal-alert', `fractal-alert--${variant}`, className)}\n {...props}\n >\n <span className=\"fractal-alert-icon\" aria-hidden>\n {icon ?? defaultIcons[variant]}\n </span>\n <div className=\"fractal-alert-content\">{children}</div>\n </div>\n )\n)\nAlert.displayName = 'Alert'\n\nconst AlertTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h5 ref={ref} className={cn('fractal-alert-title', className)} {...props} />\n )\n)\nAlertTitle.displayName = 'AlertTitle'\n\nconst AlertDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-alert-description', className)} {...props} />\n )\n)\nAlertDescription.displayName = 'AlertDescription'\n\nexport { Alert, AlertTitle, AlertDescription }\n","import { cn } from '../../utils/cn'\nimport './Toggle.css'\n\nexport interface ToggleProps {\n checked: boolean\n onChange: (checked: boolean) => void\n label?: string\n className?: string\n}\n\nexport function Toggle({ checked, onChange, label, className }: ToggleProps) {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n className={cn('fractal-toggle', className)}\n onClick={() => onChange(!checked)}\n >\n <span className={cn('fractal-toggle-track', checked && 'fractal-toggle-track--checked')}>\n <span className={cn('fractal-toggle-thumb', checked && 'fractal-toggle-thumb--checked')} />\n </span>\n {label && <span className=\"fractal-toggle-label\">{label}</span>}\n </button>\n )\n}\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { useEscapeDismiss } from '../../hooks/useEscapeDismiss'\nimport { cn } from '../../utils/cn'\nimport './Modal.css'\n\nexport interface ModalProps {\n open: boolean\n onClose: () => void\n title: React.ReactNode\n children: React.ReactNode\n /** When true, uses red accent for destructive actions. */\n danger?: boolean\n /** When true, uses yellow/warning accent. */\n warn?: boolean\n /** Optional footer content (e.g. action buttons). */\n footer?: React.ReactNode\n /** When true, prevents closing via overlay click or Escape. */\n noClose?: boolean\n /** Modal width: 'sm' (420px), 'md' (756px), 'lg' (near-fullscreen). */\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nconst CloseIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 4L4 12M4 4L12 12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nexport function Modal({ open, onClose, title, children, danger, warn, footer, noClose, size = 'sm', className }: ModalProps) {\n useEscapeDismiss(80, onClose, open && !noClose)\n\n if (!open) return null\n\n const sizeClass = `fractal-modal-panel--${size}`\n const accentClass = danger ? 'fractal-modal-panel--danger' : warn ? 'fractal-modal-panel--warn' : ''\n\n return createPortal(\n <div className=\"fractal-modal-overlay\" onClick={noClose ? undefined : onClose}>\n <div\n className={cn('fractal-modal-panel', sizeClass, accentClass, className)}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"fractal-modal-title-row\">\n <h3 className={cn('fractal-modal-title', danger && 'fractal-modal-title--danger', warn && 'fractal-modal-title--warn')}>\n {title}\n </h3>\n {!noClose && (\n <button type=\"button\" onClick={onClose} title=\"Close\" className=\"fractal-modal-close\">\n <CloseIcon />\n </button>\n )}\n </div>\n <div className={cn('fractal-modal-body', size === 'lg' && 'fractal-modal-body--lg')}>\n {children}\n </div>\n {footer && <div className=\"fractal-modal-footer\">{footer}</div>}\n </div>\n </div>,\n document.body,\n )\n}\n","import { useEffect, useRef } from 'react'\n\n/**\n * Centralized Escape-key dismiss system with priority ordering.\n *\n * Components register a handler via `useEscapeDismiss(priority, handler)`.\n * When the user presses Escape, only the highest-priority active handler fires.\n * If two handlers share the same priority, the most recently registered one wins.\n *\n * Priority guidelines (higher = dismissed first):\n * 120 Sidebar search filter\n * 100 Context menus, tooltips\n * 80 Modals / dialogs\n * 60 Search overlay, drawers\n * 40 Inline editors\n */\n\ninterface EscapeEntry {\n id: number\n priority: number\n handler: () => void\n}\n\nlet nextId = 0\nconst stack: EscapeEntry[] = []\n\nfunction insertSorted(entry: EscapeEntry): void {\n let i = 0\n while (i < stack.length && stack[i].priority >= entry.priority) {\n if (stack[i].priority === entry.priority) break\n i++\n }\n stack.splice(i, 0, entry)\n}\n\nfunction remove(id: number): void {\n const idx = stack.findIndex((e) => e.id === id)\n if (idx >= 0) stack.splice(idx, 1)\n}\n\nlet listenerInstalled = false\n\nfunction ensureGlobalListener(): void {\n if (listenerInstalled) return\n listenerInstalled = true\n\n window.addEventListener(\n 'keydown',\n (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return\n if (stack.length === 0) return\n\n e.preventDefault()\n e.stopImmediatePropagation()\n\n const top = stack[0]\n top.handler()\n },\n { capture: true },\n )\n}\n\n/**\n * Register an Escape-key dismiss handler with the global priority stack.\n *\n * @param priority Higher values are dismissed first. See header for guidelines.\n * @param handler Called when this entry is the top-of-stack and Escape is pressed.\n * @param enabled When false the handler is not registered.\n */\nexport function useEscapeDismiss(\n priority: number,\n handler: () => void,\n enabled = true,\n): void {\n const handlerRef = useRef(handler)\n handlerRef.current = handler\n\n useEffect(() => {\n if (!enabled) return\n\n ensureGlobalListener()\n\n const id = nextId++\n const entry: EscapeEntry = {\n id,\n priority,\n handler: () => handlerRef.current(),\n }\n insertSorted(entry)\n\n return () => remove(id)\n }, [priority, enabled])\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '../../utils/cn'\nimport './DataTable.css'\n\nexport interface DataTableColumn<T> {\n key: string\n header: string\n width?: string\n render: (row: T, index: number) => ReactNode\n}\n\nexport interface DataTableProps<T> {\n columns: DataTableColumn<T>[]\n data: T[]\n emptyMessage?: string\n header?: ReactNode\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nexport function DataTable<T>({ columns, data, emptyMessage, header, size = 'md', className }: DataTableProps<T>) {\n return (\n <div className={cn('fractal-datatable', `fractal-datatable--${size}`, className)}>\n <div className=\"fractal-datatable-surface\">\n {header && (\n <div className=\"fractal-datatable-header\">\n {header}\n </div>\n )}\n\n {data.length === 0 ? (\n <div className=\"fractal-datatable-empty\">\n {emptyMessage || 'No data'}\n </div>\n ) : (\n <table className=\"fractal-datatable-table\">\n <thead>\n <tr className=\"fractal-datatable-thead-row\">\n {columns.map((col) => (\n <th key={col.key} className=\"fractal-datatable-th\" style={{ width: col.width }}>\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className=\"fractal-datatable-row\"\n >\n {columns.map((col) => (\n <td key={col.key} className=\"fractal-datatable-td\" style={{ width: col.width }}>\n {col.render(row, rowIndex)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n )}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { ChevronDown, ChevronUp } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Dropdown.css'\n\nexport interface DropdownItem {\n value: string\n icon?: React.ReactNode\n description?: string | React.ReactNode\n border?: 'top' | 'bottom'\n kind?: 'item' | 'header'\n trailing?: React.ReactNode\n}\n\nexport interface DropdownProps {\n items: DropdownItem[]\n selectedValue: string\n onSelect: (value: string) => void\n triggerLabel?: string\n direction?: 'up' | 'down'\n align?: 'left' | 'right'\n triggerContent?: React.ReactNode\n label?: React.ReactNode\n noChevron?: boolean\n size?: 'sm' | 'md'\n triggerVariant?: 'outline' | 'tertiary'\n className?: string\n triggerClassName?: string\n panelClassName?: string\n closeOnSelect?: boolean\n}\n\nconst MARGIN = 4\n\nexport function Dropdown({\n items,\n selectedValue,\n onSelect,\n triggerLabel = 'Options',\n direction = 'down',\n align = 'left',\n triggerContent,\n label,\n noChevron = false,\n size = 'md',\n triggerVariant = 'outline',\n className,\n triggerClassName,\n panelClassName,\n closeOnSelect = true,\n}: DropdownProps) {\n const [open, setOpen] = React.useState(false)\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const panelRef = React.useRef<HTMLDivElement>(null)\n const [panelStyle, setPanelStyle] = React.useState<React.CSSProperties>({})\n\n const visibleItems = items.filter(\n (item) =>\n item.icon != null ||\n (item.description != null &&\n (typeof item.description === 'string' ? item.description !== '' : true))\n )\n if (visibleItems.length === 0) return null\n\n const selectableItems = visibleItems.filter((i) => i.kind !== 'header')\n const selected = items.find((i) => i.value === selectedValue && i.kind !== 'header') ?? selectableItems[0] ?? visibleItems[0]\n const isUp = direction === 'up'\n const ChevronIcon = isUp ? ChevronUp : ChevronDown\n\n React.useLayoutEffect(() => {\n if (!open || !triggerRef.current || !panelRef.current) return\n\n const triggerRect = triggerRef.current.getBoundingClientRect()\n const panelRect = panelRef.current.getBoundingClientRect()\n const vw = window.innerWidth\n const vh = window.innerHeight\n\n const spaceBelow = vh - triggerRect.bottom - MARGIN\n const spaceAbove = triggerRect.top - MARGIN\n let placeAbove = isUp\n\n if (placeAbove && panelRect.height > spaceAbove && spaceBelow > spaceAbove) {\n placeAbove = false\n } else if (!placeAbove && panelRect.height > spaceBelow && spaceAbove > spaceBelow) {\n placeAbove = true\n }\n\n const top = placeAbove\n ? -(panelRect.height + MARGIN)\n : triggerRect.height + MARGIN\n\n let left: number | undefined\n let right: number | undefined\n\n if (align === 'right') {\n right = 0\n const panelLeft = triggerRect.right - panelRect.width\n if (panelLeft < 0) {\n right = undefined\n left = 0\n }\n } else {\n left = 0\n const panelRight = triggerRect.left + panelRect.width\n if (panelRight > vw) {\n left = undefined\n right = 0\n }\n }\n\n setPanelStyle({ top, left, right })\n }, [open, isUp, align])\n\n React.useEffect(() => {\n if (!open) return\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node\n if (triggerRef.current?.contains(target) || panelRef.current?.contains(target)) return\n setOpen(false)\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [open])\n\n return (\n <div className={cn('fractal-dropdown', className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-label={triggerLabel}\n onClick={() => setOpen((o) => !o)}\n className={cn(\n 'fractal-dropdown-trigger',\n `fractal-dropdown-trigger--${size}`,\n `fractal-dropdown-trigger--${triggerVariant}`,\n triggerClassName,\n )}\n >\n {triggerContent != null ? (\n triggerContent\n ) : (\n <>\n {selected.icon != null && (\n <span className=\"fractal-dropdown-icon fractal-dropdown-icon--trigger\">{selected.icon}</span>\n )}\n {selected.description != null &&\n (typeof selected.description !== 'string' || selected.description !== '') && (\n <span className=\"fractal-dropdown-selected-text\">{selected.description}</span>\n )}\n </>\n )}\n {!noChevron && (\n <span className=\"fractal-dropdown-chevron\" aria-hidden>\n <ChevronIcon size={size === 'sm' ? 14 : 16} />\n </span>\n )}\n </button>\n\n {open && (\n <div\n ref={panelRef}\n role=\"listbox\"\n aria-label={triggerLabel}\n className={cn('fractal-dropdown-panel', `fractal-dropdown-panel--${size}`, panelClassName)}\n style={panelStyle}\n >\n {label != null && (\n <div className=\"fractal-dropdown-label\">{label}</div>\n )}\n {visibleItems.map((item, index) => {\n const topDivider = item.border === 'top' ? <div className=\"fractal-dropdown-separator\" /> : null\n const bottomDivider = item.border === 'bottom' ? <div className=\"fractal-dropdown-separator\" /> : null\n if (item.kind === 'header') {\n return (\n <React.Fragment key={`header-${index}`}>\n {topDivider}\n <div role=\"presentation\" className=\"fractal-dropdown-label\">\n {item.description}\n </div>\n {bottomDivider}\n </React.Fragment>\n )\n }\n const isSelected = item.value === selectedValue\n return (\n <React.Fragment key={item.value}>\n {topDivider}\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => {\n onSelect(item.value)\n if (closeOnSelect) setOpen(false)\n }}\n className=\"fractal-dropdown-option\"\n >\n {item.icon != null && (\n <span className=\"fractal-dropdown-icon\">{item.icon}</span>\n )}\n {item.description != null &&\n (typeof item.description !== 'string' || item.description !== '') && (\n <span className=\"fractal-dropdown-option-text\">\n {item.description}\n </span>\n )}\n {item.trailing != null && (\n <span className=\"fractal-dropdown-trailing\">{item.trailing}</span>\n )}\n </button>\n {bottomDivider}\n </React.Fragment>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Link.css'\n\nexport type LinkTheme = 'default' | 'muted' | 'accent'\nexport type LinkSize = 'sm' | 'md' | 'lg'\n\nexport interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n theme?: LinkTheme\n size?: LinkSize\n}\n\nconst Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n ({ className, theme = 'default', size = 'md', ...props }, ref) => (\n <a\n ref={ref}\n className={cn('fractal-link', `fractal-link--${theme}`, `fractal-link--${size}`, className)}\n {...props}\n />\n )\n)\nLink.displayName = 'Link'\n\nexport { Link }\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Chip.css'\n\nexport type ChipTone = 'neutral' | 'success' | 'warning' | 'error' | 'info'\n\nexport interface ChipProps extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: ChipTone\n}\n\nconst Chip = React.forwardRef<HTMLSpanElement, ChipProps>(\n ({ className, tone = 'neutral', ...props }, ref) => (\n <span\n ref={ref}\n className={cn('fractal-chip', `fractal-chip--${tone}`, className)}\n {...props}\n />\n )\n)\nChip.displayName = 'Chip'\n\nexport { Chip }\n","import { useMemo, useState, type ReactNode } from 'react'\nimport { ArrowUp, ArrowDown, ArrowsUpDown } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './SortableTable.css'\n\nexport type SortDirection = 'asc' | 'desc' | null\n\nexport interface SortableTableColumn<T> {\n key: string\n header: string\n width?: string\n sortable?: boolean\n sortAccessor?: (row: T) => string | number | null | undefined\n render: (row: T, index: number) => ReactNode\n align?: 'left' | 'right'\n}\n\nexport interface SortableTableProps<T> {\n columns: SortableTableColumn<T>[]\n data: T[]\n emptyMessage?: string\n header?: ReactNode\n size?: 'sm' | 'md' | 'lg'\n className?: string\n defaultSortKey?: string\n defaultSortDirection?: SortDirection\n sortKey?: string | null\n sortDirection?: SortDirection\n onSortChange?: (key: string | null, direction: SortDirection) => void\n highlightRow?: (row: T, index: number) => boolean\n /** Invoked when a row is selected. Enables pointer and keyboard row activation. */\n onRowClick?: (row: T, index: number) => void\n}\n\nexport function SortableTable<T>({\n columns,\n data,\n emptyMessage,\n header,\n size = 'md',\n className,\n defaultSortKey = undefined,\n defaultSortDirection = null,\n sortKey: controlledKey,\n sortDirection: controlledDirection,\n onSortChange,\n highlightRow,\n onRowClick,\n}: SortableTableProps<T>) {\n const [internalKey, setInternalKey] = useState<string | null>(defaultSortKey ?? null)\n const [internalDirection, setInternalDirection] = useState<SortDirection>(defaultSortDirection)\n\n const isControlled = controlledKey !== undefined && controlledDirection !== undefined\n const activeKey = isControlled ? controlledKey : internalKey\n const activeDirection = isControlled ? controlledDirection : internalDirection\n\n const sorted = useMemo(() => {\n if (!activeKey || !activeDirection) return data\n const col = columns.find((c) => c.key === activeKey)\n if (!col) return data\n const accessor =\n col.sortAccessor ??\n ((row: T) => {\n const value = (row as Record<string, unknown>)[activeKey]\n return typeof value === 'string' || typeof value === 'number' ? value : null\n })\n const copy = [...data]\n copy.sort((a, b) => {\n const av = accessor(a)\n const bv = accessor(b)\n if (av == null && bv == null) return 0\n if (av == null) return 1\n if (bv == null) return -1\n if (typeof av === 'number' && typeof bv === 'number') {\n return activeDirection === 'asc' ? av - bv : bv - av\n }\n const as = String(av).toLowerCase()\n const bs = String(bv).toLowerCase()\n if (as < bs) return activeDirection === 'asc' ? -1 : 1\n if (as > bs) return activeDirection === 'asc' ? 1 : -1\n return 0\n })\n return copy\n }, [data, columns, activeKey, activeDirection])\n\n const handleSortClick = (key: string) => {\n let nextDirection: SortDirection\n if (activeKey !== key) {\n nextDirection = 'asc'\n } else if (activeDirection === 'asc') {\n nextDirection = 'desc'\n } else if (activeDirection === 'desc') {\n nextDirection = null\n } else {\n nextDirection = 'asc'\n }\n const nextKey = nextDirection === null ? null : key\n\n if (isControlled) {\n onSortChange?.(nextKey, nextDirection)\n } else {\n setInternalKey(nextKey)\n setInternalDirection(nextDirection)\n onSortChange?.(nextKey, nextDirection)\n }\n }\n\n return (\n <div className={cn('fractal-sortable-table', `fractal-sortable-table--${size}`, className)}>\n <div className=\"fractal-sortable-table-surface\">\n {header && <div className=\"fractal-sortable-table-header\">{header}</div>}\n\n {sorted.length === 0 ? (\n <div className=\"fractal-sortable-table-empty\">{emptyMessage || 'No data'}</div>\n ) : (\n <table className=\"fractal-sortable-table-table\">\n <thead>\n <tr className=\"fractal-sortable-table-thead-row\">\n {columns.map((col) => {\n const isActive = activeKey === col.key && activeDirection !== null\n if (!col.sortable) {\n return (\n <th\n key={col.key}\n className=\"fractal-sortable-table-th\"\n style={{ width: col.width }}\n >\n {col.header}\n </th>\n )\n }\n return (\n <th\n key={col.key}\n className=\"fractal-sortable-table-th fractal-sortable-table-th--sortable\"\n style={{ width: col.width }}\n >\n <button\n type=\"button\"\n className={cn(\n 'fractal-sortable-table-sort-button',\n isActive && 'fractal-sortable-table-sort-button--active',\n )}\n onClick={() => handleSortClick(col.key)}\n aria-sort={\n isActive\n ? activeDirection === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n }\n >\n <span>{col.header}</span>\n <span className=\"fractal-sortable-table-sort-icon\" aria-hidden=\"true\">\n {isActive && activeDirection === 'asc' ? (\n <ArrowUp size={14} />\n ) : isActive && activeDirection === 'desc' ? (\n <ArrowDown size={14} />\n ) : (\n <ArrowsUpDown size={14} />\n )}\n </span>\n </button>\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {sorted.map((row, rowIndex) => {\n const highlighted = highlightRow?.(row, rowIndex) ?? false\n return (\n <tr\n key={rowIndex}\n className={cn(\n 'fractal-sortable-table-row',\n highlighted && 'fractal-sortable-table-row--highlighted',\n onRowClick && 'fractal-sortable-table-row--interactive',\n )}\n onClick={onRowClick ? () => onRowClick(row, rowIndex) : undefined}\n onKeyDown={onRowClick ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n onRowClick(row, rowIndex)\n }\n } : undefined}\n role={onRowClick ? 'button' : undefined}\n tabIndex={onRowClick ? 0 : undefined}\n >\n {columns.map((col) => (\n <td\n key={col.key}\n className=\"fractal-sortable-table-td\"\n style={{ width: col.width, textAlign: col.align ?? 'left' }}\n >\n {col.render(row, rowIndex)}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n )}\n </div>\n </div>\n )\n}\n","import { useId, useRef, useState, type KeyboardEvent, type ReactNode } from 'react'\nimport { cn } from '../../utils/cn'\nimport './Tabs.css'\n\nexport interface TabItem {\n id: string\n label: ReactNode\n content: ReactNode\n disabled?: boolean\n}\n\nexport interface TabsProps {\n items: TabItem[]\n defaultValue?: string\n value?: string\n onValueChange?: (id: string) => void\n className?: string\n ariaLabel?: string\n}\n\nexport function Tabs({\n items,\n defaultValue,\n value: controlledValue,\n onValueChange,\n className,\n ariaLabel,\n}: TabsProps) {\n const reactId = useId()\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? items.find((i) => !i.disabled)?.id ?? items[0]?.id ?? '',\n )\n const isControlled = controlledValue !== undefined\n const activeId = isControlled ? controlledValue : internalValue\n\n const tabRefs = useRef<Record<string, HTMLButtonElement | null>>({})\n\n const selectTab = (id: string) => {\n if (isControlled) {\n onValueChange?.(id)\n } else {\n setInternalValue(id)\n onValueChange?.(id)\n }\n }\n\n const focusable = items.filter((i) => !i.disabled)\n\n const onKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n const currentIndex = focusable.findIndex((i) => i.id === activeId)\n if (currentIndex === -1) return\n let nextIndex = currentIndex\n switch (event.key) {\n case 'ArrowRight':\n nextIndex = (currentIndex + 1) % focusable.length\n break\n case 'ArrowLeft':\n nextIndex = (currentIndex - 1 + focusable.length) % focusable.length\n break\n case 'Home':\n nextIndex = 0\n break\n case 'End':\n nextIndex = focusable.length - 1\n break\n default:\n return\n }\n event.preventDefault()\n const nextId = focusable[nextIndex].id\n selectTab(nextId)\n requestAnimationFrame(() => tabRefs.current[nextId]?.focus())\n }\n\n return (\n <div className={cn('fractal-tabs', className)}>\n <div role=\"tablist\" aria-label={ariaLabel} className=\"fractal-tabs-list\">\n {items.map((item) => {\n const isActive = item.id === activeId\n const tabId = `${reactId}-tab-${item.id}`\n const panelId = `${reactId}-panel-${item.id}`\n return (\n <button\n key={item.id}\n ref={(el) => {\n tabRefs.current[item.id] = el\n }}\n id={tabId}\n role=\"tab\"\n type=\"button\"\n aria-selected={isActive}\n aria-controls={panelId}\n tabIndex={isActive ? 0 : -1}\n disabled={item.disabled}\n className={cn(\n 'fractal-tabs-trigger',\n isActive && 'fractal-tabs-trigger--active',\n item.disabled && 'fractal-tabs-trigger--disabled',\n )}\n onClick={() => !item.disabled && selectTab(item.id)}\n onKeyDown={onKeyDown}\n >\n {item.label}\n </button>\n )\n })}\n </div>\n {items.map((item) => {\n const tabId = `${reactId}-tab-${item.id}`\n const panelId = `${reactId}-panel-${item.id}`\n const isActive = item.id === activeId\n return (\n <div\n key={item.id}\n id={panelId}\n role=\"tabpanel\"\n aria-labelledby={tabId}\n hidden={!isActive}\n className=\"fractal-tabs-panel\"\n >\n {isActive && item.content}\n </div>\n )\n })}\n </div>\n )\n}\n","import { useId, useState, type ReactNode } from 'react'\nimport { ChevronRight, ChevronDown } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Disclosure.css'\n\nexport interface DisclosureProps {\n title: ReactNode\n meta?: ReactNode\n children: ReactNode\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n className?: string\n variant?: 'card' | 'plain'\n}\n\nexport function Disclosure({\n title,\n meta,\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n className,\n variant = 'card',\n}: DisclosureProps) {\n const reactId = useId()\n const headerId = `${reactId}-header`\n const panelId = `${reactId}-panel`\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const toggle = () => {\n const next = !isOpen\n if (isControlled) {\n onOpenChange?.(next)\n } else {\n setInternalOpen(next)\n onOpenChange?.(next)\n }\n }\n\n return (\n <div\n className={cn(\n 'fractal-disclosure',\n variant === 'card' && 'fractal-disclosure--card',\n isOpen && 'fractal-disclosure--open',\n className,\n )}\n >\n <button\n type=\"button\"\n id={headerId}\n className=\"fractal-disclosure-trigger\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n onClick={toggle}\n >\n <span className=\"fractal-disclosure-icon\" aria-hidden=\"true\">\n {isOpen ? <ChevronDown size={16} /> : <ChevronRight size={16} />}\n </span>\n <span className=\"fractal-disclosure-title\">{title}</span>\n {meta && <span className=\"fractal-disclosure-meta\">{meta}</span>}\n </button>\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={headerId}\n className=\"fractal-disclosure-panel\"\n hidden={!isOpen}\n >\n <div className=\"fractal-disclosure-panel-inner\">{children}</div>\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Sidebar.css'\n\nexport interface SidebarProps extends React.HTMLAttributes<HTMLElement> {\n /** Fixed sidebar width. Defaults to the standard application width. */\n width?: string\n}\n\nconst Sidebar = React.forwardRef<HTMLElement, SidebarProps>(\n ({ className, width, style, ...props }, ref) => (\n <aside\n ref={ref}\n className={cn('fractal-sidebar', className)}\n style={{ ...style, ...(width ? { '--fractal-sidebar-width': width } : {}) } as React.CSSProperties}\n {...props}\n />\n ),\n)\nSidebar.displayName = 'Sidebar'\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-sidebar__header', className)} {...props} />\n ),\n)\nSidebarHeader.displayName = 'SidebarHeader'\n\nconst SidebarBrand = React.forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className, type = 'button', ...props }, ref) => (\n <button ref={ref} type={type} className={cn('fractal-sidebar__brand', className)} {...props} />\n ),\n)\nSidebarBrand.displayName = 'SidebarBrand'\n\nconst SidebarNav = React.forwardRef<HTMLElement, React.HTMLAttributes<HTMLElement>>(\n ({ className, ...props }, ref) => (\n <nav ref={ref} className={cn('fractal-sidebar__nav', className)} {...props} />\n ),\n)\nSidebarNav.displayName = 'SidebarNav'\n\nconst SidebarSection = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-sidebar__section', className)} {...props} />\n ),\n)\nSidebarSection.displayName = 'SidebarSection'\n\nexport interface SidebarNavItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Marks the current destination. */\n active?: boolean\n /** Leading visual identifier. */\n icon?: React.ReactNode\n /** Optional right-aligned metadata or status. */\n endAdornment?: React.ReactNode\n}\n\nconst SidebarNavItem = React.forwardRef<HTMLButtonElement, SidebarNavItemProps>(\n ({ active = false, icon, endAdornment, className, type = 'button', children, ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n className={cn('fractal-sidebar__nav-item', className)}\n data-active={active || undefined}\n aria-current={active ? 'page' : undefined}\n {...props}\n >\n {icon && <span className=\"fractal-sidebar__nav-item-icon\" aria-hidden=\"true\">{icon}</span>}\n <span className=\"fractal-sidebar__nav-item-label\">{children}</span>\n {endAdornment && <span className=\"fractal-sidebar__nav-item-end\">{endAdornment}</span>}\n </button>\n ),\n)\nSidebarNavItem.displayName = 'SidebarNavItem'\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('fractal-sidebar__footer', className)} {...props} />\n ),\n)\nSidebarFooter.displayName = 'SidebarFooter'\n\nexport {\n Sidebar,\n SidebarHeader,\n SidebarBrand,\n SidebarNav,\n SidebarSection,\n SidebarNavItem,\n SidebarFooter,\n}\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { Close } from '@mirror-physics/fractal-icons'\nimport { useEscapeDismiss } from '../../hooks/useEscapeDismiss'\nimport { cn } from '../../utils/cn'\nimport './SidePanel.css'\n\nexport interface SidePanelProps {\n open: boolean\n onClose: () => void\n title: React.ReactNode\n description?: React.ReactNode\n children: React.ReactNode\n footer?: React.ReactNode\n /** Panel width: sm (420px), md (540px), or lg (680px). */\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nexport function SidePanel({ open, onClose, title, description, children, footer, size = 'md', className }: SidePanelProps) {\n useEscapeDismiss(80, onClose, open)\n\n if (!open) return null\n\n return createPortal(\n <div className=\"fractal-side-panel-overlay\" onMouseDown={onClose}>\n <aside\n className={cn('fractal-side-panel', `fractal-side-panel--${size}`, className)}\n aria-modal=\"true\"\n aria-label={typeof title === 'string' ? title : 'Side panel'}\n role=\"dialog\"\n onMouseDown={(event) => event.stopPropagation()}\n >\n <header className=\"fractal-side-panel__header\">\n <div className=\"fractal-side-panel__heading\">\n <h2 className=\"fractal-side-panel__title\">{title}</h2>\n {description && <p className=\"fractal-side-panel__description\">{description}</p>}\n </div>\n <button type=\"button\" className=\"fractal-side-panel__close\" aria-label=\"Close panel\" onClick={onClose}>\n <Close size={18} />\n </button>\n </header>\n <div className=\"fractal-side-panel__body\">{children}</div>\n {footer && <footer className=\"fractal-side-panel__footer\">{footer}</footer>}\n </aside>\n </div>,\n document.body,\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Textarea.css'\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => <textarea ref={ref} className={cn('fractal-textarea', className)} {...props} />,\n)\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }\n","import * as React from 'react'\nimport { Close, FileArrowUp } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './FileDropzone.css'\n\nexport interface FileDropzoneProps {\n files: File[]\n onFilesChange: (files: File[]) => void\n accept?: string\n multiple?: boolean\n disabled?: boolean\n title?: React.ReactNode\n description?: React.ReactNode\n className?: string\n}\n\nexport function FileDropzone({\n files,\n onFilesChange,\n accept,\n multiple = true,\n disabled = false,\n title = 'Drop files here or click to browse',\n description = 'Files stay attached to this record.',\n className,\n}: FileDropzoneProps) {\n const inputId = React.useId()\n const inputRef = React.useRef<HTMLInputElement>(null)\n const [isDragging, setIsDragging] = React.useState(false)\n\n const addFiles = (nextFiles: FileList | File[]) => {\n if (disabled) return\n const additions = Array.from(nextFiles)\n if (additions.length === 0) return\n onFilesChange(multiple ? [...files, ...additions] : additions.slice(0, 1))\n }\n\n return (\n <div className={cn('fractal-file-dropzone', className)}>\n <input\n ref={inputRef}\n id={inputId}\n className=\"fractal-file-dropzone__input\"\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={(event) => {\n if (event.target.files) addFiles(event.target.files)\n event.target.value = ''\n }}\n />\n <button\n className=\"fractal-file-dropzone__target\"\n data-dragging={isDragging || undefined}\n type=\"button\"\n disabled={disabled}\n onClick={() => inputRef.current?.click()}\n onDragEnter={(event) => {\n event.preventDefault()\n if (!disabled) setIsDragging(true)\n }}\n onDragOver={(event) => event.preventDefault()}\n onDragLeave={(event) => {\n event.preventDefault()\n setIsDragging(false)\n }}\n onDrop={(event) => {\n event.preventDefault()\n setIsDragging(false)\n addFiles(event.dataTransfer.files)\n }}\n >\n <FileArrowUp aria-hidden=\"true\" size={20} />\n <span className=\"fractal-file-dropzone__copy\">\n <span className=\"fractal-file-dropzone__title\">{title}</span>\n {description && <span className=\"fractal-file-dropzone__description\">{description}</span>}\n </span>\n </button>\n {files.length > 0 && (\n <ul className=\"fractal-file-dropzone__files\" aria-label=\"Attached files\">\n {files.map((file, index) => (\n <li className=\"fractal-file-dropzone__file\" key={`${file.name}-${file.size}-${index}`}>\n <span className=\"fractal-file-dropzone__file-name\">{file.name}</span>\n <span className=\"fractal-file-dropzone__file-meta\">{formatFileSize(file.size)}</span>\n <button\n className=\"fractal-file-dropzone__remove\"\n type=\"button\"\n aria-label={`Remove ${file.name}`}\n disabled={disabled}\n onClick={() => onFilesChange(files.filter((_, fileIndex) => fileIndex !== index))}\n >\n <Close aria-hidden=\"true\" size={14} />\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n}\n\nfunction formatFileSize(bytes: number) {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n"],"mappings":"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","names":["React","jsxs","React","jsx","jsxs","React","jsx","React","jsx","React","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsxs","React","Fragment","jsx","jsxs","React","jsx","React","jsx","useState","jsx","jsxs","useState","useRef","useState","jsx","jsxs","useState","useRef","nextId","useId","useState","ChevronDown","jsx","jsxs","useId","useState","ChevronDown","React","jsx","jsxs","createPortal","jsx","jsxs","createPortal","React","jsx","React","Close","jsx","jsxs","Close"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mirror-physics/fractal-ui",
3
- "version": "0.2.0-next.8",
3
+ "version": "0.2.0-next.9",
4
4
  "description": "Fractal UI — React components and CSS tokens for Mirror Physics products",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",