@mirror-physics/fractal-ui 0.2.0-next.74 → 0.2.0-next.76

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/CodeBlock/CodeBlock.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/components/Card/Card.tsx","../src/components/PromptCard/PromptCard.tsx","../src/components/Input/Input.tsx","../src/components/TableSearch/TableSearch.tsx","../src/components/NumberInput/NumberInput.tsx","../src/components/Slider/Slider.tsx","../src/components/PasswordInput/PasswordInput.tsx","../src/components/Label/Label.tsx","../src/components/Alert/Alert.tsx","../src/components/Toast/Toast.tsx","../src/components/Toggle/Toggle.tsx","../src/components/Modal/Modal.tsx","../src/hooks/useEscapeDismiss.ts","../src/components/UILoader/UILoader.tsx","../src/components/DataTable/DataTable.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Link/Link.tsx","../src/components/Chip/Chip.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/SortableTable/SortableTable.tsx","../src/components/Tabs/Tabs.tsx","../src/components/ContentSwitcher/ContentSwitcher.tsx","../src/components/Disclosure/Disclosure.tsx","../src/components/LatticeLoader/LatticeLoader.tsx","../src/components/Ghost/Ghost.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/SidePanel/SidePanel.tsx","../src/components/Textarea/Textarea.tsx","../src/components/TextButton/TextButton.tsx","../src/components/FileDropzone/FileDropzone.tsx","../src/components/Pagination/Pagination.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 { useEffect, useMemo, useRef, useState, type HTMLAttributes, type ReactNode } from 'react'\nimport CodeMirror from '@uiw/react-codemirror'\nimport { HighlightStyle, foldGutter, foldService, type LanguageSupport, syntaxHighlighting } from '@codemirror/language'\nimport { json } from '@codemirror/lang-json'\nimport {\n Decoration,\n EditorView,\n MatchDecorator,\n ViewPlugin,\n lineNumbers as lineNumberGutter,\n type DecorationSet,\n type ViewUpdate,\n} from '@codemirror/view'\nimport { tags } from '@lezer/highlight'\nimport { Check, Copy } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './CodeBlock.css'\n\nexport interface CodeBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'onChange'> {\n /** Code or structured text displayed by the component. */\n value: string\n /** Language name or common alias, such as `json`, `typescript`, `python`, or `bash`. */\n language?: string\n /** Optional file name. Used for display and language detection when `language` is omitted. */\n fileName?: string\n /** Optional title shown in the toolbar. */\n label?: ReactNode\n /** Enables editing. Read-only viewer mode is the default. */\n editable?: boolean\n /** Called when an editable block changes. */\n onChange?: (value: string) => void\n /** Shows line numbers and a fold gutter. */\n lineNumbers?: boolean\n /** Wraps long lines instead of requiring horizontal scrolling. */\n wrap?: boolean\n /** Shows a copy action in the toolbar. */\n copyable?: boolean\n /** Accessible name for the editing or viewing surface. */\n ariaLabel?: string\n /** CodeMirror height constraints. Any valid CSS length is accepted. */\n height?: string\n minHeight?: string\n maxHeight?: string\n placeholder?: string\n autoFocus?: boolean\n}\n\nconst codeTheme = EditorView.theme({\n '&': {\n backgroundColor: 'transparent',\n color: 'var(--fg-primary)',\n fontSize: '0.75rem',\n },\n '&.cm-focused': { outline: 'none' },\n '.cm-scroller': {\n fontFamily: 'var(--font-mono)',\n lineHeight: '1.55',\n overscrollBehavior: 'none',\n },\n '.cm-content': { padding: '10px 0' },\n '.cm-line': {\n padding: '0 12px 0 calc(12px + var(--fractal-code-wrap-indent, 0ch))',\n textIndent: 'calc(0px - var(--fractal-code-wrap-indent, 0ch))',\n },\n '.cm-cursor, .cm-dropCursor': { borderLeftColor: 'var(--fg-primary)' },\n '.cm-gutters': {\n backgroundColor: 'var(--bg-canvas)',\n borderRight: '1px solid var(--border-subtle)',\n color: 'var(--fg-tertiary)',\n },\n '.cm-lineNumbers .cm-gutterElement': { padding: '0 10px 0 4px' },\n '.cm-foldGutter': { width: '14px' },\n '.cm-foldGutter .cm-gutterElement': {\n position: 'relative',\n display: 'block',\n width: '14px',\n padding: '0',\n },\n '.cm-foldGutter .cm-gutterElement > span': {\n position: 'absolute',\n top: '2px',\n left: '0',\n display: 'inline-flex',\n width: '14px',\n height: '14px',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0',\n color: 'var(--fg-tertiary)',\n lineHeight: '14px',\n transition: 'color 120ms ease',\n },\n '.cm-foldGutter .cm-gutterElement > span[title=\"Fold line\"]': { transform: 'translateY(-3px)' },\n '.cm-foldGutter .cm-gutterElement > span:hover': { color: 'var(--fg-secondary)' },\n '.fractal-code-block__escape': { color: 'var(--fg-secondary)' },\n '.cm-activeLine, .cm-activeLineGutter': { backgroundColor: 'var(--bg-surface-1)' },\n '.cm-selectionBackground, &.cm-focused .cm-selectionBackground, ::selection': {\n backgroundColor: 'var(--accent-surface-stroke) !important',\n },\n '.cm-searchMatch': {\n backgroundColor: 'var(--warning-surface)',\n outline: '1px solid var(--warning-surface-stroke)',\n },\n '.cm-searchMatch.cm-searchMatch-selected': { backgroundColor: 'var(--warning-subtle)' },\n '.cm-panels': { backgroundColor: 'var(--bg-surface-1)', color: 'var(--fg-primary)' },\n '.cm-tooltip': {\n borderColor: 'var(--border-subtle)',\n backgroundColor: 'var(--bg-canvas)',\n color: 'var(--fg-primary)',\n },\n})\n\nconst fractalHighlightStyle = HighlightStyle.define([\n { tag: tags.comment, color: 'var(--fg-tertiary)', fontStyle: 'italic' },\n { tag: [tags.keyword, tags.controlKeyword, tags.operatorKeyword], color: 'var(--purple-default)' },\n { tag: [tags.string, tags.special(tags.string)], color: 'var(--purple-default)' },\n { tag: [tags.number, tags.bool, tags.null], color: 'var(--orange-default)' },\n { tag: [tags.function(tags.variableName), tags.labelName], color: 'var(--accent-default)' },\n { tag: [tags.typeName, tags.className, tags.namespace], color: 'var(--pink-default)' },\n { tag: [tags.propertyName, tags.attributeName], color: 'var(--success-default)' },\n { tag: [tags.operator, tags.punctuation], color: 'var(--fg-secondary)' },\n { tag: tags.bracket, color: 'var(--accent-default)' },\n { tag: [tags.heading, tags.strong], color: 'var(--fg-primary)', fontWeight: '600' },\n { tag: tags.emphasis, fontStyle: 'italic' },\n { tag: tags.link, color: 'var(--accent-default)', textDecoration: 'underline' },\n { tag: tags.invalid, color: 'var(--error-default)', textDecoration: 'underline wavy' },\n])\n\nconst jsonSupport = json()\nconst JSON_LANGUAGE_NAMES = new Set(['json', 'jsonl', 'ndjson', 'geojson'])\nconst JSON_LINES_LANGUAGE_NAMES = new Set(['jsonl', 'ndjson'])\nconst JSON_LINES_PRETTY_PRINT_THRESHOLD = 160\nconst JSON_PROPERTY_PREFIX = /^(\\s*\"(?:\\\\.|[^\"\\\\])*\"\\s*:\\s*)/\n\nfunction countVisualColumns(value: string) {\n let columns = 0\n for (const character of value) columns += character === '\\t' ? 2 : 1\n return columns\n}\n\nfunction getWrappedLineIndent(line: string) {\n const leadingWhitespace = line.match(/^\\s*/)?.[0] ?? ''\n if (JSON_PROPERTY_PREFIX.test(line)) return Math.min(countVisualColumns(leadingWhitespace), 24)\n return Math.min(countVisualColumns(leadingWhitespace) + 2, 12)\n}\n\nfunction buildWrappedLineIndentation(view: EditorView): DecorationSet {\n const decorations = []\n const decoratedLines = new Set<number>()\n\n for (const visibleRange of view.visibleRanges) {\n let position = visibleRange.from\n while (position <= visibleRange.to) {\n const line = view.state.doc.lineAt(position)\n if (!decoratedLines.has(line.from)) {\n const indent = getWrappedLineIndent(line.text)\n decorations.push(Decoration.line({\n attributes: { style: `--fractal-code-wrap-indent: ${indent}ch` },\n }).range(line.from))\n decoratedLines.add(line.from)\n }\n if (line.to >= visibleRange.to) break\n position = line.to + 1\n }\n }\n\n return Decoration.set(decorations, true)\n}\n\nconst wrappedLineIndentation = ViewPlugin.fromClass(class {\n decorations: DecorationSet\n\n constructor(view: EditorView) {\n this.decorations = buildWrappedLineIndentation(view)\n }\n\n update(update: ViewUpdate) {\n this.decorations = buildWrappedLineIndentation(update.view)\n }\n}, {\n decorations: (plugin) => plugin.decorations,\n})\n\nconst jsonEscapeMatcher = new MatchDecorator({\n regexp: /\\\\(?:[\"\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\n decoration: Decoration.mark({ class: 'fractal-code-block__escape' }),\n})\n\nconst jsonEscapeHighlighting = ViewPlugin.fromClass(class {\n decorations: DecorationSet\n\n constructor(view: EditorView) {\n this.decorations = jsonEscapeMatcher.createDeco(view)\n }\n\n update(update: ViewUpdate) {\n this.decorations = jsonEscapeMatcher.updateDeco(update, this.decorations)\n }\n}, {\n decorations: (plugin) => plugin.decorations,\n})\n\nfunction formatJsonLinesForDisplay(value: string) {\n return value.split(/\\r?\\n/).map((line) => {\n const firstContentIndex = line.search(/\\S/)\n if (firstContentIndex < 0 || line.length - firstContentIndex <= JSON_LINES_PRETTY_PRINT_THRESHOLD) return line\n\n const indentation = line.slice(0, firstContentIndex)\n try {\n const parsed: unknown = JSON.parse(line.slice(firstContentIndex))\n if (parsed === null || typeof parsed !== 'object') return line\n return JSON.stringify(parsed, null, 2)\n .split('\\n')\n .map((formattedLine) => `${indentation}${formattedLine}`)\n .join('\\n')\n } catch {\n return line\n }\n }).join('\\n')\n}\n\nfunction findJsonContainerEnd(document: string, start: number) {\n const openingCharacter = document[start]\n if (openingCharacter !== '{' && openingCharacter !== '[') return null\n\n const closingCharacters: string[] = []\n let isInsideString = false\n let isEscaped = false\n\n for (let index = start; index < document.length; index += 1) {\n const character = document[index]\n if (isInsideString) {\n if (isEscaped) {\n isEscaped = false\n } else if (character === '\\\\') {\n isEscaped = true\n } else if (character === '\"') {\n isInsideString = false\n }\n continue\n }\n\n if (character === '\"') {\n isInsideString = true\n } else if (character === '{') {\n closingCharacters.push('}')\n } else if (character === '[') {\n closingCharacters.push(']')\n } else if (character === '}' || character === ']') {\n if (closingCharacters.pop() !== character) return null\n if (closingCharacters.length === 0) return index\n }\n }\n\n return null\n}\n\nconst jsonLinesFoldSupport = foldService.of((state, lineStart, lineEnd) => {\n const line = state.doc.sliceString(lineStart, lineEnd)\n const firstContentIndex = line.search(/\\S/)\n if (firstContentIndex < 0) return null\n\n const containerStart = lineStart + firstContentIndex\n const openingCharacter = line[firstContentIndex]\n if (openingCharacter !== '{' && openingCharacter !== '[') return null\n\n const document = state.doc.toString()\n const containerEnd = findJsonContainerEnd(document, containerStart)\n if (containerEnd === null || containerEnd - containerStart < 2) return null\n\n try {\n const parsed: unknown = JSON.parse(document.slice(containerStart, containerEnd + 1))\n if (parsed === null || typeof parsed !== 'object') return null\n } catch {\n return null\n }\n\n return {\n from: containerStart + 1,\n to: containerEnd,\n }\n})\n\nfunction resolveLanguage(language?: string, fileName?: string): {\n label?: string\n support: LanguageSupport | null\n isJsonLines: boolean\n} {\n const normalized = language?.trim().toLowerCase()\n const extension = fileName?.split(/[?#]/, 1)[0].split('.').pop()?.toLowerCase()\n if ((normalized && JSON_LANGUAGE_NAMES.has(normalized)) || (extension && JSON_LANGUAGE_NAMES.has(extension))) {\n const isJsonLines = Boolean(\n (normalized && JSON_LINES_LANGUAGE_NAMES.has(normalized))\n || (extension && JSON_LINES_LANGUAGE_NAMES.has(extension)),\n )\n return { label: isJsonLines ? 'JSONL' : 'JSON', support: jsonSupport, isJsonLines }\n }\n if (normalized && !['text', 'txt', 'plaintext', 'plain'].includes(normalized)) {\n return { label: language?.trim(), support: null, isJsonLines: false }\n }\n return { support: null, isJsonLines: false }\n}\n\nexport function CodeBlock({\n value,\n language,\n fileName,\n label,\n editable = false,\n onChange,\n lineNumbers = true,\n wrap = true,\n copyable = true,\n ariaLabel,\n height,\n minHeight,\n maxHeight = '28rem',\n placeholder,\n autoFocus,\n className,\n ...props\n}: CodeBlockProps) {\n const resolvedLanguage = useMemo(() => resolveLanguage(language, fileName), [fileName, language])\n const displayValue = useMemo(\n () => !editable && resolvedLanguage.isJsonLines ? formatJsonLinesForDisplay(value) : value,\n [editable, resolvedLanguage.isJsonLines, value],\n )\n const [copyStatus, setCopyStatus] = useState<'idle' | 'copied' | 'error'>('idle')\n const copyResetTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => () => {\n if (copyResetTimer.current) clearTimeout(copyResetTimer.current)\n }, [])\n\n const extensions = useMemo(() => [\n codeTheme,\n syntaxHighlighting(fractalHighlightStyle),\n ...(resolvedLanguage.support ? [resolvedLanguage.support] : []),\n ...(resolvedLanguage.support ? [jsonEscapeHighlighting] : []),\n ...(resolvedLanguage.isJsonLines ? [jsonLinesFoldSupport] : []),\n ...(lineNumbers ? [foldGutter(), lineNumberGutter()] : []),\n ...(wrap ? [EditorView.lineWrapping, wrappedLineIndentation] : []),\n ], [lineNumbers, resolvedLanguage.isJsonLines, resolvedLanguage.support, wrap])\n\n const languageLabel = resolvedLanguage.label\n const toolbarLabel = label ?? fileName ?? languageLabel\n const surfaceLabel = ariaLabel\n ?? (fileName ? `${fileName} ${editable ? 'editor' : 'viewer'}` : `Code ${editable ? 'editor' : 'viewer'}`)\n\n const copyCode = async () => {\n try {\n await navigator.clipboard.writeText(value)\n setCopyStatus('copied')\n } catch {\n setCopyStatus('error')\n }\n if (copyResetTimer.current) clearTimeout(copyResetTimer.current)\n copyResetTimer.current = setTimeout(() => setCopyStatus('idle'), 1800)\n }\n\n const showToolbar = toolbarLabel !== undefined || copyable || editable\n\n return (\n <div\n className={cn(\n 'fractal-code-block',\n editable && 'fractal-code-block--editable',\n !lineNumbers && 'fractal-code-block--no-line-numbers',\n className,\n )}\n {...props}\n >\n {showToolbar && (\n <div className=\"fractal-code-block__toolbar\">\n <div className=\"fractal-code-block__identity\">\n {toolbarLabel !== undefined && (\n <span className=\"fractal-code-block__label\" title={typeof toolbarLabel === 'string' ? toolbarLabel : undefined}>\n {toolbarLabel}\n </span>\n )}\n {fileName && languageLabel && <span className=\"fractal-code-block__language\">{languageLabel}</span>}\n {editable && <span className=\"fractal-code-block__mode\">Editing</span>}\n </div>\n {copyable && (\n <button\n type=\"button\"\n className=\"fractal-code-block__copy\"\n aria-label={copyStatus === 'copied' ? 'Code copied' : 'Copy code'}\n onClick={() => void copyCode()}\n >\n {copyStatus === 'copied' ? <Check size={14} /> : <Copy size={14} />}\n <span>{copyStatus === 'copied' ? 'Copied' : copyStatus === 'error' ? 'Copy failed' : 'Copy'}</span>\n </button>\n )}\n </div>\n )}\n <div className=\"fractal-code-block__surface\">\n <CodeMirror\n aria-label={surfaceLabel}\n value={displayValue}\n editable={editable}\n readOnly={!editable}\n onChange={onChange}\n extensions={extensions}\n theme=\"none\"\n basicSetup={{\n lineNumbers: false,\n foldGutter: false,\n drawSelection: editable,\n highlightActiveLine: editable,\n highlightActiveLineGutter: editable,\n highlightSelectionMatches: editable,\n autocompletion: editable,\n history: editable,\n }}\n indentWithTab={editable}\n height={height}\n minHeight={minHeight}\n maxHeight={maxHeight}\n placeholder={placeholder}\n autoFocus={autoFocus}\n />\n </div>\n <span className=\"fractal-code-block__status\" aria-live=\"polite\">\n {copyStatus === 'copied' ? 'Code copied to clipboard.' : copyStatus === 'error' ? 'Code could not be copied.' : ''}\n </span>\n </div>\n )\n}\n","import * as React from 'react'\nimport { ChevronRight } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Breadcrumbs.css'\n\nexport interface BreadcrumbItem {\n label: React.ReactNode\n href?: string\n onClick?: React.MouseEventHandler<HTMLAnchorElement>\n}\n\nexport interface BreadcrumbsProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n items: BreadcrumbItem[]\n ariaLabel?: string\n separator?: React.ReactNode\n}\n\nexport function Breadcrumbs({\n items,\n ariaLabel = 'Breadcrumbs',\n separator = <ChevronRight aria-hidden=\"true\" size={14} />,\n className,\n ...props\n}: BreadcrumbsProps) {\n if (items.length === 0) return null\n\n return (\n <nav aria-label={ariaLabel} className={cn('fractal-breadcrumbs', className)} {...props}>\n <ol className=\"fractal-breadcrumbs__list\">\n {items.map((item, index) => {\n const isCurrent = index === items.length - 1\n const content = isCurrent ? (\n <span aria-current=\"page\" className=\"fractal-breadcrumbs__current\">{item.label}</span>\n ) : (\n <a className=\"fractal-breadcrumbs__link\" href={item.href ?? '#'} onClick={item.onClick}>\n {item.label}\n </a>\n )\n\n return (\n <li className=\"fractal-breadcrumbs__item\" key={index}>\n {index > 0 && <span aria-hidden=\"true\" className=\"fractal-breadcrumbs__separator\">{separator}</span>}\n {content}\n </li>\n )\n })}\n </ol>\n </nav>\n )\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 { MagnifyingGlass, MagnifyingGlassLines } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport { Input, type InputProps } from '../Input'\nimport './TableSearch.css'\n\nexport type TableSearchType = 'text' | 'glob'\n\nexport interface TableSearchProps extends Omit<InputProps, 'type'> {\n /** Controls the search affordance. Filtering remains controlled by the table's data owner. */\n searchType?: TableSearchType\n inputClassName?: string\n}\n\nexport const TableSearch = React.forwardRef<HTMLInputElement, TableSearchProps>(\n ({\n searchType = 'text',\n className,\n inputClassName,\n placeholder,\n title,\n ...props\n }, ref) => {\n const isGlob = searchType === 'glob'\n const SearchIcon = isGlob ? MagnifyingGlassLines : MagnifyingGlass\n\n return (\n <div\n className={cn('fractal-table-search', className)}\n data-search-type={searchType}\n >\n <SearchIcon className=\"fractal-table-search__icon\" size={17} aria-hidden=\"true\" />\n <Input\n {...props}\n ref={ref}\n type=\"search\"\n className={cn('fractal-table-search__input', inputClassName)}\n placeholder={placeholder ?? (isGlob ? 'Glob search — use *, ?, or [a-z]' : 'Search')}\n title={title ?? (isGlob ? 'Glob pattern: *, **, ?, [abc], [a-z], and [!abc]' : undefined)}\n />\n </div>\n )\n },\n)\nTableSearch.displayName = 'TableSearch'\n","import * as React from 'react'\nimport { Minus, Plus } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport { Input, type InputProps } from '../Input'\nimport './NumberInput.css'\n\nexport interface NumberInputProps extends Omit<InputProps, 'type'> {\n unit?: string\n}\n\nexport function NumberInput({\n unit,\n className,\n value,\n defaultValue,\n disabled,\n readOnly,\n min,\n max,\n ...props\n}: NumberInputProps) {\n const inputRef = React.useRef<HTMLInputElement>(null)\n const numericValue = Number(value ?? defaultValue)\n const characterCount = Math.max(String(value ?? defaultValue ?? '').length, 1)\n const controlLabel = typeof props['aria-label'] === 'string' ? props['aria-label'] : 'value'\n const decrementDisabled = disabled\n || readOnly\n || (Number.isFinite(numericValue) && min !== undefined && numericValue <= Number(min))\n const incrementDisabled = disabled\n || readOnly\n || (Number.isFinite(numericValue) && max !== undefined && numericValue >= Number(max))\n\n const changeByStep = (direction: -1 | 1) => {\n const input = inputRef.current\n if (!input) return\n if (direction === -1) input.stepDown()\n else input.stepUp()\n input.dispatchEvent(new Event('input', { bubbles: true }))\n input.focus()\n }\n\n return (\n <div className={cn('fractal-number-input', unit && 'fractal-number-input--with-unit', className)}>\n <Input\n ref={inputRef}\n type=\"number\"\n value={value}\n defaultValue={defaultValue}\n disabled={disabled}\n readOnly={readOnly}\n min={min}\n max={max}\n {...props}\n />\n {unit && (\n <span\n className=\"fractal-number-input-unit\"\n style={{ left: `calc(var(--space-3, 12px) + ${characterCount}ch)` }}\n aria-hidden=\"true\"\n >\n {unit}\n </span>\n )}\n <div className=\"fractal-number-input-controls\">\n <button\n type=\"button\"\n className=\"fractal-number-input-step\"\n aria-label={`Decrease ${controlLabel}`}\n disabled={decrementDisabled}\n onClick={() => changeByStep(-1)}\n >\n <Minus aria-hidden=\"true\" size={16} />\n </button>\n <button\n type=\"button\"\n className=\"fractal-number-input-step\"\n aria-label={`Increase ${controlLabel}`}\n disabled={incrementDisabled}\n onClick={() => changeByStep(1)}\n >\n <Plus aria-hidden=\"true\" size={16} />\n </button>\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Slider.css'\n\ntype SliderBaseProps = {\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n className?: string\n showValues?: boolean\n formatValue?: (value: number) => React.ReactNode\n}\n\nexport type SingleSliderProps = SliderBaseProps & {\n knobs?: 1\n value: number\n onValueChange: (value: number) => void\n ariaLabel?: string\n}\n\nexport type RangeSliderProps = SliderBaseProps & {\n knobs: 2\n value: [number, number]\n onValueChange: (value: [number, number]) => void\n lowerAriaLabel?: string\n upperAriaLabel?: string\n}\n\nexport type SliderProps = SingleSliderProps | RangeSliderProps\n\nexport function Slider(props: SliderProps) {\n const {\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n className,\n showValues = true,\n formatValue = (value) => value,\n knobs = 1,\n } = props\n const span = Math.max(max - min, 1)\n const rawValues = knobs === 2\n ? (props as RangeSliderProps).value\n : [(props as SingleSliderProps).value]\n const firstValue = clamp(rawValues[0], min, max)\n const secondValue = knobs === 2 ? clamp(rawValues[1], firstValue, max) : firstValue\n const selectionStart = knobs === 2 ? firstValue : min\n const selectionEnd = secondValue\n const selectionStartPercent = ((selectionStart - min) / span) * 100\n const selectionEndPercent = ((selectionEnd - min) / span) * 100\n\n const changeSingleValue = (value: number) => {\n ;(props as SingleSliderProps).onValueChange(clamp(value, min, max))\n }\n const changeRangeValue = (nextLower: number, nextUpper: number) => {\n ;(props as RangeSliderProps).onValueChange([\n clamp(nextLower, min, nextUpper),\n clamp(nextUpper, nextLower, max),\n ])\n }\n const getKeyboardValue = (event: React.KeyboardEvent<HTMLInputElement>, value: number) => {\n const pageStep = step * 10\n const adjustments: Record<string, number> = {\n ArrowDown: -step,\n ArrowLeft: -step,\n ArrowRight: step,\n ArrowUp: step,\n PageDown: -pageStep,\n PageUp: pageStep,\n }\n\n if (event.key === 'Home') return min\n if (event.key === 'End') return max\n if (!(event.key in adjustments)) return null\n return value + adjustments[event.key]\n }\n\n return (\n <div\n className={cn('fractal-slider', disabled && 'fractal-slider--disabled', className)}\n data-disabled={disabled || undefined}\n data-knobs={knobs}\n >\n {showValues && (\n <div className=\"fractal-slider-values\" aria-hidden=\"true\">\n <output>{formatValue(firstValue)}</output>\n {knobs === 2 && <output>{formatValue(secondValue)}</output>}\n </div>\n )}\n <div\n className=\"fractal-slider-control\"\n style={{\n '--fractal-slider-selection-start': `${selectionStartPercent}%`,\n '--fractal-slider-selection-end': `${selectionEndPercent}%`,\n } as React.CSSProperties}\n >\n <span className=\"fractal-slider-track\" aria-hidden=\"true\" />\n <span className=\"fractal-slider-selection\" aria-hidden=\"true\" />\n <input\n aria-label={knobs === 2\n ? (props as RangeSliderProps).lowerAriaLabel ?? 'Lower value'\n : (props as SingleSliderProps).ariaLabel ?? 'Slider value'}\n disabled={disabled}\n max={max}\n min={min}\n onChange={(event) => {\n const nextValue = event.currentTarget.valueAsNumber\n if (knobs === 2) changeRangeValue(Math.min(nextValue, secondValue), secondValue)\n else changeSingleValue(nextValue)\n }}\n onKeyDown={(event) => {\n const nextValue = getKeyboardValue(event, firstValue)\n if (nextValue === null) return\n event.preventDefault()\n if (knobs === 2) changeRangeValue(Math.min(nextValue, secondValue), secondValue)\n else changeSingleValue(nextValue)\n }}\n step={step}\n type=\"range\"\n value={firstValue}\n />\n {knobs === 2 && (\n <input\n aria-label={(props as RangeSliderProps).upperAriaLabel ?? 'Upper value'}\n disabled={disabled}\n max={max}\n min={min}\n onChange={(event) => {\n const nextValue = event.currentTarget.valueAsNumber\n changeRangeValue(firstValue, Math.max(nextValue, firstValue))\n }}\n onKeyDown={(event) => {\n const nextValue = getKeyboardValue(event, secondValue)\n if (nextValue === null) return\n event.preventDefault()\n changeRangeValue(firstValue, Math.max(nextValue, firstValue))\n }}\n step={step}\n type=\"range\"\n value={secondValue}\n />\n )}\n </div>\n </div>\n )\n}\n\nfunction clamp(value: number, minimum: number, maximum: number) {\n return Math.min(maximum, Math.max(minimum, value))\n}\n","import * as React from 'react'\nimport { Eye, EyeSlash } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport { Input, type InputProps } from '../Input'\nimport './PasswordInput.css'\n\nexport interface PasswordInputProps extends Omit<InputProps, 'type'> {\n showPasswordLabel?: string\n hidePasswordLabel?: string\n}\n\nconst PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n (\n {\n className,\n disabled,\n showPasswordLabel = 'Show password',\n hidePasswordLabel = 'Hide password',\n ...props\n },\n ref,\n ) => {\n const [passwordVisible, setPasswordVisible] = React.useState(false)\n const toggleLabel = passwordVisible ? hidePasswordLabel : showPasswordLabel\n\n return (\n <div\n className={cn('fractal-password-input', className)}\n data-password-visible={passwordVisible ? '' : undefined}\n >\n <Input\n {...props}\n ref={ref}\n className=\"fractal-password-input-field\"\n disabled={disabled}\n type={passwordVisible ? 'text' : 'password'}\n />\n <button\n type=\"button\"\n className=\"fractal-password-input-toggle\"\n aria-label={toggleLabel}\n aria-pressed={passwordVisible}\n disabled={disabled}\n title={toggleLabel}\n onClick={() => setPasswordVisible((visible) => !visible)}\n >\n {passwordVisible\n ? <EyeSlash aria-hidden=\"true\" size={18} />\n : <Eye aria-hidden=\"true\" size={18} />}\n </button>\n </div>\n )\n },\n)\nPasswordInput.displayName = 'PasswordInput'\n\nexport { PasswordInput }\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 { CircleCheck, CircleClose, CircleInfo, Warning } from '@mirror-physics/fractal-icons'\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 = {\n default: CircleInfo,\n info: CircleInfo,\n success: CircleCheck,\n warning: Warning,\n error: CircleClose,\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant = 'default', icon, children, ...props }, ref) => {\n const DefaultIcon = defaultIcons[variant]\n\n return (\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 ?? <DefaultIcon size={18} />}\n </span>\n <div className=\"fractal-alert-content\">{children}</div>\n </div>\n )\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 * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { CircleCheck, CircleClose, CircleInfo, Close, Warning } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Toast.css'\n\nexport type ToastVariant = 'default' | 'info' | 'success' | 'warning' | 'error'\nexport type ToastPosition = 'top-center' | 'top-right' | 'bottom-center'\n\nexport interface ToastProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Semantic tone. Error toasts announce assertively; all other tones announce politely. */\n variant?: ToastVariant\n /** Replaces the default semantic icon. */\n icon?: React.ReactNode\n /** Optional action control, such as an Undo or View button. */\n action?: React.ReactNode\n /** Called by the close control or after the auto-dismiss duration. */\n onDismiss: () => void\n /** Accessible label for the close control. */\n dismissLabel?: string\n /** Auto-dismiss delay in milliseconds. Pass null to keep the toast open. Defaults to 5 seconds, except errors, which persist. */\n duration?: number | null\n}\n\nexport interface ToastViewportProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Screen edge used for the toast stack. */\n position?: ToastPosition\n /** Render into document.body so the stack is not clipped by product layout. */\n portal?: boolean\n}\n\nconst defaultIcons = {\n default: CircleInfo,\n info: CircleInfo,\n success: CircleCheck,\n warning: Warning,\n error: CircleClose,\n}\n\nexport const Toast = React.forwardRef<HTMLDivElement, ToastProps>(function Toast(\n {\n action,\n children,\n className,\n dismissLabel = 'Dismiss notification',\n duration,\n icon,\n onBlurCapture,\n onDismiss,\n onFocusCapture,\n onPointerEnter,\n onPointerLeave,\n role,\n variant = 'default',\n ...props\n },\n ref,\n) {\n const [paused, setPaused] = React.useState(false)\n const dismissRef = React.useRef(onDismiss)\n const DefaultIcon = defaultIcons[variant]\n const resolvedDuration = duration === undefined\n ? (variant === 'error' ? null : 5000)\n : duration\n\n React.useEffect(() => {\n dismissRef.current = onDismiss\n }, [onDismiss])\n\n React.useEffect(() => {\n if (!dismissRef.current || paused || resolvedDuration === null || resolvedDuration <= 0) return\n const timeout = window.setTimeout(() => dismissRef.current?.(), resolvedDuration)\n return () => window.clearTimeout(timeout)\n }, [paused, resolvedDuration])\n\n const announcementRole = role ?? (variant === 'error' ? 'alert' : 'status')\n\n return (\n <div\n ref={ref}\n aria-atomic=\"true\"\n aria-live={announcementRole === 'alert' ? 'assertive' : 'polite'}\n className={cn('fractal-toast', `fractal-toast--${variant}`, className)}\n role={announcementRole}\n onBlurCapture={(event) => {\n onBlurCapture?.(event)\n if (!event.currentTarget.contains(event.relatedTarget)) setPaused(false)\n }}\n onFocusCapture={(event) => {\n onFocusCapture?.(event)\n setPaused(true)\n }}\n onPointerEnter={(event) => {\n onPointerEnter?.(event)\n setPaused(true)\n }}\n onPointerLeave={(event) => {\n onPointerLeave?.(event)\n setPaused(false)\n }}\n {...props}\n >\n <span aria-hidden=\"true\" className=\"fractal-toast__icon\">\n {icon ?? <DefaultIcon size={18} />}\n </span>\n <div className=\"fractal-toast__content\">{children}</div>\n {action && <div className=\"fractal-toast__action\">{action}</div>}\n <button\n aria-label={dismissLabel}\n className=\"fractal-toast__dismiss\"\n onClick={onDismiss}\n type=\"button\"\n >\n <Close aria-hidden=\"true\" size={14} />\n </button>\n </div>\n )\n})\n\nexport const ToastViewport = React.forwardRef<HTMLDivElement, ToastViewportProps>(function ToastViewport(\n { children, className, portal = true, position = 'top-center', ...props },\n ref,\n) {\n const viewport = (\n <div\n ref={ref}\n className={cn('fractal-toast-viewport', `fractal-toast-viewport--${position}`, className)}\n data-position={position}\n {...props}\n >\n {children}\n </div>\n )\n\n if (!portal || typeof document === 'undefined') return viewport\n return createPortal(viewport, document.body)\n})\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 { UILoader } from '../UILoader'\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 /** Keeps the close control visible but disables every dismissal route. */\n closeDisabled?: boolean\n /** Modal width: 'sm' (420px), 'md' (756px), 'lg' (near-fullscreen). */\n size?: 'sm' | 'md' | 'lg'\n /** Replaces the body with a whole-surface loading state while retaining the modal chrome. */\n loading?: boolean\n loadingLabel?: string\n /** Constrains the modal to the viewport, scrolls the body, and separates the fixed footer with a full-width divider. */\n scrollable?: boolean\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, closeDisabled = false, size = 'sm', loading = false, loadingLabel = 'Loading', scrollable = false, className }: ModalProps) {\n const [bodyScrolled, setBodyScrolled] = React.useState(false)\n useEscapeDismiss(80, onClose, open && !noClose && !closeDisabled)\n\n React.useEffect(() => {\n if (open) setBodyScrolled(false)\n }, [open])\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 || closeDisabled ? undefined : onClose}>\n <div\n className={cn('fractal-modal-panel', sizeClass, accentClass, scrollable && 'fractal-modal-panel--scrollable', className)}\n onClick={(e) => e.stopPropagation()}\n >\n <div\n className={cn(\n 'fractal-modal-title-row',\n scrollable && 'fractal-modal-title-row--scrollable',\n scrollable && bodyScrolled && 'fractal-modal-title-row--scrolled',\n )}\n >\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\" disabled={closeDisabled} className=\"fractal-modal-close\">\n <CloseIcon />\n </button>\n )}\n </div>\n <div\n aria-busy={loading || undefined}\n className={cn(\n 'fractal-modal-body',\n size === 'lg' && 'fractal-modal-body--lg',\n loading && 'fractal-modal-body--loading',\n scrollable && 'fractal-modal-body--scrollable',\n )}\n onScroll={scrollable ? (event) => setBodyScrolled(event.currentTarget.scrollTop > 0) : undefined}\n >\n {loading ? <UILoader label={loadingLabel} /> : children}\n </div>\n {footer && (\n <div className={cn('fractal-modal-footer', scrollable && 'fractal-modal-footer--divided')}>\n {footer}\n </div>\n )}\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 { useId, type CSSProperties } from 'react'\nimport { cn } from '../../utils/cn'\nimport './UILoader.css'\n\nexport type UILoaderTone = 'neutral' | 'blue' | 'green'\n\nexport interface UILoaderProps {\n /** Visual height. Width follows the mark's aspect ratio. */\n size?: number | string\n tone?: UILoaderTone\n className?: string\n style?: CSSProperties\n label?: string\n /** Use when another nearby element already announces loading. */\n ariaHidden?: boolean\n}\n\nconst LEFT = 'M0 53C0 51 1.6 49.5 3.6 49.5h16.5c1 0 1.9.4 2.5 1L42.1 69.6c.7.7 1.1 1.6 1.1 2.5v16.2c0 2-1.6 3.5-3.6 3.5H23.1c-1 0-1.9-.4-2.5-1L1.1 71.7C.4 71 0 70.1 0 69.2V53Z'\nconst CENTER = 'M0 3.5C0 1.6 1.6 0 3.6 0h16.5c1 0 1.9.4 2.5 1L92.5 69.6c.7.7 1 1.6 1 2.5v16.2c0 2-1.6 3.5-3.6 3.5H73.4c-1 0-1.9-.4-2.5-1L1.1 22.2C.4 21.6 0 20.7 0 19.7V3.5Z'\nconst RIGHT = 'M50.4 3.5C50.4 1.6 52 0 54 0h16.5c1 0 1.9.4 2.5 1l69.8 68.6c.7.7 1.1 1.6 1.1 2.5v16.2c0 2-1.6 3.5-3.6 3.5h-16.5c-1 0-1.9-.4-2.5-1L51.4 22.2c-.7-.6-1-1.5-1-2.5V3.5Z'\n\n/** A branded shine loader for whole UI surfaces, not component-level content. */\nexport function UILoader({ size = 48, tone = 'neutral', className, style, label = 'Loading', ariaHidden = false }: UILoaderProps) {\n const rawId = useId().replace(/[^a-zA-Z0-9_-]/g, '')\n const clipId = `fractal-ui-loader-clip-${rawId}`\n const gradientId = `fractal-ui-loader-gradient-${rawId}`\n const height = typeof size === 'number' ? `${size}px` : size\n\n return (\n <span\n aria-hidden={ariaHidden || undefined}\n aria-label={ariaHidden ? undefined : label}\n className={cn('fractal-ui-loader', `fractal-ui-loader--${tone}`, className)}\n role={ariaHidden ? undefined : 'status'}\n style={style}\n >\n <svg aria-hidden=\"true\" fill=\"none\" viewBox=\"0 0 144 92\" style={{ height, width: 'auto' }}>\n <defs>\n <linearGradient id={gradientId} x1=\"59\" x2=\"94.3\" y1=\"0\" y2=\"89.1\" gradientUnits=\"userSpaceOnUse\">\n <stop className=\"fractal-ui-loader__stop-start\" offset=\"0\" />\n <stop className=\"fractal-ui-loader__stop-end\" offset=\"1\" />\n </linearGradient>\n <linearGradient id={`${gradientId}-shine`} x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n <stop offset=\"0.4\" stopColor=\"white\" stopOpacity=\"0\" />\n <stop offset=\"0.5\" stopColor=\"white\" stopOpacity=\"0.62\" />\n <stop offset=\"0.6\" stopColor=\"white\" stopOpacity=\"0\" />\n </linearGradient>\n <clipPath id={clipId}><path d={LEFT} /><path d={CENTER} /><path d={RIGHT} /></clipPath>\n </defs>\n <path d={CENTER} fill={`url(#${gradientId})`} />\n <path d={RIGHT} fill={`url(#${gradientId})`} />\n <path d={LEFT} fill={`url(#${gradientId})`} />\n <g clipPath={`url(#${clipId})`}>\n <g className=\"fractal-ui-loader__shine-axis\" transform=\"translate(72 46) rotate(68.4)\">\n <rect className=\"fractal-ui-loader__shine\" x=\"-160\" y=\"-100\" width=\"320\" height=\"200\" fill={`url(#${gradientId}-shine)`} />\n </g>\n </g>\n </svg>\n </span>\n )\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, ChevronLeft, ChevronRight, 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' | 'left' | 'right'\n align?: 'left' | 'right'\n /** Arranges the trigger content vertically without rotating the dropdown panel. */\n triggerOrientation?: 'horizontal' | 'vertical'\n triggerContent?: React.ReactNode\n label?: React.ReactNode\n /** Renders the trigger as a square icon button. Requires an accessible triggerLabel. */\n iconOnly?: boolean\n noChevron?: boolean\n size?: 'sm' | 'md'\n triggerVariant?: 'outline' | 'tertiary'\n className?: string\n triggerClassName?: string\n panelClassName?: string\n closeOnSelect?: boolean\n disabled?: 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 triggerOrientation = 'horizontal',\n triggerContent,\n label,\n iconOnly = false,\n noChevron = false,\n size = 'md',\n triggerVariant = 'outline',\n className,\n triggerClassName,\n panelClassName,\n closeOnSelect = true,\n disabled = false,\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 isHorizontalDirection = direction === 'left' || direction === 'right'\n const ChevronIcon = direction === 'up'\n ? ChevronUp\n : direction === 'left'\n ? ChevronLeft\n : direction === 'right'\n ? ChevronRight\n : 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 let top: number | undefined\n let left: number | undefined\n let right: number | undefined\n\n if (isHorizontalDirection) {\n const spaceRight = vw - triggerRect.right - MARGIN\n const spaceLeft = triggerRect.left - MARGIN\n let placeRight = direction === 'right'\n if (placeRight && panelRect.width > spaceRight && spaceLeft > spaceRight) {\n placeRight = false\n } else if (!placeRight && panelRect.width > spaceLeft && spaceRight > spaceLeft) {\n placeRight = true\n }\n\n left = placeRight\n ? triggerRect.width + MARGIN\n : -(panelRect.width + MARGIN)\n top = 0\n const panelBottom = triggerRect.top + panelRect.height\n if (panelBottom > vh - MARGIN) top -= panelBottom - (vh - MARGIN)\n if (triggerRect.top + top < MARGIN) top += MARGIN - (triggerRect.top + top)\n } else {\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 top = placeAbove\n ? -(panelRect.height + MARGIN)\n : triggerRect.height + MARGIN\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\n setPanelStyle({ top, left, right })\n }, [open, direction, isHorizontalDirection, 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 disabled={disabled}\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 `fractal-dropdown-trigger--${triggerOrientation}`,\n iconOnly && 'fractal-dropdown-trigger--icon-only',\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 && !iconOnly && (\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 * as React from 'react'\nimport { Checkbox as CheckboxIcon, CheckboxChecked, Minus } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Checkbox.css'\n\nexport interface CheckboxProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n checked: boolean\n indeterminate?: boolean\n onCheckedChange: (checked: boolean) => void\n}\n\nexport function Checkbox({\n checked,\n indeterminate = false,\n onCheckedChange,\n className,\n disabled,\n onClick,\n onKeyDown,\n ...props\n}: CheckboxProps) {\n return (\n <button\n {...props}\n className={cn(\n 'fractal-checkbox',\n (checked || indeterminate) && 'fractal-checkbox--checked',\n indeterminate && 'fractal-checkbox--indeterminate',\n className,\n )}\n type=\"button\"\n role=\"checkbox\"\n aria-checked={indeterminate ? 'mixed' : checked}\n disabled={disabled}\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) onCheckedChange(indeterminate || !checked)\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event)\n if (event.key === ' ' || event.key === 'Enter') event.stopPropagation()\n }}\n >\n {indeterminate ? (\n <span className=\"fractal-checkbox__indeterminate-icon\" aria-hidden=\"true\">\n <CheckboxIcon size={18} />\n <Minus className=\"fractal-checkbox__indeterminate-mark\" size={12} />\n </span>\n ) : checked ? (\n <CheckboxChecked aria-hidden=\"true\" size={18} />\n ) : (\n <CheckboxIcon aria-hidden=\"true\" size={18} />\n )}\n </button>\n )\n}\n","import { useMemo, useState, type ReactNode } from 'react'\nimport { ArrowUp, ArrowDown, ArrowsUpDown } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport { Checkbox } from '../Checkbox'\nimport './SortableTable.css'\n\nexport type SortDirection = 'asc' | 'desc' | null\n\nexport interface SortableTableDefaultSort {\n key: string\n direction: Exclude<SortDirection, null>\n}\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 SortableTableRowAction<T> {\n label: (row: T, index: number) => string\n icon: (row: T, index: number) => ReactNode\n}\n\nexport interface SortableTableSelection<T> {\n /** Returns whether a row is selected. Selection is controlled by the consumer. */\n isSelected: (row: T) => boolean\n /** Called when an individual row changes selection. */\n onSelectedChange: (row: T, selected: boolean) => void\n /**\n * Handles the complete selectable row set in one update when the header\n * checkbox changes. Falls back to `onSelectedChange` for each row when omitted.\n */\n onSelectAllChange?: (rows: T[], selected: boolean) => void\n /** Accessible name for an individual row's checkbox. */\n getRowLabel: (row: T) => string\n /** Accessible name for the header checkbox. */\n selectAllLabel?: string\n}\n\nexport interface SortableTablePagination {\n page: number\n pageSize: number\n}\n\nexport interface SortableTableProps<T> {\n columns: SortableTableColumn<T>[]\n data: T[]\n /** Accessible name applied to the underlying table element. */\n 'aria-label'?: string\n emptyMessage?: string\n header?: ReactNode\n size?: 'sm' | 'md' | 'lg'\n /** Removes the table's outer border and radius for use inside another framed surface. */\n embedded?: boolean\n className?: string\n /** Required baseline row ordering that does not appear as an active user sort. */\n defaultSort: SortableTableDefaultSort\n /** Initial visible user sort state. */\n defaultSortKey?: string\n defaultSortDirection?: SortDirection\n sortKey?: string | null\n sortDirection?: SortDirection\n onSortChange?: (key: string | null, direction: SortDirection) => void\n /**\n * Slices the globally sorted dataset for display. Always pass the complete\n * filtered dataset in `data`; sorting is applied before pagination.\n */\n pagination?: SortableTablePagination\n highlightRow?: (row: T, index: number) => boolean\n /** Adds a leading checkbox column with controlled row selection. */\n selection?: SortableTableSelection<T>\n /** Disabled rows remain visible but cannot be selected or activated. */\n isRowDisabled?: (row: T) => boolean\n /** Disables only a row's selection control while preserving row activation. */\n isRowSelectionDisabled?: (row: T) => boolean\n /** Invoked when a row is selected. Enables pointer and keyboard row activation. */\n onRowClick?: (row: T, index: number) => void\n /** Invoked when a row is double-clicked. */\n onRowDoubleClick?: (row: T, index: number) => void\n /** Directional affordance displayed over the right edge of an interactive row. */\n rowAction?: SortableTableRowAction<T>\n}\n\nexport function SortableTable<T>({\n columns,\n data,\n 'aria-label': ariaLabel,\n emptyMessage,\n header,\n size = 'md',\n embedded = false,\n className,\n defaultSort,\n defaultSortKey = undefined,\n defaultSortDirection = null,\n sortKey: controlledKey,\n sortDirection: controlledDirection,\n onSortChange,\n pagination,\n highlightRow,\n selection,\n isRowDisabled,\n isRowSelectionDisabled,\n onRowClick,\n onRowDoubleClick,\n rowAction,\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 const baselineKey = defaultSort?.key ?? null\n const baselineDirection = defaultSort?.direction ?? null\n const effectiveKey = activeKey && activeDirection ? activeKey : baselineKey\n const effectiveDirection = activeKey && activeDirection ? activeDirection : baselineDirection\n\n const sorted = useMemo(() => {\n if (!effectiveKey || !effectiveDirection) return data\n const col = columns.find((c) => c.key === effectiveKey)\n if (!col) return data\n const accessor =\n col.sortAccessor ??\n ((row: T) => {\n const value = (row as Record<string, unknown>)[effectiveKey]\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 effectiveDirection === 'asc' ? av - bv : bv - av\n }\n const as = String(av).toLowerCase()\n const bs = String(bv).toLowerCase()\n if (as < bs) return effectiveDirection === 'asc' ? -1 : 1\n if (as > bs) return effectiveDirection === 'asc' ? 1 : -1\n return 0\n })\n return copy\n }, [data, columns, effectiveKey, effectiveDirection])\n\n const visibleRows = useMemo(() => {\n if (!pagination) return sorted\n\n const pageSize = Math.max(1, pagination.pageSize)\n const totalPages = Math.max(1, Math.ceil(sorted.length / pageSize))\n const page = Math.min(Math.max(1, pagination.page), totalPages)\n const startIndex = (page - 1) * pageSize\n return sorted.slice(startIndex, startIndex + pageSize)\n }, [pagination, sorted])\n\n const selectedRows = selection ? sorted.filter(selection.isSelected) : []\n const selectableRows = selection\n ? sorted.filter((row) => !isRowDisabled?.(row) && !isRowSelectionDisabled?.(row))\n : []\n const selectedRowCount = selection\n ? selectableRows.filter(selection.isSelected).length\n : 0\n const allRowsSelected = selectableRows.length > 0 && selectedRowCount === selectableRows.length\n const someRowsSelected = selectedRows.length > 0 && !allRowsSelected\n\n const handleSortClick = (key: string) => {\n let nextDirection: SortDirection\n if (!activeKey || !activeDirection) {\n nextDirection = baselineKey === key && baselineDirection ? baselineDirection : 'asc'\n } else if (activeKey !== key) {\n nextDirection = 'asc'\n } else if (baselineKey === key && baselineDirection) {\n nextDirection = activeDirection === baselineDirection\n ? baselineDirection === 'asc' ? 'desc' : 'asc'\n : null\n } else if (activeDirection === 'asc') {\n nextDirection = 'desc'\n } else {\n nextDirection = null\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}`, embedded && 'fractal-sortable-table--embedded', className)}>\n <div className=\"fractal-sortable-table-surface\">\n {header && <div className=\"fractal-sortable-table-header\">{header}</div>}\n\n {visibleRows.length === 0 ? (\n <div className=\"fractal-sortable-table-empty\">{emptyMessage || 'No data'}</div>\n ) : (\n <table aria-label={ariaLabel} className=\"fractal-sortable-table-table\">\n <thead>\n <tr className=\"fractal-sortable-table-thead-row\">\n {selection && (\n <th\n className=\"fractal-sortable-table-th fractal-sortable-table-selection-cell\"\n scope=\"col\"\n >\n <Checkbox\n aria-label={selection.selectAllLabel ?? 'Select all rows'}\n checked={allRowsSelected}\n disabled={selectableRows.length === 0 && selectedRows.length === 0}\n indeterminate={someRowsSelected}\n onCheckedChange={(checked) => {\n const rows = checked ? selectableRows : selectedRows\n if (selection.onSelectAllChange) {\n selection.onSelectAllChange(rows, checked)\n return\n }\n rows.forEach((row) => {\n if (selection.isSelected(row) !== checked) {\n selection.onSelectedChange(row, checked)\n }\n })\n }}\n />\n </th>\n )}\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 scope=\"col\"\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 scope=\"col\"\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 {visibleRows.map((row, rowIndex) => {\n const highlighted = highlightRow?.(row, rowIndex) ?? false\n const disabled = isRowDisabled?.(row) ?? false\n const selectionDisabled = disabled || (isRowSelectionDisabled?.(row) ?? false)\n const interactive = !disabled && Boolean(onRowClick || onRowDoubleClick)\n const action = !disabled && rowAction ? {\n label: rowAction.label(row, rowIndex),\n icon: rowAction.icon(row, rowIndex),\n } : null\n return (\n <tr\n key={rowIndex}\n className={cn(\n 'fractal-sortable-table-row',\n highlighted && 'fractal-sortable-table-row--highlighted',\n interactive && 'fractal-sortable-table-row--interactive',\n disabled && 'fractal-sortable-table-row--disabled',\n )}\n data-disabled={disabled || undefined}\n onClick={!disabled && onRowClick ? () => onRowClick(row, rowIndex) : undefined}\n onDoubleClick={!disabled && onRowDoubleClick ? () => onRowDoubleClick(row, rowIndex) : undefined}\n onKeyDown={interactive ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n const activateRow = onRowClick ?? onRowDoubleClick\n activateRow?.(row, rowIndex)\n }\n } : undefined}\n aria-label={action?.label}\n aria-disabled={disabled || undefined}\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? 0 : undefined}\n >\n {selection && (\n <td className=\"fractal-sortable-table-td fractal-sortable-table-selection-cell\">\n <Checkbox\n aria-label={selection.getRowLabel(row)}\n checked={!selectionDisabled && selection.isSelected(row)}\n disabled={selectionDisabled}\n onClick={(event) => event.stopPropagation()}\n onCheckedChange={(checked) => {\n if (!selectionDisabled) selection.onSelectedChange(row, checked)\n }}\n />\n </td>\n )}\n {columns.map((col, columnIndex) => (\n <td\n key={col.key}\n className={cn(\n 'fractal-sortable-table-td',\n action && columnIndex === columns.length - 1 && 'fractal-sortable-table-td--row-action',\n )}\n style={{ width: col.width, textAlign: col.align ?? 'left' }}\n >\n {col.render(row, rowIndex)}\n {action && columnIndex === columns.length - 1 && (\n <span className=\"fractal-sortable-table-row-action\" aria-hidden=\"true\">\n <span className=\"fractal-sortable-table-row-action__icon\">{action.icon}</span>\n </span>\n )}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n )}\n </div>\n </div>\n )\n}\n","import { useId, useLayoutEffect, useRef, useState, type CSSProperties, 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 type TabsVariant = 'line' | 'surface'\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 /** Extends a subtle divider across the entire tab list. */\n divider?: boolean\n /** Visual treatment. Surface tabs sit on a full-width secondary surface with the active tab connected to its panel. */\n variant?: TabsVariant\n}\n\nexport function Tabs({\n items,\n defaultValue,\n value: controlledValue,\n onValueChange,\n className,\n ariaLabel,\n divider = false,\n variant = 'line',\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 tabListRef = useRef<HTMLDivElement | null>(null)\n const tabRefs = useRef<Record<string, HTMLButtonElement | null>>({})\n const [indicator, setIndicator] = useState<{ offset: number; width: number } | null>(null)\n\n useLayoutEffect(() => {\n const updateIndicator = () => {\n const activeTab = tabRefs.current[activeId]\n if (!activeTab) return\n setIndicator({ offset: activeTab.offsetLeft, width: activeTab.offsetWidth })\n }\n\n updateIndicator()\n const list = tabListRef.current\n if (!list || typeof ResizeObserver === 'undefined') return\n const observer = new ResizeObserver(updateIndicator)\n observer.observe(list)\n return () => observer.disconnect()\n }, [activeId, items.length])\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 const indicatorStyle = indicator\n ? {\n '--fractal-tabs-indicator-offset': `${indicator.offset}px`,\n '--fractal-tabs-indicator-width': `${indicator.width}px`,\n } as CSSProperties\n : undefined\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', `fractal-tabs--${variant}`, divider && 'fractal-tabs--divider', className)}>\n <div\n ref={tabListRef}\n role=\"tablist\"\n aria-label={ariaLabel}\n className=\"fractal-tabs-list\"\n data-indicator-ready={indicator ? 'true' : undefined}\n style={indicatorStyle}\n >\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 * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './ContentSwitcher.css'\n\nexport interface ContentSwitcherItem {\n value: string\n label: React.ReactNode\n disabled?: boolean\n}\n\nexport interface ContentSwitcherProps {\n items: ContentSwitcherItem[]\n value: string\n onValueChange: (value: string) => void\n ariaLabel: string\n fullWidth?: boolean\n className?: string\n}\n\nexport function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = false, className }: ContentSwitcherProps) {\n const switcherRef = React.useRef<HTMLDivElement>(null)\n const buttonRefs = React.useRef<Array<HTMLButtonElement | null>>([])\n const indicatorMotionReadyRef = React.useRef(false)\n const activeIndex = items.findIndex((item) => item.value === value)\n\n React.useLayoutEffect(() => {\n const switcher = switcherRef.current\n const activeButton = buttonRefs.current[activeIndex]\n let motionFrame = 0\n\n if (!switcher || !activeButton) {\n switcher?.removeAttribute('data-indicator-ready')\n switcher?.removeAttribute('data-indicator-animate')\n indicatorMotionReadyRef.current = false\n return\n }\n\n const updateIndicator = () => {\n const switcherRect = switcher.getBoundingClientRect()\n const activeButtonRect = activeButton.getBoundingClientRect()\n\n switcher.style.setProperty('--fractal-content-switcher-indicator-x', `${activeButtonRect.left - switcherRect.left - switcher.clientLeft}px`)\n switcher.style.setProperty('--fractal-content-switcher-indicator-y', `${activeButtonRect.top - switcherRect.top - switcher.clientTop}px`)\n switcher.style.setProperty('--fractal-content-switcher-indicator-width', `${activeButtonRect.width}px`)\n switcher.style.setProperty('--fractal-content-switcher-indicator-height', `${activeButtonRect.height}px`)\n switcher.setAttribute('data-indicator-ready', 'true')\n\n if (!indicatorMotionReadyRef.current && motionFrame === 0) {\n motionFrame = window.requestAnimationFrame(() => {\n indicatorMotionReadyRef.current = true\n switcher.setAttribute('data-indicator-animate', 'true')\n motionFrame = 0\n })\n }\n }\n\n updateIndicator()\n\n if (typeof ResizeObserver === 'undefined') {\n return () => {\n if (motionFrame !== 0) window.cancelAnimationFrame(motionFrame)\n }\n }\n\n const resizeObserver = new ResizeObserver(updateIndicator)\n resizeObserver.observe(switcher)\n buttonRefs.current.forEach((button) => {\n if (button) resizeObserver.observe(button)\n })\n\n return () => {\n resizeObserver.disconnect()\n if (motionFrame !== 0) window.cancelAnimationFrame(motionFrame)\n }\n }, [activeIndex, items.length])\n\n const moveFocus = (index: number, direction: 1 | -1) => {\n let nextIndex = index\n do {\n nextIndex = (nextIndex + direction + items.length) % items.length\n } while (items[nextIndex]?.disabled && nextIndex !== index)\n\n if (!items[nextIndex]?.disabled) {\n buttonRefs.current[nextIndex]?.focus()\n onValueChange(items[nextIndex].value)\n }\n }\n\n return (\n <div\n className={cn('fractal-content-switcher', fullWidth && 'fractal-content-switcher--full-width', className)}\n role=\"group\"\n aria-label={ariaLabel}\n ref={switcherRef}\n >\n <span className=\"fractal-content-switcher__indicator\" aria-hidden />\n {items.map((item, index) => {\n const active = item.value === value\n return (\n <button\n className={cn('fractal-content-switcher__item', active && 'fractal-content-switcher__item--active')}\n key={item.value}\n type=\"button\"\n aria-pressed={active}\n disabled={item.disabled}\n onClick={() => onValueChange(item.value)}\n onKeyDown={(event) => {\n if (event.key === 'ArrowRight') {\n event.preventDefault()\n moveFocus(index, 1)\n }\n if (event.key === 'ArrowLeft') {\n event.preventDefault()\n moveFocus(index, -1)\n }\n }}\n ref={(element) => { buttonRefs.current[index] = element }}\n >\n {item.label}\n </button>\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 disabled?: boolean\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 disabled = false,\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 if (disabled) return\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 disabled && 'fractal-disclosure--disabled',\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 disabled={disabled}\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 type { CSSProperties, HTMLAttributes } from 'react'\nimport { cn } from '../../utils/cn'\nimport './LatticeLoader.css'\n\nconst LATTICE_COUNT = 160\nconst WAVE_PERIOD = 80\n\nexport interface LatticeLoaderProps extends HTMLAttributes<HTMLSpanElement> {\n label?: string\n}\n\nexport function LatticeLoader({ className, label = 'Loading', ...props }: LatticeLoaderProps) {\n return (\n <span\n aria-label={label}\n className={cn('fractal-lattice-loader', className)}\n role=\"progressbar\"\n {...props}\n >\n {Array.from({ length: LATTICE_COUNT }, (_, index) => (\n <span\n aria-hidden=\"true\"\n className=\"fractal-lattice-loader__cell\"\n key={index}\n style={{ '--fractal-lattice-index': index % WAVE_PERIOD } as CSSProperties}\n />\n ))}\n </span>\n )\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react'\nimport { cn } from '../../utils/cn'\nimport './Ghost.css'\n\ntype GhostLength = number | string\n\nexport interface GhostProps extends HTMLAttributes<HTMLDivElement> {\n /** Width of the placeholder. Numbers are interpreted as pixels. */\n width?: GhostLength\n /** Height of the placeholder. Numbers are interpreted as pixels. */\n height?: GhostLength\n /** Border radius override. */\n radius?: GhostLength\n}\n\nexport interface GhostLineProps extends Omit<GhostProps, 'height'> {\n /** Text-line size. */\n size?: 'sm' | 'md' | 'lg'\n}\n\nconst toCssLength = (value: GhostLength | undefined) => (\n typeof value === 'number' ? `${value}px` : value\n)\n\n/**\n * An intentionally content-free, shimmering placeholder. Use the composed\n * ghosts below for standard Fractal components; use this primitive for custom\n * product layouts.\n */\nexport function Ghost({ className, width, height, radius, style, ...props }: GhostProps) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn('fractal-ghost', className)}\n style={{\n width: toCssLength(width),\n height: toCssLength(height),\n borderRadius: toCssLength(radius),\n ...style,\n }}\n {...props}\n />\n )\n}\n\nexport function GhostLine({ className, size = 'md', width = '100%', ...props }: GhostLineProps) {\n return <Ghost className={cn('fractal-ghost-line', `fractal-ghost-line--${size}`, className)} width={width} {...props} />\n}\n\nexport interface ButtonGhostProps extends Omit<GhostProps, 'height'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n iconOnly?: boolean\n}\n\nexport function ButtonGhost({ className, size = 'md', iconOnly = false, width, ...props }: ButtonGhostProps) {\n return <Ghost className={cn('fractal-ghost-button', `fractal-ghost-button--${size}`, iconOnly && 'fractal-ghost-button--icon-only', className)} width={width} {...props} />\n}\n\nexport interface CardGhostProps extends HTMLAttributes<HTMLDivElement> {\n lines?: number\n showHeader?: boolean\n}\n\nexport function CardGhost({ className, lines = 3, showHeader = true, ...props }: CardGhostProps) {\n return (\n <div aria-hidden=\"true\" className={cn('fractal-ghost-card', className)} {...props}>\n {showHeader && <GhostLine width=\"38%\" />}\n <div className=\"fractal-ghost-stack\">\n {Array.from({ length: lines }, (_, index) => <GhostLine key={index} width={index === lines - 1 ? '62%' : '100%'} />)}\n </div>\n </div>\n )\n}\n\nexport interface DataTableGhostProps extends HTMLAttributes<HTMLDivElement> {\n /** Display placeholder cells for a header that is itself still loading. */\n showHeader?: boolean\n /** Static header labels to retain while only rows are loading. */\n headers?: ReactNode[]\n /** Number of column placeholders. */\n columns?: number\n /** Number of data row placeholders. */\n rows?: number\n /** Optional CSS widths mirroring the eventual table columns. */\n columnWidths?: string[]\n size?: 'sm' | 'md' | 'lg'\n}\n\nexport function DataTableGhost({\n className,\n showHeader = true,\n headers,\n columns = 4,\n rows = 5,\n columnWidths,\n size = 'md',\n ...props\n}: DataTableGhostProps) {\n const cells = Array.from({ length: columns }, (_, index) => index)\n return (\n <div aria-busy=\"true\" aria-label=\"Loading table\" className={cn('fractal-ghost-table', `fractal-ghost-table--${size}`, className)} role=\"status\" {...props}>\n <table className=\"fractal-ghost-table__table\">\n {(showHeader || headers) && (\n <thead>\n <tr className=\"fractal-ghost-table__head-row\">\n {cells.map((index) => (\n <th key={index} style={{ width: columnWidths?.[index] }}>\n {headers?.[index] ?? <GhostLine size=\"sm\" width={index === columns - 1 ? '62%' : '76%'} />}\n </th>\n ))}\n </tr>\n </thead>\n )}\n <tbody>\n {Array.from({ length: rows }, (_, rowIndex) => (\n <tr className=\"fractal-ghost-table__row\" key={rowIndex}>\n {cells.map((columnIndex) => (\n <td key={columnIndex} style={{ width: columnWidths?.[columnIndex] }}>\n <GhostLine width={`${[72, 54, 82, 63, 46][(rowIndex + columnIndex) % 5]}%`} />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nexport interface FormFieldGhostProps extends HTMLAttributes<HTMLDivElement> {\n labelWidth?: GhostLength\n multiline?: boolean\n}\n\nexport function InputGhost({ className, labelWidth = '26%', ...props }: FormFieldGhostProps) {\n return <FormFieldGhost className={className} labelWidth={labelWidth} {...props} />\n}\n\nexport function TextareaGhost({ className, labelWidth = '26%', ...props }: FormFieldGhostProps) {\n return <FormFieldGhost className={className} labelWidth={labelWidth} multiline {...props} />\n}\n\nexport function LabelGhost({ className, width = '26%', ...props }: Omit<GhostLineProps, 'size'>) {\n return <GhostLine className={cn('fractal-ghost-label', className)} size=\"sm\" width={width} {...props} />\n}\n\nfunction FormFieldGhost({ className, labelWidth = '26%', multiline = false, ...props }: FormFieldGhostProps) {\n return (\n <div aria-hidden=\"true\" className={cn('fractal-ghost-field', className)} {...props}>\n <LabelGhost width={labelWidth} />\n <Ghost className={cn('fractal-ghost-field__control', multiline && 'fractal-ghost-field__control--multiline')} />\n </div>\n )\n}\n\nexport function AlertGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-alert', className)} {...props}><GhostLine width=\"30%\" /><GhostLine size=\"sm\" width=\"78%\" /></div>\n}\n\nexport function CheckboxGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-choice', className)} {...props}><Ghost className=\"fractal-ghost-choice__control\" /><GhostLine width=\"42%\" /></div>\n}\n\nexport const ToggleGhost = CheckboxGhost\n\nexport function ChipGhost({ className, width = 74, ...props }: Omit<GhostProps, 'height'>) {\n return <Ghost className={cn('fractal-ghost-chip', className)} height={24} width={width} {...props} />\n}\n\nexport function LinkGhost({ className, width = 96, ...props }: Omit<GhostLineProps, 'size'>) {\n return <GhostLine className={cn('fractal-ghost-link', className)} size=\"sm\" width={width} {...props} />\n}\n\nexport const TextButtonGhost = LinkGhost\n\nexport function DropdownGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-dropdown', className)} {...props}><GhostLine width=\"38%\" /><Ghost className=\"fractal-ghost-dropdown__chevron\" /></div>\n}\n\nexport function ContentSwitcherGhost({ className, options = 3, ...props }: HTMLAttributes<HTMLDivElement> & { options?: number }) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-switcher', className)} {...props}>{Array.from({ length: options }, (_, index) => <Ghost key={index} />)}</div>\n}\n\nexport const TabsGhost = ContentSwitcherGhost\n\nexport function DisclosureGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-disclosure', className)} {...props}><Ghost className=\"fractal-ghost-disclosure__icon\" /><GhostLine width=\"42%\" /></div>\n}\n\nexport function PaginationGhost({ className, pages = 5, ...props }: HTMLAttributes<HTMLDivElement> & { pages?: number }) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-pagination', className)} {...props}>{Array.from({ length: pages }, (_, index) => <Ghost key={index} />)}</div>\n}\n\nexport function FileDropzoneGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-dropzone', className)} {...props}><Ghost className=\"fractal-ghost-dropzone__icon\" /><GhostLine width=\"26%\" /><GhostLine size=\"sm\" width=\"46%\" /></div>\n}\n\nexport function PromptCardGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <CardGhost className={cn('fractal-ghost-prompt-card', className)} lines={4} {...props} />\n}\n\nexport type ConversationGhostProps = HTMLAttributes<HTMLDivElement>\n\nexport function ConversationGhost({\n className,\n 'aria-label': ariaLabel = 'Loading conversation',\n ...props\n}: ConversationGhostProps) {\n return (\n <div\n aria-busy=\"true\"\n aria-label={ariaLabel}\n className={cn('fractal-ghost-conversation', className)}\n role=\"status\"\n {...props}\n >\n <div aria-hidden=\"true\" className=\"fractal-ghost-conversation__message fractal-ghost-conversation__message--user\">\n <div className=\"fractal-ghost-conversation__bubble\">\n <GhostLine width=\"100%\" />\n <GhostLine width=\"86%\" />\n <GhostLine width=\"64%\" />\n </div>\n </div>\n <div aria-hidden=\"true\" className=\"fractal-ghost-conversation__message fractal-ghost-conversation__message--assistant\">\n <GhostLine width=\"92%\" />\n <GhostLine width=\"78%\" />\n <GhostLine width=\"58%\" />\n </div>\n </div>\n )\n}\n\nexport function SortableTableGhost(props: DataTableGhostProps) {\n return <DataTableGhost {...props} />\n}\n\nexport interface SidebarGhostProps extends HTMLAttributes<HTMLDivElement> {\n items?: number\n}\n\nexport function SidebarGhost({ className, items = 6, ...props }: SidebarGhostProps) {\n return (\n <aside aria-hidden=\"true\" className={cn('fractal-ghost-sidebar', className)} {...props}>\n <Ghost className=\"fractal-ghost-sidebar__brand\" />\n <div className=\"fractal-ghost-sidebar__items\">\n {Array.from({ length: items }, (_, index) => <div className=\"fractal-ghost-sidebar__item\" key={index}><Ghost /><GhostLine width={`${[54, 68, 44, 61][index % 4]}%`} /></div>)}\n </div>\n </aside>\n )\n}\n\nexport interface SurfaceGhostProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: ReactNode\n lines?: number\n}\n\nexport function ModalGhost({ className, title, lines = 3, ...props }: SurfaceGhostProps) {\n return <SurfaceGhost className={cn('fractal-ghost-modal', className)} title={title} lines={lines} {...props} />\n}\n\nexport function SidePanelGhost({ className, title, lines = 5, ...props }: SurfaceGhostProps) {\n return <SurfaceGhost className={cn('fractal-ghost-side-panel', className)} title={title} lines={lines} {...props} />\n}\n\nfunction SurfaceGhost({ className, title, lines = 3, ...props }: SurfaceGhostProps) {\n return (\n <div aria-hidden=\"true\" className={cn('fractal-ghost-surface', className)} {...props}>\n <div className=\"fractal-ghost-surface__header\"><GhostLine width=\"42%\" /><Ghost className=\"fractal-ghost-surface__close\" /></div>\n {title && <div className=\"fractal-ghost-surface__title\">{title}</div>}\n <div className=\"fractal-ghost-stack\">{Array.from({ length: lines }, (_, index) => <GhostLine key={index} width={index === lines - 1 ? '64%' : '100%'} />)}</div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { Dropdown, type DropdownItem } from '../Dropdown'\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 /** Collapses the sidebar to an icon rail until it is hovered or receives focus. */\n compact?: boolean\n}\n\nconst Sidebar = React.forwardRef<HTMLElement, SidebarProps>(\n ({ className, width, compact = false, style, ...props }, ref) => (\n <aside\n ref={ref}\n className={cn('fractal-sidebar', className)}\n data-compact={compact || undefined}\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\nexport interface SidebarAccountMenuProps {\n /** Person or workspace label shown in the sidebar header. */\n name: string\n /** Available account actions. */\n items: DropdownItem[]\n /** Invoked when an account action is selected. */\n onSelect: (value: string) => void\n /** Accessible label for the account actions menu. */\n triggerLabel?: string\n /** Leading profile or workspace mark. */\n icon?: React.ReactNode\n className?: string\n}\n\nfunction SidebarAccountMenu({\n name,\n items,\n onSelect,\n triggerLabel = 'Account menu',\n icon,\n className,\n}: SidebarAccountMenuProps) {\n return (\n <Dropdown\n align=\"left\"\n className={cn('fractal-sidebar__account', className)}\n items={items}\n onSelect={onSelect}\n panelClassName=\"fractal-sidebar__account-panel\"\n selectedValue=\"\"\n triggerClassName=\"fractal-sidebar__account-trigger\"\n triggerContent={(\n <>\n {icon && <span className=\"fractal-sidebar__account-icon\" aria-hidden=\"true\">{icon}</span>}\n <span className=\"fractal-sidebar__account-name\">{name}</span>\n </>\n )}\n triggerLabel={triggerLabel}\n triggerVariant=\"tertiary\"\n />\n )\n}\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 SidebarAccountMenu,\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 { UILoader } from '../UILoader'\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), lg (680px), or xl (960px). */\n size?: 'sm' | 'md' | 'lg' | 'xl'\n /** Replaces the body with a whole-surface loading state while retaining the panel header. */\n loading?: boolean\n loadingLabel?: string\n className?: string\n}\n\nexport function SidePanel({ open, onClose, title, description, children, footer, size = 'md', loading = false, loadingLabel = 'Loading', 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 {typeof title === 'string'\n ? <h2 className=\"fractal-side-panel__title\">{title}</h2>\n : <div className=\"fractal-side-panel__title\">{title}</div>}\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 aria-busy={loading || undefined} className={cn('fractal-side-panel__body', loading && 'fractal-side-panel__body--loading')}>\n {loading ? <UILoader label={loadingLabel} /> : children}\n </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 { cn } from '../../utils/cn'\nimport './TextButton.css'\n\nexport type TextButtonSize = 'sm' | 'md'\nexport type TextButtonIconPosition = 'start' | 'end'\nexport type TextButtonTone = 'primary' | 'secondary'\n\nexport interface TextButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n iconPosition?: TextButtonIconPosition\n size?: TextButtonSize\n tone?: TextButtonTone\n}\n\nconst TextButton = React.forwardRef<HTMLButtonElement, TextButtonProps>(\n ({ className, icon, iconPosition = 'start', size = 'md', tone = 'primary', children, ...props }, ref) => (\n <button\n ref={ref}\n className={cn('fractal-text-button', `fractal-text-button--${size}`, `fractal-text-button--${tone}`, className)}\n type=\"button\"\n {...props}\n >\n {icon && iconPosition === 'start' && <span className=\"fractal-text-button__icon\" aria-hidden=\"true\">{icon}</span>}\n <span>{children}</span>\n {icon && iconPosition === 'end' && <span className=\"fractal-text-button__icon\" aria-hidden=\"true\">{icon}</span>}\n </button>\n ),\n)\nTextButton.displayName = 'TextButton'\n\nexport { TextButton }\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","import { ArrowLeft, ArrowRight } from '@mirror-physics/fractal-icons'\nimport { Dropdown } from '../Dropdown'\nimport { cn } from '../../utils/cn'\nimport './Pagination.css'\n\nexport interface PaginationProps {\n /** One-based active page. */\n page: number\n pageSize: number\n totalItems: number\n onPageChange: (page: number) => void\n /** Optional page sizes, rendered as an unframed selector in the pagination footer. */\n pageSizeOptions?: number[]\n onPageSizeChange?: (pageSize: number) => void\n ariaLabel?: string\n className?: string\n}\n\nexport function Pagination({\n page,\n pageSize,\n totalItems,\n onPageChange,\n pageSizeOptions,\n onPageSizeChange,\n ariaLabel = 'Pagination',\n className,\n}: PaginationProps) {\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize))\n const currentPage = Math.min(Math.max(page, 1), totalPages)\n const start = totalItems === 0 ? 0 : (currentPage - 1) * pageSize + 1\n const end = Math.min(currentPage * pageSize, totalItems)\n const canChangePageSize = pageSizeOptions != null && pageSizeOptions.length > 0 && onPageSizeChange != null\n\n return (\n <nav className={cn('fractal-pagination', className)} aria-label={ariaLabel}>\n <span className=\"fractal-pagination__summary\">\n {totalItems === 0 ? 'No results' : `${start}-${end} of ${totalItems}`}\n </span>\n <div className=\"fractal-pagination__controls\">\n {canChangePageSize && (\n <Dropdown\n align=\"right\"\n className=\"fractal-pagination__page-size\"\n direction=\"up\"\n items={pageSizeOptions.map((option) => ({\n value: String(option),\n description: `${option} per page`,\n }))}\n onSelect={(value) => onPageSizeChange(Number(value))}\n selectedValue={String(pageSize)}\n size=\"sm\"\n triggerLabel=\"Results per page\"\n triggerVariant=\"tertiary\"\n />\n )}\n <button\n className=\"fractal-pagination__button\"\n type=\"button\"\n aria-label=\"Previous page\"\n title=\"Previous page\"\n disabled={currentPage === 1 || totalItems === 0}\n onClick={() => onPageChange(currentPage - 1)}\n >\n <ArrowLeft aria-hidden=\"true\" size={16} />\n </button>\n <span className=\"fractal-pagination__page\" aria-current=\"page\">{currentPage} of {totalPages}</span>\n <button\n className=\"fractal-pagination__button\"\n type=\"button\"\n aria-label=\"Next page\"\n title=\"Next page\"\n disabled={currentPage === totalPages || totalItems === 0}\n onClick={() => onPageChange(currentPage + 1)}\n >\n <ArrowRight aria-hidden=\"true\" size={16} />\n </button>\n </div>\n </nav>\n )\n}\n"],"mappings":"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","names":["useState","jsxs","document","useState","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","React","jsx","jsxs","React","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","jsx","React","jsx","jsxs","React","CircleCheck","CircleClose","CircleInfo","Warning","jsx","jsxs","defaultIcons","CircleInfo","CircleCheck","Warning","CircleClose","Toast","ToastViewport","jsx","jsxs","React","createPortal","useEffect","useRef","jsx","jsxs","jsx","jsxs","createPortal","jsx","jsxs","React","ChevronRight","Fragment","jsx","jsxs","ChevronRight","React","jsx","React","jsx","Minus","jsx","jsxs","Minus","useMemo","useState","jsx","jsxs","useState","useMemo","useId","useLayoutEffect","useRef","useState","jsx","jsxs","useId","useState","useRef","useLayoutEffect","nextId","React","jsx","jsxs","useId","useState","ChevronRight","ChevronDown","jsx","jsxs","useId","useState","ChevronDown","ChevronRight","jsx","jsx","jsxs","React","Fragment","jsx","jsxs","createPortal","Close","jsx","jsxs","createPortal","Close","React","jsx","React","jsx","jsxs","React","Close","jsx","jsxs","Close","jsx","jsxs"]}
1
+ {"version":3,"sources":["../src/components/Button/Button.tsx","../src/utils/cn.ts","../src/components/CodeBlock/CodeBlock.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx","../src/components/Card/Card.tsx","../src/components/PromptCard/PromptCard.tsx","../src/components/Input/Input.tsx","../src/components/TableSearch/TableSearch.tsx","../src/components/NumberInput/NumberInput.tsx","../src/components/Slider/Slider.tsx","../src/components/PasswordInput/PasswordInput.tsx","../src/components/Label/Label.tsx","../src/components/Alert/Alert.tsx","../src/components/Toast/Toast.tsx","../src/components/Toggle/Toggle.tsx","../src/components/Modal/Modal.tsx","../src/hooks/useEscapeDismiss.ts","../src/components/UILoader/UILoader.tsx","../src/components/DataTable/DataTable.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Link/Link.tsx","../src/components/Chip/Chip.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.tsx","../src/components/SortableTable/SortableTable.tsx","../src/components/Tabs/Tabs.tsx","../src/components/ContentSwitcher/ContentSwitcher.tsx","../src/components/Disclosure/Disclosure.tsx","../src/components/LatticeLoader/LatticeLoader.tsx","../src/components/Ghost/Ghost.tsx","../src/components/Sidebar/Sidebar.tsx","../src/components/SidePanel/SidePanel.tsx","../src/components/Textarea/Textarea.tsx","../src/components/TextButton/TextButton.tsx","../src/components/FileDropzone/FileDropzone.tsx","../src/components/Pagination/Pagination.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport type { ControlSize } from '../../utils/control-size'\nimport '../../styles/control.css'\nimport './Button.css'\n\nexport type ButtonType = 'primary' | 'secondary' | 'ghost' | 'danger'\nexport type ButtonSize = ControlSize\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 /** Shared visual density; takes precedence over the buttonSize alias. */\n controlSize?: ControlSize\n /** Backward-compatible alias for controlSize. */\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\nfunction getButtonStyles(\n buttonType: ButtonType,\n isHovered: boolean,\n isActive: boolean,\n disabled: boolean,\n color: ButtonColor,\n hasIconOnly: boolean | undefined,\n): React.CSSProperties {\n const palette = colorPalette[color]\n\n const base: React.CSSProperties = {\n borderRadius: hasIconOnly ? 'var(--radius-lg, 8px)' : 'var(--radius-full, 9999px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'background-color 0.15s ease, border-color 0.15s ease, opacity 0.15s ease',\n }\n\n if (hasIconOnly) {\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: '1px solid transparent', 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: '1px solid transparent',\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: '1px solid transparent',\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: '1px solid transparent',\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', controlSize, 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, !!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 data-control-size={controlSize ?? buttonSize}\n data-icon-only={hasIconOnly || undefined}\n className={cn('fractal-control', '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 { useEffect, useMemo, useRef, useState, type HTMLAttributes, type ReactNode } from 'react'\nimport CodeMirror from '@uiw/react-codemirror'\nimport { HighlightStyle, foldGutter, foldService, type LanguageSupport, syntaxHighlighting } from '@codemirror/language'\nimport { json } from '@codemirror/lang-json'\nimport {\n Decoration,\n EditorView,\n MatchDecorator,\n ViewPlugin,\n lineNumbers as lineNumberGutter,\n type DecorationSet,\n type ViewUpdate,\n} from '@codemirror/view'\nimport { tags } from '@lezer/highlight'\nimport { Check, Copy } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './CodeBlock.css'\n\nexport interface CodeBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'onChange'> {\n /** Code or structured text displayed by the component. */\n value: string\n /** Language name or common alias, such as `json`, `typescript`, `python`, or `bash`. */\n language?: string\n /** Optional file name. Used for display and language detection when `language` is omitted. */\n fileName?: string\n /** Optional title shown in the toolbar. */\n label?: ReactNode\n /** Enables editing. Read-only viewer mode is the default. */\n editable?: boolean\n /** Called when an editable block changes. */\n onChange?: (value: string) => void\n /** Shows line numbers and a fold gutter. */\n lineNumbers?: boolean\n /** Wraps long lines instead of requiring horizontal scrolling. */\n wrap?: boolean\n /** Shows a copy action in the toolbar. */\n copyable?: boolean\n /** Accessible name for the editing or viewing surface. */\n ariaLabel?: string\n /** CodeMirror height constraints. Any valid CSS length is accepted. */\n height?: string\n minHeight?: string\n maxHeight?: string\n placeholder?: string\n autoFocus?: boolean\n}\n\nconst codeTheme = EditorView.theme({\n '&': {\n backgroundColor: 'transparent',\n color: 'var(--fg-primary)',\n fontSize: '0.75rem',\n },\n '&.cm-focused': { outline: 'none' },\n '.cm-scroller': {\n fontFamily: 'var(--font-mono)',\n lineHeight: '1.55',\n overscrollBehavior: 'none',\n },\n '.cm-content': { padding: '10px 0' },\n '.cm-line': {\n padding: '0 12px 0 calc(12px + var(--fractal-code-wrap-indent, 0ch))',\n textIndent: 'calc(0px - var(--fractal-code-wrap-indent, 0ch))',\n },\n '.cm-cursor, .cm-dropCursor': { borderLeftColor: 'var(--fg-primary)' },\n '.cm-gutters': {\n backgroundColor: 'var(--bg-canvas)',\n borderRight: '1px solid var(--border-subtle)',\n color: 'var(--fg-tertiary)',\n },\n '.cm-lineNumbers .cm-gutterElement': { padding: '0 10px 0 4px' },\n '.cm-foldGutter': { width: '14px' },\n '.cm-foldGutter .cm-gutterElement': {\n position: 'relative',\n display: 'block',\n width: '14px',\n padding: '0',\n },\n '.cm-foldGutter .cm-gutterElement > span': {\n position: 'absolute',\n top: '2px',\n left: '0',\n display: 'inline-flex',\n width: '14px',\n height: '14px',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '0',\n color: 'var(--fg-tertiary)',\n lineHeight: '14px',\n transition: 'color 120ms ease',\n },\n '.cm-foldGutter .cm-gutterElement > span[title=\"Fold line\"]': { transform: 'translateY(-3px)' },\n '.cm-foldGutter .cm-gutterElement > span:hover': { color: 'var(--fg-secondary)' },\n '.fractal-code-block__escape': { color: 'var(--fg-secondary)' },\n '.cm-activeLine, .cm-activeLineGutter': { backgroundColor: 'var(--bg-surface-1)' },\n '.cm-selectionBackground, &.cm-focused .cm-selectionBackground, ::selection': {\n backgroundColor: 'var(--accent-surface-stroke) !important',\n },\n '.cm-searchMatch': {\n backgroundColor: 'var(--warning-surface)',\n outline: '1px solid var(--warning-surface-stroke)',\n },\n '.cm-searchMatch.cm-searchMatch-selected': { backgroundColor: 'var(--warning-subtle)' },\n '.cm-panels': { backgroundColor: 'var(--bg-surface-1)', color: 'var(--fg-primary)' },\n '.cm-tooltip': {\n borderColor: 'var(--border-subtle)',\n backgroundColor: 'var(--bg-canvas)',\n color: 'var(--fg-primary)',\n },\n})\n\nconst fractalHighlightStyle = HighlightStyle.define([\n { tag: tags.comment, color: 'var(--fg-tertiary)', fontStyle: 'italic' },\n { tag: [tags.keyword, tags.controlKeyword, tags.operatorKeyword], color: 'var(--purple-default)' },\n { tag: [tags.string, tags.special(tags.string)], color: 'var(--purple-default)' },\n { tag: [tags.number, tags.bool, tags.null], color: 'var(--orange-default)' },\n { tag: [tags.function(tags.variableName), tags.labelName], color: 'var(--accent-default)' },\n { tag: [tags.typeName, tags.className, tags.namespace], color: 'var(--pink-default)' },\n { tag: [tags.propertyName, tags.attributeName], color: 'var(--success-default)' },\n { tag: [tags.operator, tags.punctuation], color: 'var(--fg-secondary)' },\n { tag: tags.bracket, color: 'var(--accent-default)' },\n { tag: [tags.heading, tags.strong], color: 'var(--fg-primary)', fontWeight: '600' },\n { tag: tags.emphasis, fontStyle: 'italic' },\n { tag: tags.link, color: 'var(--accent-default)', textDecoration: 'underline' },\n { tag: tags.invalid, color: 'var(--error-default)', textDecoration: 'underline wavy' },\n])\n\nconst jsonSupport = json()\nconst JSON_LANGUAGE_NAMES = new Set(['json', 'jsonl', 'ndjson', 'geojson'])\nconst JSON_LINES_LANGUAGE_NAMES = new Set(['jsonl', 'ndjson'])\nconst JSON_LINES_PRETTY_PRINT_THRESHOLD = 160\nconst JSON_PROPERTY_PREFIX = /^(\\s*\"(?:\\\\.|[^\"\\\\])*\"\\s*:\\s*)/\n\nfunction countVisualColumns(value: string) {\n let columns = 0\n for (const character of value) columns += character === '\\t' ? 2 : 1\n return columns\n}\n\nfunction getWrappedLineIndent(line: string) {\n const leadingWhitespace = line.match(/^\\s*/)?.[0] ?? ''\n if (JSON_PROPERTY_PREFIX.test(line)) return Math.min(countVisualColumns(leadingWhitespace), 24)\n return Math.min(countVisualColumns(leadingWhitespace) + 2, 12)\n}\n\nfunction buildWrappedLineIndentation(view: EditorView): DecorationSet {\n const decorations = []\n const decoratedLines = new Set<number>()\n\n for (const visibleRange of view.visibleRanges) {\n let position = visibleRange.from\n while (position <= visibleRange.to) {\n const line = view.state.doc.lineAt(position)\n if (!decoratedLines.has(line.from)) {\n const indent = getWrappedLineIndent(line.text)\n decorations.push(Decoration.line({\n attributes: { style: `--fractal-code-wrap-indent: ${indent}ch` },\n }).range(line.from))\n decoratedLines.add(line.from)\n }\n if (line.to >= visibleRange.to) break\n position = line.to + 1\n }\n }\n\n return Decoration.set(decorations, true)\n}\n\nconst wrappedLineIndentation = ViewPlugin.fromClass(class {\n decorations: DecorationSet\n\n constructor(view: EditorView) {\n this.decorations = buildWrappedLineIndentation(view)\n }\n\n update(update: ViewUpdate) {\n this.decorations = buildWrappedLineIndentation(update.view)\n }\n}, {\n decorations: (plugin) => plugin.decorations,\n})\n\nconst jsonEscapeMatcher = new MatchDecorator({\n regexp: /\\\\(?:[\"\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\n decoration: Decoration.mark({ class: 'fractal-code-block__escape' }),\n})\n\nconst jsonEscapeHighlighting = ViewPlugin.fromClass(class {\n decorations: DecorationSet\n\n constructor(view: EditorView) {\n this.decorations = jsonEscapeMatcher.createDeco(view)\n }\n\n update(update: ViewUpdate) {\n this.decorations = jsonEscapeMatcher.updateDeco(update, this.decorations)\n }\n}, {\n decorations: (plugin) => plugin.decorations,\n})\n\nfunction formatJsonLinesForDisplay(value: string) {\n return value.split(/\\r?\\n/).map((line) => {\n const firstContentIndex = line.search(/\\S/)\n if (firstContentIndex < 0 || line.length - firstContentIndex <= JSON_LINES_PRETTY_PRINT_THRESHOLD) return line\n\n const indentation = line.slice(0, firstContentIndex)\n try {\n const parsed: unknown = JSON.parse(line.slice(firstContentIndex))\n if (parsed === null || typeof parsed !== 'object') return line\n return JSON.stringify(parsed, null, 2)\n .split('\\n')\n .map((formattedLine) => `${indentation}${formattedLine}`)\n .join('\\n')\n } catch {\n return line\n }\n }).join('\\n')\n}\n\nfunction findJsonContainerEnd(document: string, start: number) {\n const openingCharacter = document[start]\n if (openingCharacter !== '{' && openingCharacter !== '[') return null\n\n const closingCharacters: string[] = []\n let isInsideString = false\n let isEscaped = false\n\n for (let index = start; index < document.length; index += 1) {\n const character = document[index]\n if (isInsideString) {\n if (isEscaped) {\n isEscaped = false\n } else if (character === '\\\\') {\n isEscaped = true\n } else if (character === '\"') {\n isInsideString = false\n }\n continue\n }\n\n if (character === '\"') {\n isInsideString = true\n } else if (character === '{') {\n closingCharacters.push('}')\n } else if (character === '[') {\n closingCharacters.push(']')\n } else if (character === '}' || character === ']') {\n if (closingCharacters.pop() !== character) return null\n if (closingCharacters.length === 0) return index\n }\n }\n\n return null\n}\n\nconst jsonLinesFoldSupport = foldService.of((state, lineStart, lineEnd) => {\n const line = state.doc.sliceString(lineStart, lineEnd)\n const firstContentIndex = line.search(/\\S/)\n if (firstContentIndex < 0) return null\n\n const containerStart = lineStart + firstContentIndex\n const openingCharacter = line[firstContentIndex]\n if (openingCharacter !== '{' && openingCharacter !== '[') return null\n\n const document = state.doc.toString()\n const containerEnd = findJsonContainerEnd(document, containerStart)\n if (containerEnd === null || containerEnd - containerStart < 2) return null\n\n try {\n const parsed: unknown = JSON.parse(document.slice(containerStart, containerEnd + 1))\n if (parsed === null || typeof parsed !== 'object') return null\n } catch {\n return null\n }\n\n return {\n from: containerStart + 1,\n to: containerEnd,\n }\n})\n\nfunction resolveLanguage(language?: string, fileName?: string): {\n label?: string\n support: LanguageSupport | null\n isJsonLines: boolean\n} {\n const normalized = language?.trim().toLowerCase()\n const extension = fileName?.split(/[?#]/, 1)[0].split('.').pop()?.toLowerCase()\n if ((normalized && JSON_LANGUAGE_NAMES.has(normalized)) || (extension && JSON_LANGUAGE_NAMES.has(extension))) {\n const isJsonLines = Boolean(\n (normalized && JSON_LINES_LANGUAGE_NAMES.has(normalized))\n || (extension && JSON_LINES_LANGUAGE_NAMES.has(extension)),\n )\n return { label: isJsonLines ? 'JSONL' : 'JSON', support: jsonSupport, isJsonLines }\n }\n if (normalized && !['text', 'txt', 'plaintext', 'plain'].includes(normalized)) {\n return { label: language?.trim(), support: null, isJsonLines: false }\n }\n return { support: null, isJsonLines: false }\n}\n\nexport function CodeBlock({\n value,\n language,\n fileName,\n label,\n editable = false,\n onChange,\n lineNumbers = true,\n wrap = true,\n copyable = true,\n ariaLabel,\n height,\n minHeight,\n maxHeight = '28rem',\n placeholder,\n autoFocus,\n className,\n ...props\n}: CodeBlockProps) {\n const resolvedLanguage = useMemo(() => resolveLanguage(language, fileName), [fileName, language])\n const displayValue = useMemo(\n () => !editable && resolvedLanguage.isJsonLines ? formatJsonLinesForDisplay(value) : value,\n [editable, resolvedLanguage.isJsonLines, value],\n )\n const [copyStatus, setCopyStatus] = useState<'idle' | 'copied' | 'error'>('idle')\n const copyResetTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => () => {\n if (copyResetTimer.current) clearTimeout(copyResetTimer.current)\n }, [])\n\n const extensions = useMemo(() => [\n codeTheme,\n syntaxHighlighting(fractalHighlightStyle),\n ...(resolvedLanguage.support ? [resolvedLanguage.support] : []),\n ...(resolvedLanguage.support ? [jsonEscapeHighlighting] : []),\n ...(resolvedLanguage.isJsonLines ? [jsonLinesFoldSupport] : []),\n ...(lineNumbers ? [foldGutter(), lineNumberGutter()] : []),\n ...(wrap ? [EditorView.lineWrapping, wrappedLineIndentation] : []),\n ], [lineNumbers, resolvedLanguage.isJsonLines, resolvedLanguage.support, wrap])\n\n const languageLabel = resolvedLanguage.label\n const toolbarLabel = label ?? fileName ?? languageLabel\n const surfaceLabel = ariaLabel\n ?? (fileName ? `${fileName} ${editable ? 'editor' : 'viewer'}` : `Code ${editable ? 'editor' : 'viewer'}`)\n\n const copyCode = async () => {\n try {\n await navigator.clipboard.writeText(value)\n setCopyStatus('copied')\n } catch {\n setCopyStatus('error')\n }\n if (copyResetTimer.current) clearTimeout(copyResetTimer.current)\n copyResetTimer.current = setTimeout(() => setCopyStatus('idle'), 1800)\n }\n\n const showToolbar = toolbarLabel !== undefined || copyable || editable\n\n return (\n <div\n className={cn(\n 'fractal-code-block',\n editable && 'fractal-code-block--editable',\n !lineNumbers && 'fractal-code-block--no-line-numbers',\n className,\n )}\n {...props}\n >\n {showToolbar && (\n <div className=\"fractal-code-block__toolbar\">\n <div className=\"fractal-code-block__identity\">\n {toolbarLabel !== undefined && (\n <span className=\"fractal-code-block__label\" title={typeof toolbarLabel === 'string' ? toolbarLabel : undefined}>\n {toolbarLabel}\n </span>\n )}\n {fileName && languageLabel && <span className=\"fractal-code-block__language\">{languageLabel}</span>}\n {editable && <span className=\"fractal-code-block__mode\">Editing</span>}\n </div>\n {copyable && (\n <button\n type=\"button\"\n className=\"fractal-code-block__copy\"\n aria-label={copyStatus === 'copied' ? 'Code copied' : 'Copy code'}\n onClick={() => void copyCode()}\n >\n {copyStatus === 'copied' ? <Check size={14} /> : <Copy size={14} />}\n <span>{copyStatus === 'copied' ? 'Copied' : copyStatus === 'error' ? 'Copy failed' : 'Copy'}</span>\n </button>\n )}\n </div>\n )}\n <div className=\"fractal-code-block__surface\">\n <CodeMirror\n aria-label={surfaceLabel}\n value={displayValue}\n editable={editable}\n readOnly={!editable}\n onChange={onChange}\n extensions={extensions}\n theme=\"none\"\n basicSetup={{\n lineNumbers: false,\n foldGutter: false,\n drawSelection: editable,\n highlightActiveLine: editable,\n highlightActiveLineGutter: editable,\n highlightSelectionMatches: editable,\n autocompletion: editable,\n history: editable,\n }}\n indentWithTab={editable}\n height={height}\n minHeight={minHeight}\n maxHeight={maxHeight}\n placeholder={placeholder}\n autoFocus={autoFocus}\n />\n </div>\n <span className=\"fractal-code-block__status\" aria-live=\"polite\">\n {copyStatus === 'copied' ? 'Code copied to clipboard.' : copyStatus === 'error' ? 'Code could not be copied.' : ''}\n </span>\n </div>\n )\n}\n","import * as React from 'react'\nimport { ChevronRight } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Breadcrumbs.css'\n\nexport interface BreadcrumbItem {\n label: React.ReactNode\n href?: string\n onClick?: React.MouseEventHandler<HTMLAnchorElement>\n}\n\nexport interface BreadcrumbsProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n items: BreadcrumbItem[]\n ariaLabel?: string\n separator?: React.ReactNode\n}\n\nexport function Breadcrumbs({\n items,\n ariaLabel = 'Breadcrumbs',\n separator = <ChevronRight aria-hidden=\"true\" size={14} />,\n className,\n ...props\n}: BreadcrumbsProps) {\n if (items.length === 0) return null\n\n return (\n <nav aria-label={ariaLabel} className={cn('fractal-breadcrumbs', className)} {...props}>\n <ol className=\"fractal-breadcrumbs__list\">\n {items.map((item, index) => {\n const isCurrent = index === items.length - 1\n const content = isCurrent ? (\n <span aria-current=\"page\" className=\"fractal-breadcrumbs__current\">{item.label}</span>\n ) : (\n <a className=\"fractal-breadcrumbs__link\" href={item.href ?? '#'} onClick={item.onClick}>\n {item.label}\n </a>\n )\n\n return (\n <li className=\"fractal-breadcrumbs__item\" key={index}>\n {index > 0 && <span aria-hidden=\"true\" className=\"fractal-breadcrumbs__separator\">{separator}</span>}\n {content}\n </li>\n )\n })}\n </ol>\n </nav>\n )\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} data-fractal-border-surface=\"surface-1\" 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 type { ControlSize } from '../../utils/control-size'\nimport '../../styles/control.css'\nimport './Input.css'\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n /** Visual density; native `size` still controls the character-width hint. */\n controlSize?: ControlSize\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, controlSize = 'md', ...props }, ref) => (\n <input\n type={type}\n ref={ref}\n data-control-size={controlSize}\n className={cn('fractal-control', 'fractal-input', className)}\n {...props}\n />\n )\n)\nInput.displayName = 'Input'\n\nexport { Input }\n","import * as React from 'react'\nimport { MagnifyingGlass, MagnifyingGlassLines } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport { Input, type InputProps } from '../Input'\nimport './TableSearch.css'\n\nexport type TableSearchType = 'text' | 'glob'\n\nexport interface TableSearchProps extends Omit<InputProps, 'type'> {\n /** Controls the search affordance. Filtering remains controlled by the table's data owner. */\n searchType?: TableSearchType\n inputClassName?: string\n}\n\nexport const TableSearch = React.forwardRef<HTMLInputElement, TableSearchProps>(\n ({\n searchType = 'text',\n controlSize = 'md',\n className,\n inputClassName,\n placeholder,\n title,\n ...props\n }, ref) => {\n const isGlob = searchType === 'glob'\n const SearchIcon = isGlob ? MagnifyingGlassLines : MagnifyingGlass\n\n return (\n <div\n className={cn('fractal-table-search', className)}\n data-search-type={searchType}\n data-control-size={controlSize}\n >\n <SearchIcon className=\"fractal-table-search__icon\" size={17} aria-hidden=\"true\" />\n <Input\n {...props}\n controlSize={controlSize}\n ref={ref}\n type=\"search\"\n className={cn('fractal-table-search__input', inputClassName)}\n placeholder={placeholder ?? (isGlob ? 'Glob search — use *, ?, or [a-z]' : 'Search')}\n title={title ?? (isGlob ? 'Glob pattern: *, **, ?, [abc], [a-z], and [!abc]' : undefined)}\n />\n </div>\n )\n },\n)\nTableSearch.displayName = 'TableSearch'\n","import * as React from 'react'\nimport { Minus, Plus } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport { Input, type InputProps } from '../Input'\nimport './NumberInput.css'\n\nexport interface NumberInputProps extends Omit<InputProps, 'type'> {\n unit?: string\n}\n\nexport function NumberInput({\n unit,\n controlSize = 'md',\n className,\n value,\n defaultValue,\n disabled,\n readOnly,\n min,\n max,\n ...props\n}: NumberInputProps) {\n const inputRef = React.useRef<HTMLInputElement>(null)\n const numericValue = Number(value ?? defaultValue)\n const characterCount = Math.max(String(value ?? defaultValue ?? '').length, 1)\n const controlLabel = typeof props['aria-label'] === 'string' ? props['aria-label'] : 'value'\n const decrementDisabled = disabled\n || readOnly\n || (Number.isFinite(numericValue) && min !== undefined && numericValue <= Number(min))\n const incrementDisabled = disabled\n || readOnly\n || (Number.isFinite(numericValue) && max !== undefined && numericValue >= Number(max))\n\n const changeByStep = (direction: -1 | 1) => {\n const input = inputRef.current\n if (!input) return\n if (direction === -1) input.stepDown()\n else input.stepUp()\n input.dispatchEvent(new Event('input', { bubbles: true }))\n input.focus()\n }\n\n return (\n <div data-control-size={controlSize} className={cn('fractal-number-input', unit && 'fractal-number-input--with-unit', className)}>\n <Input\n ref={inputRef}\n controlSize={controlSize}\n type=\"number\"\n value={value}\n defaultValue={defaultValue}\n disabled={disabled}\n readOnly={readOnly}\n min={min}\n max={max}\n {...props}\n />\n {unit && (\n <span\n className=\"fractal-number-input-unit\"\n style={{ left: `calc(var(--control-padding-inline) + ${characterCount}ch)` }}\n aria-hidden=\"true\"\n >\n {unit}\n </span>\n )}\n <div className=\"fractal-number-input-controls\">\n <button\n type=\"button\"\n className=\"fractal-number-input-step\"\n aria-label={`Decrease ${controlLabel}`}\n disabled={decrementDisabled}\n onClick={() => changeByStep(-1)}\n >\n <Minus aria-hidden=\"true\" size={16} />\n </button>\n <button\n type=\"button\"\n className=\"fractal-number-input-step\"\n aria-label={`Increase ${controlLabel}`}\n disabled={incrementDisabled}\n onClick={() => changeByStep(1)}\n >\n <Plus aria-hidden=\"true\" size={16} />\n </button>\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Slider.css'\n\ntype SliderBaseProps = {\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n className?: string\n showValues?: boolean\n formatValue?: (value: number) => React.ReactNode\n}\n\nexport type SingleSliderProps = SliderBaseProps & {\n knobs?: 1\n value: number\n onValueChange: (value: number) => void\n ariaLabel?: string\n}\n\nexport type RangeSliderProps = SliderBaseProps & {\n knobs: 2\n value: [number, number]\n onValueChange: (value: [number, number]) => void\n lowerAriaLabel?: string\n upperAriaLabel?: string\n}\n\nexport type SliderProps = SingleSliderProps | RangeSliderProps\n\nexport function Slider(props: SliderProps) {\n const {\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n className,\n showValues = true,\n formatValue = (value) => value,\n knobs = 1,\n } = props\n const span = Math.max(max - min, 1)\n const rawValues = knobs === 2\n ? (props as RangeSliderProps).value\n : [(props as SingleSliderProps).value]\n const firstValue = clamp(rawValues[0], min, max)\n const secondValue = knobs === 2 ? clamp(rawValues[1], firstValue, max) : firstValue\n const selectionStart = knobs === 2 ? firstValue : min\n const selectionEnd = secondValue\n const selectionStartPercent = ((selectionStart - min) / span) * 100\n const selectionEndPercent = ((selectionEnd - min) / span) * 100\n\n const changeSingleValue = (value: number) => {\n ;(props as SingleSliderProps).onValueChange(clamp(value, min, max))\n }\n const changeRangeValue = (nextLower: number, nextUpper: number) => {\n ;(props as RangeSliderProps).onValueChange([\n clamp(nextLower, min, nextUpper),\n clamp(nextUpper, nextLower, max),\n ])\n }\n const getKeyboardValue = (event: React.KeyboardEvent<HTMLInputElement>, value: number) => {\n const pageStep = step * 10\n const adjustments: Record<string, number> = {\n ArrowDown: -step,\n ArrowLeft: -step,\n ArrowRight: step,\n ArrowUp: step,\n PageDown: -pageStep,\n PageUp: pageStep,\n }\n\n if (event.key === 'Home') return min\n if (event.key === 'End') return max\n if (!(event.key in adjustments)) return null\n return value + adjustments[event.key]\n }\n\n return (\n <div\n className={cn('fractal-slider', disabled && 'fractal-slider--disabled', className)}\n data-disabled={disabled || undefined}\n data-knobs={knobs}\n >\n {showValues && (\n <div className=\"fractal-slider-values\" aria-hidden=\"true\">\n <output>{formatValue(firstValue)}</output>\n {knobs === 2 && <output>{formatValue(secondValue)}</output>}\n </div>\n )}\n <div\n className=\"fractal-slider-control\"\n style={{\n '--fractal-slider-selection-start': `${selectionStartPercent}%`,\n '--fractal-slider-selection-end': `${selectionEndPercent}%`,\n } as React.CSSProperties}\n >\n <span className=\"fractal-slider-track\" aria-hidden=\"true\" />\n <span className=\"fractal-slider-selection\" aria-hidden=\"true\" />\n <input\n aria-label={knobs === 2\n ? (props as RangeSliderProps).lowerAriaLabel ?? 'Lower value'\n : (props as SingleSliderProps).ariaLabel ?? 'Slider value'}\n disabled={disabled}\n max={max}\n min={min}\n onChange={(event) => {\n const nextValue = event.currentTarget.valueAsNumber\n if (knobs === 2) changeRangeValue(Math.min(nextValue, secondValue), secondValue)\n else changeSingleValue(nextValue)\n }}\n onKeyDown={(event) => {\n const nextValue = getKeyboardValue(event, firstValue)\n if (nextValue === null) return\n event.preventDefault()\n if (knobs === 2) changeRangeValue(Math.min(nextValue, secondValue), secondValue)\n else changeSingleValue(nextValue)\n }}\n step={step}\n type=\"range\"\n value={firstValue}\n />\n {knobs === 2 && (\n <input\n aria-label={(props as RangeSliderProps).upperAriaLabel ?? 'Upper value'}\n disabled={disabled}\n max={max}\n min={min}\n onChange={(event) => {\n const nextValue = event.currentTarget.valueAsNumber\n changeRangeValue(firstValue, Math.max(nextValue, firstValue))\n }}\n onKeyDown={(event) => {\n const nextValue = getKeyboardValue(event, secondValue)\n if (nextValue === null) return\n event.preventDefault()\n changeRangeValue(firstValue, Math.max(nextValue, firstValue))\n }}\n step={step}\n type=\"range\"\n value={secondValue}\n />\n )}\n </div>\n </div>\n )\n}\n\nfunction clamp(value: number, minimum: number, maximum: number) {\n return Math.min(maximum, Math.max(minimum, value))\n}\n","import * as React from 'react'\nimport { Eye, EyeSlash } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport { Input, type InputProps } from '../Input'\nimport './PasswordInput.css'\n\nexport interface PasswordInputProps extends Omit<InputProps, 'type'> {\n showPasswordLabel?: string\n hidePasswordLabel?: string\n}\n\nconst PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n (\n {\n className,\n controlSize = 'md',\n disabled,\n showPasswordLabel = 'Show password',\n hidePasswordLabel = 'Hide password',\n ...props\n },\n ref,\n ) => {\n const [passwordVisible, setPasswordVisible] = React.useState(false)\n const toggleLabel = passwordVisible ? hidePasswordLabel : showPasswordLabel\n\n return (\n <div\n className={cn('fractal-password-input', className)}\n data-control-size={controlSize}\n data-password-visible={passwordVisible ? '' : undefined}\n >\n <Input\n {...props}\n controlSize={controlSize}\n ref={ref}\n className=\"fractal-password-input-field\"\n disabled={disabled}\n type={passwordVisible ? 'text' : 'password'}\n />\n <button\n type=\"button\"\n className=\"fractal-password-input-toggle\"\n aria-label={toggleLabel}\n aria-pressed={passwordVisible}\n disabled={disabled}\n title={toggleLabel}\n onClick={() => setPasswordVisible((visible) => !visible)}\n >\n {passwordVisible\n ? <EyeSlash aria-hidden=\"true\" size={18} />\n : <Eye aria-hidden=\"true\" size={18} />}\n </button>\n </div>\n )\n },\n)\nPasswordInput.displayName = 'PasswordInput'\n\nexport { PasswordInput }\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport type { ControlSize } from '../../utils/control-size'\nimport '../../styles/control.css'\nimport './Label.css'\n\nexport interface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n controlSize?: ControlSize\n}\n\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, controlSize = 'md', ...props }, ref) => (\n <label\n ref={ref}\n data-control-size={controlSize}\n className={cn('fractal-label', className)}\n {...props}\n />\n )\n)\nLabel.displayName = 'Label'\n\nexport { Label }\n","import * as React from 'react'\nimport { CircleCheck, CircleClose, CircleInfo, Warning } from '@mirror-physics/fractal-icons'\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 = {\n default: CircleInfo,\n info: CircleInfo,\n success: CircleCheck,\n warning: Warning,\n error: CircleClose,\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n ({ className, variant = 'default', icon, children, ...props }, ref) => {\n const DefaultIcon = defaultIcons[variant]\n\n return (\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 ?? <DefaultIcon size={18} />}\n </span>\n <div className=\"fractal-alert-content\">{children}</div>\n </div>\n )\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 * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { CircleCheck, CircleClose, CircleInfo, Close, Warning } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Toast.css'\n\nexport type ToastVariant = 'default' | 'info' | 'success' | 'warning' | 'error'\nexport type ToastPosition = 'top-center' | 'top-right' | 'bottom-center'\n\nexport interface ToastProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Semantic tone. Error toasts announce assertively; all other tones announce politely. */\n variant?: ToastVariant\n /** Replaces the default semantic icon. */\n icon?: React.ReactNode\n /** Optional action control, such as an Undo or View button. */\n action?: React.ReactNode\n /** Called by the close control or after the auto-dismiss duration. */\n onDismiss: () => void\n /** Accessible label for the close control. */\n dismissLabel?: string\n /** Auto-dismiss delay in milliseconds. Pass null to keep the toast open. Defaults to 5 seconds, except errors, which persist. */\n duration?: number | null\n}\n\nexport interface ToastViewportProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Screen edge used for the toast stack. */\n position?: ToastPosition\n /** Render into document.body so the stack is not clipped by product layout. */\n portal?: boolean\n}\n\nconst defaultIcons = {\n default: CircleInfo,\n info: CircleInfo,\n success: CircleCheck,\n warning: Warning,\n error: CircleClose,\n}\n\nexport const Toast = React.forwardRef<HTMLDivElement, ToastProps>(function Toast(\n {\n action,\n children,\n className,\n dismissLabel = 'Dismiss notification',\n duration,\n icon,\n onBlurCapture,\n onDismiss,\n onFocusCapture,\n onPointerEnter,\n onPointerLeave,\n role,\n variant = 'default',\n ...props\n },\n ref,\n) {\n const [paused, setPaused] = React.useState(false)\n const dismissRef = React.useRef(onDismiss)\n const DefaultIcon = defaultIcons[variant]\n const resolvedDuration = duration === undefined\n ? (variant === 'error' ? null : 5000)\n : duration\n\n React.useEffect(() => {\n dismissRef.current = onDismiss\n }, [onDismiss])\n\n React.useEffect(() => {\n if (!dismissRef.current || paused || resolvedDuration === null || resolvedDuration <= 0) return\n const timeout = window.setTimeout(() => dismissRef.current?.(), resolvedDuration)\n return () => window.clearTimeout(timeout)\n }, [paused, resolvedDuration])\n\n const announcementRole = role ?? (variant === 'error' ? 'alert' : 'status')\n\n return (\n <div\n ref={ref}\n aria-atomic=\"true\"\n aria-live={announcementRole === 'alert' ? 'assertive' : 'polite'}\n className={cn('fractal-toast', `fractal-toast--${variant}`, className)}\n role={announcementRole}\n onBlurCapture={(event) => {\n onBlurCapture?.(event)\n if (!event.currentTarget.contains(event.relatedTarget)) setPaused(false)\n }}\n onFocusCapture={(event) => {\n onFocusCapture?.(event)\n setPaused(true)\n }}\n onPointerEnter={(event) => {\n onPointerEnter?.(event)\n setPaused(true)\n }}\n onPointerLeave={(event) => {\n onPointerLeave?.(event)\n setPaused(false)\n }}\n {...props}\n >\n <span aria-hidden=\"true\" className=\"fractal-toast__icon\">\n {icon ?? <DefaultIcon size={18} />}\n </span>\n <div className=\"fractal-toast__content\">{children}</div>\n {action && <div className=\"fractal-toast__action\">{action}</div>}\n <button\n aria-label={dismissLabel}\n className=\"fractal-toast__dismiss\"\n onClick={onDismiss}\n type=\"button\"\n >\n <Close aria-hidden=\"true\" size={14} />\n </button>\n </div>\n )\n})\n\nexport const ToastViewport = React.forwardRef<HTMLDivElement, ToastViewportProps>(function ToastViewport(\n { children, className, portal = true, position = 'top-center', ...props },\n ref,\n) {\n const viewport = (\n <div\n ref={ref}\n className={cn('fractal-toast-viewport', `fractal-toast-viewport--${position}`, className)}\n data-position={position}\n {...props}\n >\n {children}\n </div>\n )\n\n if (!portal || typeof document === 'undefined') return viewport\n return createPortal(viewport, document.body)\n})\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 { UILoader } from '../UILoader'\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 /** Keeps the close control visible but disables every dismissal route. */\n closeDisabled?: boolean\n /** Modal width: 'sm' (420px), 'md' (756px), 'lg' (near-fullscreen). */\n size?: 'sm' | 'md' | 'lg'\n /** Replaces the body with a whole-surface loading state while retaining the modal chrome. */\n loading?: boolean\n loadingLabel?: string\n /** Constrains the modal to the viewport, scrolls the body, and separates the fixed footer with a full-width divider. */\n scrollable?: boolean\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, closeDisabled = false, size = 'sm', loading = false, loadingLabel = 'Loading', scrollable = false, className }: ModalProps) {\n const [bodyScrolled, setBodyScrolled] = React.useState(false)\n useEscapeDismiss(80, onClose, open && !noClose && !closeDisabled)\n\n React.useEffect(() => {\n if (open) setBodyScrolled(false)\n }, [open])\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 || closeDisabled ? undefined : onClose}>\n <div\n className={cn('fractal-modal-panel', sizeClass, accentClass, scrollable && 'fractal-modal-panel--scrollable', className)}\n onClick={(e) => e.stopPropagation()}\n >\n <div\n className={cn(\n 'fractal-modal-title-row',\n scrollable && 'fractal-modal-title-row--scrollable',\n scrollable && bodyScrolled && 'fractal-modal-title-row--scrolled',\n )}\n >\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\" disabled={closeDisabled} className=\"fractal-modal-close\">\n <CloseIcon />\n </button>\n )}\n </div>\n <div\n aria-busy={loading || undefined}\n className={cn(\n 'fractal-modal-body',\n size === 'lg' && 'fractal-modal-body--lg',\n loading && 'fractal-modal-body--loading',\n scrollable && 'fractal-modal-body--scrollable',\n )}\n onScroll={scrollable ? (event) => setBodyScrolled(event.currentTarget.scrollTop > 0) : undefined}\n >\n {loading ? <UILoader label={loadingLabel} /> : children}\n </div>\n {footer && (\n <div className={cn('fractal-modal-footer', scrollable && 'fractal-modal-footer--divided')}>\n {footer}\n </div>\n )}\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 { useId, type CSSProperties } from 'react'\nimport { cn } from '../../utils/cn'\nimport './UILoader.css'\n\nexport type UILoaderTone = 'neutral' | 'blue' | 'green'\n\nexport interface UILoaderProps {\n /** Visual height. Width follows the mark's aspect ratio. */\n size?: number | string\n tone?: UILoaderTone\n className?: string\n style?: CSSProperties\n label?: string\n /** Use when another nearby element already announces loading. */\n ariaHidden?: boolean\n}\n\nconst LEFT = 'M0 53C0 51 1.6 49.5 3.6 49.5h16.5c1 0 1.9.4 2.5 1L42.1 69.6c.7.7 1.1 1.6 1.1 2.5v16.2c0 2-1.6 3.5-3.6 3.5H23.1c-1 0-1.9-.4-2.5-1L1.1 71.7C.4 71 0 70.1 0 69.2V53Z'\nconst CENTER = 'M0 3.5C0 1.6 1.6 0 3.6 0h16.5c1 0 1.9.4 2.5 1L92.5 69.6c.7.7 1 1.6 1 2.5v16.2c0 2-1.6 3.5-3.6 3.5H73.4c-1 0-1.9-.4-2.5-1L1.1 22.2C.4 21.6 0 20.7 0 19.7V3.5Z'\nconst RIGHT = 'M50.4 3.5C50.4 1.6 52 0 54 0h16.5c1 0 1.9.4 2.5 1l69.8 68.6c.7.7 1.1 1.6 1.1 2.5v16.2c0 2-1.6 3.5-3.6 3.5h-16.5c-1 0-1.9-.4-2.5-1L51.4 22.2c-.7-.6-1-1.5-1-2.5V3.5Z'\n\n/** A branded shine loader for whole UI surfaces, not component-level content. */\nexport function UILoader({ size = 48, tone = 'neutral', className, style, label = 'Loading', ariaHidden = false }: UILoaderProps) {\n const rawId = useId().replace(/[^a-zA-Z0-9_-]/g, '')\n const clipId = `fractal-ui-loader-clip-${rawId}`\n const gradientId = `fractal-ui-loader-gradient-${rawId}`\n const height = typeof size === 'number' ? `${size}px` : size\n\n return (\n <span\n aria-hidden={ariaHidden || undefined}\n aria-label={ariaHidden ? undefined : label}\n className={cn('fractal-ui-loader', `fractal-ui-loader--${tone}`, className)}\n role={ariaHidden ? undefined : 'status'}\n style={style}\n >\n <svg aria-hidden=\"true\" fill=\"none\" viewBox=\"0 0 144 92\" style={{ height, width: 'auto' }}>\n <defs>\n <linearGradient id={gradientId} x1=\"59\" x2=\"94.3\" y1=\"0\" y2=\"89.1\" gradientUnits=\"userSpaceOnUse\">\n <stop className=\"fractal-ui-loader__stop-start\" offset=\"0\" />\n <stop className=\"fractal-ui-loader__stop-end\" offset=\"1\" />\n </linearGradient>\n <linearGradient id={`${gradientId}-shine`} x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n <stop offset=\"0.4\" stopColor=\"white\" stopOpacity=\"0\" />\n <stop offset=\"0.5\" stopColor=\"white\" stopOpacity=\"0.62\" />\n <stop offset=\"0.6\" stopColor=\"white\" stopOpacity=\"0\" />\n </linearGradient>\n <clipPath id={clipId}><path d={LEFT} /><path d={CENTER} /><path d={RIGHT} /></clipPath>\n </defs>\n <path d={CENTER} fill={`url(#${gradientId})`} />\n <path d={RIGHT} fill={`url(#${gradientId})`} />\n <path d={LEFT} fill={`url(#${gradientId})`} />\n <g clipPath={`url(#${clipId})`}>\n <g className=\"fractal-ui-loader__shine-axis\" transform=\"translate(72 46) rotate(68.4)\">\n <rect className=\"fractal-ui-loader__shine\" x=\"-160\" y=\"-100\" width=\"320\" height=\"200\" fill={`url(#${gradientId}-shine)`} />\n </g>\n </g>\n </svg>\n </span>\n )\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, ChevronLeft, ChevronRight, ChevronUp } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport type { ControlSize } from '../../utils/control-size'\nimport '../../styles/control.css'\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' | 'left' | 'right'\n align?: 'left' | 'right'\n /** Arranges the trigger content vertically without rotating the dropdown panel. */\n triggerOrientation?: 'horizontal' | 'vertical'\n triggerContent?: React.ReactNode\n label?: React.ReactNode\n /** Renders the trigger as a square icon button. Requires an accessible triggerLabel. */\n iconOnly?: boolean\n noChevron?: boolean\n /** Shared visual density; takes precedence over size. */\n controlSize?: ControlSize\n /** Backward-compatible size alias. */\n size?: ControlSize\n /** Connect a persistent Label with htmlFor to the trigger. */\n triggerId?: string\n triggerVariant?: 'outline' | 'tertiary'\n className?: string\n triggerClassName?: string\n panelClassName?: string\n closeOnSelect?: boolean\n disabled?: 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 triggerOrientation = 'horizontal',\n triggerContent,\n label,\n iconOnly = false,\n noChevron = false,\n size: sizeAlias = 'md',\n controlSize,\n triggerId,\n triggerVariant = 'outline',\n className,\n triggerClassName,\n panelClassName,\n closeOnSelect = true,\n disabled = false,\n}: DropdownProps) {\n const size = controlSize ?? sizeAlias\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 isHorizontalDirection = direction === 'left' || direction === 'right'\n const ChevronIcon = direction === 'up'\n ? ChevronUp\n : direction === 'left'\n ? ChevronLeft\n : direction === 'right'\n ? ChevronRight\n : 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 let top: number | undefined\n let left: number | undefined\n let right: number | undefined\n\n if (isHorizontalDirection) {\n const spaceRight = vw - triggerRect.right - MARGIN\n const spaceLeft = triggerRect.left - MARGIN\n let placeRight = direction === 'right'\n if (placeRight && panelRect.width > spaceRight && spaceLeft > spaceRight) {\n placeRight = false\n } else if (!placeRight && panelRect.width > spaceLeft && spaceRight > spaceLeft) {\n placeRight = true\n }\n\n left = placeRight\n ? triggerRect.width + MARGIN\n : -(panelRect.width + MARGIN)\n top = 0\n const panelBottom = triggerRect.top + panelRect.height\n if (panelBottom > vh - MARGIN) top -= panelBottom - (vh - MARGIN)\n if (triggerRect.top + top < MARGIN) top += MARGIN - (triggerRect.top + top)\n } else {\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 top = placeAbove\n ? -(panelRect.height + MARGIN)\n : triggerRect.height + MARGIN\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\n setPanelStyle({ top, left, right })\n }, [open, direction, isHorizontalDirection, 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 data-control-size={size} className={cn('fractal-dropdown', className)}>\n <button\n ref={triggerRef}\n id={triggerId}\n data-control-size={size}\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-label={triggerLabel}\n onClick={() => setOpen((o) => !o)}\n className={cn(\n 'fractal-control',\n 'fractal-dropdown-trigger',\n `fractal-dropdown-trigger--${size}`,\n `fractal-dropdown-trigger--${triggerVariant}`,\n `fractal-dropdown-trigger--${triggerOrientation}`,\n iconOnly && 'fractal-dropdown-trigger--icon-only',\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 && !iconOnly && (\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 data-fractal-border-surface={tone === 'neutral' ? 'surface-2' : undefined}\n className={cn('fractal-chip', `fractal-chip--${tone}`, className)}\n {...props}\n />\n )\n)\nChip.displayName = 'Chip'\n\nexport { Chip }\n","import * as React from 'react'\nimport { Checkbox as CheckboxIcon, CheckboxChecked, Minus } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport './Checkbox.css'\n\nexport interface CheckboxProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n checked: boolean\n indeterminate?: boolean\n onCheckedChange: (checked: boolean) => void\n}\n\nexport function Checkbox({\n checked,\n indeterminate = false,\n onCheckedChange,\n className,\n disabled,\n onClick,\n onKeyDown,\n ...props\n}: CheckboxProps) {\n return (\n <button\n {...props}\n className={cn(\n 'fractal-checkbox',\n (checked || indeterminate) && 'fractal-checkbox--checked',\n indeterminate && 'fractal-checkbox--indeterminate',\n className,\n )}\n type=\"button\"\n role=\"checkbox\"\n aria-checked={indeterminate ? 'mixed' : checked}\n disabled={disabled}\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) onCheckedChange(indeterminate || !checked)\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event)\n if (event.key === ' ' || event.key === 'Enter') event.stopPropagation()\n }}\n >\n {indeterminate ? (\n <span className=\"fractal-checkbox__indeterminate-icon\" aria-hidden=\"true\">\n <CheckboxIcon size={18} />\n <Minus className=\"fractal-checkbox__indeterminate-mark\" size={12} />\n </span>\n ) : checked ? (\n <CheckboxChecked aria-hidden=\"true\" size={18} />\n ) : (\n <CheckboxIcon aria-hidden=\"true\" size={18} />\n )}\n </button>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './Radio.css'\n\nexport interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'children' | 'onChange' | 'type'> {\n label: React.ReactNode\n description?: React.ReactNode\n onCheckedChange?: (checked: boolean) => void\n}\n\nexport function Radio({\n checked,\n className,\n description,\n disabled,\n label,\n onCheckedChange,\n ...props\n}: RadioProps) {\n return (\n <label className={cn('fractal-radio', disabled && 'fractal-radio--disabled', className)}>\n <input\n {...props}\n checked={checked}\n className=\"fractal-radio__input\"\n disabled={disabled}\n onChange={(event) => onCheckedChange?.(event.currentTarget.checked)}\n type=\"radio\"\n />\n <span aria-hidden=\"true\" className=\"fractal-radio__control\">\n <span className=\"fractal-radio__dot\" />\n </span>\n <span className=\"fractal-radio__content\">\n <span className=\"fractal-radio__label\">{label}</span>\n {description && <span className=\"fractal-radio__description\">{description}</span>}\n </span>\n </label>\n )\n}\n","import { useMemo, useState, type ReactNode } from 'react'\nimport { ArrowUp, ArrowDown, ArrowsUpDown } from '@mirror-physics/fractal-icons'\nimport { cn } from '../../utils/cn'\nimport { Checkbox } from '../Checkbox'\nimport './SortableTable.css'\n\nexport type SortDirection = 'asc' | 'desc' | null\n\nexport interface SortableTableDefaultSort {\n key: string\n direction: Exclude<SortDirection, null>\n}\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 SortableTableRowAction<T> {\n label: (row: T, index: number) => string\n icon: (row: T, index: number) => ReactNode\n}\n\nexport interface SortableTableSelection<T> {\n /** Returns whether a row is selected. Selection is controlled by the consumer. */\n isSelected: (row: T) => boolean\n /** Called when an individual row changes selection. */\n onSelectedChange: (row: T, selected: boolean) => void\n /**\n * Handles the complete selectable row set in one update when the header\n * checkbox changes. Falls back to `onSelectedChange` for each row when omitted.\n */\n onSelectAllChange?: (rows: T[], selected: boolean) => void\n /** Accessible name for an individual row's checkbox. */\n getRowLabel: (row: T) => string\n /** Accessible name for the header checkbox. */\n selectAllLabel?: string\n}\n\nexport interface SortableTablePagination {\n page: number\n pageSize: number\n}\n\nexport interface SortableTableProps<T> {\n columns: SortableTableColumn<T>[]\n data: T[]\n /** Accessible name applied to the underlying table element. */\n 'aria-label'?: string\n emptyMessage?: string\n header?: ReactNode\n size?: 'sm' | 'md' | 'lg'\n /** Removes the table's outer border and radius for use inside another framed surface. */\n embedded?: boolean\n className?: string\n /** Required baseline row ordering that does not appear as an active user sort. */\n defaultSort: SortableTableDefaultSort\n /** Initial visible user sort state. */\n defaultSortKey?: string\n defaultSortDirection?: SortDirection\n sortKey?: string | null\n sortDirection?: SortDirection\n onSortChange?: (key: string | null, direction: SortDirection) => void\n /**\n * Slices the globally sorted dataset for display. Always pass the complete\n * filtered dataset in `data`; sorting is applied before pagination.\n */\n pagination?: SortableTablePagination\n highlightRow?: (row: T, index: number) => boolean\n /** Adds a leading checkbox column with controlled row selection. */\n selection?: SortableTableSelection<T>\n /** Disabled rows remain visible but cannot be selected or activated. */\n isRowDisabled?: (row: T) => boolean\n /** Disables only a row's selection control while preserving row activation. */\n isRowSelectionDisabled?: (row: T) => boolean\n /** Invoked when a row is selected. Enables pointer and keyboard row activation. */\n onRowClick?: (row: T, index: number) => void\n /** Invoked when a row is double-clicked. */\n onRowDoubleClick?: (row: T, index: number) => void\n /** Directional affordance displayed over the right edge of an interactive row. */\n rowAction?: SortableTableRowAction<T>\n}\n\nexport function SortableTable<T>({\n columns,\n data,\n 'aria-label': ariaLabel,\n emptyMessage,\n header,\n size = 'md',\n embedded = false,\n className,\n defaultSort,\n defaultSortKey = undefined,\n defaultSortDirection = null,\n sortKey: controlledKey,\n sortDirection: controlledDirection,\n onSortChange,\n pagination,\n highlightRow,\n selection,\n isRowDisabled,\n isRowSelectionDisabled,\n onRowClick,\n onRowDoubleClick,\n rowAction,\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 const baselineKey = defaultSort?.key ?? null\n const baselineDirection = defaultSort?.direction ?? null\n const effectiveKey = activeKey && activeDirection ? activeKey : baselineKey\n const effectiveDirection = activeKey && activeDirection ? activeDirection : baselineDirection\n\n const sorted = useMemo(() => {\n if (!effectiveKey || !effectiveDirection) return data\n const col = columns.find((c) => c.key === effectiveKey)\n if (!col) return data\n const accessor =\n col.sortAccessor ??\n ((row: T) => {\n const value = (row as Record<string, unknown>)[effectiveKey]\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 effectiveDirection === 'asc' ? av - bv : bv - av\n }\n const as = String(av).toLowerCase()\n const bs = String(bv).toLowerCase()\n if (as < bs) return effectiveDirection === 'asc' ? -1 : 1\n if (as > bs) return effectiveDirection === 'asc' ? 1 : -1\n return 0\n })\n return copy\n }, [data, columns, effectiveKey, effectiveDirection])\n\n const visibleRows = useMemo(() => {\n if (!pagination) return sorted\n\n const pageSize = Math.max(1, pagination.pageSize)\n const totalPages = Math.max(1, Math.ceil(sorted.length / pageSize))\n const page = Math.min(Math.max(1, pagination.page), totalPages)\n const startIndex = (page - 1) * pageSize\n return sorted.slice(startIndex, startIndex + pageSize)\n }, [pagination, sorted])\n\n const selectedRows = selection ? sorted.filter(selection.isSelected) : []\n const selectableRows = selection\n ? sorted.filter((row) => !isRowDisabled?.(row) && !isRowSelectionDisabled?.(row))\n : []\n const selectedRowCount = selection\n ? selectableRows.filter(selection.isSelected).length\n : 0\n const allRowsSelected = selectableRows.length > 0 && selectedRowCount === selectableRows.length\n const someRowsSelected = selectedRows.length > 0 && !allRowsSelected\n\n const handleSortClick = (key: string) => {\n let nextDirection: SortDirection\n if (!activeKey || !activeDirection) {\n nextDirection = baselineKey === key && baselineDirection ? baselineDirection : 'asc'\n } else if (activeKey !== key) {\n nextDirection = 'asc'\n } else if (baselineKey === key && baselineDirection) {\n nextDirection = activeDirection === baselineDirection\n ? baselineDirection === 'asc' ? 'desc' : 'asc'\n : null\n } else if (activeDirection === 'asc') {\n nextDirection = 'desc'\n } else {\n nextDirection = null\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}`, embedded && 'fractal-sortable-table--embedded', className)}>\n <div className=\"fractal-sortable-table-surface\">\n {header && <div className=\"fractal-sortable-table-header\">{header}</div>}\n\n {visibleRows.length === 0 ? (\n <div className=\"fractal-sortable-table-empty\">{emptyMessage || 'No data'}</div>\n ) : (\n <table aria-label={ariaLabel} className=\"fractal-sortable-table-table\">\n <thead>\n <tr className=\"fractal-sortable-table-thead-row\">\n {selection && (\n <th\n className=\"fractal-sortable-table-th fractal-sortable-table-selection-cell\"\n scope=\"col\"\n >\n <Checkbox\n aria-label={selection.selectAllLabel ?? 'Select all rows'}\n checked={allRowsSelected}\n disabled={selectableRows.length === 0 && selectedRows.length === 0}\n indeterminate={someRowsSelected}\n onCheckedChange={(checked) => {\n const rows = checked ? selectableRows : selectedRows\n if (selection.onSelectAllChange) {\n selection.onSelectAllChange(rows, checked)\n return\n }\n rows.forEach((row) => {\n if (selection.isSelected(row) !== checked) {\n selection.onSelectedChange(row, checked)\n }\n })\n }}\n />\n </th>\n )}\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 scope=\"col\"\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 scope=\"col\"\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 {visibleRows.map((row, rowIndex) => {\n const highlighted = highlightRow?.(row, rowIndex) ?? false\n const disabled = isRowDisabled?.(row) ?? false\n const selectionDisabled = disabled || (isRowSelectionDisabled?.(row) ?? false)\n const interactive = !disabled && Boolean(onRowClick || onRowDoubleClick)\n const action = !disabled && rowAction ? {\n label: rowAction.label(row, rowIndex),\n icon: rowAction.icon(row, rowIndex),\n } : null\n return (\n <tr\n key={rowIndex}\n className={cn(\n 'fractal-sortable-table-row',\n highlighted && 'fractal-sortable-table-row--highlighted',\n interactive && 'fractal-sortable-table-row--interactive',\n disabled && 'fractal-sortable-table-row--disabled',\n )}\n data-disabled={disabled || undefined}\n onClick={!disabled && onRowClick ? () => onRowClick(row, rowIndex) : undefined}\n onDoubleClick={!disabled && onRowDoubleClick ? () => onRowDoubleClick(row, rowIndex) : undefined}\n onKeyDown={interactive ? (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n const activateRow = onRowClick ?? onRowDoubleClick\n activateRow?.(row, rowIndex)\n }\n } : undefined}\n aria-label={action?.label}\n aria-disabled={disabled || undefined}\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? 0 : undefined}\n >\n {selection && (\n <td className=\"fractal-sortable-table-td fractal-sortable-table-selection-cell\">\n <Checkbox\n aria-label={selection.getRowLabel(row)}\n checked={!selectionDisabled && selection.isSelected(row)}\n disabled={selectionDisabled}\n onClick={(event) => event.stopPropagation()}\n onCheckedChange={(checked) => {\n if (!selectionDisabled) selection.onSelectedChange(row, checked)\n }}\n />\n </td>\n )}\n {columns.map((col, columnIndex) => (\n <td\n key={col.key}\n className={cn(\n 'fractal-sortable-table-td',\n action && columnIndex === columns.length - 1 && 'fractal-sortable-table-td--row-action',\n )}\n style={{ width: col.width, textAlign: col.align ?? 'left' }}\n >\n {col.render(row, rowIndex)}\n {action && columnIndex === columns.length - 1 && (\n <span className=\"fractal-sortable-table-row-action\" aria-hidden=\"true\">\n <span className=\"fractal-sortable-table-row-action__icon\">{action.icon}</span>\n </span>\n )}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n )}\n </div>\n </div>\n )\n}\n","import { useId, useLayoutEffect, useRef, useState, type CSSProperties, 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 type TabsVariant = 'line' | 'surface'\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 /** Extends a subtle divider across the entire tab list. */\n divider?: boolean\n /** Visual treatment. Surface tabs sit on a full-width secondary surface with the active tab connected to its panel. */\n variant?: TabsVariant\n}\n\nexport function Tabs({\n items,\n defaultValue,\n value: controlledValue,\n onValueChange,\n className,\n ariaLabel,\n divider = false,\n variant = 'line',\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 tabListRef = useRef<HTMLDivElement | null>(null)\n const tabRefs = useRef<Record<string, HTMLButtonElement | null>>({})\n const [indicator, setIndicator] = useState<{ offset: number; width: number } | null>(null)\n\n useLayoutEffect(() => {\n const updateIndicator = () => {\n const activeTab = tabRefs.current[activeId]\n if (!activeTab) return\n setIndicator({ offset: activeTab.offsetLeft, width: activeTab.offsetWidth })\n }\n\n updateIndicator()\n const list = tabListRef.current\n if (!list || typeof ResizeObserver === 'undefined') return\n const observer = new ResizeObserver(updateIndicator)\n observer.observe(list)\n return () => observer.disconnect()\n }, [activeId, items.length])\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 const indicatorStyle = indicator\n ? {\n '--fractal-tabs-indicator-offset': `${indicator.offset}px`,\n '--fractal-tabs-indicator-width': `${indicator.width}px`,\n } as CSSProperties\n : undefined\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', `fractal-tabs--${variant}`, divider && 'fractal-tabs--divider', className)}>\n <div\n ref={tabListRef}\n role=\"tablist\"\n aria-label={ariaLabel}\n className=\"fractal-tabs-list\"\n data-indicator-ready={indicator ? 'true' : undefined}\n style={indicatorStyle}\n >\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 * as React from 'react'\nimport { cn } from '../../utils/cn'\nimport './ContentSwitcher.css'\n\nexport interface ContentSwitcherItem {\n value: string\n label: React.ReactNode\n disabled?: boolean\n}\n\nexport interface ContentSwitcherProps {\n items: ContentSwitcherItem[]\n value: string\n onValueChange: (value: string) => void\n ariaLabel: string\n fullWidth?: boolean\n className?: string\n}\n\nexport function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = false, className }: ContentSwitcherProps) {\n const switcherRef = React.useRef<HTMLDivElement>(null)\n const buttonRefs = React.useRef<Array<HTMLButtonElement | null>>([])\n const indicatorMotionReadyRef = React.useRef(false)\n const activeIndex = items.findIndex((item) => item.value === value)\n\n React.useLayoutEffect(() => {\n const switcher = switcherRef.current\n const activeButton = buttonRefs.current[activeIndex]\n let motionFrame = 0\n\n if (!switcher || !activeButton) {\n switcher?.removeAttribute('data-indicator-ready')\n switcher?.removeAttribute('data-indicator-animate')\n indicatorMotionReadyRef.current = false\n return\n }\n\n const updateIndicator = () => {\n const switcherRect = switcher.getBoundingClientRect()\n const activeButtonRect = activeButton.getBoundingClientRect()\n\n switcher.style.setProperty('--fractal-content-switcher-indicator-x', `${activeButtonRect.left - switcherRect.left - switcher.clientLeft}px`)\n switcher.style.setProperty('--fractal-content-switcher-indicator-y', `${activeButtonRect.top - switcherRect.top - switcher.clientTop}px`)\n switcher.style.setProperty('--fractal-content-switcher-indicator-width', `${activeButtonRect.width}px`)\n switcher.style.setProperty('--fractal-content-switcher-indicator-height', `${activeButtonRect.height}px`)\n switcher.setAttribute('data-indicator-ready', 'true')\n\n if (!indicatorMotionReadyRef.current && motionFrame === 0) {\n motionFrame = window.requestAnimationFrame(() => {\n indicatorMotionReadyRef.current = true\n switcher.setAttribute('data-indicator-animate', 'true')\n motionFrame = 0\n })\n }\n }\n\n updateIndicator()\n\n if (typeof ResizeObserver === 'undefined') {\n return () => {\n if (motionFrame !== 0) window.cancelAnimationFrame(motionFrame)\n }\n }\n\n const resizeObserver = new ResizeObserver(updateIndicator)\n resizeObserver.observe(switcher)\n buttonRefs.current.forEach((button) => {\n if (button) resizeObserver.observe(button)\n })\n\n return () => {\n resizeObserver.disconnect()\n if (motionFrame !== 0) window.cancelAnimationFrame(motionFrame)\n }\n }, [activeIndex, items.length])\n\n const moveFocus = (index: number, direction: 1 | -1) => {\n let nextIndex = index\n do {\n nextIndex = (nextIndex + direction + items.length) % items.length\n } while (items[nextIndex]?.disabled && nextIndex !== index)\n\n if (!items[nextIndex]?.disabled) {\n buttonRefs.current[nextIndex]?.focus()\n onValueChange(items[nextIndex].value)\n }\n }\n\n return (\n <div\n className={cn('fractal-content-switcher', fullWidth && 'fractal-content-switcher--full-width', className)}\n role=\"group\"\n aria-label={ariaLabel}\n ref={switcherRef}\n >\n <span className=\"fractal-content-switcher__indicator\" aria-hidden />\n {items.map((item, index) => {\n const active = item.value === value\n return (\n <button\n className={cn('fractal-content-switcher__item', active && 'fractal-content-switcher__item--active')}\n key={item.value}\n type=\"button\"\n aria-pressed={active}\n disabled={item.disabled}\n onClick={() => onValueChange(item.value)}\n onKeyDown={(event) => {\n if (event.key === 'ArrowRight') {\n event.preventDefault()\n moveFocus(index, 1)\n }\n if (event.key === 'ArrowLeft') {\n event.preventDefault()\n moveFocus(index, -1)\n }\n }}\n ref={(element) => { buttonRefs.current[index] = element }}\n >\n {item.label}\n </button>\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 disabled?: boolean\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 disabled = false,\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 if (disabled) return\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 disabled && 'fractal-disclosure--disabled',\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 disabled={disabled}\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 type { CSSProperties, HTMLAttributes } from 'react'\nimport { cn } from '../../utils/cn'\nimport './LatticeLoader.css'\n\nconst LATTICE_COUNT = 160\nconst WAVE_PERIOD = 80\n\nexport interface LatticeLoaderProps extends HTMLAttributes<HTMLSpanElement> {\n label?: string\n}\n\nexport function LatticeLoader({ className, label = 'Loading', ...props }: LatticeLoaderProps) {\n return (\n <span\n aria-label={label}\n className={cn('fractal-lattice-loader', className)}\n role=\"progressbar\"\n {...props}\n >\n {Array.from({ length: LATTICE_COUNT }, (_, index) => (\n <span\n aria-hidden=\"true\"\n className=\"fractal-lattice-loader__cell\"\n key={index}\n style={{ '--fractal-lattice-index': index % WAVE_PERIOD } as CSSProperties}\n />\n ))}\n </span>\n )\n}\n","import type { CSSProperties, HTMLAttributes, ReactNode } from 'react'\nimport { cn } from '../../utils/cn'\nimport type { ControlSize } from '../../utils/control-size'\nimport '../../styles/control.css'\nimport './Ghost.css'\n\ntype GhostLength = number | string\n\nexport interface GhostProps extends HTMLAttributes<HTMLDivElement> {\n /** Width of the placeholder. Numbers are interpreted as pixels. */\n width?: GhostLength\n /** Height of the placeholder. Numbers are interpreted as pixels. */\n height?: GhostLength\n /** Border radius override. */\n radius?: GhostLength\n}\n\nexport interface GhostLineProps extends Omit<GhostProps, 'height'> {\n /** Text-line size. */\n size?: 'sm' | 'md' | 'lg'\n}\n\nconst toCssLength = (value: GhostLength | undefined) => (\n typeof value === 'number' ? `${value}px` : value\n)\n\n/**\n * An intentionally content-free, shimmering placeholder. Use the composed\n * ghosts below for standard Fractal components; use this primitive for custom\n * product layouts.\n */\nexport function Ghost({ className, width, height, radius, style, ...props }: GhostProps) {\n return (\n <div\n aria-hidden=\"true\"\n className={cn('fractal-ghost', className)}\n style={{\n width: toCssLength(width),\n height: toCssLength(height),\n borderRadius: toCssLength(radius),\n ...style,\n }}\n {...props}\n />\n )\n}\n\nexport function GhostLine({ className, size = 'md', width = '100%', ...props }: GhostLineProps) {\n return <Ghost className={cn('fractal-ghost-line', `fractal-ghost-line--${size}`, className)} width={width} {...props} />\n}\n\nexport interface ButtonGhostProps extends Omit<GhostProps, 'height'> {\n size?: ControlSize\n controlSize?: ControlSize\n iconOnly?: boolean\n}\n\nexport function ButtonGhost({ className, size = 'md', controlSize, iconOnly = false, width, ...props }: ButtonGhostProps) {\n return <Ghost data-control-size={controlSize ?? size} className={cn('fractal-ghost-button', `fractal-ghost-button--${size}`, iconOnly && 'fractal-ghost-button--icon-only', className)} width={width} {...props} />\n}\n\nexport interface CardGhostProps extends HTMLAttributes<HTMLDivElement> {\n lines?: number\n showHeader?: boolean\n}\n\nexport function CardGhost({ className, lines = 3, showHeader = true, ...props }: CardGhostProps) {\n return (\n <div aria-hidden=\"true\" className={cn('fractal-ghost-card', className)} {...props}>\n {showHeader && <GhostLine width=\"38%\" />}\n <div className=\"fractal-ghost-stack\">\n {Array.from({ length: lines }, (_, index) => <GhostLine key={index} width={index === lines - 1 ? '62%' : '100%'} />)}\n </div>\n </div>\n )\n}\n\nexport interface DataTableGhostProps extends HTMLAttributes<HTMLDivElement> {\n /** Display placeholder cells for a header that is itself still loading. */\n showHeader?: boolean\n /** Static header labels to retain while only rows are loading. */\n headers?: ReactNode[]\n /** Number of column placeholders. */\n columns?: number\n /** Number of data row placeholders. */\n rows?: number\n /** Optional CSS widths mirroring the eventual table columns. */\n columnWidths?: string[]\n size?: 'sm' | 'md' | 'lg'\n}\n\nexport function DataTableGhost({\n className,\n showHeader = true,\n headers,\n columns = 4,\n rows = 5,\n columnWidths,\n size = 'md',\n ...props\n}: DataTableGhostProps) {\n const cells = Array.from({ length: columns }, (_, index) => index)\n return (\n <div aria-busy=\"true\" aria-label=\"Loading table\" className={cn('fractal-ghost-table', `fractal-ghost-table--${size}`, className)} role=\"status\" {...props}>\n <table className=\"fractal-ghost-table__table\">\n {(showHeader || headers) && (\n <thead>\n <tr className=\"fractal-ghost-table__head-row\">\n {cells.map((index) => (\n <th key={index} style={{ width: columnWidths?.[index] }}>\n {headers?.[index] ?? <GhostLine size=\"sm\" width={index === columns - 1 ? '62%' : '76%'} />}\n </th>\n ))}\n </tr>\n </thead>\n )}\n <tbody>\n {Array.from({ length: rows }, (_, rowIndex) => (\n <tr className=\"fractal-ghost-table__row\" key={rowIndex}>\n {cells.map((columnIndex) => (\n <td key={columnIndex} style={{ width: columnWidths?.[columnIndex] }}>\n <GhostLine width={`${[72, 54, 82, 63, 46][(rowIndex + columnIndex) % 5]}%`} />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nexport interface FormFieldGhostProps extends HTMLAttributes<HTMLDivElement> {\n labelWidth?: GhostLength\n controlSize?: ControlSize\n multiline?: boolean\n}\n\nexport function InputGhost({ className, labelWidth = '26%', ...props }: FormFieldGhostProps) {\n return <FormFieldGhost className={className} labelWidth={labelWidth} {...props} />\n}\n\nexport function TextareaGhost({ className, labelWidth = '26%', ...props }: FormFieldGhostProps) {\n return <FormFieldGhost className={className} labelWidth={labelWidth} multiline {...props} />\n}\n\nexport function LabelGhost({ className, width = '26%', ...props }: Omit<GhostLineProps, 'size'>) {\n return <GhostLine className={cn('fractal-ghost-label', className)} size=\"sm\" width={width} {...props} />\n}\n\nfunction FormFieldGhost({ className, labelWidth = '26%', multiline = false, controlSize = 'md', ...props }: FormFieldGhostProps) {\n return (\n <div aria-hidden=\"true\" data-control-size={controlSize} className={cn('fractal-ghost-field', className)} {...props}>\n <LabelGhost width={labelWidth} />\n <Ghost className={cn('fractal-ghost-field__control', multiline && 'fractal-ghost-field__control--multiline')} />\n </div>\n )\n}\n\nexport function AlertGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-alert', className)} {...props}><GhostLine width=\"30%\" /><GhostLine size=\"sm\" width=\"78%\" /></div>\n}\n\nexport function CheckboxGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-choice', className)} {...props}><Ghost className=\"fractal-ghost-choice__control\" /><GhostLine width=\"42%\" /></div>\n}\n\nexport const ToggleGhost = CheckboxGhost\n\nexport function ChipGhost({ className, width = 74, ...props }: Omit<GhostProps, 'height'>) {\n return <Ghost className={cn('fractal-ghost-chip', className)} height={24} width={width} {...props} />\n}\n\nexport function LinkGhost({ className, width = 96, ...props }: Omit<GhostLineProps, 'size'>) {\n return <GhostLine className={cn('fractal-ghost-link', className)} size=\"sm\" width={width} {...props} />\n}\n\nexport const TextButtonGhost = LinkGhost\n\nexport function DropdownGhost({ className, controlSize = 'md', ...props }: HTMLAttributes<HTMLDivElement> & { controlSize?: ControlSize }) {\n return <div aria-hidden=\"true\" data-control-size={controlSize} className={cn('fractal-ghost-dropdown', className)} {...props}><GhostLine width=\"38%\" /><Ghost className=\"fractal-ghost-dropdown__chevron\" /></div>\n}\n\nexport function ContentSwitcherGhost({ className, options = 3, ...props }: HTMLAttributes<HTMLDivElement> & { options?: number }) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-switcher', className)} {...props}>{Array.from({ length: options }, (_, index) => <Ghost key={index} />)}</div>\n}\n\nexport const TabsGhost = ContentSwitcherGhost\n\nexport function DisclosureGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-disclosure', className)} {...props}><Ghost className=\"fractal-ghost-disclosure__icon\" /><GhostLine width=\"42%\" /></div>\n}\n\nexport function PaginationGhost({ className, pages = 5, ...props }: HTMLAttributes<HTMLDivElement> & { pages?: number }) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-pagination', className)} {...props}>{Array.from({ length: pages }, (_, index) => <Ghost key={index} />)}</div>\n}\n\nexport function FileDropzoneGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div aria-hidden=\"true\" className={cn('fractal-ghost-dropzone', className)} {...props}><Ghost className=\"fractal-ghost-dropzone__icon\" /><GhostLine width=\"26%\" /><GhostLine size=\"sm\" width=\"46%\" /></div>\n}\n\nexport function PromptCardGhost({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <CardGhost className={cn('fractal-ghost-prompt-card', className)} lines={4} {...props} />\n}\n\nexport type ConversationGhostProps = HTMLAttributes<HTMLDivElement>\n\nexport function ConversationGhost({\n className,\n 'aria-label': ariaLabel = 'Loading conversation',\n ...props\n}: ConversationGhostProps) {\n return (\n <div\n aria-busy=\"true\"\n aria-label={ariaLabel}\n className={cn('fractal-ghost-conversation', className)}\n role=\"status\"\n {...props}\n >\n <div aria-hidden=\"true\" className=\"fractal-ghost-conversation__message fractal-ghost-conversation__message--user\">\n <div className=\"fractal-ghost-conversation__bubble\">\n <GhostLine width=\"100%\" />\n <GhostLine width=\"86%\" />\n <GhostLine width=\"64%\" />\n </div>\n </div>\n <div aria-hidden=\"true\" className=\"fractal-ghost-conversation__message fractal-ghost-conversation__message--assistant\">\n <GhostLine width=\"92%\" />\n <GhostLine width=\"78%\" />\n <GhostLine width=\"58%\" />\n </div>\n </div>\n )\n}\n\nexport function SortableTableGhost(props: DataTableGhostProps) {\n return <DataTableGhost {...props} />\n}\n\nexport interface SidebarGhostProps extends HTMLAttributes<HTMLDivElement> {\n items?: number\n}\n\nexport function SidebarGhost({ className, items = 6, ...props }: SidebarGhostProps) {\n return (\n <aside aria-hidden=\"true\" className={cn('fractal-ghost-sidebar', className)} {...props}>\n <Ghost className=\"fractal-ghost-sidebar__brand\" />\n <div className=\"fractal-ghost-sidebar__items\">\n {Array.from({ length: items }, (_, index) => <div className=\"fractal-ghost-sidebar__item\" key={index}><Ghost /><GhostLine width={`${[54, 68, 44, 61][index % 4]}%`} /></div>)}\n </div>\n </aside>\n )\n}\n\nexport interface SurfaceGhostProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n title?: ReactNode\n lines?: number\n}\n\nexport function ModalGhost({ className, title, lines = 3, ...props }: SurfaceGhostProps) {\n return <SurfaceGhost className={cn('fractal-ghost-modal', className)} title={title} lines={lines} {...props} />\n}\n\nexport function SidePanelGhost({ className, title, lines = 5, ...props }: SurfaceGhostProps) {\n return <SurfaceGhost className={cn('fractal-ghost-side-panel', className)} title={title} lines={lines} {...props} />\n}\n\nfunction SurfaceGhost({ className, title, lines = 3, ...props }: SurfaceGhostProps) {\n return (\n <div aria-hidden=\"true\" className={cn('fractal-ghost-surface', className)} {...props}>\n <div className=\"fractal-ghost-surface__header\"><GhostLine width=\"42%\" /><Ghost className=\"fractal-ghost-surface__close\" /></div>\n {title && <div className=\"fractal-ghost-surface__title\">{title}</div>}\n <div className=\"fractal-ghost-stack\">{Array.from({ length: lines }, (_, index) => <GhostLine key={index} width={index === lines - 1 ? '64%' : '100%'} />)}</div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { Dropdown, type DropdownItem } from '../Dropdown'\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 /** Collapses the sidebar to an icon rail until it is hovered or receives focus. */\n compact?: boolean\n}\n\nconst Sidebar = React.forwardRef<HTMLElement, SidebarProps>(\n ({ className, width, compact = false, style, ...props }, ref) => (\n <aside\n ref={ref}\n className={cn('fractal-sidebar', className)}\n data-compact={compact || undefined}\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\nexport interface SidebarAccountMenuProps {\n /** Person or workspace label shown in the sidebar header. */\n name: string\n /** Available account actions. */\n items: DropdownItem[]\n /** Invoked when an account action is selected. */\n onSelect: (value: string) => void\n /** Accessible label for the account actions menu. */\n triggerLabel?: string\n /** Leading profile or workspace mark. */\n icon?: React.ReactNode\n className?: string\n}\n\nfunction SidebarAccountMenu({\n name,\n items,\n onSelect,\n triggerLabel = 'Account menu',\n icon,\n className,\n}: SidebarAccountMenuProps) {\n return (\n <Dropdown\n align=\"left\"\n className={cn('fractal-sidebar__account', className)}\n items={items}\n onSelect={onSelect}\n panelClassName=\"fractal-sidebar__account-panel\"\n selectedValue=\"\"\n triggerClassName=\"fractal-sidebar__account-trigger\"\n triggerContent={(\n <>\n {icon && <span className=\"fractal-sidebar__account-icon\" aria-hidden=\"true\">{icon}</span>}\n <span className=\"fractal-sidebar__account-name\">{name}</span>\n </>\n )}\n triggerLabel={triggerLabel}\n triggerVariant=\"tertiary\"\n />\n )\n}\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 SidebarAccountMenu,\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 { UILoader } from '../UILoader'\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), lg (680px), or xl (960px). */\n size?: 'sm' | 'md' | 'lg' | 'xl'\n /** Replaces the body with a whole-surface loading state while retaining the panel header. */\n loading?: boolean\n loadingLabel?: string\n className?: string\n}\n\nexport function SidePanel({ open, onClose, title, description, children, footer, size = 'md', loading = false, loadingLabel = 'Loading', 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 {typeof title === 'string'\n ? <h2 className=\"fractal-side-panel__title\">{title}</h2>\n : <div className=\"fractal-side-panel__title\">{title}</div>}\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 aria-busy={loading || undefined} className={cn('fractal-side-panel__body', loading && 'fractal-side-panel__body--loading')}>\n {loading ? <UILoader label={loadingLabel} /> : children}\n </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 { cn } from '../../utils/cn'\nimport './TextButton.css'\n\nexport type TextButtonSize = 'sm' | 'md'\nexport type TextButtonIconPosition = 'start' | 'end'\nexport type TextButtonTone = 'primary' | 'secondary'\n\nexport interface TextButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n iconPosition?: TextButtonIconPosition\n size?: TextButtonSize\n tone?: TextButtonTone\n}\n\nconst TextButton = React.forwardRef<HTMLButtonElement, TextButtonProps>(\n ({ className, icon, iconPosition = 'start', size = 'md', tone = 'primary', children, ...props }, ref) => (\n <button\n ref={ref}\n className={cn('fractal-text-button', `fractal-text-button--${size}`, `fractal-text-button--${tone}`, className)}\n type=\"button\"\n {...props}\n >\n {icon && iconPosition === 'start' && <span className=\"fractal-text-button__icon\" aria-hidden=\"true\">{icon}</span>}\n <span>{children}</span>\n {icon && iconPosition === 'end' && <span className=\"fractal-text-button__icon\" aria-hidden=\"true\">{icon}</span>}\n </button>\n ),\n)\nTextButton.displayName = 'TextButton'\n\nexport { TextButton }\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","import { ArrowLeft, ArrowRight } from '@mirror-physics/fractal-icons'\nimport { Dropdown } from '../Dropdown'\nimport { cn } from '../../utils/cn'\nimport './Pagination.css'\n\nexport interface PaginationProps {\n /** One-based active page. */\n page: number\n pageSize: number\n totalItems: number\n onPageChange: (page: number) => void\n /** Optional page sizes, rendered as an unframed selector in the pagination footer. */\n pageSizeOptions?: number[]\n onPageSizeChange?: (pageSize: number) => void\n ariaLabel?: string\n className?: string\n}\n\nexport function Pagination({\n page,\n pageSize,\n totalItems,\n onPageChange,\n pageSizeOptions,\n onPageSizeChange,\n ariaLabel = 'Pagination',\n className,\n}: PaginationProps) {\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize))\n const currentPage = Math.min(Math.max(page, 1), totalPages)\n const start = totalItems === 0 ? 0 : (currentPage - 1) * pageSize + 1\n const end = Math.min(currentPage * pageSize, totalItems)\n const canChangePageSize = pageSizeOptions != null && pageSizeOptions.length > 0 && onPageSizeChange != null\n\n return (\n <nav className={cn('fractal-pagination', className)} aria-label={ariaLabel}>\n <span className=\"fractal-pagination__summary\">\n {totalItems === 0 ? 'No results' : `${start}-${end} of ${totalItems}`}\n </span>\n <div className=\"fractal-pagination__controls\">\n {canChangePageSize && (\n <Dropdown\n align=\"right\"\n className=\"fractal-pagination__page-size\"\n direction=\"up\"\n items={pageSizeOptions.map((option) => ({\n value: String(option),\n description: `${option} per page`,\n }))}\n onSelect={(value) => onPageSizeChange(Number(value))}\n selectedValue={String(pageSize)}\n size=\"sm\"\n triggerLabel=\"Results per page\"\n triggerVariant=\"tertiary\"\n />\n )}\n <button\n className=\"fractal-pagination__button\"\n type=\"button\"\n aria-label=\"Previous page\"\n title=\"Previous page\"\n disabled={currentPage === 1 || totalItems === 0}\n onClick={() => onPageChange(currentPage - 1)}\n >\n <ArrowLeft aria-hidden=\"true\" size={16} />\n </button>\n <span className=\"fractal-pagination__page\" aria-current=\"page\">{currentPage} of {totalPages}</span>\n <button\n className=\"fractal-pagination__button\"\n type=\"button\"\n aria-label=\"Next page\"\n title=\"Next page\"\n disabled={currentPage === totalPages || totalItems === 0}\n onClick={() => onPageChange(currentPage + 1)}\n >\n <ArrowRight aria-hidden=\"true\" size={16} />\n </button>\n </div>\n </nav>\n )\n}\n"],"mappings":";AAAA,YAAY,WAAW;;;ACAvB,SAAS,YAA6B;AAE/B,SAAS,MAAM,QAAsB;AAC1C,SAAO,KAAK,MAAM;AACpB;;;ADqKM;AApIN,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,IACJ,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA,EACA,MAAM;AAAA,IACJ,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA,EACA,QAAQ;AAAA,IACN,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA,EACA,OAAO;AAAA,IACL,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACF;AAEA,SAAS,gBACP,YACA,WACA,UACA,UACA,OACA,aACqB;AACrB,QAAM,UAAU,aAAa,KAAK;AAElC,QAAM,OAA4B;AAAA,IAChC,cAAc,cAAc,0BAA0B;AAAA,IACtD,QAAQ,WAAW,gBAAgB;AAAA,IACnC,YAAY;AAAA,EACd;AAEA,MAAI,aAAa;AACf,SAAK,iBAAiB;AAAA,EACxB;AAKA,MAAI,UAAU;AACZ,QAAI,eAAe,SAAS;AAC1B,aAAO,EAAE,GAAG,MAAM,iBAAiB,eAAe,QAAQ,yBAAyB,OAAO,qBAAqB;AAAA,IACjH;AACA,WAAO,EAAE,GAAG,MAAM,iBAAiB,eAAe,QAAQ,gCAAgC,OAAO,qBAAqB;AAAA,EACxH;AAEA,UAAQ,YAAY;AAAA;AAAA,IAElB,KAAK;AACH,UAAI,aAAa;AACf,eAAO;AAAA,UACL,GAAG;AAAA,UACH,iBAAiB,WAAW,QAAQ,GAAG,IAAI,YAAY,QAAQ,GAAG,IAAI,QAAQ,GAAG;AAAA,UACjF,QAAQ;AAAA,UACR,OAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,GAAI,aAAa,WAAW,EAAE,SAAS,KAAK,IAAI,CAAC;AAAA,MACnD;AAAA;AAAA,IAGF,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,iBAAiB,WAAW,wBAAwB,YAAY,wBAAwB;AAAA,QACxF,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AAAA;AAAA,IAGF,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,iBAAiB,aAAa,WAAW,wBAAwB;AAAA,QACjE,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AAAA;AAAA,IAGF,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,iBAAiB,aAAa,WAAW,uCAAuC;AAAA,QAChF,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AAAA,IAEF;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,SAAe;AAAA,EACnB,CAAC,EAAE,WAAW,aAAa,WAAW,aAAa,MAAM,aAAa,QAAQ,QAAQ,MAAM,aAAa,eAAe,QAAQ,OAAO,UAAU,UAAU,GAAG,MAAM,GAAG,QAAQ;AAC7K,UAAM,CAAC,WAAW,YAAY,IAAU,eAAS,KAAK;AACtD,UAAM,CAAC,UAAU,WAAW,IAAU,eAAS,KAAK;AAEpD,UAAM,aAAa,gBAAgB,YAAY,WAAW,UAAU,CAAC,CAAC,UAAU,OAAO,WAAW;AAClG,UAAM,iBAAiB,QAAQ,YAAY,CAAC;AAC5C,UAAM,cAAc,iBAChB,EAAE,GAAG,YAAY,KAAK,uBAAuB,GAAG,MAAM,IACtD,EAAE,GAAG,YAAY,GAAG,MAAM;AAE9B,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,qBAAmB,eAAe;AAAA,QAClC,kBAAgB,eAAe;AAAA,QAC/B,WAAW,GAAG,mBAAmB,kBAAkB,mBAAmB,UAAU,IAAI,SAAS;AAAA,QAC7F,OAAO;AAAA,QACP;AAAA,QACA,cAAc,CAAC,MAAM;AAAE,uBAAa,IAAI;AAAG,gBAAM,eAAe,CAAC;AAAA,QAAE;AAAA,QACnE,cAAc,CAAC,MAAM;AAAE,uBAAa,KAAK;AAAG,sBAAY,KAAK;AAAG,gBAAM,eAAe,CAAC;AAAA,QAAE;AAAA,QACxF,aAAa,CAAC,MAAM;AAAE,sBAAY,IAAI;AAAG,gBAAM,cAAc,CAAC;AAAA,QAAE;AAAA,QAChE,WAAW,CAAC,MAAM;AAAE,sBAAY,KAAK;AAAG,gBAAM,YAAY,CAAC;AAAA,QAAE;AAAA,QAC5D,GAAG;AAAA,QAEH;AAAA,2BAAiB,WAAW;AAAA,UAC5B,CAAC,eAAe;AAAA,UAChB,iBAAiB,WAAW;AAAA;AAAA;AAAA,IAC/B;AAAA,EAEJ;AACF;AACA,OAAO,cAAc;;;AE9LrB,SAAS,WAAW,SAAS,QAAQ,YAAAA,iBAAqD;AAC1F,OAAO,gBAAgB;AACvB,SAAS,gBAAgB,YAAY,aAAmC,0BAA0B;AAClG,SAAS,YAAY;AACrB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,OAGV;AACP,SAAS,YAAY;AACrB,SAAS,OAAO,YAAY;AAwWlB,SAEI,KAFJ,QAAAC,aAAA;AAvUV,IAAM,YAAY,WAAW,MAAM;AAAA,EACjC,KAAK;AAAA,IACH,iBAAiB;AAAA,IACjB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,gBAAgB,EAAE,SAAS,OAAO;AAAA,EAClC,gBAAgB;AAAA,IACd,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,oBAAoB;AAAA,EACtB;AAAA,EACA,eAAe,EAAE,SAAS,SAAS;AAAA,EACnC,YAAY;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA,8BAA8B,EAAE,iBAAiB,oBAAoB;AAAA,EACrE,eAAe;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,qCAAqC,EAAE,SAAS,eAAe;AAAA,EAC/D,kBAAkB,EAAE,OAAO,OAAO;AAAA,EAClC,oCAAoC;AAAA,IAClC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,2CAA2C;AAAA,IACzC,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,8DAA8D,EAAE,WAAW,mBAAmB;AAAA,EAC9F,iDAAiD,EAAE,OAAO,sBAAsB;AAAA,EAChF,+BAA+B,EAAE,OAAO,sBAAsB;AAAA,EAC9D,wCAAwC,EAAE,iBAAiB,sBAAsB;AAAA,EACjF,8EAA8E;AAAA,IAC5E,iBAAiB;AAAA,EACnB;AAAA,EACA,mBAAmB;AAAA,IACjB,iBAAiB;AAAA,IACjB,SAAS;AAAA,EACX;AAAA,EACA,2CAA2C,EAAE,iBAAiB,wBAAwB;AAAA,EACtF,cAAc,EAAE,iBAAiB,uBAAuB,OAAO,oBAAoB;AAAA,EACnF,eAAe;AAAA,IACb,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,OAAO;AAAA,EACT;AACF,CAAC;AAED,IAAM,wBAAwB,eAAe,OAAO;AAAA,EAClD,EAAE,KAAK,KAAK,SAAS,OAAO,sBAAsB,WAAW,SAAS;AAAA,EACtE,EAAE,KAAK,CAAC,KAAK,SAAS,KAAK,gBAAgB,KAAK,eAAe,GAAG,OAAO,wBAAwB;AAAA,EACjG,EAAE,KAAK,CAAC,KAAK,QAAQ,KAAK,QAAQ,KAAK,MAAM,CAAC,GAAG,OAAO,wBAAwB;AAAA,EAChF,EAAE,KAAK,CAAC,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GAAG,OAAO,wBAAwB;AAAA,EAC3E,EAAE,KAAK,CAAC,KAAK,SAAS,KAAK,YAAY,GAAG,KAAK,SAAS,GAAG,OAAO,wBAAwB;AAAA,EAC1F,EAAE,KAAK,CAAC,KAAK,UAAU,KAAK,WAAW,KAAK,SAAS,GAAG,OAAO,sBAAsB;AAAA,EACrF,EAAE,KAAK,CAAC,KAAK,cAAc,KAAK,aAAa,GAAG,OAAO,yBAAyB;AAAA,EAChF,EAAE,KAAK,CAAC,KAAK,UAAU,KAAK,WAAW,GAAG,OAAO,sBAAsB;AAAA,EACvE,EAAE,KAAK,KAAK,SAAS,OAAO,wBAAwB;AAAA,EACpD,EAAE,KAAK,CAAC,KAAK,SAAS,KAAK,MAAM,GAAG,OAAO,qBAAqB,YAAY,MAAM;AAAA,EAClF,EAAE,KAAK,KAAK,UAAU,WAAW,SAAS;AAAA,EAC1C,EAAE,KAAK,KAAK,MAAM,OAAO,yBAAyB,gBAAgB,YAAY;AAAA,EAC9E,EAAE,KAAK,KAAK,SAAS,OAAO,wBAAwB,gBAAgB,iBAAiB;AACvF,CAAC;AAED,IAAM,cAAc,KAAK;AACzB,IAAM,sBAAsB,oBAAI,IAAI,CAAC,QAAQ,SAAS,UAAU,SAAS,CAAC;AAC1E,IAAM,4BAA4B,oBAAI,IAAI,CAAC,SAAS,QAAQ,CAAC;AAC7D,IAAM,oCAAoC;AAC1C,IAAM,uBAAuB;AAE7B,SAAS,mBAAmB,OAAe;AACzC,MAAI,UAAU;AACd,aAAW,aAAa,MAAO,YAAW,cAAc,MAAO,IAAI;AACnE,SAAO;AACT;AAEA,SAAS,qBAAqB,MAAc;AAC1C,QAAM,oBAAoB,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK;AACrD,MAAI,qBAAqB,KAAK,IAAI,EAAG,QAAO,KAAK,IAAI,mBAAmB,iBAAiB,GAAG,EAAE;AAC9F,SAAO,KAAK,IAAI,mBAAmB,iBAAiB,IAAI,GAAG,EAAE;AAC/D;AAEA,SAAS,4BAA4B,MAAiC;AACpE,QAAM,cAAc,CAAC;AACrB,QAAM,iBAAiB,oBAAI,IAAY;AAEvC,aAAW,gBAAgB,KAAK,eAAe;AAC7C,QAAI,WAAW,aAAa;AAC5B,WAAO,YAAY,aAAa,IAAI;AAClC,YAAM,OAAO,KAAK,MAAM,IAAI,OAAO,QAAQ;AAC3C,UAAI,CAAC,eAAe,IAAI,KAAK,IAAI,GAAG;AAClC,cAAM,SAAS,qBAAqB,KAAK,IAAI;AAC7C,oBAAY,KAAK,WAAW,KAAK;AAAA,UAC/B,YAAY,EAAE,OAAO,+BAA+B,MAAM,KAAK;AAAA,QACjE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AACnB,uBAAe,IAAI,KAAK,IAAI;AAAA,MAC9B;AACA,UAAI,KAAK,MAAM,aAAa,GAAI;AAChC,iBAAW,KAAK,KAAK;AAAA,IACvB;AAAA,EACF;AAEA,SAAO,WAAW,IAAI,aAAa,IAAI;AACzC;AAEA,IAAM,yBAAyB,WAAW,UAAU,MAAM;AAAA,EAGxD,YAAY,MAAkB;AAC5B,SAAK,cAAc,4BAA4B,IAAI;AAAA,EACrD;AAAA,EAEA,OAAO,QAAoB;AACzB,SAAK,cAAc,4BAA4B,OAAO,IAAI;AAAA,EAC5D;AACF,GAAG;AAAA,EACD,aAAa,CAAC,WAAW,OAAO;AAClC,CAAC;AAED,IAAM,oBAAoB,IAAI,eAAe;AAAA,EAC3C,QAAQ;AAAA,EACR,YAAY,WAAW,KAAK,EAAE,OAAO,6BAA6B,CAAC;AACrE,CAAC;AAED,IAAM,yBAAyB,WAAW,UAAU,MAAM;AAAA,EAGxD,YAAY,MAAkB;AAC5B,SAAK,cAAc,kBAAkB,WAAW,IAAI;AAAA,EACtD;AAAA,EAEA,OAAO,QAAoB;AACzB,SAAK,cAAc,kBAAkB,WAAW,QAAQ,KAAK,WAAW;AAAA,EAC1E;AACF,GAAG;AAAA,EACD,aAAa,CAAC,WAAW,OAAO;AAClC,CAAC;AAED,SAAS,0BAA0B,OAAe;AAChD,SAAO,MAAM,MAAM,OAAO,EAAE,IAAI,CAAC,SAAS;AACxC,UAAM,oBAAoB,KAAK,OAAO,IAAI;AAC1C,QAAI,oBAAoB,KAAK,KAAK,SAAS,qBAAqB,kCAAmC,QAAO;AAE1G,UAAM,cAAc,KAAK,MAAM,GAAG,iBAAiB;AACnD,QAAI;AACF,YAAM,SAAkB,KAAK,MAAM,KAAK,MAAM,iBAAiB,CAAC;AAChE,UAAI,WAAW,QAAQ,OAAO,WAAW,SAAU,QAAO;AAC1D,aAAO,KAAK,UAAU,QAAQ,MAAM,CAAC,EAClC,MAAM,IAAI,EACV,IAAI,CAAC,kBAAkB,GAAG,WAAW,GAAG,aAAa,EAAE,EACvD,KAAK,IAAI;AAAA,IACd,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,CAAC,EAAE,KAAK,IAAI;AACd;AAEA,SAAS,qBAAqBC,WAAkB,OAAe;AAC7D,QAAM,mBAAmBA,UAAS,KAAK;AACvC,MAAI,qBAAqB,OAAO,qBAAqB,IAAK,QAAO;AAEjE,QAAM,oBAA8B,CAAC;AACrC,MAAI,iBAAiB;AACrB,MAAI,YAAY;AAEhB,WAAS,QAAQ,OAAO,QAAQA,UAAS,QAAQ,SAAS,GAAG;AAC3D,UAAM,YAAYA,UAAS,KAAK;AAChC,QAAI,gBAAgB;AAClB,UAAI,WAAW;AACb,oBAAY;AAAA,MACd,WAAW,cAAc,MAAM;AAC7B,oBAAY;AAAA,MACd,WAAW,cAAc,KAAK;AAC5B,yBAAiB;AAAA,MACnB;AACA;AAAA,IACF;AAEA,QAAI,cAAc,KAAK;AACrB,uBAAiB;AAAA,IACnB,WAAW,cAAc,KAAK;AAC5B,wBAAkB,KAAK,GAAG;AAAA,IAC5B,WAAW,cAAc,KAAK;AAC5B,wBAAkB,KAAK,GAAG;AAAA,IAC5B,WAAW,cAAc,OAAO,cAAc,KAAK;AACjD,UAAI,kBAAkB,IAAI,MAAM,UAAW,QAAO;AAClD,UAAI,kBAAkB,WAAW,EAAG,QAAO;AAAA,IAC7C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,uBAAuB,YAAY,GAAG,CAAC,OAAO,WAAW,YAAY;AACzE,QAAM,OAAO,MAAM,IAAI,YAAY,WAAW,OAAO;AACrD,QAAM,oBAAoB,KAAK,OAAO,IAAI;AAC1C,MAAI,oBAAoB,EAAG,QAAO;AAElC,QAAM,iBAAiB,YAAY;AACnC,QAAM,mBAAmB,KAAK,iBAAiB;AAC/C,MAAI,qBAAqB,OAAO,qBAAqB,IAAK,QAAO;AAEjE,QAAMA,YAAW,MAAM,IAAI,SAAS;AACpC,QAAM,eAAe,qBAAqBA,WAAU,cAAc;AAClE,MAAI,iBAAiB,QAAQ,eAAe,iBAAiB,EAAG,QAAO;AAEvE,MAAI;AACF,UAAM,SAAkB,KAAK,MAAMA,UAAS,MAAM,gBAAgB,eAAe,CAAC,CAAC;AACnF,QAAI,WAAW,QAAQ,OAAO,WAAW,SAAU,QAAO;AAAA,EAC5D,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,MAAM,iBAAiB;AAAA,IACvB,IAAI;AAAA,EACN;AACF,CAAC;AAED,SAAS,gBAAgB,UAAmB,UAI1C;AACA,QAAM,aAAa,UAAU,KAAK,EAAE,YAAY;AAChD,QAAM,YAAY,UAAU,MAAM,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY;AAC9E,MAAK,cAAc,oBAAoB,IAAI,UAAU,KAAO,aAAa,oBAAoB,IAAI,SAAS,GAAI;AAC5G,UAAM,cAAc;AAAA,MACjB,cAAc,0BAA0B,IAAI,UAAU,KACnD,aAAa,0BAA0B,IAAI,SAAS;AAAA,IAC1D;AACA,WAAO,EAAE,OAAO,cAAc,UAAU,QAAQ,SAAS,aAAa,YAAY;AAAA,EACpF;AACA,MAAI,cAAc,CAAC,CAAC,QAAQ,OAAO,aAAa,OAAO,EAAE,SAAS,UAAU,GAAG;AAC7E,WAAO,EAAE,OAAO,UAAU,KAAK,GAAG,SAAS,MAAM,aAAa,MAAM;AAAA,EACtE;AACA,SAAO,EAAE,SAAS,MAAM,aAAa,MAAM;AAC7C;AAEO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,cAAc;AAAA,EACd,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAmB;AACjB,QAAM,mBAAmB,QAAQ,MAAM,gBAAgB,UAAU,QAAQ,GAAG,CAAC,UAAU,QAAQ,CAAC;AAChG,QAAM,eAAe;AAAA,IACnB,MAAM,CAAC,YAAY,iBAAiB,cAAc,0BAA0B,KAAK,IAAI;AAAA,IACrF,CAAC,UAAU,iBAAiB,aAAa,KAAK;AAAA,EAChD;AACA,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAsC,MAAM;AAChF,QAAM,iBAAiB,OAA6C,IAAI;AAExE,YAAU,MAAM,MAAM;AACpB,QAAI,eAAe,QAAS,cAAa,eAAe,OAAO;AAAA,EACjE,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,QAAQ,MAAM;AAAA,IAC/B;AAAA,IACA,mBAAmB,qBAAqB;AAAA,IACxC,GAAI,iBAAiB,UAAU,CAAC,iBAAiB,OAAO,IAAI,CAAC;AAAA,IAC7D,GAAI,iBAAiB,UAAU,CAAC,sBAAsB,IAAI,CAAC;AAAA,IAC3D,GAAI,iBAAiB,cAAc,CAAC,oBAAoB,IAAI,CAAC;AAAA,IAC7D,GAAI,cAAc,CAAC,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAAA,IACxD,GAAI,OAAO,CAAC,WAAW,cAAc,sBAAsB,IAAI,CAAC;AAAA,EAClE,GAAG,CAAC,aAAa,iBAAiB,aAAa,iBAAiB,SAAS,IAAI,CAAC;AAE9E,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,eAAe,SAAS,YAAY;AAC1C,QAAM,eAAe,cACf,WAAW,GAAG,QAAQ,IAAI,WAAW,WAAW,QAAQ,KAAK,QAAQ,WAAW,WAAW,QAAQ;AAEzG,QAAM,WAAW,YAAY;AAC3B,QAAI;AACF,YAAM,UAAU,UAAU,UAAU,KAAK;AACzC,oBAAc,QAAQ;AAAA,IACxB,QAAQ;AACN,oBAAc,OAAO;AAAA,IACvB;AACA,QAAI,eAAe,QAAS,cAAa,eAAe,OAAO;AAC/D,mBAAe,UAAU,WAAW,MAAM,cAAc,MAAM,GAAG,IAAI;AAAA,EACvE;AAEA,QAAM,cAAc,iBAAiB,UAAa,YAAY;AAE9D,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ,CAAC,eAAe;AAAA,QAChB;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,uBACC,gBAAAA,MAAC,SAAI,WAAU,+BACb;AAAA,0BAAAA,MAAC,SAAI,WAAU,gCACZ;AAAA,6BAAiB,UAChB,oBAAC,UAAK,WAAU,6BAA4B,OAAO,OAAO,iBAAiB,WAAW,eAAe,QAClG,wBACH;AAAA,YAED,YAAY,iBAAiB,oBAAC,UAAK,WAAU,gCAAgC,yBAAc;AAAA,YAC3F,YAAY,oBAAC,UAAK,WAAU,4BAA2B,qBAAO;AAAA,aACjE;AAAA,UACC,YACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,cAAY,eAAe,WAAW,gBAAgB;AAAA,cACtD,SAAS,MAAM,KAAK,SAAS;AAAA,cAE5B;AAAA,+BAAe,WAAW,oBAAC,SAAM,MAAM,IAAI,IAAK,oBAAC,QAAK,MAAM,IAAI;AAAA,gBACjE,oBAAC,UAAM,yBAAe,WAAW,WAAW,eAAe,UAAU,gBAAgB,QAAO;AAAA;AAAA;AAAA,UAC9F;AAAA,WAEJ;AAAA,QAEF,oBAAC,SAAI,WAAU,+BACb;AAAA,UAAC;AAAA;AAAA,YACC,cAAY;AAAA,YACZ,OAAO;AAAA,YACP;AAAA,YACA,UAAU,CAAC;AAAA,YACX;AAAA,YACA;AAAA,YACA,OAAM;AAAA,YACN,YAAY;AAAA,cACV,aAAa;AAAA,cACb,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,qBAAqB;AAAA,cACrB,2BAA2B;AAAA,cAC3B,2BAA2B;AAAA,cAC3B,gBAAgB;AAAA,cAChB,SAAS;AAAA,YACX;AAAA,YACA,eAAe;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF,GACF;AAAA,QACA,oBAAC,UAAK,WAAU,8BAA6B,aAAU,UACpD,yBAAe,WAAW,8BAA8B,eAAe,UAAU,8BAA8B,IAClH;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC3aA,SAAS,oBAAoB;AAmBf,gBAAAG,MAoBF,QAAAC,aApBE;AAHP,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA,YAAY;AAAA,EACZ,YAAY,gBAAAD,KAAC,gBAAa,eAAY,QAAO,MAAM,IAAI;AAAA,EACvD;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,SACE,gBAAAA,KAAC,SAAI,cAAY,WAAW,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,OAC/E,0BAAAA,KAAC,QAAG,WAAU,6BACX,gBAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,UAAM,YAAY,UAAU,MAAM,SAAS;AAC3C,UAAM,UAAU,YACd,gBAAAA,KAAC,UAAK,gBAAa,QAAO,WAAU,gCAAgC,eAAK,OAAM,IAE/E,gBAAAA,KAAC,OAAE,WAAU,6BAA4B,MAAM,KAAK,QAAQ,KAAK,SAAS,KAAK,SAC5E,eAAK,OACR;AAGF,WACE,gBAAAC,MAAC,QAAG,WAAU,6BACX;AAAA,cAAQ,KAAK,gBAAAD,KAAC,UAAK,eAAY,QAAO,WAAU,kCAAkC,qBAAU;AAAA,MAC5F;AAAA,SAF4C,KAG/C;AAAA,EAEJ,CAAC,GACH,GACF;AAEJ;;;ACjDA,YAAYE,YAAW;AACvB,SAAS,UAAU,kBAAkB;AAMjC,gBAAAC,MAgDA,QAAAC,aAhDA;AAFJ,IAAM,OAAa;AAAA,EACjB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAD,KAAC,SAAI,KAAU,+BAA4B,aAAY,WAAW,GAAG,gBAAgB,SAAS,GAAI,GAAG,OAAO;AAEhH;AACA,KAAK,cAAc;AAEnB,IAAM,aAAmB;AAAA,EACvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAA,KAAC,SAAI,KAAU,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,OAAO;AAE/E;AACA,WAAW,cAAc;AAEzB,IAAM,YAAkB;AAAA,EACtB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAA,KAAC,QAAG,KAAU,WAAW,GAAG,sBAAsB,SAAS,GAAI,GAAG,OAAO;AAE7E;AACA,UAAU,cAAc;AAExB,IAAM,kBAAwB;AAAA,EAC5B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAA,KAAC,OAAE,KAAU,WAAW,GAAG,4BAA4B,SAAS,GAAI,GAAG,OAAO;AAElF;AACA,gBAAgB,cAAc;AAE9B,IAAM,cAAoB;AAAA,EACxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAA,KAAC,SAAI,KAAU,WAAW,GAAG,wBAAwB,SAAS,GAAI,GAAG,OAAO;AAEhF;AACA,YAAY,cAAc;AAE1B,IAAM,aAAmB;AAAA,EACvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAA,KAAC,SAAI,KAAU,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,OAAO;AAE/E;AACA,WAAW,cAAc;AAQzB,IAAM,cAAoB;AAAA,EACxB,CAAC,EAAE,MAAM,OAAO,aAAa,WAAW,GAAG,MAAM,GAAG,QAClD,gBAAAC,MAAC,SAAI,KAAU,WAAW,GAAG,wBAAwB,SAAS,GAAI,GAAG,OAClE;AAAA,YAAQ,gBAAAD,KAAC,SAAI,WAAU,8BAA8B,gBAAK;AAAA,IAC3D,gBAAAA,KAAC,QAAG,WAAU,+BAA+B,iBAAM;AAAA,IACnD,gBAAAA,KAAC,OAAE,WAAU,qCAAqC,uBAAY;AAAA,KAChE;AAEJ;AACA,YAAY,cAAc;AAQ1B,IAAM,aAAmB;AAAA,EACvB,CAAC,EAAE,MAAM,cAAc,UAAU,WAAW,SAAS,GAAG,MAAM,GAAG,QAC/D,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,MAAK;AAAA,MACL,UAAU;AAAA,MACV;AAAA,MACA,WAAW,CAAC,MAAM;AAChB,YAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,YAAE,eAAe;AACjB,oBAAU,CAAgD;AAAA,QAC5D;AAAA,MACF;AAAA,MACA,WAAW,GAAG,uBAAuB,YAAY,iCAAiC,SAAS;AAAA,MAC1F,GAAG;AAAA,MAEJ;AAAA,wBAAAA,MAAC,SAAI,WAAU,+BACb;AAAA,0BAAAD,KAAC,cAAW,MAAM,IAAI,WAAU,6BAA4B,eAAW,MAAC;AAAA,UACxE,gBAAAA,KAAC,UAAK,WAAU,6BAA6B,gBAAK;AAAA,WACpD;AAAA,QACC,iBAAiB,UAChB,gBAAAA,KAAC,SAAI,WAAU,+BACb,0BAAAC,MAAC,UAAK,WAAU,iCAAiC;AAAA;AAAA,UAAa;AAAA,UAAE,iBAAiB,IAAI,YAAY;AAAA,WAAW,GAC9G;AAAA;AAAA;AAAA,EAEJ;AAEJ;AACA,WAAW,cAAc;;;AClGzB,YAAYC,YAAW;AAkDjB,SAcI,OAAAC,MAdJ,QAAAC,aAAA;AA3BN,IAAM,gBAAgB,CAAC,UACrB,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AAE3E,IAAM,aAAmB;AAAA,EACvB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,cAAc,CAAC,UAA+C;AAClE,gBAAU,KAAK;AACf,UAAI,CAAC,MAAM,kBAAkB;AAC3B,yBAAiB,UAAU,cAAc,KAAK,CAAC;AAAA,MACjD;AAAA,IACF;AAEA,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA,wBAAwB,IAAI;AAAA,UAC5B,eAAe;AAAA,UACf;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACR,GAAG;AAAA,QAEH;AAAA,kBACC,gBAAAD,KAAC,UAAK,WAAU,6BAA4B,eAAY,QACrD,gBACH;AAAA,UAEF,gBAAAA,KAAC,UAAK,WAAU,8BAA8B,iBAAM;AAAA;AAAA;AAAA,IACtD;AAAA,EAEJ;AACF;AACA,WAAW,cAAc;AAOzB,IAAM,aAAmB;AAAA,EACvB,CAAC,EAAE,SAAS,QAAQ,WAAW,GAAG,MAAM,GAAG,QACzC,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,WAAW;AAAA,QACX,UAAU;AAAA,QACV;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AACA,WAAW,cAAc;;;AC9FzB,YAAYE,YAAW;AAanB,gBAAAC,YAAA;AAFJ,IAAM,QAAc;AAAA,EAClB,CAAC,EAAE,WAAW,MAAM,cAAc,MAAM,GAAG,MAAM,GAAG,QAClD,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,qBAAmB;AAAA,MACnB,WAAW,GAAG,mBAAmB,iBAAiB,SAAS;AAAA,MAC1D,GAAG;AAAA;AAAA,EACN;AAEJ;AACA,MAAM,cAAc;;;ACtBpB,YAAYC,YAAW;AACvB,SAAS,iBAAiB,4BAA4B;AA2BhD,SAKE,OAAAC,MALF,QAAAC,aAAA;AAdC,IAAM,cAAoB;AAAA,EAC/B,CAAC;AAAA,IACC,aAAa;AAAA,IACb,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GAAG,QAAQ;AACT,UAAM,SAAS,eAAe;AAC9B,UAAM,aAAa,SAAS,uBAAuB;AAEnD,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,wBAAwB,SAAS;AAAA,QAC/C,oBAAkB;AAAA,QAClB,qBAAmB;AAAA,QAEnB;AAAA,0BAAAD,KAAC,cAAW,WAAU,8BAA6B,MAAM,IAAI,eAAY,QAAO;AAAA,UAChF,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACE,GAAG;AAAA,cACJ;AAAA,cACA;AAAA,cACA,MAAK;AAAA,cACL,WAAW,GAAG,+BAA+B,cAAc;AAAA,cAC3D,aAAa,gBAAgB,SAAS,0CAAqC;AAAA,cAC3E,OAAO,UAAU,SAAS,qDAAqD;AAAA;AAAA,UACjF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AACA,YAAY,cAAc;;;AC/C1B,YAAYE,YAAW;AACvB,SAAS,OAAO,YAAY;AA2CtB,gBAAAC,MAqBA,QAAAC,aArBA;AAlCC,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,QAAM,WAAiB,cAAyB,IAAI;AACpD,QAAM,eAAe,OAAO,SAAS,YAAY;AACjD,QAAM,iBAAiB,KAAK,IAAI,OAAO,SAAS,gBAAgB,EAAE,EAAE,QAAQ,CAAC;AAC7E,QAAM,eAAe,OAAO,MAAM,YAAY,MAAM,WAAW,MAAM,YAAY,IAAI;AACrF,QAAM,oBAAoB,YACrB,YACC,OAAO,SAAS,YAAY,KAAK,QAAQ,UAAa,gBAAgB,OAAO,GAAG;AACtF,QAAM,oBAAoB,YACrB,YACC,OAAO,SAAS,YAAY,KAAK,QAAQ,UAAa,gBAAgB,OAAO,GAAG;AAEtF,QAAM,eAAe,CAAC,cAAsB;AAC1C,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,MAAO;AACZ,QAAI,cAAc,GAAI,OAAM,SAAS;AAAA,QAChC,OAAM,OAAO;AAClB,UAAM,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;AACzD,UAAM,MAAM;AAAA,EACd;AAEA,SACE,gBAAAA,MAAC,SAAI,qBAAmB,aAAa,WAAW,GAAG,wBAAwB,QAAQ,mCAAmC,SAAS,GAC7H;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACC,GAAG;AAAA;AAAA,IACN;AAAA,IACC,QACC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,MAAM,wCAAwC,cAAc,MAAM;AAAA,QAC3E,eAAY;AAAA,QAEX;AAAA;AAAA,IACH;AAAA,IAEF,gBAAAC,MAAC,SAAI,WAAU,iCACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,cAAY,YAAY,YAAY;AAAA,UACpC,UAAU;AAAA,UACV,SAAS,MAAM,aAAa,EAAE;AAAA,UAE9B,0BAAAA,KAAC,SAAM,eAAY,QAAO,MAAM,IAAI;AAAA;AAAA,MACtC;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,cAAY,YAAY,YAAY;AAAA,UACpC,UAAU;AAAA,UACV,SAAS,MAAM,aAAa,CAAC;AAAA,UAE7B,0BAAAA,KAAC,QAAK,eAAY,QAAO,MAAM,IAAI;AAAA;AAAA,MACrC;AAAA,OACF;AAAA,KACF;AAEJ;;;ACDQ,SACE,OAAAE,MADF,QAAAC,aAAA;AAvDD,SAAS,OAAO,OAAoB;AACzC,QAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,IACX;AAAA,IACA,aAAa;AAAA,IACb,cAAc,CAAC,UAAU;AAAA,IACzB,QAAQ;AAAA,EACV,IAAI;AACJ,QAAM,OAAO,KAAK,IAAI,MAAM,KAAK,CAAC;AAClC,QAAM,YAAY,UAAU,IACvB,MAA2B,QAC5B,CAAE,MAA4B,KAAK;AACvC,QAAM,aAAa,MAAM,UAAU,CAAC,GAAG,KAAK,GAAG;AAC/C,QAAM,cAAc,UAAU,IAAI,MAAM,UAAU,CAAC,GAAG,YAAY,GAAG,IAAI;AACzE,QAAM,iBAAiB,UAAU,IAAI,aAAa;AAClD,QAAM,eAAe;AACrB,QAAM,yBAA0B,iBAAiB,OAAO,OAAQ;AAChE,QAAM,uBAAwB,eAAe,OAAO,OAAQ;AAE5D,QAAM,oBAAoB,CAAC,UAAkB;AAC3C;AAAC,IAAC,MAA4B,cAAc,MAAM,OAAO,KAAK,GAAG,CAAC;AAAA,EACpE;AACA,QAAM,mBAAmB,CAAC,WAAmB,cAAsB;AACjE;AAAC,IAAC,MAA2B,cAAc;AAAA,MACzC,MAAM,WAAW,KAAK,SAAS;AAAA,MAC/B,MAAM,WAAW,WAAW,GAAG;AAAA,IACjC,CAAC;AAAA,EACH;AACA,QAAM,mBAAmB,CAAC,OAA8C,UAAkB;AACxF,UAAM,WAAW,OAAO;AACxB,UAAM,cAAsC;AAAA,MAC1C,WAAW,CAAC;AAAA,MACZ,WAAW,CAAC;AAAA,MACZ,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,UAAU,CAAC;AAAA,MACX,QAAQ;AAAA,IACV;AAEA,QAAI,MAAM,QAAQ,OAAQ,QAAO;AACjC,QAAI,MAAM,QAAQ,MAAO,QAAO;AAChC,QAAI,EAAE,MAAM,OAAO,aAAc,QAAO;AACxC,WAAO,QAAQ,YAAY,MAAM,GAAG;AAAA,EACtC;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,kBAAkB,YAAY,4BAA4B,SAAS;AAAA,MACjF,iBAAe,YAAY;AAAA,MAC3B,cAAY;AAAA,MAEX;AAAA,sBACC,gBAAAA,MAAC,SAAI,WAAU,yBAAwB,eAAY,QACjD;AAAA,0BAAAD,KAAC,YAAQ,sBAAY,UAAU,GAAE;AAAA,UAChC,UAAU,KAAK,gBAAAA,KAAC,YAAQ,sBAAY,WAAW,GAAE;AAAA,WACpD;AAAA,QAEF,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,oCAAoC,GAAG,qBAAqB;AAAA,cAC5D,kCAAkC,GAAG,mBAAmB;AAAA,YAC1D;AAAA,YAEA;AAAA,8BAAAD,KAAC,UAAK,WAAU,wBAAuB,eAAY,QAAO;AAAA,cAC1D,gBAAAA,KAAC,UAAK,WAAU,4BAA2B,eAAY,QAAO;AAAA,cAC9D,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,cAAY,UAAU,IACjB,MAA2B,kBAAkB,gBAC7C,MAA4B,aAAa;AAAA,kBAC9C;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,UAAU,CAAC,UAAU;AACnB,0BAAM,YAAY,MAAM,cAAc;AACtC,wBAAI,UAAU,EAAG,kBAAiB,KAAK,IAAI,WAAW,WAAW,GAAG,WAAW;AAAA,wBAC1E,mBAAkB,SAAS;AAAA,kBAClC;AAAA,kBACA,WAAW,CAAC,UAAU;AACpB,0BAAM,YAAY,iBAAiB,OAAO,UAAU;AACpD,wBAAI,cAAc,KAAM;AACxB,0BAAM,eAAe;AACrB,wBAAI,UAAU,EAAG,kBAAiB,KAAK,IAAI,WAAW,WAAW,GAAG,WAAW;AAAA,wBAC1E,mBAAkB,SAAS;AAAA,kBAClC;AAAA,kBACA;AAAA,kBACA,MAAK;AAAA,kBACL,OAAO;AAAA;AAAA,cACT;AAAA,cACC,UAAU,KACT,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,cAAa,MAA2B,kBAAkB;AAAA,kBAC1D;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,UAAU,CAAC,UAAU;AACnB,0BAAM,YAAY,MAAM,cAAc;AACtC,qCAAiB,YAAY,KAAK,IAAI,WAAW,UAAU,CAAC;AAAA,kBAC9D;AAAA,kBACA,WAAW,CAAC,UAAU;AACpB,0BAAM,YAAY,iBAAiB,OAAO,WAAW;AACrD,wBAAI,cAAc,KAAM;AACxB,0BAAM,eAAe;AACrB,qCAAiB,YAAY,KAAK,IAAI,WAAW,UAAU,CAAC;AAAA,kBAC9D;AAAA,kBACA;AAAA,kBACA,MAAK;AAAA,kBACL,OAAO;AAAA;AAAA,cACT;AAAA;AAAA;AAAA,QAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,MAAM,OAAe,SAAiB,SAAiB;AAC9D,SAAO,KAAK,IAAI,SAAS,KAAK,IAAI,SAAS,KAAK,CAAC;AACnD;;;ACvJA,YAAYE,YAAW;AACvB,SAAS,KAAK,gBAAgB;AA0BxB,SAKE,OAAAC,MALF,QAAAC,aAAA;AAhBN,IAAM,gBAAsB;AAAA,EAC1B,CACE;AAAA,IACE;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,CAAC,iBAAiB,kBAAkB,IAAU,gBAAS,KAAK;AAClE,UAAM,cAAc,kBAAkB,oBAAoB;AAE1D,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,0BAA0B,SAAS;AAAA,QACjD,qBAAmB;AAAA,QACnB,yBAAuB,kBAAkB,KAAK;AAAA,QAE9C;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACE,GAAG;AAAA,cACJ;AAAA,cACA;AAAA,cACA,WAAU;AAAA,cACV;AAAA,cACA,MAAM,kBAAkB,SAAS;AAAA;AAAA,UACnC;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,cAAY;AAAA,cACZ,gBAAc;AAAA,cACd;AAAA,cACA,OAAO;AAAA,cACP,SAAS,MAAM,mBAAmB,CAAC,YAAY,CAAC,OAAO;AAAA,cAEtD,4BACG,gBAAAA,KAAC,YAAS,eAAY,QAAO,MAAM,IAAI,IACvC,gBAAAA,KAAC,OAAI,eAAY,QAAO,MAAM,IAAI;AAAA;AAAA,UACxC;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AACA,cAAc,cAAc;;;ACzD5B,YAAYE,YAAW;AAYnB,gBAAAC,aAAA;AAFJ,IAAM,QAAc;AAAA,EAClB,CAAC,EAAE,WAAW,cAAc,MAAM,GAAG,MAAM,GAAG,QAC5C,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,qBAAmB;AAAA,MACnB,WAAW,GAAG,iBAAiB,SAAS;AAAA,MACvC,GAAG;AAAA;AAAA,EACN;AAEJ;AACA,MAAM,cAAc;;;ACpBpB,YAAYC,YAAW;AACvB,SAAS,aAAa,aAAa,YAAY,eAAe;AAwBxD,SAOa,OAAAC,OAPb,QAAAC,cAAA;AAbN,IAAM,eAAe;AAAA,EACnB,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AACT;AAEA,IAAM,QAAc;AAAA,EAClB,CAAC,EAAE,WAAW,UAAU,WAAW,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ;AACrE,UAAM,cAAc,aAAa,OAAO;AAExC,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,WAAW,GAAG,iBAAiB,kBAAkB,OAAO,IAAI,SAAS;AAAA,QACpE,GAAG;AAAA,QAEJ;AAAA,0BAAAD,MAAC,UAAK,WAAU,sBAAqB,eAAW,MAC7C,kBAAQ,gBAAAA,MAAC,eAAY,MAAM,IAAI,GAClC;AAAA,UACA,gBAAAA,MAAC,SAAI,WAAU,yBAAyB,UAAS;AAAA;AAAA;AAAA,IACnD;AAAA,EAEJ;AACF;AACA,MAAM,cAAc;AAEpB,IAAM,aAAmB;AAAA,EACvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAA,MAAC,QAAG,KAAU,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,OAAO;AAE9E;AACA,WAAW,cAAc;AAEzB,IAAM,mBAAyB;AAAA,EAC7B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAA,MAAC,SAAI,KAAU,WAAW,GAAG,6BAA6B,SAAS,GAAI,GAAG,OAAO;AAErF;AACA,iBAAiB,cAAc;;;ACrD/B,YAAYE,aAAW;AACvB,SAAS,oBAAoB;AAC7B,SAAS,eAAAC,cAAa,eAAAC,cAAa,cAAAC,aAAY,OAAO,WAAAC,gBAAe;AA4EjE,SAyBa,OAAAC,OAzBb,QAAAC,cAAA;AA/CJ,IAAMC,gBAAe;AAAA,EACnB,SAASC;AAAA,EACT,MAAMA;AAAA,EACN,SAASC;AAAA,EACT,SAASC;AAAA,EACT,OAAOC;AACT;AAEO,IAAM,QAAc,mBAAuC,SAASC,OACzE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,GACA,KACA;AACA,QAAM,CAAC,QAAQ,SAAS,IAAU,iBAAS,KAAK;AAChD,QAAM,aAAmB,eAAO,SAAS;AACzC,QAAM,cAAcL,cAAa,OAAO;AACxC,QAAM,mBAAmB,aAAa,SACjC,YAAY,UAAU,OAAO,MAC9B;AAEJ,EAAM,kBAAU,MAAM;AACpB,eAAW,UAAU;AAAA,EACvB,GAAG,CAAC,SAAS,CAAC;AAEd,EAAM,kBAAU,MAAM;AACpB,QAAI,CAAC,WAAW,WAAW,UAAU,qBAAqB,QAAQ,oBAAoB,EAAG;AACzF,UAAM,UAAU,OAAO,WAAW,MAAM,WAAW,UAAU,GAAG,gBAAgB;AAChF,WAAO,MAAM,OAAO,aAAa,OAAO;AAAA,EAC1C,GAAG,CAAC,QAAQ,gBAAgB,CAAC;AAE7B,QAAM,mBAAmB,SAAS,YAAY,UAAU,UAAU;AAElE,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAY;AAAA,MACZ,aAAW,qBAAqB,UAAU,cAAc;AAAA,MACxD,WAAW,GAAG,iBAAiB,kBAAkB,OAAO,IAAI,SAAS;AAAA,MACrE,MAAM;AAAA,MACN,eAAe,CAAC,UAAU;AACxB,wBAAgB,KAAK;AACrB,YAAI,CAAC,MAAM,cAAc,SAAS,MAAM,aAAa,EAAG,WAAU,KAAK;AAAA,MACzE;AAAA,MACA,gBAAgB,CAAC,UAAU;AACzB,yBAAiB,KAAK;AACtB,kBAAU,IAAI;AAAA,MAChB;AAAA,MACA,gBAAgB,CAAC,UAAU;AACzB,yBAAiB,KAAK;AACtB,kBAAU,IAAI;AAAA,MAChB;AAAA,MACA,gBAAgB,CAAC,UAAU;AACzB,yBAAiB,KAAK;AACtB,kBAAU,KAAK;AAAA,MACjB;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,wBAAAD,MAAC,UAAK,eAAY,QAAO,WAAU,uBAChC,kBAAQ,gBAAAA,MAAC,eAAY,MAAM,IAAI,GAClC;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,0BAA0B,UAAS;AAAA,QACjD,UAAU,gBAAAA,MAAC,SAAI,WAAU,yBAAyB,kBAAO;AAAA,QAC1D,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,cAAY;AAAA,YACZ,WAAU;AAAA,YACV,SAAS;AAAA,YACT,MAAK;AAAA,YAEL,0BAAAA,MAAC,SAAM,eAAY,QAAO,MAAM,IAAI;AAAA;AAAA,QACtC;AAAA;AAAA;AAAA,EACF;AAEJ,CAAC;AAEM,IAAM,gBAAsB,mBAA+C,SAASQ,eACzF,EAAE,UAAU,WAAW,SAAS,MAAM,WAAW,cAAc,GAAG,MAAM,GACxE,KACA;AACA,QAAM,WACJ,gBAAAR;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,GAAG,0BAA0B,2BAA2B,QAAQ,IAAI,SAAS;AAAA,MACxF,iBAAe;AAAA,MACd,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAGF,MAAI,CAAC,UAAU,OAAO,aAAa,YAAa,QAAO;AACvD,SAAO,aAAa,UAAU,SAAS,IAAI;AAC7C,CAAC;;;AC5HG,SAQI,OAAAS,OARJ,QAAAC,cAAA;AAFG,SAAS,OAAO,EAAE,SAAS,UAAU,OAAO,UAAU,GAAgB;AAC3E,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,gBAAc;AAAA,MACd,WAAW,GAAG,kBAAkB,SAAS;AAAA,MACzC,SAAS,MAAM,SAAS,CAAC,OAAO;AAAA,MAEhC;AAAA,wBAAAD,MAAC,UAAK,WAAW,GAAG,wBAAwB,WAAW,+BAA+B,GACpF,0BAAAA,MAAC,UAAK,WAAW,GAAG,wBAAwB,WAAW,+BAA+B,GAAG,GAC3F;AAAA,QACC,SAAS,gBAAAA,MAAC,UAAK,WAAU,wBAAwB,iBAAM;AAAA;AAAA;AAAA,EAC1D;AAEJ;;;ACzBA,YAAYE,aAAW;AACvB,SAAS,gBAAAC,qBAAoB;;;ACD7B,SAAS,aAAAC,YAAW,UAAAC,eAAc;AAuBlC,IAAI,SAAS;AACb,IAAM,QAAuB,CAAC;AAE9B,SAAS,aAAa,OAA0B;AAC9C,MAAI,IAAI;AACR,SAAO,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,YAAY,MAAM,UAAU;AAC9D,QAAI,MAAM,CAAC,EAAE,aAAa,MAAM,SAAU;AAC1C;AAAA,EACF;AACA,QAAM,OAAO,GAAG,GAAG,KAAK;AAC1B;AAEA,SAAS,OAAO,IAAkB;AAChC,QAAM,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;AAC9C,MAAI,OAAO,EAAG,OAAM,OAAO,KAAK,CAAC;AACnC;AAEA,IAAI,oBAAoB;AAExB,SAAS,uBAA6B;AACpC,MAAI,kBAAmB;AACvB,sBAAoB;AAEpB,SAAO;AAAA,IACL;AAAA,IACA,CAAC,MAAqB;AACpB,UAAI,EAAE,QAAQ,SAAU;AACxB,UAAI,MAAM,WAAW,EAAG;AAExB,QAAE,eAAe;AACjB,QAAE,yBAAyB;AAE3B,YAAM,MAAM,MAAM,CAAC;AACnB,UAAI,QAAQ;AAAA,IACd;AAAA,IACA,EAAE,SAAS,KAAK;AAAA,EAClB;AACF;AASO,SAAS,iBACd,UACA,SACA,UAAU,MACJ;AACN,QAAM,aAAaA,QAAO,OAAO;AACjC,aAAW,UAAU;AAErB,EAAAD,WAAU,MAAM;AACd,QAAI,CAAC,QAAS;AAEd,yBAAqB;AAErB,UAAM,KAAK;AACX,UAAM,QAAqB;AAAA,MACzB;AAAA,MACA;AAAA,MACA,SAAS,MAAM,WAAW,QAAQ;AAAA,IACpC;AACA,iBAAa,KAAK;AAElB,WAAO,MAAM,OAAO,EAAE;AAAA,EACxB,GAAG,CAAC,UAAU,OAAO,CAAC;AACxB;;;AC5FA,SAAS,aAAiC;AAsChC,SACE,OAAAE,OADF,QAAAC,cAAA;AArBV,IAAM,OAAO;AACb,IAAM,SAAS;AACf,IAAM,QAAQ;AAGP,SAAS,SAAS,EAAE,OAAO,IAAI,OAAO,WAAW,WAAW,OAAO,QAAQ,WAAW,aAAa,MAAM,GAAkB;AAChI,QAAM,QAAQ,MAAM,EAAE,QAAQ,mBAAmB,EAAE;AACnD,QAAM,SAAS,0BAA0B,KAAK;AAC9C,QAAM,aAAa,8BAA8B,KAAK;AACtD,QAAM,SAAS,OAAO,SAAS,WAAW,GAAG,IAAI,OAAO;AAExD,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,cAAc;AAAA,MAC3B,cAAY,aAAa,SAAY;AAAA,MACrC,WAAW,GAAG,qBAAqB,sBAAsB,IAAI,IAAI,SAAS;AAAA,MAC1E,MAAM,aAAa,SAAY;AAAA,MAC/B;AAAA,MAEA,0BAAAC,OAAC,SAAI,eAAY,QAAO,MAAK,QAAO,SAAQ,cAAa,OAAO,EAAE,QAAQ,OAAO,OAAO,GACtF;AAAA,wBAAAA,OAAC,UACC;AAAA,0BAAAA,OAAC,oBAAe,IAAI,YAAY,IAAG,MAAK,IAAG,QAAO,IAAG,KAAI,IAAG,QAAO,eAAc,kBAC/E;AAAA,4BAAAD,MAAC,UAAK,WAAU,iCAAgC,QAAO,KAAI;AAAA,YAC3D,gBAAAA,MAAC,UAAK,WAAU,+BAA8B,QAAO,KAAI;AAAA,aAC3D;AAAA,UACA,gBAAAC,OAAC,oBAAe,IAAI,GAAG,UAAU,UAAU,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KACjE;AAAA,4BAAAD,MAAC,UAAK,QAAO,OAAM,WAAU,SAAQ,aAAY,KAAI;AAAA,YACrD,gBAAAA,MAAC,UAAK,QAAO,OAAM,WAAU,SAAQ,aAAY,QAAO;AAAA,YACxD,gBAAAA,MAAC,UAAK,QAAO,OAAM,WAAU,SAAQ,aAAY,KAAI;AAAA,aACvD;AAAA,UACA,gBAAAC,OAAC,cAAS,IAAI,QAAQ;AAAA,4BAAAD,MAAC,UAAK,GAAG,MAAM;AAAA,YAAE,gBAAAA,MAAC,UAAK,GAAG,QAAQ;AAAA,YAAE,gBAAAA,MAAC,UAAK,GAAG,OAAO;AAAA,aAAE;AAAA,WAC9E;AAAA,QACA,gBAAAA,MAAC,UAAK,GAAG,QAAQ,MAAM,QAAQ,UAAU,KAAK;AAAA,QAC9C,gBAAAA,MAAC,UAAK,GAAG,OAAO,MAAM,QAAQ,UAAU,KAAK;AAAA,QAC7C,gBAAAA,MAAC,UAAK,GAAG,MAAM,MAAM,QAAQ,UAAU,KAAK;AAAA,QAC5C,gBAAAA,MAAC,OAAE,UAAU,QAAQ,MAAM,KACzB,0BAAAA,MAAC,OAAE,WAAU,iCAAgC,WAAU,iCACrD,0BAAAA,MAAC,UAAK,WAAU,4BAA2B,GAAE,QAAO,GAAE,QAAO,OAAM,OAAM,QAAO,OAAM,MAAM,QAAQ,UAAU,WAAW,GAC3H,GACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;;;AF1BI,gBAAAE,OAuBI,QAAAC,cAvBJ;AAFJ,IAAM,YAAY,MAChB,gBAAAD,MAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAChE,0BAAAA,MAAC,UAAK,GAAE,wBAAuB,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,GACtH;AAGK,SAAS,MAAM,EAAE,MAAM,SAAS,OAAO,UAAU,QAAQ,MAAM,QAAQ,SAAS,gBAAgB,OAAO,OAAO,MAAM,UAAU,OAAO,eAAe,WAAW,aAAa,OAAO,UAAU,GAAe;AACjN,QAAM,CAAC,cAAc,eAAe,IAAU,iBAAS,KAAK;AAC5D,mBAAiB,IAAI,SAAS,QAAQ,CAAC,WAAW,CAAC,aAAa;AAEhE,EAAM,kBAAU,MAAM;AACpB,QAAI,KAAM,iBAAgB,KAAK;AAAA,EACjC,GAAG,CAAC,IAAI,CAAC;AAET,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,YAAY,wBAAwB,IAAI;AAC9C,QAAM,cAAc,SAAS,gCAAgC,OAAO,8BAA8B;AAElG,SAAOE;AAAA,IACL,gBAAAF,MAAC,SAAI,WAAU,yBAAwB,SAAS,WAAW,gBAAgB,SAAY,SACrF,0BAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,uBAAuB,WAAW,aAAa,cAAc,mCAAmC,SAAS;AAAA,QACvH,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,QAElC;AAAA,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,cAAc;AAAA,gBACd,cAAc,gBAAgB;AAAA,cAChC;AAAA,cAEA;AAAA,gCAAAD,MAAC,QAAG,WAAW,GAAG,uBAAuB,UAAU,+BAA+B,QAAQ,2BAA2B,GAClH,iBACH;AAAA,gBACC,CAAC,WACA,gBAAAA,MAAC,YAAO,MAAK,UAAS,SAAS,SAAS,OAAM,SAAQ,UAAU,eAAe,WAAU,uBACvF,0BAAAA,MAAC,aAAU,GACb;AAAA;AAAA;AAAA,UAEJ;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,aAAW,WAAW;AAAA,cACtB,WAAW;AAAA,gBACT;AAAA,gBACA,SAAS,QAAQ;AAAA,gBACjB,WAAW;AAAA,gBACX,cAAc;AAAA,cAChB;AAAA,cACA,UAAU,aAAa,CAAC,UAAU,gBAAgB,MAAM,cAAc,YAAY,CAAC,IAAI;AAAA,cAEtF,oBAAU,gBAAAA,MAAC,YAAS,OAAO,cAAc,IAAK;AAAA;AAAA,UACjD;AAAA,UACC,UACC,gBAAAA,MAAC,SAAI,WAAW,GAAG,wBAAwB,cAAc,+BAA+B,GACrF,kBACH;AAAA;AAAA;AAAA,IAEJ,GACF;AAAA,IACA,SAAS;AAAA,EACX;AACF;;;AGrEU,gBAAAG,OAUA,QAAAC,cAVA;AALH,SAAS,UAAa,EAAE,SAAS,MAAM,cAAc,QAAQ,OAAO,MAAM,UAAU,GAAsB;AAC/G,SACE,gBAAAD,MAAC,SAAI,WAAW,GAAG,qBAAqB,sBAAsB,IAAI,IAAI,SAAS,GAC7E,0BAAAC,OAAC,SAAI,WAAU,6BACZ;AAAA,cACC,gBAAAD,MAAC,SAAI,WAAU,4BACZ,kBACH;AAAA,IAGD,KAAK,WAAW,IACf,gBAAAA,MAAC,SAAI,WAAU,2BACZ,0BAAgB,WACnB,IAEA,gBAAAC,OAAC,WAAM,WAAU,2BACf;AAAA,sBAAAD,MAAC,WACC,0BAAAA,MAAC,QAAG,WAAU,+BACX,kBAAQ,IAAI,CAAC,QACZ,gBAAAA,MAAC,QAAiB,WAAU,wBAAuB,OAAO,EAAE,OAAO,IAAI,MAAM,GAC1E,cAAI,UADE,IAAI,GAEb,CACD,GACH,GACF;AAAA,MACA,gBAAAA,MAAC,WACE,eAAK,IAAI,CAAC,KAAK,aACd,gBAAAA;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UAET,kBAAQ,IAAI,CAAC,QACZ,gBAAAA,MAAC,QAAiB,WAAU,wBAAuB,OAAO,EAAE,OAAO,IAAI,MAAM,GAC1E,cAAI,OAAO,KAAK,QAAQ,KADlB,IAAI,GAEb,CACD;AAAA;AAAA,QAPI;AAAA,MAQP,CACD,GACH;AAAA,OACF;AAAA,KAEJ,GACF;AAEJ;;;AChEA,YAAYE,aAAW;AACvB,SAAS,aAAa,aAAa,gBAAAC,eAAc,iBAAiB;AAiMxD,qBAAAC,WAEI,OAAAC,OAFJ,QAAAC,cAAA;AAtJV,IAAM,SAAS;AAER,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,qBAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,MAAM,YAAY;AAAA,EAClB;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAAA,EAChB,WAAW;AACb,GAAkB;AAChB,QAAM,OAAO,eAAe;AAC5B,QAAM,CAAC,MAAM,OAAO,IAAU,iBAAS,KAAK;AAC5C,QAAM,aAAmB,eAA0B,IAAI;AACvD,QAAM,WAAiB,eAAuB,IAAI;AAClD,QAAM,CAAC,YAAY,aAAa,IAAU,iBAA8B,CAAC,CAAC;AAE1E,QAAM,eAAe,MAAM;AAAA,IACzB,CAAC,SACC,KAAK,QAAQ,QACZ,KAAK,eAAe,SAClB,OAAO,KAAK,gBAAgB,WAAW,KAAK,gBAAgB,KAAK;AAAA,EACxE;AACA,MAAI,aAAa,WAAW,EAAG,QAAO;AAEtC,QAAM,kBAAkB,aAAa,OAAO,CAAC,MAAM,EAAE,SAAS,QAAQ;AACtE,QAAM,WAAW,MAAM,KAAK,CAAC,MAAM,EAAE,UAAU,iBAAiB,EAAE,SAAS,QAAQ,KAAK,gBAAgB,CAAC,KAAK,aAAa,CAAC;AAC5H,QAAM,OAAO,cAAc;AAC3B,QAAM,wBAAwB,cAAc,UAAU,cAAc;AACpE,QAAM,cAAc,cAAc,OAC9B,YACA,cAAc,SACZ,cACA,cAAc,UACZC,gBACA;AAER,EAAM,wBAAgB,MAAM;AAC1B,QAAI,CAAC,QAAQ,CAAC,WAAW,WAAW,CAAC,SAAS,QAAS;AAEvD,UAAM,cAAc,WAAW,QAAQ,sBAAsB;AAC7D,UAAM,YAAY,SAAS,QAAQ,sBAAsB;AACzD,UAAM,KAAK,OAAO;AAClB,UAAM,KAAK,OAAO;AAElB,QAAI;AACJ,QAAI;AACJ,QAAI;AAEJ,QAAI,uBAAuB;AACzB,YAAM,aAAa,KAAK,YAAY,QAAQ;AAC5C,YAAM,YAAY,YAAY,OAAO;AACrC,UAAI,aAAa,cAAc;AAC/B,UAAI,cAAc,UAAU,QAAQ,cAAc,YAAY,YAAY;AACxE,qBAAa;AAAA,MACf,WAAW,CAAC,cAAc,UAAU,QAAQ,aAAa,aAAa,WAAW;AAC/E,qBAAa;AAAA,MACf;AAEA,aAAO,aACH,YAAY,QAAQ,SACpB,EAAE,UAAU,QAAQ;AACxB,YAAM;AACN,YAAM,cAAc,YAAY,MAAM,UAAU;AAChD,UAAI,cAAc,KAAK,OAAQ,QAAO,eAAe,KAAK;AAC1D,UAAI,YAAY,MAAM,MAAM,OAAQ,QAAO,UAAU,YAAY,MAAM;AAAA,IACzE,OAAO;AACL,YAAM,aAAa,KAAK,YAAY,SAAS;AAC7C,YAAM,aAAa,YAAY,MAAM;AACrC,UAAI,aAAa;AAEjB,UAAI,cAAc,UAAU,SAAS,cAAc,aAAa,YAAY;AAC1E,qBAAa;AAAA,MACf,WAAW,CAAC,cAAc,UAAU,SAAS,cAAc,aAAa,YAAY;AAClF,qBAAa;AAAA,MACf;AAEA,YAAM,aACF,EAAE,UAAU,SAAS,UACrB,YAAY,SAAS;AAEzB,UAAI,UAAU,SAAS;AACrB,gBAAQ;AACR,cAAM,YAAY,YAAY,QAAQ,UAAU;AAChD,YAAI,YAAY,GAAG;AACjB,kBAAQ;AACR,iBAAO;AAAA,QACT;AAAA,MACF,OAAO;AACL,eAAO;AACP,cAAM,aAAa,YAAY,OAAO,UAAU;AAChD,YAAI,aAAa,IAAI;AACnB,iBAAO;AACP,kBAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,kBAAc,EAAE,KAAK,MAAM,MAAM,CAAC;AAAA,EACpC,GAAG,CAAC,MAAM,WAAW,uBAAuB,MAAM,KAAK,CAAC;AAExD,EAAM,kBAAU,MAAM;AACpB,QAAI,CAAC,KAAM;AACX,UAAM,qBAAqB,CAAC,MAAkB;AAC5C,YAAM,SAAS,EAAE;AACjB,UAAI,WAAW,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,SAAS,MAAM,EAAG;AAChF,cAAQ,KAAK;AAAA,IACf;AACA,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,WAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,EAC3E,GAAG,CAAC,IAAI,CAAC;AAET,SACE,gBAAAD,OAAC,SAAI,qBAAmB,MAAM,WAAW,GAAG,oBAAoB,SAAS,GACvE;AAAA,oBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,qBAAmB;AAAA,QACnB,MAAK;AAAA,QACL;AAAA,QACA,iBAAc;AAAA,QACd,iBAAe;AAAA,QACf,cAAY;AAAA,QACZ,SAAS,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;AAAA,QAChC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA,6BAA6B,IAAI;AAAA,UACjC,6BAA6B,cAAc;AAAA,UAC3C,6BAA6B,kBAAkB;AAAA,UAC/C,YAAY;AAAA,UACZ;AAAA,QACF;AAAA,QAEC;AAAA,4BAAkB,OACjB,iBAEA,gBAAAA,OAAAF,WAAA,EACG;AAAA,qBAAS,QAAQ,QAChB,gBAAAC,MAAC,UAAK,WAAU,wDAAwD,mBAAS,MAAK;AAAA,YAEvF,SAAS,eAAe,SACtB,OAAO,SAAS,gBAAgB,YAAY,SAAS,gBAAgB,OACpE,gBAAAA,MAAC,UAAK,WAAU,kCAAkC,mBAAS,aAAY;AAAA,aAE7E;AAAA,UAED,CAAC,aAAa,CAAC,YACd,gBAAAA,MAAC,UAAK,WAAU,4BAA2B,eAAW,MACpD,0BAAAA,MAAC,eAAY,MAAM,SAAS,OAAO,KAAK,IAAI,GAC9C;AAAA;AAAA;AAAA,IAEJ;AAAA,IAEC,QACC,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,MAAK;AAAA,QACL,cAAY;AAAA,QACZ,WAAW,GAAG,0BAA0B,2BAA2B,IAAI,IAAI,cAAc;AAAA,QACzF,OAAO;AAAA,QAEN;AAAA,mBAAS,QACR,gBAAAD,MAAC,SAAI,WAAU,0BAA0B,iBAAM;AAAA,UAEhD,aAAa,IAAI,CAAC,MAAM,UAAU;AACjC,kBAAM,aAAa,KAAK,WAAW,QAAQ,gBAAAA,MAAC,SAAI,WAAU,8BAA6B,IAAK;AAC5F,kBAAM,gBAAgB,KAAK,WAAW,WAAW,gBAAAA,MAAC,SAAI,WAAU,8BAA6B,IAAK;AAClG,gBAAI,KAAK,SAAS,UAAU;AAC1B,qBACE,gBAAAC,OAAO,kBAAN,EACE;AAAA;AAAA,gBACD,gBAAAD,MAAC,SAAI,MAAK,gBAAe,WAAU,0BAChC,eAAK,aACR;AAAA,gBACC;AAAA,mBALkB,UAAU,KAAK,EAMpC;AAAA,YAEJ;AACA,kBAAM,aAAa,KAAK,UAAU;AAClC,mBACE,gBAAAC,OAAO,kBAAN,EACE;AAAA;AAAA,cACD,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,iBAAe;AAAA,kBACf,SAAS,MAAM;AACb,6BAAS,KAAK,KAAK;AACnB,wBAAI,cAAe,SAAQ,KAAK;AAAA,kBAClC;AAAA,kBACA,WAAU;AAAA,kBAET;AAAA,yBAAK,QAAQ,QACZ,gBAAAD,MAAC,UAAK,WAAU,yBAAyB,eAAK,MAAK;AAAA,oBAEpD,KAAK,eAAe,SAClB,OAAO,KAAK,gBAAgB,YAAY,KAAK,gBAAgB,OAC5D,gBAAAA,MAAC,UAAK,WAAU,gCACb,eAAK,aACR;AAAA,oBAEH,KAAK,YAAY,QAChB,gBAAAA,MAAC,UAAK,WAAU,6BAA6B,eAAK,UAAS;AAAA;AAAA;AAAA,cAE/D;AAAA,cACC;AAAA,iBAzBkB,KAAK,KA0B1B;AAAA,UAEJ,CAAC;AAAA;AAAA;AAAA,IACH;AAAA,KAEJ;AAEJ;;;AC/QA,YAAYG,aAAW;AAcnB,gBAAAC,aAAA;AAFJ,IAAM,OAAa;AAAA,EACjB,CAAC,EAAE,WAAW,QAAQ,WAAW,OAAO,MAAM,GAAG,MAAM,GAAG,QACxD,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,GAAG,gBAAgB,iBAAiB,KAAK,IAAI,iBAAiB,IAAI,IAAI,SAAS;AAAA,MACzF,GAAG;AAAA;AAAA,EACN;AAEJ;AACA,KAAK,cAAc;;;ACrBnB,YAAYC,aAAW;AAYnB,gBAAAC,aAAA;AAFJ,IAAM,OAAa;AAAA,EACjB,CAAC,EAAE,WAAW,OAAO,WAAW,GAAG,MAAM,GAAG,QAC1C,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,+BAA6B,SAAS,YAAY,cAAc;AAAA,MAChE,WAAW,GAAG,gBAAgB,iBAAiB,IAAI,IAAI,SAAS;AAAA,MAC/D,GAAG;AAAA;AAAA,EACN;AAEJ;AACA,KAAK,cAAc;;;ACnBnB,SAAS,YAAY,cAAc,iBAAiB,SAAAC,cAAa;AA2CzD,SACE,OAAAC,OADF,QAAAC,cAAA;AAjCD,SAAS,SAAS;AAAA,EACvB;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAkB;AAChB,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,QACT;AAAA,SACC,WAAW,kBAAkB;AAAA,QAC9B,iBAAiB;AAAA,QACjB;AAAA,MACF;AAAA,MACA,MAAK;AAAA,MACL,MAAK;AAAA,MACL,gBAAc,gBAAgB,UAAU;AAAA,MACxC;AAAA,MACA,SAAS,CAAC,UAAU;AAClB,kBAAU,KAAK;AACf,YAAI,CAAC,MAAM,iBAAkB,iBAAgB,iBAAiB,CAAC,OAAO;AAAA,MACxE;AAAA,MACA,WAAW,CAAC,UAAU;AACpB,oBAAY,KAAK;AACjB,YAAI,MAAM,QAAQ,OAAO,MAAM,QAAQ,QAAS,OAAM,gBAAgB;AAAA,MACxE;AAAA,MAEC,0BACC,gBAAAC,OAAC,UAAK,WAAU,wCAAuC,eAAY,QACjE;AAAA,wBAAAD,MAAC,gBAAa,MAAM,IAAI;AAAA,QACxB,gBAAAA,MAACE,QAAA,EAAM,WAAU,wCAAuC,MAAM,IAAI;AAAA,SACpE,IACE,UACF,gBAAAF,MAAC,mBAAgB,eAAY,QAAO,MAAM,IAAI,IAE9C,gBAAAA,MAAC,gBAAa,eAAY,QAAO,MAAM,IAAI;AAAA;AAAA,EAE/C;AAEJ;;;AClCM,gBAAAG,OAWA,QAAAC,cAXA;AAXC,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAe;AACb,SACE,gBAAAA,OAAC,WAAM,WAAW,GAAG,iBAAiB,YAAY,2BAA2B,SAAS,GACpF;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA,WAAU;AAAA,QACV;AAAA,QACA,UAAU,CAAC,UAAU,kBAAkB,MAAM,cAAc,OAAO;AAAA,QAClE,MAAK;AAAA;AAAA,IACP;AAAA,IACA,gBAAAA,MAAC,UAAK,eAAY,QAAO,WAAU,0BACjC,0BAAAA,MAAC,UAAK,WAAU,sBAAqB,GACvC;AAAA,IACA,gBAAAC,OAAC,UAAK,WAAU,0BACd;AAAA,sBAAAD,MAAC,UAAK,WAAU,wBAAwB,iBAAM;AAAA,MAC7C,eAAe,gBAAAA,MAAC,UAAK,WAAU,8BAA8B,uBAAY;AAAA,OAC5E;AAAA,KACF;AAEJ;;;ACtCA,SAAS,WAAAE,UAAS,YAAAC,iBAAgC;AAClD,SAAS,SAAS,WAAW,oBAAoB;AAwM9B,gBAAAC,OAsDG,QAAAC,cAtDH;AAjHZ,SAAS,cAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,CAAC,aAAa,cAAc,IAAIC,UAAwB,kBAAkB,IAAI;AACpF,QAAM,CAAC,mBAAmB,oBAAoB,IAAIA,UAAwB,oBAAoB;AAE9F,QAAM,eAAe,kBAAkB,UAAa,wBAAwB;AAC5E,QAAM,YAAY,eAAe,gBAAgB;AACjD,QAAM,kBAAkB,eAAe,sBAAsB;AAC7D,QAAM,cAAc,aAAa,OAAO;AACxC,QAAM,oBAAoB,aAAa,aAAa;AACpD,QAAM,eAAe,aAAa,kBAAkB,YAAY;AAChE,QAAM,qBAAqB,aAAa,kBAAkB,kBAAkB;AAE5E,QAAM,SAASC,SAAQ,MAAM;AAC3B,QAAI,CAAC,gBAAgB,CAAC,mBAAoB,QAAO;AACjD,UAAM,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,YAAY;AACtD,QAAI,CAAC,IAAK,QAAO;AACjB,UAAM,WACJ,IAAI,iBACH,CAAC,QAAW;AACX,YAAM,QAAS,IAAgC,YAAY;AAC3D,aAAO,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW,QAAQ;AAAA,IAC1E;AACF,UAAM,OAAO,CAAC,GAAG,IAAI;AACrB,SAAK,KAAK,CAAC,GAAG,MAAM;AAClB,YAAM,KAAK,SAAS,CAAC;AACrB,YAAM,KAAK,SAAS,CAAC;AACrB,UAAI,MAAM,QAAQ,MAAM,KAAM,QAAO;AACrC,UAAI,MAAM,KAAM,QAAO;AACvB,UAAI,MAAM,KAAM,QAAO;AACvB,UAAI,OAAO,OAAO,YAAY,OAAO,OAAO,UAAU;AACpD,eAAO,uBAAuB,QAAQ,KAAK,KAAK,KAAK;AAAA,MACvD;AACA,YAAM,KAAK,OAAO,EAAE,EAAE,YAAY;AAClC,YAAM,KAAK,OAAO,EAAE,EAAE,YAAY;AAClC,UAAI,KAAK,GAAI,QAAO,uBAAuB,QAAQ,KAAK;AACxD,UAAI,KAAK,GAAI,QAAO,uBAAuB,QAAQ,IAAI;AACvD,aAAO;AAAA,IACT,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,SAAS,cAAc,kBAAkB,CAAC;AAEpD,QAAM,cAAcA,SAAQ,MAAM;AAChC,QAAI,CAAC,WAAY,QAAO;AAExB,UAAM,WAAW,KAAK,IAAI,GAAG,WAAW,QAAQ;AAChD,UAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,OAAO,SAAS,QAAQ,CAAC;AAClE,UAAM,OAAO,KAAK,IAAI,KAAK,IAAI,GAAG,WAAW,IAAI,GAAG,UAAU;AAC9D,UAAM,cAAc,OAAO,KAAK;AAChC,WAAO,OAAO,MAAM,YAAY,aAAa,QAAQ;AAAA,EACvD,GAAG,CAAC,YAAY,MAAM,CAAC;AAEvB,QAAM,eAAe,YAAY,OAAO,OAAO,UAAU,UAAU,IAAI,CAAC;AACxE,QAAM,iBAAiB,YACnB,OAAO,OAAO,CAAC,QAAQ,CAAC,gBAAgB,GAAG,KAAK,CAAC,yBAAyB,GAAG,CAAC,IAC9E,CAAC;AACL,QAAM,mBAAmB,YACrB,eAAe,OAAO,UAAU,UAAU,EAAE,SAC5C;AACJ,QAAM,kBAAkB,eAAe,SAAS,KAAK,qBAAqB,eAAe;AACzF,QAAM,mBAAmB,aAAa,SAAS,KAAK,CAAC;AAErD,QAAM,kBAAkB,CAAC,QAAgB;AACvC,QAAI;AACJ,QAAI,CAAC,aAAa,CAAC,iBAAiB;AAClC,sBAAgB,gBAAgB,OAAO,oBAAoB,oBAAoB;AAAA,IACjF,WAAW,cAAc,KAAK;AAC5B,sBAAgB;AAAA,IAClB,WAAW,gBAAgB,OAAO,mBAAmB;AACnD,sBAAgB,oBAAoB,oBAChC,sBAAsB,QAAQ,SAAS,QACvC;AAAA,IACN,WAAW,oBAAoB,OAAO;AACpC,sBAAgB;AAAA,IAClB,OAAO;AACL,sBAAgB;AAAA,IAClB;AACA,UAAM,UAAU,kBAAkB,OAAO,OAAO;AAEhD,QAAI,cAAc;AAChB,qBAAe,SAAS,aAAa;AAAA,IACvC,OAAO;AACL,qBAAe,OAAO;AACtB,2BAAqB,aAAa;AAClC,qBAAe,SAAS,aAAa;AAAA,IACvC;AAAA,EACF;AAEA,SACE,gBAAAH,MAAC,SAAI,WAAW,GAAG,0BAA0B,2BAA2B,IAAI,IAAI,YAAY,oCAAoC,SAAS,GACvI,0BAAAC,OAAC,SAAI,WAAU,kCACZ;AAAA,cAAU,gBAAAD,MAAC,SAAI,WAAU,iCAAiC,kBAAO;AAAA,IAEjE,YAAY,WAAW,IACtB,gBAAAA,MAAC,SAAI,WAAU,gCAAgC,0BAAgB,WAAU,IAEzE,gBAAAC,OAAC,WAAM,cAAY,WAAW,WAAU,gCACtC;AAAA,sBAAAD,MAAC,WACC,0BAAAC,OAAC,QAAG,WAAU,oCACX;AAAA,qBACC,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAM;AAAA,YAEN,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,cAAY,UAAU,kBAAkB;AAAA,gBACxC,SAAS;AAAA,gBACT,UAAU,eAAe,WAAW,KAAK,aAAa,WAAW;AAAA,gBACjE,eAAe;AAAA,gBACf,iBAAiB,CAAC,YAAY;AAC5B,wBAAM,OAAO,UAAU,iBAAiB;AACxC,sBAAI,UAAU,mBAAmB;AAC/B,8BAAU,kBAAkB,MAAM,OAAO;AACzC;AAAA,kBACF;AACA,uBAAK,QAAQ,CAAC,QAAQ;AACpB,wBAAI,UAAU,WAAW,GAAG,MAAM,SAAS;AACzC,gCAAU,iBAAiB,KAAK,OAAO;AAAA,oBACzC;AAAA,kBACF,CAAC;AAAA,gBACH;AAAA;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAED,QAAQ,IAAI,CAAC,QAAQ;AACpB,gBAAM,WAAW,cAAc,IAAI,OAAO,oBAAoB;AAC9D,cAAI,CAAC,IAAI,UAAU;AACjB,mBACE,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBAEC,WAAU;AAAA,gBACV,OAAM;AAAA,gBACN,OAAO,EAAE,OAAO,IAAI,MAAM;AAAA,gBAEzB,cAAI;AAAA;AAAA,cALA,IAAI;AAAA,YAMX;AAAA,UAEJ;AACA,iBACE,gBAAAA;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cACV,OAAM;AAAA,cACN,OAAO,EAAE,OAAO,IAAI,MAAM;AAAA,cAE1B,0BAAAC;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAW;AAAA,oBACT;AAAA,oBACA,YAAY;AAAA,kBACd;AAAA,kBACA,SAAS,MAAM,gBAAgB,IAAI,GAAG;AAAA,kBACtC,aACE,WACI,oBAAoB,QAClB,cACA,eACF;AAAA,kBAGN;AAAA,oCAAAD,MAAC,UAAM,cAAI,QAAO;AAAA,oBAClB,gBAAAA,MAAC,UAAK,WAAU,oCAAmC,eAAY,QAC5D,sBAAY,oBAAoB,QAC/B,gBAAAA,MAAC,WAAQ,MAAM,IAAI,IACjB,YAAY,oBAAoB,SAClC,gBAAAA,MAAC,aAAU,MAAM,IAAI,IAErB,gBAAAA,MAAC,gBAAa,MAAM,IAAI,GAE5B;AAAA;AAAA;AAAA,cACF;AAAA;AAAA,YA9BK,IAAI;AAAA,UA+BX;AAAA,QAEJ,CAAC;AAAA,SACH,GACF;AAAA,MACA,gBAAAA,MAAC,WACE,sBAAY,IAAI,CAAC,KAAK,aAAa;AAClC,cAAM,cAAc,eAAe,KAAK,QAAQ,KAAK;AACrD,cAAM,WAAW,gBAAgB,GAAG,KAAK;AACzC,cAAM,oBAAoB,aAAa,yBAAyB,GAAG,KAAK;AACxE,cAAM,cAAc,CAAC,YAAY,QAAQ,cAAc,gBAAgB;AACvE,cAAM,SAAS,CAAC,YAAY,YAAY;AAAA,UACtC,OAAO,UAAU,MAAM,KAAK,QAAQ;AAAA,UACpC,MAAM,UAAU,KAAK,KAAK,QAAQ;AAAA,QACpC,IAAI;AACJ,eACE,gBAAAC;AAAA,UAAC;AAAA;AAAA,YAEC,WAAW;AAAA,cACT;AAAA,cACA,eAAe;AAAA,cACf,eAAe;AAAA,cACf,YAAY;AAAA,YACd;AAAA,YACA,iBAAe,YAAY;AAAA,YAC3B,SAAS,CAAC,YAAY,aAAa,MAAM,WAAW,KAAK,QAAQ,IAAI;AAAA,YACrE,eAAe,CAAC,YAAY,mBAAmB,MAAM,iBAAiB,KAAK,QAAQ,IAAI;AAAA,YACvF,WAAW,cAAc,CAAC,UAAU;AAClC,kBAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;AAC9C,sBAAM,eAAe;AACrB,sBAAM,cAAc,cAAc;AAClC,8BAAc,KAAK,QAAQ;AAAA,cAC7B;AAAA,YACF,IAAI;AAAA,YACJ,cAAY,QAAQ;AAAA,YACpB,iBAAe,YAAY;AAAA,YAC3B,MAAM,cAAc,WAAW;AAAA,YAC/B,UAAU,cAAc,IAAI;AAAA,YAE3B;AAAA,2BACC,gBAAAD,MAAC,QAAG,WAAU,mEACZ,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,cAAY,UAAU,YAAY,GAAG;AAAA,kBACrC,SAAS,CAAC,qBAAqB,UAAU,WAAW,GAAG;AAAA,kBACvD,UAAU;AAAA,kBACV,SAAS,CAAC,UAAU,MAAM,gBAAgB;AAAA,kBAC1C,iBAAiB,CAAC,YAAY;AAC5B,wBAAI,CAAC,kBAAmB,WAAU,iBAAiB,KAAK,OAAO;AAAA,kBACjE;AAAA;AAAA,cACF,GACF;AAAA,cAED,QAAQ,IAAI,CAAC,KAAK,gBACjB,gBAAAC;AAAA,gBAAC;AAAA;AAAA,kBAEC,WAAW;AAAA,oBACT;AAAA,oBACA,UAAU,gBAAgB,QAAQ,SAAS,KAAK;AAAA,kBAClD;AAAA,kBACA,OAAO,EAAE,OAAO,IAAI,OAAO,WAAW,IAAI,SAAS,OAAO;AAAA,kBAEzD;AAAA,wBAAI,OAAO,KAAK,QAAQ;AAAA,oBACxB,UAAU,gBAAgB,QAAQ,SAAS,KAC1C,gBAAAD,MAAC,UAAK,WAAU,qCAAoC,eAAY,QAC9D,0BAAAA,MAAC,UAAK,WAAU,2CAA2C,iBAAO,MAAK,GACzE;AAAA;AAAA;AAAA,gBAXG,IAAI;AAAA,cAaX,CACD;AAAA;AAAA;AAAA,UAnDI;AAAA,QAoDP;AAAA,MAEJ,CAAC,GACH;AAAA,OACF;AAAA,KAEJ,GACF;AAEJ;;;ACvWA,SAAS,SAAAI,QAAO,mBAAAC,kBAAiB,UAAAC,SAAQ,YAAAC,iBAAwE;AA0G7G,SAcQ,OAAAC,OAdR,QAAAC,cAAA;AAhFG,SAAS,KAAK;AAAA,EACnB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,UAAU;AACZ,GAAc;AACZ,QAAM,UAAUC,OAAM;AACtB,QAAM,CAAC,eAAe,gBAAgB,IAAIC;AAAA,IACxC,gBAAgB,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,MAAM;AAAA,EACxE;AACA,QAAM,eAAe,oBAAoB;AACzC,QAAM,WAAW,eAAe,kBAAkB;AAElD,QAAM,aAAaC,QAA8B,IAAI;AACrD,QAAM,UAAUA,QAAiD,CAAC,CAAC;AACnE,QAAM,CAAC,WAAW,YAAY,IAAID,UAAmD,IAAI;AAEzF,EAAAE,iBAAgB,MAAM;AACpB,UAAM,kBAAkB,MAAM;AAC5B,YAAM,YAAY,QAAQ,QAAQ,QAAQ;AAC1C,UAAI,CAAC,UAAW;AAChB,mBAAa,EAAE,QAAQ,UAAU,YAAY,OAAO,UAAU,YAAY,CAAC;AAAA,IAC7E;AAEA,oBAAgB;AAChB,UAAM,OAAO,WAAW;AACxB,QAAI,CAAC,QAAQ,OAAO,mBAAmB,YAAa;AACpD,UAAM,WAAW,IAAI,eAAe,eAAe;AACnD,aAAS,QAAQ,IAAI;AACrB,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,UAAU,MAAM,MAAM,CAAC;AAE3B,QAAM,YAAY,CAAC,OAAe;AAChC,QAAI,cAAc;AAChB,sBAAgB,EAAE;AAAA,IACpB,OAAO;AACL,uBAAiB,EAAE;AACnB,sBAAgB,EAAE;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,YAAY,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ;AACjD,QAAM,iBAAiB,YACnB;AAAA,IACE,mCAAmC,GAAG,UAAU,MAAM;AAAA,IACtD,kCAAkC,GAAG,UAAU,KAAK;AAAA,EACtD,IACA;AAEJ,QAAM,YAAY,CAAC,UAA4C;AAC7D,UAAM,eAAe,UAAU,UAAU,CAAC,MAAM,EAAE,OAAO,QAAQ;AACjE,QAAI,iBAAiB,GAAI;AACzB,QAAI,YAAY;AAChB,YAAQ,MAAM,KAAK;AAAA,MACjB,KAAK;AACH,qBAAa,eAAe,KAAK,UAAU;AAC3C;AAAA,MACF,KAAK;AACH,qBAAa,eAAe,IAAI,UAAU,UAAU,UAAU;AAC9D;AAAA,MACF,KAAK;AACH,oBAAY;AACZ;AAAA,MACF,KAAK;AACH,oBAAY,UAAU,SAAS;AAC/B;AAAA,MACF;AACE;AAAA,IACJ;AACA,UAAM,eAAe;AACrB,UAAMC,UAAS,UAAU,SAAS,EAAE;AACpC,cAAUA,OAAM;AAChB,0BAAsB,MAAM,QAAQ,QAAQA,OAAM,GAAG,MAAM,CAAC;AAAA,EAC9D;AAEA,SACE,gBAAAL,OAAC,SAAI,WAAW,GAAG,gBAAgB,iBAAiB,OAAO,IAAI,WAAW,yBAAyB,SAAS,GAC1G;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,MAAK;AAAA,QACL,cAAY;AAAA,QACZ,WAAU;AAAA,QACV,wBAAsB,YAAY,SAAS;AAAA,QAC3C,OAAO;AAAA,QAEN,gBAAM,IAAI,CAAC,SAAS;AACnB,gBAAM,WAAW,KAAK,OAAO;AAC7B,gBAAM,QAAQ,GAAG,OAAO,QAAQ,KAAK,EAAE;AACvC,gBAAM,UAAU,GAAG,OAAO,UAAU,KAAK,EAAE;AAC3C,iBACE,gBAAAA;AAAA,YAAC;AAAA;AAAA,cAEC,KAAK,CAAC,OAAO;AACX,wBAAQ,QAAQ,KAAK,EAAE,IAAI;AAAA,cAC7B;AAAA,cACA,IAAI;AAAA,cACJ,MAAK;AAAA,cACL,MAAK;AAAA,cACL,iBAAe;AAAA,cACf,iBAAe;AAAA,cACf,UAAU,WAAW,IAAI;AAAA,cACzB,UAAU,KAAK;AAAA,cACf,WAAW;AAAA,gBACT;AAAA,gBACA,YAAY;AAAA,gBACZ,KAAK,YAAY;AAAA,cACnB;AAAA,cACA,SAAS,MAAM,CAAC,KAAK,YAAY,UAAU,KAAK,EAAE;AAAA,cAClD;AAAA,cAEC,eAAK;AAAA;AAAA,YAnBD,KAAK;AAAA,UAoBZ;AAAA,QAEJ,CAAC;AAAA;AAAA,IACH;AAAA,IACC,MAAM,IAAI,CAAC,SAAS;AACnB,YAAM,QAAQ,GAAG,OAAO,QAAQ,KAAK,EAAE;AACvC,YAAM,UAAU,GAAG,OAAO,UAAU,KAAK,EAAE;AAC3C,YAAM,WAAW,KAAK,OAAO;AAC7B,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UAEC,IAAI;AAAA,UACJ,MAAK;AAAA,UACL,mBAAiB;AAAA,UACjB,QAAQ,CAAC;AAAA,UACT,WAAU;AAAA,UAET,sBAAY,KAAK;AAAA;AAAA,QAPb,KAAK;AAAA,MAQZ;AAAA,IAEJ,CAAC;AAAA,KACH;AAEJ;;;ACpKA,YAAYO,aAAW;AAyFnB,SAME,OAAAC,OANF,QAAAC,cAAA;AAtEG,SAAS,gBAAgB,EAAE,OAAO,OAAO,eAAe,WAAW,YAAY,OAAO,UAAU,GAAyB;AAC9H,QAAM,cAAoB,eAAuB,IAAI;AACrD,QAAM,aAAmB,eAAwC,CAAC,CAAC;AACnE,QAAM,0BAAgC,eAAO,KAAK;AAClD,QAAM,cAAc,MAAM,UAAU,CAAC,SAAS,KAAK,UAAU,KAAK;AAElE,EAAM,wBAAgB,MAAM;AAC1B,UAAM,WAAW,YAAY;AAC7B,UAAM,eAAe,WAAW,QAAQ,WAAW;AACnD,QAAI,cAAc;AAElB,QAAI,CAAC,YAAY,CAAC,cAAc;AAC9B,gBAAU,gBAAgB,sBAAsB;AAChD,gBAAU,gBAAgB,wBAAwB;AAClD,8BAAwB,UAAU;AAClC;AAAA,IACF;AAEA,UAAM,kBAAkB,MAAM;AAC5B,YAAM,eAAe,SAAS,sBAAsB;AACpD,YAAM,mBAAmB,aAAa,sBAAsB;AAE5D,eAAS,MAAM,YAAY,0CAA0C,GAAG,iBAAiB,OAAO,aAAa,OAAO,SAAS,UAAU,IAAI;AAC3I,eAAS,MAAM,YAAY,0CAA0C,GAAG,iBAAiB,MAAM,aAAa,MAAM,SAAS,SAAS,IAAI;AACxI,eAAS,MAAM,YAAY,8CAA8C,GAAG,iBAAiB,KAAK,IAAI;AACtG,eAAS,MAAM,YAAY,+CAA+C,GAAG,iBAAiB,MAAM,IAAI;AACxG,eAAS,aAAa,wBAAwB,MAAM;AAEpD,UAAI,CAAC,wBAAwB,WAAW,gBAAgB,GAAG;AACzD,sBAAc,OAAO,sBAAsB,MAAM;AAC/C,kCAAwB,UAAU;AAClC,mBAAS,aAAa,0BAA0B,MAAM;AACtD,wBAAc;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,oBAAgB;AAEhB,QAAI,OAAO,mBAAmB,aAAa;AACzC,aAAO,MAAM;AACX,YAAI,gBAAgB,EAAG,QAAO,qBAAqB,WAAW;AAAA,MAChE;AAAA,IACF;AAEA,UAAM,iBAAiB,IAAI,eAAe,eAAe;AACzD,mBAAe,QAAQ,QAAQ;AAC/B,eAAW,QAAQ,QAAQ,CAAC,WAAW;AACrC,UAAI,OAAQ,gBAAe,QAAQ,MAAM;AAAA,IAC3C,CAAC;AAED,WAAO,MAAM;AACX,qBAAe,WAAW;AAC1B,UAAI,gBAAgB,EAAG,QAAO,qBAAqB,WAAW;AAAA,IAChE;AAAA,EACF,GAAG,CAAC,aAAa,MAAM,MAAM,CAAC;AAE9B,QAAM,YAAY,CAAC,OAAe,cAAsB;AACtD,QAAI,YAAY;AAChB,OAAG;AACD,mBAAa,YAAY,YAAY,MAAM,UAAU,MAAM;AAAA,IAC7D,SAAS,MAAM,SAAS,GAAG,YAAY,cAAc;AAErD,QAAI,CAAC,MAAM,SAAS,GAAG,UAAU;AAC/B,iBAAW,QAAQ,SAAS,GAAG,MAAM;AACrC,oBAAc,MAAM,SAAS,EAAE,KAAK;AAAA,IACtC;AAAA,EACF;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,4BAA4B,aAAa,wCAAwC,SAAS;AAAA,MACxG,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,KAAK;AAAA,MAEL;AAAA,wBAAAD,MAAC,UAAK,WAAU,uCAAsC,eAAW,MAAC;AAAA,QACjE,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,gBAAM,SAAS,KAAK,UAAU;AAC9B,iBACE,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,GAAG,kCAAkC,UAAU,wCAAwC;AAAA,cAElG,MAAK;AAAA,cACL,gBAAc;AAAA,cACd,UAAU,KAAK;AAAA,cACf,SAAS,MAAM,cAAc,KAAK,KAAK;AAAA,cACvC,WAAW,CAAC,UAAU;AACpB,oBAAI,MAAM,QAAQ,cAAc;AAC9B,wBAAM,eAAe;AACrB,4BAAU,OAAO,CAAC;AAAA,gBACpB;AACA,oBAAI,MAAM,QAAQ,aAAa;AAC7B,wBAAM,eAAe;AACrB,4BAAU,OAAO,EAAE;AAAA,gBACrB;AAAA,cACF;AAAA,cACA,KAAK,CAAC,YAAY;AAAE,2BAAW,QAAQ,KAAK,IAAI;AAAA,cAAQ;AAAA,cAEvD,eAAK;AAAA;AAAA,YAjBD,KAAK;AAAA,UAkBZ;AAAA,QAEJ,CAAC;AAAA;AAAA;AAAA,EACH;AAEJ;;;AC5HA,SAAS,SAAAE,QAAO,YAAAC,iBAAgC;AAChD,SAAS,gBAAAC,eAAc,eAAAC,oBAAmB;AAuDpC,SAUc,OAAAC,OAVd,QAAAC,cAAA;AAvCC,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,MAAM;AAAA,EACN;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,UAAU;AACZ,GAAoB;AAClB,QAAM,UAAUC,OAAM;AACtB,QAAM,WAAW,GAAG,OAAO;AAC3B,QAAM,UAAU,GAAG,OAAO;AAC1B,QAAM,CAAC,cAAc,eAAe,IAAIC,UAAS,WAAW;AAC5D,QAAM,eAAe,mBAAmB;AACxC,QAAM,SAAS,eAAe,iBAAiB;AAE/C,QAAM,SAAS,MAAM;AACnB,QAAI,SAAU;AACd,UAAM,OAAO,CAAC;AACd,QAAI,cAAc;AAChB,qBAAe,IAAI;AAAA,IACrB,OAAO;AACL,sBAAgB,IAAI;AACpB,qBAAe,IAAI;AAAA,IACrB;AAAA,EACF;AAEA,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,YAAY,UAAU;AAAA,QACtB,UAAU;AAAA,QACV,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,MAEA;AAAA,wBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,IAAI;AAAA,YACJ,WAAU;AAAA,YACV,iBAAe;AAAA,YACf,iBAAe;AAAA,YACf;AAAA,YACA,SAAS;AAAA,YAET;AAAA,8BAAAD,MAAC,UAAK,WAAU,2BAA0B,eAAY,QACnD,mBAAS,gBAAAA,MAACI,cAAA,EAAY,MAAM,IAAI,IAAK,gBAAAJ,MAACK,eAAA,EAAa,MAAM,IAAI,GAChE;AAAA,cACA,gBAAAL,MAAC,UAAK,WAAU,4BAA4B,iBAAM;AAAA,cACjD,QAAQ,gBAAAA,MAAC,UAAK,WAAU,2BAA2B,gBAAK;AAAA;AAAA;AAAA,QAC3D;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,MAAK;AAAA,YACL,mBAAiB;AAAA,YACjB,WAAU;AAAA,YACV,QAAQ,CAAC;AAAA,YAET,0BAAAA,MAAC,SAAI,WAAU,kCAAkC,UAAS;AAAA;AAAA,QAC5D;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC9DQ,gBAAAM,aAAA;AAhBR,IAAM,gBAAgB;AACtB,IAAM,cAAc;AAMb,SAAS,cAAc,EAAE,WAAW,QAAQ,WAAW,GAAG,MAAM,GAAuB;AAC5F,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,cAAY;AAAA,MACZ,WAAW,GAAG,0BAA0B,SAAS;AAAA,MACjD,MAAK;AAAA,MACJ,GAAG;AAAA,MAEH,gBAAM,KAAK,EAAE,QAAQ,cAAc,GAAG,CAAC,GAAG,UACzC,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,eAAY;AAAA,UACZ,WAAU;AAAA,UAEV,OAAO,EAAE,2BAA2B,QAAQ,YAAY;AAAA;AAAA,QADnD;AAAA,MAEP,CACD;AAAA;AAAA,EACH;AAEJ;;;ACII,gBAAAC,OAmCA,QAAAC,cAnCA;AAXJ,IAAM,cAAc,CAAC,UACnB,OAAO,UAAU,WAAW,GAAG,KAAK,OAAO;AAQtC,SAAS,MAAM,EAAE,WAAW,OAAO,QAAQ,QAAQ,OAAO,GAAG,MAAM,GAAe;AACvF,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAW,GAAG,iBAAiB,SAAS;AAAA,MACxC,OAAO;AAAA,QACL,OAAO,YAAY,KAAK;AAAA,QACxB,QAAQ,YAAY,MAAM;AAAA,QAC1B,cAAc,YAAY,MAAM;AAAA,QAChC,GAAG;AAAA,MACL;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEO,SAAS,UAAU,EAAE,WAAW,OAAO,MAAM,QAAQ,QAAQ,GAAG,MAAM,GAAmB;AAC9F,SAAO,gBAAAA,MAAC,SAAM,WAAW,GAAG,sBAAsB,uBAAuB,IAAI,IAAI,SAAS,GAAG,OAAe,GAAG,OAAO;AACxH;AAQO,SAAS,YAAY,EAAE,WAAW,OAAO,MAAM,aAAa,WAAW,OAAO,OAAO,GAAG,MAAM,GAAqB;AACxH,SAAO,gBAAAA,MAAC,SAAM,qBAAmB,eAAe,MAAM,WAAW,GAAG,wBAAwB,yBAAyB,IAAI,IAAI,YAAY,mCAAmC,SAAS,GAAG,OAAe,GAAG,OAAO;AACnN;AAOO,SAAS,UAAU,EAAE,WAAW,QAAQ,GAAG,aAAa,MAAM,GAAG,MAAM,GAAmB;AAC/F,SACE,gBAAAC,OAAC,SAAI,eAAY,QAAO,WAAW,GAAG,sBAAsB,SAAS,GAAI,GAAG,OACzE;AAAA,kBAAc,gBAAAD,MAAC,aAAU,OAAM,OAAM;AAAA,IACtC,gBAAAA,MAAC,SAAI,WAAU,uBACZ,gBAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG,UAAU,gBAAAA,MAAC,aAAsB,OAAO,UAAU,QAAQ,IAAI,QAAQ,UAA5C,KAAoD,CAAE,GACrH;AAAA,KACF;AAEJ;AAgBO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,GAAwB;AACtB,QAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,QAAQ,GAAG,CAAC,GAAG,UAAU,KAAK;AACjE,SACE,gBAAAA,MAAC,SAAI,aAAU,QAAO,cAAW,iBAAgB,WAAW,GAAG,uBAAuB,wBAAwB,IAAI,IAAI,SAAS,GAAG,MAAK,UAAU,GAAG,OAClJ,0BAAAC,OAAC,WAAM,WAAU,8BACb;AAAA,mBAAc,YACd,gBAAAD,MAAC,WACC,0BAAAA,MAAC,QAAG,WAAU,iCACX,gBAAM,IAAI,CAAC,UACV,gBAAAA,MAAC,QAAe,OAAO,EAAE,OAAO,eAAe,KAAK,EAAE,GACnD,oBAAU,KAAK,KAAK,gBAAAA,MAAC,aAAU,MAAK,MAAK,OAAO,UAAU,UAAU,IAAI,QAAQ,OAAO,KADjF,KAET,CACD,GACH,GACF;AAAA,IAEF,gBAAAA,MAAC,WACE,gBAAM,KAAK,EAAE,QAAQ,KAAK,GAAG,CAAC,GAAG,aAChC,gBAAAA,MAAC,QAAG,WAAU,4BACX,gBAAM,IAAI,CAAC,gBACV,gBAAAA,MAAC,QAAqB,OAAO,EAAE,OAAO,eAAe,WAAW,EAAE,GAChE,0BAAAA,MAAC,aAAU,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,WAAW,eAAe,CAAC,CAAC,KAAK,KADrE,WAET,CACD,KAL2C,QAM9C,CACD,GACH;AAAA,KACF,GACF;AAEJ;AAQO,SAAS,WAAW,EAAE,WAAW,aAAa,OAAO,GAAG,MAAM,GAAwB;AAC3F,SAAO,gBAAAA,MAAC,kBAAe,WAAsB,YAAyB,GAAG,OAAO;AAClF;AAEO,SAAS,cAAc,EAAE,WAAW,aAAa,OAAO,GAAG,MAAM,GAAwB;AAC9F,SAAO,gBAAAA,MAAC,kBAAe,WAAsB,YAAwB,WAAS,MAAE,GAAG,OAAO;AAC5F;AAEO,SAAS,WAAW,EAAE,WAAW,QAAQ,OAAO,GAAG,MAAM,GAAiC;AAC/F,SAAO,gBAAAA,MAAC,aAAU,WAAW,GAAG,uBAAuB,SAAS,GAAG,MAAK,MAAK,OAAe,GAAG,OAAO;AACxG;AAEA,SAAS,eAAe,EAAE,WAAW,aAAa,OAAO,YAAY,OAAO,cAAc,MAAM,GAAG,MAAM,GAAwB;AAC/H,SACE,gBAAAC,OAAC,SAAI,eAAY,QAAO,qBAAmB,aAAa,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,OAC3G;AAAA,oBAAAD,MAAC,cAAW,OAAO,YAAY;AAAA,IAC/B,gBAAAA,MAAC,SAAM,WAAW,GAAG,gCAAgC,aAAa,yCAAyC,GAAG;AAAA,KAChH;AAEJ;AAEO,SAAS,WAAW,EAAE,WAAW,GAAG,MAAM,GAAmC;AAClF,SAAO,gBAAAC,OAAC,SAAI,eAAY,QAAO,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,OAAO;AAAA,oBAAAD,MAAC,aAAU,OAAM,OAAM;AAAA,IAAE,gBAAAA,MAAC,aAAU,MAAK,MAAK,OAAM,OAAM;AAAA,KAAE;AACzJ;AAEO,SAAS,cAAc,EAAE,WAAW,GAAG,MAAM,GAAmC;AACrF,SAAO,gBAAAC,OAAC,SAAI,eAAY,QAAO,WAAW,GAAG,wBAAwB,SAAS,GAAI,GAAG,OAAO;AAAA,oBAAAD,MAAC,SAAM,WAAU,iCAAgC;AAAA,IAAE,gBAAAA,MAAC,aAAU,OAAM,OAAM;AAAA,KAAE;AAC1K;AAEO,IAAM,cAAc;AAEpB,SAAS,UAAU,EAAE,WAAW,QAAQ,IAAI,GAAG,MAAM,GAA+B;AACzF,SAAO,gBAAAA,MAAC,SAAM,WAAW,GAAG,sBAAsB,SAAS,GAAG,QAAQ,IAAI,OAAe,GAAG,OAAO;AACrG;AAEO,SAAS,UAAU,EAAE,WAAW,QAAQ,IAAI,GAAG,MAAM,GAAiC;AAC3F,SAAO,gBAAAA,MAAC,aAAU,WAAW,GAAG,sBAAsB,SAAS,GAAG,MAAK,MAAK,OAAe,GAAG,OAAO;AACvG;AAEO,IAAM,kBAAkB;AAExB,SAAS,cAAc,EAAE,WAAW,cAAc,MAAM,GAAG,MAAM,GAAmE;AACzI,SAAO,gBAAAC,OAAC,SAAI,eAAY,QAAO,qBAAmB,aAAa,WAAW,GAAG,0BAA0B,SAAS,GAAI,GAAG,OAAO;AAAA,oBAAAD,MAAC,aAAU,OAAM,OAAM;AAAA,IAAE,gBAAAA,MAAC,SAAM,WAAU,mCAAkC;AAAA,KAAE;AAC9M;AAEO,SAAS,qBAAqB,EAAE,WAAW,UAAU,GAAG,GAAG,MAAM,GAA0D;AAChI,SAAO,gBAAAA,MAAC,SAAI,eAAY,QAAO,WAAW,GAAG,0BAA0B,SAAS,GAAI,GAAG,OAAQ,gBAAM,KAAK,EAAE,QAAQ,QAAQ,GAAG,CAAC,GAAG,UAAU,gBAAAA,MAAC,WAAW,KAAO,CAAE,GAAE;AACtK;AAEO,IAAM,YAAY;AAElB,SAAS,gBAAgB,EAAE,WAAW,GAAG,MAAM,GAAmC;AACvF,SAAO,gBAAAC,OAAC,SAAI,eAAY,QAAO,WAAW,GAAG,4BAA4B,SAAS,GAAI,GAAG,OAAO;AAAA,oBAAAD,MAAC,SAAM,WAAU,kCAAiC;AAAA,IAAE,gBAAAA,MAAC,aAAU,OAAM,OAAM;AAAA,KAAE;AAC/K;AAEO,SAAS,gBAAgB,EAAE,WAAW,QAAQ,GAAG,GAAG,MAAM,GAAwD;AACvH,SAAO,gBAAAA,MAAC,SAAI,eAAY,QAAO,WAAW,GAAG,4BAA4B,SAAS,GAAI,GAAG,OAAQ,gBAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG,UAAU,gBAAAA,MAAC,WAAW,KAAO,CAAE,GAAE;AACtK;AAEO,SAAS,kBAAkB,EAAE,WAAW,GAAG,MAAM,GAAmC;AACzF,SAAO,gBAAAC,OAAC,SAAI,eAAY,QAAO,WAAW,GAAG,0BAA0B,SAAS,GAAI,GAAG,OAAO;AAAA,oBAAAD,MAAC,SAAM,WAAU,gCAA+B;AAAA,IAAE,gBAAAA,MAAC,aAAU,OAAM,OAAM;AAAA,IAAE,gBAAAA,MAAC,aAAU,MAAK,MAAK,OAAM,OAAM;AAAA,KAAE;AAC9M;AAEO,SAAS,gBAAgB,EAAE,WAAW,GAAG,MAAM,GAAmC;AACvF,SAAO,gBAAAA,MAAC,aAAU,WAAW,GAAG,6BAA6B,SAAS,GAAG,OAAO,GAAI,GAAG,OAAO;AAChG;AAIO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA,cAAc,YAAY;AAAA,EAC1B,GAAG;AACL,GAA2B;AACzB,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW,GAAG,8BAA8B,SAAS;AAAA,MACrD,MAAK;AAAA,MACJ,GAAG;AAAA,MAEJ;AAAA,wBAAAD,MAAC,SAAI,eAAY,QAAO,WAAU,iFAChC,0BAAAC,OAAC,SAAI,WAAU,sCACb;AAAA,0BAAAD,MAAC,aAAU,OAAM,QAAO;AAAA,UACxB,gBAAAA,MAAC,aAAU,OAAM,OAAM;AAAA,UACvB,gBAAAA,MAAC,aAAU,OAAM,OAAM;AAAA,WACzB,GACF;AAAA,QACA,gBAAAC,OAAC,SAAI,eAAY,QAAO,WAAU,sFAChC;AAAA,0BAAAD,MAAC,aAAU,OAAM,OAAM;AAAA,UACvB,gBAAAA,MAAC,aAAU,OAAM,OAAM;AAAA,UACvB,gBAAAA,MAAC,aAAU,OAAM,OAAM;AAAA,WACzB;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,mBAAmB,OAA4B;AAC7D,SAAO,gBAAAA,MAAC,kBAAgB,GAAG,OAAO;AACpC;AAMO,SAAS,aAAa,EAAE,WAAW,QAAQ,GAAG,GAAG,MAAM,GAAsB;AAClF,SACE,gBAAAC,OAAC,WAAM,eAAY,QAAO,WAAW,GAAG,yBAAyB,SAAS,GAAI,GAAG,OAC/E;AAAA,oBAAAD,MAAC,SAAM,WAAU,gCAA+B;AAAA,IAChD,gBAAAA,MAAC,SAAI,WAAU,gCACZ,gBAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG,UAAU,gBAAAC,OAAC,SAAI,WAAU,+BAA0C;AAAA,sBAAAD,MAAC,SAAM;AAAA,MAAE,gBAAAA,MAAC,aAAU,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,KAAK;AAAA,SAArE,KAAuE,CAAM,GAC9K;AAAA,KACF;AAEJ;AAOO,SAAS,WAAW,EAAE,WAAW,OAAO,QAAQ,GAAG,GAAG,MAAM,GAAsB;AACvF,SAAO,gBAAAA,MAAC,gBAAa,WAAW,GAAG,uBAAuB,SAAS,GAAG,OAAc,OAAe,GAAG,OAAO;AAC/G;AAEO,SAAS,eAAe,EAAE,WAAW,OAAO,QAAQ,GAAG,GAAG,MAAM,GAAsB;AAC3F,SAAO,gBAAAA,MAAC,gBAAa,WAAW,GAAG,4BAA4B,SAAS,GAAG,OAAc,OAAe,GAAG,OAAO;AACpH;AAEA,SAAS,aAAa,EAAE,WAAW,OAAO,QAAQ,GAAG,GAAG,MAAM,GAAsB;AAClF,SACE,gBAAAC,OAAC,SAAI,eAAY,QAAO,WAAW,GAAG,yBAAyB,SAAS,GAAI,GAAG,OAC7E;AAAA,oBAAAA,OAAC,SAAI,WAAU,iCAAgC;AAAA,sBAAAD,MAAC,aAAU,OAAM,OAAM;AAAA,MAAE,gBAAAA,MAAC,SAAM,WAAU,gCAA+B;AAAA,OAAE;AAAA,IACzH,SAAS,gBAAAA,MAAC,SAAI,WAAU,gCAAgC,iBAAM;AAAA,IAC/D,gBAAAA,MAAC,SAAI,WAAU,uBAAuB,gBAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG,UAAU,gBAAAA,MAAC,aAAsB,OAAO,UAAU,QAAQ,IAAI,QAAQ,UAA5C,KAAoD,CAAE,GAAE;AAAA,KAC5J;AAEJ;;;ACpRA,YAAYE,aAAW;AAcnB,SAyDI,YAAAC,WAzDJ,OAAAC,OAyDI,QAAAC,cAzDJ;AAFJ,IAAM,UAAgB;AAAA,EACpB,CAAC,EAAE,WAAW,OAAO,UAAU,OAAO,OAAO,GAAG,MAAM,GAAG,QACvD,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,GAAG,mBAAmB,SAAS;AAAA,MAC1C,gBAAc,WAAW;AAAA,MACzB,OAAO,EAAE,GAAG,OAAO,GAAI,QAAQ,EAAE,2BAA2B,MAAM,IAAI,CAAC,EAAG;AAAA,MACzE,GAAG;AAAA;AAAA,EACN;AAEJ;AACA,QAAQ,cAAc;AAEtB,IAAM,gBAAsB;AAAA,EAC1B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAA,MAAC,SAAI,KAAU,WAAW,GAAG,2BAA2B,SAAS,GAAI,GAAG,OAAO;AAEnF;AACA,cAAc,cAAc;AAE5B,IAAM,eAAqB;AAAA,EACzB,CAAC,EAAE,WAAW,OAAO,UAAU,GAAG,MAAM,GAAG,QACzC,gBAAAA,MAAC,YAAO,KAAU,MAAY,WAAW,GAAG,0BAA0B,SAAS,GAAI,GAAG,OAAO;AAEjG;AACA,aAAa,cAAc;AAgB3B,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AACF,GAA4B;AAC1B,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,WAAW,GAAG,4BAA4B,SAAS;AAAA,MACnD;AAAA,MACA;AAAA,MACA,gBAAe;AAAA,MACf,eAAc;AAAA,MACd,kBAAiB;AAAA,MACjB,gBACE,gBAAAC,OAAAF,WAAA,EACG;AAAA,gBAAQ,gBAAAC,MAAC,UAAK,WAAU,iCAAgC,eAAY,QAAQ,gBAAK;AAAA,QAClF,gBAAAA,MAAC,UAAK,WAAU,iCAAiC,gBAAK;AAAA,SACxD;AAAA,MAEF;AAAA,MACA,gBAAe;AAAA;AAAA,EACjB;AAEJ;AAEA,IAAM,aAAmB;AAAA,EACvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAA,MAAC,SAAI,KAAU,WAAW,GAAG,wBAAwB,SAAS,GAAI,GAAG,OAAO;AAEhF;AACA,WAAW,cAAc;AAEzB,IAAM,iBAAuB;AAAA,EAC3B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAA,MAAC,SAAI,KAAU,WAAW,GAAG,4BAA4B,SAAS,GAAI,GAAG,OAAO;AAEpF;AACA,eAAe,cAAc;AAW7B,IAAM,iBAAuB;AAAA,EAC3B,CAAC,EAAE,SAAS,OAAO,MAAM,cAAc,WAAW,OAAO,UAAU,UAAU,GAAG,MAAM,GAAG,QACvF,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW,GAAG,6BAA6B,SAAS;AAAA,MACpD,eAAa,UAAU;AAAA,MACvB,gBAAc,SAAS,SAAS;AAAA,MAC/B,GAAG;AAAA,MAEH;AAAA,gBAAQ,gBAAAD,MAAC,UAAK,WAAU,kCAAiC,eAAY,QAAQ,gBAAK;AAAA,QACnF,gBAAAA,MAAC,UAAK,WAAU,mCAAmC,UAAS;AAAA,QAC3D,gBAAgB,gBAAAA,MAAC,UAAK,WAAU,iCAAiC,wBAAa;AAAA;AAAA;AAAA,EACjF;AAEJ;AACA,eAAe,cAAc;AAE7B,IAAM,gBAAsB;AAAA,EAC1B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,gBAAAA,MAAC,SAAI,KAAU,WAAW,GAAG,2BAA2B,SAAS,GAAI,GAAG,OAAO;AAEnF;AACA,cAAc,cAAc;;;AC/H5B,SAAS,gBAAAE,qBAAoB;AAC7B,SAAS,SAAAC,cAAa;AAoCZ,SAEM,OAAAC,OAFN,QAAAC,cAAA;AAfH,SAAS,UAAU,EAAE,MAAM,SAAS,OAAO,aAAa,UAAU,QAAQ,OAAO,MAAM,UAAU,OAAO,eAAe,WAAW,UAAU,GAAmB;AACpK,mBAAiB,IAAI,SAAS,IAAI;AAElC,MAAI,CAAC,KAAM,QAAO;AAElB,SAAOC;AAAA,IACL,gBAAAF,MAAC,SAAI,WAAU,8BAA6B,aAAa,SACvD,0BAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,sBAAsB,uBAAuB,IAAI,IAAI,SAAS;AAAA,QAC5E,cAAW;AAAA,QACX,cAAY,OAAO,UAAU,WAAW,QAAQ;AAAA,QAChD,MAAK;AAAA,QACL,aAAa,CAAC,UAAU,MAAM,gBAAgB;AAAA,QAE9C;AAAA,0BAAAA,OAAC,YAAO,WAAU,8BAChB;AAAA,4BAAAA,OAAC,SAAI,WAAU,+BACZ;AAAA,qBAAO,UAAU,WACd,gBAAAD,MAAC,QAAG,WAAU,6BAA6B,iBAAM,IACjD,gBAAAA,MAAC,SAAI,WAAU,6BAA6B,iBAAM;AAAA,cACrD,eAAe,gBAAAA,MAAC,OAAE,WAAU,mCAAmC,uBAAY;AAAA,eAC9E;AAAA,YACA,gBAAAA,MAAC,YAAO,MAAK,UAAS,WAAU,6BAA4B,cAAW,eAAc,SAAS,SAC5F,0BAAAA,MAACG,QAAA,EAAM,MAAM,IAAI,GACnB;AAAA,aACF;AAAA,UACA,gBAAAH,MAAC,SAAI,aAAW,WAAW,QAAW,WAAW,GAAG,4BAA4B,WAAW,mCAAmC,GAC3H,oBAAU,gBAAAA,MAAC,YAAS,OAAO,cAAc,IAAK,UACjD;AAAA,UACC,UAAU,gBAAAA,MAAC,YAAO,WAAU,8BAA8B,kBAAO;AAAA;AAAA;AAAA,IACpE,GACF;AAAA,IACA,SAAS;AAAA,EACX;AACF;;;ACxDA,YAAYI,aAAW;AAOa,gBAAAC,aAAA;AADpC,IAAM,WAAiB;AAAA,EACrB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ,gBAAAA,MAAC,cAAS,KAAU,WAAW,GAAG,oBAAoB,SAAS,GAAI,GAAG,OAAO;AACjH;AACA,SAAS,cAAc;;;ACTvB,YAAYC,aAAW;AAiBnB,SAMuC,OAAAC,OANvC,QAAAC,cAAA;AAFJ,IAAM,aAAmB;AAAA,EACvB,CAAC,EAAE,WAAW,MAAM,eAAe,SAAS,OAAO,MAAM,OAAO,WAAW,UAAU,GAAG,MAAM,GAAG,QAC/F,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,GAAG,uBAAuB,wBAAwB,IAAI,IAAI,wBAAwB,IAAI,IAAI,SAAS;AAAA,MAC9G,MAAK;AAAA,MACJ,GAAG;AAAA,MAEH;AAAA,gBAAQ,iBAAiB,WAAW,gBAAAD,MAAC,UAAK,WAAU,6BAA4B,eAAY,QAAQ,gBAAK;AAAA,QAC1G,gBAAAA,MAAC,UAAM,UAAS;AAAA,QACf,QAAQ,iBAAiB,SAAS,gBAAAA,MAAC,UAAK,WAAU,6BAA4B,eAAY,QAAQ,gBAAK;AAAA;AAAA;AAAA,EAC1G;AAEJ;AACA,WAAW,cAAc;;;AC7BzB,YAAYE,aAAW;AACvB,SAAS,SAAAC,QAAO,mBAAmB;AAsC7B,gBAAAC,OAmCE,QAAAC,cAnCF;AAvBC,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,cAAc;AAAA,EACd;AACF,GAAsB;AACpB,QAAM,UAAgB,cAAM;AAC5B,QAAM,WAAiB,eAAyB,IAAI;AACpD,QAAM,CAAC,YAAY,aAAa,IAAU,iBAAS,KAAK;AAExD,QAAM,WAAW,CAAC,cAAiC;AACjD,QAAI,SAAU;AACd,UAAM,YAAY,MAAM,KAAK,SAAS;AACtC,QAAI,UAAU,WAAW,EAAG;AAC5B,kBAAc,WAAW,CAAC,GAAG,OAAO,GAAG,SAAS,IAAI,UAAU,MAAM,GAAG,CAAC,CAAC;AAAA,EAC3E;AAEA,SACE,gBAAAA,OAAC,SAAI,WAAW,GAAG,yBAAyB,SAAS,GACnD;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,WAAU;AAAA,QACV,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,CAAC,UAAU;AACnB,cAAI,MAAM,OAAO,MAAO,UAAS,MAAM,OAAO,KAAK;AACnD,gBAAM,OAAO,QAAQ;AAAA,QACvB;AAAA;AAAA,IACF;AAAA,IACA,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,iBAAe,cAAc;AAAA,QAC7B,MAAK;AAAA,QACL;AAAA,QACA,SAAS,MAAM,SAAS,SAAS,MAAM;AAAA,QACvC,aAAa,CAAC,UAAU;AACtB,gBAAM,eAAe;AACrB,cAAI,CAAC,SAAU,eAAc,IAAI;AAAA,QACnC;AAAA,QACA,YAAY,CAAC,UAAU,MAAM,eAAe;AAAA,QAC5C,aAAa,CAAC,UAAU;AACtB,gBAAM,eAAe;AACrB,wBAAc,KAAK;AAAA,QACrB;AAAA,QACA,QAAQ,CAAC,UAAU;AACjB,gBAAM,eAAe;AACrB,wBAAc,KAAK;AACnB,mBAAS,MAAM,aAAa,KAAK;AAAA,QACnC;AAAA,QAEA;AAAA,0BAAAD,MAAC,eAAY,eAAY,QAAO,MAAM,IAAI;AAAA,UAC1C,gBAAAC,OAAC,UAAK,WAAU,+BACd;AAAA,4BAAAD,MAAC,UAAK,WAAU,gCAAgC,iBAAM;AAAA,YACrD,eAAe,gBAAAA,MAAC,UAAK,WAAU,sCAAsC,uBAAY;AAAA,aACpF;AAAA;AAAA;AAAA,IACF;AAAA,IACC,MAAM,SAAS,KACd,gBAAAA,MAAC,QAAG,WAAU,gCAA+B,cAAW,kBACrD,gBAAM,IAAI,CAAC,MAAM,UAChB,gBAAAC,OAAC,QAAG,WAAU,+BACZ;AAAA,sBAAAD,MAAC,UAAK,WAAU,oCAAoC,eAAK,MAAK;AAAA,MAC9D,gBAAAA,MAAC,UAAK,WAAU,oCAAoC,yBAAe,KAAK,IAAI,GAAE;AAAA,MAC9E,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAK;AAAA,UACL,cAAY,UAAU,KAAK,IAAI;AAAA,UAC/B;AAAA,UACA,SAAS,MAAM,cAAc,MAAM,OAAO,CAAC,GAAG,cAAc,cAAc,KAAK,CAAC;AAAA,UAEhF,0BAAAA,MAACE,QAAA,EAAM,eAAY,QAAO,MAAM,IAAI;AAAA;AAAA,MACtC;AAAA,SAX+C,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,EAYnF,CACD,GACH;AAAA,KAEJ;AAEJ;AAEA,SAAS,eAAe,OAAe;AACrC,MAAI,QAAQ,KAAM,QAAO,GAAG,KAAK;AACjC,MAAI,QAAQ,OAAO,KAAM,QAAO,GAAG,KAAK,MAAM,QAAQ,IAAI,CAAC;AAC3D,SAAO,IAAI,SAAS,OAAO,OAAO,QAAQ,CAAC,CAAC;AAC9C;;;AC1GA,SAAS,WAAW,kBAAkB;AAoChC,gBAAAC,OA8BE,QAAAC,cA9BF;AAlBC,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAAoB;AAClB,QAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,aAAa,QAAQ,CAAC;AAC/D,QAAM,cAAc,KAAK,IAAI,KAAK,IAAI,MAAM,CAAC,GAAG,UAAU;AAC1D,QAAM,QAAQ,eAAe,IAAI,KAAK,cAAc,KAAK,WAAW;AACpE,QAAM,MAAM,KAAK,IAAI,cAAc,UAAU,UAAU;AACvD,QAAM,oBAAoB,mBAAmB,QAAQ,gBAAgB,SAAS,KAAK,oBAAoB;AAEvG,SACE,gBAAAA,OAAC,SAAI,WAAW,GAAG,sBAAsB,SAAS,GAAG,cAAY,WAC/D;AAAA,oBAAAD,MAAC,UAAK,WAAU,+BACb,yBAAe,IAAI,eAAe,GAAG,KAAK,IAAI,GAAG,OAAO,UAAU,IACrE;AAAA,IACA,gBAAAC,OAAC,SAAI,WAAU,gCACZ;AAAA,2BACC,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,WAAU;AAAA,UACV,WAAU;AAAA,UACV,OAAO,gBAAgB,IAAI,CAAC,YAAY;AAAA,YACtC,OAAO,OAAO,MAAM;AAAA,YACpB,aAAa,GAAG,MAAM;AAAA,UACxB,EAAE;AAAA,UACF,UAAU,CAAC,UAAU,iBAAiB,OAAO,KAAK,CAAC;AAAA,UACnD,eAAe,OAAO,QAAQ;AAAA,UAC9B,MAAK;AAAA,UACL,cAAa;AAAA,UACb,gBAAe;AAAA;AAAA,MACjB;AAAA,MAEF,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAK;AAAA,UACL,cAAW;AAAA,UACX,OAAM;AAAA,UACN,UAAU,gBAAgB,KAAK,eAAe;AAAA,UAC9C,SAAS,MAAM,aAAa,cAAc,CAAC;AAAA,UAE3C,0BAAAA,MAAC,aAAU,eAAY,QAAO,MAAM,IAAI;AAAA;AAAA,MAC1C;AAAA,MACA,gBAAAC,OAAC,UAAK,WAAU,4BAA2B,gBAAa,QAAQ;AAAA;AAAA,QAAY;AAAA,QAAK;AAAA,SAAW;AAAA,MAC5F,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAK;AAAA,UACL,cAAW;AAAA,UACX,OAAM;AAAA,UACN,UAAU,gBAAgB,cAAc,eAAe;AAAA,UACvD,SAAS,MAAM,aAAa,cAAc,CAAC;AAAA,UAE3C,0BAAAA,MAAC,cAAW,eAAY,QAAO,MAAM,IAAI;AAAA;AAAA,MAC3C;AAAA,OACF;AAAA,KACF;AAEJ;","names":["useState","jsxs","document","useState","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","React","jsx","React","jsx","jsxs","React","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","jsx","React","jsx","jsxs","React","CircleCheck","CircleClose","CircleInfo","Warning","jsx","jsxs","defaultIcons","CircleInfo","CircleCheck","Warning","CircleClose","Toast","ToastViewport","jsx","jsxs","React","createPortal","useEffect","useRef","jsx","jsxs","jsx","jsxs","createPortal","jsx","jsxs","React","ChevronRight","Fragment","jsx","jsxs","ChevronRight","React","jsx","React","jsx","Minus","jsx","jsxs","Minus","jsx","jsxs","useMemo","useState","jsx","jsxs","useState","useMemo","useId","useLayoutEffect","useRef","useState","jsx","jsxs","useId","useState","useRef","useLayoutEffect","nextId","React","jsx","jsxs","useId","useState","ChevronRight","ChevronDown","jsx","jsxs","useId","useState","ChevronDown","ChevronRight","jsx","jsx","jsxs","React","Fragment","jsx","jsxs","createPortal","Close","jsx","jsxs","createPortal","Close","React","jsx","React","jsx","jsxs","React","Close","jsx","jsxs","Close","jsx","jsxs"]}