@arc-lo/ui 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/streaming-text/index.ts","../src/lib/cn.ts","../src/lib/theme.ts","../src/streaming-text/use-streaming-text.ts","../src/streaming-text/streaming-text.tsx","../src/prompt-box/index.ts","../src/prompt-box/prompt-box.tsx","../src/feedback-bar/index.ts","../src/feedback-bar/feedback-bar.tsx","../src/thinking-block/index.ts","../src/thinking-block/thinking-block.tsx","../src/tool-call/index.ts","../src/tool-call/tool-call.tsx","../src/chat-thread/index.ts","../src/chat-thread/chat-thread.tsx","../src/image-gen/index.ts","../src/image-gen/image-gen.tsx","../src/video-gen/index.ts","../src/video-gen/video-gen.tsx","../src/confidence-badge/confidence-badge.tsx","../src/citation-inline/citation-inline.tsx","../src/refusal-card/refusal-card.tsx","../src/markdown-renderer/markdown-renderer.tsx","../src/status-indicator/status-indicator.tsx","../src/token-usage/token-usage.tsx","../src/model-selector/model-selector.tsx","../src/source-card/source-card.tsx","../src/file-attachment/file-attachment.tsx","../src/code-block/code-block.tsx","../src/conversation-branch/conversation-branch.tsx","../src/suggest-topics/suggest-topics.tsx"],"names":["Root","createContext","useContext","forwardRef","useState","useCallback","jsx","jsxs","Fragment","useRef","useEffect","Content","Input","ErrorFallback","Toolbar","Placeholder","Progress","useId"],"mappings":"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","file":"index.js","sourcesContent":["export {\n Root,\n Content,\n Cursor,\n Skeleton,\n ErrorFallback,\n RateLimit,\n Toolbar,\n Stop,\n useStreamingTextContext,\n type StreamingTextRootProps,\n type StreamingTextContentProps,\n type StreamingTextCursorProps,\n type StreamingTextSkeletonProps,\n type StreamingTextErrorProps,\n type StreamingTextRateLimitProps,\n type StreamingTextToolbarProps,\n type StreamingTextStopProps,\n} from \"./streaming-text\";\n\nexport {\n useStreamingText,\n type UseStreamingTextOptions,\n type UseStreamingTextReturn,\n} from \"./use-streaming-text\";\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","/**\n * arclo theme CSS custom properties.\n *\n * Light mode (default) — no setup needed.\n * Dark mode — set variables on a parent element or use prefers-color-scheme:\n *\n * ```css\n * :root {\n * --arclo-accent: #6C5CE7;\n * --arclo-accent-hover: #5A4BD1;\n * --arclo-surface: #ffffff;\n * --arclo-surface-secondary: #f9fafb;\n * --arclo-border: #e5e7eb;\n * --arclo-text: #1a1a1a;\n * --arclo-text-secondary: #6b7280;\n * --arclo-text-muted: #9ca3af;\n * --arclo-error: #ef4444;\n * --arclo-error-surface: #fef2f2;\n * --arclo-warning: #f59e0b;\n * --arclo-warning-surface: #fffbeb;\n * }\n *\n * @media (prefers-color-scheme: dark) {\n * :root {\n * --arclo-accent: #a78bfa;\n * --arclo-accent-hover: #8b6ff7;\n * --arclo-surface: #1a1a2e;\n * --arclo-surface-secondary: #16213e;\n * --arclo-border: #2d2d44;\n * --arclo-text: #e2e8f0;\n * --arclo-text-secondary: #94a3b8;\n * --arclo-text-muted: #64748b;\n * --arclo-error: #f87171;\n * --arclo-error-surface: #451a1a;\n * --arclo-warning: #fbbf24;\n * --arclo-warning-surface: #452a1a;\n * }\n * }\n *\n * // Or class-based:\n * .dark {\n * --arclo-surface: #1a1a2e;\n * // ...\n * }\n * ```\n */\nexport const themeVars = {\n accent: \"var(--arclo-accent, #6C5CE7)\",\n accentFg: \"var(--arclo-accent-fg, #ffffff)\",\n accentHover: \"var(--arclo-accent-hover, #5A4BD1)\",\n accentBright: \"var(--arclo-accent-bright, rgb(167,139,250))\",\n surface: \"var(--arclo-surface, #ffffff)\",\n surfaceSecondary: \"var(--arclo-surface-secondary, #f9fafb)\",\n border: \"var(--arclo-border, #e5e7eb)\",\n text: \"var(--arclo-text, #1a1a1a)\",\n textSecondary: \"var(--arclo-text-secondary, #6b7280)\",\n textMuted: \"var(--arclo-text-muted, #9ca3af)\",\n error: \"var(--arclo-error, #ef4444)\",\n errorSurface: \"var(--arclo-error-surface, #fef2f2)\",\n warning: \"var(--arclo-warning, #f59e0b)\",\n warningSurface: \"var(--arclo-warning-surface, #fffbeb)\",\n radius: \"var(--arclo-radius, 0.75rem)\",\n} as const;\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ChunkSize, StreamingState } from \"../lib/types\";\n\nexport interface UseStreamingTextOptions {\n /** ReadableStream of text chunks from an AI response */\n stream?: ReadableStream<string> | null;\n /** Plain text to stream (alternative to stream) */\n text?: string;\n /** Delay in ms between rendering chunks. Default: 30 */\n speed?: number;\n /** How to chunk the text for rendering. Default: \"char\" */\n chunkSize?: ChunkSize;\n /** Called when streaming completes */\n onDone?: (text: string) => void;\n /** Called on error */\n onError?: (error: Error) => void;\n /** Called when interrupted by user */\n onInterrupt?: (partialText: string) => void;\n}\n\nexport interface UseStreamingTextReturn {\n /** The text rendered so far */\n displayedText: string;\n /** The full text received (may be ahead of displayedText during animation) */\n fullText: string;\n /** Current state of the streaming component */\n state: StreamingState;\n /** Stop streaming and rendering */\n interrupt: () => void;\n /** Reset to pending state */\n reset: () => void;\n /** Jump to showing all received text immediately */\n skipAnimation: () => void;\n}\n\nfunction chunkText(text: string, mode: ChunkSize): string[] {\n switch (mode) {\n case \"char\":\n return text.split(\"\");\n case \"word\":\n return text.match(/\\S+\\s*/g) ?? [text];\n case \"line\":\n return text.match(/[^\\n]*\\n?/g)?.filter(Boolean) ?? [text];\n }\n}\n\nexport function useStreamingText({\n stream,\n text,\n speed = 30,\n chunkSize = \"char\",\n onDone,\n onError,\n onInterrupt,\n}: UseStreamingTextOptions): UseStreamingTextReturn {\n const [displayedText, setDisplayedText] = useState(\"\");\n const [fullText, setFullText] = useState(\"\");\n const [state, setState] = useState<StreamingState>(\"pending\");\n\n const bufferRef = useRef<string[]>([]);\n const drainingRef = useRef(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const interruptedRef = useRef(false);\n const readerRef = useRef<ReadableStreamDefaultReader<string> | null>(null);\n const speedRef = useRef(speed);\n const fullTextRef = useRef(\"\");\n const onDoneRef = useRef(onDone);\n const onErrorRef = useRef(onError);\n const onInterruptRef = useRef(onInterrupt);\n\n // Keep refs in sync\n speedRef.current = speed;\n onDoneRef.current = onDone;\n onErrorRef.current = onError;\n onInterruptRef.current = onInterrupt;\n\n // Single drain loop — only one runs at a time\n const startDraining = useCallback(() => {\n if (drainingRef.current) return;\n drainingRef.current = true;\n\n function tick() {\n if (bufferRef.current.length === 0) {\n drainingRef.current = false;\n return;\n }\n\n const chunk = bufferRef.current.shift()!;\n setDisplayedText((prev) => prev + chunk);\n\n timerRef.current = setTimeout(tick, speedRef.current);\n }\n\n tick();\n }, []);\n\n // Read from stream\n useEffect(() => {\n if (!stream) return;\n\n // Reset state for new stream\n interruptedRef.current = false;\n drainingRef.current = false;\n bufferRef.current = [];\n fullTextRef.current = \"\";\n setDisplayedText(\"\");\n setFullText(\"\");\n setState(\"streaming\");\n\n let cancelled = false;\n let reader: ReadableStreamDefaultReader<string>;\n\n try {\n reader = stream.getReader();\n } catch {\n // Stream already locked (e.g. React strict mode double-mount)\n return;\n }\n\n readerRef.current = reader;\n\n async function read() {\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (cancelled || interruptedRef.current) break;\n if (done) {\n // Wait for buffer to drain, then mark done\n const waitForDrain = () => {\n if (cancelled) return;\n if (bufferRef.current.length === 0 && !drainingRef.current) {\n setState(\"done\");\n onDoneRef.current?.(fullTextRef.current);\n } else {\n setTimeout(waitForDrain, 50);\n }\n };\n waitForDrain();\n return;\n }\n const chunks = chunkText(value, chunkSize);\n bufferRef.current.push(...chunks);\n fullTextRef.current += value;\n setFullText(fullTextRef.current);\n startDraining();\n }\n } catch (err) {\n if (!cancelled && !interruptedRef.current) {\n setState(\"error\");\n onErrorRef.current?.(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }\n }\n\n read();\n\n return () => {\n cancelled = true;\n if (timerRef.current) clearTimeout(timerRef.current);\n drainingRef.current = false;\n reader.cancel().catch(() => {});\n };\n }, [stream, chunkSize, startDraining]);\n\n // Handle plain text prop\n useEffect(() => {\n if (text == null || stream) return;\n\n interruptedRef.current = false;\n drainingRef.current = false;\n bufferRef.current = [];\n fullTextRef.current = text;\n setDisplayedText(\"\");\n setFullText(text);\n setState(\"streaming\");\n\n const chunks = chunkText(text, chunkSize);\n bufferRef.current = chunks;\n startDraining();\n\n const waitForDrain = () => {\n if (bufferRef.current.length === 0 && !drainingRef.current) {\n setState(\"done\");\n onDoneRef.current?.(text);\n } else {\n setTimeout(waitForDrain, 50);\n }\n };\n setTimeout(waitForDrain, 100);\n\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n drainingRef.current = false;\n };\n }, [text, stream, chunkSize, startDraining]);\n\n const interrupt = useCallback(() => {\n interruptedRef.current = true;\n if (timerRef.current) clearTimeout(timerRef.current);\n drainingRef.current = false;\n readerRef.current?.cancel().catch(() => {});\n bufferRef.current = [];\n setState(\"interrupted\");\n setDisplayedText((t) => {\n onInterruptRef.current?.(t);\n return t;\n });\n }, []);\n\n const reset = useCallback(() => {\n interruptedRef.current = false;\n if (timerRef.current) clearTimeout(timerRef.current);\n drainingRef.current = false;\n bufferRef.current = [];\n fullTextRef.current = \"\";\n setDisplayedText(\"\");\n setFullText(\"\");\n setState(\"pending\");\n }, []);\n\n const skipAnimation = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n drainingRef.current = false;\n bufferRef.current = [];\n setDisplayedText(fullTextRef.current);\n }, []);\n\n return { displayedText, fullText, state, interrupt, reset, skipAnimation };\n}\n","import {\n createContext,\n forwardRef,\n useContext,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\nimport type { ChunkSize, StreamingState } from \"../lib/types\";\nimport {\n useStreamingText,\n type UseStreamingTextOptions,\n} from \"./use-streaming-text\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface StreamingTextContextValue {\n displayedText: string;\n fullText: string;\n state: StreamingState;\n interrupt: () => void;\n reset: () => void;\n skipAnimation: () => void;\n}\n\nconst StreamingTextContext = createContext<StreamingTextContextValue | null>(\n null,\n);\n\nexport function useStreamingTextContext() {\n const ctx = useContext(StreamingTextContext);\n if (!ctx) {\n throw new Error(\n \"useStreamingTextContext must be used within <StreamingText.Root>\",\n );\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface StreamingTextRootProps\n extends UseStreamingTextOptions,\n Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"onError\"> {\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, StreamingTextRootProps>(\n (\n {\n stream,\n text,\n speed,\n chunkSize,\n onDone,\n onError,\n onInterrupt,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const ctx = useStreamingText({\n stream,\n text,\n speed,\n chunkSize,\n onDone,\n onError,\n onInterrupt,\n });\n\n return (\n <StreamingTextContext.Provider value={ctx}>\n <div\n ref={ref}\n data-state={ctx.state}\n className={cn(\"arclo-streaming-text\", className)}\n {...props}\n >\n {children ?? (\n <>\n <Content />\n <Cursor />\n </>\n )}\n </div>\n </StreamingTextContext.Provider>\n );\n },\n);\nRoot.displayName = \"StreamingText.Root\";\n\n/* ─── Content ─────────────────────────────────────────────────────── */\n\nexport interface StreamingTextContentProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Custom render function for the text */\n render?: (text: string) => ReactNode;\n}\n\nexport const Content = forwardRef<HTMLDivElement, StreamingTextContentProps>(\n ({ render, className, ...props }, ref) => {\n const { displayedText, state } = useStreamingTextContext();\n\n return (\n <div\n ref={ref}\n data-state={state}\n className={cn(\"arclo-streaming-content whitespace-pre-wrap\", className)}\n {...props}\n >\n {render ? render(displayedText) : displayedText}\n </div>\n );\n },\n);\nContent.displayName = \"StreamingText.Content\";\n\n/* ─── Cursor ──────────────────────────────────────────────────────── */\n\nexport interface StreamingTextCursorProps\n extends HTMLAttributes<HTMLSpanElement> {\n /** Character to use as cursor. Default: \"▋\" */\n char?: string;\n}\n\nexport const Cursor = forwardRef<HTMLSpanElement, StreamingTextCursorProps>(\n ({ char = \"▋\", className, ...props }, ref) => {\n const { state } = useStreamingTextContext();\n const visible = state === \"streaming\" || state === \"pending\";\n\n if (!visible) return null;\n\n return (\n <span\n ref={ref}\n aria-hidden\n style={{ color: themeVars.accent }}\n className={cn(\n \"arclo-streaming-cursor inline-block animate-pulse\",\n className,\n )}\n {...props}\n >\n {char}\n </span>\n );\n },\n);\nCursor.displayName = \"StreamingText.Cursor\";\n\n/* ─── Skeleton ────────────────────────────────────────────────────── */\n\nexport interface StreamingTextSkeletonProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Number of skeleton lines. Default: 3 */\n lines?: number;\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, StreamingTextSkeletonProps>(\n ({ lines = 3, className, ...props }, ref) => {\n const { state } = useStreamingTextContext();\n\n if (state !== \"pending\") return null;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"arclo-streaming-skeleton space-y-2\", className)}\n {...props}\n >\n {Array.from({ length: lines }, (_, i) => (\n <div\n key={i}\n className={cn(\n \"h-4 rounded bg-gray-200 animate-pulse\",\n i === lines - 1 && \"w-2/3\",\n )}\n />\n ))}\n </div>\n );\n },\n);\nSkeleton.displayName = \"StreamingText.Skeleton\";\n\n/* ─── Error ───────────────────────────────────────────────────────── */\n\nexport interface StreamingTextErrorProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Custom error message */\n message?: string;\n /** Show retry button */\n onRetry?: () => void;\n}\n\nexport const ErrorFallback = forwardRef<HTMLDivElement, StreamingTextErrorProps>(\n ({ message = \"Something went wrong.\", onRetry, className, ...props }, ref) => {\n const { state } = useStreamingTextContext();\n\n if (state !== \"error\") return null;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n style={{\n borderColor: themeVars.error,\n backgroundColor: themeVars.errorSurface,\n color: themeVars.error,\n }}\n className={cn(\n \"arclo-streaming-error rounded-lg border p-4 text-sm\",\n className,\n )}\n {...props}\n >\n <p>{message}</p>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"mt-2 text-red-600 underline hover:text-red-800 cursor-pointer\"\n >\n Try again\n </button>\n )}\n </div>\n );\n },\n);\nErrorFallback.displayName = \"StreamingText.ErrorFallback\";\n\n/* ─── RateLimit ───────────────────────────────────────────────────── */\n\nexport interface StreamingTextRateLimitProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Retry delay in seconds */\n retryAfter?: number;\n message?: string;\n}\n\nexport const RateLimit = forwardRef<HTMLDivElement, StreamingTextRateLimitProps>(\n (\n {\n retryAfter,\n message = \"Rate limit reached. Please wait.\",\n className,\n ...props\n },\n ref,\n ) => {\n const { state } = useStreamingTextContext();\n\n if (state !== \"ratelimit\") return null;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n className={cn(\n \"arclo-streaming-ratelimit rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-800\",\n className,\n )}\n {...props}\n >\n <p>{message}</p>\n {retryAfter != null && (\n <p className=\"mt-1 text-amber-600\">\n Retry in {retryAfter}s\n </p>\n )}\n </div>\n );\n },\n);\nRateLimit.displayName = \"StreamingText.RateLimit\";\n\n/* ─── Toolbar ─────────────────────────────────────────────────────── */\n\nexport interface StreamingTextToolbarProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Only show toolbar in these states. Default: [\"done\", \"interrupted\"] */\n showIn?: StreamingState[];\n}\n\nexport const Toolbar = forwardRef<HTMLDivElement, StreamingTextToolbarProps>(\n ({ showIn = [\"done\", \"interrupted\"], children, className, ...props }, ref) => {\n const { state } = useStreamingTextContext();\n\n if (!showIn.includes(state)) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-streaming-toolbar mt-2 flex items-center gap-2 animate-in fade-in duration-150\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nToolbar.displayName = \"StreamingText.Toolbar\";\n\n/* ─── Stop Button ─────────────────────────────────────────────────── */\n\nexport interface StreamingTextStopProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const Stop = forwardRef<HTMLButtonElement, StreamingTextStopProps>(\n ({ children, className, ...props }, ref) => {\n const { state, interrupt } = useStreamingTextContext();\n\n if (state !== \"streaming\") return null;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={interrupt}\n className={cn(\n \"arclo-streaming-stop rounded-md border border-gray-300 px-3 py-1.5 text-sm hover:bg-gray-50 cursor-pointer\",\n className,\n )}\n {...props}\n >\n {children ?? \"Stop generating\"}\n </button>\n );\n },\n);\nStop.displayName = \"StreamingText.Stop\";\n","export {\n Root,\n Chips,\n Chip,\n Input,\n Footer,\n SubmitButton,\n Suggestions,\n usePromptBoxContext,\n type PromptBoxRootProps,\n type PromptBoxChipsProps,\n type PromptBoxChipProps,\n type PromptBoxInputProps,\n type PromptBoxFooterProps,\n type PromptBoxSubmitProps,\n type PromptBoxSuggestionsProps,\n} from \"./prompt-box\";\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface PromptBoxContextValue {\n value: string;\n setValue: (v: string) => void;\n submit: () => void;\n isSubmitting: boolean;\n disabled: boolean;\n}\n\nconst PromptBoxContext = createContext<PromptBoxContextValue | null>(null);\n\nexport function usePromptBoxContext() {\n const ctx = useContext(PromptBoxContext);\n if (!ctx) {\n throw new Error(\n \"usePromptBoxContext must be used within <PromptBox.Root>\",\n );\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface PromptBoxRootProps\n extends Omit<HTMLAttributes<HTMLFormElement>, \"onSubmit\"> {\n /** Controlled value */\n value?: string;\n /** Default uncontrolled value */\n defaultValue?: string;\n /** Called when the prompt is submitted */\n onSubmit?: (value: string) => void;\n /** Called when value changes */\n onValueChange?: (value: string) => void;\n /** Whether a submission is in progress */\n isSubmitting?: boolean;\n /** Disable the entire prompt box */\n disabled?: boolean;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLFormElement, PromptBoxRootProps>(\n (\n {\n value: controlledValue,\n defaultValue = \"\",\n onSubmit,\n onValueChange,\n isSubmitting = false,\n disabled = false,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const value = controlledValue ?? internalValue;\n\n const setValue = useCallback(\n (v: string) => {\n if (controlledValue === undefined) setInternalValue(v);\n onValueChange?.(v);\n },\n [controlledValue, onValueChange],\n );\n\n const submit = useCallback(() => {\n if (!value.trim() || isSubmitting || disabled) return;\n onSubmit?.(value);\n }, [value, isSubmitting, disabled, onSubmit]);\n\n const handleFormSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n submit();\n },\n [submit],\n );\n\n return (\n <PromptBoxContext.Provider\n value={{ value, setValue, submit, isSubmitting, disabled }}\n >\n <form\n ref={ref}\n onSubmit={handleFormSubmit}\n style={{\n backgroundColor: themeVars.surface,\n borderColor: themeVars.border,\n color: themeVars.text,\n }}\n className={cn(\n \"arclo-prompt-box rounded-2xl border shadow-sm transition-all focus-within:shadow-md\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <Input />\n <Footer>\n <SubmitButton />\n </Footer>\n </>\n )}\n </form>\n </PromptBoxContext.Provider>\n );\n },\n);\nRoot.displayName = \"PromptBox.Root\";\n\n/* ─── Context Chips (model, files, tools) ─────────────────────────── */\n\nexport interface PromptBoxChipsProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Chips = forwardRef<HTMLDivElement, PromptBoxChipsProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-prompt-chips flex flex-wrap gap-2 px-4 pt-4 pb-1\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nChips.displayName = \"PromptBox.Chips\";\n\n/* ─── Single Chip ─────────────────────────────────────────────────── */\n\nexport interface PromptBoxChipProps extends HTMLAttributes<HTMLSpanElement> {\n onRemove?: () => void;\n}\n\nexport const Chip = forwardRef<HTMLSpanElement, PromptBoxChipProps>(\n ({ children, onRemove, className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"arclo-prompt-chip inline-flex items-center gap-1.5 rounded-lg px-2.5 py-1 text-xs font-medium\",\n className,\n )}\n style={{\n backgroundColor: themeVars.surfaceSecondary,\n color: themeVars.textSecondary,\n }}\n {...props}\n >\n {children}\n {onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"text-gray-400 hover:text-gray-600 transition-colors cursor-pointer\"\n aria-label=\"Remove\"\n >\n ×\n </button>\n )}\n </span>\n );\n },\n);\nChip.displayName = \"PromptBox.Chip\";\n\n/* ─── Input (auto-growing textarea) ───────────────────────────────── */\n\nexport interface PromptBoxInputProps\n extends Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"value\" | \"onChange\"\n > {\n /** Min rows. Default: 1 */\n minRows?: number;\n /** Max rows before scroll. Default: 8 */\n maxRows?: number;\n}\n\nexport const Input = forwardRef<HTMLTextAreaElement, PromptBoxInputProps>(\n ({ minRows = 1, maxRows = 8, className, onKeyDown, ...props }, ref) => {\n const { value, setValue, submit, isSubmitting, disabled } =\n usePromptBoxContext();\n const internalRef = useRef<HTMLTextAreaElement>(null);\n const textareaRef = (ref as React.RefObject<HTMLTextAreaElement>) ?? internalRef;\n\n // Auto-resize\n useEffect(() => {\n const el = textareaRef.current;\n if (!el) return;\n el.style.height = \"auto\";\n const lineHeight = parseInt(getComputedStyle(el).lineHeight) || 20;\n const minH = lineHeight * minRows;\n const maxH = lineHeight * maxRows;\n el.style.height = `${Math.min(Math.max(el.scrollHeight, minH), maxH)}px`;\n }, [value, minRows, maxRows, textareaRef]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n submit();\n }\n onKeyDown?.(e);\n },\n [submit, onKeyDown],\n );\n\n return (\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={disabled || isSubmitting}\n rows={minRows}\n placeholder=\"Ask anything...\"\n style={{\n scrollbarWidth: \"none\",\n color: themeVars.text,\n }}\n className={cn(\n \"arclo-prompt-input w-full resize-none bg-transparent px-4 py-3 text-[15px] leading-relaxed outline-none\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nInput.displayName = \"PromptBox.Input\";\n\n/* ─── Footer ──────────────────────────────────────────────────────── */\n\nexport interface PromptBoxFooterProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Footer = forwardRef<HTMLDivElement, PromptBoxFooterProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-prompt-footer flex items-center justify-between px-4 pb-3 pt-1\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nFooter.displayName = \"PromptBox.Footer\";\n\n/* ─── Submit Button ───────────────────────────────────────────────── */\n\nexport interface PromptBoxSubmitProps\n extends HTMLAttributes<HTMLButtonElement> {\n /** Visual variant. \"default\" = text, \"icon\" = arrow icon only, \"icon-text\" = icon + text. Default: \"default\" */\n variant?: \"default\" | \"icon\" | \"icon-text\";\n /** Custom loading label. Default: \"Sending...\" */\n loadingLabel?: string;\n}\n\nconst ArrowUpIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 19V5M5 12l7-7 7 7\" />\n </svg>\n);\n\nexport const SubmitButton = forwardRef<HTMLButtonElement, PromptBoxSubmitProps>(\n ({ children, variant = \"default\", loadingLabel, className, ...props }, ref) => {\n const { value, isSubmitting, disabled } = usePromptBoxContext();\n const isEmpty = !value.trim();\n\n const isIcon = variant === \"icon\";\n\n const content = children ?? (\n isIcon ? (\n isSubmitting ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"animate-spin\">\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n ) : (\n <ArrowUpIcon />\n )\n ) : variant === \"icon-text\" ? (\n <span className=\"inline-flex items-center gap-1.5\">\n {isSubmitting ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"animate-spin\">\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n ) : (\n <ArrowUpIcon />\n )}\n {isSubmitting ? (loadingLabel ?? \"Sending...\") : \"Send\"}\n </span>\n ) : (\n isSubmitting ? (loadingLabel ?? \"Sending...\") : \"Send\"\n )\n );\n\n return (\n <button\n ref={ref}\n type=\"submit\"\n disabled={isEmpty || isSubmitting || disabled}\n style={{ backgroundColor: themeVars.accent, color: themeVars.accentFg }}\n className={cn(\n \"arclo-prompt-submit ml-auto transition-all hover:brightness-90 disabled:opacity-25 cursor-pointer disabled:cursor-default\",\n isIcon\n ? \"rounded-xl p-2\"\n : \"rounded-xl px-4 py-2 text-sm font-medium\",\n className,\n )}\n {...props}\n >\n {content}\n </button>\n );\n },\n);\nSubmitButton.displayName = \"PromptBox.SubmitButton\";\n\n/* ─── Suggestions ─────────────────────────────────────────────────── */\n\nexport interface PromptBoxSuggestionsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n suggestions: string[];\n onSelect?: (suggestion: string) => void;\n}\n\nexport const Suggestions = forwardRef<\n HTMLDivElement,\n PromptBoxSuggestionsProps\n>(({ suggestions, onSelect, className, ...props }, ref) => {\n const { setValue } = usePromptBoxContext();\n\n if (suggestions.length === 0) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-prompt-suggestions flex flex-wrap gap-2 px-4 pb-2 pt-1\",\n className,\n )}\n {...props}\n >\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => {\n setValue(s);\n onSelect?.(s);\n }}\n className=\"rounded-full border border-gray-200 px-3.5 py-1.5 text-xs text-gray-500 transition-all hover:border-gray-300 hover:bg-gray-50 hover:text-gray-700 cursor-pointer\"\n >\n {s}\n </button>\n ))}\n </div>\n );\n});\nSuggestions.displayName = \"PromptBox.Suggestions\";\n","export {\n Root,\n ThumbsUp,\n ThumbsDown,\n Copy,\n Regenerate,\n type FeedbackBarRootProps,\n type FeedbackBarThumbsUpProps,\n type FeedbackBarThumbsDownProps,\n type FeedbackBarCopyProps,\n type FeedbackBarRegenerateProps,\n} from \"./feedback-bar\";\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ntype FeedbackValue = \"up\" | \"down\" | null;\n\ninterface FeedbackBarContextValue {\n feedback: FeedbackValue;\n setFeedback: (v: FeedbackValue) => void;\n copied: boolean;\n setCopied: (v: boolean) => void;\n}\n\nconst FeedbackBarContext = createContext<FeedbackBarContextValue | null>(null);\n\nfunction useFeedbackBarContext() {\n const ctx = useContext(FeedbackBarContext);\n if (!ctx) {\n throw new Error(\"FeedbackBar parts must be used within <FeedbackBar.Root>\");\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface FeedbackBarRootProps extends HTMLAttributes<HTMLDivElement> {\n /** Called when thumbs feedback changes */\n onFeedback?: (value: FeedbackValue) => void;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, FeedbackBarRootProps>(\n ({ onFeedback, children, className, ...props }, ref) => {\n const [feedback, setFeedbackState] = useState<FeedbackValue>(null);\n const [copied, setCopied] = useState(false);\n\n const setFeedback = useCallback(\n (v: FeedbackValue) => {\n setFeedbackState(v);\n onFeedback?.(v);\n },\n [onFeedback],\n );\n\n return (\n <FeedbackBarContext.Provider\n value={{ feedback, setFeedback, copied, setCopied }}\n >\n <div\n ref={ref}\n role=\"toolbar\"\n aria-label=\"Response actions\"\n className={cn(\n \"arclo-feedback-bar flex items-center gap-1\",\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <ThumbsUp />\n <ThumbsDown />\n <Copy />\n </>\n )}\n </div>\n </FeedbackBarContext.Provider>\n );\n },\n);\nRoot.displayName = \"FeedbackBar.Root\";\n\n/* ─── Shared button style ─────────────────────────────────────────── */\n\nconst btnBase =\n \"arclo-feedback-btn inline-flex items-center justify-center rounded-md p-1.5 transition-colors cursor-pointer\";\n\nconst btnStyle = {\n color: themeVars.textMuted,\n} as const;\n\n/* ─── ThumbsUp ────────────────────────────────────────────────────── */\n\nexport interface FeedbackBarThumbsUpProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const ThumbsUp = forwardRef<HTMLButtonElement, FeedbackBarThumbsUpProps>(\n ({ className, ...props }, ref) => {\n const { feedback, setFeedback } = useFeedbackBarContext();\n const active = feedback === \"up\";\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Good response\"\n aria-pressed={active}\n onClick={() => setFeedback(active ? null : \"up\")}\n style={active ? { color: themeVars.accent } : btnStyle}\n className={cn(btnBase, className)}\n {...props}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={active ? \"2.5\" : \"2\"}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2h0a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n </button>\n );\n },\n);\nThumbsUp.displayName = \"FeedbackBar.ThumbsUp\";\n\n/* ─── ThumbsDown ──────────────────────────────────────────────────── */\n\nexport interface FeedbackBarThumbsDownProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const ThumbsDown = forwardRef<\n HTMLButtonElement,\n FeedbackBarThumbsDownProps\n>(({ className, ...props }, ref) => {\n const { feedback, setFeedback } = useFeedbackBarContext();\n const active = feedback === \"down\";\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Bad response\"\n aria-pressed={active}\n onClick={() => setFeedback(active ? null : \"down\")}\n style={active ? { color: themeVars.error } : btnStyle}\n className={cn(btnBase, className)}\n {...props}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={active ? \"2.5\" : \"2\"}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22h0a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n </button>\n );\n});\nThumbsDown.displayName = \"FeedbackBar.ThumbsDown\";\n\n/* ─── Copy ────────────────────────────────────────────────────────── */\n\nexport interface FeedbackBarCopyProps\n extends HTMLAttributes<HTMLButtonElement> {\n /** Text to copy. If not provided, copies the closest [data-arclo-copyable] ancestor's textContent */\n text?: string;\n}\n\nexport const Copy = forwardRef<HTMLButtonElement, FeedbackBarCopyProps>(\n ({ text, className, ...props }, ref) => {\n const { copied, setCopied } = useFeedbackBarContext();\n\n const handleCopy = useCallback(async () => {\n const content =\n text ??\n (ref as React.RefObject<HTMLButtonElement>)?.current\n ?.closest(\"[data-arclo-copyable]\")\n ?.textContent ??\n \"\";\n await navigator.clipboard.writeText(content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [text, ref, setCopied]);\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={copied ? \"Copied\" : \"Copy\"}\n onClick={handleCopy}\n style={copied ? { color: \"#10b981\" } : btnStyle}\n className={cn(btnBase, className)}\n {...props}\n >\n {copied ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ) : (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n )}\n </button>\n );\n },\n);\nCopy.displayName = \"FeedbackBar.Copy\";\n\n/* ─── Regenerate ──────────────────────────────────────────────────── */\n\nexport interface FeedbackBarRegenerateProps\n extends HTMLAttributes<HTMLButtonElement> {\n onRegenerate?: () => void;\n}\n\nexport const Regenerate = forwardRef<\n HTMLButtonElement,\n FeedbackBarRegenerateProps\n>(({ onRegenerate, className, ...props }, ref) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Regenerate response\"\n onClick={onRegenerate}\n style={btnStyle}\n className={cn(btnBase, className)}\n {...props}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n <path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\" />\n <path d=\"M16 16h5v5\" />\n </svg>\n </button>\n );\n});\nRegenerate.displayName = \"FeedbackBar.Regenerate\";\n","export {\n Root,\n Trigger,\n Content,\n type ThinkingState,\n type ThinkingBlockRootProps,\n type ThinkingBlockTriggerProps,\n type ThinkingBlockContentProps,\n} from \"./thinking-block\";\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\nexport type ThinkingState = \"thinking\" | \"done\" | \"error\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface ThinkingBlockContextValue {\n state: ThinkingState;\n isOpen: boolean;\n toggle: () => void;\n duration: number | null;\n}\n\nconst ThinkingBlockContext = createContext<ThinkingBlockContextValue | null>(\n null,\n);\n\nfunction useThinkingBlockContext() {\n const ctx = useContext(ThinkingBlockContext);\n if (!ctx) {\n throw new Error(\n \"ThinkingBlock parts must be used within <ThinkingBlock.Root>\",\n );\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface ThinkingBlockRootProps extends HTMLAttributes<HTMLDivElement> {\n /** Current thinking state */\n state?: ThinkingState;\n /** Whether the block starts expanded. Default: true */\n defaultOpen?: boolean;\n /** Auto-collapse when state changes to \"done\". Default: true */\n collapseOnDone?: boolean;\n /** Thinking duration in seconds (shown in header) */\n duration?: number | null;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, ThinkingBlockRootProps>(\n (\n {\n state = \"thinking\",\n defaultOpen = true,\n collapseOnDone = true,\n duration = null,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n useEffect(() => {\n if (state === \"done\" && collapseOnDone) {\n const timer = setTimeout(() => setIsOpen(false), 500);\n return () => clearTimeout(timer);\n }\n }, [state, collapseOnDone]);\n\n const toggle = useCallback(() => setIsOpen((o) => !o), []);\n\n return (\n <ThinkingBlockContext.Provider value={{ state, isOpen, toggle, duration }}>\n <div\n ref={ref}\n data-state={state}\n data-open={isOpen}\n className={cn(\n \"arclo-thinking-block rounded-xl border border-gray-200 overflow-hidden transition-all\",\n state === \"thinking\" && \"border-[var(--arclo-accent,#6C5CE7)]/20 bg-[var(--arclo-accent,#6C5CE7)]/[0.02]\",\n state === \"done\" && \"border-gray-200 bg-white\",\n state === \"error\" && \"border-red-200 bg-red-50/30\",\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <Trigger />\n <Content />\n </>\n )}\n </div>\n </ThinkingBlockContext.Provider>\n );\n },\n);\nRoot.displayName = \"ThinkingBlock.Root\";\n\n/* ─── Trigger (clickable header) ──────────────────────────────────── */\n\nexport interface ThinkingBlockTriggerProps\n extends HTMLAttributes<HTMLButtonElement> {\n /** Custom label. Default: auto from state */\n label?: string;\n}\n\nexport const Trigger = forwardRef<HTMLButtonElement, ThinkingBlockTriggerProps>(\n ({ label, className, children, ...props }, ref) => {\n const { state, isOpen, toggle, duration } = useThinkingBlockContext();\n\n const defaultLabel =\n state === \"thinking\"\n ? \"Thinking...\"\n : state === \"error\"\n ? \"Thinking failed\"\n : duration != null\n ? `Thought for ${duration}s`\n : \"Thought process\";\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={toggle}\n aria-expanded={isOpen}\n className={cn(\n \"arclo-thinking-trigger flex w-full items-center gap-2 px-4 py-3 text-left text-sm transition-colors cursor-pointer hover:bg-gray-50/50\",\n className,\n )}\n {...props}\n >\n {/* Spinner / checkmark / error icon */}\n {state === \"thinking\" && (\n <svg\n className=\"h-4 w-4 shrink-0 animate-spin\"\n style={{ color: themeVars.accent }}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeDasharray=\"60\"\n strokeDashoffset=\"20\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n {state === \"done\" && (\n <svg\n className=\"h-4 w-4 shrink-0\"\n style={{ color: themeVars.accent }}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z\" />\n </svg>\n )}\n {state === \"error\" && (\n <svg\n className=\"h-4 w-4 shrink-0 text-red-500\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m15 9-6 6M9 9l6 6\" />\n </svg>\n )}\n\n <span\n className={cn(\n \"flex-1 font-medium\",\n state === \"thinking\" && \"text-[var(--arclo-accent,#6C5CE7)]\",\n state === \"done\" && \"text-gray-500\",\n state === \"error\" && \"text-red-600\",\n )}\n >\n {children ?? label ?? defaultLabel}\n </span>\n\n {/* Chevron */}\n <svg\n className={cn(\n \"h-4 w-4 shrink-0 text-gray-400 transition-transform duration-200\",\n isOpen && \"rotate-180\",\n )}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n );\n },\n);\nTrigger.displayName = \"ThinkingBlock.Trigger\";\n\n/* ─── Content ─────────────────────────────────────────────────────── */\n\nexport interface ThinkingBlockContentProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Content = forwardRef<HTMLDivElement, ThinkingBlockContentProps>(\n ({ children, className, ...props }, ref) => {\n const { isOpen, state } = useThinkingBlockContext();\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-thinking-content border-t border-gray-100 px-4 py-3\",\n className,\n )}\n {...props}\n >\n {children ?? (\n <p\n className={cn(\n \"text-sm leading-relaxed\",\n state === \"thinking\"\n ? \"text-gray-600 italic\"\n : \"text-gray-500\",\n )}\n >\n {state === \"thinking\"\n ? \"Analyzing the request...\"\n : \"No content provided.\"}\n </p>\n )}\n </div>\n );\n },\n);\nContent.displayName = \"ThinkingBlock.Content\";\n","export {\n Root,\n Header,\n Input,\n Output,\n type ToolCallStatus,\n type ToolCallRootProps,\n type ToolCallHeaderProps,\n type ToolCallInputProps,\n type ToolCallOutputProps,\n} from \"./tool-call\";\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\nexport type ToolCallStatus = \"pending\" | \"running\" | \"success\" | \"error\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface ToolCallContextValue {\n status: ToolCallStatus;\n toolName: string;\n isOpen: boolean;\n toggle: () => void;\n}\n\nconst ToolCallContext = createContext<ToolCallContextValue | null>(null);\n\nfunction useToolCallContext() {\n const ctx = useContext(ToolCallContext);\n if (!ctx) {\n throw new Error(\"ToolCall parts must be used within <ToolCall.Root>\");\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface ToolCallRootProps extends HTMLAttributes<HTMLDivElement> {\n /** Name of the tool being called */\n toolName: string;\n /** Current status */\n status?: ToolCallStatus;\n /** Whether result is expanded by default. Default: false */\n defaultOpen?: boolean;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, ToolCallRootProps>(\n (\n {\n toolName,\n status = \"pending\",\n defaultOpen = false,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const toggle = useCallback(() => setIsOpen((o) => !o), []);\n\n return (\n <ToolCallContext.Provider value={{ status, toolName, isOpen, toggle }}>\n <div\n ref={ref}\n data-status={status}\n className={cn(\n \"arclo-tool-call rounded-xl border overflow-hidden transition-all\",\n status === \"pending\" && \"border-gray-200 bg-gray-50/50\",\n status === \"running\" && \"border-blue-200 bg-blue-50/30\",\n status === \"success\" && \"border-emerald-200 bg-emerald-50/30\",\n status === \"error\" && \"border-red-200 bg-red-50/30\",\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <Header />\n </>\n )}\n </div>\n </ToolCallContext.Provider>\n );\n },\n);\nRoot.displayName = \"ToolCall.Root\";\n\n/* ─── Header ──────────────────────────────────────────────────────── */\n\nexport interface ToolCallHeaderProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const Header = forwardRef<HTMLButtonElement, ToolCallHeaderProps>(\n ({ children, className, ...props }, ref) => {\n const { status, toolName, isOpen, toggle } = useToolCallContext();\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={toggle}\n aria-expanded={isOpen}\n className={cn(\n \"arclo-tool-call-header flex w-full items-center gap-3 px-4 py-3 text-left text-sm cursor-pointer hover:bg-gray-50/50 transition-colors\",\n className,\n )}\n {...props}\n >\n {/* Status icon */}\n <span className=\"shrink-0\">\n {status === \"pending\" && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-gray-200\">\n <span className=\"h-2 w-2 rounded-full bg-gray-400\" />\n </span>\n )}\n {status === \"running\" && (\n <svg\n className=\"h-5 w-5 animate-spin text-blue-500\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeDasharray=\"60\"\n strokeDashoffset=\"20\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n {status === \"success\" && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-100\">\n <svg\n className=\"h-3 w-3 text-emerald-600\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </span>\n )}\n {status === \"error\" && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-red-100\">\n <svg\n className=\"h-3 w-3 text-red-600\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n >\n <path d=\"m15 9-6 6M9 9l6 6\" />\n </svg>\n </span>\n )}\n </span>\n\n {/* Tool name + status label */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-xs font-semibold text-gray-700 truncate\">\n {toolName}\n </span>\n <span\n className={cn(\n \"rounded-full px-2 py-0.5 text-[10px] font-medium\",\n status === \"pending\" && \"bg-gray-100 text-gray-500\",\n status === \"running\" && \"bg-blue-100 text-blue-600\",\n status === \"success\" && \"bg-emerald-100 text-emerald-600\",\n status === \"error\" && \"bg-red-100 text-red-600\",\n )}\n >\n {status === \"pending\" && \"Queued\"}\n {status === \"running\" && \"Running\"}\n {status === \"success\" && \"Done\"}\n {status === \"error\" && \"Failed\"}\n </span>\n </div>\n {children}\n </div>\n\n {/* Chevron */}\n <svg\n className={cn(\n \"h-4 w-4 shrink-0 text-gray-400 transition-transform duration-200\",\n isOpen && \"rotate-180\",\n )}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n );\n },\n);\nHeader.displayName = \"ToolCall.Header\";\n\n/* ─── Input (tool arguments) ──────────────────────────────────────── */\n\nexport interface ToolCallInputProps extends HTMLAttributes<HTMLDivElement> {\n /** Label for the input section. Default: \"Input\" */\n label?: string;\n}\n\nexport const Input = forwardRef<HTMLDivElement, ToolCallInputProps>(\n ({ label = \"Input\", children, className, ...props }, ref) => {\n const { isOpen } = useToolCallContext();\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-tool-call-input border-t border-gray-100 px-4 py-3\",\n className,\n )}\n {...props}\n >\n <p className=\"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-gray-400\">\n {label}\n </p>\n <div className=\"rounded-lg bg-gray-50 p-3 font-mono text-xs text-gray-600 overflow-x-auto\">\n {children}\n </div>\n </div>\n );\n },\n);\nInput.displayName = \"ToolCall.Input\";\n\n/* ─── Output (tool result) ────────────────────────────────────────── */\n\nexport interface ToolCallOutputProps extends HTMLAttributes<HTMLDivElement> {\n /** Label for the output section. Default: \"Output\" */\n label?: string;\n}\n\nexport const Output = forwardRef<HTMLDivElement, ToolCallOutputProps>(\n ({ label = \"Output\", children, className, ...props }, ref) => {\n const { isOpen, status } = useToolCallContext();\n\n if (!isOpen || status === \"pending\" || status === \"running\") return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-tool-call-output border-t border-gray-100 px-4 py-3\",\n className,\n )}\n {...props}\n >\n <p className=\"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-gray-400\">\n {label}\n </p>\n <div\n className={cn(\n \"rounded-lg p-3 font-mono text-xs overflow-x-auto\",\n status === \"success\" && \"bg-emerald-50 text-emerald-800\",\n status === \"error\" && \"bg-red-50 text-red-800\",\n )}\n >\n {children}\n </div>\n </div>\n );\n },\n);\nOutput.displayName = \"ToolCall.Output\";\n","export {\n Root,\n Messages,\n Message,\n UserMessage,\n AssistantMessage,\n SystemMessage,\n ScrollAnchor,\n type MessageRole,\n type ChatThreadRootProps,\n type ChatThreadMessagesProps,\n type ChatThreadMessageProps,\n type ChatThreadUserMessageProps,\n type ChatThreadAssistantMessageProps,\n type ChatThreadSystemMessageProps,\n type ChatThreadScrollAnchorProps,\n} from \"./chat-thread\";\n","import { forwardRef, useEffect, useRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── Types ──────────────────────────────────────────────────────── */\n\nexport type MessageRole = \"user\" | \"assistant\" | \"system\";\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface ChatThreadRootProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, ChatThreadRootProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"arclo-chat-thread flex flex-col\", className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nRoot.displayName = \"ChatThread.Root\";\n\n/* ─── Messages ───────────────────────────────────────────────────── */\n\nexport interface ChatThreadMessagesProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const Messages = forwardRef<HTMLDivElement, ChatThreadMessagesProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-chat-messages flex-1 overflow-y-auto space-y-4 p-4\",\n className,\n )}\n style={{\n scrollbarWidth: \"thin\",\n scrollbarColor: `var(--arclo-border, #e5e7eb) transparent`,\n }}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nMessages.displayName = \"ChatThread.Messages\";\n\n/* ─── Message ────────────────────────────────────────────────────── */\n\nexport interface ChatThreadMessageProps extends HTMLAttributes<HTMLDivElement> {\n /** The role determines visual styling and alignment */\n role: MessageRole;\n /** Optional avatar element (icon, image, etc.) */\n avatar?: ReactNode;\n /** Display name for the message author */\n name?: string;\n /** Timestamp string to display */\n timestamp?: string;\n children: ReactNode;\n}\n\nexport const Message = forwardRef<HTMLDivElement, ChatThreadMessageProps>(\n ({ role, avatar, name, timestamp, children, className, ...props }, ref) => {\n if (role === \"system\") {\n return (\n <div\n ref={ref}\n data-role={role}\n className={cn(\n \"arclo-chat-message flex justify-center\",\n className,\n )}\n {...props}\n >\n <div\n className=\"max-w-md rounded-lg px-4 py-2 text-center text-xs\"\n style={{ color: themeVars.textMuted }}\n >\n {(name || timestamp) && (\n <div className=\"mb-1 flex items-center justify-center gap-2\">\n {avatar}\n {name && <span className=\"font-medium\">{name}</span>}\n {timestamp && <span className=\"opacity-60\">{timestamp}</span>}\n </div>\n )}\n <div>{children}</div>\n </div>\n </div>\n );\n }\n\n const isUser = role === \"user\";\n\n return (\n <div\n ref={ref}\n data-role={role}\n className={cn(\n \"arclo-chat-message flex gap-3\",\n isUser ? \"flex-row-reverse\" : \"flex-row\",\n className,\n )}\n {...props}\n >\n {/* Avatar */}\n {avatar && (\n <div className=\"flex-shrink-0 mt-1\">{avatar}</div>\n )}\n\n {/* Bubble */}\n <div\n className={cn(\"max-w-[80%] min-w-0\", isUser ? \"items-end\" : \"items-start\")}\n >\n {/* Header */}\n {(name || timestamp) && (\n <div\n className={cn(\n \"mb-1 flex items-center gap-2 text-xs\",\n isUser ? \"justify-end\" : \"justify-start\",\n )}\n style={{ color: themeVars.textSecondary }}\n >\n {name && <span className=\"font-medium\">{name}</span>}\n {timestamp && <span className=\"opacity-60\">{timestamp}</span>}\n </div>\n )}\n\n {/* Content */}\n <div\n className={cn(\n \"rounded-2xl px-4 py-3 text-sm leading-relaxed\",\n isUser ? \"rounded-tr-sm\" : \"rounded-tl-sm\",\n )}\n style={\n isUser\n ? {\n backgroundColor: themeVars.accent,\n color: themeVars.accentFg,\n }\n : {\n backgroundColor: themeVars.surface,\n color: themeVars.text,\n border: `1px solid ${themeVars.border}`,\n }\n }\n >\n {children}\n </div>\n </div>\n </div>\n );\n },\n);\nMessage.displayName = \"ChatThread.Message\";\n\n/* ─── UserMessage ────────────────────────────────────────────────── */\n\nexport interface ChatThreadUserMessageProps\n extends Omit<ChatThreadMessageProps, \"role\"> {}\n\nexport const UserMessage = forwardRef<HTMLDivElement, ChatThreadUserMessageProps>(\n (props, ref) => <Message ref={ref} role=\"user\" {...props} />,\n);\nUserMessage.displayName = \"ChatThread.UserMessage\";\n\n/* ─── AssistantMessage ───────────────────────────────────────────── */\n\nexport interface ChatThreadAssistantMessageProps\n extends Omit<ChatThreadMessageProps, \"role\"> {}\n\nexport const AssistantMessage = forwardRef<\n HTMLDivElement,\n ChatThreadAssistantMessageProps\n>((props, ref) => <Message ref={ref} role=\"assistant\" {...props} />);\nAssistantMessage.displayName = \"ChatThread.AssistantMessage\";\n\n/* ─── SystemMessage ──────────────────────────────────────────────── */\n\nexport interface ChatThreadSystemMessageProps\n extends Omit<ChatThreadMessageProps, \"role\"> {}\n\nexport const SystemMessage = forwardRef<\n HTMLDivElement,\n ChatThreadSystemMessageProps\n>((props, ref) => <Message ref={ref} role=\"system\" {...props} />);\nSystemMessage.displayName = \"ChatThread.SystemMessage\";\n\n/* ─── ScrollAnchor ───────────────────────────────────────────────── */\n\nexport interface ChatThreadScrollAnchorProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const ScrollAnchor = forwardRef<HTMLDivElement, ChatThreadScrollAnchorProps>(\n ({ className, ...props }, ref) => {\n const innerRef = useRef<HTMLDivElement>(null);\n\n // Merge forwarded ref with inner ref\n const setRef = (node: HTMLDivElement | null) => {\n (innerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n };\n\n useEffect(() => {\n const el = innerRef.current;\n if (!el) return;\n\n // Find the scrollable parent (the Messages container)\n const scrollParent = el.closest(\".arclo-chat-messages\");\n\n const observer = new MutationObserver(() => {\n if (scrollParent) {\n scrollParent.scrollTo({\n top: scrollParent.scrollHeight,\n behavior: \"smooth\",\n });\n }\n });\n\n const parent = el.parentElement;\n if (parent) {\n observer.observe(parent, { childList: true, subtree: true });\n }\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <div\n ref={setRef}\n aria-hidden\n className={cn(\"arclo-chat-scroll-anchor h-px\", className)}\n {...props}\n />\n );\n },\n);\nScrollAnchor.displayName = \"ChatThread.ScrollAnchor\";\n","export {\n Root,\n Placeholder,\n Preview,\n Progress,\n Overlay,\n ErrorFallback,\n Toolbar,\n Download,\n Retry,\n} from \"./image-gen\";\n\nexport type { ImageGenRootProps } from \"./image-gen\";\n","import {\n createContext,\n forwardRef,\n useContext,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\nimport type { ImageGenState } from \"../lib/types\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface ImageGenContextValue {\n state: ImageGenState;\n src?: string | null;\n alt?: string;\n aspectRatio: string;\n prompt?: string;\n onRetry?: () => void;\n onDownload?: () => void;\n blurReveal: boolean;\n}\n\nconst ImageGenContext = createContext<ImageGenContextValue | null>(null);\n\nfunction useImageGenContext() {\n const ctx = useContext(ImageGenContext);\n if (!ctx) {\n throw new Error(\n \"useImageGenContext must be used within <ImageGen.Root>\",\n );\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface ImageGenRootProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n state: ImageGenState;\n src?: string | null;\n alt?: string;\n aspectRatio?: string;\n prompt?: string;\n onRetry?: () => void;\n onDownload?: () => void;\n blurReveal?: boolean;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, ImageGenRootProps>(\n (\n {\n state,\n src,\n alt,\n aspectRatio = \"1/1\",\n prompt,\n onRetry,\n onDownload,\n blurReveal = true,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const ctx: ImageGenContextValue = {\n state,\n src,\n alt,\n aspectRatio,\n prompt,\n onRetry,\n onDownload,\n blurReveal,\n };\n\n return (\n <ImageGenContext.Provider value={ctx}>\n <div\n ref={ref}\n data-state={state}\n style={{ position: \"relative\" }}\n className={cn(\"arclo-image-gen\", className)}\n {...props}\n >\n {children}\n </div>\n </ImageGenContext.Provider>\n );\n },\n);\nRoot.displayName = \"ImageGen.Root\";\n\n/* ─── Placeholder ────────────────────────────────────────────────── */\n\nexport interface ImageGenPlaceholderProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Placeholder = forwardRef<HTMLDivElement, ImageGenPlaceholderProps>(\n ({ className, ...props }, ref) => {\n const { state, src, aspectRatio } = useImageGenContext();\n\n const visible =\n state === \"idle\" || state === \"pending\" || (state === \"generating\" && !src);\n\n if (!visible) return null;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading image\"\n style={{\n aspectRatio,\n backgroundColor: themeVars.surfaceSecondary,\n borderRadius: themeVars.radius,\n overflow: \"hidden\",\n position: \"relative\",\n }}\n className={cn(\"arclo-image-gen-placeholder\", className)}\n {...props}\n >\n <div\n dangerouslySetInnerHTML={{\n __html: `<style>\n@keyframes arclo-shimmer {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(100%); }\n}\n</style>`,\n }}\n />\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: `linear-gradient(90deg, transparent 0%, ${themeVars.border} 50%, transparent 100%)`,\n animation: \"arclo-shimmer 1.5s ease-in-out infinite\",\n }}\n />\n </div>\n );\n },\n);\nPlaceholder.displayName = \"ImageGen.Placeholder\";\n\n/* ─── Preview ────────────────────────────────────────────────────── */\n\nexport interface ImageGenPreviewProps\n extends Omit<HTMLAttributes<HTMLImageElement>, \"src\" | \"alt\"> {}\n\nexport const Preview = forwardRef<HTMLImageElement, ImageGenPreviewProps>(\n ({ className, style, ...props }, ref) => {\n const { state, src, alt, aspectRatio, blurReveal } = useImageGenContext();\n\n if (!src) return null;\n\n const isDone = state === \"done\";\n const blurValue = blurReveal && !isDone ? \"blur(20px)\" : \"blur(0)\";\n\n return (\n <img\n ref={ref}\n src={src}\n alt={alt ?? \"\"}\n data-state={state}\n style={{\n aspectRatio,\n width: \"100%\",\n display: \"block\",\n borderRadius: themeVars.radius,\n objectFit: \"cover\",\n filter: blurValue,\n transition: \"filter 0.6s ease-out\",\n ...style,\n }}\n className={cn(\"arclo-image-gen-preview\", className)}\n {...props}\n />\n );\n },\n);\nPreview.displayName = \"ImageGen.Preview\";\n\n/* ─── Progress ───────────────────────────────────────────────────── */\n\nexport interface ImageGenProgressProps\n extends HTMLAttributes<HTMLDivElement> {\n progress?: number;\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ImageGenProgressProps>(\n ({ progress, className, ...props }, ref) => {\n const { state } = useImageGenContext();\n\n if (state !== \"pending\" && state !== \"generating\") return null;\n\n const isIndeterminate = progress === undefined;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={isIndeterminate ? undefined : progress}\n aria-valuemin={0}\n aria-valuemax={100}\n style={{\n position: \"absolute\",\n bottom: 0,\n left: 0,\n right: 0,\n height: \"3px\",\n backgroundColor: themeVars.surfaceSecondary,\n borderRadius: \"0 0 3px 3px\",\n overflow: \"hidden\",\n }}\n className={cn(\"arclo-image-gen-progress\", className)}\n {...props}\n >\n {isIndeterminate ? (\n <>\n <div\n dangerouslySetInnerHTML={{\n __html: `<style>\n@keyframes arclo-progress-shimmer {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(200%); }\n}\n</style>`,\n }}\n />\n <div\n style={{\n width: \"40%\",\n height: \"100%\",\n backgroundColor: themeVars.accent,\n animation: \"arclo-progress-shimmer 1.2s ease-in-out infinite\",\n }}\n />\n </>\n ) : (\n <div\n style={{\n width: `${Math.min(100, Math.max(0, progress))}%`,\n height: \"100%\",\n backgroundColor: themeVars.accent,\n transition: \"width 0.3s ease-out\",\n }}\n />\n )}\n </div>\n );\n },\n);\nProgress.displayName = \"ImageGen.Progress\";\n\n/* ─── Overlay ────────────────────────────────────────────────────── */\n\nconst stateLabels: Record<ImageGenState, string> = {\n idle: \"Waiting\",\n pending: \"Preparing...\",\n generating: \"Generating...\",\n done: \"Done\",\n error: \"Error\",\n};\n\nexport interface ImageGenOverlayProps\n extends HTMLAttributes<HTMLDivElement> {\n label?: string;\n}\n\nexport const Overlay = forwardRef<HTMLDivElement, ImageGenOverlayProps>(\n ({ label, className, ...props }, ref) => {\n const { state } = useImageGenContext();\n\n if (state !== \"pending\" && state !== \"generating\") return null;\n\n const displayLabel = label ?? stateLabels[state];\n\n return (\n <div\n ref={ref}\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n backgroundColor: \"rgba(0, 0, 0, 0.4)\",\n borderRadius: themeVars.radius,\n color: \"#ffffff\",\n }}\n className={cn(\"arclo-image-gen-overlay\", className)}\n {...props}\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ animation: \"spin 1s linear infinite\" }}\n >\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeDasharray=\"31.4 31.4\"\n strokeLinecap=\"round\"\n />\n </svg>\n {displayLabel && (\n <span style={{ fontSize: \"14px\", fontWeight: 500 }}>\n {displayLabel}\n </span>\n )}\n </div>\n );\n },\n);\nOverlay.displayName = \"ImageGen.Overlay\";\n\n/* ─── ErrorFallback ──────────────────────────────────────────────── */\n\nexport interface ImageGenErrorFallbackProps\n extends HTMLAttributes<HTMLDivElement> {\n message?: string;\n}\n\nexport const ErrorFallback = forwardRef<HTMLDivElement, ImageGenErrorFallbackProps>(\n ({ message = \"Failed to generate image.\", className, ...props }, ref) => {\n const { state, onRetry } = useImageGenContext();\n\n if (state !== \"error\") return null;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n style={{\n borderColor: themeVars.error,\n backgroundColor: themeVars.errorSurface,\n color: themeVars.error,\n }}\n className={cn(\n \"arclo-image-gen-error rounded-lg border p-4 text-sm\",\n className,\n )}\n {...props}\n >\n <p>{message}</p>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n style={{ color: themeVars.error }}\n className=\"mt-2 underline cursor-pointer\"\n >\n Try again\n </button>\n )}\n </div>\n );\n },\n);\nErrorFallback.displayName = \"ImageGen.ErrorFallback\";\n\n/* ─── Toolbar ────────────────────────────────────────────────────── */\n\nexport interface ImageGenToolbarProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Toolbar = forwardRef<HTMLDivElement, ImageGenToolbarProps>(\n ({ children, className, ...props }, ref) => {\n const { state } = useImageGenContext();\n\n if (state !== \"done\") return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-image-gen-toolbar mt-2 flex items-center gap-2 animate-in fade-in duration-150\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nToolbar.displayName = \"ImageGen.Toolbar\";\n\n/* ─── Download ───────────────────────────────────────────────────── */\n\nexport interface ImageGenDownloadProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const Download = forwardRef<HTMLButtonElement, ImageGenDownloadProps>(\n ({ children, className, ...props }, ref) => {\n const { onDownload } = useImageGenContext();\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onDownload}\n style={{\n backgroundColor: themeVars.accent,\n color: themeVars.accentFg,\n borderRadius: themeVars.radius,\n }}\n className={cn(\n \"arclo-image-gen-download px-3 py-1.5 text-sm cursor-pointer\",\n className,\n )}\n {...props}\n >\n {children ?? \"Download\"}\n </button>\n );\n },\n);\nDownload.displayName = \"ImageGen.Download\";\n\n/* ─── Retry ──────────────────────────────────────────────────────── */\n\nexport interface ImageGenRetryProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const Retry = forwardRef<HTMLButtonElement, ImageGenRetryProps>(\n ({ children, className, ...props }, ref) => {\n const { onRetry } = useImageGenContext();\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onRetry}\n style={{\n borderColor: themeVars.border,\n color: themeVars.text,\n borderRadius: themeVars.radius,\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n }}\n className={cn(\n \"arclo-image-gen-retry px-3 py-1.5 text-sm cursor-pointer\",\n className,\n )}\n {...props}\n >\n {children ?? \"Retry\"}\n </button>\n );\n },\n);\nRetry.displayName = \"ImageGen.Retry\";\n","export {\n Root,\n Placeholder,\n Thumbnail,\n Player,\n Progress,\n StageLabel,\n ErrorFallback,\n Toolbar,\n PlayButton,\n} from \"./video-gen\";\n\nexport type { VideoGenRootProps } from \"./video-gen\";\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\nimport type { VideoGenState } from \"../lib/types\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface VideoGenContextValue {\n state: VideoGenState;\n src: string | null;\n poster: string | null;\n progress: number | undefined;\n aspectRatio: string;\n duration: number | null;\n prompt: string | undefined;\n onRetry: (() => void) | undefined;\n onDownload: (() => void) | undefined;\n onPlay: (() => void) | undefined;\n}\n\nconst VideoGenContext = createContext<VideoGenContextValue | null>(null);\n\nfunction useVideoGenContext() {\n const ctx = useContext(VideoGenContext);\n if (!ctx) {\n throw new Error(\n \"useVideoGenContext must be used within <VideoGen.Root>\",\n );\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface VideoGenRootProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n state: VideoGenState;\n src?: string | null;\n poster?: string | null;\n progress?: number;\n aspectRatio?: string;\n duration?: number | null;\n prompt?: string;\n onRetry?: () => void;\n onDownload?: () => void;\n onPlay?: () => void;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, VideoGenRootProps>(\n (\n {\n state,\n src = null,\n poster = null,\n progress,\n aspectRatio = \"16/9\",\n duration = null,\n prompt,\n onRetry,\n onDownload,\n onPlay,\n children,\n className,\n style,\n ...props\n },\n ref,\n ) => {\n const ctx: VideoGenContextValue = {\n state,\n src,\n poster,\n progress,\n aspectRatio,\n duration,\n prompt,\n onRetry,\n onDownload,\n onPlay,\n };\n\n return (\n <VideoGenContext.Provider value={ctx}>\n <div\n ref={ref}\n data-state={state}\n className={cn(\"arclo-video-gen relative overflow-hidden\", className)}\n style={{\n aspectRatio,\n borderRadius: themeVars.radius,\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n </VideoGenContext.Provider>\n );\n },\n);\nRoot.displayName = \"VideoGen.Root\";\n\n/* ─── Placeholder ────────────────────────────────────────────────── */\n\nexport interface VideoGenPlaceholderProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Placeholder = forwardRef<HTMLDivElement, VideoGenPlaceholderProps>(\n ({ className, ...props }, ref) => {\n const { state, poster } = useVideoGenContext();\n const id = useId().replace(/:/g, \"\");\n\n const visible =\n (state === \"idle\" || state === \"queued\" || state === \"processing\") &&\n !poster;\n\n if (!visible) return null;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Preparing video\"\n className={cn(\n \"arclo-video-gen-placeholder absolute inset-0 flex items-center justify-center\",\n className,\n )}\n style={{ backgroundColor: themeVars.surfaceSecondary }}\n {...props}\n >\n <style\n dangerouslySetInnerHTML={{\n __html: `\n@keyframes arclo-vg-shimmer-${id} {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n}`,\n }}\n />\n <div\n className=\"absolute inset-0\"\n style={{\n background: `linear-gradient(90deg, transparent 0%, ${themeVars.border} 50%, transparent 100%)`,\n backgroundSize: \"200% 100%\",\n animation: `arclo-vg-shimmer-${id} 2s ease-in-out infinite`,\n opacity: 0.5,\n }}\n />\n {/* Clapperboard icon */}\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ color: themeVars.textMuted, position: \"relative\", zIndex: 1 }}\n >\n <path d=\"M4 11v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\" />\n <path d=\"M4 11V7a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4\" />\n <path d=\"M4 11h16\" />\n <path d=\"M7 5l2 6\" />\n <path d=\"M11 5l2 6\" />\n <path d=\"M15 5l2 6\" />\n </svg>\n </div>\n );\n },\n);\nPlaceholder.displayName = \"VideoGen.Placeholder\";\n\n/* ─── Thumbnail ──────────────────────────────────────────────────── */\n\nexport interface VideoGenThumbnailProps\n extends HTMLAttributes<HTMLImageElement> {}\n\nexport const Thumbnail = forwardRef<HTMLImageElement, VideoGenThumbnailProps>(\n ({ className, style: styleProp, ...props }, ref) => {\n const { state, poster } = useVideoGenContext();\n\n const visible =\n poster &&\n (state === \"processing\" || state === \"rendering\" || state === \"done\");\n\n if (!visible) return null;\n\n return (\n <img\n ref={ref}\n src={poster}\n alt=\"Video thumbnail\"\n className={cn(\n \"arclo-video-gen-thumbnail absolute inset-0 h-full w-full object-cover\",\n className,\n )}\n style={{\n borderRadius: themeVars.radius,\n ...styleProp,\n }}\n {...props}\n />\n );\n },\n);\nThumbnail.displayName = \"VideoGen.Thumbnail\";\n\n/* ─── Player ─────────────────────────────────────────────────────── */\n\nexport interface VideoGenPlayerProps\n extends HTMLAttributes<HTMLVideoElement> {\n /** Additional props passed to the <video> element */\n autoPlay?: boolean;\n loop?: boolean;\n muted?: boolean;\n}\n\nexport const Player = forwardRef<HTMLVideoElement, VideoGenPlayerProps>(\n ({ className, style: styleProp, autoPlay, loop, muted, ...props }, ref) => {\n const { state, src, poster } = useVideoGenContext();\n\n if (state !== \"done\" || !src) return null;\n\n return (\n <video\n ref={ref}\n src={src}\n poster={poster ?? undefined}\n controls\n autoPlay={autoPlay}\n loop={loop}\n muted={muted}\n className={cn(\n \"arclo-video-gen-player absolute inset-0 h-full w-full object-contain\",\n className,\n )}\n style={{\n borderRadius: themeVars.radius,\n backgroundColor: themeVars.surface,\n ...styleProp,\n }}\n {...props}\n />\n );\n },\n);\nPlayer.displayName = \"VideoGen.Player\";\n\n/* ─── Progress ───────────────────────────────────────────────────── */\n\nexport interface VideoGenProgressProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Progress = forwardRef<HTMLDivElement, VideoGenProgressProps>(\n ({ className, ...props }, ref) => {\n const { state, progress } = useVideoGenContext();\n const id = useId().replace(/:/g, \"\");\n\n const visible =\n state === \"queued\" || state === \"processing\" || state === \"rendering\";\n\n if (!visible) return null;\n\n const isDeterminate = progress != null;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={isDeterminate ? progress : undefined}\n aria-valuemin={0}\n aria-valuemax={100}\n className={cn(\n \"arclo-video-gen-progress absolute bottom-0 left-0 right-0 h-1\",\n className,\n )}\n style={{ backgroundColor: `color-mix(in srgb, ${themeVars.accent} 20%, transparent)` }}\n {...props}\n >\n <style\n dangerouslySetInnerHTML={{\n __html: `\n@keyframes arclo-vg-indeterminate-${id} {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n}`,\n }}\n />\n <div\n className=\"h-full\"\n style={\n isDeterminate\n ? {\n width: `${Math.min(100, Math.max(0, progress))}%`,\n backgroundColor: themeVars.accent,\n transition: \"width 0.3s ease\",\n }\n : {\n width: \"25%\",\n backgroundColor: themeVars.accent,\n animation: `arclo-vg-indeterminate-${id} 1.5s ease-in-out infinite`,\n }\n }\n />\n </div>\n );\n },\n);\nProgress.displayName = \"VideoGen.Progress\";\n\n/* ─── StageLabel ─────────────────────────────────────────────────── */\n\nexport interface VideoGenStageLabelProps\n extends HTMLAttributes<HTMLSpanElement> {\n /** Override the auto-generated label */\n label?: string;\n}\n\nfunction getAutoLabel(state: VideoGenState, progress?: number): string {\n switch (state) {\n case \"idle\":\n return \"\";\n case \"queued\":\n return \"Queued...\";\n case \"processing\":\n return progress != null ? `Processing ${Math.round(progress)}%` : \"Processing...\";\n case \"rendering\":\n return progress != null ? `Rendering ${Math.round(progress)}%` : \"Rendering...\";\n case \"done\":\n return \"Complete\";\n case \"error\":\n return \"Failed\";\n default:\n return \"\";\n }\n}\n\nexport const StageLabel = forwardRef<HTMLSpanElement, VideoGenStageLabelProps>(\n ({ label, className, ...props }, ref) => {\n const { state, progress } = useVideoGenContext();\n const id = useId().replace(/:/g, \"\");\n\n const displayLabel = label ?? getAutoLabel(state, progress);\n const isActive =\n state === \"queued\" || state === \"processing\" || state === \"rendering\";\n\n if (!displayLabel) return null;\n\n const accentColor = themeVars.accent;\n const brightColor = themeVars.accentBright;\n\n return (\n <span\n ref={ref}\n data-state={state}\n className={cn(\n \"arclo-video-gen-stage-label text-sm font-medium\",\n className,\n )}\n style={{ color: accentColor }}\n {...props}\n >\n <style\n dangerouslySetInnerHTML={{\n __html: `\n@keyframes arclo-vg-sweep-${id} {\n 0%, 100% { color: ${accentColor}; opacity: 0.5; }\n 50% { color: ${brightColor}; opacity: 1; }\n}`,\n }}\n />\n {isActive ? (\n <span aria-label={displayLabel}>\n {displayLabel.split(\"\").map((char, i) => (\n <span\n key={i}\n style={{\n display: \"inline-block\",\n animation: `arclo-vg-sweep-${id} 1.5s ease-in-out infinite`,\n animationDelay: `${i * 0.08}s`,\n }}\n >\n {char === \" \" ? \"\\u00A0\" : char}\n </span>\n ))}\n </span>\n ) : (\n <span>{displayLabel}</span>\n )}\n </span>\n );\n },\n);\nStageLabel.displayName = \"VideoGen.StageLabel\";\n\n/* ─── ErrorFallback ──────────────────────────────────────────────── */\n\nexport interface VideoGenErrorFallbackProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Custom error message */\n message?: string;\n}\n\nexport const ErrorFallback = forwardRef<HTMLDivElement, VideoGenErrorFallbackProps>(\n ({ message = \"Video generation failed.\", className, ...props }, ref) => {\n const { state, onRetry } = useVideoGenContext();\n\n if (state !== \"error\") return null;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n \"arclo-video-gen-error absolute inset-0 flex flex-col items-center justify-center gap-2 p-4 text-sm\",\n className,\n )}\n style={{\n backgroundColor: themeVars.errorSurface,\n color: themeVars.error,\n borderRadius: themeVars.radius,\n }}\n {...props}\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n <p>{message}</p>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"mt-1 underline cursor-pointer\"\n style={{ color: themeVars.error }}\n >\n Try again\n </button>\n )}\n </div>\n );\n },\n);\nErrorFallback.displayName = \"VideoGen.ErrorFallback\";\n\n/* ─── Toolbar ────────────────────────────────────────────────────── */\n\nexport interface VideoGenToolbarProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Toolbar = forwardRef<HTMLDivElement, VideoGenToolbarProps>(\n ({ children, className, ...props }, ref) => {\n const { state } = useVideoGenContext();\n\n if (state !== \"done\") return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-video-gen-toolbar absolute bottom-4 right-4 flex items-center gap-2 animate-in fade-in duration-150\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nToolbar.displayName = \"VideoGen.Toolbar\";\n\n/* ─── PlayButton ─────────────────────────────────────────────────── */\n\nexport interface VideoGenPlayButtonProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const PlayButton = forwardRef<HTMLButtonElement, VideoGenPlayButtonProps>(\n ({ className, children, ...props }, ref) => {\n const { state, onPlay, src } = useVideoGenContext();\n const videoRef = useRef<HTMLVideoElement | null>(null);\n\n const visible = state === \"done\" && src;\n\n if (!visible) return null;\n\n const handleClick = () => {\n if (onPlay) {\n onPlay();\n } else {\n // Try to find and play the video element within the root\n const root = (ref as React.RefObject<HTMLElement>)?.current?.closest(\n \".arclo-video-gen\",\n );\n const video = root?.querySelector(\"video\");\n if (video) {\n video.play();\n }\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Play video\"\n onClick={handleClick}\n className={cn(\n \"arclo-video-gen-play-button absolute inset-0 m-auto flex h-16 w-16 items-center justify-center rounded-full cursor-pointer transition-transform hover:scale-110\",\n className,\n )}\n style={{\n backgroundColor: themeVars.accent,\n color: themeVars.accentFg,\n }}\n {...props}\n >\n {children ?? (\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n )}\n </button>\n );\n },\n);\nPlayButton.displayName = \"VideoGen.PlayButton\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport type { ConfidenceLevel } from \"../lib/types\";\n\nconst levelConfig: Record<\n ConfidenceLevel,\n { label: string; classes: string }\n> = {\n high: {\n label: \"High confidence\",\n classes: \"bg-emerald-50 text-emerald-700 border-emerald-200\",\n },\n medium: {\n label: \"Medium confidence\",\n classes: \"bg-amber-50 text-amber-700 border-amber-200\",\n },\n low: {\n label: \"Low confidence\",\n classes: \"bg-red-50 text-red-700 border-red-200\",\n },\n unknown: {\n label: \"Confidence unknown\",\n classes: \"bg-gray-50 text-gray-500 border-gray-200\",\n },\n};\n\n/* ─── Badge ───────────────────────────────────────────────────────── */\n\nexport interface ConfidenceBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n /** Confidence level */\n level: ConfidenceLevel;\n /** Custom label override */\n label?: string;\n /** Show as a small dot indicator instead of full badge */\n variant?: \"badge\" | \"dot\" | \"inline\";\n}\n\nexport const ConfidenceBadge = forwardRef<HTMLSpanElement, ConfidenceBadgeProps>(\n ({ level, label, variant = \"badge\", className, ...props }, ref) => {\n const config = levelConfig[level];\n const displayLabel = label ?? config.label;\n\n if (variant === \"dot\") {\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={displayLabel}\n title={displayLabel}\n className={cn(\n \"arclo-confidence-dot inline-block h-2.5 w-2.5 shrink-0 rounded-full\",\n level === \"high\" && \"bg-emerald-500\",\n level === \"medium\" && \"bg-amber-500\",\n level === \"low\" && \"bg-red-500\",\n level === \"unknown\" && \"bg-gray-400\",\n className,\n )}\n {...props}\n />\n );\n }\n\n if (variant === \"inline\") {\n return (\n <span\n ref={ref}\n role=\"status\"\n className={cn(\n \"arclo-confidence-inline text-xs italic\",\n level === \"high\" && \"text-emerald-600\",\n level === \"medium\" && \"text-amber-600\",\n level === \"low\" && \"text-red-600\",\n level === \"unknown\" && \"text-gray-400\",\n className,\n )}\n {...props}\n >\n {displayLabel}\n </span>\n );\n }\n\n return (\n <span\n ref={ref}\n role=\"status\"\n className={cn(\n \"arclo-confidence-badge inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium\",\n config.classes,\n className,\n )}\n {...props}\n >\n <span\n className={cn(\n \"h-2 w-2 shrink-0 rounded-full\",\n level === \"high\" && \"bg-emerald-500\",\n level === \"medium\" && \"bg-amber-500\",\n level === \"low\" && \"bg-red-500\",\n level === \"unknown\" && \"bg-gray-400\",\n )}\n />\n {displayLabel}\n </span>\n );\n },\n);\nConfidenceBadge.displayName = \"ConfidenceBadge\";\n","import {\n forwardRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Citation ────────────────────────────────────────────────────── */\n\nexport interface CitationInlineProps extends HTMLAttributes<HTMLSpanElement> {\n /** Citation index number */\n index: number;\n /** Source URL */\n href?: string;\n /** Source title */\n sourceTitle?: string;\n /** Preview content shown on hover */\n preview?: ReactNode;\n /** Visual variant */\n variant?: \"superscript\" | \"bracket\" | \"pill\";\n}\n\nexport const CitationInline = forwardRef<HTMLSpanElement, CitationInlineProps>(\n (\n {\n index,\n href,\n sourceTitle,\n preview,\n variant = \"superscript\",\n className,\n ...props\n },\n ref,\n ) => {\n const [showPreview, setShowPreview] = useState(false);\n\n const label = variant === \"bracket\" ? `[${index}]` : `${index}`;\n\n const Tag = href ? \"a\" : \"span\";\n const linkProps = href\n ? { href, target: \"_blank\" as const, rel: \"noopener noreferrer\" as const }\n : {};\n\n return (\n <span\n ref={ref}\n className={cn(\"arclo-citation relative inline-block\", className)}\n onMouseEnter={() => setShowPreview(true)}\n onMouseLeave={() => setShowPreview(false)}\n {...props}\n >\n <Tag\n {...linkProps}\n className={cn(\n \"arclo-citation-trigger transition-colors cursor-pointer\",\n variant === \"superscript\" &&\n \"align-super text-[0.65em] text-blue-600 hover:text-blue-800\",\n variant === \"bracket\" &&\n \"text-sm text-blue-600 hover:text-blue-800\",\n variant === \"pill\" &&\n \"inline-flex h-5 w-5 items-center justify-center rounded-full bg-blue-100 text-[0.6rem] font-medium text-blue-700 hover:bg-blue-200\",\n )}\n aria-label={sourceTitle ? `Source: ${sourceTitle}` : `Citation ${index}`}\n >\n {label}\n </Tag>\n\n {/* Hover preview */}\n {preview && showPreview && (\n <div\n role=\"tooltip\"\n className=\"arclo-citation-preview absolute bottom-full left-1/2 z-50 mb-2 w-64 -translate-x-1/2 rounded-lg border border-gray-200 bg-white p-3 text-sm shadow-lg\"\n >\n {sourceTitle && (\n <p className=\"mb-1 font-medium text-gray-900\">{sourceTitle}</p>\n )}\n <div className=\"text-gray-600\">{preview}</div>\n {href && (\n <p className=\"mt-2 truncate text-xs text-blue-500\">{href}</p>\n )}\n <div className=\"absolute left-1/2 top-full -translate-x-1/2 border-4 border-transparent border-t-white\" />\n </div>\n )}\n </span>\n );\n },\n);\nCitationInline.displayName = \"CitationInline\";\n\n/* ─── Citation Group ──────────────────────────────────────────────── */\n\nexport interface CitationGroupProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n}\n\nexport const CitationGroup = forwardRef<HTMLSpanElement, CitationGroupProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\"arclo-citation-group inline-flex gap-0.5\", className)}\n {...props}\n >\n {children}\n </span>\n );\n },\n);\nCitationGroup.displayName = \"CitationGroup\";\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface RefusalCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Why the request was refused */\n reason?: string;\n /** The type of refusal */\n type?: \"safety\" | \"capability\" | \"policy\" | \"context\";\n /** Suggested alternative prompts */\n suggestions?: string[];\n /** Called when user clicks a suggestion */\n onSuggestionClick?: (suggestion: string) => void;\n /** Custom icon */\n icon?: ReactNode;\n}\n\nconst typeConfig: Record<\n NonNullable<RefusalCardProps[\"type\"]>,\n { icon: string; defaultReason: string; accent: string }\n> = {\n safety: {\n icon: \"🛡\",\n defaultReason: \"I can't help with that request for safety reasons.\",\n accent: \"border-red-200 bg-red-50\",\n },\n capability: {\n icon: \"⚡\",\n defaultReason: \"I'm not able to do that right now.\",\n accent: \"border-amber-200 bg-amber-50\",\n },\n policy: {\n icon: \"📋\",\n defaultReason: \"That request falls outside my usage policy.\",\n accent: \"border-orange-200 bg-orange-50\",\n },\n context: {\n icon: \"🔍\",\n defaultReason: \"I don't have enough context to help with that.\",\n accent: \"border-blue-200 bg-blue-50\",\n },\n};\n\nexport const RefusalCard = forwardRef<HTMLDivElement, RefusalCardProps>(\n (\n {\n reason,\n type = \"capability\",\n suggestions,\n onSuggestionClick,\n icon,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const config = typeConfig[type];\n const displayReason = reason ?? config.defaultReason;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n data-refusal-type={type}\n className={cn(\n \"arclo-refusal-card rounded-lg border p-4\",\n config.accent,\n className,\n )}\n {...props}\n >\n <div className=\"flex gap-3\">\n <span className=\"text-lg\" aria-hidden>\n {icon ?? config.icon}\n </span>\n <div className=\"flex-1\">\n <p className=\"text-sm text-gray-800\">{displayReason}</p>\n\n {children}\n\n {suggestions && suggestions.length > 0 && (\n <div className=\"mt-3\">\n <p className=\"mb-1.5 text-xs font-medium text-gray-500\">\n Try instead:\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => onSuggestionClick?.(s)}\n className=\"rounded-full border border-gray-200 bg-white px-3 py-1 text-xs text-gray-600 transition-colors hover:bg-gray-50 cursor-pointer\"\n >\n {s}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\nRefusalCard.displayName = \"RefusalCard\";\n","import {\n forwardRef,\n useMemo,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\ninterface ParsedBlock {\n type: \"paragraph\" | \"heading\" | \"code\" | \"list\" | \"blockquote\" | \"hr\";\n content: string;\n level?: number; // heading level\n lang?: string; // code language\n items?: string[]; // list items\n ordered?: boolean;\n}\n\n/* ─── Parser ──────────────────────────────────────────────────────── */\n\nfunction parseMarkdown(text: string): ParsedBlock[] {\n const blocks: ParsedBlock[] = [];\n const lines = text.split(\"\\n\");\n let i = 0;\n\n while (i < lines.length) {\n const line = lines[i];\n\n // Blank line\n if (line.trim() === \"\") {\n i++;\n continue;\n }\n\n // Horizontal rule\n if (/^(-{3,}|\\*{3,}|_{3,})\\s*$/.test(line)) {\n blocks.push({ type: \"hr\", content: \"\" });\n i++;\n continue;\n }\n\n // Heading\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n if (headingMatch) {\n blocks.push({\n type: \"heading\",\n content: headingMatch[2],\n level: headingMatch[1].length,\n });\n i++;\n continue;\n }\n\n // Fenced code block\n const codeMatch = line.match(/^```(\\w*)/);\n if (codeMatch) {\n const lang = codeMatch[1] || undefined;\n const codeLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i].startsWith(\"```\")) {\n codeLines.push(lines[i]);\n i++;\n }\n blocks.push({\n type: \"code\",\n content: codeLines.join(\"\\n\"),\n lang,\n });\n i++; // skip closing ```\n continue;\n }\n\n // Blockquote\n if (line.startsWith(\"> \")) {\n const quoteLines: string[] = [];\n while (i < lines.length && lines[i].startsWith(\"> \")) {\n quoteLines.push(lines[i].slice(2));\n i++;\n }\n blocks.push({ type: \"blockquote\", content: quoteLines.join(\"\\n\") });\n continue;\n }\n\n // Unordered list\n if (/^[-*+]\\s/.test(line)) {\n const items: string[] = [];\n while (i < lines.length && /^[-*+]\\s/.test(lines[i])) {\n items.push(lines[i].replace(/^[-*+]\\s/, \"\"));\n i++;\n }\n blocks.push({ type: \"list\", content: \"\", items, ordered: false });\n continue;\n }\n\n // Ordered list\n if (/^\\d+\\.\\s/.test(line)) {\n const items: string[] = [];\n while (i < lines.length && /^\\d+\\.\\s/.test(lines[i])) {\n items.push(lines[i].replace(/^\\d+\\.\\s/, \"\"));\n i++;\n }\n blocks.push({ type: \"list\", content: \"\", items, ordered: true });\n continue;\n }\n\n // Paragraph (collect consecutive non-empty lines)\n const paraLines: string[] = [];\n while (\n i < lines.length &&\n lines[i].trim() !== \"\" &&\n !lines[i].startsWith(\"#\") &&\n !lines[i].startsWith(\"```\") &&\n !lines[i].startsWith(\"> \") &&\n !/^[-*+]\\s/.test(lines[i]) &&\n !/^\\d+\\.\\s/.test(lines[i]) &&\n !/^(-{3,}|\\*{3,}|_{3,})\\s*$/.test(lines[i])\n ) {\n paraLines.push(lines[i]);\n i++;\n }\n if (paraLines.length > 0) {\n blocks.push({ type: \"paragraph\", content: paraLines.join(\"\\n\") });\n }\n }\n\n return blocks;\n}\n\n/* ─── Inline formatting ───────────────────────────────────────────── */\n\nfunction renderInline(text: string): ReactNode[] {\n const parts: ReactNode[] = [];\n // Process bold, italic, code, and links\n const regex =\n /(\\*\\*(.+?)\\*\\*)|(\\*(.+?)\\*)|(`(.+?)`)|(\\[(.+?)\\]\\((.+?)\\))/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(text)) !== null) {\n // Text before match\n if (match.index > lastIndex) {\n parts.push(text.slice(lastIndex, match.index));\n }\n\n if (match[1]) {\n // Bold\n parts.push(\n <strong key={match.index} className=\"font-semibold\">\n {match[2]}\n </strong>,\n );\n } else if (match[3]) {\n // Italic\n parts.push(\n <em key={match.index} className=\"italic\">\n {match[4]}\n </em>,\n );\n } else if (match[5]) {\n // Inline code\n parts.push(\n <code\n key={match.index}\n className=\"rounded bg-gray-100 px-1.5 py-0.5 text-[0.85em] font-mono text-gray-800\"\n >\n {match[6]}\n </code>,\n );\n } else if (match[7]) {\n // Link\n parts.push(\n <a\n key={match.index}\n href={match[9]}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-[#6C5CE7] underline underline-offset-2 hover:text-[#5A4BD1]\"\n >\n {match[8]}\n </a>,\n );\n }\n\n lastIndex = match.index + match[0].length;\n }\n\n // Remaining text\n if (lastIndex < text.length) {\n parts.push(text.slice(lastIndex));\n }\n\n return parts.length > 0 ? parts : [text];\n}\n\n/* ─── Component ───────────────────────────────────────────────────── */\n\nexport interface MarkdownRendererProps extends HTMLAttributes<HTMLDivElement> {\n /** Markdown text to render */\n content: string;\n /** Custom code block renderer */\n renderCode?: (code: string, lang?: string) => ReactNode;\n}\n\nexport const MarkdownRenderer = forwardRef<\n HTMLDivElement,\n MarkdownRendererProps\n>(({ content, renderCode, className, ...props }, ref) => {\n const blocks = useMemo(() => parseMarkdown(content), [content]);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-markdown space-y-4 text-sm leading-relaxed text-gray-700\",\n className,\n )}\n {...props}\n >\n {blocks.map((block, i) => {\n switch (block.type) {\n case \"heading\": {\n const Tag = `h${block.level}` as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n return (\n <Tag\n key={i}\n className={cn(\n \"font-semibold text-gray-900\",\n block.level === 1 && \"text-2xl\",\n block.level === 2 && \"text-xl\",\n block.level === 3 && \"text-lg\",\n (block.level ?? 4) >= 4 && \"text-base\",\n )}\n >\n {renderInline(block.content)}\n </Tag>\n );\n }\n\n case \"paragraph\":\n return (\n <p key={i}>{renderInline(block.content)}</p>\n );\n\n case \"code\":\n if (renderCode) {\n return (\n <div key={i}>{renderCode(block.content, block.lang)}</div>\n );\n }\n return (\n <div\n key={i}\n className=\"overflow-hidden rounded-xl border border-gray-200 bg-gray-50\"\n >\n {block.lang && (\n <div className=\"border-b border-gray-200 bg-gray-50 px-4 py-1.5 text-[11px] font-medium uppercase tracking-wider text-gray-400\">\n {block.lang}\n </div>\n )}\n <pre className=\"overflow-x-auto p-4 text-[13px] leading-relaxed\">\n <code className=\"font-mono text-gray-800\">\n {block.content}\n </code>\n </pre>\n </div>\n );\n\n case \"list\": {\n const Tag = block.ordered ? \"ol\" : \"ul\";\n return (\n <Tag\n key={i}\n className={cn(\n \"space-y-1 pl-6\",\n block.ordered ? \"list-decimal\" : \"list-disc\",\n )}\n >\n {block.items?.map((item, j) => (\n <li key={j} className=\"text-gray-700\">\n {renderInline(item)}\n </li>\n ))}\n </Tag>\n );\n }\n\n case \"blockquote\":\n return (\n <blockquote\n key={i}\n className=\"border-l-3 border-gray-300 pl-4 text-gray-500 italic\"\n >\n {renderInline(block.content)}\n </blockquote>\n );\n\n case \"hr\":\n return <hr key={i} className=\"border-gray-200\" />;\n\n default:\n return null;\n }\n })}\n </div>\n );\n});\nMarkdownRenderer.displayName = \"MarkdownRenderer\";\n","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\nexport type StatusIndicatorState =\n | \"idle\"\n | \"thinking\"\n | \"streaming\"\n | \"tool-calling\"\n | \"error\";\n\n/* ─── Component ───────────────────────────────────────────────────── */\n\nexport interface StatusIndicatorProps extends HTMLAttributes<HTMLSpanElement> {\n /** Current state */\n state?: StatusIndicatorState;\n /** Custom label. Default: auto from state */\n label?: string;\n /** Custom icon element */\n icon?: ReactNode;\n /** Color scheme. Default: auto from state */\n color?: \"purple\" | \"amber\" | \"blue\" | \"red\" | \"gray\";\n /** Animation style. \"pulse\" = fade in/out, \"sweep\" = light moves letter by letter. Default: \"sweep\" */\n animation?: \"pulse\" | \"sweep\";\n}\n\nconst stateDefaults: Record<\n StatusIndicatorState,\n { label: string; colorKey: string }\n> = {\n idle: { label: \"Ready\", colorKey: \"gray\" },\n thinking: { label: \"Thinking...\", colorKey: \"amber\" },\n streaming: { label: \"Writing...\", colorKey: \"purple\" },\n \"tool-calling\": { label: \"Using tools...\", colorKey: \"blue\" },\n error: { label: \"Error\", colorKey: \"red\" },\n};\n\nconst colorMap: Record<string, { base: string; bright: string }> = {\n purple: { base: themeVars.accent, bright: \"var(--arclo-accent-bright, rgb(167,139,250))\" },\n amber: { base: \"rgb(217,119,6)\", bright: \"rgb(251,191,36)\" },\n blue: { base: \"rgb(37,99,235)\", bright: \"rgb(96,165,250)\" },\n red: { base: \"rgb(239,68,68)\", bright: \"rgb(252,129,129)\" },\n gray: { base: \"rgb(156,163,175)\", bright: \"rgb(209,213,219)\" },\n};\n\nexport const StatusIndicator = forwardRef<HTMLSpanElement, StatusIndicatorProps>(\n (\n {\n state = \"idle\",\n label,\n icon,\n color,\n animation = \"sweep\",\n className,\n ...props\n },\n ref,\n ) => {\n const id = useId().replace(/:/g, \"\");\n const defaults = stateDefaults[state];\n const resolvedColor = color ?? defaults.colorKey;\n const colors = colorMap[resolvedColor] ?? colorMap.gray;\n const displayLabel = label ?? defaults.label;\n const isActive = state !== \"idle\" && state !== \"error\";\n\n return (\n <span\n ref={ref}\n data-state={state}\n className={cn(\n \"arclo-status-indicator inline-flex items-center gap-1.5 text-sm font-medium\",\n className,\n )}\n style={{ color: colors.base }}\n {...props}\n >\n {/* Scoped keyframes */}\n <style\n dangerouslySetInnerHTML={{\n __html: `\n@keyframes arclo-sweep-${id} {\n 0%, 100% { color: ${colors.base}; opacity: 0.5; }\n 50% { color: ${colors.bright}; opacity: 1; }\n}\n@keyframes arclo-pulse-${id} {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n@keyframes arclo-spin-${id} {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}`,\n }}\n />\n\n {/* Icon */}\n <span className=\"shrink-0\">\n {icon ?? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n style={\n isActive\n ? { animation: `arclo-spin-${id} 3s linear infinite` }\n : undefined\n }\n >\n <path d=\"M12 2l2.4 7.2H22l-6 4.8 2.4 7.2L12 16.4 5.6 21.2 8 14 2 9.2h7.6L12 2z\" />\n </svg>\n )}\n </span>\n\n {/* Label */}\n {isActive && animation === \"sweep\" ? (\n <span aria-label={displayLabel}>\n {displayLabel.split(\"\").map((char, i) => (\n <span\n key={i}\n style={{\n display: \"inline-block\",\n animation: `arclo-sweep-${id} 1.5s ease-in-out infinite`,\n animationDelay: `${i * 0.08}s`,\n }}\n >\n {char === \" \" ? \"\\u00A0\" : char}\n </span>\n ))}\n </span>\n ) : (\n <span\n style={\n isActive && animation === \"pulse\"\n ? {\n animation: `arclo-pulse-${id} 1.5s ease-in-out infinite`,\n }\n : undefined\n }\n >\n {displayLabel}\n </span>\n )}\n </span>\n );\n },\n);\nStatusIndicator.displayName = \"StatusIndicator\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Component ───────────────────────────────────────────────────── */\n\nexport interface TokenUsageProps extends HTMLAttributes<HTMLDivElement> {\n /** Number of input tokens used */\n inputTokens: number;\n /** Number of output tokens used */\n outputTokens: number;\n /** Maximum token budget */\n maxTokens: number;\n /** Cost in dollars (optional) */\n cost?: number;\n}\n\nfunction formatNumber(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(1)}k`;\n return n.toLocaleString();\n}\n\nexport const TokenUsage = forwardRef<HTMLDivElement, TokenUsageProps>(\n ({ inputTokens, outputTokens, maxTokens, cost, className, ...props }, ref) => {\n const total = inputTokens + outputTokens;\n const inputPct = maxTokens > 0 ? (inputTokens / maxTokens) * 100 : 0;\n const outputPct = maxTokens > 0 ? (outputTokens / maxTokens) * 100 : 0;\n const totalPct = Math.min(inputPct + outputPct, 100);\n\n const isHigh = totalPct > 80;\n const isMedium = totalPct > 50 && totalPct <= 80;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-token-usage rounded-lg border border-gray-200 bg-white p-4\",\n className,\n )}\n {...props}\n >\n {/* Labels row */}\n <div className=\"mb-2 flex items-center justify-between text-xs text-gray-500\">\n <span className=\"font-medium text-gray-700\">\n {formatNumber(total)}{\" \"}\n <span className=\"font-normal text-gray-400\">\n / {formatNumber(maxTokens)} tokens\n </span>\n </span>\n {cost != null && (\n <span className=\"font-medium text-gray-600\">\n ${cost.toFixed(4)}\n </span>\n )}\n </div>\n\n {/* Bar */}\n <div className=\"relative h-2.5 w-full overflow-hidden rounded-full bg-gray-100\">\n {/* Input portion */}\n <div\n className={cn(\n \"absolute inset-y-0 left-0 rounded-l-full transition-all duration-300\",\n isHigh ? \"bg-red-400\" : isMedium ? \"bg-amber-400\" : \"bg-blue-400\",\n )}\n style={{ width: `${Math.min(inputPct, 100)}%` }}\n />\n {/* Output portion */}\n <div\n className={cn(\n \"absolute inset-y-0 transition-all duration-300\",\n isHigh\n ? \"bg-red-300\"\n : isMedium\n ? \"bg-amber-300\"\n : \"bg-violet-400\",\n outputPct > 0 && inputPct + outputPct >= 100 && \"rounded-r-full\",\n )}\n style={{\n left: `${Math.min(inputPct, 100)}%`,\n width: `${Math.min(outputPct, 100 - Math.min(inputPct, 100))}%`,\n }}\n />\n </div>\n\n {/* Legend */}\n <div className=\"mt-2 flex items-center gap-4 text-[11px] text-gray-500\">\n <span className=\"flex items-center gap-1.5\">\n <span\n className={cn(\n \"inline-block h-2 w-2 rounded-full\",\n isHigh ? \"bg-red-400\" : isMedium ? \"bg-amber-400\" : \"bg-blue-400\",\n )}\n />\n Input: {formatNumber(inputTokens)}\n </span>\n <span className=\"flex items-center gap-1.5\">\n <span\n className={cn(\n \"inline-block h-2 w-2 rounded-full\",\n isHigh\n ? \"bg-red-300\"\n : isMedium\n ? \"bg-amber-300\"\n : \"bg-violet-400\",\n )}\n />\n Output: {formatNumber(outputTokens)}\n </span>\n </div>\n </div>\n );\n },\n);\nTokenUsage.displayName = \"TokenUsage\";\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n useRef,\n useEffect,\n type HTMLAttributes,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\nexport interface ModelOption {\n /** Unique model identifier */\n id: string;\n /** Display name */\n name: string;\n /** Optional description shown in dropdown */\n description?: string;\n /** Optional badge text (e.g. \"New\", \"Fast\") */\n badge?: string;\n}\n\n/* ─── Component ───────────────────────────────────────────────────── */\n\nexport interface ModelSelectorProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n /** Available models */\n models: ModelOption[];\n /** Currently selected model id */\n value: string;\n /** Called when user selects a model */\n onChange: (modelId: string) => void;\n}\n\nexport const ModelSelector = forwardRef<HTMLDivElement, ModelSelectorProps>(\n ({ models, value, onChange, className, ...props }, ref) => {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const selected = models.find((m) => m.id === value);\n\n // Close on outside click\n useEffect(() => {\n if (!open) return;\n function handleClick(e: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [open]);\n\n // Close on Escape\n useEffect(() => {\n if (!open) return;\n function handleKey(e: KeyboardEvent) {\n if (e.key === \"Escape\") setOpen(false);\n }\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [open]);\n\n return (\n <div\n ref={ref}\n className={cn(\"arclo-model-selector relative inline-block\", className)}\n {...props}\n >\n <div ref={containerRef}>\n {/* Trigger */}\n <button\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className=\"cursor-pointer inline-flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"shrink-0 text-gray-400\"\n >\n <path d=\"M12 2l2.4 7.2H22l-6 4.8 2.4 7.2L12 16.4 5.6 21.2 8 14 2 9.2h7.6L12 2z\" />\n </svg>\n <span>{selected?.name ?? value}</span>\n {selected?.badge && (\n <span className=\"rounded-full bg-[#6C5CE7]/10 px-2 py-0.5 text-[10px] font-semibold text-[#6C5CE7]\">\n {selected.badge}\n </span>\n )}\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(\n \"shrink-0 text-gray-400 transition-transform\",\n open && \"rotate-180\",\n )}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n\n {/* Dropdown */}\n {open && (\n <div\n role=\"listbox\"\n className=\"absolute left-0 z-50 mt-1 w-72 overflow-hidden rounded-xl border border-gray-200 bg-white shadow-lg\"\n >\n {models.map((model) => {\n const isSelected = model.id === value;\n return (\n <button\n key={model.id}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => {\n onChange(model.id);\n setOpen(false);\n }}\n className={cn(\n \"cursor-pointer flex w-full items-start gap-3 px-4 py-3 text-left transition-colors hover:bg-gray-50\",\n isSelected && \"bg-gray-50\",\n )}\n >\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium text-gray-800\">\n {model.name}\n </span>\n {model.badge && (\n <span className=\"rounded-full bg-[#6C5CE7]/10 px-2 py-0.5 text-[10px] font-semibold text-[#6C5CE7]\">\n {model.badge}\n </span>\n )}\n </div>\n {model.description && (\n <p className=\"mt-0.5 text-xs text-gray-400 truncate\">\n {model.description}\n </p>\n )}\n </div>\n {isSelected && (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"mt-0.5 shrink-0 text-[#6C5CE7]\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\nModelSelector.displayName = \"ModelSelector\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Component ───────────────────────────────────────────────────── */\n\nexport interface SourceCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Source title */\n title: string;\n /** Source URL (optional) */\n url?: string;\n /** Preview text content */\n content: string;\n /** Relevance score from 0 to 1 */\n relevance: number;\n /** Display variant */\n variant?: \"compact\" | \"full\";\n}\n\nfunction relevanceColor(score: number): { bar: string; text: string } {\n if (score >= 0.8) return { bar: \"bg-emerald-400\", text: \"text-emerald-600\" };\n if (score >= 0.5) return { bar: \"bg-amber-400\", text: \"text-amber-600\" };\n return { bar: \"bg-red-400\", text: \"text-red-600\" };\n}\n\nfunction relevanceLabel(score: number): string {\n if (score >= 0.8) return \"High\";\n if (score >= 0.5) return \"Medium\";\n return \"Low\";\n}\n\nexport const SourceCard = forwardRef<HTMLDivElement, SourceCardProps>(\n (\n { title, url, content, relevance, variant = \"full\", className, ...props },\n ref,\n ) => {\n const colors = relevanceColor(relevance);\n const pct = Math.round(relevance * 100);\n\n if (variant === \"compact\") {\n return (\n <div\n ref={ref}\n data-variant=\"compact\"\n className={cn(\n \"arclo-source-card flex items-start gap-3 rounded-lg border border-gray-200 bg-white px-3 py-2.5\",\n className,\n )}\n {...props}\n >\n {/* Relevance dot */}\n <span\n className={cn(\"mt-1 inline-block h-2 w-2 shrink-0 rounded-full\", colors.bar)}\n title={`${pct}% relevance`}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n {url ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"truncate text-sm font-medium text-gray-800 hover:text-[#6C5CE7] hover:underline\"\n >\n {title}\n </a>\n ) : (\n <span className=\"truncate text-sm font-medium text-gray-800\">\n {title}\n </span>\n )}\n <span className={cn(\"shrink-0 text-[10px] font-semibold\", colors.text)}>\n {pct}%\n </span>\n </div>\n <p className=\"mt-0.5 truncate text-xs text-gray-400\">{content}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n data-variant=\"full\"\n className={cn(\n \"arclo-source-card overflow-hidden rounded-lg border border-gray-200 bg-white\",\n className,\n )}\n {...props}\n >\n {/* Relevance bar */}\n <div className=\"relative h-1.5 w-full bg-gray-100\">\n <div\n className={cn(\"absolute inset-y-0 left-0 transition-all duration-300\", colors.bar)}\n style={{ width: `${pct}%` }}\n />\n </div>\n\n <div className=\"p-4\">\n {/* Header */}\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0 flex-1\">\n {url ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm font-medium text-gray-800 hover:text-[#6C5CE7] hover:underline\"\n >\n {title}\n </a>\n ) : (\n <span className=\"text-sm font-medium text-gray-800\">\n {title}\n </span>\n )}\n {url && (\n <p className=\"mt-0.5 truncate text-xs text-gray-400\">{url}</p>\n )}\n </div>\n <span\n className={cn(\n \"shrink-0 rounded-full border px-2 py-0.5 text-[10px] font-semibold\",\n relevance >= 0.8 && \"border-emerald-200 bg-emerald-50 text-emerald-700\",\n relevance >= 0.5 && relevance < 0.8 && \"border-amber-200 bg-amber-50 text-amber-700\",\n relevance < 0.5 && \"border-red-200 bg-red-50 text-red-700\",\n )}\n >\n {relevanceLabel(relevance)} {pct}%\n </span>\n </div>\n\n {/* Content preview */}\n <p className=\"mt-2 line-clamp-3 text-sm leading-relaxed text-gray-500\">\n {content}\n </p>\n </div>\n </div>\n );\n },\n);\nSourceCard.displayName = \"SourceCard\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\nexport type FileAttachmentType =\n | \"image\"\n | \"pdf\"\n | \"code\"\n | \"text\"\n | \"csv\"\n | \"other\";\n\n/* ─── Icons ──────────────────────────────────────────────────────── */\n\nfunction FileIcon({\n type,\n className,\n}: {\n type: FileAttachmentType;\n className?: string;\n}) {\n const base = cn(\"shrink-0\", className);\n\n if (type === \"image\") {\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <path d=\"m21 15-5-5L5 21\" />\n </svg>\n );\n }\n\n if (type === \"pdf\") {\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"M9 15v-1h2a1 1 0 0 1 0 2H9\" />\n </svg>\n );\n }\n\n if (type === \"code\") {\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"m10 13-2 2 2 2\" />\n <path d=\"m14 17 2-2-2-2\" />\n </svg>\n );\n }\n\n if (type === \"csv\") {\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"M8 15h8\" />\n <path d=\"M8 11h8\" />\n <path d=\"M12 11v8\" />\n </svg>\n );\n }\n\n if (type === \"text\") {\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n <path d=\"M10 9H8\" />\n </svg>\n );\n }\n\n // \"other\"\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" />\n <path d=\"M14 2v6h6\" />\n </svg>\n );\n}\n\n/* ─── FileAttachment ─────────────────────────────────────────────── */\n\nexport interface FileAttachmentProps extends HTMLAttributes<HTMLDivElement> {\n /** File name */\n name: string;\n /** Human-readable file size, e.g. \"2.4 MB\" */\n size?: string;\n /** File type — determines the icon */\n type?: FileAttachmentType;\n /** Image URL for thumbnail preview (card variant) */\n preview?: string;\n /** Upload progress 0-100 — shows progress bar when present */\n progress?: number;\n /** Called when remove button is clicked */\n onRemove?: () => void;\n /** Display variant */\n variant?: \"chip\" | \"card\";\n}\n\nexport const FileAttachment = forwardRef<HTMLDivElement, FileAttachmentProps>(\n (\n {\n name,\n size,\n type = \"other\",\n preview,\n progress,\n onRemove,\n variant = \"chip\",\n className,\n ...props\n },\n ref,\n ) => {\n if (variant === \"card\") {\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-file-attachment-card group relative inline-flex w-48 flex-col overflow-hidden rounded-xl border border-gray-200 bg-white\",\n className,\n )}\n {...props}\n >\n {/* Preview area */}\n <div className=\"relative flex h-28 items-center justify-center bg-gray-50\">\n {preview ? (\n <img\n src={preview}\n alt={name}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <FileIcon type={type} className=\"h-10 w-10 text-gray-300\" />\n )}\n {onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label={`Remove ${name}`}\n className=\"absolute right-1.5 top-1.5 flex h-6 w-6 items-center justify-center rounded-full bg-black/50 text-white opacity-0 transition-opacity hover:bg-black/70 group-hover:opacity-100 cursor-pointer\"\n >\n <svg\n className=\"h-3 w-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n >\n <path d=\"m18 6-12 12M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* Info */}\n <div className=\"flex flex-col gap-0.5 px-3 py-2\">\n <span className=\"truncate text-xs font-medium text-gray-700\">\n {name}\n </span>\n {size && (\n <span className=\"text-[10px] text-gray-400\">{size}</span>\n )}\n </div>\n\n {/* Progress bar */}\n {progress != null && (\n <div className=\"h-1 w-full bg-gray-100\">\n <div\n className=\"h-full rounded-r-full bg-[#6C5CE7] transition-all duration-300\"\n style={{ width: `${Math.min(100, Math.max(0, progress))}%` }}\n />\n </div>\n )}\n </div>\n );\n }\n\n // chip variant (default)\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-file-attachment-chip group inline-flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2\",\n className,\n )}\n {...props}\n >\n <FileIcon type={type} className=\"h-4 w-4 text-gray-400\" />\n\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-xs font-medium text-gray-700\">\n {name}\n </span>\n {(size || progress != null) && (\n <div className=\"flex items-center gap-2\">\n {size && (\n <span className=\"text-[10px] text-gray-400\">{size}</span>\n )}\n {progress != null && (\n <div className=\"h-1 w-16 rounded-full bg-gray-100\">\n <div\n className=\"h-full rounded-full bg-[#6C5CE7] transition-all duration-300\"\n style={{\n width: `${Math.min(100, Math.max(0, progress))}%`,\n }}\n />\n </div>\n )}\n </div>\n )}\n </div>\n\n {onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label={`Remove ${name}`}\n className=\"ml-1 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-gray-300 transition-colors hover:bg-gray-100 hover:text-gray-500 cursor-pointer\"\n >\n <svg\n className=\"h-3 w-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n >\n <path d=\"m18 6-12 12M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n },\n);\nFileAttachment.displayName = \"FileAttachment\";\n","\"use client\";\n\nimport { forwardRef, useCallback, useState, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── CodeBlock ──────────────────────────────────────────────────── */\n\nexport interface CodeBlockProps extends HTMLAttributes<HTMLDivElement> {\n /** The code string to display */\n code: string;\n /** Language label shown in the header */\n language?: string;\n /** Show line numbers. Default: false */\n showLineNumbers?: boolean;\n /** Max height before scroll. Default: \"400px\" */\n maxHeight?: string;\n /** Called when the copy button is clicked */\n onCopy?: () => void;\n}\n\nexport const CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(\n (\n {\n code,\n language,\n showLineNumbers = false,\n maxHeight = \"400px\",\n onCopy,\n className,\n ...props\n },\n ref,\n ) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n navigator.clipboard.writeText(code).then(() => {\n setCopied(true);\n onCopy?.();\n setTimeout(() => setCopied(false), 2000);\n });\n }, [code, onCopy]);\n\n const lines = code.split(\"\\n\");\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-code-block overflow-hidden rounded-xl border\",\n className,\n )}\n style={{\n backgroundColor: themeVars.surfaceSecondary,\n borderColor: themeVars.border,\n }}\n {...props}\n >\n {/* Header bar */}\n <div\n className=\"flex items-center justify-between px-4 py-2\"\n style={{ borderBottom: `1px solid ${themeVars.border}` }}\n >\n <span\n className=\"text-[11px] font-medium uppercase tracking-wider\"\n style={{ color: themeVars.textMuted }}\n >\n {language ?? \"code\"}\n </span>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"flex items-center gap-1.5 rounded-md px-2 py-1 text-[11px] transition-colors cursor-pointer\"\n style={{ color: themeVars.textMuted }}\n >\n {copied ? (\n <>\n <svg\n className=\"h-3.5 w-3.5\"\n style={{ color: \"#10b981\" }}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n Copied\n </>\n ) : (\n <>\n <svg\n className=\"h-3.5 w-3.5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n Copy\n </>\n )}\n </button>\n </div>\n\n {/* Code area */}\n <div\n className=\"overflow-auto [scrollbar-width:thin] [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:rounded-full\"\n style={{\n maxHeight,\n scrollbarColor: `${themeVars.border} transparent`,\n }}\n >\n <pre className=\"p-4 text-[13px] leading-relaxed\">\n <code className=\"font-mono\" style={{ color: themeVars.text }}>\n {lines.map((line, i) => (\n <div key={i} className=\"flex\">\n {showLineNumbers && (\n <span\n className=\"mr-4 inline-block w-8 shrink-0 select-none text-right\"\n style={{ color: themeVars.textMuted }}\n >\n {i + 1}\n </span>\n )}\n <span className=\"flex-1\">{line || \"\\n\"}</span>\n </div>\n ))}\n </code>\n </pre>\n </div>\n </div>\n );\n },\n);\nCodeBlock.displayName = \"CodeBlock\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── ConversationBranch ─────────────────────────────────────────── */\n\nexport interface ConversationBranchProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Current branch index (1-indexed) */\n current: number;\n /** Total number of branches */\n total: number;\n /** Called when navigating to the previous branch */\n onPrevious?: () => void;\n /** Called when navigating to the next branch */\n onNext?: () => void;\n}\n\nexport const ConversationBranch = forwardRef<\n HTMLDivElement,\n ConversationBranchProps\n>(({ current, total, onPrevious, onNext, className, ...props }, ref) => {\n const atStart = current <= 1;\n const atEnd = current >= total;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-conversation-branch inline-flex items-center gap-1 rounded-lg border border-gray-200 bg-white\",\n className,\n )}\n {...props}\n >\n {/* Previous button */}\n <button\n type=\"button\"\n onClick={onPrevious}\n disabled={atStart}\n aria-label=\"Previous branch\"\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-l-lg transition-colors cursor-pointer\",\n atStart\n ? \"cursor-not-allowed text-gray-200\"\n : \"text-gray-400 hover:bg-gray-50 hover:text-gray-600\",\n )}\n >\n <svg\n className=\"h-3.5 w-3.5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n </button>\n\n {/* Label */}\n <span className=\"select-none px-1 text-xs font-medium tabular-nums text-gray-500\">\n {current}/{total}\n </span>\n\n {/* Next button */}\n <button\n type=\"button\"\n onClick={onNext}\n disabled={atEnd}\n aria-label=\"Next branch\"\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-r-lg transition-colors cursor-pointer\",\n atEnd\n ? \"cursor-not-allowed text-gray-200\"\n : \"text-gray-400 hover:bg-gray-50 hover:text-gray-600\",\n )}\n >\n <svg\n className=\"h-3.5 w-3.5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </button>\n </div>\n );\n});\nConversationBranch.displayName = \"ConversationBranch\";\n","\"use client\";\n\nimport {\n forwardRef,\n useRef,\n useCallback,\n type HTMLAttributes,\n type ReactNode,\n type MouseEvent as ReactMouseEvent,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── TopicCard ───────────────────────────────────────────────────── */\n\nexport interface TopicCardProps extends Omit<HTMLAttributes<HTMLButtonElement>, \"onSelect\"> {\n /** Card title / prompt summary */\n title: string;\n /** Optional description or subtitle (hidden in compact mode) */\n description?: string;\n /** Optional icon element */\n icon?: ReactNode;\n /** Called when the card is clicked */\n onSelect?: (title: string) => void;\n /** Visual variant — set automatically by SuggestTopics, but can be overridden */\n variant?: \"card\" | \"compact\";\n}\n\nexport const TopicCard = forwardRef<HTMLButtonElement, TopicCardProps>(\n ({ title, description, icon, onSelect, variant = \"card\", className, ...props }, ref) => {\n if (variant === \"compact\") {\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={() => onSelect?.(title)}\n className={cn(\n \"arclo-topic-card inline-flex shrink-0 items-center gap-2 rounded-full border px-3.5 py-2 text-left transition-all cursor-pointer\",\n \"hover:shadow-sm\",\n className,\n )}\n style={{\n backgroundColor: themeVars.surface,\n borderColor: themeVars.border,\n }}\n {...props}\n >\n {icon && (\n <span className=\"shrink-0 text-sm\">{icon}</span>\n )}\n <span\n className=\"text-xs font-medium whitespace-nowrap\"\n style={{ color: themeVars.text }}\n >\n {title}\n </span>\n </button>\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={() => onSelect?.(title)}\n className={cn(\n \"arclo-topic-card group flex w-full items-start gap-3 rounded-xl border p-4 text-left transition-all cursor-pointer\",\n \"hover:scale-[1.01] hover:shadow-sm\",\n className,\n )}\n style={{\n backgroundColor: themeVars.surface,\n borderColor: themeVars.border,\n }}\n {...props}\n >\n {icon && (\n <span\n className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-lg text-sm\"\n style={{\n backgroundColor: `color-mix(in srgb, ${themeVars.accent} 10%, transparent)`,\n color: themeVars.accent,\n }}\n >\n {icon}\n </span>\n )}\n <div className=\"min-w-0 flex-1\">\n <p\n className=\"text-sm font-medium leading-snug\"\n style={{ color: themeVars.text }}\n >\n {title}\n </p>\n {description && (\n <p\n className=\"mt-1 text-xs leading-relaxed\"\n style={{ color: themeVars.textMuted }}\n >\n {description}\n </p>\n )}\n </div>\n <svg\n className=\"mt-1 h-4 w-4 shrink-0 opacity-0 transition-opacity group-hover:opacity-100\"\n style={{ color: themeVars.textMuted }}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M5 12h14M12 5l7 7-7 7\" />\n </svg>\n </button>\n );\n },\n);\nTopicCard.displayName = \"TopicCard\";\n\n/* ─── SuggestTopics ───────────────────────────────────────────────── */\n\nexport interface SuggestTopicsProps extends HTMLAttributes<HTMLDivElement> {\n /** Layout variant. \"grid\" for cards, \"compact\" for horizontal scroll pills. Default: \"grid\" */\n variant?: \"grid\" | \"compact\";\n /** Number of columns (grid variant only). Default: 2 */\n columns?: 1 | 2 | 3;\n children: ReactNode;\n}\n\nexport const SuggestTopics = forwardRef<HTMLDivElement, SuggestTopicsProps>(\n ({ variant = \"grid\", columns = 2, children, className, ...props }, ref) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n const isDragging = useRef(false);\n const startX = useRef(0);\n const scrollLeft = useRef(0);\n const hasDragged = useRef(false);\n\n const onMouseDown = useCallback((e: ReactMouseEvent) => {\n const el = scrollRef.current;\n if (!el) return;\n isDragging.current = true;\n hasDragged.current = false;\n startX.current = e.pageX - el.offsetLeft;\n scrollLeft.current = el.scrollLeft;\n el.style.cursor = \"grabbing\";\n el.style.userSelect = \"none\";\n }, []);\n\n const onMouseMove = useCallback((e: ReactMouseEvent) => {\n if (!isDragging.current) return;\n const el = scrollRef.current;\n if (!el) return;\n e.preventDefault();\n const x = e.pageX - el.offsetLeft;\n const walk = (x - startX.current) * 1.5;\n if (Math.abs(walk) > 3) hasDragged.current = true;\n el.scrollLeft = scrollLeft.current - walk;\n }, []);\n\n const onMouseUp = useCallback(() => {\n isDragging.current = false;\n const el = scrollRef.current;\n if (el) {\n el.style.cursor = \"grab\";\n el.style.userSelect = \"\";\n }\n }, []);\n\n const onClickCapture = useCallback((e: ReactMouseEvent) => {\n // Prevent click on children if we were dragging\n if (hasDragged.current) {\n e.stopPropagation();\n e.preventDefault();\n hasDragged.current = false;\n }\n }, []);\n\n if (variant === \"compact\") {\n return (\n <div\n ref={(node) => {\n (scrollRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={cn(\n \"arclo-suggest-topics\",\n className,\n )}\n style={{\n display: \"flex\",\n gap: \"0.5rem\",\n overflowX: \"auto\",\n cursor: \"grab\",\n scrollbarWidth: \"none\",\n msOverflowStyle: \"none\",\n }}\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMove}\n onMouseUp={onMouseUp}\n onMouseLeave={onMouseUp}\n onClickCapture={onClickCapture}\n {...props}\n >\n {children}\n <style dangerouslySetInnerHTML={{ __html: `.arclo-suggest-topics::-webkit-scrollbar { display: none; }` }} />\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-suggest-topics grid gap-3\",\n columns === 1 && \"grid-cols-1\",\n columns === 2 && \"grid-cols-1 sm:grid-cols-2\",\n columns === 3 && \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nSuggestTopics.displayName = \"SuggestTopics\";\n"]}
1
+ {"version":3,"sources":["../src/streaming-text/index.ts","../src/lib/cn.ts","../src/lib/theme.ts","../src/streaming-text/use-streaming-text.ts","../src/streaming-text/streaming-text.tsx","../src/prompt-box/index.ts","../src/prompt-box/prompt-box.tsx","../src/feedback-bar/index.ts","../src/feedback-bar/feedback-bar.tsx","../src/thinking-block/index.ts","../src/thinking-block/thinking-block.tsx","../src/tool-call/index.ts","../src/tool-call/tool-call.tsx","../src/chat-thread/index.ts","../src/chat-thread/chat-thread.tsx","../src/image-gen/index.ts","../src/image-gen/image-gen.tsx","../src/video-gen/index.ts","../src/video-gen/video-gen.tsx","../src/confidence-badge/confidence-badge.tsx","../src/citation-inline/citation-inline.tsx","../src/refusal-card/refusal-card.tsx","../src/markdown-renderer/markdown-renderer.tsx","../src/status-indicator/status-indicator.tsx","../src/token-usage/token-usage.tsx","../src/model-selector/model-selector.tsx","../src/source-card/source-card.tsx","../src/file-attachment/file-attachment.tsx","../src/code-block/code-block.tsx","../src/conversation-branch/conversation-branch.tsx","../src/suggest-topics/suggest-topics.tsx"],"names":["Root","createContext","useContext","forwardRef","useState","useCallback","jsx","jsxs","Fragment","useRef","useEffect","Content","Input","ErrorFallback","Toolbar","Placeholder","Progress","useId"],"mappings":";;;;;;;;;;;;AAAA,IAAA,sBAAA,GAAA;AAAA,QAAA,CAAA,sBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,uBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;ACGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;;;ACyCO,IAAM,SAAA,GAAY;AAAA,EACvB,MAAA,EAAQ,8BAAA;AAAA,EACR,QAAA,EAAU,iCAAA;AAAA,EAEV,YAAA,EAAc,8CAAA;AAAA,EACd,OAAA,EAAS,+BAAA;AAAA,EACT,gBAAA,EAAkB,yCAAA;AAAA,EAClB,MAAA,EAAQ,8BAAA;AAAA,EACR,IAAA,EAAM,4BAAA;AAAA,EACN,aAAA,EAAe,sCAAA;AAAA,EACf,SAAA,EAAW,kCAAA;AAAA,EACX,KAAA,EAAO,6BAAA;AAAA,EACP,YAAA,EAAc,qCAAA;AAAA,EAGd,MAAA,EAAQ;AACV,CAAA;AC3BA,SAAS,SAAA,CAAU,MAAc,IAAA,EAA2B;AAC1D,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,OAAO,IAAA,CAAK,MAAM,EAAE,CAAA;AAAA,IACtB,KAAK,MAAA;AACH,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,IAAK,CAAC,IAAI,CAAA;AAAA,IACvC,KAAK,MAAA;AACH,MAAA,OAAO,IAAA,CAAK,MAAM,YAAY,CAAA,EAAG,OAAO,OAAO,CAAA,IAAK,CAAC,IAAI,CAAA;AAAA;AAE/D;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,MAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA,GAAQ,EAAA;AAAA,EACR,SAAA,GAAY,MAAA;AAAA,EACZ,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAoD;AAClD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAyB,SAAS,CAAA;AAE5D,EAAA,MAAM,SAAA,GAAY,MAAA,CAAiB,EAAE,CAAA;AACrC,EAAA,MAAM,WAAA,GAAc,OAAO,KAAK,CAAA;AAChC,EAAA,MAAM,QAAA,GAAW,OAA6C,IAAI,CAAA;AAClE,EAAA,MAAM,cAAA,GAAiB,OAAO,KAAK,CAAA;AACnC,EAAA,MAAM,SAAA,GAAY,OAAmD,IAAI,CAAA;AACzE,EAAA,MAAM,QAAA,GAAW,OAAO,KAAK,CAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,OAAO,EAAE,CAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,OAAO,MAAM,CAAA;AAC/B,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,EAAA,MAAM,cAAA,GAAiB,OAAO,WAAW,CAAA;AAGzC,EAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,EAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,EAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AACrB,EAAA,cAAA,CAAe,OAAA,GAAU,WAAA;AAGzB,EAAA,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAA,IAAI,YAAY,OAAA,EAAS;AACzB,IAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAEtB,IAAA,SAAS,IAAA,GAAO;AACd,MAAA,IAAI,SAAA,CAAU,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAClC,QAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,KAAA,EAAM;AACtC,MAAA,gBAAA,CAAiB,CAAC,IAAA,KAAS,IAAA,GAAO,KAAK,CAAA;AAEvC,MAAA,QAAA,CAAS,OAAA,GAAU,UAAA,CAAW,IAAA,EAAM,QAAA,CAAS,OAAO,CAAA;AAAA,IACtD;AAEA,IAAA,IAAA,EAAK;AAAA,EACP,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AAGb,IAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AACzB,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,IAAA,SAAA,CAAU,UAAU,EAAC;AACrB,IAAA,WAAA,CAAY,OAAA,GAAU,EAAA;AACtB,IAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,IAAA,WAAA,CAAY,EAAE,CAAA;AACd,IAAA,QAAA,CAAS,WAAW,CAAA;AAEpB,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,IAAI,MAAA;AAEJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,OAAO,SAAA,EAAU;AAAA,IAC5B,CAAA,CAAA,MAAQ;AAEN,MAAA;AAAA,IACF;AAEA,IAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAEpB,IAAA,eAAe,IAAA,GAAO;AACpB,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,EAAM;AACX,UAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,UAAA,IAAI,SAAA,IAAa,eAAe,OAAA,EAAS;AACzC,UAAA,IAAI,IAAA,EAAM;AAER,YAAA,MAAM,eAAe,MAAM;AACzB,cAAA,IAAI,SAAA,EAAW;AACf,cAAA,IAAI,UAAU,OAAA,CAAQ,MAAA,KAAW,CAAA,IAAK,CAAC,YAAY,OAAA,EAAS;AAC1D,gBAAA,QAAA,CAAS,MAAM,CAAA;AACf,gBAAA,SAAA,CAAU,OAAA,GAAU,YAAY,OAAO,CAAA;AAAA,cACzC,CAAA,MAAO;AACL,gBAAA,UAAA,CAAW,cAAc,EAAE,CAAA;AAAA,cAC7B;AAAA,YACF,CAAA;AACA,YAAA,YAAA,EAAa;AACb,YAAA;AAAA,UACF;AACA,UAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,EAAO,SAAS,CAAA;AACzC,UAAA,SAAA,CAAU,OAAA,CAAQ,IAAA,CAAK,GAAG,MAAM,CAAA;AAChC,UAAA,WAAA,CAAY,OAAA,IAAW,KAAA;AACvB,UAAA,WAAA,CAAY,YAAY,OAAO,CAAA;AAC/B,UAAA,aAAA,EAAc;AAAA,QAChB;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,CAAC,SAAA,IAAa,CAAC,cAAA,CAAe,OAAA,EAAS;AACzC,UAAA,QAAA,CAAS,OAAO,CAAA;AAChB,UAAA,UAAA,CAAW,OAAA;AAAA,YACT,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC;AAAA,WACpD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,EAAK;AAEL,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AACnD,MAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,MAAA,MAAA,CAAO,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IAChC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,SAAA,EAAW,aAAa,CAAC,CAAA;AAGrC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,IAAQ,QAAQ,MAAA,EAAQ;AAE5B,IAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AACzB,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,IAAA,SAAA,CAAU,UAAU,EAAC;AACrB,IAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,IAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,IAAA,WAAA,CAAY,IAAI,CAAA;AAChB,IAAA,QAAA,CAAS,WAAW,CAAA;AAEpB,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,IAAA,EAAM,SAAS,CAAA;AACxC,IAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,IAAA,aAAA,EAAc;AAEd,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,UAAU,OAAA,CAAQ,MAAA,KAAW,CAAA,IAAK,CAAC,YAAY,OAAA,EAAS;AAC1D,QAAA,QAAA,CAAS,MAAM,CAAA;AACf,QAAA,SAAA,CAAU,UAAU,IAAI,CAAA;AAAA,MAC1B,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,cAAc,EAAE,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA;AACA,IAAA,UAAA,CAAW,cAAc,GAAG,CAAA;AAE5B,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AACnD,MAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AAAA,IACxB,CAAA;AAAA,EACF,GAAG,CAAC,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,aAAa,CAAC,CAAA;AAE3C,EAAA,MAAM,SAAA,GAAY,YAAY,MAAM;AAClC,IAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,IAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AACnD,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,IAAA,SAAA,CAAU,OAAA,EAAS,MAAA,EAAO,CAAE,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAC1C,IAAA,SAAA,CAAU,UAAU,EAAC;AACrB,IAAA,QAAA,CAAS,aAAa,CAAA;AACtB,IAAA,gBAAA,CAAiB,CAAC,CAAA,KAAM;AACtB,MAAA,cAAA,CAAe,UAAU,CAAC,CAAA;AAC1B,MAAA,OAAO,CAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AACzB,IAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AACnD,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,IAAA,SAAA,CAAU,UAAU,EAAC;AACrB,IAAA,WAAA,CAAY,OAAA,GAAU,EAAA;AACtB,IAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,IAAA,WAAA,CAAY,EAAE,CAAA;AACd,IAAA,QAAA,CAAS,SAAS,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAA,IAAI,QAAA,CAAS,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,OAAO,CAAA;AACnD,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,IAAA,SAAA,CAAU,UAAU,EAAC;AACrB,IAAA,gBAAA,CAAiB,YAAY,OAAO,CAAA;AAAA,EACtC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,aAAA,EAAe,QAAA,EAAU,KAAA,EAAO,SAAA,EAAW,OAAO,aAAA,EAAc;AAC3E;AC5MA,IAAM,oBAAA,GAAuB,aAAA;AAAA,EAC3B;AACF,CAAA;AAEO,SAAS,uBAAA,GAA0B;AACxC,EAAA,MAAM,GAAA,GAAM,WAAW,oBAAoB,CAAA;AAC3C,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAUO,IAAM,IAAA,GAAO,UAAA;AAAA,EAClB,CACE;AAAA,IACE,MAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,MAAM,gBAAA,CAAiB;AAAA,MAC3B,MAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,uBACE,GAAA,CAAC,oBAAA,CAAqB,QAAA,EAArB,EAA8B,OAAO,GAAA,EACpC,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,cAAY,GAAA,CAAI,KAAA;AAAA,QAChB,SAAA,EAAW,EAAA,CAAG,sBAAA,EAAwB,SAAS,CAAA;AAAA,QAC9C,GAAG,KAAA;AAAA,QAEH,sCACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,8BACR,MAAA,EAAA,EAAO;AAAA,SAAA,EACV;AAAA;AAAA,KAEJ,EACF,CAAA;AAAA,EAEJ;AACF,CAAA;AACA,IAAA,CAAK,WAAA,GAAc,oBAAA;AAUZ,IAAM,OAAA,GAAU,UAAA;AAAA,EACrB,CAAC,EAAE,MAAA,EAAQ,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AACxC,IAAA,MAAM,EAAE,aAAA,EAAe,KAAA,EAAM,GAAI,uBAAA,EAAwB;AAEzD,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,EAAA,CAAG,6CAAA,EAA+C,SAAS,CAAA;AAAA,QACrE,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,MAAA,GAAS,MAAA,CAAO,aAAa,CAAA,GAAI;AAAA;AAAA,KACpC;AAAA,EAEJ;AACF,CAAA;AACA,OAAA,CAAQ,WAAA,GAAc,uBAAA;AAUf,IAAM,MAAA,GAAS,UAAA;AAAA,EACpB,CAAC,EAAE,IAAA,GAAO,QAAA,EAAK,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC5C,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,uBAAA,EAAwB;AAC1C,IAAA,MAAM,OAAA,GAAU,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,SAAA;AAEnD,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,IAAA,uBACE,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,aAAA,EAAW,IAAA;AAAA,QACX,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,MAAA,EAAO;AAAA,QACjC,SAAA,EAAW,EAAA;AAAA,UACT,mDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,sBAAA;AAUd,IAAM,QAAA,GAAW,UAAA;AAAA,EACtB,CAAC,EAAE,KAAA,GAAQ,CAAA,EAAG,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC3C,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,uBAAA,EAAwB;AAE1C,IAAA,IAAI,KAAA,KAAU,WAAW,OAAO,IAAA;AAEhC,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,SAAA;AAAA,QACX,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,QAC5D,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,OAAM,EAAG,CAAC,GAAG,CAAA,qBACjC,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAW,EAAA;AAAA,cACT,uCAAA;AAAA,cACA,CAAA,KAAM,QAAQ,CAAA,IAAK;AAAA;AACrB,WAAA;AAAA,UAJK;AAAA,SAMR;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AACA,QAAA,CAAS,WAAA,GAAc,wBAAA;AAYhB,IAAM,aAAA,GAAgB,UAAA;AAAA,EAC3B,CAAC,EAAE,OAAA,GAAU,uBAAA,EAAyB,SAAS,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC5E,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,uBAAA,EAAwB;AAE1C,IAAA,IAAI,KAAA,KAAU,SAAS,OAAO,IAAA;AAE9B,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,KAAA,EAAO;AAAA,UACL,aAAa,SAAA,CAAU,KAAA;AAAA,UACvB,iBAAiB,SAAA,CAAU,YAAA;AAAA,UAC3B,OAAO,SAAA,CAAU;AAAA,SACnB;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,qDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,OAAG,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,UACX,OAAA,oBACC,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,OAAA;AAAA,cACT,SAAA,EAAU,+DAAA;AAAA,cACX,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AACA,aAAA,CAAc,WAAA,GAAc,6BAAA;AAWrB,IAAM,SAAA,GAAY,UAAA;AAAA,EACvB,CACE;AAAA,IACE,UAAA;AAAA,IACA,OAAA,GAAU,kCAAA;AAAA,IACV,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,uBAAA,EAAwB;AAE1C,IAAA,IAAI,KAAA,KAAU,aAAa,OAAO,IAAA;AAElC,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACT,qGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,OAAG,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,UACX,UAAA,IAAc,IAAA,oBACb,IAAA,CAAC,GAAA,EAAA,EAAE,WAAU,qBAAA,EAAsB,QAAA,EAAA;AAAA,YAAA,WAAA;AAAA,YACvB,UAAA;AAAA,YAAW;AAAA,WAAA,EACvB;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AACA,SAAA,CAAU,WAAA,GAAc,yBAAA;AAUjB,IAAM,OAAA,GAAU,UAAA;AAAA,EACrB,CAAC,EAAE,MAAA,GAAS,CAAC,MAAA,EAAQ,aAAa,CAAA,EAAG,QAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC5E,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,uBAAA,EAAwB;AAE1C,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,GAAG,OAAO,IAAA;AAEpC,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,sFAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AACA,OAAA,CAAQ,WAAA,GAAc,uBAAA;AAOf,IAAM,IAAA,GAAO,UAAA;AAAA,EAClB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAI,uBAAA,EAAwB;AAErD,IAAA,IAAI,KAAA,KAAU,aAAa,OAAO,IAAA;AAElC,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,SAAA;AAAA,QACT,SAAA,EAAW,EAAA;AAAA,UACT,4GAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,QAAA,IAAY;AAAA;AAAA,KACf;AAAA,EAEJ;AACF,CAAA;AACA,IAAA,CAAK,WAAA,GAAc,oBAAA;;;ACpVnB,IAAA,kBAAA,GAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,IAAA,EAAA,MAAAA,KAAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,mBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AC0BA,IAAM,gBAAA,GAAmBC,cAA4C,IAAI,CAAA;AAElE,SAAS,mBAAA,GAAsB;AACpC,EAAA,MAAM,GAAA,GAAMC,WAAW,gBAAgB,CAAA;AACvC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAqBO,IAAMF,KAAAA,GAAOG,UAAAA;AAAA,EAClB,CACE;AAAA,IACE,KAAA,EAAO,eAAA;AAAA,IACP,YAAA,GAAe,EAAA;AAAA,IACf,QAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA,GAAe,KAAA;AAAA,IACf,QAAA,GAAW,KAAA;AAAA,IACX,QAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,SAAS,YAAY,CAAA;AAC/D,IAAA,MAAM,QAAQ,eAAA,IAAmB,aAAA;AAEjC,IAAA,MAAM,QAAA,GAAWC,WAAAA;AAAA,MACf,CAAC,CAAA,KAAc;AACb,QAAA,IAAI,eAAA,KAAoB,MAAA,EAAW,gBAAA,CAAiB,CAAC,CAAA;AACrD,QAAA,aAAA,GAAgB,CAAC,CAAA;AAAA,MACnB,CAAA;AAAA,MACA,CAAC,iBAAiB,aAAa;AAAA,KACjC;AAEA,IAAA,MAAM,MAAA,GAASA,YAAY,MAAM;AAC/B,MAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAK,IAAK,gBAAgB,QAAA,EAAU;AAC/C,MAAA,QAAA,GAAW,KAAK,CAAA;AAAA,IAClB,GAAG,CAAC,KAAA,EAAO,YAAA,EAAc,QAAA,EAAU,QAAQ,CAAC,CAAA;AAE5C,IAAA,MAAM,gBAAA,GAAmBA,WAAAA;AAAA,MACvB,CAAC,CAAA,KAAuB;AACtB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAA,EAAO;AAAA,MACT,CAAA;AAAA,MACA,CAAC,MAAM;AAAA,KACT;AAEA,IAAA,uBACEC,GAAAA;AAAA,MAAC,gBAAA,CAAiB,QAAA;AAAA,MAAjB;AAAA,QACC,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,cAAc,QAAA,EAAS;AAAA,QAEzD,QAAA,kBAAAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,GAAA;AAAA,YACA,QAAA,EAAU,gBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,iBAAiB,SAAA,CAAU,OAAA;AAAA,cAC3B,aAAa,SAAA,CAAU,MAAA;AAAA,cACvB,OAAO,SAAA,CAAU;AAAA,aACnB;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACT,qFAAA;AAAA,cACA,QAAA,IAAY,gCAAA;AAAA,cACZ;AAAA,aACF;AAAA,YACC,GAAG,KAAA;AAAA,YAEH,QAAA,EAAA,QAAA,oBACCC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAAF,IAAC,KAAA,EAAA,EAAM,CAAA;AAAA,8BACPA,GAAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,gBAAa,CAAA,EAChB;AAAA,aAAA,EACF;AAAA;AAAA;AAEJ;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACAN,KAAAA,CAAK,WAAA,GAAc,gBAAA;AAMZ,IAAM,KAAA,GAAQG,UAAAA;AAAA,EACnB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,uBACEG,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,wDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AACA,KAAA,CAAM,WAAA,GAAc,iBAAA;AAQb,IAAM,IAAA,GAAOH,UAAAA;AAAA,EAClB,CAAC,EAAE,QAAA,EAAU,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AACpD,IAAA,uBACEI,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,+FAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,iBAAiB,SAAA,CAAU,gBAAA;AAAA,UAC3B,OAAO,SAAA,CAAU;AAAA,SACnB;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,4BACCD,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,QAAA;AAAA,cACT,SAAA,EAAU,oEAAA;AAAA,cACV,YAAA,EAAW,QAAA;AAAA,cACZ,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AACA,IAAA,CAAK,WAAA,GAAc,gBAAA;AAeZ,IAAM,KAAA,GAAQH,UAAAA;AAAA,EACnB,CAAC,EAAE,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,CAAA,EAAG,SAAA,EAAW,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACrE,IAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,QAAQ,YAAA,EAAc,QAAA,KAC7C,mBAAA,EAAoB;AACtB,IAAA,MAAM,WAAA,GAAcM,OAA4B,IAAI,CAAA;AACpD,IAAA,MAAM,cAAe,GAAA,IAAgD,WAAA;AAGrE,IAAAC,UAAU,MAAM;AACd,MAAA,MAAM,KAAK,WAAA,CAAY,OAAA;AACvB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,EAAA,CAAG,MAAM,MAAA,GAAS,MAAA;AAClB,MAAA,MAAM,aAAa,QAAA,CAAS,gBAAA,CAAiB,EAAE,CAAA,CAAE,UAAU,CAAA,IAAK,EAAA;AAChE,MAAA,MAAM,OAAO,UAAA,GAAa,OAAA;AAC1B,MAAA,MAAM,OAAO,UAAA,GAAa,OAAA;AAC1B,MAAA,EAAA,CAAG,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,YAAA,EAAc,IAAI,CAAA,EAAG,IAAI,CAAC,CAAA,EAAA,CAAA;AAAA,IACtE,GAAG,CAAC,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,WAAW,CAAC,CAAA;AAEzC,IAAA,MAAM,aAAA,GAAgBL,WAAAA;AAAA,MACpB,CAAC,CAAA,KAA0C;AACzC,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,EAAE,QAAA,EAAU;AACpC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,MAAA,EAAO;AAAA,QACT;AACA,QAAA,SAAA,GAAY,CAAC,CAAA;AAAA,MACf,CAAA;AAAA,MACA,CAAC,QAAQ,SAAS;AAAA,KACpB;AAEA,IAAA,uBACEC,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,WAAA;AAAA,QACL,KAAA;AAAA,QACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACxC,SAAA,EAAW,aAAA;AAAA,QACX,UAAU,QAAA,IAAY,YAAA;AAAA,QACtB,IAAA,EAAM,OAAA;AAAA,QACN,WAAA,EAAY,iBAAA;AAAA,QACZ,KAAA,EAAO;AAAA,UACL,cAAA,EAAgB,MAAA;AAAA,UAChB,OAAO,SAAA,CAAU;AAAA,SACnB;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,yGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF,CAAA;AACA,KAAA,CAAM,WAAA,GAAc,iBAAA;AAMb,IAAM,MAAA,GAASH,UAAAA;AAAA,EACpB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,uBACEG,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,sEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,kBAAA;AAYrB,IAAM,WAAA,GAAc,sBAClBA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,QAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EACvI,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uBAAA,EAAwB,CAAA,EAClC,CAAA;AAGK,IAAM,YAAA,GAAeH,UAAAA;AAAA,EAC1B,CAAC,EAAE,QAAA,EAAU,OAAA,GAAU,SAAA,EAAW,cAAc,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC7E,IAAA,MAAM,EAAE,KAAA,EAAO,YAAA,EAAc,QAAA,KAAa,mBAAA,EAAoB;AAC9D,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,CAAM,IAAA,EAAK;AAE5B,IAAA,MAAM,SAAS,OAAA,KAAY,MAAA;AAE3B,IAAA,MAAM,UAAU,QAAA,KACd,MAAA,GACE,+BACEG,GAAAA,CAAC,SAAI,KAAA,EAAM,IAAA,EAAK,QAAO,IAAA,EAAK,OAAA,EAAQ,aAAY,IAAA,EAAK,MAAA,EAAO,QAAO,cAAA,EAAe,WAAA,EAAY,OAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,WAAU,cAAA,EACzJ,QAAA,kBAAAA,IAAC,MAAA,EAAA,EAAK,CAAA,EAAE,+BAA8B,CAAA,EACxC,CAAA,mBAEAA,GAAAA,CAAC,WAAA,EAAA,EAAY,IAEb,OAAA,KAAY,WAAA,mBACdC,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EACb,QAAA,EAAA;AAAA,MAAA,YAAA,mBACCD,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,gBAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,SAAA,EAAU,cAAA,EACzJ,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6BAAA,EAA8B,CAAA,EACxC,CAAA,mBAEAA,IAAC,WAAA,EAAA,EAAY,CAAA;AAAA,MAEd,YAAA,GAAgB,gBAAgB,YAAA,GAAgB;AAAA,KAAA,EACnD,CAAA,GAEA,YAAA,GAAgB,YAAA,IAAgB,YAAA,GAAgB,MAAA,CAAA;AAIpD,IAAA,uBACEA,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,WAAW,YAAA,IAAgB,QAAA;AAAA,QACrC,OAAO,EAAE,eAAA,EAAiB,UAAU,MAAA,EAAQ,KAAA,EAAO,UAAU,QAAA,EAAS;AAAA,QACtE,SAAA,EAAW,EAAA;AAAA,UACT,2HAAA;AAAA,UACA,SACI,gBAAA,GACA,0CAAA;AAAA,UACJ;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AACA,YAAA,CAAa,WAAA,GAAc,wBAAA;AAUpB,IAAM,WAAA,GAAcH,UAAAA,CAGzB,CAAC,EAAE,WAAA,EAAa,UAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACzD,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,mBAAA,EAAoB;AAEzC,EAAA,IAAI,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAErC,EAAA,uBACEG,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,8DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,qBAChBA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,IAAA,EAAK,QAAA;AAAA,UACL,SAAS,MAAM;AACb,YAAA,QAAA,CAAS,CAAC,CAAA;AACV,YAAA,QAAA,GAAW,CAAC,CAAA;AAAA,UACd,CAAA;AAAA,UACA,SAAA,EAAU,kKAAA;AAAA,UAET,QAAA,EAAA;AAAA,SAAA;AAAA,QARI;AAAA,OAUR;AAAA;AAAA,GACH;AAEJ,CAAC,CAAA;AACD,WAAA,CAAY,WAAA,GAAc,uBAAA;;;ACrY1B,IAAA,oBAAA,GAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,IAAA,EAAA,MAAAN,KAAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,QAAA,EAAA,MAAA;AAAA,CAAA,CAAA;ACuBA,IAAM,kBAAA,GAAqBC,cAA8C,IAAI,CAAA;AAE7E,SAAS,qBAAA,GAAwB;AAC/B,EAAA,MAAM,GAAA,GAAMC,WAAW,kBAAkB,CAAA;AACzC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC5E;AACA,EAAA,OAAO,GAAA;AACT;AAUO,IAAMF,KAAAA,GAAOG,UAAAA;AAAA,EAClB,CAAC,EAAE,UAAA,EAAY,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtD,IAAA,MAAM,CAAC,QAAA,EAAU,gBAAgB,CAAA,GAAIC,SAAwB,IAAI,CAAA;AACjE,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE1C,IAAA,MAAM,WAAA,GAAcC,WAAAA;AAAA,MAClB,CAAC,CAAA,KAAqB;AACpB,QAAA,gBAAA,CAAiB,CAAC,CAAA;AAClB,QAAA,UAAA,GAAa,CAAC,CAAA;AAAA,MAChB,CAAA;AAAA,MACA,CAAC,UAAU;AAAA,KACb;AAEA,IAAA,uBACEC,GAAAA;AAAA,MAAC,kBAAA,CAAmB,QAAA;AAAA,MAAnB;AAAA,QACC,KAAA,EAAO,EAAE,QAAA,EAAU,WAAA,EAAa,QAAQ,SAAA,EAAU;AAAA,QAElD,QAAA,kBAAAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA;AAAA,YACA,IAAA,EAAK,SAAA;AAAA,YACL,YAAA,EAAW,kBAAA;AAAA,YACX,SAAA,EAAW,EAAA;AAAA,cACT,4CAAA;AAAA,cACA;AAAA,aACF;AAAA,YACC,GAAG,KAAA;AAAA,YAEH,QAAA,EAAA,QAAA,oBACCC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,8BAAAF,IAAC,QAAA,EAAA,EAAS,CAAA;AAAA,8BACVA,IAAC,UAAA,EAAA,EAAW,CAAA;AAAA,8BACZA,IAAC,IAAA,EAAA,EAAK;AAAA,aAAA,EACR;AAAA;AAAA;AAEJ;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACAN,KAAAA,CAAK,WAAA,GAAc,kBAAA;AAInB,IAAM,OAAA,GACJ,8GAAA;AAEF,IAAM,QAAA,GAAW;AAAA,EACf,OAAO,SAAA,CAAU;AACnB,CAAA;AAOO,IAAM,QAAA,GAAWG,UAAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAY,GAAI,qBAAA,EAAsB;AACxD,IAAA,MAAM,SAAS,QAAA,KAAa,IAAA;AAE5B,IAAA,uBACEG,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,eAAA;AAAA,QACX,cAAA,EAAc,MAAA;AAAA,QACd,OAAA,EAAS,MAAM,WAAA,CAAY,MAAA,GAAS,OAAO,IAAI,CAAA;AAAA,QAC/C,OAAO,MAAA,GAAS,EAAE,KAAA,EAAO,SAAA,CAAU,QAAO,GAAI,QAAA;AAAA,QAC9C,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA;AAAA,QAC/B,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAAC,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAa,SAAS,KAAA,GAAQ,GAAA;AAAA,YAC9B,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YAEf,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,8BACnBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4JAAA,EAA6J;AAAA;AAAA;AAAA;AACvK;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACA,QAAA,CAAS,WAAA,GAAc,sBAAA;AAOhB,IAAM,UAAA,GAAaH,WAGxB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAClC,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAY,GAAI,qBAAA,EAAsB;AACxD,EAAA,MAAM,SAAS,QAAA,KAAa,MAAA;AAE5B,EAAA,uBACEG,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,cAAA;AAAA,MACX,cAAA,EAAc,MAAA;AAAA,MACd,OAAA,EAAS,MAAM,WAAA,CAAY,MAAA,GAAS,OAAO,MAAM,CAAA;AAAA,MACjD,OAAO,MAAA,GAAS,EAAE,KAAA,EAAO,SAAA,CAAU,OAAM,GAAI,QAAA;AAAA,MAC7C,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA;AAAA,MAC/B,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAC,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAa,SAAS,KAAA,GAAQ,GAAA;AAAA,UAC9B,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe,OAAA;AAAA,UAEf,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,4BACnBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2JAAA,EAA4J;AAAA;AAAA;AAAA;AACtK;AAAA,GACF;AAEJ,CAAC,CAAA;AACD,UAAA,CAAW,WAAA,GAAc,wBAAA;AAUlB,IAAM,IAAA,GAAOH,UAAAA;AAAA,EAClB,CAAC,EAAE,IAAA,EAAM,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtC,IAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAU,GAAI,qBAAA,EAAsB;AAEpD,IAAA,MAAM,UAAA,GAAaE,YAAY,YAAY;AACzC,MAAA,MAAM,UACJ,IAAA,IACC,GAAA,EAA4C,SACzC,OAAA,CAAQ,uBAAuB,GAC/B,WAAA,IACJ,EAAA;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,OAAO,CAAA;AAC3C,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,IACzC,CAAA,EAAG,CAAC,IAAA,EAAM,GAAA,EAAK,SAAS,CAAC,CAAA;AAEzB,IAAA,uBACEC,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAY,SAAS,QAAA,GAAW,MAAA;AAAA,QAChC,OAAA,EAAS,UAAA;AAAA,QACT,KAAA,EAAO,MAAA,GAAS,EAAE,KAAA,EAAO,WAAU,GAAI,QAAA;AAAA,QACvC,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA;AAAA,QAC/B,GAAG,KAAA;AAAA,QAEH,mCACCA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,GAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB;AAAA;AAAA,4BAG5BC,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,GAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YAEf,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,CAAA;AAAA,8BACvDA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yDAAA,EAA0D;AAAA;AAAA;AAAA;AACpE;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AACA,IAAA,CAAK,WAAA,GAAc,kBAAA;AASZ,IAAM,UAAA,GAAaH,WAGxB,CAAC,EAAE,cAAc,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAChD,EAAA,uBACEG,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,qBAAA;AAAA,MACX,OAAA,EAAS,YAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,SAAS,CAAA;AAAA,MAC/B,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAC,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe,OAAA;AAAA,UAEf,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oDAAA,EAAqD,CAAA;AAAA,4BAC7DA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,4BACnBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,qDAAA,EAAsD,CAAA;AAAA,4BAC9DA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,YAAA,EAAa;AAAA;AAAA;AAAA;AACvB;AAAA,GACF;AAEJ,CAAC,CAAA;AACD,UAAA,CAAW,WAAA,GAAc,wBAAA;;;ACvRzB,IAAA,sBAAA,GAAA;AAAA,QAAA,CAAA,sBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAAK,QAAAA;AAAA,EAAA,IAAA,EAAA,MAAAX,KAAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AC0BA,IAAM,oBAAA,GAAuBC,aAAAA;AAAA,EAC3B;AACF,CAAA;AAEA,SAAS,uBAAA,GAA0B;AACjC,EAAA,MAAM,GAAA,GAAMC,WAAW,oBAAoB,CAAA;AAC3C,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAgBO,IAAMF,KAAAA,GAAOG,UAAAA;AAAA,EAClB,CACE;AAAA,IACE,KAAA,GAAQ,UAAA;AAAA,IACR,WAAA,GAAc,IAAA;AAAA,IACd,cAAA,GAAiB,IAAA;AAAA,IACjB,QAAA,GAAW,IAAA;AAAA,IACX,QAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,SAAS,WAAW,CAAA;AAEhD,IAAAM,UAAU,MAAM;AACd,MAAA,IAAI,KAAA,KAAU,UAAU,cAAA,EAAgB;AACtC,QAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,GAAG,GAAG,CAAA;AACpD,QAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,MACjC;AAAA,IACF,CAAA,EAAG,CAAC,KAAA,EAAO,cAAc,CAAC,CAAA;AAE1B,IAAA,MAAM,MAAA,GAASL,WAAAA,CAAY,MAAM,SAAA,CAAU,CAAC,MAAM,CAAC,CAAC,CAAA,EAAG,EAAE,CAAA;AAEzD,IAAA,uBACEC,GAAAA,CAAC,oBAAA,CAAqB,QAAA,EAArB,EAA8B,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,QAAA,EAAS,EACtE,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,YAAA,EAAY,KAAA;AAAA,QACZ,WAAA,EAAW,MAAA;AAAA,QACX,SAAA,EAAW,EAAA;AAAA,UACT,uFAAA;AAAA,UACA,UAAU,UAAA,IAAc,iFAAA;AAAA,UACxB,UAAU,MAAA,IAAU,0BAAA;AAAA,UACpB,UAAU,OAAA,IAAW,6BAAA;AAAA,UACrB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,QAAA,oBACCC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAF,IAAC,OAAA,EAAA,EAAQ,CAAA;AAAA,0BACTA,GAAAA,CAACK,QAAAA,EAAA,EAAQ;AAAA,SAAA,EACX;AAAA;AAAA,KAEJ,EACF,CAAA;AAAA,EAEJ;AACF,CAAA;AACAX,KAAAA,CAAK,WAAA,GAAc,oBAAA;AAUZ,IAAM,OAAA,GAAUG,UAAAA;AAAA,EACrB,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AACjD,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,QAAA,KAAa,uBAAA,EAAwB;AAEpE,IAAA,MAAM,YAAA,GACJ,KAAA,KAAU,UAAA,GACN,aAAA,GACA,KAAA,KAAU,OAAA,GACR,iBAAA,GACA,QAAA,IAAY,IAAA,GACV,CAAA,YAAA,EAAe,QAAQ,CAAA,CAAA,CAAA,GACvB,iBAAA;AAEV,IAAA,uBACEI,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,eAAA,EAAe,MAAA;AAAA,QACf,SAAA,EAAW,EAAA;AAAA,UACT,wIAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAGH,QAAA,EAAA;AAAA,UAAA,KAAA,KAAU,8BACTD,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,+BAAA;AAAA,cACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,MAAA,EAAO;AAAA,cACjC,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cAEL,QAAA,kBAAAA,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,EAAA,EAAG,IAAA;AAAA,kBACH,EAAA,EAAG,IAAA;AAAA,kBACH,CAAA,EAAE,IAAA;AAAA,kBACF,MAAA,EAAO,cAAA;AAAA,kBACP,WAAA,EAAY,GAAA;AAAA,kBACZ,eAAA,EAAgB,IAAA;AAAA,kBAChB,gBAAA,EAAiB,IAAA;AAAA,kBACjB,aAAA,EAAc;AAAA;AAAA;AAChB;AAAA,WACF;AAAA,UAED,KAAA,KAAU,0BACTA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,kBAAA;AAAA,cACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,MAAA,EAAO;AAAA,cACjC,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,WAAA,EAAY,GAAA;AAAA,cACZ,aAAA,EAAc,OAAA;AAAA,cACd,cAAA,EAAe,OAAA;AAAA,cAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uKAAA,EAAwK;AAAA;AAAA,WAClL;AAAA,UAED,KAAA,KAAU,2BACTC,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,+BAAA;AAAA,cACV,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,WAAA,EAAY,GAAA;AAAA,cACZ,aAAA,EAAc,OAAA;AAAA,cAEd,QAAA,EAAA;AAAA,gCAAAD,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,gCAC/BA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mBAAA,EAAoB;AAAA;AAAA;AAAA,WAC9B;AAAA,0BAGFA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,oBAAA;AAAA,gBACA,UAAU,UAAA,IAAc,oCAAA;AAAA,gBACxB,UAAU,MAAA,IAAU,eAAA;AAAA,gBACpB,UAAU,OAAA,IAAW;AAAA,eACvB;AAAA,cAEC,sBAAY,KAAA,IAAS;AAAA;AAAA,WACxB;AAAA,0BAGAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,kEAAA;AAAA,gBACA,MAAA,IAAU;AAAA,eACZ;AAAA,cACA,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,WAAA,EAAY,GAAA;AAAA,cACZ,aAAA,EAAc,OAAA;AAAA,cACd,cAAA,EAAe,OAAA;AAAA,cAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,cAAA,EAAe;AAAA;AAAA;AACzB;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACA,OAAA,CAAQ,WAAA,GAAc,uBAAA;AAOf,IAAMK,QAAAA,GAAUR,UAAAA;AAAA,EACrB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,uBAAA,EAAwB;AAElD,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,IAAA,uBACEG,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,2DAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,sCACCA,GAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,yBAAA;AAAA,cACA,KAAA,KAAU,aACN,sBAAA,GACA;AAAA,aACN;AAAA,YAEC,QAAA,EAAA,KAAA,KAAU,aACP,0BAAA,GACA;AAAA;AAAA;AACN;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AACAK,QAAAA,CAAQ,WAAA,GAAc,uBAAA;;;ACjQtB,IAAA,iBAAA,GAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,KAAA,EAAA,MAAAC,MAAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,IAAA,EAAA,MAAAZ;AAAA,CAAA,CAAA;ACwBA,IAAM,eAAA,GAAkBC,cAA2C,IAAI,CAAA;AAEvE,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAM,GAAA,GAAMC,WAAW,eAAe,CAAA;AACtC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,GAAA;AACT;AAcO,IAAMF,KAAAA,GAAOG,UAAAA;AAAA,EAClB,CACE;AAAA,IACE,QAAA;AAAA,IACA,MAAA,GAAS,SAAA;AAAA,IACT,WAAA,GAAc,KAAA;AAAA,IACd,QAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,SAAS,WAAW,CAAA;AAChD,IAAA,MAAM,MAAA,GAASC,WAAAA,CAAY,MAAM,SAAA,CAAU,CAAC,MAAM,CAAC,CAAC,CAAA,EAAG,EAAE,CAAA;AAEzD,IAAA,uBACEC,GAAAA,CAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,KAAA,EAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAO,EAClE,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,aAAA,EAAa,MAAA;AAAA,QACb,SAAA,EAAW,EAAA;AAAA,UACT,kEAAA;AAAA,UACA,WAAW,SAAA,IAAa,+BAAA;AAAA,UACxB,WAAW,SAAA,IAAa,+BAAA;AAAA,UACxB,WAAW,SAAA,IAAa,qCAAA;AAAA,UACxB,WAAW,OAAA,IAAW,6BAAA;AAAA,UACtB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,QAAA,oBACCA,GAAAA,CAAAE,QAAAA,EAAA,EACE,QAAA,kBAAAF,GAAAA,CAAC,UAAO,CAAA,EACV;AAAA;AAAA,KAEJ,EACF,CAAA;AAAA,EAEJ;AACF,CAAA;AACAN,KAAAA,CAAK,WAAA,GAAc,eAAA;AAOZ,IAAM,MAAA,GAASG,UAAAA;AAAA,EACpB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,MAAA,KAAW,kBAAA,EAAmB;AAEhE,IAAA,uBACEI,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,eAAA,EAAe,MAAA;AAAA,QACf,SAAA,EAAW,EAAA;AAAA,UACT,wIAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAGJ,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,YAAA,MAAA,KAAW,SAAA,oBACVD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mEAAA,EACd,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EAAmC,CAAA,EACrD,CAAA;AAAA,YAED,MAAA,KAAW,6BACVA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,oCAAA;AAAA,gBACV,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBAEL,QAAA,kBAAAA,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAG,IAAA;AAAA,oBACH,EAAA,EAAG,IAAA;AAAA,oBACH,CAAA,EAAE,IAAA;AAAA,oBACF,MAAA,EAAO,cAAA;AAAA,oBACP,WAAA,EAAY,GAAA;AAAA,oBACZ,eAAA,EAAgB,IAAA;AAAA,oBAChB,gBAAA,EAAiB,IAAA;AAAA,oBACjB,aAAA,EAAc;AAAA;AAAA;AAChB;AAAA,aACF;AAAA,YAED,WAAW,SAAA,oBACVA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wEACd,QAAA,kBAAAA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,0BAAA;AAAA,gBACV,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,WAAA,EAAY,GAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe,OAAA;AAAA,gBAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB;AAAA;AAAA,aAC5B,EACF,CAAA;AAAA,YAED,WAAW,OAAA,oBACVA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oEACd,QAAA,kBAAAA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,sBAAA;AAAA,gBACV,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,WAAA,EAAY,GAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBAEd,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mBAAA,EAAoB;AAAA;AAAA,aAC9B,EACF;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wDAAA,EACb,QAAA,EAAA,QAAA,EACH,CAAA;AAAA,8BACAC,IAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,kDAAA;AAAA,oBACA,WAAW,SAAA,IAAa,2BAAA;AAAA,oBACxB,WAAW,SAAA,IAAa,2BAAA;AAAA,oBACxB,WAAW,SAAA,IAAa,iCAAA;AAAA,oBACxB,WAAW,OAAA,IAAW;AAAA,mBACxB;AAAA,kBAEC,QAAA,EAAA;AAAA,oBAAA,MAAA,KAAW,SAAA,IAAa,QAAA;AAAA,oBACxB,WAAW,SAAA,IAAa,SAAA;AAAA,oBACxB,WAAW,SAAA,IAAa,MAAA;AAAA,oBACxB,WAAW,OAAA,IAAW;AAAA;AAAA;AAAA;AACzB,aAAA,EACF,CAAA;AAAA,YACC;AAAA,WAAA,EACH,CAAA;AAAA,0BAGAD,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,kEAAA;AAAA,gBACA,MAAA,IAAU;AAAA,eACZ;AAAA,cACA,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,WAAA,EAAY,GAAA;AAAA,cACZ,aAAA,EAAc,OAAA;AAAA,cACd,cAAA,EAAe,OAAA;AAAA,cAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,cAAA,EAAe;AAAA;AAAA;AACzB;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,iBAAA;AASd,IAAMM,MAAAA,GAAQT,UAAAA;AAAA,EACnB,CAAC,EAAE,KAAA,GAAQ,OAAA,EAAS,UAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3D,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,kBAAA,EAAmB;AAEtC,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,IAAA,uBACEI,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,0DAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yEAAA,EACV,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EACZ,QAAA,EACH;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACAM,MAAAA,CAAM,WAAA,GAAc,gBAAA;AASb,IAAM,MAAA,GAAST,UAAAA;AAAA,EACpB,CAAC,EAAE,KAAA,GAAQ,QAAA,EAAU,UAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC5D,IAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAO,GAAI,kBAAA,EAAmB;AAE9C,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,KAAW,SAAA,IAAa,MAAA,KAAW,WAAW,OAAO,IAAA;AAEpE,IAAA,uBACEI,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,2DAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yEAAA,EACV,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,0BACAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,kDAAA;AAAA,gBACA,WAAW,SAAA,IAAa,gCAAA;AAAA,gBACxB,WAAW,OAAA,IAAW;AAAA,eACxB;AAAA,cAEC;AAAA;AAAA;AACH;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,iBAAA;;;AC1RrB,IAAA,mBAAA,GAAA;AAAA,QAAA,CAAA,mBAAA,EAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,IAAA,EAAA,MAAAN,KAAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,WAAA,EAAA,MAAA;AAAA,CAAA,CAAA;ACcO,IAAMA,KAAAA,GAAOG,UAAAA;AAAA,EAClB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,uBACEG,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,iCAAA,EAAmC,SAAS,CAAA;AAAA,QACzD,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AACAN,KAAAA,CAAK,WAAA,GAAc,iBAAA;AAQZ,IAAM,QAAA,GAAWG,UAAAA;AAAA,EACtB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,uBACEG,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,0DAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,cAAA,EAAgB,MAAA;AAAA,UAChB,cAAA,EAAgB,CAAA,wCAAA;AAAA,SAClB;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AACA,QAAA,CAAS,WAAA,GAAc,qBAAA;AAgBhB,IAAM,OAAA,GAAUH,UAAAA;AAAA,EACrB,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACzE,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,uBACEG,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,WAAA,EAAW,IAAA;AAAA,UACX,SAAA,EAAW,EAAA;AAAA,YACT,wCAAA;AAAA,YACA;AAAA,WACF;AAAA,UACC,GAAG,KAAA;AAAA,UAEJ,QAAA,kBAAAC,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,mDAAA;AAAA,cACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,SAAA,EAAU;AAAA,cAElC,QAAA,EAAA;AAAA,gBAAA,CAAA,IAAA,IAAQ,SAAA,qBACRA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6CAAA,EACZ,QAAA,EAAA;AAAA,kBAAA,MAAA;AAAA,kBACA,wBAAQD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAe,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,kBAC5C,6BAAaA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAc,QAAA,EAAA,SAAA,EAAU;AAAA,iBAAA,EACxD,CAAA;AAAA,gCAEFA,GAAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAS;AAAA;AAAA;AAAA;AACjB;AAAA,OACF;AAAA,IAEJ;AAEA,IAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AAExB,IAAA,uBACEC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,EAAA;AAAA,UACT,+BAAA;AAAA,UACA,SAAS,kBAAA,GAAqB,UAAA;AAAA,UAC9B;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAGH,QAAA,EAAA;AAAA,UAAA,MAAA,oBACCD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAsB,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,0BAI9CC,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,MAAA,GAAS,cAAc,aAAa,CAAA;AAAA,cAGvE,QAAA,EAAA;AAAA,gBAAA,CAAA,IAAA,IAAQ,8BACRA,IAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,sCAAA;AAAA,sBACA,SAAS,aAAA,GAAgB;AAAA,qBAC3B;AAAA,oBACA,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,aAAA,EAAc;AAAA,oBAEvC,QAAA,EAAA;AAAA,sBAAA,IAAA,oBAAQD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAe,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,sBAC5C,6BAAaA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAc,QAAA,EAAA,SAAA,EAAU;AAAA;AAAA;AAAA,iBACxD;AAAA,gCAIFA,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,+CAAA;AAAA,sBACA,SAAS,eAAA,GAAkB;AAAA,qBAC7B;AAAA,oBACA,OACE,MAAA,GACI;AAAA,sBACE,iBAAiB,SAAA,CAAU,MAAA;AAAA,sBAC3B,OAAO,SAAA,CAAU;AAAA,qBACnB,GACA;AAAA,sBACE,iBAAiB,SAAA,CAAU,OAAA;AAAA,sBAC3B,OAAO,SAAA,CAAU,IAAA;AAAA,sBACjB,MAAA,EAAQ,CAAA,UAAA,EAAa,SAAA,CAAU,MAAM,CAAA;AAAA,qBACvC;AAAA,oBAGL;AAAA;AAAA;AACH;AAAA;AAAA;AACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACA,OAAA,CAAQ,WAAA,GAAc,oBAAA;AAOf,IAAM,WAAA,GAAcH,UAAAA;AAAA,EACzB,CAAC,KAAA,EAAO,GAAA,qBAAQG,GAAAA,CAAC,WAAQ,GAAA,EAAU,IAAA,EAAK,MAAA,EAAQ,GAAG,KAAA,EAAO;AAC5D,CAAA;AACA,WAAA,CAAY,WAAA,GAAc,wBAAA;AAOnB,IAAM,gBAAA,GAAmBH,UAAAA,CAG9B,CAAC,KAAA,EAAO,GAAA,qBAAQG,GAAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAU,IAAA,EAAK,WAAA,EAAa,GAAG,OAAO,CAAE,CAAA;AACnE,gBAAA,CAAiB,WAAA,GAAc,6BAAA;AAOxB,IAAM,aAAA,GAAgBH,UAAAA,CAG3B,CAAC,KAAA,EAAO,GAAA,qBAAQG,GAAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAU,IAAA,EAAK,QAAA,EAAU,GAAG,OAAO,CAAE,CAAA;AAChE,aAAA,CAAc,WAAA,GAAc,0BAAA;AAOrB,IAAM,YAAA,GAAeH,UAAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,MAAM,QAAA,GAAWM,OAAuB,IAAI,CAAA;AAG5C,IAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAgC;AAC9C,MAAC,SAA2D,OAAA,GAAU,IAAA;AACtE,MAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA;AAAA,WAAA,IAC9B,GAAA,EAAM,GAAA,CAAsD,OAAA,GAAU,IAAA;AAAA,IACjF,CAAA;AAEA,IAAAC,UAAU,MAAM;AACd,MAAA,MAAM,KAAK,QAAA,CAAS,OAAA;AACpB,MAAA,IAAI,CAAC,EAAA,EAAI;AAGT,MAAA,MAAM,YAAA,GAAe,EAAA,CAAG,OAAA,CAAQ,sBAAsB,CAAA;AAEtD,MAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,MAAM;AAC1C,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,YAAA,CAAa,QAAA,CAAS;AAAA,YACpB,KAAK,YAAA,CAAa,YAAA;AAAA,YAClB,QAAA,EAAU;AAAA,WACX,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAED,MAAA,MAAM,SAAS,EAAA,CAAG,aAAA;AAClB,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,QAAA,CAAS,QAAQ,MAAA,EAAQ,EAAE,WAAW,IAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AAAA,MAC7D;AAEA,MAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,IACnC,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,uBACEJ,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,MAAA;AAAA,QACL,aAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAW,EAAA,CAAG,+BAAA,EAAiC,SAAS,CAAA;AAAA,QACvD,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF,CAAA;AACA,YAAA,CAAa,WAAA,GAAc,yBAAA;AAmBpB,IAAM,MAAA,GAASH,UAAAA;AAAA,EACpB,CACE;AAAA,IACE,GAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA,GAAO,EAAA;AAAA,IACP,SAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,EAAA,GAAK,SAAS,SAAA,CAAU,MAAA;AAC9B,IAAA,MAAM,EAAA,GAAK,aAAa,SAAA,CAAU,QAAA;AAElC,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,uBACEG,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,SAAA,EAAW,EAAA;AAAA,YACT,yDAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,OAAO,EAAE,KAAA,EAAO,MAAM,MAAA,EAAQ,IAAA,EAAM,GAAG,KAAA,EAAM;AAAA,UAC5C,GAAG,KAAA;AAAA,UAEJ,QAAA,kBAAAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,KAAK,QAAA,IAAY,QAAA;AAAA,cACjB,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,OACF;AAAA,IAEJ;AAEA,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,wFAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,IAAA;AAAA,UACP,MAAA,EAAQ,IAAA;AAAA,UACR,eAAA,EAAiB,EAAA;AAAA,UACjB,KAAA,EAAO,EAAA;AAAA,UACP,UAAU,IAAA,GAAO,GAAA;AAAA,UACjB,GAAG;AAAA,SACL;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,kBAAQ,QAAA,IAAY;AAAA;AAAA,KACvB;AAAA,EAEJ;AACF,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,mBAAA;;;ACtUrB,IAAA,iBAAA,GAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,aAAA,EAAA,MAAAO,cAAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,IAAA,EAAA,MAAAb,KAAAA;AAAA,EAAA,OAAA,EAAA,MAAAc;AAAA,CAAA,CAAA;ACwBA,IAAM,eAAA,GAAkBb,cAA2C,IAAI,CAAA;AAEvE,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAM,GAAA,GAAMC,WAAW,eAAe,CAAA;AACtC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAiBO,IAAMF,KAAAA,GAAOG,UAAAA;AAAA,EAClB,CACE;AAAA,IACE,KAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,WAAA,GAAc,KAAA;AAAA,IACd,MAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA,GAAa,IAAA;AAAA,IACb,QAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,GAAA,GAA4B;AAAA,MAChC,KAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,uBACEG,GAAAA,CAAC,eAAA,CAAgB,UAAhB,EAAyB,KAAA,EAAO,KAC/B,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,YAAA,EAAY,KAAA;AAAA,QACZ,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,EAAW;AAAA,QAC9B,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA;AAAA,QACzC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH,EACF,CAAA;AAAA,EAEJ;AACF,CAAA;AACAN,KAAAA,CAAK,WAAA,GAAc,eAAA;AAOZ,IAAM,WAAA,GAAcG,UAAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAK,WAAA,KAAgB,kBAAA,EAAmB;AAEvD,IAAA,MAAM,UACJ,KAAA,KAAU,MAAA,IAAU,UAAU,SAAA,IAAc,KAAA,KAAU,gBAAgB,CAAC,GAAA;AAEzE,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,IAAA,uBACEI,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,eAAA;AAAA,QACX,KAAA,EAAO;AAAA,UACL,WAAA;AAAA,UACA,iBAAiB,SAAA,CAAU,gBAAA;AAAA,UAC3B,cAAc,SAAA,CAAU,MAAA;AAAA,UACxB,QAAA,EAAU,QAAA;AAAA,UACV,QAAA,EAAU;AAAA,SACZ;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,SAAS,CAAA;AAAA,QACrD,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,uBAAA,EAAyB;AAAA,gBACvB,MAAA,EAAQ,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA;AAAA;AAMV;AAAA,WACF;AAAA,0BACAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,QAAA,EAAU,UAAA;AAAA,gBACV,KAAA,EAAO,CAAA;AAAA,gBACP,UAAA,EAAY,CAAA,uCAAA,EAA0C,SAAA,CAAU,MAAM,CAAA,uBAAA,CAAA;AAAA,gBACtE,SAAA,EAAW;AAAA;AACb;AAAA;AACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACA,WAAA,CAAY,WAAA,GAAc,sBAAA;AAOnB,IAAM,OAAA,GAAUH,UAAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,OAAO,GAAG,KAAA,IAAS,GAAA,KAAQ;AACvC,IAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAK,KAAK,WAAA,EAAa,UAAA,KAAe,kBAAA,EAAmB;AAExE,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,IAAA,MAAM,SAAS,KAAA,KAAU,MAAA;AACzB,IAAA,MAAM,SAAA,GAAY,UAAA,IAAc,CAAC,MAAA,GAAS,YAAA,GAAe,SAAA;AAEzD,IAAA,uBACEG,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,GAAA;AAAA,QACA,KAAK,GAAA,IAAO,EAAA;AAAA,QACZ,YAAA,EAAY,KAAA;AAAA,QACZ,KAAA,EAAO;AAAA,UACL,WAAA;AAAA,UACA,KAAA,EAAO,MAAA;AAAA,UACP,OAAA,EAAS,OAAA;AAAA,UACT,cAAc,SAAA,CAAU,MAAA;AAAA,UACxB,SAAA,EAAW,OAAA;AAAA,UACX,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY,sBAAA;AAAA,UACZ,GAAG;AAAA,SACL;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,QACjD,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF,CAAA;AACA,OAAA,CAAQ,WAAA,GAAc,kBAAA;AASf,IAAM,QAAA,GAAWH,UAAAA;AAAA,EACtB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,kBAAA,EAAmB;AAErC,IAAA,IAAI,KAAA,KAAU,SAAA,IAAa,KAAA,KAAU,YAAA,EAAc,OAAO,IAAA;AAE1D,IAAA,MAAM,kBAAkB,QAAA,KAAa,MAAA;AAErC,IAAA,uBACEG,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,aAAA;AAAA,QACL,eAAA,EAAe,kBAAkB,MAAA,GAAY,QAAA;AAAA,QAC7C,eAAA,EAAe,CAAA;AAAA,QACf,eAAA,EAAe,GAAA;AAAA,QACf,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,UAAA;AAAA,UACV,MAAA,EAAQ,CAAA;AAAA,UACR,IAAA,EAAM,CAAA;AAAA,UACN,KAAA,EAAO,CAAA;AAAA,UACP,MAAA,EAAQ,KAAA;AAAA,UACR,iBAAiB,SAAA,CAAU,gBAAA;AAAA,UAC3B,YAAA,EAAc,aAAA;AAAA,UACd,QAAA,EAAU;AAAA,SACZ;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,QAClD,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,eAAA,mBACCC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAF,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,uBAAA,EAAyB;AAAA,gBACvB,MAAA,EAAQ,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA;AAAA;AAMV;AAAA,WACF;AAAA,0BACAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,KAAA,EAAO,KAAA;AAAA,gBACP,MAAA,EAAQ,MAAA;AAAA,gBACR,iBAAiB,SAAA,CAAU,MAAA;AAAA,gBAC3B,SAAA,EAAW;AAAA;AACb;AAAA;AACF,SAAA,EACF,oBAEAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,cAC9C,MAAA,EAAQ,MAAA;AAAA,cACR,iBAAiB,SAAA,CAAU,MAAA;AAAA,cAC3B,UAAA,EAAY;AAAA;AACd;AAAA;AACF;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AACA,QAAA,CAAS,WAAA,GAAc,mBAAA;AAIvB,IAAM,WAAA,GAA6C;AAAA,EACjD,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,cAAA;AAAA,EACT,UAAA,EAAY,eAAA;AAAA,EACZ,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAOO,IAAM,OAAA,GAAUH,UAAAA;AAAA,EACrB,CAAC,EAAE,KAAA,EAAO,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AACvC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,kBAAA,EAAmB;AAErC,IAAA,IAAI,KAAA,KAAU,SAAA,IAAa,KAAA,KAAU,YAAA,EAAc,OAAO,IAAA;AAE1D,IAAA,MAAM,YAAA,GAAe,KAAA,IAAS,WAAA,CAAY,KAAK,CAAA;AAE/C,IAAA,uBACEI,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,QAAA,EAAU,UAAA;AAAA,UACV,KAAA,EAAO,CAAA;AAAA,UACP,OAAA,EAAS,MAAA;AAAA,UACT,aAAA,EAAe,QAAA;AAAA,UACf,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,GAAA,EAAK,KAAA;AAAA,UACL,eAAA,EAAiB,oBAAA;AAAA,UACjB,cAAc,SAAA,CAAU,MAAA;AAAA,UACxB,KAAA,EAAO;AAAA,SACT;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,QACjD,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAA,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,IAAA;AAAA,cACN,MAAA,EAAO,IAAA;AAAA,cACP,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,EAAE,SAAA,EAAW,yBAAA,EAA0B;AAAA,cAE9C,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAAC,WAAO,QAAA,EAAA,CAAA,qDAAA,CAAA,EAAwD,CAAA;AAAA,gCAChEA,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,EAAA,EAAG,IAAA;AAAA,oBACH,EAAA,EAAG,IAAA;AAAA,oBACH,CAAA,EAAE,IAAA;AAAA,oBACF,MAAA,EAAO,cAAA;AAAA,oBACP,WAAA,EAAY,GAAA;AAAA,oBACZ,eAAA,EAAgB,WAAA;AAAA,oBAChB,aAAA,EAAc;AAAA;AAAA;AAChB;AAAA;AAAA,WACF;AAAA,UACC,YAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,GAAA,EAAI,EAC9C,QAAA,EAAA,YAAA,EACH;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AACA,OAAA,CAAQ,WAAA,GAAc,kBAAA;AASf,IAAMO,cAAAA,GAAgBV,UAAAA;AAAA,EAC3B,CAAC,EAAE,OAAA,GAAU,2BAAA,EAA6B,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AACvE,IAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAI,kBAAA,EAAmB;AAE9C,IAAA,IAAI,KAAA,KAAU,SAAS,OAAO,IAAA;AAE9B,IAAA,uBACEI,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,KAAA,EAAO;AAAA,UACL,aAAa,SAAA,CAAU,KAAA;AAAA,UACvB,iBAAiB,SAAA,CAAU,YAAA;AAAA,UAC3B,OAAO,SAAA,CAAU;AAAA,SACnB;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,qDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,OAAG,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,UACX,2BACCA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,OAAA;AAAA,cACT,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,KAAA,EAAM;AAAA,cAChC,SAAA,EAAU,+BAAA;AAAA,cACX,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AACAO,cAAAA,CAAc,WAAA,GAAc,wBAAA;AAOrB,IAAMC,QAAAA,GAAUX,UAAAA;AAAA,EACrB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,kBAAA,EAAmB;AAErC,IAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,IAAA;AAE7B,IAAA,uBACEG,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,sFAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AACAQ,QAAAA,CAAQ,WAAA,GAAc,kBAAA;AAOf,IAAM,QAAA,GAAWX,UAAAA;AAAA,EACtB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,MAAM,EAAE,UAAA,EAAW,GAAI,kBAAA,EAAmB;AAE1C,IAAA,uBACEG,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,UAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,iBAAiB,SAAA,CAAU,MAAA;AAAA,UAC3B,OAAO,SAAA,CAAU,QAAA;AAAA,UACjB,cAAc,SAAA,CAAU;AAAA,SAC1B;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,6DAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,QAAA,IAAY;AAAA;AAAA,KACf;AAAA,EAEJ;AACF,CAAA;AACA,QAAA,CAAS,WAAA,GAAc,mBAAA;AAOhB,IAAM,KAAA,GAAQH,UAAAA;AAAA,EACnB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,kBAAA,EAAmB;AAEvC,IAAA,uBACEG,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,OAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,aAAa,SAAA,CAAU,MAAA;AAAA,UACvB,OAAO,SAAA,CAAU,IAAA;AAAA,UACjB,cAAc,SAAA,CAAU,MAAA;AAAA,UACxB,WAAA,EAAa,KAAA;AAAA,UACb,WAAA,EAAa;AAAA,SACf;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,0DAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA,QAAA,IAAY;AAAA;AAAA,KACf;AAAA,EAEJ;AACF,CAAA;AACA,KAAA,CAAM,WAAA,GAAc,gBAAA;;;ACjdpB,IAAA,iBAAA,GAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAAO,cAAAA;AAAA,EAAA,WAAA,EAAA,MAAAE,YAAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,QAAA,EAAA,MAAAC,SAAAA;AAAA,EAAA,IAAA,EAAA,MAAAhB,KAAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,OAAA,EAAA,MAAAc;AAAA,CAAA,CAAA;AC4BA,IAAM,eAAA,GAAkBb,cAA2C,IAAI,CAAA;AAEvE,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAM,GAAA,GAAMC,WAAW,eAAe,CAAA;AACtC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAmBO,IAAMF,KAAAA,GAAOG,UAAAA;AAAA,EAClB,CACE;AAAA,IACE,KAAA;AAAA,IACA,GAAA,GAAM,IAAA;AAAA,IACN,MAAA,GAAS,IAAA;AAAA,IACT,QAAA;AAAA,IACA,WAAA,GAAc,MAAA;AAAA,IACd,QAAA,GAAW,IAAA;AAAA,IACX,MAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,GAAA,GAA4B;AAAA,MAChC,KAAA;AAAA,MACA,GAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,uBACEG,GAAAA,CAAC,eAAA,CAAgB,UAAhB,EAAyB,KAAA,EAAO,KAC/B,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,EAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA;AAAA,QACnE,KAAA,EAAO;AAAA,UACL,WAAA;AAAA,UACA,cAAc,SAAA,CAAU,MAAA;AAAA,UACxB,GAAG;AAAA,SACL;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH,EACF,CAAA;AAAA,EAEJ;AACF,CAAA;AACAN,KAAAA,CAAK,WAAA,GAAc,eAAA;AAOZ,IAAMe,YAAAA,GAAcZ,UAAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,kBAAA,EAAmB;AAC7C,IAAA,MAAM,EAAA,GAAK,KAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AAEnC,IAAA,MAAM,WACH,KAAA,KAAU,MAAA,IAAU,UAAU,QAAA,IAAY,KAAA,KAAU,iBACrD,CAAC,MAAA;AAEH,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,IAAA,uBACEI,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,iBAAA;AAAA,QACX,SAAA,EAAW,EAAA;AAAA,UACT,+EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,EAAE,eAAA,EAAiB,SAAA,CAAU,gBAAA,EAAiB;AAAA,QACpD,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,uBAAA,EAAyB;AAAA,gBACvB,MAAA,EAAQ;AAAA,4BAAA,EACU,EAAE,CAAA;AAAA;AAAA;AAAA,CAAA;AAAA;AAItB;AAAA,WACF;AAAA,0BACAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,kBAAA;AAAA,cACV,KAAA,EAAO;AAAA,gBACL,UAAA,EAAY,CAAA,uCAAA,EAA0C,SAAA,CAAU,MAAM,CAAA,uBAAA,CAAA;AAAA,gBACtE,cAAA,EAAgB,WAAA;AAAA,gBAChB,SAAA,EAAW,oBAAoB,EAAE,CAAA,wBAAA,CAAA;AAAA,gBACjC,OAAA,EAAS;AAAA;AACX;AAAA,WACF;AAAA,0BAEAC,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,IAAA;AAAA,cACN,MAAA,EAAO,IAAA;AAAA,cACP,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,WAAA,EAAY,KAAA;AAAA,cACZ,aAAA,EAAc,OAAA;AAAA,cACd,cAAA,EAAe,OAAA;AAAA,cACf,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,WAAW,QAAA,EAAU,UAAA,EAAY,QAAQ,CAAA,EAAE;AAAA,cAErE,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2CAAA,EAA4C,CAAA;AAAA,gCACpDA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,0CAAA,EAA2C,CAAA;AAAA,gCACnDA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,gCACnBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,gCACnBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY,CAAA;AAAA,gCACpBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY;AAAA;AAAA;AAAA;AACtB;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACAS,YAAAA,CAAY,WAAA,GAAc,sBAAA;AAOnB,IAAM,SAAA,GAAYZ,UAAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAClD,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,kBAAA,EAAmB;AAE7C,IAAA,MAAM,UACJ,MAAA,KACC,KAAA,KAAU,YAAA,IAAgB,KAAA,KAAU,eAAe,KAAA,KAAU,MAAA,CAAA;AAEhE,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,IAAA,uBACEG,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,GAAA,EAAK,MAAA;AAAA,QACL,GAAA,EAAI,iBAAA;AAAA,QACJ,SAAA,EAAW,EAAA;AAAA,UACT,uEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,cAAc,SAAA,CAAU,MAAA;AAAA,UACxB,GAAG;AAAA,SACL;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF,CAAA;AACA,SAAA,CAAU,WAAA,GAAc,oBAAA;AAYjB,IAAM,MAAA,GAASH,UAAAA;AAAA,EACpB,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,IAAA,EAAM,KAAA,EAAO,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACzE,IAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAK,MAAA,KAAW,kBAAA,EAAmB;AAElD,IAAA,IAAI,KAAA,KAAU,MAAA,IAAU,CAAC,GAAA,EAAK,OAAO,IAAA;AAErC,IAAA,uBACEG,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,GAAA;AAAA,QACA,QAAQ,MAAA,IAAU,MAAA;AAAA,QAClB,QAAA,EAAQ,IAAA;AAAA,QACR,QAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,sEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,cAAc,SAAA,CAAU,MAAA;AAAA,UACxB,iBAAiB,SAAA,CAAU,OAAA;AAAA,UAC3B,GAAG;AAAA,SACL;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,iBAAA;AAOd,IAAMU,SAAAA,GAAWb,UAAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChC,IAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,kBAAA,EAAmB;AAC/C,IAAA,MAAM,EAAA,GAAK,KAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AAEnC,IAAA,MAAM,OAAA,GACJ,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,gBAAgB,KAAA,KAAU,WAAA;AAE5D,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,IAAA,MAAM,gBAAgB,QAAA,IAAY,IAAA;AAElC,IAAA,uBACEI,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,aAAA;AAAA,QACL,eAAA,EAAe,gBAAgB,QAAA,GAAW,MAAA;AAAA,QAC1C,eAAA,EAAe,CAAA;AAAA,QACf,eAAA,EAAe,GAAA;AAAA,QACf,SAAA,EAAW,EAAA;AAAA,UACT,+DAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,OAAO,EAAE,eAAA,EAAiB,CAAA,mBAAA,EAAsB,SAAA,CAAU,MAAM,CAAA,kBAAA,CAAA,EAAqB;AAAA,QACpF,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,uBAAA,EAAyB;AAAA,gBACvB,MAAA,EAAQ;AAAA,kCAAA,EACgB,EAAE,CAAA;AAAA;AAAA;AAAA,CAAA;AAAA;AAI5B;AAAA,WACF;AAAA,0BACAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,QAAA;AAAA,cACV,OACE,aAAA,GACI;AAAA,gBACE,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,gBAC9C,iBAAiB,SAAA,CAAU,MAAA;AAAA,gBAC3B,UAAA,EAAY;AAAA,eACd,GACA;AAAA,gBACE,KAAA,EAAO,KAAA;AAAA,gBACP,iBAAiB,SAAA,CAAU,MAAA;AAAA,gBAC3B,SAAA,EAAW,0BAA0B,EAAE,CAAA,0BAAA;AAAA;AACzC;AAAA;AAER;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACAU,SAAAA,CAAS,WAAA,GAAc,mBAAA;AAUvB,SAAS,YAAA,CAAa,OAAsB,QAAA,EAA2B;AACrE,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,MAAA;AACH,MAAA,OAAO,EAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,YAAY,IAAA,GAAO,CAAA,WAAA,EAAc,KAAK,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,CAAA,GAAM,eAAA;AAAA,IACpE,KAAK,WAAA;AACH,MAAA,OAAO,YAAY,IAAA,GAAO,CAAA,UAAA,EAAa,KAAK,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,CAAA,GAAM,cAAA;AAAA,IACnE,KAAK,MAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT;AACE,MAAA,OAAO,EAAA;AAAA;AAEb;AAEO,IAAM,UAAA,GAAab,UAAAA;AAAA,EACxB,CAAC,EAAE,KAAA,EAAO,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AACvC,IAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,kBAAA,EAAmB;AAC/C,IAAA,MAAM,EAAA,GAAK,KAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AAEnC,IAAA,MAAM,YAAA,GAAe,KAAA,IAAS,YAAA,CAAa,KAAA,EAAO,QAAQ,CAAA;AAC1D,IAAA,MAAM,QAAA,GACJ,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,gBAAgB,KAAA,KAAU,WAAA;AAE5D,IAAA,IAAI,CAAC,cAAc,OAAO,IAAA;AAE1B,IAAA,MAAM,cAAc,SAAA,CAAU,MAAA;AAC9B,IAAA,MAAM,cAAc,SAAA,CAAU,YAAA;AAE9B,IAAA,uBACEI,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,EAAA;AAAA,UACT,iDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,EAAE,KAAA,EAAO,WAAA,EAAY;AAAA,QAC3B,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,uBAAA,EAAyB;AAAA,gBACvB,MAAA,EAAQ;AAAA,0BAAA,EACQ,EAAE,CAAA;AAAA,oBAAA,EACR,WAAW,CAAA;AAAA,eAAA,EAChB,WAAW,CAAA;AAAA,CAAA;AAAA;AAElB;AAAA,WACF;AAAA,UACC,QAAA,mBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,cAAY,YAAA,EACf,QAAA,EAAA,YAAA,CAAa,KAAA,CAAM,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,EAAM,sBACjCA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,cAAA;AAAA,gBACT,SAAA,EAAW,kBAAkB,EAAE,CAAA,0BAAA,CAAA;AAAA,gBAC/B,cAAA,EAAgB,CAAA,EAAG,CAAA,GAAI,IAAI,CAAA,CAAA;AAAA,eAC7B;AAAA,cAEC,QAAA,EAAA,IAAA,KAAS,MAAM,MAAA,GAAW;AAAA,aAAA;AAAA,YAPtB;AAAA,WASR,CAAA,EACH,CAAA,mBAEAA,GAAAA,CAAC,UAAM,QAAA,EAAA,YAAA,EAAa;AAAA;AAAA;AAAA,KAExB;AAAA,EAEJ;AACF,CAAA;AACA,UAAA,CAAW,WAAA,GAAc,qBAAA;AAUlB,IAAMO,cAAAA,GAAgBV,UAAAA;AAAA,EAC3B,CAAC,EAAE,OAAA,GAAU,0BAAA,EAA4B,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtE,IAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAI,kBAAA,EAAmB;AAE9C,IAAA,IAAI,KAAA,KAAU,SAAS,OAAO,IAAA;AAE9B,IAAA,uBACEI,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACT,oGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,iBAAiB,SAAA,CAAU,YAAA;AAAA,UAC3B,OAAO,SAAA,CAAU,KAAA;AAAA,UACjB,cAAc,SAAA,CAAU;AAAA,SAC1B;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAA,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,IAAA;AAAA,cACN,MAAA,EAAO,IAAA;AAAA,cACP,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,WAAA,EAAY,GAAA;AAAA,cACZ,aAAA,EAAc,OAAA;AAAA,cACd,cAAA,EAAe,OAAA;AAAA,cAEf,QAAA,EAAA;AAAA,gCAAAD,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,gCAC/BA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,gCACrCA,GAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AAAA,WAC3C;AAAA,0BACAA,GAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,UACX,2BACCA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,OAAA;AAAA,cACT,SAAA,EAAU,+BAAA;AAAA,cACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,KAAA,EAAM;AAAA,cACjC,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AACAO,cAAAA,CAAc,WAAA,GAAc,wBAAA;AAOrB,IAAMC,QAAAA,GAAUX,UAAAA;AAAA,EACrB,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,kBAAA,EAAmB;AAErC,IAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,IAAA;AAE7B,IAAA,uBACEG,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,2GAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AACAQ,QAAAA,CAAQ,WAAA,GAAc,kBAAA;AAOf,IAAM,UAAA,GAAaX,UAAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,GAAA,KAAQ,kBAAA,EAAmB;AAClD,IAAiBM,OAAgC,IAAI;AAErD,IAAA,MAAM,OAAA,GAAU,UAAU,MAAA,IAAU,GAAA;AAEpC,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,EAAO;AAAA,MACT,CAAA,MAAO;AAEL,QAAA,MAAM,IAAA,GAAQ,KAAsC,OAAA,EAAS,OAAA;AAAA,UAC3D;AAAA,SACF;AACA,QAAA,MAAM,KAAA,GAAQ,IAAA,EAAM,aAAA,CAAc,OAAO,CAAA;AACzC,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,KAAA,CAAM,IAAA,EAAK;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,uBACEH,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,YAAA;AAAA,QACX,OAAA,EAAS,WAAA;AAAA,QACT,SAAA,EAAW,EAAA;AAAA,UACT,iKAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,iBAAiB,SAAA,CAAU,MAAA;AAAA,UAC3B,OAAO,SAAA,CAAU;AAAA,SACnB;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,sCACCA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,cAAA;AAAA,YAEL,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB;AAAA;AAAA;AAC1B;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AACA,UAAA,CAAW,WAAA,GAAc,qBAAA;ACniBzB,IAAM,WAAA,GAGF;AAAA,EACF,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,iBAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,mBAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,GAAA,EAAK;AAAA,IACH,KAAA,EAAO,gBAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,oBAAA;AAAA,IACP,OAAA,EAAS;AAAA;AAEb,CAAA;AAaO,IAAM,eAAA,GAAkBH,UAAAA;AAAA,EAC7B,CAAC,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,GAAU,SAAS,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACjE,IAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAChC,IAAA,MAAM,YAAA,GAAe,SAAS,MAAA,CAAO,KAAA;AAErC,IAAA,IAAI,YAAY,KAAA,EAAO;AACrB,MAAA,uBACEG,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAY,YAAA;AAAA,UACZ,KAAA,EAAO,YAAA;AAAA,UACP,SAAA,EAAW,EAAA;AAAA,YACT,qEAAA;AAAA,YACA,UAAU,MAAA,IAAU,gBAAA;AAAA,YACpB,UAAU,QAAA,IAAY,cAAA;AAAA,YACtB,UAAU,KAAA,IAAS,YAAA;AAAA,YACnB,UAAU,SAAA,IAAa,aAAA;AAAA,YACvB;AAAA,WACF;AAAA,UACC,GAAG;AAAA;AAAA,OACN;AAAA,IAEJ;AAEA,IAAA,IAAI,YAAY,QAAA,EAAU;AACxB,MAAA,uBACEA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAW,EAAA;AAAA,YACT,wCAAA;AAAA,YACA,UAAU,MAAA,IAAU,kBAAA;AAAA,YACpB,UAAU,QAAA,IAAY,gBAAA;AAAA,YACtB,UAAU,KAAA,IAAS,cAAA;AAAA,YACnB,UAAU,SAAA,IAAa,eAAA;AAAA,YACvB;AAAA,WACF;AAAA,UACC,GAAG,KAAA;AAAA,UAEH,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,IAEJ;AAEA,IAAA,uBACEC,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACT,2GAAA;AAAA,UACA,MAAA,CAAO,OAAA;AAAA,UACP;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,+BAAA;AAAA,gBACA,UAAU,MAAA,IAAU,gBAAA;AAAA,gBACpB,UAAU,QAAA,IAAY,cAAA;AAAA,gBACtB,UAAU,KAAA,IAAS,YAAA;AAAA,gBACnB,UAAU,SAAA,IAAa;AAAA;AACzB;AAAA,WACF;AAAA,UACC;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;ACpFvB,IAAM,cAAA,GAAiBH,UAAAA;AAAA,EAC5B,CACE;AAAA,IACE,KAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA,GAAU,aAAA;AAAA,IACV,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,SAAS,KAAK,CAAA;AAEpD,IAAA,MAAM,QAAQ,OAAA,KAAY,SAAA,GAAY,IAAI,KAAK,CAAA,CAAA,CAAA,GAAM,GAAG,KAAK,CAAA,CAAA;AAE7D,IAAA,MAAM,GAAA,GAAM,OAAO,GAAA,GAAM,MAAA;AACzB,IAAA,MAAM,SAAA,GAAY,OACd,EAAE,IAAA,EAAM,QAAQ,QAAA,EAAmB,GAAA,EAAK,qBAAA,EAA+B,GACvE,EAAC;AAEL,IAAA,uBACEG,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,sCAAA,EAAwC,SAAS,CAAA;AAAA,QAC/D,YAAA,EAAc,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,QACvC,YAAA,EAAc,MAAM,cAAA,CAAe,KAAK,CAAA;AAAA,QACvC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACE,GAAG,SAAA;AAAA,cACJ,SAAA,EAAW,EAAA;AAAA,gBACT,yDAAA;AAAA,gBACA,YAAY,aAAA,IACV,6DAAA;AAAA,gBACF,YAAY,SAAA,IACV,2CAAA;AAAA,gBACF,YAAY,MAAA,IACV;AAAA,eACJ;AAAA,cACA,cAAY,WAAA,GAAc,CAAA,QAAA,EAAW,WAAW,CAAA,CAAA,GAAK,YAAY,KAAK,CAAA,CAAA;AAAA,cAErE,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAGC,OAAA,IAAW,+BACVC,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,SAAA;AAAA,cACL,SAAA,EAAU,uJAAA;AAAA,cAET,QAAA,EAAA;AAAA,gBAAA,WAAA,oBACCD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAkC,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,gCAE7DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,gBACvC,wBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uCAAuC,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,gCAE3DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wFAAA,EAAyF;AAAA;AAAA;AAAA;AAC1G;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AAQtB,IAAM,aAAA,GAAgBH,UAAAA;AAAA,EAC3B,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,uBACEG,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA;AAAA,QAClE,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AC5F5B,IAAM,UAAA,GAGF;AAAA,EACF,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,aAAA,EAAe,oDAAA;AAAA,IACf,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,aAAA,EAAe,oCAAA;AAAA,IACf,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,WAAA;AAAA,IACN,aAAA,EAAe,6CAAA;AAAA,IACf,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,WAAA;AAAA,IACN,aAAA,EAAe,gDAAA;AAAA,IACf,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAEO,IAAM,WAAA,GAAcH,UAAAA;AAAA,EACzB,CACE;AAAA,IACE,MAAA;AAAA,IACA,IAAA,GAAO,YAAA;AAAA,IACP,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,aAAA,GAAgB,UAAU,MAAA,CAAO,aAAA;AAEvC,IAAA,uBACEG,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,mBAAA,EAAmB,IAAA;AAAA,QACnB,SAAA,EAAW,EAAA;AAAA,UACT,0CAAA;AAAA,UACA,MAAA,CAAO,MAAA;AAAA,UACP;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,UAAK,SAAA,EAAU,SAAA,EAAU,eAAW,IAAA,EAClC,QAAA,EAAA,IAAA,IAAQ,OAAO,IAAA,EAClB,CAAA;AAAA,0BACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,aAAA,EAAc,CAAA;AAAA,YAEnD,QAAA;AAAA,YAEA,WAAA,IAAe,YAAY,MAAA,GAAS,CAAA,oBACnCC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,MAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0CAAA,EAA2C,QAAA,EAAA,cAAA,EAExD,CAAA;AAAA,8BACAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBACZ,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,qBAChBA,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,MAAM,iBAAA,GAAoB,CAAC,CAAA;AAAA,kBACpC,SAAA,EAAU,gIAAA;AAAA,kBAET,QAAA,EAAA;AAAA,iBAAA;AAAA,gBALI;AAAA,eAOR,CAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EAEJ;AAAA,SAAA,EACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;ACtF1B,SAAS,cAAc,IAAA,EAA6B;AAClD,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,EAAA,IAAI,CAAA,GAAI,CAAA;AAER,EAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AAGpB,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,KAAM,EAAA,EAAI;AACtB,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,2BAAA,CAA4B,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1C,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAI,CAAA;AACvC,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,mBAAmB,CAAA;AACnD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,aAAa,CAAC,CAAA;AAAA,QACvB,KAAA,EAAO,YAAA,CAAa,CAAC,CAAA,CAAE;AAAA,OACxB,CAAA;AACD,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AACxC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,IAAA,GAAO,SAAA,CAAU,CAAC,CAAA,IAAK,MAAA;AAC7B,MAAA,MAAM,YAAsB,EAAC;AAC7B,MAAA,CAAA,EAAA;AACA,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,IAAU,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,KAAK,CAAA,EAAG;AACtD,QAAA,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AACvB,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAAA,QAC5B;AAAA,OACD,CAAA;AACD,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG;AACzB,MAAA,MAAM,aAAuB,EAAC;AAC9B,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,IAAU,KAAA,CAAM,CAAC,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA,EAAG;AACpD,QAAA,UAAA,CAAW,KAAK,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA;AACjC,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,YAAA,EAAc,SAAS,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA;AAClE,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG;AACzB,MAAA,MAAM,QAAkB,EAAC;AACzB,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,IAAU,UAAA,CAAW,KAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACpD,QAAA,KAAA,CAAM,KAAK,KAAA,CAAM,CAAC,EAAE,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAC,CAAA;AAC3C,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,CAAA;AAChE,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG;AACzB,MAAA,MAAM,QAAkB,EAAC;AACzB,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,IAAU,UAAA,CAAW,KAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACpD,QAAA,KAAA,CAAM,KAAK,KAAA,CAAM,CAAC,EAAE,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAC,CAAA;AAC3C,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,IAAA,EAAM,CAAA;AAC/D,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,OACE,CAAA,GAAI,MAAM,MAAA,IACV,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK,KAAM,EAAA,IACpB,CAAC,KAAA,CAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,IACxB,CAAC,KAAA,CAAM,CAAC,CAAA,CAAE,UAAA,CAAW,KAAK,CAAA,IAC1B,CAAC,KAAA,CAAM,CAAC,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA,IACzB,CAAC,WAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,IACzB,CAAC,WAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,IACzB,CAAC,4BAA4B,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAC1C;AACA,MAAA,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AACvB,MAAA,CAAA,EAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA;AAAA,IAClE;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAIA,SAAS,aAAa,IAAA,EAA2B;AAC/C,EAAA,MAAM,QAAqB,EAAC;AAE5B,EAAA,MAAM,KAAA,GACJ,6DAAA;AACF,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,KAAA;AAEJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AAE1C,IAAA,IAAI,KAAA,CAAM,QAAQ,SAAA,EAAW;AAC3B,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,IAC/C;AAEA,IAAA,IAAI,KAAA,CAAM,CAAC,CAAA,EAAG;AAEZ,MAAA,KAAA,CAAM,IAAA;AAAA,wBACJA,IAAC,QAAA,EAAA,EAAyB,SAAA,EAAU,iBACjC,QAAA,EAAA,KAAA,CAAM,CAAC,CAAA,EAAA,EADG,KAAA,CAAM,KAEnB;AAAA,OACF;AAAA,IACF,CAAA,MAAA,IAAW,KAAA,CAAM,CAAC,CAAA,EAAG;AAEnB,MAAA,KAAA,CAAM,IAAA;AAAA,wBACJA,IAAC,IAAA,EAAA,EAAqB,SAAA,EAAU,UAC7B,QAAA,EAAA,KAAA,CAAM,CAAC,CAAA,EAAA,EADD,KAAA,CAAM,KAEf;AAAA,OACF;AAAA,IACF,CAAA,MAAA,IAAW,KAAA,CAAM,CAAC,CAAA,EAAG;AAEnB,MAAA,KAAA,CAAM,IAAA;AAAA,wBACJA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,yEAAA;AAAA,YAET,gBAAM,CAAC;AAAA,WAAA;AAAA,UAHH,KAAA,CAAM;AAAA;AAIb,OACF;AAAA,IACF,CAAA,MAAA,IAAW,KAAA,CAAM,CAAC,CAAA,EAAG;AAEnB,MAAA,KAAA,CAAM,IAAA;AAAA,wBACJA,GAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,YACb,MAAA,EAAO,QAAA;AAAA,YACP,GAAA,EAAI,qBAAA;AAAA,YACJ,SAAA,EAAU,kEAAA;AAAA,YAET,gBAAM,CAAC;AAAA,WAAA;AAAA,UANH,KAAA,CAAM;AAAA;AAOb,OACF;AAAA,IACF;AAEA,IAAA,SAAA,GAAY,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA;AAAA,EACrC;AAGA,EAAA,IAAI,SAAA,GAAY,KAAK,MAAA,EAAQ;AAC3B,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,EAClC;AAEA,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,CAAC,IAAI,CAAA;AACzC;AAWO,IAAM,gBAAA,GAAmBH,UAAAA,CAG9B,CAAC,EAAE,OAAA,EAAS,YAAY,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACvD,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAM,aAAA,CAAc,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAE9D,EAAA,uBACEG,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,gEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM;AACxB,QAAA,QAAQ,MAAM,IAAA;AAAM,UAClB,KAAK,SAAA,EAAW;AACd,YAAA,MAAM,GAAA,GAAM,CAAA,CAAA,EAAI,KAAA,CAAM,KAAK,CAAA,CAAA;AAC3B,YAAA,uBACEA,GAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,EAAA;AAAA,kBACT,6BAAA;AAAA,kBACA,KAAA,CAAM,UAAU,CAAA,IAAK,UAAA;AAAA,kBACrB,KAAA,CAAM,UAAU,CAAA,IAAK,SAAA;AAAA,kBACrB,KAAA,CAAM,UAAU,CAAA,IAAK,SAAA;AAAA,kBAAA,CACpB,KAAA,CAAM,KAAA,IAAS,CAAA,KAAM,CAAA,IAAK;AAAA,iBAC7B;AAAA,gBAEC,QAAA,EAAA,YAAA,CAAa,MAAM,OAAO;AAAA,eAAA;AAAA,cATtB;AAAA,aAUP;AAAA,UAEJ;AAAA,UAEA,KAAK,WAAA;AACH,YAAA,uBACEA,GAAAA,CAAC,GAAA,EAAA,EAAW,uBAAa,KAAA,CAAM,OAAO,KAA9B,CAAgC,CAAA;AAAA,UAG5C,KAAK,MAAA;AACH,YAAA,IAAI,UAAA,EAAY;AACd,cAAA,uBACEA,IAAC,KAAA,EAAA,EAAa,QAAA,EAAA,UAAA,CAAW,MAAM,OAAA,EAAS,KAAA,CAAM,IAAI,CAAA,EAAA,EAAxC,CAA0C,CAAA;AAAA,YAExD;AACA,YAAA,uBACEC,IAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAU,8DAAA;AAAA,gBAET,QAAA,EAAA;AAAA,kBAAA,KAAA,CAAM,wBACLD,GAAAA,CAAC,SAAI,SAAA,EAAU,gHAAA,EACZ,gBAAM,IAAA,EACT,CAAA;AAAA,kCAEFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA,KAAA,CAAM,OAAA,EACT,CAAA,EACF;AAAA;AAAA,eAAA;AAAA,cAZK;AAAA,aAaP;AAAA,UAGJ,KAAK,MAAA,EAAQ;AACX,YAAA,MAAM,GAAA,GAAM,KAAA,CAAM,OAAA,GAAU,IAAA,GAAO,IAAA;AACnC,YAAA,uBACEA,GAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,EAAA;AAAA,kBACT,gBAAA;AAAA,kBACA,KAAA,CAAM,UAAU,cAAA,GAAiB;AAAA,iBACnC;AAAA,gBAEC,QAAA,EAAA,KAAA,CAAM,KAAA,EAAO,GAAA,CAAI,CAAC,MAAM,CAAA,qBACvBA,GAAAA,CAAC,IAAA,EAAA,EAAW,WAAU,eAAA,EACnB,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,EAAA,EADX,CAET,CACD;AAAA,eAAA;AAAA,cAVI;AAAA,aAWP;AAAA,UAEJ;AAAA,UAEA,KAAK,YAAA;AACH,YAAA,uBACEA,GAAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAU,sDAAA;AAAA,gBAET,QAAA,EAAA,YAAA,CAAa,MAAM,OAAO;AAAA,eAAA;AAAA,cAHtB;AAAA,aAIP;AAAA,UAGJ,KAAK,IAAA;AACH,YAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAW,SAAA,EAAU,qBAAb,CAA+B,CAAA;AAAA,UAEjD;AACE,YAAA,OAAO,IAAA;AAAA;AACX,MACF,CAAC;AAAA;AAAA,GACH;AAEJ,CAAC;AACD,gBAAA,CAAiB,WAAA,GAAc,kBAAA;ACvR/B,IAAM,aAAA,GAGF;AAAA,EACF,IAAA,EAAM,EAAE,KAAA,EAAO,OAAA,EAAS,UAAU,MAAA,EAAO;AAAA,EACzC,QAAA,EAAU,EAAE,KAAA,EAAO,aAAA,EAAe,UAAU,OAAA,EAAQ;AAAA,EACpD,SAAA,EAAW,EAAE,KAAA,EAAO,YAAA,EAAc,UAAU,QAAA,EAAS;AAAA,EACrD,cAAA,EAAgB,EAAE,KAAA,EAAO,gBAAA,EAAkB,UAAU,MAAA,EAAO;AAAA,EAC5D,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,EAAS,UAAU,KAAA;AACrC,CAAA;AAEA,IAAM,QAAA,GAA6D;AAAA,EACjE,QAAQ,EAAE,IAAA,EAAM,SAAA,CAAU,MAAA,EAAQ,QAAQ,8CAAA,EAA+C;AAAA,EACzF,KAAA,EAAO,EAAE,IAAA,EAAM,gBAAA,EAAkB,QAAQ,iBAAA,EAAkB;AAAA,EAC3D,IAAA,EAAM,EAAE,IAAA,EAAM,gBAAA,EAAkB,QAAQ,iBAAA,EAAkB;AAAA,EAC1D,GAAA,EAAK,EAAE,IAAA,EAAM,gBAAA,EAAkB,QAAQ,kBAAA,EAAmB;AAAA,EAC1D,IAAA,EAAM,EAAE,IAAA,EAAM,kBAAA,EAAoB,QAAQ,kBAAA;AAC5C,CAAA;AAEO,IAAM,eAAA,GAAkBH,UAAAA;AAAA,EAC7B,CACE;AAAA,IACE,KAAA,GAAQ,MAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,GAAY,OAAA;AAAA,IACZ,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,EAAA,GAAKc,KAAAA,EAAM,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AACnC,IAAA,MAAM,QAAA,GAAW,cAAc,KAAK,CAAA;AACpC,IAAA,MAAM,aAAA,GAAgB,SAAS,QAAA,CAAS,QAAA;AACxC,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAa,CAAA,IAAK,QAAA,CAAS,IAAA;AACnD,IAAA,MAAM,YAAA,GAAe,SAAS,QAAA,CAAS,KAAA;AACvC,IAAA,MAAM,QAAA,GAAW,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,OAAA;AAE/C,IAAA,uBACEV,IAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,YAAA,EAAY,KAAA;AAAA,QACZ,SAAA,EAAW,EAAA;AAAA,UACT,6EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,CAAO,IAAA,EAAK;AAAA,QAC3B,GAAG,KAAA;AAAA,QAGJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,uBAAA,EAAyB;AAAA,gBACvB,MAAA,EAAQ;AAAA,uBAAA,EACK,EAAE,CAAA;AAAA,oBAAA,EACL,OAAO,IAAI,CAAA;AAAA,eAAA,EAChB,OAAO,MAAM,CAAA;AAAA;AAAA,uBAAA,EAEL,EAAE,CAAA;AAAA;AAAA;AAAA;AAAA,sBAAA,EAIH,EAAE,CAAA;AAAA;AAAA;AAAA,CAAA;AAAA;AAIhB;AAAA,WACF;AAAA,0BAGAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EACb,kCACCA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,IAAA;AAAA,cACN,MAAA,EAAO,IAAA;AAAA,cACP,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,cAAA;AAAA,cACL,OACE,QAAA,GACI,EAAE,WAAW,CAAA,WAAA,EAAc,EAAE,uBAAsB,GACnD,MAAA;AAAA,cAGN,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uEAAA,EAAwE;AAAA;AAAA,WAClF,EAEJ,CAAA;AAAA,UAGC,YAAY,SAAA,KAAc,OAAA,mBACzBA,GAAAA,CAAC,UAAK,YAAA,EAAY,YAAA,EACf,QAAA,EAAA,YAAA,CAAa,KAAA,CAAM,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,EAAM,sBACjCA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,cAAA;AAAA,gBACT,SAAA,EAAW,eAAe,EAAE,CAAA,0BAAA,CAAA;AAAA,gBAC5B,cAAA,EAAgB,CAAA,EAAG,CAAA,GAAI,IAAI,CAAA,CAAA;AAAA,eAC7B;AAAA,cAEC,QAAA,EAAA,IAAA,KAAS,MAAM,MAAA,GAAW;AAAA,aAAA;AAAA,YAPtB;AAAA,WASR,CAAA,EACH,CAAA,mBAEAA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,KAAA,EACE,QAAA,IAAY,SAAA,KAAc,OAAA,GACtB;AAAA,gBACE,SAAA,EAAW,eAAe,EAAE,CAAA,0BAAA;AAAA,eAC9B,GACA,MAAA;AAAA,cAGL,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;ACrI9B,SAAS,aAAa,CAAA,EAAmB;AACvC,EAAA,IAAI,CAAA,IAAK,KAAW,OAAO,CAAA,EAAA,CAAI,IAAI,GAAA,EAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AACxD,EAAA,IAAI,CAAA,IAAK,KAAO,OAAO,CAAA,EAAA,CAAI,IAAI,GAAA,EAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAChD,EAAA,OAAO,EAAE,cAAA,EAAe;AAC1B;AAEO,IAAM,UAAA,GAAaH,UAAAA;AAAA,EACxB,CAAC,EAAE,WAAA,EAAa,YAAA,EAAc,SAAA,EAAW,MAAM,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC5E,IAAA,MAAM,QAAQ,WAAA,GAAc,YAAA;AAC5B,IAAA,MAAM,QAAA,GAAW,SAAA,GAAY,CAAA,GAAK,WAAA,GAAc,YAAa,GAAA,GAAM,CAAA;AACnE,IAAA,MAAM,SAAA,GAAY,SAAA,GAAY,CAAA,GAAK,YAAA,GAAe,YAAa,GAAA,GAAM,CAAA;AACrE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,QAAA,GAAW,WAAW,GAAG,CAAA;AAEnD,IAAA,MAAM,SAAS,QAAA,GAAW,EAAA;AAC1B,IAAA,MAAM,QAAA,GAAW,QAAA,GAAW,EAAA,IAAM,QAAA,IAAY,EAAA;AAE9C,IAAA,uBACEI,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,kEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAGJ,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8DAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,cAAA,YAAA,CAAa,KAAK,CAAA;AAAA,cAAG,GAAA;AAAA,8BACtBA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EAA4B,QAAA,EAAA;AAAA,gBAAA,IAAA;AAAA,gBACvC,aAAa,SAAS,CAAA;AAAA,gBAAE;AAAA,eAAA,EAC7B;AAAA,aAAA,EACF,CAAA;AAAA,YACC,QAAQ,IAAA,oBACPA,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,2BAAA,EAA4B,QAAA,EAAA;AAAA,cAAA,GAAA;AAAA,cACxC,IAAA,CAAK,QAAQ,CAAC;AAAA,aAAA,EAClB;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAGAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EAEb,QAAA,EAAA;AAAA,4BAAAD,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,sEAAA;AAAA,kBACA,MAAA,GAAS,YAAA,GAAe,QAAA,GAAW,cAAA,GAAiB;AAAA,iBACtD;AAAA,gBACA,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAK,GAAA,CAAI,QAAA,EAAU,GAAG,CAAC,CAAA,CAAA,CAAA;AAAI;AAAA,aAChD;AAAA,4BAEAA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,gDAAA;AAAA,kBACA,MAAA,GACI,YAAA,GACA,QAAA,GACE,cAAA,GACA,eAAA;AAAA,kBACN,SAAA,GAAY,CAAA,IAAK,QAAA,GAAW,SAAA,IAAa,GAAA,IAAO;AAAA,iBAClD;AAAA,gBACA,KAAA,EAAO;AAAA,kBACL,MAAM,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,kBAChC,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,QAAA,EAAU,GAAG,CAAC,CAAC,CAAA,CAAA;AAAA;AAC9D;AAAA;AACF,WAAA,EACF,CAAA;AAAA,0BAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EACd,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,mCAAA;AAAA,oBACA,MAAA,GAAS,YAAA,GAAe,QAAA,GAAW,cAAA,GAAiB;AAAA;AACtD;AAAA,eACF;AAAA,cAAE,SAAA;AAAA,cACM,aAAa,WAAW;AAAA,aAAA,EAClC,CAAA;AAAA,4BACAC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EACd,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,mCAAA;AAAA,oBACA,MAAA,GACI,YAAA,GACA,QAAA,GACE,cAAA,GACA;AAAA;AACR;AAAA,eACF;AAAA,cAAE,UAAA;AAAA,cACO,aAAa,YAAY;AAAA,aAAA,EACpC;AAAA,WAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AC7ElB,IAAM,aAAA,GAAgBH,UAAAA;AAAA,EAC3B,CAAC,EAAE,MAAA,EAAQ,KAAA,EAAO,UAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACzD,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,SAAS,KAAK,CAAA;AACtC,IAAA,MAAM,YAAA,GAAeK,OAAuB,IAAI,CAAA;AAChD,IAAA,MAAM,WAAW,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAGlD,IAAAC,UAAU,MAAM;AACd,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,SAAS,YAAY,CAAA,EAAe;AAClC,QAAA,IACE,YAAA,CAAa,WACb,CAAC,YAAA,CAAa,QAAQ,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EAC/C;AACA,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf;AAAA,MACF;AACA,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,WAAW,CAAA;AAClD,MAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,WAAW,CAAA;AAAA,IACpE,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAGT,IAAAA,UAAU,MAAM;AACd,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,SAAS,UAAU,CAAA,EAAkB;AACnC,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,OAAA,CAAQ,KAAK,CAAA;AAAA,MACvC;AACA,MAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC9C,MAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,SAAS,CAAA;AAAA,IAChE,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,IAAA,uBACEJ,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,4CAAA,EAA8C,SAAS,CAAA;AAAA,QACpE,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAAC,IAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EAER,QAAA,EAAA;AAAA,0BAAAA,IAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAS,MAAM,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,cAChC,eAAA,EAAe,IAAA;AAAA,cACf,eAAA,EAAc,SAAA;AAAA,cACd,SAAA,EAAU,yKAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAD,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAM,IAAA;AAAA,oBACN,MAAA,EAAO,IAAA;AAAA,oBACP,OAAA,EAAQ,WAAA;AAAA,oBACR,IAAA,EAAK,MAAA;AAAA,oBACL,MAAA,EAAO,cAAA;AAAA,oBACP,WAAA,EAAY,GAAA;AAAA,oBACZ,aAAA,EAAc,OAAA;AAAA,oBACd,cAAA,EAAe,OAAA;AAAA,oBACf,SAAA,EAAU,wBAAA;AAAA,oBAEV,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uEAAA,EAAwE;AAAA;AAAA,iBAClF;AAAA,gCACAA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,EAAU,QAAQ,KAAA,EAAM,CAAA;AAAA,gBAC9B,QAAA,EAAU,yBACTA,GAAAA,CAAC,UAAK,SAAA,EAAU,mFAAA,EACb,mBAAS,KAAA,EACZ,CAAA;AAAA,gCAEFA,GAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAM,IAAA;AAAA,oBACN,MAAA,EAAO,IAAA;AAAA,oBACP,OAAA,EAAQ,WAAA;AAAA,oBACR,IAAA,EAAK,MAAA;AAAA,oBACL,MAAA,EAAO,cAAA;AAAA,oBACP,WAAA,EAAY,GAAA;AAAA,oBACZ,aAAA,EAAc,OAAA;AAAA,oBACd,cAAA,EAAe,OAAA;AAAA,oBACf,SAAA,EAAW,EAAA;AAAA,sBACT,6CAAA;AAAA,sBACA,IAAA,IAAQ;AAAA,qBACV;AAAA,oBAEA,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA;AACpC;AAAA;AAAA,WACF;AAAA,UAGC,wBACCA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,SAAA;AAAA,cACL,SAAA,EAAU,qGAAA;AAAA,cAET,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACrB,gBAAA,MAAM,UAAA,GAAa,MAAM,EAAA,KAAO,KAAA;AAChC,gBAAA,uBACEC,IAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBAEC,IAAA,EAAK,QAAA;AAAA,oBACL,IAAA,EAAK,QAAA;AAAA,oBACL,eAAA,EAAe,UAAA;AAAA,oBACf,SAAS,MAAM;AACb,sBAAA,QAAA,CAAS,MAAM,EAAE,CAAA;AACjB,sBAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,oBACf,CAAA;AAAA,oBACA,SAAA,EAAW,EAAA;AAAA,sBACT,qGAAA;AAAA,sBACA,UAAA,IAAc;AAAA,qBAChB;AAAA,oBAEA,QAAA,EAAA;AAAA,sCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0CAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EACb,gBAAM,IAAA,EACT,CAAA;AAAA,0BACC,KAAA,CAAM,yBACLA,GAAAA,CAAC,UAAK,SAAA,EAAU,mFAAA,EACb,gBAAM,KAAA,EACT;AAAA,yBAAA,EAEJ,CAAA;AAAA,wBACC,KAAA,CAAM,+BACLA,GAAAA,CAAC,OAAE,SAAA,EAAU,uCAAA,EACV,gBAAM,WAAA,EACT;AAAA,uBAAA,EAEJ,CAAA;AAAA,sBACC,8BACCA,GAAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,KAAA,EAAM,IAAA;AAAA,0BACN,MAAA,EAAO,IAAA;AAAA,0BACP,OAAA,EAAQ,WAAA;AAAA,0BACR,IAAA,EAAK,MAAA;AAAA,0BACL,MAAA,EAAO,cAAA;AAAA,0BACP,WAAA,EAAY,GAAA;AAAA,0BACZ,aAAA,EAAc,OAAA;AAAA,0BACd,cAAA,EAAe,OAAA;AAAA,0BACf,SAAA,EAAU,gCAAA;AAAA,0BAEV,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA;AACpC;AAAA,mBAAA;AAAA,kBA3CG,KAAA,CAAM;AAAA,iBA6Cb;AAAA,cAEJ,CAAC;AAAA;AAAA;AACH,SAAA,EAEJ;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;ACtK5B,SAAS,eAAe,KAAA,EAA8C;AACpE,EAAA,IAAI,SAAS,GAAA,EAAK,OAAO,EAAE,GAAA,EAAK,gBAAA,EAAkB,MAAM,kBAAA,EAAmB;AAC3E,EAAA,IAAI,SAAS,GAAA,EAAK,OAAO,EAAE,GAAA,EAAK,cAAA,EAAgB,MAAM,gBAAA,EAAiB;AACvE,EAAA,OAAO,EAAE,GAAA,EAAK,YAAA,EAAc,IAAA,EAAM,cAAA,EAAe;AACnD;AAEA,SAAS,eAAe,KAAA,EAAuB;AAC7C,EAAA,IAAI,KAAA,IAAS,KAAK,OAAO,MAAA;AACzB,EAAA,IAAI,KAAA,IAAS,KAAK,OAAO,QAAA;AACzB,EAAA,OAAO,KAAA;AACT;AAEO,IAAM,UAAA,GAAaH,UAAAA;AAAA,EACxB,CACE,EAAE,KAAA,EAAO,GAAA,EAAK,OAAA,EAAS,SAAA,EAAW,OAAA,GAAU,MAAA,EAAQ,SAAA,EAAW,GAAG,KAAA,EAAM,EACxE,GAAA,KACG;AACH,IAAA,MAAM,MAAA,GAAS,eAAe,SAAS,CAAA;AACvC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,GAAG,CAAA;AAEtC,IAAA,IAAI,YAAY,SAAA,EAAW;AACzB,MAAA,uBACEI,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,cAAA,EAAa,SAAA;AAAA,UACb,SAAA,EAAW,EAAA;AAAA,YACT,iGAAA;AAAA,YACA;AAAA,WACF;AAAA,UACC,GAAG,KAAA;AAAA,UAGJ,QAAA,EAAA;AAAA,4BAAAD,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA,CAAG,iDAAA,EAAmD,MAAA,CAAO,GAAG,CAAA;AAAA,gBAC3E,KAAA,EAAO,GAAG,GAAG,CAAA,WAAA;AAAA;AAAA,aACf;AAAA,4BACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,GAAA,mBACCD,GAAAA;AAAA,kBAAC,GAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAM,GAAA;AAAA,oBACN,MAAA,EAAO,QAAA;AAAA,oBACP,GAAA,EAAI,qBAAA;AAAA,oBACJ,SAAA,EAAU,iFAAA;AAAA,oBAET,QAAA,EAAA;AAAA;AAAA,oCAGHA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8CACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,gCAEFC,KAAC,MAAA,EAAA,EAAK,SAAA,EAAW,GAAG,oCAAA,EAAsC,MAAA,CAAO,IAAI,CAAA,EAClE,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,kBAAI;AAAA,iBAAA,EACP;AAAA,eAAA,EACF,CAAA;AAAA,8BACAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yCAAyC,QAAA,EAAA,OAAA,EAAQ;AAAA,aAAA,EAChE;AAAA;AAAA;AAAA,OACF;AAAA,IAEJ;AAEA,IAAA,uBACEC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,cAAA,EAAa,MAAA;AAAA,QACb,SAAA,EAAW,EAAA;AAAA,UACT,8EAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAGJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,kBAAAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA,CAAG,uDAAA,EAAyD,MAAA,CAAO,GAAG,CAAA;AAAA,cACjF,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA;AAAI;AAAA,WAC5B,EACF,CAAA;AAAA,0BAEAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EAEb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,GAAA,mBACCD,GAAAA;AAAA,kBAAC,GAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAM,GAAA;AAAA,oBACN,MAAA,EAAO,QAAA;AAAA,oBACP,GAAA,EAAI,qBAAA;AAAA,oBACJ,SAAA,EAAU,wEAAA;AAAA,oBAET,QAAA,EAAA;AAAA;AAAA,oCAGHA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,gBAED,uBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yCAAyC,QAAA,EAAA,GAAA,EAAI;AAAA,eAAA,EAE9D,CAAA;AAAA,8BACAC,IAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,EAAA;AAAA,oBACT,oEAAA;AAAA,oBACA,aAAa,GAAA,IAAO,mDAAA;AAAA,oBACpB,SAAA,IAAa,GAAA,IAAO,SAAA,GAAY,GAAA,IAAO,6CAAA;AAAA,oBACvC,YAAY,GAAA,IAAO;AAAA,mBACrB;AAAA,kBAEC,QAAA,EAAA;AAAA,oBAAA,cAAA,CAAe,SAAS,CAAA;AAAA,oBAAE,GAAA;AAAA,oBAAE,GAAA;AAAA,oBAAI;AAAA;AAAA;AAAA;AACnC,aAAA,EACF,CAAA;AAAA,4BAGAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2DACV,QAAA,EAAA,OAAA,EACH;AAAA,WAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AC9HzB,SAAS,QAAA,CAAS;AAAA,EAChB,IAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,IAAA,GAAO,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA;AAErC,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,uBACEC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,IAAA;AAAA,QACX,OAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAO,cAAA;AAAA,QACP,WAAA,EAAY,KAAA;AAAA,QACZ,aAAA,EAAc,OAAA;AAAA,QACd,cAAA,EAAe,OAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,0BAChDA,IAAC,QAAA,EAAA,EAAO,EAAA,EAAG,OAAM,EAAA,EAAG,KAAA,EAAM,GAAE,KAAA,EAAM,CAAA;AAAA,0BAClCA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB;AAAA;AAAA;AAAA,KAC5B;AAAA,EAEJ;AAEA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,uBACEC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,IAAA;AAAA,QACX,OAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAO,cAAA;AAAA,QACP,WAAA,EAAY,KAAA;AAAA,QACZ,aAAA,EAAc,OAAA;AAAA,QACd,cAAA,EAAe,OAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4DAAA,EAA6D,CAAA;AAAA,0BACrEA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY,CAAA;AAAA,0BACpBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4BAAA,EAA6B;AAAA;AAAA;AAAA,KACvC;AAAA,EAEJ;AAEA,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,uBACEC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,IAAA;AAAA,QACX,OAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAO,cAAA;AAAA,QACP,WAAA,EAAY,KAAA;AAAA,QACZ,aAAA,EAAc,OAAA;AAAA,QACd,cAAA,EAAe,OAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4DAAA,EAA6D,CAAA;AAAA,0BACrEA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY,CAAA;AAAA,0BACpBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gBAAA,EAAiB,CAAA;AAAA,0BACzBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gBAAA,EAAiB;AAAA;AAAA;AAAA,KAC3B;AAAA,EAEJ;AAEA,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,uBACEC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,IAAA;AAAA,QACX,OAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAO,cAAA;AAAA,QACP,WAAA,EAAY,KAAA;AAAA,QACZ,aAAA,EAAc,OAAA;AAAA,QACd,cAAA,EAAe,OAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4DAAA,EAA6D,CAAA;AAAA,0BACrEA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY,CAAA;AAAA,0BACpBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU,CAAA;AAAA,0BAClBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU,CAAA;AAAA,0BAClBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW;AAAA;AAAA;AAAA,KACrB;AAAA,EAEJ;AAEA,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,uBACEC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,IAAA;AAAA,QACX,OAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,MAAA,EAAO,cAAA;AAAA,QACP,WAAA,EAAY,KAAA;AAAA,QACZ,aAAA,EAAc,OAAA;AAAA,QACd,cAAA,EAAe,OAAA;AAAA,QAEf,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4DAAA,EAA6D,CAAA;AAAA,0BACrEA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY,CAAA;AAAA,0BACpBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,0BACnBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,UAAA,EAAW,CAAA;AAAA,0BACnBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU;AAAA;AAAA;AAAA,KACpB;AAAA,EAEJ;AAGA,EAAA,uBACEC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,IAAA;AAAA,MACX,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MAEf,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,4DAAA,EAA6D,CAAA;AAAA,wBACrEA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,WAAA,EAAY;AAAA;AAAA;AAAA,GACtB;AAEJ;AAqBO,IAAM,cAAA,GAAiBH,UAAAA;AAAA,EAC5B,CACE;AAAA,IACE,IAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA,GAAO,OAAA;AAAA,IACP,OAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA,GAAU,MAAA;AAAA,IACV,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,uBACEI,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,SAAA,EAAW,EAAA;AAAA,YACT,gIAAA;AAAA,YACA;AAAA,WACF;AAAA,UACC,GAAG,KAAA;AAAA,UAGJ,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EACZ,QAAA,EAAA;AAAA,cAAA,OAAA,mBACCD,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,GAAA,EAAK,OAAA;AAAA,kBACL,GAAA,EAAK,IAAA;AAAA,kBACL,SAAA,EAAU;AAAA;AAAA,kCAGZA,GAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAY,WAAU,yBAAA,EAA0B,CAAA;AAAA,cAE3D,4BACCA,GAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,QAAA;AAAA,kBACL,OAAA,EAAS,QAAA;AAAA,kBACT,YAAA,EAAY,UAAU,IAAI,CAAA,CAAA;AAAA,kBAC1B,SAAA,EAAU,+LAAA;AAAA,kBAEV,QAAA,kBAAAA,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,SAAA;AAAA,sBACV,OAAA,EAAQ,WAAA;AAAA,sBACR,IAAA,EAAK,MAAA;AAAA,sBACL,MAAA,EAAO,cAAA;AAAA,sBACP,WAAA,EAAY,KAAA;AAAA,sBACZ,aAAA,EAAc,OAAA;AAAA,sBAEd,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uBAAA,EAAwB;AAAA;AAAA;AAClC;AAAA;AACF,aAAA,EAEJ,CAAA;AAAA,4BAGAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,cACC,wBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAA6B,QAAA,EAAA,IAAA,EAAK;AAAA,aAAA,EAEtD,CAAA;AAAA,YAGC,YAAY,IAAA,oBACXA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BACb,QAAA,kBAAAA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,gEAAA;AAAA,gBACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAI;AAAA,aAC7D,EACF;AAAA;AAAA;AAAA,OAEJ;AAAA,IAEJ;AAGA,IAAA,uBACEC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,sHAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAY,SAAA,EAAU,uBAAA,EAAwB,CAAA;AAAA,0BAExDC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,YAAA,CACE,QAAQ,QAAA,IAAY,IAAA,qBACpBC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,cAAA,IAAA,oBACCD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAA6B,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,cAEnD,YAAY,IAAA,oBACXA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCACb,QAAA,kBAAAA,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,8DAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACL,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAC,CAAA,CAAA;AAAA;AAChD;AAAA,eACF,EACF;AAAA,aAAA,EAEJ;AAAA,WAAA,EAEJ,CAAA;AAAA,UAEC,4BACCA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,QAAA;AAAA,cACT,YAAA,EAAY,UAAU,IAAI,CAAA,CAAA;AAAA,cAC1B,SAAA,EAAU,0JAAA;AAAA,cAEV,QAAA,kBAAAA,GAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,SAAA;AAAA,kBACV,OAAA,EAAQ,WAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,MAAA,EAAO,cAAA;AAAA,kBACP,WAAA,EAAY,KAAA;AAAA,kBACZ,aAAA,EAAc,OAAA;AAAA,kBAEd,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uBAAA,EAAwB;AAAA;AAAA;AAClC;AAAA;AACF;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AChRtB,IAAM,SAAA,GAAYH,UAAAA;AAAA,EACvB,CACE;AAAA,IACE,IAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA,GAAkB,KAAA;AAAA,IAClB,SAAA,GAAY,OAAA;AAAA,IACZ,MAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,SAAS,KAAK,CAAA;AAE1C,IAAA,MAAM,UAAA,GAAaC,YAAY,MAAM;AACnC,MAAA,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA,CAAE,KAAK,MAAM;AAC7C,QAAA,SAAA,CAAU,IAAI,CAAA;AACd,QAAA,MAAA,IAAS;AACT,QAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,MACzC,CAAC,CAAA;AAAA,IACH,CAAA,EAAG,CAAC,IAAA,EAAM,MAAM,CAAC,CAAA;AAEjB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAE7B,IAAA,uBACEE,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,oDAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,iBAAiB,SAAA,CAAU,gBAAA;AAAA,UAC3B,aAAa,SAAA,CAAU;AAAA,SACzB;AAAA,QACC,GAAG,KAAA;AAAA,QAGJ,QAAA,EAAA;AAAA,0BAAAA,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,6CAAA;AAAA,cACV,OAAO,EAAE,YAAA,EAAc,CAAA,UAAA,EAAa,SAAA,CAAU,MAAM,CAAA,CAAA,EAAG;AAAA,cAEvD,QAAA,EAAA;AAAA,gCAAAD,GAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,kDAAA;AAAA,oBACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,SAAA,EAAU;AAAA,oBAEnC,QAAA,EAAA,QAAA,IAAY;AAAA;AAAA,iBACf;AAAA,gCACAA,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,OAAA,EAAS,UAAA;AAAA,oBACT,SAAA,EAAU,6FAAA;AAAA,oBACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,SAAA,EAAU;AAAA,oBAEnC,QAAA,EAAA,MAAA,mBACCC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sCAAAF,GAAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAU,aAAA;AAAA,0BACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAU;AAAA,0BAC1B,OAAA,EAAQ,WAAA;AAAA,0BACR,IAAA,EAAK,MAAA;AAAA,0BACL,MAAA,EAAO,cAAA;AAAA,0BACP,WAAA,EAAY,GAAA;AAAA,0BACZ,aAAA,EAAc,OAAA;AAAA,0BACd,cAAA,EAAe,OAAA;AAAA,0BAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB;AAAA;AAAA,uBAC5B;AAAA,sBAAM;AAAA,qBAAA,EAER,CAAA,mBAEAC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sCAAAD,IAAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EAAU,aAAA;AAAA,0BACV,OAAA,EAAQ,WAAA;AAAA,0BACR,IAAA,EAAK,MAAA;AAAA,0BACL,MAAA,EAAO,cAAA;AAAA,0BACP,WAAA,EAAY,GAAA;AAAA,0BACZ,aAAA,EAAc,OAAA;AAAA,0BACd,cAAA,EAAe,OAAA;AAAA,0BAEf,QAAA,EAAA;AAAA,4CAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,4CAChDA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yDAAA,EAA0D;AAAA;AAAA;AAAA,uBACpE;AAAA,sBAAM;AAAA,qBAAA,EAER;AAAA;AAAA;AAEJ;AAAA;AAAA,WACF;AAAA,0BAGAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,yJAAA;AAAA,cACV,KAAA,EAAO;AAAA,gBACL,SAAA;AAAA,gBACA,cAAA,EAAgB,CAAA,EAAG,SAAA,CAAU,MAAM,CAAA,YAAA;AAAA,eACrC;AAAA,cAEA,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAA,EAAY,KAAA,EAAO,EAAE,OAAO,SAAA,CAAU,IAAA,EAAK,EACxD,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBC,IAAAA,CAAC,KAAA,EAAA,EAAY,SAAA,EAAU,MAAA,EACpB,QAAA,EAAA;AAAA,gBAAA,eAAA,oBACCD,GAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAU,uDAAA;AAAA,oBACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,SAAA,EAAU;AAAA,oBAEnC,QAAA,EAAA,CAAA,GAAI;AAAA;AAAA,iBACP;AAAA,gCAEFA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAU,kBAAQ,IAAA,EAAK;AAAA,eAAA,EAAA,EAT/B,CAUV,CACD,CAAA,EACH,CAAA,EACF;AAAA;AAAA;AACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AC7HjB,IAAM,kBAAA,GAAqBH,UAAAA,CAGhC,CAAC,EAAE,OAAA,EAAS,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACtE,EAAA,MAAM,UAAU,OAAA,IAAW,CAAA;AAC3B,EAAA,MAAM,QAAQ,OAAA,IAAW,KAAA;AAEzB,EAAA,uBACEI,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,qGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAGJ,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,UAAA;AAAA,YACT,QAAA,EAAU,OAAA;AAAA,YACV,YAAA,EAAW,iBAAA;AAAA,YACX,SAAA,EAAW,EAAA;AAAA,cACT,wFAAA;AAAA,cACA,UACI,kCAAA,GACA;AAAA,aACN;AAAA,YAEA,QAAA,kBAAAA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,aAAA;AAAA,gBACV,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,WAAA,EAAY,GAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe,OAAA;AAAA,gBAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gBAAA,EAAiB;AAAA;AAAA;AAC3B;AAAA,SACF;AAAA,wBAGAC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,UAAQ,GAAA;AAAA,UAAE;AAAA,SAAA,EACb,CAAA;AAAA,wBAGAD,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,QAAA,EAAU,KAAA;AAAA,YACV,YAAA,EAAW,aAAA;AAAA,YACX,SAAA,EAAW,EAAA;AAAA,cACT,wFAAA;AAAA,cACA,QACI,kCAAA,GACA;AAAA,aACN;AAAA,YAEA,QAAA,kBAAAA,GAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,aAAA;AAAA,gBACV,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,WAAA,EAAY,GAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe,OAAA;AAAA,gBAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,eAAA,EAAgB;AAAA;AAAA;AAC1B;AAAA;AACF;AAAA;AAAA,GACF;AAEJ,CAAC;AACD,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AChE1B,IAAM,SAAA,GAAYH,UAAAA;AAAA,EACvB,CAAC,EAAE,KAAA,EAAO,WAAA,EAAa,IAAA,EAAM,QAAA,EAAU,OAAA,GAAU,MAAA,EAAQ,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACtF,IAAA,IAAI,YAAY,SAAA,EAAW;AACzB,MAAA,uBACEI,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,QAAA,GAAW,KAAK,CAAA;AAAA,UAC/B,SAAA,EAAW,EAAA;AAAA,YACT,kIAAA;AAAA,YACA,iBAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,KAAA,EAAO;AAAA,YACL,iBAAiB,SAAA,CAAU,OAAA;AAAA,YAC3B,aAAa,SAAA,CAAU;AAAA,WACzB;AAAA,UACC,GAAG,KAAA;AAAA,UAEH,QAAA,EAAA;AAAA,YAAA,IAAA,oBACCD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBAAoB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,4BAE3CA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,uCAAA;AAAA,gBACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,IAAA,EAAK;AAAA,gBAE9B,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,OACF;AAAA,IAEJ;AAEA,IAAA,uBACEC,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,QAAA,GAAW,KAAK,CAAA;AAAA,QAC/B,SAAA,EAAW,EAAA;AAAA,UACT,oHAAA;AAAA,UACA,oCAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,iBAAiB,SAAA,CAAU,OAAA;AAAA,UAC3B,aAAa,SAAA,CAAU;AAAA,SACzB;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,IAAA,oBACCD,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,6EAAA;AAAA,cACV,KAAA,EAAO;AAAA,gBACL,eAAA,EAAiB,CAAA,mBAAA,EAAsB,SAAA,CAAU,MAAM,CAAA,kBAAA,CAAA;AAAA,gBACvD,OAAO,SAAA,CAAU;AAAA,eACnB;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BAEFC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,GAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,kCAAA;AAAA,gBACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,IAAA,EAAK;AAAA,gBAE9B,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,YACC,+BACCA,GAAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,8BAAA;AAAA,gBACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,SAAA,EAAU;AAAA,gBAEnC,QAAA,EAAA;AAAA;AAAA;AACH,WAAA,EAEJ,CAAA;AAAA,0BACAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,4EAAA;AAAA,cACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,CAAU,SAAA,EAAU;AAAA,cACpC,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,WAAA,EAAY,GAAA;AAAA,cACZ,aAAA,EAAc,OAAA;AAAA,cACd,cAAA,EAAe,OAAA;AAAA,cAEf,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uBAAA,EAAwB;AAAA;AAAA;AAClC;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AAYjB,IAAM,aAAA,GAAgBH,UAAAA;AAAA,EAC3B,CAAC,EAAE,OAAA,GAAU,MAAA,EAAQ,OAAA,GAAU,CAAA,EAAG,QAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACzE,IAAA,MAAM,SAAA,GAAYM,OAAuB,IAAI,CAAA;AAC7C,IAAA,MAAM,UAAA,GAAaA,OAAO,KAAK,CAAA;AAC/B,IAAA,MAAM,MAAA,GAASA,OAAO,CAAC,CAAA;AACvB,IAAA,MAAM,UAAA,GAAaA,OAAO,CAAC,CAAA;AAC3B,IAAA,MAAM,UAAA,GAAaA,OAAO,KAAK,CAAA;AAE/B,IAAA,MAAM,WAAA,GAAcJ,WAAAA,CAAY,CAAC,CAAA,KAAuB;AACtD,MAAA,MAAM,KAAK,SAAA,CAAU,OAAA;AACrB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AACrB,MAAA,MAAA,CAAO,OAAA,GAAU,CAAA,CAAE,KAAA,GAAQ,EAAA,CAAG,UAAA;AAC9B,MAAA,UAAA,CAAW,UAAU,EAAA,CAAG,UAAA;AACxB,MAAA,EAAA,CAAG,MAAM,MAAA,GAAS,UAAA;AAClB,MAAA,EAAA,CAAG,MAAM,UAAA,GAAa,MAAA;AAAA,IACxB,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,WAAA,GAAcA,WAAAA,CAAY,CAAC,CAAA,KAAuB;AACtD,MAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACzB,MAAA,MAAM,KAAK,SAAA,CAAU,OAAA;AACrB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,GAAQ,EAAA,CAAG,UAAA;AACvB,MAAA,MAAM,IAAA,GAAA,CAAQ,CAAA,GAAI,MAAA,CAAO,OAAA,IAAW,GAAA;AACpC,MAAA,IAAI,KAAK,GAAA,CAAI,IAAI,CAAA,GAAI,CAAA,aAAc,OAAA,GAAU,IAAA;AAC7C,MAAA,EAAA,CAAG,UAAA,GAAa,WAAW,OAAA,GAAU,IAAA;AAAA,IACvC,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,SAAA,GAAYA,YAAY,MAAM;AAClC,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AACrB,MAAA,MAAM,KAAK,SAAA,CAAU,OAAA;AACrB,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,EAAA,CAAG,MAAM,MAAA,GAAS,MAAA;AAClB,QAAA,EAAA,CAAG,MAAM,UAAA,GAAa,EAAA;AAAA,MACxB;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,cAAA,GAAiBA,WAAAA,CAAY,CAAC,CAAA,KAAuB;AAEzD,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AAAA,MACvB;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,IAAI,YAAY,SAAA,EAAW;AACzB,MAAA,uBACEE,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,YAAC,UAA4D,OAAA,GAAU,IAAA;AACvE,YAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA;AAAA,iBAAA,IAC9B,GAAA,EAAM,GAAA,CAAsD,OAAA,GAAU,IAAA;AAAA,UACjF,CAAA;AAAA,UACA,SAAA,EAAW,EAAA;AAAA,YACT,sBAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,GAAA,EAAK,QAAA;AAAA,YACL,SAAA,EAAW,MAAA;AAAA,YACX,MAAA,EAAQ,MAAA;AAAA,YACR,cAAA,EAAgB,MAAA;AAAA,YAChB,eAAA,EAAiB;AAAA,WACnB;AAAA,UACA,WAAA;AAAA,UACA,WAAA;AAAA,UACA,SAAA;AAAA,UACA,YAAA,EAAc,SAAA;AAAA,UACd,cAAA;AAAA,UACC,GAAG,KAAA;AAAA,UAEH,QAAA,EAAA;AAAA,YAAA,QAAA;AAAA,4BACDD,GAAAA,CAAC,OAAA,EAAA,EAAM,yBAAyB,EAAE,MAAA,EAAQ,+DAA8D,EAAG;AAAA;AAAA;AAAA,OAC7G;AAAA,IAEJ;AAEA,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,iCAAA;AAAA,UACA,YAAY,CAAA,IAAK,aAAA;AAAA,UACjB,YAAY,CAAA,IAAK,4BAAA;AAAA,UACjB,YAAY,CAAA,IAAK,2CAAA;AAAA,UACjB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,aAAA,CAAc,WAAA,GAAc,eAAA","file":"index.js","sourcesContent":["export {\n Root,\n Content,\n Cursor,\n Skeleton,\n ErrorFallback,\n RateLimit,\n Toolbar,\n Stop,\n useStreamingTextContext,\n type StreamingTextRootProps,\n type StreamingTextContentProps,\n type StreamingTextCursorProps,\n type StreamingTextSkeletonProps,\n type StreamingTextErrorProps,\n type StreamingTextRateLimitProps,\n type StreamingTextToolbarProps,\n type StreamingTextStopProps,\n} from \"./streaming-text\";\n\nexport {\n useStreamingText,\n type UseStreamingTextOptions,\n type UseStreamingTextReturn,\n} from \"./use-streaming-text\";\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","/**\n * arclo theme CSS custom properties.\n *\n * Light mode (default) — no setup needed.\n * Dark mode — set variables on a parent element or use prefers-color-scheme:\n *\n * ```css\n * :root {\n * --arclo-accent: #6C5CE7;\n * --arclo-accent-hover: #5A4BD1;\n * --arclo-surface: #ffffff;\n * --arclo-surface-secondary: #f9fafb;\n * --arclo-border: #e5e7eb;\n * --arclo-text: #1a1a1a;\n * --arclo-text-secondary: #6b7280;\n * --arclo-text-muted: #9ca3af;\n * --arclo-error: #ef4444;\n * --arclo-error-surface: #fef2f2;\n * --arclo-warning: #f59e0b;\n * --arclo-warning-surface: #fffbeb;\n * }\n *\n * @media (prefers-color-scheme: dark) {\n * :root {\n * --arclo-accent: #a78bfa;\n * --arclo-accent-hover: #8b6ff7;\n * --arclo-surface: #1a1a2e;\n * --arclo-surface-secondary: #16213e;\n * --arclo-border: #2d2d44;\n * --arclo-text: #e2e8f0;\n * --arclo-text-secondary: #94a3b8;\n * --arclo-text-muted: #64748b;\n * --arclo-error: #f87171;\n * --arclo-error-surface: #451a1a;\n * --arclo-warning: #fbbf24;\n * --arclo-warning-surface: #452a1a;\n * }\n * }\n *\n * // Or class-based:\n * .dark {\n * --arclo-surface: #1a1a2e;\n * // ...\n * }\n * ```\n */\nexport const themeVars = {\n accent: \"var(--arclo-accent, #6C5CE7)\",\n accentFg: \"var(--arclo-accent-fg, #ffffff)\",\n accentHover: \"var(--arclo-accent-hover, #5A4BD1)\",\n accentBright: \"var(--arclo-accent-bright, rgb(167,139,250))\",\n surface: \"var(--arclo-surface, #ffffff)\",\n surfaceSecondary: \"var(--arclo-surface-secondary, #f9fafb)\",\n border: \"var(--arclo-border, #e5e7eb)\",\n text: \"var(--arclo-text, #1a1a1a)\",\n textSecondary: \"var(--arclo-text-secondary, #6b7280)\",\n textMuted: \"var(--arclo-text-muted, #9ca3af)\",\n error: \"var(--arclo-error, #ef4444)\",\n errorSurface: \"var(--arclo-error-surface, #fef2f2)\",\n warning: \"var(--arclo-warning, #f59e0b)\",\n warningSurface: \"var(--arclo-warning-surface, #fffbeb)\",\n radius: \"var(--arclo-radius, 0.75rem)\",\n} as const;\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ChunkSize, StreamingState } from \"../lib/types\";\n\nexport interface UseStreamingTextOptions {\n /** ReadableStream of text chunks from an AI response */\n stream?: ReadableStream<string> | null;\n /** Plain text to stream (alternative to stream) */\n text?: string;\n /** Delay in ms between rendering chunks. Default: 30 */\n speed?: number;\n /** How to chunk the text for rendering. Default: \"char\" */\n chunkSize?: ChunkSize;\n /** Called when streaming completes */\n onDone?: (text: string) => void;\n /** Called on error */\n onError?: (error: Error) => void;\n /** Called when interrupted by user */\n onInterrupt?: (partialText: string) => void;\n}\n\nexport interface UseStreamingTextReturn {\n /** The text rendered so far */\n displayedText: string;\n /** The full text received (may be ahead of displayedText during animation) */\n fullText: string;\n /** Current state of the streaming component */\n state: StreamingState;\n /** Stop streaming and rendering */\n interrupt: () => void;\n /** Reset to pending state */\n reset: () => void;\n /** Jump to showing all received text immediately */\n skipAnimation: () => void;\n}\n\nfunction chunkText(text: string, mode: ChunkSize): string[] {\n switch (mode) {\n case \"char\":\n return text.split(\"\");\n case \"word\":\n return text.match(/\\S+\\s*/g) ?? [text];\n case \"line\":\n return text.match(/[^\\n]*\\n?/g)?.filter(Boolean) ?? [text];\n }\n}\n\nexport function useStreamingText({\n stream,\n text,\n speed = 30,\n chunkSize = \"char\",\n onDone,\n onError,\n onInterrupt,\n}: UseStreamingTextOptions): UseStreamingTextReturn {\n const [displayedText, setDisplayedText] = useState(\"\");\n const [fullText, setFullText] = useState(\"\");\n const [state, setState] = useState<StreamingState>(\"pending\");\n\n const bufferRef = useRef<string[]>([]);\n const drainingRef = useRef(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const interruptedRef = useRef(false);\n const readerRef = useRef<ReadableStreamDefaultReader<string> | null>(null);\n const speedRef = useRef(speed);\n const fullTextRef = useRef(\"\");\n const onDoneRef = useRef(onDone);\n const onErrorRef = useRef(onError);\n const onInterruptRef = useRef(onInterrupt);\n\n // Keep refs in sync\n speedRef.current = speed;\n onDoneRef.current = onDone;\n onErrorRef.current = onError;\n onInterruptRef.current = onInterrupt;\n\n // Single drain loop — only one runs at a time\n const startDraining = useCallback(() => {\n if (drainingRef.current) return;\n drainingRef.current = true;\n\n function tick() {\n if (bufferRef.current.length === 0) {\n drainingRef.current = false;\n return;\n }\n\n const chunk = bufferRef.current.shift()!;\n setDisplayedText((prev) => prev + chunk);\n\n timerRef.current = setTimeout(tick, speedRef.current);\n }\n\n tick();\n }, []);\n\n // Read from stream\n useEffect(() => {\n if (!stream) return;\n\n // Reset state for new stream\n interruptedRef.current = false;\n drainingRef.current = false;\n bufferRef.current = [];\n fullTextRef.current = \"\";\n setDisplayedText(\"\");\n setFullText(\"\");\n setState(\"streaming\");\n\n let cancelled = false;\n let reader: ReadableStreamDefaultReader<string>;\n\n try {\n reader = stream.getReader();\n } catch {\n // Stream already locked (e.g. React strict mode double-mount)\n return;\n }\n\n readerRef.current = reader;\n\n async function read() {\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (cancelled || interruptedRef.current) break;\n if (done) {\n // Wait for buffer to drain, then mark done\n const waitForDrain = () => {\n if (cancelled) return;\n if (bufferRef.current.length === 0 && !drainingRef.current) {\n setState(\"done\");\n onDoneRef.current?.(fullTextRef.current);\n } else {\n setTimeout(waitForDrain, 50);\n }\n };\n waitForDrain();\n return;\n }\n const chunks = chunkText(value, chunkSize);\n bufferRef.current.push(...chunks);\n fullTextRef.current += value;\n setFullText(fullTextRef.current);\n startDraining();\n }\n } catch (err) {\n if (!cancelled && !interruptedRef.current) {\n setState(\"error\");\n onErrorRef.current?.(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }\n }\n\n read();\n\n return () => {\n cancelled = true;\n if (timerRef.current) clearTimeout(timerRef.current);\n drainingRef.current = false;\n reader.cancel().catch(() => {});\n };\n }, [stream, chunkSize, startDraining]);\n\n // Handle plain text prop\n useEffect(() => {\n if (text == null || stream) return;\n\n interruptedRef.current = false;\n drainingRef.current = false;\n bufferRef.current = [];\n fullTextRef.current = text;\n setDisplayedText(\"\");\n setFullText(text);\n setState(\"streaming\");\n\n const chunks = chunkText(text, chunkSize);\n bufferRef.current = chunks;\n startDraining();\n\n const waitForDrain = () => {\n if (bufferRef.current.length === 0 && !drainingRef.current) {\n setState(\"done\");\n onDoneRef.current?.(text);\n } else {\n setTimeout(waitForDrain, 50);\n }\n };\n setTimeout(waitForDrain, 100);\n\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n drainingRef.current = false;\n };\n }, [text, stream, chunkSize, startDraining]);\n\n const interrupt = useCallback(() => {\n interruptedRef.current = true;\n if (timerRef.current) clearTimeout(timerRef.current);\n drainingRef.current = false;\n readerRef.current?.cancel().catch(() => {});\n bufferRef.current = [];\n setState(\"interrupted\");\n setDisplayedText((t) => {\n onInterruptRef.current?.(t);\n return t;\n });\n }, []);\n\n const reset = useCallback(() => {\n interruptedRef.current = false;\n if (timerRef.current) clearTimeout(timerRef.current);\n drainingRef.current = false;\n bufferRef.current = [];\n fullTextRef.current = \"\";\n setDisplayedText(\"\");\n setFullText(\"\");\n setState(\"pending\");\n }, []);\n\n const skipAnimation = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n drainingRef.current = false;\n bufferRef.current = [];\n setDisplayedText(fullTextRef.current);\n }, []);\n\n return { displayedText, fullText, state, interrupt, reset, skipAnimation };\n}\n","import {\n createContext,\n forwardRef,\n useContext,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\nimport type { ChunkSize, StreamingState } from \"../lib/types\";\nimport {\n useStreamingText,\n type UseStreamingTextOptions,\n} from \"./use-streaming-text\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface StreamingTextContextValue {\n displayedText: string;\n fullText: string;\n state: StreamingState;\n interrupt: () => void;\n reset: () => void;\n skipAnimation: () => void;\n}\n\nconst StreamingTextContext = createContext<StreamingTextContextValue | null>(\n null,\n);\n\nexport function useStreamingTextContext() {\n const ctx = useContext(StreamingTextContext);\n if (!ctx) {\n throw new Error(\n \"useStreamingTextContext must be used within <StreamingText.Root>\",\n );\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface StreamingTextRootProps\n extends UseStreamingTextOptions,\n Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"onError\"> {\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, StreamingTextRootProps>(\n (\n {\n stream,\n text,\n speed,\n chunkSize,\n onDone,\n onError,\n onInterrupt,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const ctx = useStreamingText({\n stream,\n text,\n speed,\n chunkSize,\n onDone,\n onError,\n onInterrupt,\n });\n\n return (\n <StreamingTextContext.Provider value={ctx}>\n <div\n ref={ref}\n data-state={ctx.state}\n className={cn(\"arclo-streaming-text\", className)}\n {...props}\n >\n {children ?? (\n <>\n <Content />\n <Cursor />\n </>\n )}\n </div>\n </StreamingTextContext.Provider>\n );\n },\n);\nRoot.displayName = \"StreamingText.Root\";\n\n/* ─── Content ─────────────────────────────────────────────────────── */\n\nexport interface StreamingTextContentProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Custom render function for the text */\n render?: (text: string) => ReactNode;\n}\n\nexport const Content = forwardRef<HTMLDivElement, StreamingTextContentProps>(\n ({ render, className, ...props }, ref) => {\n const { displayedText, state } = useStreamingTextContext();\n\n return (\n <div\n ref={ref}\n data-state={state}\n className={cn(\"arclo-streaming-content whitespace-pre-wrap\", className)}\n {...props}\n >\n {render ? render(displayedText) : displayedText}\n </div>\n );\n },\n);\nContent.displayName = \"StreamingText.Content\";\n\n/* ─── Cursor ──────────────────────────────────────────────────────── */\n\nexport interface StreamingTextCursorProps\n extends HTMLAttributes<HTMLSpanElement> {\n /** Character to use as cursor. Default: \"▋\" */\n char?: string;\n}\n\nexport const Cursor = forwardRef<HTMLSpanElement, StreamingTextCursorProps>(\n ({ char = \"▋\", className, ...props }, ref) => {\n const { state } = useStreamingTextContext();\n const visible = state === \"streaming\" || state === \"pending\";\n\n if (!visible) return null;\n\n return (\n <span\n ref={ref}\n aria-hidden\n style={{ color: themeVars.accent }}\n className={cn(\n \"arclo-streaming-cursor inline-block animate-pulse\",\n className,\n )}\n {...props}\n >\n {char}\n </span>\n );\n },\n);\nCursor.displayName = \"StreamingText.Cursor\";\n\n/* ─── Skeleton ────────────────────────────────────────────────────── */\n\nexport interface StreamingTextSkeletonProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Number of skeleton lines. Default: 3 */\n lines?: number;\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, StreamingTextSkeletonProps>(\n ({ lines = 3, className, ...props }, ref) => {\n const { state } = useStreamingTextContext();\n\n if (state !== \"pending\") return null;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"arclo-streaming-skeleton space-y-2\", className)}\n {...props}\n >\n {Array.from({ length: lines }, (_, i) => (\n <div\n key={i}\n className={cn(\n \"h-4 rounded bg-gray-200 animate-pulse\",\n i === lines - 1 && \"w-2/3\",\n )}\n />\n ))}\n </div>\n );\n },\n);\nSkeleton.displayName = \"StreamingText.Skeleton\";\n\n/* ─── Error ───────────────────────────────────────────────────────── */\n\nexport interface StreamingTextErrorProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Custom error message */\n message?: string;\n /** Show retry button */\n onRetry?: () => void;\n}\n\nexport const ErrorFallback = forwardRef<HTMLDivElement, StreamingTextErrorProps>(\n ({ message = \"Something went wrong.\", onRetry, className, ...props }, ref) => {\n const { state } = useStreamingTextContext();\n\n if (state !== \"error\") return null;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n style={{\n borderColor: themeVars.error,\n backgroundColor: themeVars.errorSurface,\n color: themeVars.error,\n }}\n className={cn(\n \"arclo-streaming-error rounded-lg border p-4 text-sm\",\n className,\n )}\n {...props}\n >\n <p>{message}</p>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"mt-2 text-red-600 underline hover:text-red-800 cursor-pointer\"\n >\n Try again\n </button>\n )}\n </div>\n );\n },\n);\nErrorFallback.displayName = \"StreamingText.ErrorFallback\";\n\n/* ─── RateLimit ───────────────────────────────────────────────────── */\n\nexport interface StreamingTextRateLimitProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Retry delay in seconds */\n retryAfter?: number;\n message?: string;\n}\n\nexport const RateLimit = forwardRef<HTMLDivElement, StreamingTextRateLimitProps>(\n (\n {\n retryAfter,\n message = \"Rate limit reached. Please wait.\",\n className,\n ...props\n },\n ref,\n ) => {\n const { state } = useStreamingTextContext();\n\n if (state !== \"ratelimit\") return null;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n className={cn(\n \"arclo-streaming-ratelimit rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-800\",\n className,\n )}\n {...props}\n >\n <p>{message}</p>\n {retryAfter != null && (\n <p className=\"mt-1 text-amber-600\">\n Retry in {retryAfter}s\n </p>\n )}\n </div>\n );\n },\n);\nRateLimit.displayName = \"StreamingText.RateLimit\";\n\n/* ─── Toolbar ─────────────────────────────────────────────────────── */\n\nexport interface StreamingTextToolbarProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Only show toolbar in these states. Default: [\"done\", \"interrupted\"] */\n showIn?: StreamingState[];\n}\n\nexport const Toolbar = forwardRef<HTMLDivElement, StreamingTextToolbarProps>(\n ({ showIn = [\"done\", \"interrupted\"], children, className, ...props }, ref) => {\n const { state } = useStreamingTextContext();\n\n if (!showIn.includes(state)) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-streaming-toolbar mt-2 flex items-center gap-2 animate-in fade-in duration-150\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nToolbar.displayName = \"StreamingText.Toolbar\";\n\n/* ─── Stop Button ─────────────────────────────────────────────────── */\n\nexport interface StreamingTextStopProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const Stop = forwardRef<HTMLButtonElement, StreamingTextStopProps>(\n ({ children, className, ...props }, ref) => {\n const { state, interrupt } = useStreamingTextContext();\n\n if (state !== \"streaming\") return null;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={interrupt}\n className={cn(\n \"arclo-streaming-stop rounded-md border border-gray-300 px-3 py-1.5 text-sm hover:bg-gray-50 cursor-pointer\",\n className,\n )}\n {...props}\n >\n {children ?? \"Stop generating\"}\n </button>\n );\n },\n);\nStop.displayName = \"StreamingText.Stop\";\n","export {\n Root,\n Chips,\n Chip,\n Input,\n Footer,\n SubmitButton,\n Suggestions,\n usePromptBoxContext,\n type PromptBoxRootProps,\n type PromptBoxChipsProps,\n type PromptBoxChipProps,\n type PromptBoxInputProps,\n type PromptBoxFooterProps,\n type PromptBoxSubmitProps,\n type PromptBoxSuggestionsProps,\n} from \"./prompt-box\";\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface PromptBoxContextValue {\n value: string;\n setValue: (v: string) => void;\n submit: () => void;\n isSubmitting: boolean;\n disabled: boolean;\n}\n\nconst PromptBoxContext = createContext<PromptBoxContextValue | null>(null);\n\nexport function usePromptBoxContext() {\n const ctx = useContext(PromptBoxContext);\n if (!ctx) {\n throw new Error(\n \"usePromptBoxContext must be used within <PromptBox.Root>\",\n );\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface PromptBoxRootProps\n extends Omit<HTMLAttributes<HTMLFormElement>, \"onSubmit\"> {\n /** Controlled value */\n value?: string;\n /** Default uncontrolled value */\n defaultValue?: string;\n /** Called when the prompt is submitted */\n onSubmit?: (value: string) => void;\n /** Called when value changes */\n onValueChange?: (value: string) => void;\n /** Whether a submission is in progress */\n isSubmitting?: boolean;\n /** Disable the entire prompt box */\n disabled?: boolean;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLFormElement, PromptBoxRootProps>(\n (\n {\n value: controlledValue,\n defaultValue = \"\",\n onSubmit,\n onValueChange,\n isSubmitting = false,\n disabled = false,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const value = controlledValue ?? internalValue;\n\n const setValue = useCallback(\n (v: string) => {\n if (controlledValue === undefined) setInternalValue(v);\n onValueChange?.(v);\n },\n [controlledValue, onValueChange],\n );\n\n const submit = useCallback(() => {\n if (!value.trim() || isSubmitting || disabled) return;\n onSubmit?.(value);\n }, [value, isSubmitting, disabled, onSubmit]);\n\n const handleFormSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n submit();\n },\n [submit],\n );\n\n return (\n <PromptBoxContext.Provider\n value={{ value, setValue, submit, isSubmitting, disabled }}\n >\n <form\n ref={ref}\n onSubmit={handleFormSubmit}\n style={{\n backgroundColor: themeVars.surface,\n borderColor: themeVars.border,\n color: themeVars.text,\n }}\n className={cn(\n \"arclo-prompt-box rounded-2xl border shadow-sm transition-all focus-within:shadow-md\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <Input />\n <Footer>\n <SubmitButton />\n </Footer>\n </>\n )}\n </form>\n </PromptBoxContext.Provider>\n );\n },\n);\nRoot.displayName = \"PromptBox.Root\";\n\n/* ─── Context Chips (model, files, tools) ─────────────────────────── */\n\nexport interface PromptBoxChipsProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Chips = forwardRef<HTMLDivElement, PromptBoxChipsProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-prompt-chips flex flex-wrap gap-2 px-4 pt-4 pb-1\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nChips.displayName = \"PromptBox.Chips\";\n\n/* ─── Single Chip ─────────────────────────────────────────────────── */\n\nexport interface PromptBoxChipProps extends HTMLAttributes<HTMLSpanElement> {\n onRemove?: () => void;\n}\n\nexport const Chip = forwardRef<HTMLSpanElement, PromptBoxChipProps>(\n ({ children, onRemove, className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\n \"arclo-prompt-chip inline-flex items-center gap-1.5 rounded-lg px-2.5 py-1 text-xs font-medium\",\n className,\n )}\n style={{\n backgroundColor: themeVars.surfaceSecondary,\n color: themeVars.textSecondary,\n }}\n {...props}\n >\n {children}\n {onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"text-gray-400 hover:text-gray-600 transition-colors cursor-pointer\"\n aria-label=\"Remove\"\n >\n ×\n </button>\n )}\n </span>\n );\n },\n);\nChip.displayName = \"PromptBox.Chip\";\n\n/* ─── Input (auto-growing textarea) ───────────────────────────────── */\n\nexport interface PromptBoxInputProps\n extends Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"value\" | \"onChange\"\n > {\n /** Min rows. Default: 1 */\n minRows?: number;\n /** Max rows before scroll. Default: 8 */\n maxRows?: number;\n}\n\nexport const Input = forwardRef<HTMLTextAreaElement, PromptBoxInputProps>(\n ({ minRows = 1, maxRows = 8, className, onKeyDown, ...props }, ref) => {\n const { value, setValue, submit, isSubmitting, disabled } =\n usePromptBoxContext();\n const internalRef = useRef<HTMLTextAreaElement>(null);\n const textareaRef = (ref as React.RefObject<HTMLTextAreaElement>) ?? internalRef;\n\n // Auto-resize\n useEffect(() => {\n const el = textareaRef.current;\n if (!el) return;\n el.style.height = \"auto\";\n const lineHeight = parseInt(getComputedStyle(el).lineHeight) || 20;\n const minH = lineHeight * minRows;\n const maxH = lineHeight * maxRows;\n el.style.height = `${Math.min(Math.max(el.scrollHeight, minH), maxH)}px`;\n }, [value, minRows, maxRows, textareaRef]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n submit();\n }\n onKeyDown?.(e);\n },\n [submit, onKeyDown],\n );\n\n return (\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={disabled || isSubmitting}\n rows={minRows}\n placeholder=\"Ask anything...\"\n style={{\n scrollbarWidth: \"none\",\n color: themeVars.text,\n }}\n className={cn(\n \"arclo-prompt-input w-full resize-none bg-transparent px-4 py-3 text-[15px] leading-relaxed outline-none\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nInput.displayName = \"PromptBox.Input\";\n\n/* ─── Footer ──────────────────────────────────────────────────────── */\n\nexport interface PromptBoxFooterProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Footer = forwardRef<HTMLDivElement, PromptBoxFooterProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-prompt-footer flex items-center justify-between px-4 pb-3 pt-1\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nFooter.displayName = \"PromptBox.Footer\";\n\n/* ─── Submit Button ───────────────────────────────────────────────── */\n\nexport interface PromptBoxSubmitProps\n extends HTMLAttributes<HTMLButtonElement> {\n /** Visual variant. \"default\" = text, \"icon\" = arrow icon only, \"icon-text\" = icon + text. Default: \"default\" */\n variant?: \"default\" | \"icon\" | \"icon-text\";\n /** Custom loading label. Default: \"Sending...\" */\n loadingLabel?: string;\n}\n\nconst ArrowUpIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 19V5M5 12l7-7 7 7\" />\n </svg>\n);\n\nexport const SubmitButton = forwardRef<HTMLButtonElement, PromptBoxSubmitProps>(\n ({ children, variant = \"default\", loadingLabel, className, ...props }, ref) => {\n const { value, isSubmitting, disabled } = usePromptBoxContext();\n const isEmpty = !value.trim();\n\n const isIcon = variant === \"icon\";\n\n const content = children ?? (\n isIcon ? (\n isSubmitting ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"animate-spin\">\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n ) : (\n <ArrowUpIcon />\n )\n ) : variant === \"icon-text\" ? (\n <span className=\"inline-flex items-center gap-1.5\">\n {isSubmitting ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"animate-spin\">\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n ) : (\n <ArrowUpIcon />\n )}\n {isSubmitting ? (loadingLabel ?? \"Sending...\") : \"Send\"}\n </span>\n ) : (\n isSubmitting ? (loadingLabel ?? \"Sending...\") : \"Send\"\n )\n );\n\n return (\n <button\n ref={ref}\n type=\"submit\"\n disabled={isEmpty || isSubmitting || disabled}\n style={{ backgroundColor: themeVars.accent, color: themeVars.accentFg }}\n className={cn(\n \"arclo-prompt-submit ml-auto transition-all hover:brightness-90 disabled:opacity-25 cursor-pointer disabled:cursor-default\",\n isIcon\n ? \"rounded-xl p-2\"\n : \"rounded-xl px-4 py-2 text-sm font-medium\",\n className,\n )}\n {...props}\n >\n {content}\n </button>\n );\n },\n);\nSubmitButton.displayName = \"PromptBox.SubmitButton\";\n\n/* ─── Suggestions ─────────────────────────────────────────────────── */\n\nexport interface PromptBoxSuggestionsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n suggestions: string[];\n onSelect?: (suggestion: string) => void;\n}\n\nexport const Suggestions = forwardRef<\n HTMLDivElement,\n PromptBoxSuggestionsProps\n>(({ suggestions, onSelect, className, ...props }, ref) => {\n const { setValue } = usePromptBoxContext();\n\n if (suggestions.length === 0) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-prompt-suggestions flex flex-wrap gap-2 px-4 pb-2 pt-1\",\n className,\n )}\n {...props}\n >\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => {\n setValue(s);\n onSelect?.(s);\n }}\n className=\"rounded-full border border-gray-200 px-3.5 py-1.5 text-xs text-gray-500 transition-all hover:border-gray-300 hover:bg-gray-50 hover:text-gray-700 cursor-pointer\"\n >\n {s}\n </button>\n ))}\n </div>\n );\n});\nSuggestions.displayName = \"PromptBox.Suggestions\";\n","export {\n Root,\n ThumbsUp,\n ThumbsDown,\n Copy,\n Regenerate,\n type FeedbackBarRootProps,\n type FeedbackBarThumbsUpProps,\n type FeedbackBarThumbsDownProps,\n type FeedbackBarCopyProps,\n type FeedbackBarRegenerateProps,\n} from \"./feedback-bar\";\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ntype FeedbackValue = \"up\" | \"down\" | null;\n\ninterface FeedbackBarContextValue {\n feedback: FeedbackValue;\n setFeedback: (v: FeedbackValue) => void;\n copied: boolean;\n setCopied: (v: boolean) => void;\n}\n\nconst FeedbackBarContext = createContext<FeedbackBarContextValue | null>(null);\n\nfunction useFeedbackBarContext() {\n const ctx = useContext(FeedbackBarContext);\n if (!ctx) {\n throw new Error(\"FeedbackBar parts must be used within <FeedbackBar.Root>\");\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface FeedbackBarRootProps extends HTMLAttributes<HTMLDivElement> {\n /** Called when thumbs feedback changes */\n onFeedback?: (value: FeedbackValue) => void;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, FeedbackBarRootProps>(\n ({ onFeedback, children, className, ...props }, ref) => {\n const [feedback, setFeedbackState] = useState<FeedbackValue>(null);\n const [copied, setCopied] = useState(false);\n\n const setFeedback = useCallback(\n (v: FeedbackValue) => {\n setFeedbackState(v);\n onFeedback?.(v);\n },\n [onFeedback],\n );\n\n return (\n <FeedbackBarContext.Provider\n value={{ feedback, setFeedback, copied, setCopied }}\n >\n <div\n ref={ref}\n role=\"toolbar\"\n aria-label=\"Response actions\"\n className={cn(\n \"arclo-feedback-bar flex items-center gap-1\",\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <ThumbsUp />\n <ThumbsDown />\n <Copy />\n </>\n )}\n </div>\n </FeedbackBarContext.Provider>\n );\n },\n);\nRoot.displayName = \"FeedbackBar.Root\";\n\n/* ─── Shared button style ─────────────────────────────────────────── */\n\nconst btnBase =\n \"arclo-feedback-btn inline-flex items-center justify-center rounded-md p-1.5 transition-colors cursor-pointer\";\n\nconst btnStyle = {\n color: themeVars.textMuted,\n} as const;\n\n/* ─── ThumbsUp ────────────────────────────────────────────────────── */\n\nexport interface FeedbackBarThumbsUpProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const ThumbsUp = forwardRef<HTMLButtonElement, FeedbackBarThumbsUpProps>(\n ({ className, ...props }, ref) => {\n const { feedback, setFeedback } = useFeedbackBarContext();\n const active = feedback === \"up\";\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Good response\"\n aria-pressed={active}\n onClick={() => setFeedback(active ? null : \"up\")}\n style={active ? { color: themeVars.accent } : btnStyle}\n className={cn(btnBase, className)}\n {...props}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={active ? \"2.5\" : \"2\"}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2h0a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n </button>\n );\n },\n);\nThumbsUp.displayName = \"FeedbackBar.ThumbsUp\";\n\n/* ─── ThumbsDown ──────────────────────────────────────────────────── */\n\nexport interface FeedbackBarThumbsDownProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const ThumbsDown = forwardRef<\n HTMLButtonElement,\n FeedbackBarThumbsDownProps\n>(({ className, ...props }, ref) => {\n const { feedback, setFeedback } = useFeedbackBarContext();\n const active = feedback === \"down\";\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Bad response\"\n aria-pressed={active}\n onClick={() => setFeedback(active ? null : \"down\")}\n style={active ? { color: themeVars.error } : btnStyle}\n className={cn(btnBase, className)}\n {...props}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={active ? \"2.5\" : \"2\"}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22h0a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n </button>\n );\n});\nThumbsDown.displayName = \"FeedbackBar.ThumbsDown\";\n\n/* ─── Copy ────────────────────────────────────────────────────────── */\n\nexport interface FeedbackBarCopyProps\n extends HTMLAttributes<HTMLButtonElement> {\n /** Text to copy. If not provided, copies the closest [data-arclo-copyable] ancestor's textContent */\n text?: string;\n}\n\nexport const Copy = forwardRef<HTMLButtonElement, FeedbackBarCopyProps>(\n ({ text, className, ...props }, ref) => {\n const { copied, setCopied } = useFeedbackBarContext();\n\n const handleCopy = useCallback(async () => {\n const content =\n text ??\n (ref as React.RefObject<HTMLButtonElement>)?.current\n ?.closest(\"[data-arclo-copyable]\")\n ?.textContent ??\n \"\";\n await navigator.clipboard.writeText(content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [text, ref, setCopied]);\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={copied ? \"Copied\" : \"Copy\"}\n onClick={handleCopy}\n style={copied ? { color: \"#10b981\" } : btnStyle}\n className={cn(btnBase, className)}\n {...props}\n >\n {copied ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ) : (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n )}\n </button>\n );\n },\n);\nCopy.displayName = \"FeedbackBar.Copy\";\n\n/* ─── Regenerate ──────────────────────────────────────────────────── */\n\nexport interface FeedbackBarRegenerateProps\n extends HTMLAttributes<HTMLButtonElement> {\n onRegenerate?: () => void;\n}\n\nexport const Regenerate = forwardRef<\n HTMLButtonElement,\n FeedbackBarRegenerateProps\n>(({ onRegenerate, className, ...props }, ref) => {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Regenerate response\"\n onClick={onRegenerate}\n style={btnStyle}\n className={cn(btnBase, className)}\n {...props}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n <path d=\"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\" />\n <path d=\"M16 16h5v5\" />\n </svg>\n </button>\n );\n});\nRegenerate.displayName = \"FeedbackBar.Regenerate\";\n","export {\n Root,\n Trigger,\n Content,\n type ThinkingState,\n type ThinkingBlockRootProps,\n type ThinkingBlockTriggerProps,\n type ThinkingBlockContentProps,\n} from \"./thinking-block\";\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\nexport type ThinkingState = \"thinking\" | \"done\" | \"error\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface ThinkingBlockContextValue {\n state: ThinkingState;\n isOpen: boolean;\n toggle: () => void;\n duration: number | null;\n}\n\nconst ThinkingBlockContext = createContext<ThinkingBlockContextValue | null>(\n null,\n);\n\nfunction useThinkingBlockContext() {\n const ctx = useContext(ThinkingBlockContext);\n if (!ctx) {\n throw new Error(\n \"ThinkingBlock parts must be used within <ThinkingBlock.Root>\",\n );\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface ThinkingBlockRootProps extends HTMLAttributes<HTMLDivElement> {\n /** Current thinking state */\n state?: ThinkingState;\n /** Whether the block starts expanded. Default: true */\n defaultOpen?: boolean;\n /** Auto-collapse when state changes to \"done\". Default: true */\n collapseOnDone?: boolean;\n /** Thinking duration in seconds (shown in header) */\n duration?: number | null;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, ThinkingBlockRootProps>(\n (\n {\n state = \"thinking\",\n defaultOpen = true,\n collapseOnDone = true,\n duration = null,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n\n useEffect(() => {\n if (state === \"done\" && collapseOnDone) {\n const timer = setTimeout(() => setIsOpen(false), 500);\n return () => clearTimeout(timer);\n }\n }, [state, collapseOnDone]);\n\n const toggle = useCallback(() => setIsOpen((o) => !o), []);\n\n return (\n <ThinkingBlockContext.Provider value={{ state, isOpen, toggle, duration }}>\n <div\n ref={ref}\n data-state={state}\n data-open={isOpen}\n className={cn(\n \"arclo-thinking-block rounded-xl border border-gray-200 overflow-hidden transition-all\",\n state === \"thinking\" && \"border-[var(--arclo-accent,#6C5CE7)]/20 bg-[var(--arclo-accent,#6C5CE7)]/[0.02]\",\n state === \"done\" && \"border-gray-200 bg-white\",\n state === \"error\" && \"border-red-200 bg-red-50/30\",\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <Trigger />\n <Content />\n </>\n )}\n </div>\n </ThinkingBlockContext.Provider>\n );\n },\n);\nRoot.displayName = \"ThinkingBlock.Root\";\n\n/* ─── Trigger (clickable header) ──────────────────────────────────── */\n\nexport interface ThinkingBlockTriggerProps\n extends HTMLAttributes<HTMLButtonElement> {\n /** Custom label. Default: auto from state */\n label?: string;\n}\n\nexport const Trigger = forwardRef<HTMLButtonElement, ThinkingBlockTriggerProps>(\n ({ label, className, children, ...props }, ref) => {\n const { state, isOpen, toggle, duration } = useThinkingBlockContext();\n\n const defaultLabel =\n state === \"thinking\"\n ? \"Thinking...\"\n : state === \"error\"\n ? \"Thinking failed\"\n : duration != null\n ? `Thought for ${duration}s`\n : \"Thought process\";\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={toggle}\n aria-expanded={isOpen}\n className={cn(\n \"arclo-thinking-trigger flex w-full items-center gap-2 px-4 py-3 text-left text-sm transition-colors cursor-pointer hover:bg-gray-50/50\",\n className,\n )}\n {...props}\n >\n {/* Spinner / checkmark / error icon */}\n {state === \"thinking\" && (\n <svg\n className=\"h-4 w-4 shrink-0 animate-spin\"\n style={{ color: themeVars.accent }}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeDasharray=\"60\"\n strokeDashoffset=\"20\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n {state === \"done\" && (\n <svg\n className=\"h-4 w-4 shrink-0\"\n style={{ color: themeVars.accent }}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z\" />\n </svg>\n )}\n {state === \"error\" && (\n <svg\n className=\"h-4 w-4 shrink-0 text-red-500\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m15 9-6 6M9 9l6 6\" />\n </svg>\n )}\n\n <span\n className={cn(\n \"flex-1 font-medium\",\n state === \"thinking\" && \"text-[var(--arclo-accent,#6C5CE7)]\",\n state === \"done\" && \"text-gray-500\",\n state === \"error\" && \"text-red-600\",\n )}\n >\n {children ?? label ?? defaultLabel}\n </span>\n\n {/* Chevron */}\n <svg\n className={cn(\n \"h-4 w-4 shrink-0 text-gray-400 transition-transform duration-200\",\n isOpen && \"rotate-180\",\n )}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n );\n },\n);\nTrigger.displayName = \"ThinkingBlock.Trigger\";\n\n/* ─── Content ─────────────────────────────────────────────────────── */\n\nexport interface ThinkingBlockContentProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Content = forwardRef<HTMLDivElement, ThinkingBlockContentProps>(\n ({ children, className, ...props }, ref) => {\n const { isOpen, state } = useThinkingBlockContext();\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-thinking-content border-t border-gray-100 px-4 py-3\",\n className,\n )}\n {...props}\n >\n {children ?? (\n <p\n className={cn(\n \"text-sm leading-relaxed\",\n state === \"thinking\"\n ? \"text-gray-600 italic\"\n : \"text-gray-500\",\n )}\n >\n {state === \"thinking\"\n ? \"Analyzing the request...\"\n : \"No content provided.\"}\n </p>\n )}\n </div>\n );\n },\n);\nContent.displayName = \"ThinkingBlock.Content\";\n","export {\n Root,\n Header,\n Input,\n Output,\n type ToolCallStatus,\n type ToolCallRootProps,\n type ToolCallHeaderProps,\n type ToolCallInputProps,\n type ToolCallOutputProps,\n} from \"./tool-call\";\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\nexport type ToolCallStatus = \"pending\" | \"running\" | \"success\" | \"error\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface ToolCallContextValue {\n status: ToolCallStatus;\n toolName: string;\n isOpen: boolean;\n toggle: () => void;\n}\n\nconst ToolCallContext = createContext<ToolCallContextValue | null>(null);\n\nfunction useToolCallContext() {\n const ctx = useContext(ToolCallContext);\n if (!ctx) {\n throw new Error(\"ToolCall parts must be used within <ToolCall.Root>\");\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface ToolCallRootProps extends HTMLAttributes<HTMLDivElement> {\n /** Name of the tool being called */\n toolName: string;\n /** Current status */\n status?: ToolCallStatus;\n /** Whether result is expanded by default. Default: false */\n defaultOpen?: boolean;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, ToolCallRootProps>(\n (\n {\n toolName,\n status = \"pending\",\n defaultOpen = false,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const toggle = useCallback(() => setIsOpen((o) => !o), []);\n\n return (\n <ToolCallContext.Provider value={{ status, toolName, isOpen, toggle }}>\n <div\n ref={ref}\n data-status={status}\n className={cn(\n \"arclo-tool-call rounded-xl border overflow-hidden transition-all\",\n status === \"pending\" && \"border-gray-200 bg-gray-50/50\",\n status === \"running\" && \"border-blue-200 bg-blue-50/30\",\n status === \"success\" && \"border-emerald-200 bg-emerald-50/30\",\n status === \"error\" && \"border-red-200 bg-red-50/30\",\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <Header />\n </>\n )}\n </div>\n </ToolCallContext.Provider>\n );\n },\n);\nRoot.displayName = \"ToolCall.Root\";\n\n/* ─── Header ──────────────────────────────────────────────────────── */\n\nexport interface ToolCallHeaderProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const Header = forwardRef<HTMLButtonElement, ToolCallHeaderProps>(\n ({ children, className, ...props }, ref) => {\n const { status, toolName, isOpen, toggle } = useToolCallContext();\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={toggle}\n aria-expanded={isOpen}\n className={cn(\n \"arclo-tool-call-header flex w-full items-center gap-3 px-4 py-3 text-left text-sm cursor-pointer hover:bg-gray-50/50 transition-colors\",\n className,\n )}\n {...props}\n >\n {/* Status icon */}\n <span className=\"shrink-0\">\n {status === \"pending\" && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-gray-200\">\n <span className=\"h-2 w-2 rounded-full bg-gray-400\" />\n </span>\n )}\n {status === \"running\" && (\n <svg\n className=\"h-5 w-5 animate-spin text-blue-500\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeDasharray=\"60\"\n strokeDashoffset=\"20\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n {status === \"success\" && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-100\">\n <svg\n className=\"h-3 w-3 text-emerald-600\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </span>\n )}\n {status === \"error\" && (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-red-100\">\n <svg\n className=\"h-3 w-3 text-red-600\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n >\n <path d=\"m15 9-6 6M9 9l6 6\" />\n </svg>\n </span>\n )}\n </span>\n\n {/* Tool name + status label */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-xs font-semibold text-gray-700 truncate\">\n {toolName}\n </span>\n <span\n className={cn(\n \"rounded-full px-2 py-0.5 text-[10px] font-medium\",\n status === \"pending\" && \"bg-gray-100 text-gray-500\",\n status === \"running\" && \"bg-blue-100 text-blue-600\",\n status === \"success\" && \"bg-emerald-100 text-emerald-600\",\n status === \"error\" && \"bg-red-100 text-red-600\",\n )}\n >\n {status === \"pending\" && \"Queued\"}\n {status === \"running\" && \"Running\"}\n {status === \"success\" && \"Done\"}\n {status === \"error\" && \"Failed\"}\n </span>\n </div>\n {children}\n </div>\n\n {/* Chevron */}\n <svg\n className={cn(\n \"h-4 w-4 shrink-0 text-gray-400 transition-transform duration-200\",\n isOpen && \"rotate-180\",\n )}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n );\n },\n);\nHeader.displayName = \"ToolCall.Header\";\n\n/* ─── Input (tool arguments) ──────────────────────────────────────── */\n\nexport interface ToolCallInputProps extends HTMLAttributes<HTMLDivElement> {\n /** Label for the input section. Default: \"Input\" */\n label?: string;\n}\n\nexport const Input = forwardRef<HTMLDivElement, ToolCallInputProps>(\n ({ label = \"Input\", children, className, ...props }, ref) => {\n const { isOpen } = useToolCallContext();\n\n if (!isOpen) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-tool-call-input border-t border-gray-100 px-4 py-3\",\n className,\n )}\n {...props}\n >\n <p className=\"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-gray-400\">\n {label}\n </p>\n <div className=\"rounded-lg bg-gray-50 p-3 font-mono text-xs text-gray-600 overflow-x-auto\">\n {children}\n </div>\n </div>\n );\n },\n);\nInput.displayName = \"ToolCall.Input\";\n\n/* ─── Output (tool result) ────────────────────────────────────────── */\n\nexport interface ToolCallOutputProps extends HTMLAttributes<HTMLDivElement> {\n /** Label for the output section. Default: \"Output\" */\n label?: string;\n}\n\nexport const Output = forwardRef<HTMLDivElement, ToolCallOutputProps>(\n ({ label = \"Output\", children, className, ...props }, ref) => {\n const { isOpen, status } = useToolCallContext();\n\n if (!isOpen || status === \"pending\" || status === \"running\") return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-tool-call-output border-t border-gray-100 px-4 py-3\",\n className,\n )}\n {...props}\n >\n <p className=\"mb-1.5 text-[10px] font-semibold uppercase tracking-wider text-gray-400\">\n {label}\n </p>\n <div\n className={cn(\n \"rounded-lg p-3 font-mono text-xs overflow-x-auto\",\n status === \"success\" && \"bg-emerald-50 text-emerald-800\",\n status === \"error\" && \"bg-red-50 text-red-800\",\n )}\n >\n {children}\n </div>\n </div>\n );\n },\n);\nOutput.displayName = \"ToolCall.Output\";\n","export {\n Root,\n Messages,\n Message,\n UserMessage,\n AssistantMessage,\n SystemMessage,\n ScrollAnchor,\n Avatar,\n type MessageRole,\n type ChatThreadAvatarProps,\n type ChatThreadRootProps,\n type ChatThreadMessagesProps,\n type ChatThreadMessageProps,\n type ChatThreadUserMessageProps,\n type ChatThreadAssistantMessageProps,\n type ChatThreadSystemMessageProps,\n type ChatThreadScrollAnchorProps,\n} from \"./chat-thread\";\n","import { forwardRef, useEffect, useRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── Types ──────────────────────────────────────────────────────── */\n\nexport type MessageRole = \"user\" | \"assistant\" | \"system\";\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface ChatThreadRootProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, ChatThreadRootProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"arclo-chat-thread flex flex-col\", className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nRoot.displayName = \"ChatThread.Root\";\n\n/* ─── Messages ───────────────────────────────────────────────────── */\n\nexport interface ChatThreadMessagesProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const Messages = forwardRef<HTMLDivElement, ChatThreadMessagesProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-chat-messages flex-1 overflow-y-auto space-y-4 p-4\",\n className,\n )}\n style={{\n scrollbarWidth: \"thin\",\n scrollbarColor: `var(--arclo-border, #e5e7eb) transparent`,\n }}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nMessages.displayName = \"ChatThread.Messages\";\n\n/* ─── Message ────────────────────────────────────────────────────── */\n\nexport interface ChatThreadMessageProps extends HTMLAttributes<HTMLDivElement> {\n /** The role determines visual styling and alignment */\n role: MessageRole;\n /** Optional avatar element (icon, image, etc.) */\n avatar?: ReactNode;\n /** Display name for the message author */\n name?: string;\n /** Timestamp string to display */\n timestamp?: string;\n children: ReactNode;\n}\n\nexport const Message = forwardRef<HTMLDivElement, ChatThreadMessageProps>(\n ({ role, avatar, name, timestamp, children, className, ...props }, ref) => {\n if (role === \"system\") {\n return (\n <div\n ref={ref}\n data-role={role}\n className={cn(\n \"arclo-chat-message flex justify-center\",\n className,\n )}\n {...props}\n >\n <div\n className=\"max-w-md rounded-lg px-4 py-2 text-center text-xs\"\n style={{ color: themeVars.textMuted }}\n >\n {(name || timestamp) && (\n <div className=\"mb-1 flex items-center justify-center gap-2\">\n {avatar}\n {name && <span className=\"font-medium\">{name}</span>}\n {timestamp && <span className=\"opacity-60\">{timestamp}</span>}\n </div>\n )}\n <div>{children}</div>\n </div>\n </div>\n );\n }\n\n const isUser = role === \"user\";\n\n return (\n <div\n ref={ref}\n data-role={role}\n className={cn(\n \"arclo-chat-message flex gap-3\",\n isUser ? \"flex-row-reverse\" : \"flex-row\",\n className,\n )}\n {...props}\n >\n {/* Avatar */}\n {avatar && (\n <div className=\"flex-shrink-0 mt-1\">{avatar}</div>\n )}\n\n {/* Bubble */}\n <div\n className={cn(\"max-w-[80%] min-w-0\", isUser ? \"items-end\" : \"items-start\")}\n >\n {/* Header */}\n {(name || timestamp) && (\n <div\n className={cn(\n \"mb-1 flex items-center gap-2 text-xs\",\n isUser ? \"justify-end\" : \"justify-start\",\n )}\n style={{ color: themeVars.textSecondary }}\n >\n {name && <span className=\"font-medium\">{name}</span>}\n {timestamp && <span className=\"opacity-60\">{timestamp}</span>}\n </div>\n )}\n\n {/* Content */}\n <div\n className={cn(\n \"rounded-2xl px-4 py-3 text-sm leading-relaxed\",\n isUser ? \"rounded-tr-sm\" : \"rounded-tl-sm\",\n )}\n style={\n isUser\n ? {\n backgroundColor: themeVars.accent,\n color: themeVars.accentFg,\n }\n : {\n backgroundColor: themeVars.surface,\n color: themeVars.text,\n border: `1px solid ${themeVars.border}`,\n }\n }\n >\n {children}\n </div>\n </div>\n </div>\n );\n },\n);\nMessage.displayName = \"ChatThread.Message\";\n\n/* ─── UserMessage ────────────────────────────────────────────────── */\n\nexport interface ChatThreadUserMessageProps\n extends Omit<ChatThreadMessageProps, \"role\"> {}\n\nexport const UserMessage = forwardRef<HTMLDivElement, ChatThreadUserMessageProps>(\n (props, ref) => <Message ref={ref} role=\"user\" {...props} />,\n);\nUserMessage.displayName = \"ChatThread.UserMessage\";\n\n/* ─── AssistantMessage ───────────────────────────────────────────── */\n\nexport interface ChatThreadAssistantMessageProps\n extends Omit<ChatThreadMessageProps, \"role\"> {}\n\nexport const AssistantMessage = forwardRef<\n HTMLDivElement,\n ChatThreadAssistantMessageProps\n>((props, ref) => <Message ref={ref} role=\"assistant\" {...props} />);\nAssistantMessage.displayName = \"ChatThread.AssistantMessage\";\n\n/* ─── SystemMessage ──────────────────────────────────────────────── */\n\nexport interface ChatThreadSystemMessageProps\n extends Omit<ChatThreadMessageProps, \"role\"> {}\n\nexport const SystemMessage = forwardRef<\n HTMLDivElement,\n ChatThreadSystemMessageProps\n>((props, ref) => <Message ref={ref} role=\"system\" {...props} />);\nSystemMessage.displayName = \"ChatThread.SystemMessage\";\n\n/* ─── ScrollAnchor ───────────────────────────────────────────────── */\n\nexport interface ChatThreadScrollAnchorProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const ScrollAnchor = forwardRef<HTMLDivElement, ChatThreadScrollAnchorProps>(\n ({ className, ...props }, ref) => {\n const innerRef = useRef<HTMLDivElement>(null);\n\n // Merge forwarded ref with inner ref\n const setRef = (node: HTMLDivElement | null) => {\n (innerRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n };\n\n useEffect(() => {\n const el = innerRef.current;\n if (!el) return;\n\n // Find the scrollable parent (the Messages container)\n const scrollParent = el.closest(\".arclo-chat-messages\");\n\n const observer = new MutationObserver(() => {\n if (scrollParent) {\n scrollParent.scrollTo({\n top: scrollParent.scrollHeight,\n behavior: \"smooth\",\n });\n }\n });\n\n const parent = el.parentElement;\n if (parent) {\n observer.observe(parent, { childList: true, subtree: true });\n }\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <div\n ref={setRef}\n aria-hidden\n className={cn(\"arclo-chat-scroll-anchor h-px\", className)}\n {...props}\n />\n );\n },\n);\nScrollAnchor.displayName = \"ChatThread.ScrollAnchor\";\n\n/* ─── Avatar ────────────────────────────────────────────────────── */\n\nexport interface ChatThreadAvatarProps extends HTMLAttributes<HTMLDivElement> {\n /** Image URL for the avatar */\n src?: string;\n /** Initials to display when no src is provided */\n initials?: string;\n /** Custom icon element */\n icon?: ReactNode;\n /** Background color. Default: accent for assistant, surface-secondary for user */\n color?: string;\n /** Text/icon color. Default: auto based on background */\n textColor?: string;\n /** Size in px. Default: 28 */\n size?: number;\n}\n\nexport const Avatar = forwardRef<HTMLDivElement, ChatThreadAvatarProps>(\n (\n {\n src,\n initials,\n icon,\n color,\n textColor,\n size = 28,\n className,\n style,\n ...props\n },\n ref,\n ) => {\n const bg = color ?? themeVars.accent;\n const fg = textColor ?? themeVars.accentFg;\n\n if (src) {\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-chat-avatar shrink-0 overflow-hidden rounded-full\",\n className,\n )}\n style={{ width: size, height: size, ...style }}\n {...props}\n >\n <img\n src={src}\n alt={initials ?? \"Avatar\"}\n className=\"h-full w-full object-cover\"\n />\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-chat-avatar shrink-0 flex items-center justify-center rounded-full font-semibold\",\n className,\n )}\n style={{\n width: size,\n height: size,\n backgroundColor: bg,\n color: fg,\n fontSize: size * 0.4,\n ...style,\n }}\n {...props}\n >\n {icon ?? initials ?? \"?\"}\n </div>\n );\n },\n);\nAvatar.displayName = \"ChatThread.Avatar\";\n","export {\n Root,\n Placeholder,\n Preview,\n Progress,\n Overlay,\n ErrorFallback,\n Toolbar,\n Download,\n Retry,\n} from \"./image-gen\";\n\nexport type { ImageGenRootProps } from \"./image-gen\";\n","import {\n createContext,\n forwardRef,\n useContext,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\nimport type { ImageGenState } from \"../lib/types\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface ImageGenContextValue {\n state: ImageGenState;\n src?: string | null;\n alt?: string;\n aspectRatio: string;\n prompt?: string;\n onRetry?: () => void;\n onDownload?: () => void;\n blurReveal: boolean;\n}\n\nconst ImageGenContext = createContext<ImageGenContextValue | null>(null);\n\nfunction useImageGenContext() {\n const ctx = useContext(ImageGenContext);\n if (!ctx) {\n throw new Error(\n \"useImageGenContext must be used within <ImageGen.Root>\",\n );\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface ImageGenRootProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n state: ImageGenState;\n src?: string | null;\n alt?: string;\n aspectRatio?: string;\n prompt?: string;\n onRetry?: () => void;\n onDownload?: () => void;\n blurReveal?: boolean;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, ImageGenRootProps>(\n (\n {\n state,\n src,\n alt,\n aspectRatio = \"1/1\",\n prompt,\n onRetry,\n onDownload,\n blurReveal = true,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const ctx: ImageGenContextValue = {\n state,\n src,\n alt,\n aspectRatio,\n prompt,\n onRetry,\n onDownload,\n blurReveal,\n };\n\n return (\n <ImageGenContext.Provider value={ctx}>\n <div\n ref={ref}\n data-state={state}\n style={{ position: \"relative\" }}\n className={cn(\"arclo-image-gen\", className)}\n {...props}\n >\n {children}\n </div>\n </ImageGenContext.Provider>\n );\n },\n);\nRoot.displayName = \"ImageGen.Root\";\n\n/* ─── Placeholder ────────────────────────────────────────────────── */\n\nexport interface ImageGenPlaceholderProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Placeholder = forwardRef<HTMLDivElement, ImageGenPlaceholderProps>(\n ({ className, ...props }, ref) => {\n const { state, src, aspectRatio } = useImageGenContext();\n\n const visible =\n state === \"idle\" || state === \"pending\" || (state === \"generating\" && !src);\n\n if (!visible) return null;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading image\"\n style={{\n aspectRatio,\n backgroundColor: themeVars.surfaceSecondary,\n borderRadius: themeVars.radius,\n overflow: \"hidden\",\n position: \"relative\",\n }}\n className={cn(\"arclo-image-gen-placeholder\", className)}\n {...props}\n >\n <div\n dangerouslySetInnerHTML={{\n __html: `<style>\n@keyframes arclo-shimmer {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(100%); }\n}\n</style>`,\n }}\n />\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: `linear-gradient(90deg, transparent 0%, ${themeVars.border} 50%, transparent 100%)`,\n animation: \"arclo-shimmer 1.5s ease-in-out infinite\",\n }}\n />\n </div>\n );\n },\n);\nPlaceholder.displayName = \"ImageGen.Placeholder\";\n\n/* ─── Preview ────────────────────────────────────────────────────── */\n\nexport interface ImageGenPreviewProps\n extends Omit<HTMLAttributes<HTMLImageElement>, \"src\" | \"alt\"> {}\n\nexport const Preview = forwardRef<HTMLImageElement, ImageGenPreviewProps>(\n ({ className, style, ...props }, ref) => {\n const { state, src, alt, aspectRatio, blurReveal } = useImageGenContext();\n\n if (!src) return null;\n\n const isDone = state === \"done\";\n const blurValue = blurReveal && !isDone ? \"blur(20px)\" : \"blur(0)\";\n\n return (\n <img\n ref={ref}\n src={src}\n alt={alt ?? \"\"}\n data-state={state}\n style={{\n aspectRatio,\n width: \"100%\",\n display: \"block\",\n borderRadius: themeVars.radius,\n objectFit: \"cover\",\n filter: blurValue,\n transition: \"filter 0.6s ease-out\",\n ...style,\n }}\n className={cn(\"arclo-image-gen-preview\", className)}\n {...props}\n />\n );\n },\n);\nPreview.displayName = \"ImageGen.Preview\";\n\n/* ─── Progress ───────────────────────────────────────────────────── */\n\nexport interface ImageGenProgressProps\n extends HTMLAttributes<HTMLDivElement> {\n progress?: number;\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ImageGenProgressProps>(\n ({ progress, className, ...props }, ref) => {\n const { state } = useImageGenContext();\n\n if (state !== \"pending\" && state !== \"generating\") return null;\n\n const isIndeterminate = progress === undefined;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={isIndeterminate ? undefined : progress}\n aria-valuemin={0}\n aria-valuemax={100}\n style={{\n position: \"absolute\",\n bottom: 0,\n left: 0,\n right: 0,\n height: \"3px\",\n backgroundColor: themeVars.surfaceSecondary,\n borderRadius: \"0 0 3px 3px\",\n overflow: \"hidden\",\n }}\n className={cn(\"arclo-image-gen-progress\", className)}\n {...props}\n >\n {isIndeterminate ? (\n <>\n <div\n dangerouslySetInnerHTML={{\n __html: `<style>\n@keyframes arclo-progress-shimmer {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(200%); }\n}\n</style>`,\n }}\n />\n <div\n style={{\n width: \"40%\",\n height: \"100%\",\n backgroundColor: themeVars.accent,\n animation: \"arclo-progress-shimmer 1.2s ease-in-out infinite\",\n }}\n />\n </>\n ) : (\n <div\n style={{\n width: `${Math.min(100, Math.max(0, progress))}%`,\n height: \"100%\",\n backgroundColor: themeVars.accent,\n transition: \"width 0.3s ease-out\",\n }}\n />\n )}\n </div>\n );\n },\n);\nProgress.displayName = \"ImageGen.Progress\";\n\n/* ─── Overlay ────────────────────────────────────────────────────── */\n\nconst stateLabels: Record<ImageGenState, string> = {\n idle: \"Waiting\",\n pending: \"Preparing...\",\n generating: \"Generating...\",\n done: \"Done\",\n error: \"Error\",\n};\n\nexport interface ImageGenOverlayProps\n extends HTMLAttributes<HTMLDivElement> {\n label?: string;\n}\n\nexport const Overlay = forwardRef<HTMLDivElement, ImageGenOverlayProps>(\n ({ label, className, ...props }, ref) => {\n const { state } = useImageGenContext();\n\n if (state !== \"pending\" && state !== \"generating\") return null;\n\n const displayLabel = label ?? stateLabels[state];\n\n return (\n <div\n ref={ref}\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n backgroundColor: \"rgba(0, 0, 0, 0.4)\",\n borderRadius: themeVars.radius,\n color: \"#ffffff\",\n }}\n className={cn(\"arclo-image-gen-overlay\", className)}\n {...props}\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ animation: \"spin 1s linear infinite\" }}\n >\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeDasharray=\"31.4 31.4\"\n strokeLinecap=\"round\"\n />\n </svg>\n {displayLabel && (\n <span style={{ fontSize: \"14px\", fontWeight: 500 }}>\n {displayLabel}\n </span>\n )}\n </div>\n );\n },\n);\nOverlay.displayName = \"ImageGen.Overlay\";\n\n/* ─── ErrorFallback ──────────────────────────────────────────────── */\n\nexport interface ImageGenErrorFallbackProps\n extends HTMLAttributes<HTMLDivElement> {\n message?: string;\n}\n\nexport const ErrorFallback = forwardRef<HTMLDivElement, ImageGenErrorFallbackProps>(\n ({ message = \"Failed to generate image.\", className, ...props }, ref) => {\n const { state, onRetry } = useImageGenContext();\n\n if (state !== \"error\") return null;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n style={{\n borderColor: themeVars.error,\n backgroundColor: themeVars.errorSurface,\n color: themeVars.error,\n }}\n className={cn(\n \"arclo-image-gen-error rounded-lg border p-4 text-sm\",\n className,\n )}\n {...props}\n >\n <p>{message}</p>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n style={{ color: themeVars.error }}\n className=\"mt-2 underline cursor-pointer\"\n >\n Try again\n </button>\n )}\n </div>\n );\n },\n);\nErrorFallback.displayName = \"ImageGen.ErrorFallback\";\n\n/* ─── Toolbar ────────────────────────────────────────────────────── */\n\nexport interface ImageGenToolbarProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Toolbar = forwardRef<HTMLDivElement, ImageGenToolbarProps>(\n ({ children, className, ...props }, ref) => {\n const { state } = useImageGenContext();\n\n if (state !== \"done\") return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-image-gen-toolbar mt-2 flex items-center gap-2 animate-in fade-in duration-150\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nToolbar.displayName = \"ImageGen.Toolbar\";\n\n/* ─── Download ───────────────────────────────────────────────────── */\n\nexport interface ImageGenDownloadProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const Download = forwardRef<HTMLButtonElement, ImageGenDownloadProps>(\n ({ children, className, ...props }, ref) => {\n const { onDownload } = useImageGenContext();\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onDownload}\n style={{\n backgroundColor: themeVars.accent,\n color: themeVars.accentFg,\n borderRadius: themeVars.radius,\n }}\n className={cn(\n \"arclo-image-gen-download px-3 py-1.5 text-sm cursor-pointer\",\n className,\n )}\n {...props}\n >\n {children ?? \"Download\"}\n </button>\n );\n },\n);\nDownload.displayName = \"ImageGen.Download\";\n\n/* ─── Retry ──────────────────────────────────────────────────────── */\n\nexport interface ImageGenRetryProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const Retry = forwardRef<HTMLButtonElement, ImageGenRetryProps>(\n ({ children, className, ...props }, ref) => {\n const { onRetry } = useImageGenContext();\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onRetry}\n style={{\n borderColor: themeVars.border,\n color: themeVars.text,\n borderRadius: themeVars.radius,\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n }}\n className={cn(\n \"arclo-image-gen-retry px-3 py-1.5 text-sm cursor-pointer\",\n className,\n )}\n {...props}\n >\n {children ?? \"Retry\"}\n </button>\n );\n },\n);\nRetry.displayName = \"ImageGen.Retry\";\n","export {\n Root,\n Placeholder,\n Thumbnail,\n Player,\n Progress,\n StageLabel,\n ErrorFallback,\n Toolbar,\n PlayButton,\n} from \"./video-gen\";\n\nexport type { VideoGenRootProps } from \"./video-gen\";\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\nimport type { VideoGenState } from \"../lib/types\";\n\n/* ─── Context ─────────────────────────────────────────────────────── */\n\ninterface VideoGenContextValue {\n state: VideoGenState;\n src: string | null;\n poster: string | null;\n progress: number | undefined;\n aspectRatio: string;\n duration: number | null;\n prompt: string | undefined;\n onRetry: (() => void) | undefined;\n onDownload: (() => void) | undefined;\n onPlay: (() => void) | undefined;\n}\n\nconst VideoGenContext = createContext<VideoGenContextValue | null>(null);\n\nfunction useVideoGenContext() {\n const ctx = useContext(VideoGenContext);\n if (!ctx) {\n throw new Error(\n \"useVideoGenContext must be used within <VideoGen.Root>\",\n );\n }\n return ctx;\n}\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface VideoGenRootProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n state: VideoGenState;\n src?: string | null;\n poster?: string | null;\n progress?: number;\n aspectRatio?: string;\n duration?: number | null;\n prompt?: string;\n onRetry?: () => void;\n onDownload?: () => void;\n onPlay?: () => void;\n children?: ReactNode;\n}\n\nexport const Root = forwardRef<HTMLDivElement, VideoGenRootProps>(\n (\n {\n state,\n src = null,\n poster = null,\n progress,\n aspectRatio = \"16/9\",\n duration = null,\n prompt,\n onRetry,\n onDownload,\n onPlay,\n children,\n className,\n style,\n ...props\n },\n ref,\n ) => {\n const ctx: VideoGenContextValue = {\n state,\n src,\n poster,\n progress,\n aspectRatio,\n duration,\n prompt,\n onRetry,\n onDownload,\n onPlay,\n };\n\n return (\n <VideoGenContext.Provider value={ctx}>\n <div\n ref={ref}\n data-state={state}\n className={cn(\"arclo-video-gen relative overflow-hidden\", className)}\n style={{\n aspectRatio,\n borderRadius: themeVars.radius,\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n </VideoGenContext.Provider>\n );\n },\n);\nRoot.displayName = \"VideoGen.Root\";\n\n/* ─── Placeholder ────────────────────────────────────────────────── */\n\nexport interface VideoGenPlaceholderProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Placeholder = forwardRef<HTMLDivElement, VideoGenPlaceholderProps>(\n ({ className, ...props }, ref) => {\n const { state, poster } = useVideoGenContext();\n const id = useId().replace(/:/g, \"\");\n\n const visible =\n (state === \"idle\" || state === \"queued\" || state === \"processing\") &&\n !poster;\n\n if (!visible) return null;\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Preparing video\"\n className={cn(\n \"arclo-video-gen-placeholder absolute inset-0 flex items-center justify-center\",\n className,\n )}\n style={{ backgroundColor: themeVars.surfaceSecondary }}\n {...props}\n >\n <style\n dangerouslySetInnerHTML={{\n __html: `\n@keyframes arclo-vg-shimmer-${id} {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n}`,\n }}\n />\n <div\n className=\"absolute inset-0\"\n style={{\n background: `linear-gradient(90deg, transparent 0%, ${themeVars.border} 50%, transparent 100%)`,\n backgroundSize: \"200% 100%\",\n animation: `arclo-vg-shimmer-${id} 2s ease-in-out infinite`,\n opacity: 0.5,\n }}\n />\n {/* Clapperboard icon */}\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ color: themeVars.textMuted, position: \"relative\", zIndex: 1 }}\n >\n <path d=\"M4 11v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\" />\n <path d=\"M4 11V7a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4\" />\n <path d=\"M4 11h16\" />\n <path d=\"M7 5l2 6\" />\n <path d=\"M11 5l2 6\" />\n <path d=\"M15 5l2 6\" />\n </svg>\n </div>\n );\n },\n);\nPlaceholder.displayName = \"VideoGen.Placeholder\";\n\n/* ─── Thumbnail ──────────────────────────────────────────────────── */\n\nexport interface VideoGenThumbnailProps\n extends HTMLAttributes<HTMLImageElement> {}\n\nexport const Thumbnail = forwardRef<HTMLImageElement, VideoGenThumbnailProps>(\n ({ className, style: styleProp, ...props }, ref) => {\n const { state, poster } = useVideoGenContext();\n\n const visible =\n poster &&\n (state === \"processing\" || state === \"rendering\" || state === \"done\");\n\n if (!visible) return null;\n\n return (\n <img\n ref={ref}\n src={poster}\n alt=\"Video thumbnail\"\n className={cn(\n \"arclo-video-gen-thumbnail absolute inset-0 h-full w-full object-cover\",\n className,\n )}\n style={{\n borderRadius: themeVars.radius,\n ...styleProp,\n }}\n {...props}\n />\n );\n },\n);\nThumbnail.displayName = \"VideoGen.Thumbnail\";\n\n/* ─── Player ─────────────────────────────────────────────────────── */\n\nexport interface VideoGenPlayerProps\n extends HTMLAttributes<HTMLVideoElement> {\n /** Additional props passed to the <video> element */\n autoPlay?: boolean;\n loop?: boolean;\n muted?: boolean;\n}\n\nexport const Player = forwardRef<HTMLVideoElement, VideoGenPlayerProps>(\n ({ className, style: styleProp, autoPlay, loop, muted, ...props }, ref) => {\n const { state, src, poster } = useVideoGenContext();\n\n if (state !== \"done\" || !src) return null;\n\n return (\n <video\n ref={ref}\n src={src}\n poster={poster ?? undefined}\n controls\n autoPlay={autoPlay}\n loop={loop}\n muted={muted}\n className={cn(\n \"arclo-video-gen-player absolute inset-0 h-full w-full object-contain\",\n className,\n )}\n style={{\n borderRadius: themeVars.radius,\n backgroundColor: themeVars.surface,\n ...styleProp,\n }}\n {...props}\n />\n );\n },\n);\nPlayer.displayName = \"VideoGen.Player\";\n\n/* ─── Progress ───────────────────────────────────────────────────── */\n\nexport interface VideoGenProgressProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Progress = forwardRef<HTMLDivElement, VideoGenProgressProps>(\n ({ className, ...props }, ref) => {\n const { state, progress } = useVideoGenContext();\n const id = useId().replace(/:/g, \"\");\n\n const visible =\n state === \"queued\" || state === \"processing\" || state === \"rendering\";\n\n if (!visible) return null;\n\n const isDeterminate = progress != null;\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuenow={isDeterminate ? progress : undefined}\n aria-valuemin={0}\n aria-valuemax={100}\n className={cn(\n \"arclo-video-gen-progress absolute bottom-0 left-0 right-0 h-1\",\n className,\n )}\n style={{ backgroundColor: `color-mix(in srgb, ${themeVars.accent} 20%, transparent)` }}\n {...props}\n >\n <style\n dangerouslySetInnerHTML={{\n __html: `\n@keyframes arclo-vg-indeterminate-${id} {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n}`,\n }}\n />\n <div\n className=\"h-full\"\n style={\n isDeterminate\n ? {\n width: `${Math.min(100, Math.max(0, progress))}%`,\n backgroundColor: themeVars.accent,\n transition: \"width 0.3s ease\",\n }\n : {\n width: \"25%\",\n backgroundColor: themeVars.accent,\n animation: `arclo-vg-indeterminate-${id} 1.5s ease-in-out infinite`,\n }\n }\n />\n </div>\n );\n },\n);\nProgress.displayName = \"VideoGen.Progress\";\n\n/* ─── StageLabel ─────────────────────────────────────────────────── */\n\nexport interface VideoGenStageLabelProps\n extends HTMLAttributes<HTMLSpanElement> {\n /** Override the auto-generated label */\n label?: string;\n}\n\nfunction getAutoLabel(state: VideoGenState, progress?: number): string {\n switch (state) {\n case \"idle\":\n return \"\";\n case \"queued\":\n return \"Queued...\";\n case \"processing\":\n return progress != null ? `Processing ${Math.round(progress)}%` : \"Processing...\";\n case \"rendering\":\n return progress != null ? `Rendering ${Math.round(progress)}%` : \"Rendering...\";\n case \"done\":\n return \"Complete\";\n case \"error\":\n return \"Failed\";\n default:\n return \"\";\n }\n}\n\nexport const StageLabel = forwardRef<HTMLSpanElement, VideoGenStageLabelProps>(\n ({ label, className, ...props }, ref) => {\n const { state, progress } = useVideoGenContext();\n const id = useId().replace(/:/g, \"\");\n\n const displayLabel = label ?? getAutoLabel(state, progress);\n const isActive =\n state === \"queued\" || state === \"processing\" || state === \"rendering\";\n\n if (!displayLabel) return null;\n\n const accentColor = themeVars.accent;\n const brightColor = themeVars.accentBright;\n\n return (\n <span\n ref={ref}\n data-state={state}\n className={cn(\n \"arclo-video-gen-stage-label text-sm font-medium\",\n className,\n )}\n style={{ color: accentColor }}\n {...props}\n >\n <style\n dangerouslySetInnerHTML={{\n __html: `\n@keyframes arclo-vg-sweep-${id} {\n 0%, 100% { color: ${accentColor}; opacity: 0.5; }\n 50% { color: ${brightColor}; opacity: 1; }\n}`,\n }}\n />\n {isActive ? (\n <span aria-label={displayLabel}>\n {displayLabel.split(\"\").map((char, i) => (\n <span\n key={i}\n style={{\n display: \"inline-block\",\n animation: `arclo-vg-sweep-${id} 1.5s ease-in-out infinite`,\n animationDelay: `${i * 0.08}s`,\n }}\n >\n {char === \" \" ? \"\\u00A0\" : char}\n </span>\n ))}\n </span>\n ) : (\n <span>{displayLabel}</span>\n )}\n </span>\n );\n },\n);\nStageLabel.displayName = \"VideoGen.StageLabel\";\n\n/* ─── ErrorFallback ──────────────────────────────────────────────── */\n\nexport interface VideoGenErrorFallbackProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Custom error message */\n message?: string;\n}\n\nexport const ErrorFallback = forwardRef<HTMLDivElement, VideoGenErrorFallbackProps>(\n ({ message = \"Video generation failed.\", className, ...props }, ref) => {\n const { state, onRetry } = useVideoGenContext();\n\n if (state !== \"error\") return null;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(\n \"arclo-video-gen-error absolute inset-0 flex flex-col items-center justify-center gap-2 p-4 text-sm\",\n className,\n )}\n style={{\n backgroundColor: themeVars.errorSurface,\n color: themeVars.error,\n borderRadius: themeVars.radius,\n }}\n {...props}\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n <p>{message}</p>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"mt-1 underline cursor-pointer\"\n style={{ color: themeVars.error }}\n >\n Try again\n </button>\n )}\n </div>\n );\n },\n);\nErrorFallback.displayName = \"VideoGen.ErrorFallback\";\n\n/* ─── Toolbar ────────────────────────────────────────────────────── */\n\nexport interface VideoGenToolbarProps\n extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Toolbar = forwardRef<HTMLDivElement, VideoGenToolbarProps>(\n ({ children, className, ...props }, ref) => {\n const { state } = useVideoGenContext();\n\n if (state !== \"done\") return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-video-gen-toolbar absolute bottom-4 right-4 flex items-center gap-2 animate-in fade-in duration-150\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nToolbar.displayName = \"VideoGen.Toolbar\";\n\n/* ─── PlayButton ─────────────────────────────────────────────────── */\n\nexport interface VideoGenPlayButtonProps\n extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const PlayButton = forwardRef<HTMLButtonElement, VideoGenPlayButtonProps>(\n ({ className, children, ...props }, ref) => {\n const { state, onPlay, src } = useVideoGenContext();\n const videoRef = useRef<HTMLVideoElement | null>(null);\n\n const visible = state === \"done\" && src;\n\n if (!visible) return null;\n\n const handleClick = () => {\n if (onPlay) {\n onPlay();\n } else {\n // Try to find and play the video element within the root\n const root = (ref as React.RefObject<HTMLElement>)?.current?.closest(\n \".arclo-video-gen\",\n );\n const video = root?.querySelector(\"video\");\n if (video) {\n video.play();\n }\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Play video\"\n onClick={handleClick}\n className={cn(\n \"arclo-video-gen-play-button absolute inset-0 m-auto flex h-16 w-16 items-center justify-center rounded-full cursor-pointer transition-transform hover:scale-110\",\n className,\n )}\n style={{\n backgroundColor: themeVars.accent,\n color: themeVars.accentFg,\n }}\n {...props}\n >\n {children ?? (\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n )}\n </button>\n );\n },\n);\nPlayButton.displayName = \"VideoGen.PlayButton\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport type { ConfidenceLevel } from \"../lib/types\";\n\nconst levelConfig: Record<\n ConfidenceLevel,\n { label: string; classes: string }\n> = {\n high: {\n label: \"High confidence\",\n classes: \"bg-emerald-50 text-emerald-700 border-emerald-200\",\n },\n medium: {\n label: \"Medium confidence\",\n classes: \"bg-amber-50 text-amber-700 border-amber-200\",\n },\n low: {\n label: \"Low confidence\",\n classes: \"bg-red-50 text-red-700 border-red-200\",\n },\n unknown: {\n label: \"Confidence unknown\",\n classes: \"bg-gray-50 text-gray-500 border-gray-200\",\n },\n};\n\n/* ─── Badge ───────────────────────────────────────────────────────── */\n\nexport interface ConfidenceBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n /** Confidence level */\n level: ConfidenceLevel;\n /** Custom label override */\n label?: string;\n /** Show as a small dot indicator instead of full badge */\n variant?: \"badge\" | \"dot\" | \"inline\";\n}\n\nexport const ConfidenceBadge = forwardRef<HTMLSpanElement, ConfidenceBadgeProps>(\n ({ level, label, variant = \"badge\", className, ...props }, ref) => {\n const config = levelConfig[level];\n const displayLabel = label ?? config.label;\n\n if (variant === \"dot\") {\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={displayLabel}\n title={displayLabel}\n className={cn(\n \"arclo-confidence-dot inline-block h-2.5 w-2.5 shrink-0 rounded-full\",\n level === \"high\" && \"bg-emerald-500\",\n level === \"medium\" && \"bg-amber-500\",\n level === \"low\" && \"bg-red-500\",\n level === \"unknown\" && \"bg-gray-400\",\n className,\n )}\n {...props}\n />\n );\n }\n\n if (variant === \"inline\") {\n return (\n <span\n ref={ref}\n role=\"status\"\n className={cn(\n \"arclo-confidence-inline text-xs italic\",\n level === \"high\" && \"text-emerald-600\",\n level === \"medium\" && \"text-amber-600\",\n level === \"low\" && \"text-red-600\",\n level === \"unknown\" && \"text-gray-400\",\n className,\n )}\n {...props}\n >\n {displayLabel}\n </span>\n );\n }\n\n return (\n <span\n ref={ref}\n role=\"status\"\n className={cn(\n \"arclo-confidence-badge inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium\",\n config.classes,\n className,\n )}\n {...props}\n >\n <span\n className={cn(\n \"h-2 w-2 shrink-0 rounded-full\",\n level === \"high\" && \"bg-emerald-500\",\n level === \"medium\" && \"bg-amber-500\",\n level === \"low\" && \"bg-red-500\",\n level === \"unknown\" && \"bg-gray-400\",\n )}\n />\n {displayLabel}\n </span>\n );\n },\n);\nConfidenceBadge.displayName = \"ConfidenceBadge\";\n","import {\n forwardRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Citation ────────────────────────────────────────────────────── */\n\nexport interface CitationInlineProps extends HTMLAttributes<HTMLSpanElement> {\n /** Citation index number */\n index: number;\n /** Source URL */\n href?: string;\n /** Source title */\n sourceTitle?: string;\n /** Preview content shown on hover */\n preview?: ReactNode;\n /** Visual variant */\n variant?: \"superscript\" | \"bracket\" | \"pill\";\n}\n\nexport const CitationInline = forwardRef<HTMLSpanElement, CitationInlineProps>(\n (\n {\n index,\n href,\n sourceTitle,\n preview,\n variant = \"superscript\",\n className,\n ...props\n },\n ref,\n ) => {\n const [showPreview, setShowPreview] = useState(false);\n\n const label = variant === \"bracket\" ? `[${index}]` : `${index}`;\n\n const Tag = href ? \"a\" : \"span\";\n const linkProps = href\n ? { href, target: \"_blank\" as const, rel: \"noopener noreferrer\" as const }\n : {};\n\n return (\n <span\n ref={ref}\n className={cn(\"arclo-citation relative inline-block\", className)}\n onMouseEnter={() => setShowPreview(true)}\n onMouseLeave={() => setShowPreview(false)}\n {...props}\n >\n <Tag\n {...linkProps}\n className={cn(\n \"arclo-citation-trigger transition-colors cursor-pointer\",\n variant === \"superscript\" &&\n \"align-super text-[0.65em] text-blue-600 hover:text-blue-800\",\n variant === \"bracket\" &&\n \"text-sm text-blue-600 hover:text-blue-800\",\n variant === \"pill\" &&\n \"inline-flex h-5 w-5 items-center justify-center rounded-full bg-blue-100 text-[0.6rem] font-medium text-blue-700 hover:bg-blue-200\",\n )}\n aria-label={sourceTitle ? `Source: ${sourceTitle}` : `Citation ${index}`}\n >\n {label}\n </Tag>\n\n {/* Hover preview */}\n {preview && showPreview && (\n <div\n role=\"tooltip\"\n className=\"arclo-citation-preview absolute bottom-full left-1/2 z-50 mb-2 w-64 -translate-x-1/2 rounded-lg border border-gray-200 bg-white p-3 text-sm shadow-lg\"\n >\n {sourceTitle && (\n <p className=\"mb-1 font-medium text-gray-900\">{sourceTitle}</p>\n )}\n <div className=\"text-gray-600\">{preview}</div>\n {href && (\n <p className=\"mt-2 truncate text-xs text-blue-500\">{href}</p>\n )}\n <div className=\"absolute left-1/2 top-full -translate-x-1/2 border-4 border-transparent border-t-white\" />\n </div>\n )}\n </span>\n );\n },\n);\nCitationInline.displayName = \"CitationInline\";\n\n/* ─── Citation Group ──────────────────────────────────────────────── */\n\nexport interface CitationGroupProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n}\n\nexport const CitationGroup = forwardRef<HTMLSpanElement, CitationGroupProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <span\n ref={ref}\n className={cn(\"arclo-citation-group inline-flex gap-0.5\", className)}\n {...props}\n >\n {children}\n </span>\n );\n },\n);\nCitationGroup.displayName = \"CitationGroup\";\n","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Root ────────────────────────────────────────────────────────── */\n\nexport interface RefusalCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Why the request was refused */\n reason?: string;\n /** The type of refusal */\n type?: \"safety\" | \"capability\" | \"policy\" | \"context\";\n /** Suggested alternative prompts */\n suggestions?: string[];\n /** Called when user clicks a suggestion */\n onSuggestionClick?: (suggestion: string) => void;\n /** Custom icon */\n icon?: ReactNode;\n}\n\nconst typeConfig: Record<\n NonNullable<RefusalCardProps[\"type\"]>,\n { icon: string; defaultReason: string; accent: string }\n> = {\n safety: {\n icon: \"🛡\",\n defaultReason: \"I can't help with that request for safety reasons.\",\n accent: \"border-red-200 bg-red-50\",\n },\n capability: {\n icon: \"⚡\",\n defaultReason: \"I'm not able to do that right now.\",\n accent: \"border-amber-200 bg-amber-50\",\n },\n policy: {\n icon: \"📋\",\n defaultReason: \"That request falls outside my usage policy.\",\n accent: \"border-orange-200 bg-orange-50\",\n },\n context: {\n icon: \"🔍\",\n defaultReason: \"I don't have enough context to help with that.\",\n accent: \"border-blue-200 bg-blue-50\",\n },\n};\n\nexport const RefusalCard = forwardRef<HTMLDivElement, RefusalCardProps>(\n (\n {\n reason,\n type = \"capability\",\n suggestions,\n onSuggestionClick,\n icon,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const config = typeConfig[type];\n const displayReason = reason ?? config.defaultReason;\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n data-refusal-type={type}\n className={cn(\n \"arclo-refusal-card rounded-lg border p-4\",\n config.accent,\n className,\n )}\n {...props}\n >\n <div className=\"flex gap-3\">\n <span className=\"text-lg\" aria-hidden>\n {icon ?? config.icon}\n </span>\n <div className=\"flex-1\">\n <p className=\"text-sm text-gray-800\">{displayReason}</p>\n\n {children}\n\n {suggestions && suggestions.length > 0 && (\n <div className=\"mt-3\">\n <p className=\"mb-1.5 text-xs font-medium text-gray-500\">\n Try instead:\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {suggestions.map((s) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => onSuggestionClick?.(s)}\n className=\"rounded-full border border-gray-200 bg-white px-3 py-1 text-xs text-gray-600 transition-colors hover:bg-gray-50 cursor-pointer\"\n >\n {s}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\nRefusalCard.displayName = \"RefusalCard\";\n","import {\n forwardRef,\n useMemo,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\ninterface ParsedBlock {\n type: \"paragraph\" | \"heading\" | \"code\" | \"list\" | \"blockquote\" | \"hr\";\n content: string;\n level?: number; // heading level\n lang?: string; // code language\n items?: string[]; // list items\n ordered?: boolean;\n}\n\n/* ─── Parser ──────────────────────────────────────────────────────── */\n\nfunction parseMarkdown(text: string): ParsedBlock[] {\n const blocks: ParsedBlock[] = [];\n const lines = text.split(\"\\n\");\n let i = 0;\n\n while (i < lines.length) {\n const line = lines[i];\n\n // Blank line\n if (line.trim() === \"\") {\n i++;\n continue;\n }\n\n // Horizontal rule\n if (/^(-{3,}|\\*{3,}|_{3,})\\s*$/.test(line)) {\n blocks.push({ type: \"hr\", content: \"\" });\n i++;\n continue;\n }\n\n // Heading\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n if (headingMatch) {\n blocks.push({\n type: \"heading\",\n content: headingMatch[2],\n level: headingMatch[1].length,\n });\n i++;\n continue;\n }\n\n // Fenced code block\n const codeMatch = line.match(/^```(\\w*)/);\n if (codeMatch) {\n const lang = codeMatch[1] || undefined;\n const codeLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i].startsWith(\"```\")) {\n codeLines.push(lines[i]);\n i++;\n }\n blocks.push({\n type: \"code\",\n content: codeLines.join(\"\\n\"),\n lang,\n });\n i++; // skip closing ```\n continue;\n }\n\n // Blockquote\n if (line.startsWith(\"> \")) {\n const quoteLines: string[] = [];\n while (i < lines.length && lines[i].startsWith(\"> \")) {\n quoteLines.push(lines[i].slice(2));\n i++;\n }\n blocks.push({ type: \"blockquote\", content: quoteLines.join(\"\\n\") });\n continue;\n }\n\n // Unordered list\n if (/^[-*+]\\s/.test(line)) {\n const items: string[] = [];\n while (i < lines.length && /^[-*+]\\s/.test(lines[i])) {\n items.push(lines[i].replace(/^[-*+]\\s/, \"\"));\n i++;\n }\n blocks.push({ type: \"list\", content: \"\", items, ordered: false });\n continue;\n }\n\n // Ordered list\n if (/^\\d+\\.\\s/.test(line)) {\n const items: string[] = [];\n while (i < lines.length && /^\\d+\\.\\s/.test(lines[i])) {\n items.push(lines[i].replace(/^\\d+\\.\\s/, \"\"));\n i++;\n }\n blocks.push({ type: \"list\", content: \"\", items, ordered: true });\n continue;\n }\n\n // Paragraph (collect consecutive non-empty lines)\n const paraLines: string[] = [];\n while (\n i < lines.length &&\n lines[i].trim() !== \"\" &&\n !lines[i].startsWith(\"#\") &&\n !lines[i].startsWith(\"```\") &&\n !lines[i].startsWith(\"> \") &&\n !/^[-*+]\\s/.test(lines[i]) &&\n !/^\\d+\\.\\s/.test(lines[i]) &&\n !/^(-{3,}|\\*{3,}|_{3,})\\s*$/.test(lines[i])\n ) {\n paraLines.push(lines[i]);\n i++;\n }\n if (paraLines.length > 0) {\n blocks.push({ type: \"paragraph\", content: paraLines.join(\"\\n\") });\n }\n }\n\n return blocks;\n}\n\n/* ─── Inline formatting ───────────────────────────────────────────── */\n\nfunction renderInline(text: string): ReactNode[] {\n const parts: ReactNode[] = [];\n // Process bold, italic, code, and links\n const regex =\n /(\\*\\*(.+?)\\*\\*)|(\\*(.+?)\\*)|(`(.+?)`)|(\\[(.+?)\\]\\((.+?)\\))/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(text)) !== null) {\n // Text before match\n if (match.index > lastIndex) {\n parts.push(text.slice(lastIndex, match.index));\n }\n\n if (match[1]) {\n // Bold\n parts.push(\n <strong key={match.index} className=\"font-semibold\">\n {match[2]}\n </strong>,\n );\n } else if (match[3]) {\n // Italic\n parts.push(\n <em key={match.index} className=\"italic\">\n {match[4]}\n </em>,\n );\n } else if (match[5]) {\n // Inline code\n parts.push(\n <code\n key={match.index}\n className=\"rounded bg-gray-100 px-1.5 py-0.5 text-[0.85em] font-mono text-gray-800\"\n >\n {match[6]}\n </code>,\n );\n } else if (match[7]) {\n // Link\n parts.push(\n <a\n key={match.index}\n href={match[9]}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-[#6C5CE7] underline underline-offset-2 hover:text-[#5A4BD1]\"\n >\n {match[8]}\n </a>,\n );\n }\n\n lastIndex = match.index + match[0].length;\n }\n\n // Remaining text\n if (lastIndex < text.length) {\n parts.push(text.slice(lastIndex));\n }\n\n return parts.length > 0 ? parts : [text];\n}\n\n/* ─── Component ───────────────────────────────────────────────────── */\n\nexport interface MarkdownRendererProps extends HTMLAttributes<HTMLDivElement> {\n /** Markdown text to render */\n content: string;\n /** Custom code block renderer */\n renderCode?: (code: string, lang?: string) => ReactNode;\n}\n\nexport const MarkdownRenderer = forwardRef<\n HTMLDivElement,\n MarkdownRendererProps\n>(({ content, renderCode, className, ...props }, ref) => {\n const blocks = useMemo(() => parseMarkdown(content), [content]);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-markdown space-y-4 text-sm leading-relaxed text-gray-700\",\n className,\n )}\n {...props}\n >\n {blocks.map((block, i) => {\n switch (block.type) {\n case \"heading\": {\n const Tag = `h${block.level}` as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n return (\n <Tag\n key={i}\n className={cn(\n \"font-semibold text-gray-900\",\n block.level === 1 && \"text-2xl\",\n block.level === 2 && \"text-xl\",\n block.level === 3 && \"text-lg\",\n (block.level ?? 4) >= 4 && \"text-base\",\n )}\n >\n {renderInline(block.content)}\n </Tag>\n );\n }\n\n case \"paragraph\":\n return (\n <p key={i}>{renderInline(block.content)}</p>\n );\n\n case \"code\":\n if (renderCode) {\n return (\n <div key={i}>{renderCode(block.content, block.lang)}</div>\n );\n }\n return (\n <div\n key={i}\n className=\"overflow-hidden rounded-xl border border-gray-200 bg-gray-50\"\n >\n {block.lang && (\n <div className=\"border-b border-gray-200 bg-gray-50 px-4 py-1.5 text-[11px] font-medium uppercase tracking-wider text-gray-400\">\n {block.lang}\n </div>\n )}\n <pre className=\"overflow-x-auto p-4 text-[13px] leading-relaxed\">\n <code className=\"font-mono text-gray-800\">\n {block.content}\n </code>\n </pre>\n </div>\n );\n\n case \"list\": {\n const Tag = block.ordered ? \"ol\" : \"ul\";\n return (\n <Tag\n key={i}\n className={cn(\n \"space-y-1 pl-6\",\n block.ordered ? \"list-decimal\" : \"list-disc\",\n )}\n >\n {block.items?.map((item, j) => (\n <li key={j} className=\"text-gray-700\">\n {renderInline(item)}\n </li>\n ))}\n </Tag>\n );\n }\n\n case \"blockquote\":\n return (\n <blockquote\n key={i}\n className=\"border-l-3 border-gray-300 pl-4 text-gray-500 italic\"\n >\n {renderInline(block.content)}\n </blockquote>\n );\n\n case \"hr\":\n return <hr key={i} className=\"border-gray-200\" />;\n\n default:\n return null;\n }\n })}\n </div>\n );\n});\nMarkdownRenderer.displayName = \"MarkdownRenderer\";\n","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\nexport type StatusIndicatorState =\n | \"idle\"\n | \"thinking\"\n | \"streaming\"\n | \"tool-calling\"\n | \"error\";\n\n/* ─── Component ───────────────────────────────────────────────────── */\n\nexport interface StatusIndicatorProps extends HTMLAttributes<HTMLSpanElement> {\n /** Current state */\n state?: StatusIndicatorState;\n /** Custom label. Default: auto from state */\n label?: string;\n /** Custom icon element */\n icon?: ReactNode;\n /** Color scheme. Default: auto from state */\n color?: \"purple\" | \"amber\" | \"blue\" | \"red\" | \"gray\";\n /** Animation style. \"pulse\" = fade in/out, \"sweep\" = light moves letter by letter. Default: \"sweep\" */\n animation?: \"pulse\" | \"sweep\";\n}\n\nconst stateDefaults: Record<\n StatusIndicatorState,\n { label: string; colorKey: string }\n> = {\n idle: { label: \"Ready\", colorKey: \"gray\" },\n thinking: { label: \"Thinking...\", colorKey: \"amber\" },\n streaming: { label: \"Writing...\", colorKey: \"purple\" },\n \"tool-calling\": { label: \"Using tools...\", colorKey: \"blue\" },\n error: { label: \"Error\", colorKey: \"red\" },\n};\n\nconst colorMap: Record<string, { base: string; bright: string }> = {\n purple: { base: themeVars.accent, bright: \"var(--arclo-accent-bright, rgb(167,139,250))\" },\n amber: { base: \"rgb(217,119,6)\", bright: \"rgb(251,191,36)\" },\n blue: { base: \"rgb(37,99,235)\", bright: \"rgb(96,165,250)\" },\n red: { base: \"rgb(239,68,68)\", bright: \"rgb(252,129,129)\" },\n gray: { base: \"rgb(156,163,175)\", bright: \"rgb(209,213,219)\" },\n};\n\nexport const StatusIndicator = forwardRef<HTMLSpanElement, StatusIndicatorProps>(\n (\n {\n state = \"idle\",\n label,\n icon,\n color,\n animation = \"sweep\",\n className,\n ...props\n },\n ref,\n ) => {\n const id = useId().replace(/:/g, \"\");\n const defaults = stateDefaults[state];\n const resolvedColor = color ?? defaults.colorKey;\n const colors = colorMap[resolvedColor] ?? colorMap.gray;\n const displayLabel = label ?? defaults.label;\n const isActive = state !== \"idle\" && state !== \"error\";\n\n return (\n <span\n ref={ref}\n data-state={state}\n className={cn(\n \"arclo-status-indicator inline-flex items-center gap-1.5 text-sm font-medium\",\n className,\n )}\n style={{ color: colors.base }}\n {...props}\n >\n {/* Scoped keyframes */}\n <style\n dangerouslySetInnerHTML={{\n __html: `\n@keyframes arclo-sweep-${id} {\n 0%, 100% { color: ${colors.base}; opacity: 0.5; }\n 50% { color: ${colors.bright}; opacity: 1; }\n}\n@keyframes arclo-pulse-${id} {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n@keyframes arclo-spin-${id} {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}`,\n }}\n />\n\n {/* Icon */}\n <span className=\"shrink-0\">\n {icon ?? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n style={\n isActive\n ? { animation: `arclo-spin-${id} 3s linear infinite` }\n : undefined\n }\n >\n <path d=\"M12 2l2.4 7.2H22l-6 4.8 2.4 7.2L12 16.4 5.6 21.2 8 14 2 9.2h7.6L12 2z\" />\n </svg>\n )}\n </span>\n\n {/* Label */}\n {isActive && animation === \"sweep\" ? (\n <span aria-label={displayLabel}>\n {displayLabel.split(\"\").map((char, i) => (\n <span\n key={i}\n style={{\n display: \"inline-block\",\n animation: `arclo-sweep-${id} 1.5s ease-in-out infinite`,\n animationDelay: `${i * 0.08}s`,\n }}\n >\n {char === \" \" ? \"\\u00A0\" : char}\n </span>\n ))}\n </span>\n ) : (\n <span\n style={\n isActive && animation === \"pulse\"\n ? {\n animation: `arclo-pulse-${id} 1.5s ease-in-out infinite`,\n }\n : undefined\n }\n >\n {displayLabel}\n </span>\n )}\n </span>\n );\n },\n);\nStatusIndicator.displayName = \"StatusIndicator\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Component ───────────────────────────────────────────────────── */\n\nexport interface TokenUsageProps extends HTMLAttributes<HTMLDivElement> {\n /** Number of input tokens used */\n inputTokens: number;\n /** Number of output tokens used */\n outputTokens: number;\n /** Maximum token budget */\n maxTokens: number;\n /** Cost in dollars (optional) */\n cost?: number;\n}\n\nfunction formatNumber(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(1)}k`;\n return n.toLocaleString();\n}\n\nexport const TokenUsage = forwardRef<HTMLDivElement, TokenUsageProps>(\n ({ inputTokens, outputTokens, maxTokens, cost, className, ...props }, ref) => {\n const total = inputTokens + outputTokens;\n const inputPct = maxTokens > 0 ? (inputTokens / maxTokens) * 100 : 0;\n const outputPct = maxTokens > 0 ? (outputTokens / maxTokens) * 100 : 0;\n const totalPct = Math.min(inputPct + outputPct, 100);\n\n const isHigh = totalPct > 80;\n const isMedium = totalPct > 50 && totalPct <= 80;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-token-usage rounded-lg border border-gray-200 bg-white p-4\",\n className,\n )}\n {...props}\n >\n {/* Labels row */}\n <div className=\"mb-2 flex items-center justify-between text-xs text-gray-500\">\n <span className=\"font-medium text-gray-700\">\n {formatNumber(total)}{\" \"}\n <span className=\"font-normal text-gray-400\">\n / {formatNumber(maxTokens)} tokens\n </span>\n </span>\n {cost != null && (\n <span className=\"font-medium text-gray-600\">\n ${cost.toFixed(4)}\n </span>\n )}\n </div>\n\n {/* Bar */}\n <div className=\"relative h-2.5 w-full overflow-hidden rounded-full bg-gray-100\">\n {/* Input portion */}\n <div\n className={cn(\n \"absolute inset-y-0 left-0 rounded-l-full transition-all duration-300\",\n isHigh ? \"bg-red-400\" : isMedium ? \"bg-amber-400\" : \"bg-blue-400\",\n )}\n style={{ width: `${Math.min(inputPct, 100)}%` }}\n />\n {/* Output portion */}\n <div\n className={cn(\n \"absolute inset-y-0 transition-all duration-300\",\n isHigh\n ? \"bg-red-300\"\n : isMedium\n ? \"bg-amber-300\"\n : \"bg-violet-400\",\n outputPct > 0 && inputPct + outputPct >= 100 && \"rounded-r-full\",\n )}\n style={{\n left: `${Math.min(inputPct, 100)}%`,\n width: `${Math.min(outputPct, 100 - Math.min(inputPct, 100))}%`,\n }}\n />\n </div>\n\n {/* Legend */}\n <div className=\"mt-2 flex items-center gap-4 text-[11px] text-gray-500\">\n <span className=\"flex items-center gap-1.5\">\n <span\n className={cn(\n \"inline-block h-2 w-2 rounded-full\",\n isHigh ? \"bg-red-400\" : isMedium ? \"bg-amber-400\" : \"bg-blue-400\",\n )}\n />\n Input: {formatNumber(inputTokens)}\n </span>\n <span className=\"flex items-center gap-1.5\">\n <span\n className={cn(\n \"inline-block h-2 w-2 rounded-full\",\n isHigh\n ? \"bg-red-300\"\n : isMedium\n ? \"bg-amber-300\"\n : \"bg-violet-400\",\n )}\n />\n Output: {formatNumber(outputTokens)}\n </span>\n </div>\n </div>\n );\n },\n);\nTokenUsage.displayName = \"TokenUsage\";\n","\"use client\";\n\nimport {\n forwardRef,\n useState,\n useRef,\n useEffect,\n type HTMLAttributes,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\nexport interface ModelOption {\n /** Unique model identifier */\n id: string;\n /** Display name */\n name: string;\n /** Optional description shown in dropdown */\n description?: string;\n /** Optional badge text (e.g. \"New\", \"Fast\") */\n badge?: string;\n}\n\n/* ─── Component ───────────────────────────────────────────────────── */\n\nexport interface ModelSelectorProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n /** Available models */\n models: ModelOption[];\n /** Currently selected model id */\n value: string;\n /** Called when user selects a model */\n onChange: (modelId: string) => void;\n}\n\nexport const ModelSelector = forwardRef<HTMLDivElement, ModelSelectorProps>(\n ({ models, value, onChange, className, ...props }, ref) => {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const selected = models.find((m) => m.id === value);\n\n // Close on outside click\n useEffect(() => {\n if (!open) return;\n function handleClick(e: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [open]);\n\n // Close on Escape\n useEffect(() => {\n if (!open) return;\n function handleKey(e: KeyboardEvent) {\n if (e.key === \"Escape\") setOpen(false);\n }\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [open]);\n\n return (\n <div\n ref={ref}\n className={cn(\"arclo-model-selector relative inline-block\", className)}\n {...props}\n >\n <div ref={containerRef}>\n {/* Trigger */}\n <button\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n className=\"cursor-pointer inline-flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"shrink-0 text-gray-400\"\n >\n <path d=\"M12 2l2.4 7.2H22l-6 4.8 2.4 7.2L12 16.4 5.6 21.2 8 14 2 9.2h7.6L12 2z\" />\n </svg>\n <span>{selected?.name ?? value}</span>\n {selected?.badge && (\n <span className=\"rounded-full bg-[#6C5CE7]/10 px-2 py-0.5 text-[10px] font-semibold text-[#6C5CE7]\">\n {selected.badge}\n </span>\n )}\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(\n \"shrink-0 text-gray-400 transition-transform\",\n open && \"rotate-180\",\n )}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n\n {/* Dropdown */}\n {open && (\n <div\n role=\"listbox\"\n className=\"absolute left-0 z-50 mt-1 w-72 overflow-hidden rounded-xl border border-gray-200 bg-white shadow-lg\"\n >\n {models.map((model) => {\n const isSelected = model.id === value;\n return (\n <button\n key={model.id}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => {\n onChange(model.id);\n setOpen(false);\n }}\n className={cn(\n \"cursor-pointer flex w-full items-start gap-3 px-4 py-3 text-left transition-colors hover:bg-gray-50\",\n isSelected && \"bg-gray-50\",\n )}\n >\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium text-gray-800\">\n {model.name}\n </span>\n {model.badge && (\n <span className=\"rounded-full bg-[#6C5CE7]/10 px-2 py-0.5 text-[10px] font-semibold text-[#6C5CE7]\">\n {model.badge}\n </span>\n )}\n </div>\n {model.description && (\n <p className=\"mt-0.5 text-xs text-gray-400 truncate\">\n {model.description}\n </p>\n )}\n </div>\n {isSelected && (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"mt-0.5 shrink-0 text-[#6C5CE7]\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\nModelSelector.displayName = \"ModelSelector\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Component ───────────────────────────────────────────────────── */\n\nexport interface SourceCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Source title */\n title: string;\n /** Source URL (optional) */\n url?: string;\n /** Preview text content */\n content: string;\n /** Relevance score from 0 to 1 */\n relevance: number;\n /** Display variant */\n variant?: \"compact\" | \"full\";\n}\n\nfunction relevanceColor(score: number): { bar: string; text: string } {\n if (score >= 0.8) return { bar: \"bg-emerald-400\", text: \"text-emerald-600\" };\n if (score >= 0.5) return { bar: \"bg-amber-400\", text: \"text-amber-600\" };\n return { bar: \"bg-red-400\", text: \"text-red-600\" };\n}\n\nfunction relevanceLabel(score: number): string {\n if (score >= 0.8) return \"High\";\n if (score >= 0.5) return \"Medium\";\n return \"Low\";\n}\n\nexport const SourceCard = forwardRef<HTMLDivElement, SourceCardProps>(\n (\n { title, url, content, relevance, variant = \"full\", className, ...props },\n ref,\n ) => {\n const colors = relevanceColor(relevance);\n const pct = Math.round(relevance * 100);\n\n if (variant === \"compact\") {\n return (\n <div\n ref={ref}\n data-variant=\"compact\"\n className={cn(\n \"arclo-source-card flex items-start gap-3 rounded-lg border border-gray-200 bg-white px-3 py-2.5\",\n className,\n )}\n {...props}\n >\n {/* Relevance dot */}\n <span\n className={cn(\"mt-1 inline-block h-2 w-2 shrink-0 rounded-full\", colors.bar)}\n title={`${pct}% relevance`}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n {url ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"truncate text-sm font-medium text-gray-800 hover:text-[#6C5CE7] hover:underline\"\n >\n {title}\n </a>\n ) : (\n <span className=\"truncate text-sm font-medium text-gray-800\">\n {title}\n </span>\n )}\n <span className={cn(\"shrink-0 text-[10px] font-semibold\", colors.text)}>\n {pct}%\n </span>\n </div>\n <p className=\"mt-0.5 truncate text-xs text-gray-400\">{content}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n data-variant=\"full\"\n className={cn(\n \"arclo-source-card overflow-hidden rounded-lg border border-gray-200 bg-white\",\n className,\n )}\n {...props}\n >\n {/* Relevance bar */}\n <div className=\"relative h-1.5 w-full bg-gray-100\">\n <div\n className={cn(\"absolute inset-y-0 left-0 transition-all duration-300\", colors.bar)}\n style={{ width: `${pct}%` }}\n />\n </div>\n\n <div className=\"p-4\">\n {/* Header */}\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0 flex-1\">\n {url ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm font-medium text-gray-800 hover:text-[#6C5CE7] hover:underline\"\n >\n {title}\n </a>\n ) : (\n <span className=\"text-sm font-medium text-gray-800\">\n {title}\n </span>\n )}\n {url && (\n <p className=\"mt-0.5 truncate text-xs text-gray-400\">{url}</p>\n )}\n </div>\n <span\n className={cn(\n \"shrink-0 rounded-full border px-2 py-0.5 text-[10px] font-semibold\",\n relevance >= 0.8 && \"border-emerald-200 bg-emerald-50 text-emerald-700\",\n relevance >= 0.5 && relevance < 0.8 && \"border-amber-200 bg-amber-50 text-amber-700\",\n relevance < 0.5 && \"border-red-200 bg-red-50 text-red-700\",\n )}\n >\n {relevanceLabel(relevance)} {pct}%\n </span>\n </div>\n\n {/* Content preview */}\n <p className=\"mt-2 line-clamp-3 text-sm leading-relaxed text-gray-500\">\n {content}\n </p>\n </div>\n </div>\n );\n },\n);\nSourceCard.displayName = \"SourceCard\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── Types ───────────────────────────────────────────────────────── */\n\nexport type FileAttachmentType =\n | \"image\"\n | \"pdf\"\n | \"code\"\n | \"text\"\n | \"csv\"\n | \"other\";\n\n/* ─── Icons ──────────────────────────────────────────────────────── */\n\nfunction FileIcon({\n type,\n className,\n}: {\n type: FileAttachmentType;\n className?: string;\n}) {\n const base = cn(\"shrink-0\", className);\n\n if (type === \"image\") {\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <path d=\"m21 15-5-5L5 21\" />\n </svg>\n );\n }\n\n if (type === \"pdf\") {\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"M9 15v-1h2a1 1 0 0 1 0 2H9\" />\n </svg>\n );\n }\n\n if (type === \"code\") {\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"m10 13-2 2 2 2\" />\n <path d=\"m14 17 2-2-2-2\" />\n </svg>\n );\n }\n\n if (type === \"csv\") {\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"M8 15h8\" />\n <path d=\"M8 11h8\" />\n <path d=\"M12 11v8\" />\n </svg>\n );\n }\n\n if (type === \"text\") {\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" />\n <path d=\"M14 2v6h6\" />\n <path d=\"M16 13H8\" />\n <path d=\"M16 17H8\" />\n <path d=\"M10 9H8\" />\n </svg>\n );\n }\n\n // \"other\"\n return (\n <svg\n className={base}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" />\n <path d=\"M14 2v6h6\" />\n </svg>\n );\n}\n\n/* ─── FileAttachment ─────────────────────────────────────────────── */\n\nexport interface FileAttachmentProps extends HTMLAttributes<HTMLDivElement> {\n /** File name */\n name: string;\n /** Human-readable file size, e.g. \"2.4 MB\" */\n size?: string;\n /** File type — determines the icon */\n type?: FileAttachmentType;\n /** Image URL for thumbnail preview (card variant) */\n preview?: string;\n /** Upload progress 0-100 — shows progress bar when present */\n progress?: number;\n /** Called when remove button is clicked */\n onRemove?: () => void;\n /** Display variant */\n variant?: \"chip\" | \"card\";\n}\n\nexport const FileAttachment = forwardRef<HTMLDivElement, FileAttachmentProps>(\n (\n {\n name,\n size,\n type = \"other\",\n preview,\n progress,\n onRemove,\n variant = \"chip\",\n className,\n ...props\n },\n ref,\n ) => {\n if (variant === \"card\") {\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-file-attachment-card group relative inline-flex w-48 flex-col overflow-hidden rounded-xl border border-gray-200 bg-white\",\n className,\n )}\n {...props}\n >\n {/* Preview area */}\n <div className=\"relative flex h-28 items-center justify-center bg-gray-50\">\n {preview ? (\n <img\n src={preview}\n alt={name}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <FileIcon type={type} className=\"h-10 w-10 text-gray-300\" />\n )}\n {onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label={`Remove ${name}`}\n className=\"absolute right-1.5 top-1.5 flex h-6 w-6 items-center justify-center rounded-full bg-black/50 text-white opacity-0 transition-opacity hover:bg-black/70 group-hover:opacity-100 cursor-pointer\"\n >\n <svg\n className=\"h-3 w-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n >\n <path d=\"m18 6-12 12M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* Info */}\n <div className=\"flex flex-col gap-0.5 px-3 py-2\">\n <span className=\"truncate text-xs font-medium text-gray-700\">\n {name}\n </span>\n {size && (\n <span className=\"text-[10px] text-gray-400\">{size}</span>\n )}\n </div>\n\n {/* Progress bar */}\n {progress != null && (\n <div className=\"h-1 w-full bg-gray-100\">\n <div\n className=\"h-full rounded-r-full bg-[#6C5CE7] transition-all duration-300\"\n style={{ width: `${Math.min(100, Math.max(0, progress))}%` }}\n />\n </div>\n )}\n </div>\n );\n }\n\n // chip variant (default)\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-file-attachment-chip group inline-flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2\",\n className,\n )}\n {...props}\n >\n <FileIcon type={type} className=\"h-4 w-4 text-gray-400\" />\n\n <div className=\"flex min-w-0 flex-col\">\n <span className=\"truncate text-xs font-medium text-gray-700\">\n {name}\n </span>\n {(size || progress != null) && (\n <div className=\"flex items-center gap-2\">\n {size && (\n <span className=\"text-[10px] text-gray-400\">{size}</span>\n )}\n {progress != null && (\n <div className=\"h-1 w-16 rounded-full bg-gray-100\">\n <div\n className=\"h-full rounded-full bg-[#6C5CE7] transition-all duration-300\"\n style={{\n width: `${Math.min(100, Math.max(0, progress))}%`,\n }}\n />\n </div>\n )}\n </div>\n )}\n </div>\n\n {onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label={`Remove ${name}`}\n className=\"ml-1 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-gray-300 transition-colors hover:bg-gray-100 hover:text-gray-500 cursor-pointer\"\n >\n <svg\n className=\"h-3 w-3\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n >\n <path d=\"m18 6-12 12M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n );\n },\n);\nFileAttachment.displayName = \"FileAttachment\";\n","\"use client\";\n\nimport { forwardRef, useCallback, useState, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── CodeBlock ──────────────────────────────────────────────────── */\n\nexport interface CodeBlockProps extends HTMLAttributes<HTMLDivElement> {\n /** The code string to display */\n code: string;\n /** Language label shown in the header */\n language?: string;\n /** Show line numbers. Default: false */\n showLineNumbers?: boolean;\n /** Max height before scroll. Default: \"400px\" */\n maxHeight?: string;\n /** Called when the copy button is clicked */\n onCopy?: () => void;\n}\n\nexport const CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(\n (\n {\n code,\n language,\n showLineNumbers = false,\n maxHeight = \"400px\",\n onCopy,\n className,\n ...props\n },\n ref,\n ) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n navigator.clipboard.writeText(code).then(() => {\n setCopied(true);\n onCopy?.();\n setTimeout(() => setCopied(false), 2000);\n });\n }, [code, onCopy]);\n\n const lines = code.split(\"\\n\");\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-code-block overflow-hidden rounded-xl border\",\n className,\n )}\n style={{\n backgroundColor: themeVars.surfaceSecondary,\n borderColor: themeVars.border,\n }}\n {...props}\n >\n {/* Header bar */}\n <div\n className=\"flex items-center justify-between px-4 py-2\"\n style={{ borderBottom: `1px solid ${themeVars.border}` }}\n >\n <span\n className=\"text-[11px] font-medium uppercase tracking-wider\"\n style={{ color: themeVars.textMuted }}\n >\n {language ?? \"code\"}\n </span>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"flex items-center gap-1.5 rounded-md px-2 py-1 text-[11px] transition-colors cursor-pointer\"\n style={{ color: themeVars.textMuted }}\n >\n {copied ? (\n <>\n <svg\n className=\"h-3.5 w-3.5\"\n style={{ color: \"#10b981\" }}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n Copied\n </>\n ) : (\n <>\n <svg\n className=\"h-3.5 w-3.5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n Copy\n </>\n )}\n </button>\n </div>\n\n {/* Code area */}\n <div\n className=\"overflow-auto [scrollbar-width:thin] [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:rounded-full\"\n style={{\n maxHeight,\n scrollbarColor: `${themeVars.border} transparent`,\n }}\n >\n <pre className=\"p-4 text-[13px] leading-relaxed\">\n <code className=\"font-mono\" style={{ color: themeVars.text }}>\n {lines.map((line, i) => (\n <div key={i} className=\"flex\">\n {showLineNumbers && (\n <span\n className=\"mr-4 inline-block w-8 shrink-0 select-none text-right\"\n style={{ color: themeVars.textMuted }}\n >\n {i + 1}\n </span>\n )}\n <span className=\"flex-1\">{line || \"\\n\"}</span>\n </div>\n ))}\n </code>\n </pre>\n </div>\n </div>\n );\n },\n);\nCodeBlock.displayName = \"CodeBlock\";\n","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/* ─── ConversationBranch ─────────────────────────────────────────── */\n\nexport interface ConversationBranchProps\n extends HTMLAttributes<HTMLDivElement> {\n /** Current branch index (1-indexed) */\n current: number;\n /** Total number of branches */\n total: number;\n /** Called when navigating to the previous branch */\n onPrevious?: () => void;\n /** Called when navigating to the next branch */\n onNext?: () => void;\n}\n\nexport const ConversationBranch = forwardRef<\n HTMLDivElement,\n ConversationBranchProps\n>(({ current, total, onPrevious, onNext, className, ...props }, ref) => {\n const atStart = current <= 1;\n const atEnd = current >= total;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-conversation-branch inline-flex items-center gap-1 rounded-lg border border-gray-200 bg-white\",\n className,\n )}\n {...props}\n >\n {/* Previous button */}\n <button\n type=\"button\"\n onClick={onPrevious}\n disabled={atStart}\n aria-label=\"Previous branch\"\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-l-lg transition-colors cursor-pointer\",\n atStart\n ? \"cursor-not-allowed text-gray-200\"\n : \"text-gray-400 hover:bg-gray-50 hover:text-gray-600\",\n )}\n >\n <svg\n className=\"h-3.5 w-3.5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n </button>\n\n {/* Label */}\n <span className=\"select-none px-1 text-xs font-medium tabular-nums text-gray-500\">\n {current}/{total}\n </span>\n\n {/* Next button */}\n <button\n type=\"button\"\n onClick={onNext}\n disabled={atEnd}\n aria-label=\"Next branch\"\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-r-lg transition-colors cursor-pointer\",\n atEnd\n ? \"cursor-not-allowed text-gray-200\"\n : \"text-gray-400 hover:bg-gray-50 hover:text-gray-600\",\n )}\n >\n <svg\n className=\"h-3.5 w-3.5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </button>\n </div>\n );\n});\nConversationBranch.displayName = \"ConversationBranch\";\n","\"use client\";\n\nimport {\n forwardRef,\n useRef,\n useCallback,\n type HTMLAttributes,\n type ReactNode,\n type MouseEvent as ReactMouseEvent,\n} from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { themeVars } from \"../lib/theme\";\n\n/* ─── TopicCard ───────────────────────────────────────────────────── */\n\nexport interface TopicCardProps extends Omit<HTMLAttributes<HTMLButtonElement>, \"onSelect\"> {\n /** Card title / prompt summary */\n title: string;\n /** Optional description or subtitle (hidden in compact mode) */\n description?: string;\n /** Optional icon element */\n icon?: ReactNode;\n /** Called when the card is clicked */\n onSelect?: (title: string) => void;\n /** Visual variant — set automatically by SuggestTopics, but can be overridden */\n variant?: \"card\" | \"compact\";\n}\n\nexport const TopicCard = forwardRef<HTMLButtonElement, TopicCardProps>(\n ({ title, description, icon, onSelect, variant = \"card\", className, ...props }, ref) => {\n if (variant === \"compact\") {\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={() => onSelect?.(title)}\n className={cn(\n \"arclo-topic-card inline-flex shrink-0 items-center gap-2 rounded-full border px-3.5 py-2 text-left transition-all cursor-pointer\",\n \"hover:shadow-sm\",\n className,\n )}\n style={{\n backgroundColor: themeVars.surface,\n borderColor: themeVars.border,\n }}\n {...props}\n >\n {icon && (\n <span className=\"shrink-0 text-sm\">{icon}</span>\n )}\n <span\n className=\"text-xs font-medium whitespace-nowrap\"\n style={{ color: themeVars.text }}\n >\n {title}\n </span>\n </button>\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={() => onSelect?.(title)}\n className={cn(\n \"arclo-topic-card group flex w-full items-start gap-3 rounded-xl border p-4 text-left transition-all cursor-pointer\",\n \"hover:scale-[1.01] hover:shadow-sm\",\n className,\n )}\n style={{\n backgroundColor: themeVars.surface,\n borderColor: themeVars.border,\n }}\n {...props}\n >\n {icon && (\n <span\n className=\"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-lg text-sm\"\n style={{\n backgroundColor: `color-mix(in srgb, ${themeVars.accent} 10%, transparent)`,\n color: themeVars.accent,\n }}\n >\n {icon}\n </span>\n )}\n <div className=\"min-w-0 flex-1\">\n <p\n className=\"text-sm font-medium leading-snug\"\n style={{ color: themeVars.text }}\n >\n {title}\n </p>\n {description && (\n <p\n className=\"mt-1 text-xs leading-relaxed\"\n style={{ color: themeVars.textMuted }}\n >\n {description}\n </p>\n )}\n </div>\n <svg\n className=\"mt-1 h-4 w-4 shrink-0 opacity-0 transition-opacity group-hover:opacity-100\"\n style={{ color: themeVars.textMuted }}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M5 12h14M12 5l7 7-7 7\" />\n </svg>\n </button>\n );\n },\n);\nTopicCard.displayName = \"TopicCard\";\n\n/* ─── SuggestTopics ───────────────────────────────────────────────── */\n\nexport interface SuggestTopicsProps extends HTMLAttributes<HTMLDivElement> {\n /** Layout variant. \"grid\" for cards, \"compact\" for horizontal scroll pills. Default: \"grid\" */\n variant?: \"grid\" | \"compact\";\n /** Number of columns (grid variant only). Default: 2 */\n columns?: 1 | 2 | 3;\n children: ReactNode;\n}\n\nexport const SuggestTopics = forwardRef<HTMLDivElement, SuggestTopicsProps>(\n ({ variant = \"grid\", columns = 2, children, className, ...props }, ref) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n const isDragging = useRef(false);\n const startX = useRef(0);\n const scrollLeft = useRef(0);\n const hasDragged = useRef(false);\n\n const onMouseDown = useCallback((e: ReactMouseEvent) => {\n const el = scrollRef.current;\n if (!el) return;\n isDragging.current = true;\n hasDragged.current = false;\n startX.current = e.pageX - el.offsetLeft;\n scrollLeft.current = el.scrollLeft;\n el.style.cursor = \"grabbing\";\n el.style.userSelect = \"none\";\n }, []);\n\n const onMouseMove = useCallback((e: ReactMouseEvent) => {\n if (!isDragging.current) return;\n const el = scrollRef.current;\n if (!el) return;\n e.preventDefault();\n const x = e.pageX - el.offsetLeft;\n const walk = (x - startX.current) * 1.5;\n if (Math.abs(walk) > 3) hasDragged.current = true;\n el.scrollLeft = scrollLeft.current - walk;\n }, []);\n\n const onMouseUp = useCallback(() => {\n isDragging.current = false;\n const el = scrollRef.current;\n if (el) {\n el.style.cursor = \"grab\";\n el.style.userSelect = \"\";\n }\n }, []);\n\n const onClickCapture = useCallback((e: ReactMouseEvent) => {\n // Prevent click on children if we were dragging\n if (hasDragged.current) {\n e.stopPropagation();\n e.preventDefault();\n hasDragged.current = false;\n }\n }, []);\n\n if (variant === \"compact\") {\n return (\n <div\n ref={(node) => {\n (scrollRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={cn(\n \"arclo-suggest-topics\",\n className,\n )}\n style={{\n display: \"flex\",\n gap: \"0.5rem\",\n overflowX: \"auto\",\n cursor: \"grab\",\n scrollbarWidth: \"none\",\n msOverflowStyle: \"none\",\n }}\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMove}\n onMouseUp={onMouseUp}\n onMouseLeave={onMouseUp}\n onClickCapture={onClickCapture}\n {...props}\n >\n {children}\n <style dangerouslySetInnerHTML={{ __html: `.arclo-suggest-topics::-webkit-scrollbar { display: none; }` }} />\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"arclo-suggest-topics grid gap-3\",\n columns === 1 && \"grid-cols-1\",\n columns === 2 && \"grid-cols-1 sm:grid-cols-2\",\n columns === 3 && \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nSuggestTopics.displayName = \"SuggestTopics\";\n"]}