@ai-matrx/design-system 0.18.1 → 0.18.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/CHANGELOG.md +25 -0
- package/dist/content-transfer.cjs +143 -34
- package/dist/content-transfer.cjs.map +1 -1
- package/dist/content-transfer.d.cts +5 -1
- package/dist/content-transfer.d.ts +5 -1
- package/dist/content-transfer.js +143 -34
- package/dist/content-transfer.js.map +1 -1
- package/dist/data-table/copy-types.cjs.map +1 -1
- package/dist/data-table/copy-types.d.cts +2 -0
- package/dist/data-table/copy-types.d.ts +2 -0
- package/dist/data-table/data-row-inspector.cjs +146 -36
- package/dist/data-table/data-row-inspector.cjs.map +1 -1
- package/dist/data-table/data-row-inspector.js +146 -36
- package/dist/data-table/data-row-inspector.js.map +1 -1
- package/dist/data-table/data-row-window.cjs +146 -36
- package/dist/data-table/data-row-window.cjs.map +1 -1
- package/dist/data-table/data-row-window.js +146 -36
- package/dist/data-table/data-row-window.js.map +1 -1
- package/dist/data-table/index.cjs +146 -36
- package/dist/data-table/index.cjs.map +1 -1
- package/dist/data-table/index.js +146 -36
- package/dist/data-table/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/content-transfer/index.tsx","../src/button.tsx","../src/cn.ts","../src/dialog.tsx","../src/motion.ts","../src/icons.tsx","../src/portal-container.tsx","../src/radix-dialog-modal-context.tsx","../src/use-is-mobile.ts","../src/dropdown-menu.tsx","../src/content-transfer/icon.ts","../src/content-transfer/matrx-copy.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n applySectionSelection,\n applyTransferLimits,\n capture,\n collectAllMatching,\n createBrowserTransport,\n createDraft,\n directSource,\n editDraft,\n projectSnapshot,\n readTransferCell,\n reduceJson,\n resetDraft,\n resolveTransferPreferences,\n resolveTransferRegistry,\n sealTransferArtifact,\n serialize,\n serializeMarkdownRich,\n transformRows,\n undoDraft,\n type AiPreparation,\n type Artifact,\n type BoundAllMatching,\n type Draft,\n type ExportProjection,\n type FormatAdapter,\n type Json,\n type PageAction,\n type Payload,\n type Section,\n type Snapshot,\n type Source,\n type SurfaceHandle,\n type TransferCapabilities,\n type TransferOutcome,\n type TransferPreferenceOverrides,\n type TransferPreferences,\n type TransferScope,\n type Transport,\n} from \"@ai-matrx/kit/content-transfer\";\nimport { Button } from \"../button\";\nimport { cn } from \"../cn\";\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from \"../dialog\";\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from \"../dropdown-menu\";\nexport { ALCHEMY_GLYPH_SVG } from \"./icon\";\n\nexport function AlchemyGlyph(props: React.SVGAttributes<SVGSVGElement>) {\n return <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\" {...props}><path d=\"M4.5 5.5h8v11h-8z\"/><path d=\"M8.5 9.5h8v9h-8z\"/><path d=\"m18.5 3 .65 1.85L21 5.5l-1.85.65L18.5 8l-.65-1.85L16 5.5l1.85-.65z\"/></svg>;\n}\n\nexport type ContentTransferCapabilities = TransferCapabilities & {\n transport?: Transport;\n actions?: PageAction[];\n preferences?: TransferPreferenceOverrides;\n onOutcome?: (outcome: TransferOutcome) => void;\n};\nconst CapabilityContext = React.createContext<ContentTransferCapabilities>({});\nexport function ContentTransferCapabilitiesProvider({ value, children }: { value: ContentTransferCapabilities; children: React.ReactNode }) {\n return <CapabilityContext.Provider value={value}>{children}</CapabilityContext.Provider>;\n}\nexport const useContentTransferCapabilities = () => React.useContext(CapabilityContext);\nconst SurfaceContext = React.createContext<SurfaceHandle | null>(null);\nexport function ContentTransferSurfaceProvider({ handle, children }: { handle: SurfaceHandle; children: React.ReactNode }) {\n return <SurfaceContext.Provider value={handle}>{children}</SurfaceContext.Provider>;\n}\nexport const useContentTransferSurface = () => React.useContext(SurfaceContext);\n\nexport type SerializableFormat = \"plain\" | \"markdown\" | \"html\" | \"json\" | \"compact-json\" | \"csv\" | \"tsv\";\ntype BuiltInFormat = SerializableFormat | \"xlsx\";\nexport interface TransferMenuPresentation {\n hint?: string;\n icon?: React.ComponentType<{ className?: string }>;\n ariaLabel?: string;\n}\nexport interface TransferMenuVariant extends TransferMenuPresentation {\n id: string; label: string; source: Source | Payload;\n copyLabel?: string;\n section?: \"copy\" | \"ai\";\n successMessage?: string;\n}\nfunction MenuPresentation({ label, hint, icon: Icon }: TransferMenuPresentation & { label: string }) {\n return <>{Icon ? <Icon className=\"matrx-alchemy-menu-icon\"/> : null}<span>{label}{hint ? <small className=\"matrx-alchemy-menu-hint\">{hint}</small> : null}</span></>;\n}\nexport interface ContentTransferMenuProps {\n source?: Payload | Source;\n projection?: ExportProjection;\n sections?: Section[];\n preferences?: TransferPreferenceOverrides;\n enabled?: boolean;\n surface?: SurfaceHandle;\n label?: string;\n table?: { availableScopes: TransferScope[]; initialScope: TransferScope };\n /** A quick format may explicitly capture a different representation. */\n formatSources?: Partial<Record<SerializableFormat, Source | Payload>>;\n /** Named alternate sources open this same preparation workspace. */\n variants?: readonly TransferMenuVariant[];\n actions?: (PageAction & TransferMenuPresentation)[];\n capabilities?: ContentTransferCapabilities;\n disabled?: boolean;\n className?: string;\n stopPropagation?: boolean;\n hide?: readonly (\"copy\" | \"prepare\" | \"download\")[];\n controllerRef?: React.Ref<ContentTransferController>;\n}\nexport interface ContentTransferController {\n focusTrigger(): void;\n prepare(source: Source | Payload, options?: { id?: string; label?: string }): Promise<void>;\n}\n\nconst LABEL: Record<BuiltInFormat, string> = { plain: \"Plain text\", markdown: \"Markdown\", html: \"Formatted\", json: \"JSON\", \"compact-json\": \"Compact JSON\", csv: \"CSV\", tsv: \"Google Sheets\", xlsx: \"Excel workbook\" };\nconst BUILT_INS = Object.freeze((Object.keys(LABEL) as BuiltInFormat[]).map((id) => ({ id })));\nconst COPIES: SerializableFormat[] = [\"plain\", \"markdown\", \"html\", \"json\", \"compact-json\", \"csv\", \"tsv\"];\nconst DOWNLOADS: BuiltInFormat[] = [...COPIES, \"xlsx\"];\nconst EMPTY_VARIANTS: readonly { id: string; label: string; source: Source | Payload }[] = [];\nconst SCOPE_LABEL: Record<TransferScope, string> = { target: \"This content\", row: \"This row\", selected: \"Selected rows\", view: \"Current view\", loaded: \"Loaded rows\", \"all-matching\": \"All matching rows\" };\nconst filenameFor = (label: string) => label.toLocaleLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/(^-|-$)/g, \"\") || \"export\";\nconst estimateTokens = (text: string) => Math.ceil(text.length / 4);\nconst errorMessage = (error: unknown, fallback: string) => error instanceof Error ? error.message : fallback;\nconst isAbort = (error: unknown) => error instanceof DOMException && error.name === \"AbortError\";\nconst supportsBuiltIn = (format: BuiltInFormat, payload: Payload) => ![\"csv\", \"tsv\", \"xlsx\"].includes(format) || payload.kind === \"rows\";\nconst outcomeMessage = (result: TransferOutcome) => {\n if (result.status === \"success\") {\n const success = result as TransferOutcome & { delivered: string; message?: string };\n return success.delivered === \"action\" ? success.message ?? \"Action completed\" : success.delivered === \"download-started\" ? \"Download started\" : success.message ?? \"Copied\";\n }\n return result.status === \"degraded\" ? `Copied as plain text: ${result.reason}` : result.status === \"cancelled\" ? \"Cancelled\" : result.message;\n};\nconst materialIds = new WeakMap<object, number>();\nlet nextMaterialId = 0;\nfunction materialIdentity(material: Source | Payload | SurfaceHandle | null | undefined) {\n if (!material) return \"missing\";\n if (\"instanceId\" in material) return `surface:${material.instanceId}`;\n if (\"id\" in material) return `source:${material.id}`;\n let id = materialIds.get(material);\n if (id === undefined) { id = ++nextMaterialId; materialIds.set(material, id); }\n return `payload:${id}`;\n}\n\ntype CaptureResult = { snapshot: Snapshot; allMatching?: BoundAllMatching; collectionError?: string };\ntype WorkspaceState = CaptureResult & { key: string; original: Draft; draft: Draft; scope: TransferScope; preferences: TransferPreferences; pending?: (CaptureResult & { scope: TransferScope }) | undefined; error?: string | undefined };\n\nfunction useFence() {\n const mounted = React.useRef(true);\n const nextId = React.useRef(0);\n const active = React.useRef(new Set<AbortController>());\n React.useEffect(() => {\n mounted.current = true;\n return () => { mounted.current = false; nextId.current += 1; active.current.forEach((c) => c.abort()); active.current.clear(); };\n }, []);\n const begin = React.useCallback(() => { const controller = new AbortController(); active.current.add(controller); return { controller, id: ++nextId.current }; }, []);\n const finish = React.useCallback((controller: AbortController) => active.current.delete(controller), []);\n const valid = React.useCallback((id: number, controller: AbortController) => mounted.current && !controller.signal.aborted && nextId.current === id, []);\n const abortAll = React.useCallback(() => { nextId.current += 1; active.current.forEach((c) => c.abort()); active.current.clear(); }, []);\n return { begin, finish, valid, abortAll };\n}\n\nasync function xlsxArtifact(draft: Draft, label: string): Promise<Artifact> {\n if (draft.payload.kind !== \"rows\") throw new Error(\"Excel workbook export requires tabular content.\");\n const XLSX = await import(\"xlsx\");\n const columns = draft.payload.columns.filter((c) => c.visible && c.exportable !== false && c.classification !== \"secret\" && c.classification !== \"credential\");\n const cells = draft.payload.rows.map((row) => columns.map((column) => {\n const value = readTransferCell(row, column);\n return value === null || [\"string\", \"number\", \"boolean\"].includes(typeof value) ? value : value === undefined ? \"\" : JSON.stringify(value);\n }));\n const sheet = XLSX.utils.aoa_to_sheet([columns.map((c) => c.label), ...cells]);\n const book = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(book, sheet, label.replace(/[\\\\/?*[\\]:]/g, \" \").trim().slice(0, 31) || \"Data\");\n const written = XLSX.write(book, { type: \"array\", bookType: \"xlsx\", compression: true });\n return sealTransferArtifact({ snapshotId: draft.snapshotId, draftRevision: draft.revision, format: \"xlsx\", plainText: serialize(draft, \"tsv\", { spreadsheetSafe: true }).plainText, file: { filename: `${filenameFor(label)}.xlsx`, mime: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\", bytes: written instanceof Uint8Array ? written : new Uint8Array(written) }, omissions: [...draft.omissions] });\n}\nasync function buildArtifact(draft: Draft, format: BuiltInFormat, label: string): Promise<Artifact> {\n if (!supportsBuiltIn(format, draft.payload)) throw new Error(`${LABEL[format]} is available for tabular content only.`);\n if (format === \"xlsx\") return xlsxArtifact(draft, label);\n if (format === \"html\" && draft.payload.kind === \"markdown\") return serializeMarkdownRich(draft, `${filenameFor(label)}.html`);\n const extension = format === \"plain\" ? \"txt\" : format === \"compact-json\" ? \"json\" : format;\n return serialize(draft, format, { spreadsheetSafe: format === \"csv\" || format === \"tsv\", filename: `${filenameFor(label)}.${extension}` });\n}\n\nexport function ContentTransferMenu({ source, surface, label, projection, sections, preferences, table, formatSources, variants = EMPTY_VARIANTS, actions = [], capabilities: local, disabled, enabled = true, className, stopPropagation = true, hide = [], controllerRef }: ContentTransferMenuProps) {\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const inherited = React.useContext(CapabilityContext);\n const nearestSurface = React.useContext(SurfaceContext);\n const fence = useFence();\n const [menuCapture, setMenuCapture] = React.useState<CaptureResult | null>(null);\n const [menuStatus, setMenuStatus] = React.useState<\"idle\" | \"loading\" | string>(\"idle\");\n const [workspaces, setWorkspaces] = React.useState<Record<string, WorkspaceState>>({});\n const [workspaceKey, setWorkspaceKey] = React.useState<string | null>(null);\n const [workspaceOpen, setWorkspaceOpen] = React.useState(false);\n const workspaceCaptures = React.useRef(new Map<string, (scope: TransferScope, signal: AbortSignal) => Promise<CaptureResult>>());\n const externalWorkspaceKeys = React.useRef(new Set<string>());\n const [notice, setNotice] = React.useState<string | null>(null);\n const scopes = React.useMemo(() => table?.availableScopes ?? ([\"target\"] as TransferScope[]), [table]);\n const initialScope = table?.initialScope ?? \"target\";\n if (!scopes.includes(initialScope)) throw new Error(\"Alchemy initialScope must be included in availableScopes.\");\n const primary = surface ?? source ?? nearestSurface;\n const sourceLabel = label ?? (surface?.surfaceName ?? (source && \"label\" in source ? source.label : nearestSurface?.surfaceName) ?? \"content\");\n const primaryWorkspaceKey = `primary:${materialIdentity(primary)}`;\n const nearestWorkspaceKey = source && !surface && nearestSurface ? `surface:${materialIdentity(nearestSurface)}` : null;\n const variantWorkspaceKeys = React.useMemo(() => new Map(variants.map((variant) => [variant.id, `variant:${variant.id}:${materialIdentity(variant.source)}`])), [variants]);\n const transport = local?.transport ?? inherited.transport ?? createBrowserTransport();\n const ai = local?.ai ?? inherited.ai;\n const providerPreferences = React.useMemo(() => resolveTransferPreferences(inherited.preferences, local?.preferences), [inherited.preferences, local?.preferences]);\n const adapters = React.useMemo(() => resolveTransferRegistry<{ id: string }>(BUILT_INS, inherited.formats ?? [], local?.formats ?? []).filter((x): x is FormatAdapter => \"build\" in x), [inherited.formats, local?.formats]);\n const registeredActions = React.useMemo(() => resolveTransferRegistry(inherited.actions ?? [], local?.actions ?? [], actions), [actions, inherited.actions, local?.actions]);\n React.useMemo(() => resolveTransferRegistry(variants), [variants]);\n const report = React.useCallback((result: TransferOutcome) => { inherited.onOutcome?.(result); local?.onOutcome?.(result); setNotice(outcomeMessage(result)); }, [inherited, local]);\n React.useEffect(() => {\n const valid = new Set([primaryWorkspaceKey, ...(nearestWorkspaceKey ? [nearestWorkspaceKey] : []), ...variantWorkspaceKeys.values(), ...externalWorkspaceKeys.current]);\n setWorkspaces((current) => Object.fromEntries(Object.entries(current).filter(([key]) => valid.has(key))));\n for (const key of workspaceCaptures.current.keys()) if (!valid.has(key)) workspaceCaptures.current.delete(key);\n if (workspaceKey && !valid.has(workspaceKey)) { setWorkspaceKey(null); setWorkspaceOpen(false); }\n }, [nearestWorkspaceKey, primaryWorkspaceKey, variantWorkspaceKeys, workspaceKey]);\n\n const captureOne = React.useCallback(async (material: Source | Payload | SurfaceHandle | null, scope: TransferScope, signal: AbortSignal, applyMenuProjection = false, collectPages = true): Promise<CaptureResult> => {\n if (!material) throw new Error(\"Alchemy needs a source or a mounted transfer surface.\");\n let sourceMaterial: Source | Payload;\n if (\"instanceId\" in material) {\n if (!material.isMounted()) throw new Error(\"The requested transfer surface is no longer mounted.\");\n const captured = await material.capture(signal);\n sourceMaterial = { id: captured.snapshot.sourceId, label: captured.snapshot.label, capture: async () => captured };\n } else if (\"kind\" in material) {\n sourceMaterial = applyMenuProjection ? { id: \"direct\", label: sourceLabel, capture: async () => directSource(material, { label: sourceLabel, ...(projection ? { projection } : {}), ...(sections ? { sections } : {}) }) } : material;\n } else if (applyMenuProjection && (projection || sections)) {\n sourceMaterial = {\n id: material.id,\n label: material.label,\n capture: async (request) => {\n const captured = await material.capture(request);\n return {\n ...captured,\n projection: { rules: [...captured.projection.rules, ...(projection?.rules ?? [])] },\n snapshot: { ...captured.snapshot, ...(sections ? { sections } : {}) },\n };\n },\n };\n } else {\n sourceMaterial = material;\n }\n const raw = \"kind\" in sourceMaterial ? directSource(sourceMaterial) : await sourceMaterial.capture({ scope, signal });\n const constrained = resolveTransferPreferences(providerPreferences, preferences, raw.snapshot.limits);\n const result = await capture({ id: raw.snapshot.sourceId, label: raw.snapshot.label, capture: async () => ({ ...raw, snapshot: { ...raw.snapshot, limits: constrained.limits } }) }, signal, scope);\n if (scope !== \"all-matching\" || !collectPages) return result;\n if (!result.allMatching) throw new Error(\"This source cannot provide a stable all-matching export.\");\n const collected = await collectAllMatching(result.allMatching, signal);\n if (result.snapshot.payload.kind !== \"rows\") throw new Error(\"All-matching export requires tabular content.\");\n return { snapshot: projectSnapshot({ ...result.snapshot, payload: { kind: \"rows\", rows: collected.rows, columns: result.snapshot.payload.columns }, coverage: collected.coverage, omissions: [...collected.omissions] }, { rules: [] }), allMatching: result.allMatching, ...(collected.error ? { collectionError: collected.error.message } : {}) };\n }, [preferences, projection, providerPreferences, sections, sourceLabel]);\n const capturePrimary = React.useCallback((scope: TransferScope, signal: AbortSignal) => captureOne(primary, scope, signal, true), [captureOne, primary]);\n workspaceCaptures.current.set(primaryWorkspaceKey, capturePrimary);\n if (nearestWorkspaceKey && nearestSurface) workspaceCaptures.current.set(nearestWorkspaceKey, (scope, signal) => captureOne(nearestSurface, scope, signal, true));\n for (const variant of variants) {\n const key = variantWorkspaceKeys.get(variant.id)!;\n workspaceCaptures.current.set(key, (scope, signal) => captureOne(variant.source, scope, signal, true));\n }\n\n const preflight = React.useCallback(async () => {\n const { controller, id } = fence.begin(); setMenuCapture(null); setMenuStatus(\"loading\");\n try { const result = await captureOne(primary, initialScope, controller.signal, true, false); if (fence.valid(id, controller)) { setMenuCapture(result); setMenuStatus(\"idle\"); } }\n catch (error) { if (fence.valid(id, controller)) { setMenuCapture(null); setMenuStatus(errorMessage(error, \"Could not inspect content\")); } }\n finally { fence.finish(controller); }\n }, [captureOne, fence, initialScope, primary]);\n\n const transfer = React.useCallback(async (format: BuiltInFormat | FormatAdapter, download: boolean, alternate?: TransferMenuVariant) => {\n const { controller, id } = fence.begin();\n try {\n const explicit = alternate?.source ?? (typeof format === \"string\" && format !== \"xlsx\" ? formatSources?.[format] : undefined);\n const result = await (explicit ? captureOne(explicit, initialScope, controller.signal, true) : capturePrimary(initialScope, controller.signal));\n if (result.collectionError) throw new Error(`The complete source could not be collected: ${result.collectionError}`);\n if (result.snapshot.coverage.status !== \"complete\" || result.snapshot.omissions.length > 0) {\n const reason = result.snapshot.coverage.reason ?? `${result.snapshot.omissions.length} omission${result.snapshot.omissions.length === 1 ? \"\" : \"s\"}`;\n throw new Error(`Quick transfer is partial (${reason}). Open Prepare for AI to review it before delivery.`);\n }\n const resolved = resolveTransferPreferences(providerPreferences, preferences, result.snapshot.limits);\n const draft = applyTransferLimits(createDraft(result.snapshot), resolved.limits); const revision = draft.revision;\n if (draft.omissions.length > result.snapshot.omissions.length) throw new Error(\"Quick transfer requires content reductions. Open Prepare for AI to review them before delivery.\");\n const artifact = typeof format === \"string\" ? await buildArtifact(draft, format, result.snapshot.label) : await format.build(draft, controller.signal);\n if (artifact.omissions.length > draft.omissions.length) throw new Error(`Quick format requires ${artifact.omissions.length - draft.omissions.length} adjustment${artifact.omissions.length - draft.omissions.length === 1 ? \"\" : \"s\"}. Open Prepare for AI to review before delivery.`);\n if (!fence.valid(id, controller) || artifact.snapshotId !== result.snapshot.id || artifact.draftRevision !== revision) return;\n const outcome = await transport[download ? \"download\" : \"copy\"](artifact, controller.signal);\n if (fence.valid(id, controller)) report(outcome.status === \"success\" && alternate?.successMessage ? { ...outcome, message: alternate.successMessage } : outcome);\n } catch (error) { if (fence.valid(id, controller)) report({ status: \"error\", code: \"prepare-failed\", message: errorMessage(error, \"Preparation failed\"), retryable: true }); }\n finally { fence.finish(controller); }\n }, [captureOne, capturePrimary, fence, formatSources, initialScope, preferences, providerPreferences, report, transport]);\n\n const openWorkspace = React.useCallback(async (key = primaryWorkspaceKey, variant?: { source: Source | Payload | SurfaceHandle; label: string }) => {\n const variantMaterial = variant && \"kind\" in variant.source ? { id: `variant:${key}`, label: variant.label, capture: async () => directSource(variant.source as Payload, { label: variant.label }) } satisfies Source : variant?.source;\n const captureWorkspace = variantMaterial ? (scope: TransferScope, signal: AbortSignal) => captureOne(variantMaterial, scope, signal, true) : capturePrimary;\n workspaceCaptures.current.set(key, captureWorkspace);\n if (workspaces[key]) { setWorkspaceKey(key); setWorkspaceOpen(true); return; }\n const { controller, id } = fence.begin();\n try {\n const result = await captureWorkspace(initialScope, controller.signal);\n if (!fence.valid(id, controller)) return;\n const resolved = resolveTransferPreferences(providerPreferences, preferences, result.snapshot.limits);\n const original = createDraft(result.snapshot);\n const base: WorkspaceState = { ...result, key, original, draft: original, scope: initialScope, preferences: resolved, ...(result.collectionError ? { error: result.collectionError } : {}) };\n setWorkspaces((current) => ({ ...current, [key]: { ...base, draft: rebuild(base, initialControls(base)) } }));\n setWorkspaceKey(key);\n setWorkspaceOpen(true);\n } catch (error) { if (fence.valid(id, controller)) setNotice(errorMessage(error, \"Could not capture content\")); }\n finally { fence.finish(controller); }\n }, [captureOne, capturePrimary, fence, initialScope, preferences, primaryWorkspaceKey, providerPreferences, workspaces]);\n React.useImperativeHandle(controllerRef, () => ({\n focusTrigger: () => triggerRef.current?.focus(),\n prepare: async (requestedSource, options) => {\n const requestedLabel = options?.label ?? (\"label\" in requestedSource ? requestedSource.label : \"content\");\n const requestedKey = `controller:${options?.id ?? \"source\"}:${materialIdentity(requestedSource)}`;\n externalWorkspaceKeys.current.add(requestedKey);\n await openWorkspace(requestedKey, { source: requestedSource, label: requestedLabel });\n },\n }), [openWorkspace]);\n\n const runAction = React.useCallback(async (action: PageAction) => {\n const { controller, id } = fence.begin();\n try { const actionSource = (action as PageAction & { source?: Source }).source; const { snapshot } = actionSource ? await captureOne(actionSource, initialScope, controller.signal, true) : await capturePrimary(initialScope, controller.signal); const resolved = resolveTransferPreferences(providerPreferences, preferences, snapshot.limits); const draft = applyTransferLimits(createDraft(snapshot), resolved.limits); if (!action.supports(snapshot)) throw new Error(`${action.label} is unavailable for this content.`); const result = await action.run({ snapshot, draft, signal: controller.signal }); if (fence.valid(id, controller) && draft.snapshotId === snapshot.id) report(result); }\n catch (error) { if (fence.valid(id, controller)) report({ status: \"error\", code: \"action-failed\", message: errorMessage(error, \"Action failed\"), retryable: true }); }\n finally { fence.finish(controller); }\n }, [captureOne, capturePrimary, fence, initialScope, preferences, providerPreferences, report]);\n\n if (!enabled) return null;\n const payload = menuCapture?.snapshot.payload ?? (source && \"kind\" in source ? source : undefined);\n const quickVariants = (section: \"copy\" | \"ai\") => variants.filter((v) => v.copyLabel && (v.section ?? \"ai\") === section).map((v) => <DropdownMenuItem key={`copy:${v.id}`} aria-label={v.ariaLabel} onSelect={() => void transfer(\"markdown\", false, v)}><MenuPresentation {...v} label={v.copyLabel!}/></DropdownMenuItem>);\n const visibleCopies = COPIES.filter((f) => Boolean(formatSources?.[f]) || ![\"csv\", \"tsv\"].includes(f) || payload?.kind === \"rows\");\n const visibleDownloads = DOWNLOADS.filter((f) => (f !== \"xlsx\" && Boolean(formatSources?.[f])) || ![\"csv\", \"tsv\", \"xlsx\"].includes(f) || payload?.kind === \"rows\");\n const visibleAdapters = menuCapture ? adapters.filter((a) => a.supports(menuCapture.snapshot.payload)) : [];\n const visibleActions = menuCapture ? registeredActions.filter((a) => a.supports(menuCapture.snapshot)) : [];\n return <span className={cn(\"matrx-alchemy\", className)} onClick={stopPropagation ? (event) => event.stopPropagation() : undefined}>\n <DropdownMenu onOpenChange={(open) => { if (open) void preflight(); }}><DropdownMenuTrigger asChild><button ref={triggerRef} type=\"button\" className=\"matrx-alchemy-trigger\" disabled={disabled} aria-label={`Copy, transform or export ${sourceLabel}`} title=\"Alchemy — copy, transform, export\"><AlchemyGlyph /></button></DropdownMenuTrigger><DropdownMenuContent align=\"end\" className=\"matrx-alchemy-menu\">\n {menuStatus === \"loading\" ? <DropdownMenuItem disabled>Inspecting content…</DropdownMenuItem> : menuStatus !== \"idle\" ? <DropdownMenuItem disabled>{menuStatus}</DropdownMenuItem> : null}\n {!hide.includes(\"copy\") ? <><DropdownMenuLabel>Copy</DropdownMenuLabel>{quickVariants(\"copy\")}{visibleCopies.map((format) => <DropdownMenuItem key={format} onSelect={() => void transfer(format, false)}>{format === \"plain\" ? \"Copy\" : `Copy ${LABEL[format]}`}</DropdownMenuItem>)}{visibleAdapters.map((adapter) => <DropdownMenuItem key={adapter.id} onSelect={() => void transfer(adapter, false)}>Copy {adapter.label}</DropdownMenuItem>)}</> : null}\n {!hide.includes(\"prepare\") ? <><DropdownMenuSeparator/>{quickVariants(\"ai\")}<DropdownMenuItem onSelect={() => void openWorkspace()}>Prepare for AI…</DropdownMenuItem>{nearestWorkspaceKey && nearestSurface ? <DropdownMenuItem onSelect={() => void openWorkspace(nearestWorkspaceKey, { source: nearestSurface, label: nearestSurface.surfaceName })}>Prepare this surface…</DropdownMenuItem> : null}{variants.map((variant) => <DropdownMenuItem key={variant.id} onSelect={() => void openWorkspace(variantWorkspaceKeys.get(variant.id)!, variant)}><MenuPresentation {...variant} label={`Prepare ${variant.label}…`}/></DropdownMenuItem>)}</> : null}\n {!hide.includes(\"download\") ? <><DropdownMenuSeparator/><DropdownMenuLabel>Download</DropdownMenuLabel>{visibleDownloads.map((format) => <DropdownMenuItem key={format} onSelect={() => void transfer(format, true)}>Download {LABEL[format]}</DropdownMenuItem>)}{visibleAdapters.map((adapter) => <DropdownMenuItem key={`download:${adapter.id}`} onSelect={() => void transfer(adapter, true)}>Download {adapter.label}</DropdownMenuItem>)}</> : null}\n {visibleActions.length ? <DropdownMenuSeparator/> : null}{visibleActions.map((action) => <DropdownMenuItem key={action.id} aria-label={(action as TransferMenuPresentation).ariaLabel} onSelect={() => void runAction(action)}><MenuPresentation {...action} label={action.label}/></DropdownMenuItem>)}\n </DropdownMenuContent></DropdownMenu>\n {notice ? <span className=\"matrx-alchemy-notice\" role=\"status\">{notice}</span> : null}\n {Object.values(workspaces).map((saved) => <PreparationWorkspace restoreFocus={() => triggerRef.current?.focus()} key={saved.key} open={workspaceOpen && workspaceKey === saved.key} state={saved} scopes={scopes} onClose={() => setWorkspaceOpen(false)} onChange={(next) => setWorkspaces((current) => ({ ...current, [saved.key]: next }))} transport={transport} adapters={adapters} captureScope={workspaceCaptures.current.get(saved.key) ?? capturePrimary} {...(ai ? { ai } : {})} onOutcome={report}/>)}\n </span>;\n}\n\ntype Preset = \"full\" | \"compact\" | \"brief\" | \"custom\";\ntype Controls = {\n preset: Preset;\n sections: string[];\n search: string;\n filters: Record<string, string>;\n sort: string;\n direction: \"asc\" | \"desc\";\n top: number | null;\n visibleColumns: string[];\n selectedOnly: boolean;\n selectedIndices: number[];\n maxDepth: number | null;\n maxStringChars: number | null;\n maxArrayItems: number | null;\n};\n\nfunction initialControls(state: WorkspaceState): Controls {\n const rows = state.original.payload.kind === \"rows\" ? state.original.payload : null;\n return {\n preset: state.preferences.initialPreset,\n sections: state.snapshot.sections.filter((s) => s.includedByDefault).map((s) => s.id),\n search: \"\", filters: {}, sort: \"\", direction: \"asc\",\n top: state.preferences.limits.maxRows,\n visibleColumns: rows?.columns.filter((c) => c.visible).map((c) => c.id) ?? [],\n selectedOnly: false, selectedIndices: [],\n maxDepth: state.preferences.limits.maxDepth,\n maxStringChars: state.preferences.limits.maxStringChars,\n maxArrayItems: state.preferences.limits.maxArrayItems ?? null,\n };\n}\nfunction presetLimits(preset: Preset, controls: Controls, preferences: TransferPreferences) {\n const min = (choice: number | null, cap: number | null) => choice == null ? cap : cap == null ? choice : Math.min(choice, cap);\n if (preset === \"full\") return preferences.limits;\n const request = preset === \"brief\" ? { maxDepth: 4, maxStringChars: 800, maxArrayItems: 25 } : preset === \"compact\" ? { maxDepth: 8, maxStringChars: 4000, maxArrayItems: 100 } : { maxDepth: controls.maxDepth, maxStringChars: controls.maxStringChars, maxArrayItems: controls.maxArrayItems };\n return { ...preferences.limits, maxDepth: min(request.maxDepth, preferences.limits.maxDepth), maxStringChars: min(request.maxStringChars, preferences.limits.maxStringChars), maxArrayItems: min(request.maxArrayItems, preferences.limits.maxArrayItems ?? null) };\n}\nfunction rebuild(state: WorkspaceState, controls: Controls): Draft {\n let draft = resetDraft(state.snapshot);\n if (state.snapshot.sections.length) draft = applySectionSelection(draft, state.snapshot, controls.sections);\n if (draft.payload.kind === \"rows\") draft = transformRows(draft, {\n search: controls.search,\n filters: controls.filters,\n ...(controls.sort ? { sort: { column: controls.sort, direction: controls.direction } } : {}),\n ...(controls.selectedOnly ? { selectedIndices: controls.selectedIndices } : {}),\n visibleColumns: controls.visibleColumns,\n structuredProjection: \"visible\",\n top: controls.top,\n });\n const limits = presetLimits(controls.preset, controls, state.preferences);\n if (draft.payload.kind === \"json\" || draft.payload.kind === \"registered\") {\n draft = reduceJson(draft, { maxDepth: limits.maxDepth, maxStringChars: limits.maxStringChars, maxArrayItems: limits.maxArrayItems ?? null });\n }\n return applyTransferLimits(draft, limits);\n}\nfunction isBuiltInFormat(format: string): format is BuiltInFormat { return format in LABEL; }\nfunction preview(draft: Draft, format: string) {\n const resolved = isBuiltInFormat(format) ? format : \"plain\";\n return serialize(draft, resolved === \"xlsx\" ? \"tsv\" : resolved, { spreadsheetSafe: resolved === \"csv\" || resolved === \"tsv\" || resolved === \"xlsx\" }).plainText;\n}\n\nfunction PreparationWorkspace({ restoreFocus, open, state, scopes, onClose, onChange, transport, ai, adapters, onOutcome, captureScope }: {\n restoreFocus: () => void;\n open: boolean;\n state: WorkspaceState;\n scopes: TransferScope[];\n onClose: () => void;\n onChange: (next: WorkspaceState) => void;\n transport: Transport;\n ai?: AiPreparation;\n adapters: FormatAdapter[];\n onOutcome: (outcome: TransferOutcome) => void;\n captureScope: (scope: TransferScope, signal: AbortSignal) => Promise<CaptureResult>;\n}) {\n const fence = useFence();\n const latest = React.useRef(state); latest.current = state;\n const aiSession = React.useRef<AiPreparation | undefined>(undefined);\n if (!aiSession.current && ai) aiSession.current = ai.fork?.() ?? ai;\n const [controls, setControls] = React.useState(() => initialControls(state));\n const [controlsHistory, setControlsHistory] = React.useState<Controls[]>([]);\n const [pendingControls, setPendingControls] = React.useState<Controls | null>(null);\n const requestedFormat = state.preferences.initialFormat;\n const [format, setFormat] = React.useState<string>(() => isBuiltInFormat(requestedFormat) ? (supportsBuiltIn(requestedFormat, state.draft.payload) ? requestedFormat : \"plain\") : adapters.some((adapter) => adapter.id === requestedFormat && adapter.supports(state.draft.payload)) ? requestedFormat : \"plain\");\n const [buffer, setBuffer] = React.useState(() => isBuiltInFormat(format) ? preview(state.draft, format) : \"Preparing format preview…\");\n const [bufferError, setBufferError] = React.useState<string | null>(null);\n const [formatError, setFormatError] = React.useState<string | null>(null);\n const [preparedArtifact, setPreparedArtifact] = React.useState<Artifact | null>(null);\n const [instruction, setInstruction] = React.useState(\"\");\n const [busy, setBusy] = React.useState<\"ai\" | \"capture\" | \"copy\" | \"download\" | null>(null);\n const [aiFailed, setAiFailed] = React.useState(false);\n const activeAi = React.useRef<AbortController | null>(null);\n const activeCapture = React.useRef<AbortController | null>(null);\n\n React.useEffect(() => {\n if (bufferError) return;\n const adapter = adapters.find((candidate) => candidate.id === format);\n const controller = new AbortController();\n const snapshotId = state.snapshot.id; const revision = state.draft.revision;\n setPreparedArtifact(null); setFormatError(null);\n if (adapter) setBuffer(\"Preparing format preview…\");\n const artifactPromise = adapter ? adapter.build(state.draft, controller.signal) : buildArtifact(state.draft, isBuiltInFormat(format) ? format : \"plain\", state.snapshot.label);\n void artifactPromise.then((artifact) => {\n if (!controller.signal.aborted && artifact.snapshotId === snapshotId && artifact.draftRevision === revision) { setPreparedArtifact(artifact); setBuffer(artifact.plainText); }\n }).catch((error) => { if (!controller.signal.aborted) setFormatError(errorMessage(error, \"Format preview failed\")); });\n return () => controller.abort();\n }, [adapters, bufferError, format, state.draft, state.snapshot.id]);\n const close = React.useCallback(() => { activeAi.current?.abort(); activeCapture.current?.abort(); activeAi.current = null; activeCapture.current = null; fence.abortAll(); setBusy(null); onClose(); }, [fence, onClose]);\n const changeControls = (next: Controls) => {\n if (state.draft.manuallyEdited) { setPendingControls(next); return; }\n setControlsHistory((history) => [...history, controls]); setControls(next); onChange({ ...state, draft: rebuild(state, next), error: undefined });\n };\n const applyPendingControls = () => {\n if (!pendingControls) return;\n setControlsHistory((history) => [...history, controls]); setControls(pendingControls); setBufferError(null);\n onChange({ ...state, draft: rebuild(state, pendingControls), error: undefined });\n setPendingControls(null);\n };\n const editBuffer = (text: string) => {\n setBuffer(text);\n setPreparedArtifact(null); setFormatError(null);\n const payload = state.draft.payload;\n if (payload.kind === \"json\" || payload.kind === \"registered\") {\n try {\n const value = JSON.parse(text) as Json;\n const next: Payload = payload.kind === \"json\" ? { kind: \"json\", value } : { kind: \"registered\", format: payload.format, value };\n setBufferError(null); onChange({ ...state, draft: editDraft(state.draft, next), error: undefined });\n } catch { setBufferError(\"JSON is incomplete or invalid. Fix it before copying or downloading.\"); }\n return;\n }\n setBufferError(null);\n const kind = payload.kind === \"markdown\" || format === \"markdown\" ? \"markdown\" : \"text\";\n if (payload.kind === \"rows\" || !isBuiltInFormat(format)) setFormat(\"plain\");\n onChange({ ...state, draft: editDraft(state.draft, { kind, text }), error: undefined });\n };\n\n const requestCapture = async (scope: TransferScope) => {\n activeCapture.current?.abort();\n const { controller, id } = fence.begin(); activeCapture.current = controller; const revision = state.draft.revision; setBusy(\"capture\");\n try {\n const result = await captureScope(scope, controller.signal);\n if (fence.valid(id, controller) && latest.current.draft.revision === revision) onChange({ ...latest.current, pending: { ...result, scope }, error: result.collectionError });\n } catch (error) { if (fence.valid(id, controller)) onChange({ ...latest.current, error: errorMessage(error, \"Refresh failed\") }); }\n finally { fence.finish(controller); if (activeCapture.current === controller) activeCapture.current = null; if (fence.valid(id, controller)) setBusy(null); }\n };\n const resolveCapture = (choice: \"keep\" | \"regenerate\") => {\n if (!state.pending) return;\n if (choice === \"keep\") { const { pending: _pending, ...kept } = state; onChange({ ...kept, error: undefined }); return; }\n const pending = state.pending;\n const preferences = resolveTransferPreferences({}, state.preferences, pending.snapshot.limits);\n const base: WorkspaceState = { ...pending, key: state.key, original: createDraft(pending.snapshot), draft: createDraft(pending.snapshot), scope: pending.scope, preferences, ...(pending.collectionError ? { error: pending.collectionError } : {}) };\n const nextControls = initialControls(base); setControls(nextControls); setControlsHistory([]); setPendingControls(null); setBufferError(null);\n onChange({ ...base, draft: rebuild(base, nextControls) });\n };\n\n const runAi = async (recover = false) => {\n const adapter = aiSession.current;\n if (!adapter || !adapter.supports(state.snapshot) || (!recover && !instruction.trim()) || (recover && !adapter.recover)) return;\n activeAi.current?.abort();\n const { controller, id } = fence.begin(); activeAi.current = controller;\n const snapshotId = state.snapshot.id; const revision = state.draft.revision; setBusy(\"ai\"); setAiFailed(false);\n try {\n const next = recover ? await adapter.recover!({ snapshot: state.snapshot, draft: state.draft, signal: controller.signal }) : await adapter.run({ snapshot: state.snapshot, draft: state.draft, instruction, signal: controller.signal });\n const current = latest.current;\n if (!fence.valid(id, controller) || current.snapshot.id !== snapshotId || current.draft.revision !== revision || next.snapshotId !== snapshotId || next.sourceId !== state.draft.sourceId || next.sourceRevision !== state.draft.sourceRevision || next.revision <= revision) return;\n try { serialize(next, \"plain\"); } catch { onChange({ ...current, error: \"AI returned an invalid transfer draft.\" }); setAiFailed(true); return; }\n onChange({ ...current, draft: next, error: undefined }); setBufferError(null);\n } catch (error) {\n if (!isAbort(error) && fence.valid(id, controller)) { setAiFailed(true); onChange({ ...latest.current, error: errorMessage(error, \"AI preparation failed\") }); }\n } finally { fence.finish(controller); if (activeAi.current === controller) activeAi.current = null; if (fence.valid(id, controller)) setBusy(null); }\n };\n const cancelAi = async () => {\n const aiController = activeAi.current;\n const { controller, id } = fence.begin();\n try { await aiSession.current?.cancel?.(); }\n catch (error) { if (fence.valid(id, controller)) onChange({ ...latest.current, error: errorMessage(error, \"AI cancellation failed\") }); }\n finally { aiController?.abort(); fence.finish(controller); if (activeAi.current === aiController) activeAi.current = null; if (fence.valid(id, controller)) setBusy(null); }\n };\n const [deliveryNotice, setDeliveryNotice] = React.useState<string | null>(null);\n React.useEffect(() => { setDeliveryNotice(null); }, [state.draft.revision]);\n const reportDelivery = (outcome: TransferOutcome) => { setDeliveryNotice(outcomeMessage(outcome)); onOutcome(outcome); };\n const deliver = async (download: boolean) => {\n if (bufferError) return;\n const { controller, id } = fence.begin(); const snapshotId = state.snapshot.id; const revision = state.draft.revision; setBusy(download ? \"download\" : \"copy\");\n try {\n if (!preparedArtifact) throw new Error(\"Wait for the selected format preview before delivery.\");\n const artifact = preparedArtifact;\n const current = latest.current;\n if (!fence.valid(id, controller) || current.snapshot.id !== snapshotId || current.draft.revision !== revision || artifact.snapshotId !== snapshotId || artifact.draftRevision !== revision) return;\n const result = await transport[download ? \"download\" : \"copy\"](artifact, controller.signal);\n if (fence.valid(id, controller)) reportDelivery(result);\n } catch (error) { if (fence.valid(id, controller)) reportDelivery({ status: \"error\", code: \"prepare-failed\", message: errorMessage(error, \"Preparation failed\"), retryable: true }); }\n finally { fence.finish(controller); if (fence.valid(id, controller)) setBusy(null); }\n };\n\n const rows = state.original.payload.kind === \"rows\" ? state.original.payload : null;\n const formats = COPIES.filter((f) => supportsBuiltIn(f, state.draft.payload));\n const workspaceAdapters = adapters.filter((adapter) => adapter.supports(state.draft.payload));\n const displayedOmissions = preparedArtifact?.omissions ?? state.draft.omissions;\n const limitText = Object.entries(state.preferences.limits).filter(([, value]) => value != null).map(([key, value]) => `${key.replace(/^max/, \"max \")} ${Number(value).toLocaleString()}`).join(\" · \");\n return <Dialog open={open} onOpenChange={(next) => { if (!next) close(); }}><DialogContent onCloseAutoFocus={(event) => { event.preventDefault(); restoreFocus(); }} className=\"matrx-alchemy-workspace max-w-5xl\" aria-busy={busy !== null}>\n <DialogHeader><DialogTitle>Prepare {state.snapshot.label}</DialogTitle><DialogDescription>Captured {state.snapshot.unsavedChanges ? \"from your unsaved draft\" : \"as an immutable snapshot\"}. Your source is never edited.</DialogDescription></DialogHeader>\n <div className=\"matrx-alchemy-workspace-grid\"><section className=\"matrx-alchemy-main\">\n <div className=\"matrx-alchemy-toolbar\">\n {scopes.length > 1 ? <label>Scope<select aria-label=\"Transfer scope\" value={state.scope} disabled={busy !== null} onChange={(e) => void requestCapture(e.target.value as TransferScope)}>{scopes.map((scope) => <option key={scope} value={scope}>{SCOPE_LABEL[scope]}</option>)}</select></label> : null}\n <label>Detail<select aria-label=\"Detail preset\" value={controls.preset} onChange={(e) => changeControls({ ...controls, preset: e.target.value as Preset })}><option value=\"full\">Full</option><option value=\"compact\">Compact</option><option value=\"brief\">Brief</option><option value=\"custom\">Custom</option></select></label>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={(!state.draft.history?.length && !controlsHistory.length) || busy !== null} onClick={() => { setBufferError(null); if (controlsHistory.length) { const next = controlsHistory[controlsHistory.length - 1]!; setControls(next); setControlsHistory((history) => history.slice(0, -1)); onChange({ ...state, draft: rebuild(state, next), error: undefined }); } else onChange({ ...state, draft: undoDraft(state.draft), error: undefined }); }}>Undo</Button>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={busy !== null} onClick={() => { const next = initialControls(state); setControls(next); setControlsHistory([]); setPendingControls(null); setBufferError(null); onChange({ ...state, draft: rebuild(state, next), error: undefined }); }}>Reset</Button>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={busy !== null} onClick={() => void requestCapture(state.scope)}>Refresh source</Button>\n </div>\n {controls.preset === \"custom\" && (state.draft.payload.kind === \"json\" || state.draft.payload.kind === \"registered\") ? <fieldset className=\"matrx-alchemy-options\"><legend>JSON limits</legend>{([ [\"maxDepth\", \"Maximum depth\"], [\"maxStringChars\", \"Maximum string characters\"], [\"maxArrayItems\", \"Maximum array items\"] ] as const).map(([key, text]) => <label key={key}>{text}<input type=\"number\" min=\"0\" value={controls[key] ?? \"\"} onChange={(e) => changeControls({ ...controls, [key]: Number.isNaN(e.target.valueAsNumber) ? null : e.target.valueAsNumber })}/></label>)}</fieldset> : null}\n {rows ? <RowControls rows={rows} controls={controls} change={changeControls}/> : null}\n {state.snapshot.sections.length ? <fieldset className=\"matrx-alchemy-options\"><legend>Sections</legend>{state.snapshot.sections.map((section) => <label key={section.id}><input type=\"checkbox\" checked={controls.sections.includes(section.id)} onChange={(e) => changeControls({ ...controls, sections: e.target.checked ? [...controls.sections, section.id] : controls.sections.filter((id) => id !== section.id) })}/> {section.label}</label>)}</fieldset> : null}\n <div className=\"matrx-alchemy-coverage\"><span>{state.snapshot.coverage.included.toLocaleString()} included{state.snapshot.coverage.total == null ? \"\" : ` of ${state.snapshot.coverage.total.toLocaleString()}`} · {state.snapshot.coverage.status}</span>{state.snapshot.coverage.reason ? <span>{state.snapshot.coverage.reason}</span> : null}{limitText ? <span>Limits: {limitText}</span> : null}{displayedOmissions.length ? <details><summary>{displayedOmissions.length} omissions or adjustments</summary><ul>{displayedOmissions.map((o, i) => <li key={`${o.path}-${o.reason}-${i}`}>{o.path || \"/\"}: {o.reason}{o.count == null ? \"\" : ` (${o.count})`}</li>)}</ul></details> : null}</div>\n <label className=\"matrx-alchemy-preview-label\">Output format<select aria-label=\"Output format\" value={format} onChange={(e) => setFormat(e.target.value)}>{formats.map((f) => <option key={f} value={f}>{LABEL[f]}</option>)}{state.draft.payload.kind === \"rows\" ? <option value=\"xlsx\">Excel workbook</option> : null}{workspaceAdapters.map((adapter) => <option key={adapter.id} value={adapter.id}>{adapter.label}</option>)}</select></label>\n <textarea className=\"matrx-alchemy-preview\" aria-label=\"Prepared output\" aria-invalid={bufferError ? true : undefined} aria-describedby={bufferError ? \"alchemy-buffer-error\" : undefined} value={buffer} onChange={(e) => editBuffer(e.target.value)}/>\n {bufferError ? <p id=\"alchemy-buffer-error\" role=\"alert\" className=\"matrx-alchemy-error\">{bufferError}</p> : null}\n {formatError ? <p role=\"alert\" className=\"matrx-alchemy-error\">{formatError}</p> : null}\n {bufferError ? <Button type=\"button\" variant=\"outline\" disabled={busy !== null} onClick={() => { const fallback = editDraft(state.draft, { kind: \"text\", text: buffer }); setBufferError(null); onChange({ ...state, draft: fallback, error: undefined }); setFormat(\"plain\"); }}>Use invalid JSON as plain text</Button> : null}\n </section>{ai || busy === \"capture\" || state.error ? <aside>\n {ai ? <>\n <label>AI instruction<textarea value={instruction} onChange={(e) => setInstruction(e.target.value)} placeholder=\"Tell AI how to prepare this content\"/></label>\n <Button type=\"button\" variant=\"outline\" disabled={!aiSession.current || !instruction.trim() || busy !== null || !aiSession.current.supports(state.snapshot)} onClick={() => void runAi(false)}>Generate preview</Button>\n {busy === \"ai\" ? <Button type=\"button\" variant=\"outline\" onClick={() => void cancelAi()}>{aiSession.current?.cancel ? \"Cancel AI\" : \"Stop waiting\"}</Button> : null}\n </> : null}\n {busy === \"capture\" ? <Button type=\"button\" variant=\"outline\" onClick={() => { activeCapture.current?.abort(); activeCapture.current = null; setBusy(null); }}>Stop loading rows</Button> : null}\n {ai && aiSession.current?.recover && busy !== \"ai\" ? <Button type=\"button\" variant=\"outline\" onClick={() => void runAi(true)}>{aiFailed ? \"Retry or rejoin AI run\" : \"Rejoin AI run\"}</Button> : null}\n {ai ? <p className=\"matrx-alchemy-meta\">AI creates a preview. It never copies automatically. Closing detaches this view without cancelling server work.</p> : null}{state.error ? <p role=\"alert\" className=\"matrx-alchemy-error\">{state.error}</p> : null}\n </aside> : null}</div>\n {pendingControls ? <div className=\"matrx-alchemy-decision\" role=\"alert\"><p>This control would replace your manual edit.</p><Button type=\"button\" variant=\"outline\" onClick={() => setPendingControls(null)}>Keep edited draft</Button><Button type=\"button\" onClick={applyPendingControls}>Rebuild from source</Button></div> : null}\n {state.pending ? <div className=\"matrx-alchemy-decision\" role=\"alert\"><p>A fresh source snapshot is ready.</p><Button type=\"button\" variant=\"outline\" onClick={() => resolveCapture(\"keep\")}>Keep current snapshot and draft</Button><Button type=\"button\" onClick={() => resolveCapture(\"regenerate\")}>Regenerate from fresh source</Button></div> : null}\n {deliveryNotice ? <p role=\"status\" className=\"matrx-alchemy-meta\">{deliveryNotice}</p> : null}\n <DialogFooter><span className=\"matrx-alchemy-meta\">{buffer.length.toLocaleString()} characters · ~{estimateTokens(buffer).toLocaleString()} tokens</span><Button type=\"button\" variant=\"outline\" onClick={close}>Close</Button><Button type=\"button\" variant=\"outline\" disabled={busy !== null || Boolean(bufferError || formatError) || !preparedArtifact} onClick={() => void deliver(true)}>Download prepared output</Button><Button type=\"button\" disabled={busy !== null || Boolean(bufferError || formatError) || !preparedArtifact} onClick={() => void deliver(false)}>Copy prepared output</Button></DialogFooter>\n </DialogContent></Dialog>;\n}\n\nfunction RowControls({ rows, controls, change }: {\n rows: Extract<Payload, { kind: \"rows\" }>;\n controls: Controls;\n change: (next: Controls) => void;\n}) {\n return <>\n <div className=\"matrx-alchemy-toolbar\">\n <label>Search<input value={controls.search} onChange={(e) => change({ ...controls, search: e.target.value })}/></label>\n <label>Sort<select value={controls.sort} onChange={(e) => change({ ...controls, sort: e.target.value })}><option value=\"\">None</option>{rows.columns.map((column) => <option key={column.id} value={column.id}>{column.label}</option>)}</select></label>\n <label>Direction<select value={controls.direction} disabled={!controls.sort} onChange={(e) => change({ ...controls, direction: e.target.value as \"asc\" | \"desc\" })}><option value=\"asc\">Ascending</option><option value=\"desc\">Descending</option></select></label>\n <label>Top rows<input type=\"number\" min=\"0\" value={controls.top ?? \"\"} onChange={(e) => change({ ...controls, top: Number.isNaN(e.target.valueAsNumber) ? null : e.target.valueAsNumber })}/></label>\n </div>\n <fieldset className=\"matrx-alchemy-options\"><legend>Columns and filters</legend>{rows.columns.map((column) => <div className=\"matrx-alchemy-column\" key={column.id}><label><input type=\"checkbox\" checked={controls.visibleColumns.includes(column.id)} onChange={(e) => change({ ...controls, visibleColumns: e.target.checked ? [...controls.visibleColumns, column.id] : controls.visibleColumns.filter((id) => id !== column.id) })}/> {column.label}</label><input aria-label={`Filter ${column.label}`} placeholder=\"Filter\" value={controls.filters[column.id] ?? \"\"} onChange={(e) => change({ ...controls, filters: { ...controls.filters, [column.id]: e.target.value } })}/></div>)}</fieldset>\n <fieldset className=\"matrx-alchemy-options\"><legend>Rows</legend><label><input type=\"checkbox\" checked={controls.selectedOnly} onChange={(e) => change({ ...controls, selectedOnly: e.target.checked })}/> Only selected rows</label><div className=\"matrx-alchemy-row-list\">{rows.rows.map((row, index) => {\n const summary = rows.columns.filter((column) => column.visible).slice(0, 2).map((column) => String(readTransferCell(row, column) ?? \"\")).filter(Boolean).join(\" · \");\n return <label key={index}><input type=\"checkbox\" checked={controls.selectedIndices.includes(index)} onChange={(e) => change({ ...controls, selectedIndices: e.target.checked ? [...controls.selectedIndices, index] : controls.selectedIndices.filter((value) => value !== index) })}/> Row {index + 1}{summary ? ` — ${summary}` : \"\"}</label>;\n })}</div></fieldset>\n </>;\n}\n\nexport * from \"./matrx-copy\";\n","\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"./cn\";\n\nexport const buttonVariants = cva(\n \"inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50 active:scale-[0.98] [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground shadow-sm hover:bg-primary/90\",\n /**\n * An explicit spelling of `default`, identical by construction. It is\n * not decoration: matrx-frontend's `ButtonMine` fork carried it, ~17\n * call sites say `variant=\"primary\"`, and the alternative to keeping\n * the word was a host shim translating a prop — the massage C22 bans.\n */\n primary: \"bg-primary text-primary-foreground shadow-sm hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n /** The affirmative twin of `destructive` — confirm, approve, publish. */\n success:\n \"bg-success text-success-foreground shadow-sm hover:bg-success/90\",\n outline:\n \"border border-border bg-card shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n subtle:\n \"border border-transparent bg-muted/50 text-foreground hover:border-border hover:bg-muted\",\n },\n /**\n * ONE size scale, xs → 3xl, plus the two icon boxes. The top and bottom\n * of the scale came in from matrx-frontend's `ButtonMine` fork (2026-09-07):\n * a dense toolbar needs `xs`, and a marketing/hero call to action needs\n * `xl`+. A host that has to reach outside this scale forks the button,\n * which is exactly how `ButtonMine` was born.\n */\n size: {\n xs: \"h-6 rounded-md px-1 text-xs\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n default: \"h-9 px-4 py-2\",\n /** An explicit spelling of `default` (the fork's middle rung). */\n md: \"h-9 px-4 py-2\",\n lg: \"h-10 rounded-md px-6\",\n xl: \"h-12 px-8 py-3 text-base\",\n \"2xl\": \"h-14 px-10 py-3 text-base\",\n \"3xl\": \"h-16 px-12 py-3 text-base\",\n icon: \"h-9 w-9\",\n \"icon-sm\": \"h-7 w-7\",\n /** A circular icon box — an avatar-shaped control, not a square one. */\n roundIcon: \"h-8 w-8 rounded-full p-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Component = asChild ? Slot : \"button\";\n return (\n <Component\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\n/**\n * Dialog — the modal surface, carrying every ruling the host forks paid for.\n *\n * Four hosts shipped four dialogs. Three were the stock shadcn body: a\n * fixed-size centered card with `overflow: visible`. matrx-frontend's had been\n * hardened, incident by incident, and those hardenings are the reason this\n * component belongs in the package rather than being copied a fifth time:\n *\n * 1. THE ROOT RENDERS UNCONDITIONALLY — no hydration mount gate. The gate a\n * wrapper once carried (\"Radix ids differ between SSR and client\") was\n * false — Radix ids come from React's SSR-stable `useId` — and it deleted\n * the always-visible Trigger from SSR and the first client paint.\n *\n * 2. THE DIALOG IS CLAMPED TO THE VIEWPORT AND SCROLLS INSIDE ITSELF. Proven\n * live: an admin \"Create Category\" dialog rendered 851px tall in a 657px\n * viewport with `overflow-y: visible`, so its Create button sat below the\n * fold, unreachable. The only way out was a backdrop click — which\n * dismisses WITHOUT writing, and is indistinguishable from a silent save\n * failure. `max-h-[85dvh] overflow-y-auto` is the cap.\n *\n * 3. THE PRIMARY ACTION IS ALWAYS PRESSABLE — AND NEVER ON TOP OF THE BODY.\n * `DialogFooter` is sticky and bleeds to the card's edges using\n * `--dialog-pad`. Until 0.11.3 that bleed was a NEGATIVE BLOCK MARGIN,\n * which sticky clamps: the footer was dragged up over the row above it by\n * `--dialog-pad` minus the card gap. The card now RESERVES the footer's\n * block size instead (`.matrx-dialog-card` in `styles.css` hands its bottom\n * padding to the footer), so scrolled content never shows through beneath\n * the actions AND the footer never covers the row above it. Outside a\n * DialogContent both variables are unset, the padding falls back to `0px`,\n * and the footer is the plain row it always was.\n *\n * 4. ON MOBILE THE SAME DIALOG IS A BOTTOM SHEET — full width, bottom\n * anchored, height-capped, internally scrollable, safe-area padded. Opt out\n * with `mobileSheet={false}` only for the rare surface that must stay\n * centered (a tiny spinner). The sheet geometry is re-asserted AFTER the\n * caller's className so a desktop `max-w-2xl` cannot un-fullscreen it.\n *\n * 5. AN UNTITLED DIALOG IS STILL ACCESSIBLE. Radix warns (correctly) that\n * every dialog needs a title; rather than let hosts ship the warning, a\n * visually-hidden title is injected when the tree has none, and\n * `aria-describedby` is dropped when there is no description rather than\n * pointing at nothing.\n *\n * SEAM INVERSIONS. The host original resolved its portal target through\n * app-shaped hooks (a popped-out window-panel body). Here that is the\n * package's `PortalContainerProvider` seam, with an explicit `container` prop\n * keeping top priority. And DialogContent PROVIDES that seam to its own\n * children, so a Popover or menu opened inside a dialog portals INTO the\n * dialog — staying inside the scroll shard, where its wheel events work.\n * `useDialogContainer` exposes the same element for host code that needs it.\n */\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport * as VisuallyHidden from \"@radix-ui/react-visually-hidden\";\nimport { treeContainsComponent } from \"@ai-matrx/kit/react-tree\";\nimport * as React from \"react\";\n\nimport { cn } from \"./cn\";\nimport {\n MOTION_BOTTOM_SHEET,\n MOTION_DIALOG,\n MOTION_OVERLAY,\n} from \"./motion\";\nimport { XIcon } from \"./icons\";\nimport { usePortalContainer, PortalContainerProvider } from \"./portal-container\";\nimport {\n RadixDialogModalProvider,\n useRadixDialogModal,\n} from \"./radix-dialog-modal-context\";\nimport { useIsMobile } from \"./use-is-mobile\";\n\nconst Dialog = ({\n children,\n ...props\n}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>) => {\n const modal = props.modal ?? true;\n return (\n <RadixDialogModalProvider modal={modal}>\n <DialogPrimitive.Root {...props} modal={modal}>\n {children}\n </DialogPrimitive.Root>\n </RadixDialogModalProvider>\n );\n};\nDialog.displayName = \"Dialog\";\n\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogClose = DialogPrimitive.Close;\n\n/**\n * Portal-seam-aware DialogPortal. An explicit `container` always wins; with\n * none, the injected `PortalContainerProvider` value decides; with neither,\n * Radix's `document.body`.\n */\nconst DialogPortal = ({\n container,\n ...props\n}: Omit<\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>,\n \"container\"\n> & {\n /** `undefined` → use the injected container; `null` → force document.body. */\n container?: HTMLElement | null | undefined;\n}) => {\n const resolved = usePortalContainer(container);\n return <DialogPrimitive.Portal container={resolved ?? null} {...props} />;\n};\nDialogPortal.displayName = \"DialogPortal\";\n\n// Shared identity across independently bundled public entrypoints/loaders.\nconst CONTEXT_SLOT = Symbol.for(\"ai-matrx.design-system.dialog-container-context\");\nconst contextRegistry = globalThis as typeof globalThis & { [CONTEXT_SLOT]?: React.Context<HTMLElement | null> };\nconst DialogContainerContext = contextRegistry[CONTEXT_SLOT] ??= React.createContext<HTMLElement | null>(null);\n\n/** The DialogContent element, for host code that portals into the dialog. */\nexport const useDialogContainer = (): HTMLElement | null =>\n React.useContext(DialogContainerContext);\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n data-slot=\"dialog-overlay\"\n className={cn(\n // Page context behind the modal stays readable; separation comes from a\n // light token scrim, not a blur.\n \"fixed inset-0 z-[10000] bg-[var(--matrx-overlay-scrim-soft)]\",\n MOTION_OVERLAY,\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\n/**\n * Unstyled, non-portalling Content for custom dialog layouts. Preserves Radix\n * focus/background behavior and derives `aria-modal` from the Root.\n */\nconst DialogContentPrimitive = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>((props, ref) => {\n const isModal = useRadixDialogModal();\n return (\n <DialogPrimitive.Content\n {...props}\n ref={ref}\n aria-modal={isModal || undefined}\n />\n );\n});\nDialogContentPrimitive.displayName = \"DialogContentPrimitive\";\n\nconst DIALOG_DESKTOP_CLASSES =\n \"matrx-dialog-card fixed inset-0 z-[10000] m-auto grid h-fit min-w-0 w-full max-w-lg gap-4 max-h-[85dvh] overflow-y-auto overscroll-contain [--dialog-pad:1.5rem] overflow-x-clip border bg-background p-6 shadow-lg [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full sm:rounded-lg\";\n\nconst DIALOG_MOBILE_SHEET_CLASSES =\n \"matrx-mobile-sheet matrx-dialog-card fixed inset-x-0 bottom-0 left-0 right-0 top-auto z-[10000] flex min-w-0 flex-col w-full max-w-full max-h-[90dvh] gap-4 [--dialog-pad:1rem] overflow-x-clip border-t bg-background p-4 pb-safe shadow-lg [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full rounded-t-2xl rounded-b-none overflow-y-auto overscroll-contain\";\n\n// Re-asserted LAST so sheet geometry always wins over a caller className.\nconst DIALOG_MOBILE_SHEET_OVERRIDE =\n \"inset-x-0 bottom-0 left-0 right-0 top-auto translate-none w-full max-w-full max-h-[90dvh] rounded-b-none rounded-t-2xl overflow-y-auto\";\n\nexport interface DialogContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n /** Render as a bottom sheet below the mobile breakpoint. Default `true`. */\n mobileSheet?: boolean;\n /** Render the built-in close control. Default `true`. */\n showCloseButton?: boolean;\n /** Explicit portal target; wins over the injected container. */\n container?: HTMLElement | null;\n /**\n * Package-owned open/close motion. Default `true`. Pass `false` for a\n * surface that must appear instantly. It is NOT the reduced-motion switch;\n * `styles.css` already honours `prefers-reduced-motion`.\n */\n animated?: boolean;\n}\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(\n (\n {\n className,\n children,\n mobileSheet = true,\n animated = true,\n showCloseButton = true,\n container,\n ...props\n },\n ref,\n ) => {\n const isMobile = useIsMobile();\n const isModal = useRadixDialogModal();\n // Falls through to the injected container while `containerEl` is unset\n // (pre-mount) — the original's dialog > popout > body priority.\n const injectedContainer = usePortalContainer(container);\n const asSheet = mobileSheet && isMobile;\n const [containerEl, setContainerEl] = React.useState<HTMLElement | null>(\n null,\n );\n\n const mergedRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n setContainerEl(node);\n if (typeof ref === \"function\") ref(node);\n else if (ref)\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [ref],\n );\n\n const hasTitle =\n treeContainsComponent(children, DialogTitle) ||\n treeContainsComponent(children, DialogPrimitive.Title);\n const hasDescription =\n treeContainsComponent(children, DialogDescription) ||\n treeContainsComponent(children, DialogPrimitive.Description);\n\n return (\n <DialogPortal container={container}>\n {isModal ? <DialogOverlay /> : null}\n <DialogContentPrimitive\n ref={mergedRef}\n data-slot=\"dialog-content\"\n className={cn(\n asSheet ? DIALOG_MOBILE_SHEET_CLASSES : DIALOG_DESKTOP_CLASSES,\n animated && (asSheet ? MOTION_BOTTOM_SHEET : MOTION_DIALOG),\n className,\n asSheet && DIALOG_MOBILE_SHEET_OVERRIDE,\n // A non-modal dialog is the coexistence contract for content that\n // can sit beside a host's floating window manager (which starts at\n // z=1000); staying below that boundary makes a newly focused window\n // usable without coupling the two systems.\n !isModal && \"z-[900]\",\n )}\n {...(hasDescription ? {} : { \"aria-describedby\": undefined })}\n {...props}\n >\n {hasTitle ? null : (\n <VisuallyHidden.Root>\n <DialogPrimitive.Title>Dialog</DialogPrimitive.Title>\n </VisuallyHidden.Root>\n )}\n <DialogContainerContext.Provider value={containerEl}>\n <PortalContainerProvider\n container={containerEl ?? injectedContainer ?? null}\n >\n {children}\n </PortalContainerProvider>\n </DialogContainerContext.Provider>\n {showCloseButton ? (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n aria-label=\"Close\"\n className=\"absolute right-2 top-4 flex h-11 w-11 items-center justify-center rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground sm:right-4 lg:h-10 lg:w-10\"\n >\n <XIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n ) : null}\n </DialogContentPrimitive>\n </DialogPortal>\n );\n },\n);\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n data-slot=\"dialog-header\"\n className={cn(\n // DialogContent owns an absolute close control. Reserve its hit area in\n // every header so trailing actions never render underneath it.\n \"flex flex-col space-y-1.5 pr-12 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n // Ruling 3/4 — sticky to the card edges so a scrolled body never shows\n // through under the actions, and safe-area padded on a phone.\n //\n // 🚨 THERE IS NO `mb-[…]` HERE, AND THERE MUST NEVER BE ONE AGAIN\n // (0.11.3, feedback bf8fb00b). The bleed over the card's bottom padding\n // used to be a NEGATIVE BLOCK MARGIN, which makes this box taller than\n // the grid area the card allocates it — and `position: sticky` CLAMPS a\n // box to its containing block, so the browser yanked the footer UP by\n // `--dialog-pad` against the card's `gap-4` and painted 8px of opaque\n // footer over the last line of the consequence, at every length. The\n // card now RESERVES this footer's block size instead (`matrx-dialog-card`\n // in styles.css hands over its `padding-bottom`), so the bleed costs no\n // margin at all. Guard: `sticky-footer-geometry.test.tsx`.\n //\n // These stay UTILITIES rather than a shipped rule so a caller's\n // `className` still wins through tailwind-merge — a shipped rule would\n // have to be unlayered to survive Tailwind preflight (§ THE PREFLIGHT\n // RULE in styles.css) and would then override every caller's padding.\n \"sticky bottom-0 z-10 bg-background pt-3\",\n \"mx-[calc(var(--dialog-pad,0px)*-1)] px-[var(--dialog-pad,0px)] pb-[var(--dialog-pad,0px)]\",\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"dialog-title\"\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogContentPrimitive,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","/**\n * THE MOTION CONTRACT (0.10.0) — the class names every animated surface in\n * this package puts on the DOM, in ONE place.\n *\n * Why a module and not ten inline strings: the sweep that produced this file\n * found the same defect ten times over, and it was invisible each time\n * because each primitive spelled its animation out by hand. Ten hand-written\n * copies of `data-[state=open]:animate-in data-[state=closed]:animate-out\n * data-[state=closed]:fade-out-0 …` meant ten chances to reach for a utility\n * nothing in the package defines — which is exactly what happened. A single\n * exported constant per motion SHAPE means the next primitive cannot invent\n * an eleventh spelling, and `styles.test.ts` can prove every one of them\n * resolves to a rule in the shipped stylesheet.\n *\n * Every rule these name lives in `styles.css` under the package's own\n * keyframes. NONE of them is a Tailwind utility, and none requires a host\n * plugin — see that file's header for the measurement that made this\n * necessary.\n */\n\n/** Modal scrims: Dialog, AlertDialog, Sheet, CommandDialog. Fade only. */\nexport const MOTION_OVERLAY = \"matrx-motion-overlay\";\n\n/** The centred dialog card. Fades and scales; centring is not its business. */\nexport const MOTION_DIALOG = \"matrx-motion-dialog\";\n\n/**\n * THE CENTRING OF A CENTRED DIALOG CARD — package-owned, in the `translate`\n * property, and NEVER a Tailwind `translate-x-[-50%] translate-y-[-50%]` pair.\n *\n * Those utilities do not compile to the same thing in every host: Tailwind v3\n * writes them into `transform`, Tailwind v4 writes them into the independent\n * `translate` property, which COMPOSES with `transform` instead of being\n * replaced by it. 0.10.0's keyframes restated the centring inside `transform`,\n * which was harmless on v3 and doubled the centring on v4 — the card flew in\n * from off the top-left of the viewport for the animation's whole duration and\n * snapped into place at the end (fixed in 0.10.1).\n *\n * Owning it here means one spelling that reads the same on both, and it frees\n * `transform` so the keyframes carry ONLY the delta. Put this on every centred\n * surface UNCONDITIONALLY — it is geometry, so unlike {@link MOTION_DIALOG} it\n * must survive `animated={false}`. Its rule ships in `styles.css`.\n */\nexport const CENTERED_DIALOG = \"matrx-dialog-centered\";\n\n/**\n * The resting gap between a `popper`-positioned surface and its trigger, for\n * the primitives that want one (today: `Select`). Same law and same reason as\n * {@link CENTERED_DIALOG} — a position an animated surface holds AT REST is\n * the `translate` property's job, never a Tailwind translate utility, because\n * those land in `transform` on a v3 host and in `translate` on a v4 one while\n * the keyframes animate `transform` either way. Sizes from\n * `--matrx-popper-offset`; keys off Radix's `data-side`.\n */\nexport const POPPER_OFFSET = \"matrx-popper-offset\";\n\n/** The mobile Dialog / CommandDialog bottom sheet. Slides up and fades. */\nexport const MOTION_BOTTOM_SHEET = \"matrx-motion-bottom-sheet\";\n\n/**\n * Radix-popper surfaces: Popover, DropdownMenu, ContextMenu, HoverCard,\n * Select, Tooltip. Reads `--radix-popper-transform-origin` so the surface\n * grows out of its trigger, and `data-side` so it travels from it.\n */\nexport const MOTION_POPPER = \"matrx-motion-popper\";\n\n/** Edge sheets, one class per `sheetVariants` side. */\nexport const MOTION_SHEET = {\n top: \"matrx-motion-sheet-top\",\n bottom: \"matrx-motion-sheet-bottom\",\n left: \"matrx-motion-sheet-left\",\n right: \"matrx-motion-sheet-right\",\n center: \"matrx-motion-sheet-center\",\n} as const;\n\n/** Skeleton's breathing loop. */\nexport const MOTION_PULSE = \"matrx-pulse\";\n\n/** The spinner loop, for every inline busy indicator in the package. */\nexport const MOTION_SPIN = \"matrx-spin\";\n\n/**\n * Every motion class the package ships, for the guards. If a rule for one of\n * these is missing from `styles.css`, a component animates in no consumer and\n * says nothing about it — the C26 failure this list exists to make loud.\n */\nexport const ALL_MOTION_CLASSES = [\n MOTION_OVERLAY,\n MOTION_DIALOG,\n MOTION_BOTTOM_SHEET,\n MOTION_POPPER,\n ...Object.values(MOTION_SHEET),\n MOTION_PULSE,\n MOTION_SPIN,\n] as const;\n\n/**\n * The host-plugin utilities this package is forbidden to emit. They are\n * supplied by `tailwindcss-animate` / `tw-animate-css`, which is a HOST CSS\n * entry concern a package cannot declare a dependency on: three of the four\n * AI Matrx consumers never loaded it, so every surface wearing these appeared\n * with no animation and no error. `styles.test.ts` fails the build if one\n * comes back.\n */\nexport const FORBIDDEN_HOST_MOTION_UTILITIES = [\n \"animate-in\",\n \"animate-out\",\n \"fade-in\",\n \"fade-out\",\n \"zoom-in\",\n \"zoom-out\",\n \"slide-in-from\",\n \"slide-out-to\",\n \"animate-accordion\",\n \"animate-slide-down\",\n \"animate-slide-up\",\n \"animate-pulse\",\n \"animate-spin\",\n] as const;\n","/**\n * Internal inlined SVG icons (policy C19: no icon-library dependency, ever).\n *\n * Each icon is copied from the exact glyph the ported originals rendered:\n * lucide-react's Loader2 / ChevronLeft / ChevronRight / MoreHorizontal and\n * @radix-ui/react-icons' Cross2Icon. Same viewBoxes, same paths, same default\n * stroke geometry — a host swapping the import sees pixel-identical output.\n *\n * Not exported from the package entry; components consume them directly.\n */\n\nimport * as React from \"react\";\n\ntype IconProps = React.SVGAttributes<SVGSVGElement>;\n\nfunction lucideProps(props: IconProps): React.SVGAttributes<SVGSVGElement> {\n return {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": true,\n ...props,\n };\n}\n\n/** lucide `loader-2` — the spinner glyph. Callers add `matrx-spin`. */\nexport function Loader2Icon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n\n/** lucide `chevron-left`. */\nexport function ChevronLeftIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\n/** lucide `chevron-right`. */\nexport function ChevronRightIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\n/** lucide `chevron-down` — the disclosure's open glyph. */\nexport function ChevronDownIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\n/** lucide `archive` — the archived-rows glyph (ArchivedDisclosure). */\nexport function ArchiveIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <rect width=\"20\" height=\"5\" x=\"2\" y=\"3\" rx=\"1\" />\n <path d=\"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8\" />\n <path d=\"M10 12h4\" />\n </svg>\n );\n}\n\n/** lucide `more-horizontal` — the kebab/ellipsis glyph. */\nexport function MoreHorizontalIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </svg>\n );\n}\n\n/** lucide `check` — the selected-row tick (CreatablePicker). */\nexport function LucideCheckIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\n/** lucide `chevrons-up-down` — the combobox trigger glyph. */\nexport function ChevronsUpDownIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"m7 15 5 5 5-5\" />\n <path d=\"m7 9 5-5 5 5\" />\n </svg>\n );\n}\n\n/** lucide `external-link` — the manage-in-new-tab glyph. */\nexport function ExternalLinkIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </svg>\n );\n}\n\n/** lucide `lock` — the platform-governed vocabulary glyph. */\nexport function LockIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n );\n}\n\n/** lucide `plus` — the create/add glyph. */\nexport function PlusIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n );\n}\n\n/** lucide `x` — the dialog close glyph (host dialog module used lucide X). */\nexport function XIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\n/**\n * @radix-ui/react-icons components default to width/height 15 — the bare\n * `<ChevronUpIcon />` renders in Select's scroll buttons rely on it.\n */\nfunction radixProps(props: IconProps): React.SVGAttributes<SVGSVGElement> {\n return {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 15 15\",\n width: 15,\n height: 15,\n fill: \"none\",\n \"aria-hidden\": true,\n ...props,\n };\n}\n\n/** @radix-ui/react-icons `MagnifyingGlassIcon` — the command search glyph. */\nexport function MagnifyingGlassIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M10 6.5C10 8.433 8.433 10 6.5 10C4.567 10 3 8.433 3 6.5C3 4.567 4.567 3 6.5 3C8.433 3 10 4.567 10 6.5ZM9.30884 10.0159C8.53901 10.6318 7.56251 11 6.5 11C4.01472 11 2 8.98528 2 6.5C2 4.01472 4.01472 2 6.5 2C8.98528 2 11 4.01472 11 6.5C11 7.56251 10.6318 8.53901 10.0159 9.30884L12.8536 12.1464C13.0488 12.3417 13.0488 12.6583 12.8536 12.8536C12.6583 13.0488 12.3417 13.0488 12.1464 12.8536L9.30884 10.0159Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `CheckIcon` — the select item indicator glyph. */\nexport function CheckIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M11.4669 3.72684C11.7558 3.91574 11.8369 4.30308 11.648 4.59198L7.39799 11.092C7.29783 11.2452 7.13556 11.3467 6.95402 11.3699C6.77247 11.3931 6.58989 11.3355 6.45446 11.2124L3.70446 8.71241C3.44905 8.48022 3.43023 8.08494 3.66242 7.82953C3.89461 7.57412 4.28989 7.55529 4.5453 7.78749L6.75292 9.79441L10.6018 3.90792C10.7907 3.61902 11.178 3.53795 11.4669 3.72684Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/**\n * @radix-ui/react-icons `DividerHorizontalIcon` — the INDETERMINATE checkbox\n * glyph. Radix renders the indicator for both `true` and `\"indeterminate\"`, so\n * a half-selected \"select all\" that shows a full check states something false;\n * the two states get different glyphs on purpose.\n */\nexport function DividerHorizontalIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M2 7.5C2 7.22386 2.22386 7 2.5 7H12.5C12.7761 7 13 7.22386 13 7.5C13 7.77614 12.7761 8 12.5 8H2.5C2.22386 8 2 7.77614 2 7.5Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `DotFilledIcon` — the menu radio-item indicator. */\nexport function DotFilledIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M9.875 7.5C9.875 8.81168 8.81168 9.875 7.5 9.875C6.18832 9.875 5.125 8.81168 5.125 7.5C5.125 6.18832 6.18832 5.125 7.5 5.125C8.81168 5.125 9.875 6.18832 9.875 7.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `ChevronRightIcon` — the submenu-trigger glyph. */\nexport function RadixChevronRightIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M6.1584 3.13508C6.35985 2.94621 6.67627 2.95642 6.86514 3.15788L10.6151 7.15788C10.7954 7.3502 10.7954 7.64949 10.6151 7.84182L6.86514 11.8418C6.67627 12.0433 6.35985 12.0535 6.1584 11.8646C5.95694 11.6757 5.94673 11.3593 6.1356 11.1579L9.565 7.49985L6.1356 3.84182C5.94673 3.64036 5.95694 3.32394 6.1584 3.13508Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `ChevronDownIcon` — the select trigger/scroll glyph. */\nexport function RadixChevronDownIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `ChevronUpIcon` — the select scroll-up glyph. */\nexport function RadixChevronUpIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M3.13523 8.84197C3.3241 9.04343 3.64052 9.05363 3.84197 8.86477L7.5 5.43536L11.158 8.86477C11.3595 9.05363 11.6759 9.04343 11.8648 8.84197C12.0536 8.64051 12.0434 8.32409 11.842 8.13523L7.84197 4.38523C7.64964 4.20492 7.35036 4.20492 7.15803 4.38523L3.15803 8.13523C2.95657 8.32409 2.94637 8.64051 3.13523 8.84197Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `Cross2Icon` — the dialog/sheet close glyph. */\nexport function Cross2Icon(props: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n aria-hidden\n {...props}\n >\n <path\n d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/**\n * @radix-ui/react-icons `DragHandleDots2Icon` — the grip on `ResizableHandle`.\n * Inlined per C19: this package depends on no icon library.\n */\nexport function DragHandleDots2Icon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M4.5 2.5C5.05228 2.5 5.5 2.05228 5.5 1.5C5.5 0.947715 5.05228 0.5 4.5 0.5C3.94772 0.5 3.5 0.947715 3.5 1.5C3.5 2.05228 3.94772 2.5 4.5 2.5ZM4.5 6.5C5.05228 6.5 5.5 6.05229 5.5 5.5C5.5 4.94771 5.05228 4.5 4.5 4.5C3.94772 4.5 3.5 4.94771 3.5 5.5C3.5 6.05229 3.94772 6.5 4.5 6.5ZM5.5 9.5C5.5 10.0523 5.05228 10.5 4.5 10.5C3.94772 10.5 3.5 10.0523 3.5 9.5C3.5 8.94771 3.94772 8.5 4.5 8.5C5.05228 8.5 5.5 8.94771 5.5 9.5ZM4.5 14.5C5.05228 14.5 5.5 14.0523 5.5 13.5C5.5 12.9477 5.05228 12.5 4.5 12.5C3.94772 12.5 3.5 12.9477 3.5 13.5C3.5 14.0523 3.94772 14.5 4.5 14.5ZM11.5 1.5C11.5 2.05228 11.0523 2.5 10.5 2.5C9.94771 2.5 9.5 2.05228 9.5 1.5C9.5 0.947715 9.94771 0.5 10.5 0.5C11.0523 0.5 11.5 0.947715 11.5 1.5ZM10.5 6.5C11.0523 6.5 11.5 6.05229 11.5 5.5C11.5 4.94771 11.0523 4.5 10.5 4.5C9.94771 4.5 9.5 4.94771 9.5 5.5C9.5 6.05229 9.94771 6.5 10.5 6.5ZM11.5 9.5C11.5 10.0523 11.0523 10.5 10.5 10.5C9.94771 10.5 9.5 10.0523 9.5 9.5C9.5 8.94771 9.94771 8.5 10.5 8.5C11.0523 8.5 11.5 8.94771 11.5 9.5ZM10.5 14.5C11.0523 14.5 11.5 14.0523 11.5 13.5C11.5 12.9477 11.0523 12.5 10.5 12.5C9.94771 12.5 9.5 12.9477 9.5 13.5C9.5 14.0523 9.94771 14.5 10.5 14.5Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** lucide `star` — the default-organization badge (OrganizationPicker). */\nexport function StarIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\" />\n </svg>\n );\n}\n\n/** lucide `building-2` — the organization glyph (OrganizationPicker trigger). */\nexport function Building2Icon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z\" />\n <path d=\"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2\" />\n <path d=\"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2\" />\n <path d=\"M10 6h4\" />\n <path d=\"M10 10h4\" />\n <path d=\"M10 14h4\" />\n <path d=\"M10 18h4\" />\n </svg>\n );\n}\n","\"use client\";\n\n/**\n * Injected portal-container seam.\n *\n * The matrx-frontend original resolved nested portal targets through\n * `useNestedPortalContainer` (explicit prop > dialog content > popout body >\n * document.body) — a host-shaped hook wired to that app's dialog and\n * window-panel systems. The package inverts the seam: hosts provide the\n * resolved container through `PortalContainerProvider`; an explicit\n * `container` prop on a component still wins, and with neither the portal\n * falls through to `document.body` (Radix default). Priority semantics are\n * unchanged from the original.\n */\n\nimport * as React from \"react\";\n\n// Shared identity across independently bundled public entrypoints/loaders.\nconst CONTEXT_SLOT = Symbol.for(\"ai-matrx.design-system.portal-container-context\");\nconst contextRegistry = globalThis as typeof globalThis & { [CONTEXT_SLOT]?: React.Context<HTMLElement | null | undefined> };\nconst PortalContainerContext = contextRegistry[CONTEXT_SLOT] ??= React.createContext<HTMLElement | null | undefined>(undefined);\n\nexport interface PortalContainerProviderProps {\n /** Where nested Radix portals (Popover, etc.) should mount. `null`/`undefined` → document.body. */\n container: HTMLElement | null | undefined;\n children: React.ReactNode;\n}\n\nexport function PortalContainerProvider({\n container,\n children,\n}: PortalContainerProviderProps) {\n return (\n <PortalContainerContext.Provider value={container ?? undefined}>\n {children}\n </PortalContainerContext.Provider>\n );\n}\n\n/**\n * Resolve a portal target: explicit prop (including an explicit `null`,\n * meaning \"the default body\") beats the injected container.\n */\nexport function usePortalContainer(\n explicit?: HTMLElement | null,\n): HTMLElement | undefined {\n const injected = React.useContext(PortalContainerContext);\n\n if (explicit !== undefined) {\n return explicit ?? undefined;\n }\n\n return injected ?? undefined;\n}\n","\"use client\";\n\n/**\n * Ported verbatim from matrx-frontend `components/ui/radix-dialog-modal-context.tsx`.\n * Shared by the Sheet and BottomSheet families (and available to hosts that\n * compose their own Radix Dialog-derived wrappers around these primitives).\n */\n\nimport * as React from \"react\";\n\n// Shared identity across independently bundled public entrypoints/loaders.\nconst CONTEXT_SLOT = Symbol.for(\"ai-matrx.design-system.dialog-modal-context\");\nconst contextRegistry = globalThis as typeof globalThis & { [CONTEXT_SLOT]?: React.Context<boolean> };\nconst RadixDialogModalContext = contextRegistry[CONTEXT_SLOT] ??= React.createContext<boolean>(true);\n\nexport interface RadixDialogModalProviderProps {\n children: React.ReactNode;\n modal: boolean;\n}\n\n/**\n * Keeps our Radix-based content wrappers aligned with the owning Root's\n * modality so ARIA semantics cannot drift from focus/pointer behavior.\n */\nexport function RadixDialogModalProvider({\n children,\n modal,\n}: RadixDialogModalProviderProps) {\n return (\n <RadixDialogModalContext.Provider value={modal}>\n {children}\n </RadixDialogModalContext.Provider>\n );\n}\n\n/** Returns whether the nearest Radix Dialog-derived root is modal. */\nexport function useRadixDialogModal(): boolean {\n return React.useContext(RadixDialogModalContext);\n}\n","\"use client\";\n\n/**\n * useIsMobile — the ONE breakpoint hook the package's responsive primitives\n * read (CommandDialog and Dialog both auto-render as a bottom sheet below it).\n *\n * Lifted out of `command.tsx`, where it lived privately, when Dialog arrived\n * and needed the SAME answer: two copies of a breakpoint hook is exactly the\n * duplication this package exists to end, and a Dialog that disagreed with a\n * CommandDialog about what \"mobile\" means would render two different sheet\n * geometries on one screen.\n *\n * SSR-safe by construction: `false` until mounted, so the server and the first\n * client paint agree and the desktop geometry is what hydrates. The mobile\n * geometry swaps in on the effect pass.\n *\n * The breakpoint is the host-original 768px (Tailwind `md`). It is exported so\n * a host can branch on the same number instead of inventing a second one.\n */\n\nimport * as React from \"react\";\n\n/** Viewport width (px) below which the package treats a surface as mobile. */\nexport const MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile(): boolean {\n const [isMobile, setIsMobile] = React.useState(false);\n const [hasMounted, setHasMounted] = React.useState(false);\n\n React.useEffect(() => {\n setHasMounted(true);\n\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n onChange();\n\n // NO ENVIRONMENT MAY CRASH ON THIS HOOK. `matchMedia` is absent in older\n // jsdom setups and in some embedded webviews, and a primitive that throws\n // there takes the whole host's test suite (or screen) down over a\n // breakpoint — a cost wildly out of proportion to the answer. Without it\n // the width read above still gives a correct first answer; only live\n // resize tracking is lost, which is exactly what is unavailable.\n if (typeof window.matchMedia !== \"function\") {\n return undefined;\n }\n\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n mql.addEventListener(\"change\", onChange);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n if (!hasMounted) {\n return false;\n }\n return isMobile;\n}\n","\"use client\";\n\n/**\n * DropdownMenu — Radix dropdown with two behaviours the stock body lacks.\n *\n * 1. THE ROOT RENDERS UNCONDITIONALLY — no hydration mount gate. A wrapper in\n * matrx-frontend once deferred rendering until after hydration on a false\n * premise (Radix ids come from React's SSR-stable `useId`), which deleted\n * the always-visible trigger — buttons, `…` menus — from SSR and the first\n * client paint.\n *\n * 2. A LONG MENU SCROLLS INSTEAD OF GROWING OFF-SCREEN. Content and SubContent\n * cap at `--radix-dropdown-menu-content-available-height` — the space Radix\n * actually measured between the trigger and the viewport edge — and scroll\n * past it. Without the cap a menu longer than the viewport puts its last\n * items where no pointer can reach them, and on a short window that can be\n * the only exit from the surface.\n *\n * Portalling goes through the package's `usePortalContainer` seam, so a menu\n * opened inside a Dialog mounts INSIDE the dialog (staying in the scroll\n * shard, where its wheel events work) instead of at `document.body`. An\n * explicit `container` prop still wins.\n *\n * Icons are the package's inlined SVGs (C19) — no icon-library dependency.\n */\n\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport * as React from \"react\";\n\nimport { cn } from \"./cn\";\nimport { MOTION_POPPER } from \"./motion\";\nimport { CheckIcon, DotFilledIcon, RadixChevronRightIcon } from \"./icons\";\nimport { usePortalContainer } from \"./portal-container\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst MENU_SURFACE_CLASS =\n \"z-[10001] min-w-[8rem] max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto overflow-x-hidden overscroll-contain rounded-md border bg-popover p-1 text-popover-foreground\";\n\n\nconst MENU_ITEM_CLASS =\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\";\n\nconst MENU_INDICATOR_ITEM_CLASS =\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\";\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n data-slot=\"dropdown-menu-sub-trigger\"\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <RadixChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(MENU_SURFACE_CLASS, \"shadow-lg\", MOTION_POPPER, className)}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n\nexport interface DropdownMenuContentProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> {\n /** Explicit portal target; wins over the injected container. */\n container?: HTMLElement | null;\n}\n\nconst DropdownMenuContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n DropdownMenuContentProps\n>(({ className, sideOffset = 4, container, ...props }, ref) => {\n const portalContainer = usePortalContainer(container);\n return (\n <DropdownMenuPrimitive.Portal container={portalContainer}>\n <DropdownMenuPrimitive.Content\n ref={ref}\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n MENU_SURFACE_CLASS,\n \"shadow-md\",\n MOTION_POPPER,\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n});\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n data-slot=\"dropdown-menu-item\"\n className={cn(MENU_ITEM_CLASS, inset && \"pl-8\", className)}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(MENU_INDICATOR_ITEM_CLASS, className)}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(MENU_INDICATOR_ITEM_CLASS, className)}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <DotFilledIcon className=\"h-4 w-4 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n data-slot=\"dropdown-menu-label\"\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n);\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","/** Pure Alchemy asset export. Safe to import without React or browser APIs. */\nexport const ALCHEMY_GLYPH_SVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4.5 5.5h8v11h-8z\"/><path d=\"M8.5 9.5h8v9h-8z\"/><path d=\"m18.5 3 .65 1.85L21 5.5l-1.85.65L18.5 8l-.65-1.85L16 5.5l1.85-.65z\"/></svg>';\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n buildAgentPayload,\n createBrowserTransport,\n directSource,\n normalizeTransferJson,\n sealTransferArtifact,\n type AgentPayloadInput,\n type PageAction,\n type Payload,\n type Source,\n type TransferOutcome,\n} from \"@ai-matrx/kit/content-transfer\";\nimport {\n ContentTransferMenu,\n useContentTransferCapabilities,\n type ContentTransferController,\n type TransferMenuPresentation,\n} from \"./index\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../dialog\";\nimport { Button } from \"../button\";\nimport { cn } from \"../cn\";\n\nexport type AlchemyOptionValues = Record<string, boolean | number>;\nexport type AlchemySourceOption =\n | {\n kind: \"toggle\";\n key: string;\n label: string;\n hint?: string;\n default: boolean;\n }\n | {\n kind: \"preset\";\n key: string;\n label: string;\n options: { label: string; value: number }[];\n default: number;\n }\n | {\n kind: \"slider\";\n key: string;\n label: string;\n hint?: string;\n stops: number[];\n default: number;\n formatValue: (value: number) => string;\n }\n | {\n kind: \"number\";\n key: string;\n label: string;\n hint?: string;\n min?: number;\n step?: number;\n presets?: { label: string; value: number }[];\n default: number;\n };\nexport interface AlchemyCustomSource {\n label?: string;\n hint?: string;\n options: AlchemySourceOption[];\n build(values: AlchemyOptionValues): {\n text: string;\n meta?: Record<string, string | number | boolean | undefined>;\n };\n wrap(\n text: string,\n values: AlchemyOptionValues,\n meta?: Record<string, string | number | boolean | undefined>,\n ): AgentPayloadInput;\n dialogTitle?: string;\n dialogDescription?: string;\n}\nexport type AlchemyDetail = \"full\" | \"compact\" | \"brief\";\nexport interface AlchemyGroomerSection {\n id: string;\n title: string;\n description?: string;\n cuttable?: boolean;\n levelLabels?: Partial<Record<AlchemyDetail, string>>;\n build(level: AlchemyDetail): unknown;\n defaultSelection?: AlchemyDetail | \"off\";\n}\nexport interface AlchemyGroomerConfig {\n label: string;\n kind: string;\n location: string;\n description: string;\n attributes?: AgentPayloadInput[\"attributes\"];\n context?: AgentPayloadInput[\"context\"];\n summary?: string;\n sections: AlchemyGroomerSection[];\n}\nexport interface AlchemyCopyVariant {\n id: string;\n label: string;\n hint?: string;\n icon?: React.ComponentType<{ className?: string }>;\n section?: \"copy\" | \"ai\";\n ariaLabel?: string;\n successMessage?: string;\n build?: () =>\n AgentPayloadInput | string | Promise<AgentPayloadInput | string>;\n onSelect?: () => void | Promise<void>;\n modal?: (props: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n }) => React.ReactNode;\n}\nexport interface AlchemyExportItem {\n id: string;\n label: string;\n build?: () => { content: BlobPart; extension: string; mime: string };\n onSelect?: () => void | Promise<void>;\n}\ntype Resolvable<T> = T | (() => T);\nexport interface MatrxCopyMenuProps {\n label: string;\n /** Stable record identity when this mounted control can switch between records. */\n sourceId?: string;\n human?: Resolvable<string>;\n json?: Resolvable<unknown>;\n agent?: Resolvable<AgentPayloadInput | string>;\n aiVariants?: AlchemyCopyVariant[];\n aiCustom?: AlchemyCustomSource;\n groomer?: () => AlchemyGroomerConfig;\n agentVariant?: {\n id?: string;\n label?: string;\n hint?: string;\n position?: \"first\" | \"last\";\n };\n export?: {\n items: AlchemyExportItem[];\n sheetRows?: () => Array<Record<string, unknown>>;\n };\n /** Host-owned authenticated destination, not a second export serializer. */\n sendToSheet?: (\n rows: Array<Record<string, unknown>>,\n label: string,\n ) => Promise<TransferOutcome>;\n hide?: Array<\"copy\" | \"ai\" | \"export\">;\n disabled?: boolean;\n className?: string;\n stopPropagation?: boolean;\n size?: \"xs\" | \"icon\" | \"sm\";\n appearance?: \"bare\" | \"segmented\";\n unified?: boolean;\n grouped?: boolean;\n}\nconst resolve = <T,>(value: Resolvable<T>): T =>\n typeof value === \"function\" ? (value as () => T)() : value;\nconst asPayload = (value: AgentPayloadInput | string): Payload => ({\n kind: \"markdown\",\n text: typeof value === \"string\" ? value : buildAgentPayload(value),\n});\nconst structuredPayload = (value: AgentPayloadInput | string): Payload => {\n if (typeof value === \"string\") return { kind: \"markdown\", text: value };\n const clean = (record?: AgentPayloadInput[\"context\"]) =>\n Object.fromEntries(\n Object.entries(record ?? {}).filter(([, entry]) => entry !== undefined),\n );\n return {\n kind: \"json\",\n value: normalizeTransferJson({\n kind: value.kind,\n location: value.location,\n description: value.description,\n data: value.data,\n ...(value.summary !== undefined ? { summary: value.summary } : {}),\n attributes: clean(value.attributes),\n context: clean(value.context),\n }),\n };\n};\nconst actionDone = (message: string): TransferOutcome => ({\n status: \"success\",\n delivered: \"action\",\n mimeTypes: [],\n message,\n});\nconst sourceFor = (\n id: string,\n label: string,\n build: () => Payload | Promise<Payload>,\n): Source => ({\n id,\n label,\n capture: async ({ signal }) => {\n signal.throwIfAborted();\n const payload = await build();\n signal.throwIfAborted();\n return directSource(payload, { sourceId: id, label });\n },\n});\n\n/** Opinionated bridge for Matrx's existing content builders, with one transfer UI. */\nexport function MatrxCopyMenu(props: MatrxCopyMenuProps) {\n return (\n <MatrxCopyMenuSession key={props.sourceId ?? props.label} {...props} />\n );\n}\n\nfunction MatrxCopyMenuSession(props: MatrxCopyMenuProps) {\n const instance = React.useId();\n const controller = React.useRef<ContentTransferController>(null);\n const capabilities = useContentTransferCapabilities();\n const transport = capabilities.transport ?? createBrowserTransport();\n const [modal, setModal] = React.useState<AlchemyCopyVariant | null>(null);\n const [configuration, setConfiguration] = React.useState<{\n custom?: AlchemyCustomSource;\n groomer?: AlchemyGroomerConfig;\n } | null>(null);\n const copyVisible = !props.hide?.includes(\"copy\");\n const aiVisible = !props.hide?.includes(\"ai\");\n const exportVisible = !props.hide?.includes(\"export\");\n const make = (\n suffix: string,\n build: () => Payload | Promise<Payload>,\n label = props.label,\n ) =>\n sourceFor(\n `${props.sourceId ?? `${instance}:${props.label}`}:${suffix}`,\n label,\n build,\n );\n const human =\n copyVisible && props.human !== undefined\n ? make(\"human\", () => ({ kind: \"text\", text: resolve(props.human!) }))\n : undefined;\n const humanMarkdown =\n copyVisible && props.human !== undefined\n ? make(\"human-markdown\", () => ({\n kind: \"markdown\",\n text: resolve(props.human!),\n }))\n : undefined;\n const json =\n aiVisible && props.json !== undefined\n ? make(\"json\", () => ({\n kind: \"json\",\n value: normalizeTransferJson(resolve(props.json!)),\n }))\n : undefined;\n const agent =\n aiVisible && props.agent !== undefined\n ? make(\"agent\", () => asPayload(resolve(props.agent!)))\n : undefined;\n const structuredAgent =\n aiVisible && props.agent !== undefined\n ? make(\"structured-agent\", () => structuredPayload(resolve(props.agent!)))\n : undefined;\n const table =\n exportVisible && props.export?.sheetRows\n ? make(\"rows\", () => {\n const value = normalizeTransferJson(props.export!.sheetRows!());\n if (\n !Array.isArray(value) ||\n value.some(\n (row) =>\n row === null || typeof row !== \"object\" || Array.isArray(row),\n )\n )\n throw new Error(\"Sheet rows must be JSON objects.\");\n const rows = value as Array<\n Record<string, import(\"@ai-matrx/kit/content-transfer\").Json>\n >;\n const keys = [...new Set(rows.flatMap((row) => Object.keys(row)))];\n return {\n kind: \"rows\",\n rows,\n columns: keys.map((key) => ({\n id: key,\n label: key,\n path: `/${key.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")}`,\n visible: true,\n })),\n };\n })\n : undefined;\n const builderVariants = aiVisible\n ? (props.aiVariants ?? [])\n .filter(\n (variant) => variant.build && !variant.onSelect && !variant.modal,\n )\n .map((variant) => ({\n ...variant,\n copyLabel: variant.label,\n source: make(\n `variant:${variant.id}`,\n async () => asPayload(await variant.build!()),\n variant.label,\n ),\n }))\n : [];\n const faithful = agent\n ? [\n {\n id: props.agentVariant?.id ?? \"faithful\",\n label: props.agentVariant?.label ?? \"Full AI context\",\n source: agent,\n copyLabel: props.agentVariant?.label ?? \"Copy for AI\",\n ...(props.agentVariant?.hint\n ? { hint: props.agentVariant.hint }\n : {}),\n },\n ]\n : [];\n const variants =\n props.agentVariant?.position === \"last\"\n ? [...builderVariants, ...faithful]\n : [...faithful, ...builderVariants];\n const actions: (PageAction & TransferMenuPresentation)[] = [];\n if (aiVisible)\n for (const variant of props.aiVariants ?? []) {\n if (!variant.onSelect && !variant.modal) continue;\n actions.push({\n ...variant,\n id: `variant-action:${variant.id}`,\n label: variant.label,\n supports: () => true,\n run: async () => {\n if (variant.onSelect) await variant.onSelect();\n else setModal(variant);\n return actionDone(`Opened ${variant.label}`);\n },\n });\n }\n if (aiVisible && props.aiCustom)\n actions.push({\n id: \"configure-source\",\n label: props.aiCustom.label ?? \"Customize source…\",\n ...(props.aiCustom.hint ? { hint: props.aiCustom.hint } : {}),\n supports: () => true,\n run: async () => {\n setConfiguration({ custom: props.aiCustom! });\n return actionDone(\"Source options opened\");\n },\n });\n if (aiVisible && props.groomer)\n actions.push({\n id: \"groom-source\",\n label: \"Customize sections…\",\n supports: () => true,\n run: async () => {\n setConfiguration({ groomer: props.groomer!() });\n return actionDone(\"Section options opened\");\n },\n });\n if (exportVisible)\n for (const item of props.export?.items ?? [])\n actions.push({\n id: `export:${item.id}`,\n label: item.label,\n supports: () => true,\n ...(item.build && !item.onSelect\n ? {\n source: make(\n `export:${item.id}`,\n async () => {\n const file = item.build!();\n const bytes = new Uint8Array(\n await new Blob([file.content], {\n type: file.mime,\n }).arrayBuffer(),\n );\n return {\n kind: \"registered\",\n format: \"matrx-file\",\n value: {\n bytes: Array.from(bytes),\n mime: file.mime,\n extension: file.extension,\n },\n };\n },\n item.label,\n ),\n }\n : {}),\n run: async ({ snapshot, draft, signal }) => {\n if (item.onSelect) {\n await item.onSelect();\n return actionDone(`Opened ${item.label}`);\n }\n const value =\n draft.payload.kind === \"registered\" ? draft.payload.value : null;\n if (\n !value ||\n Array.isArray(value) ||\n typeof value !== \"object\" ||\n !Array.isArray(value.bytes) ||\n typeof value.mime !== \"string\" ||\n typeof value.extension !== \"string\" ||\n value.bytes.some(\n (byte) =>\n typeof byte !== \"number\" ||\n !Number.isInteger(byte) ||\n byte < 0 ||\n byte > 255,\n )\n )\n throw new Error(`${item.label} did not capture a valid file.`);\n if (\n draft.omissions.some((omission) => omission.reason !== \"duplicate\")\n )\n throw new Error(\n \"This custom file exceeds the configured export limits or contains excluded content. Use a standard format or revise the source options.\",\n );\n const bytes = new Uint8Array(value.bytes as number[]);\n const filename = `${\n props.label\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\") || \"export\"\n }.${value.extension.replace(/[^a-zA-Z0-9.-]/g, \"\") || \"bin\"}`;\n return transport.download(\n sealTransferArtifact({\n snapshotId: snapshot.id,\n draftRevision: draft.revision,\n format: `export:${item.id}`,\n plainText: \"\",\n file: { filename, mime: value.mime, bytes },\n omissions: [...draft.omissions],\n }),\n signal,\n );\n },\n });\n if (exportVisible && table && props.sendToSheet)\n actions.push({\n id: \"send-google-sheet\",\n label: \"Send to Google Sheet\",\n source: table,\n supports: () => true,\n run: async ({ draft }) => {\n if (draft.payload.kind !== \"rows\")\n throw new Error(\"Google Sheets requires captured rows.\");\n return props.sendToSheet!(draft.payload.rows, props.label);\n },\n });\n const source =\n json ?? table ?? structuredAgent ?? human ?? builderVariants[0]?.source;\n if (!source && !actions.length) return null;\n // Action-only targets carry an explicit description, never invented record data.\n const target =\n source ?? make(\"actions\", () => ({ kind: \"text\", text: props.label }));\n return (\n <>\n <ContentTransferMenu\n source={target}\n controllerRef={controller}\n label={props.label}\n variants={variants}\n actions={actions}\n hide={[\n ...(!copyVisible || !source ? [\"copy\" as const] : []),\n ...(!aiVisible || !source ? [\"prepare\" as const] : []),\n ...(!exportVisible || !source ? [\"download\" as const] : []),\n ]}\n formatSources={{\n ...(human\n ? { plain: human, markdown: humanMarkdown!, html: humanMarkdown! }\n : {}),\n ...(json ? { json, \"compact-json\": json } : {}),\n ...(table ? { csv: table, tsv: table } : {}),\n }}\n {...(props.disabled !== undefined ? { disabled: props.disabled } : {})}\n className={cn(\n props.className,\n props.size === \"xs\" && \"matrx-alchemy-xs\",\n props.size === \"sm\" && \"matrx-alchemy-sm\",\n )}\n {...(props.stopPropagation !== undefined\n ? { stopPropagation: props.stopPropagation }\n : {})}\n />\n {modal?.modal?.({\n open: true,\n onOpenChange: (open) => {\n if (!open) setModal(null);\n },\n })}\n {configuration ? (\n <SourceConfiguration\n restoreFocus={() => controller.current?.focusTrigger()}\n key={`${instance}:configuration`}\n configuration={configuration}\n onClose={() => setConfiguration(null)}\n onPrepare={async (payload, label) => {\n if (!controller.current)\n throw new Error(\"Alchemy is no longer mounted.\");\n await controller.current.prepare(payload, {\n label,\n id: `${instance}:configured:${crypto.randomUUID()}`,\n });\n setConfiguration(null);\n }}\n />\n ) : null}\n </>\n );\n}\n\nfunction SourceConfiguration({\n restoreFocus,\n configuration,\n onClose,\n onPrepare,\n}: {\n configuration: {\n custom?: AlchemyCustomSource;\n groomer?: AlchemyGroomerConfig;\n };\n restoreFocus(): void;\n onClose(): void;\n onPrepare(payload: Payload, label: string): Promise<void>;\n}) {\n const custom = configuration.custom;\n const handingOff = React.useRef(false);\n const groomer = configuration.groomer;\n const [values, setValues] = React.useState<AlchemyOptionValues>(() =>\n Object.fromEntries(\n custom?.options.map((option) => [option.key, option.default]) ?? [],\n ),\n );\n const [sections, setSections] = React.useState<\n Record<string, AlchemyDetail | \"off\">\n >(() =>\n Object.fromEntries(\n groomer?.sections.map((section) => [\n section.id,\n section.defaultSelection ?? \"full\",\n ]) ?? [],\n ),\n );\n const [error, setError] = React.useState<string | null>(null);\n const [busy, setBusy] = React.useState(false);\n const title = custom?.dialogTitle ?? groomer?.label ?? \"Customize source\";\n let prepared: AgentPayloadInput | null = null;\n let buildError: string | null = null;\n let text = \"\";\n try {\n if (custom) {\n const result = custom.build(values);\n prepared = custom.wrap(result.text, values, result.meta);\n } else if (groomer) {\n const data: Record<string, unknown> = {};\n const omitted: string[] = [];\n for (const section of groomer.sections) {\n const level = sections[section.id] ?? \"full\";\n if (level === \"off\") omitted.push(section.id);\n else {\n const value = section.build(level);\n if (value !== undefined && value !== null) data[section.id] = value;\n }\n }\n prepared = {\n kind: groomer.kind,\n location: groomer.location,\n description: groomer.description,\n data,\n ...(groomer.summary ? { summary: groomer.summary } : {}),\n attributes: {\n ...groomer.attributes,\n dropped_sections: omitted.join(\",\"),\n },\n ...(groomer.context ? { context: groomer.context } : {}),\n };\n }\n text = prepared ? buildAgentPayload(prepared) : \"\";\n } catch (cause) {\n buildError =\n cause instanceof Error ? cause.message : \"Could not prepare this source.\";\n }\n return (\n <Dialog\n open\n onOpenChange={(open) => {\n if (!open && !busy) onClose();\n }}\n >\n <DialogContent\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n if (!handingOff.current) restoreFocus();\n }}\n className=\"matrx-alchemy-workspace\"\n >\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>\n {custom?.dialogDescription ??\n \"Choose the source detail, then prepare, edit, summarize, copy or export it in Alchemy.\"}\n </DialogDescription>\n </DialogHeader>\n <div className=\"matrx-alchemy-main matrx-alchemy-toolbar\">\n {custom?.options.map((option) => (\n <label key={option.key}>\n {option.label}\n {\"hint\" in option && option.hint ? (\n <small>{option.hint}</small>\n ) : null}\n {option.kind === \"toggle\" ? (\n <input\n type=\"checkbox\"\n checked={Boolean(values[option.key])}\n onChange={(event) =>\n setValues({ ...values, [option.key]: event.target.checked })\n }\n />\n ) : option.kind === \"preset\" ? (\n <select\n value={Number(values[option.key])}\n onChange={(event) =>\n setValues({\n ...values,\n [option.key]: Number(event.target.value),\n })\n }\n >\n {option.options.map((choice) => (\n <option key={choice.value} value={choice.value}>\n {choice.label}\n </option>\n ))}\n </select>\n ) : option.kind === \"slider\" ? (\n <>\n <input\n type=\"range\"\n min={0}\n max={Math.max(0, option.stops.length - 1)}\n step={1}\n value={option.stops.indexOf(Number(values[option.key]))}\n onChange={(event) =>\n setValues({\n ...values,\n [option.key]: option.stops[Number(event.target.value)]!,\n })\n }\n />\n <span>{option.formatValue(Number(values[option.key]))}</span>\n </>\n ) : (\n <>\n <input\n type=\"number\"\n min={option.min}\n step={option.step}\n value={Number(values[option.key])}\n onChange={(event) =>\n setValues({\n ...values,\n [option.key]: Number(event.target.value),\n })\n }\n />\n {option.presets?.map((preset) => (\n <Button\n key={preset.value}\n type=\"button\"\n variant=\"ghost\"\n onClick={() =>\n setValues({ ...values, [option.key]: preset.value })\n }\n >\n {preset.label}\n </Button>\n ))}\n </>\n )}\n </label>\n ))}\n {groomer ? (\n <>\n <div>\n {([\"full\", \"compact\", \"brief\"] as const).map((level) => (\n <Button\n key={level}\n type=\"button\"\n variant=\"ghost\"\n onClick={() =>\n setSections(\n Object.fromEntries(\n groomer.sections.map((section) => [\n section.id,\n level === \"brief\" && section.cuttable\n ? \"off\"\n : level,\n ]),\n ),\n )\n }\n >\n {level}\n </Button>\n ))}\n </div>\n {groomer.sections.map((section) => (\n <label key={section.id}>\n {section.title}\n <select\n value={sections[section.id]}\n onChange={(event) =>\n setSections({\n ...sections,\n [section.id]: event.target.value as\n AlchemyDetail | \"off\",\n })\n }\n >\n {([\"full\", \"compact\", \"brief\"] as const).map((level) => (\n <option key={level} value={level}>\n {section.levelLabels?.[level] ?? level}\n </option>\n ))}\n {section.cuttable ? (\n <option value=\"off\">Exclude</option>\n ) : null}\n </select>\n {section.description ? (\n <span>{section.description}</span>\n ) : null}\n </label>\n ))}\n </>\n ) : null}\n </div>\n <p>\n {text.length.toLocaleString()} characters · approximately{\" \"}\n {Math.ceil(text.length / 4).toLocaleString()} tokens\n </p>\n {error || buildError ? <p role=\"alert\">{error ?? buildError}</p> : null}\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"ghost\"\n disabled={busy}\n onClick={onClose}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n disabled={busy || !prepared || Boolean(buildError)}\n onClick={async () => {\n if (!prepared) return;\n setBusy(true);\n setError(null);\n try {\n handingOff.current = true;\n await onPrepare(structuredPayload(prepared), title);\n } catch (cause) {\n handingOff.current = false;\n setError(\n cause instanceof Error\n ? cause.message\n : \"Could not open Alchemy.\",\n );\n } finally {\n setBusy(false);\n }\n }}\n >\n {busy ? \"Preparing…\" : \"Prepare in Alchemy\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport type AlchemyGroomerPreset = \"everything\" | \"balanced\" | \"minimal\";\nexport const GROOMER_LEVELS: AlchemyDetail[] = [\"full\", \"compact\", \"brief\"];\nexport function applyGroomerPreset(\n preset: AlchemyGroomerPreset,\n sections: AlchemyGroomerSection[],\n): Record<string, AlchemyDetail | \"off\"> {\n return Object.fromEntries(\n sections.map((section) => [\n section.id,\n preset === \"everything\"\n ? \"full\"\n : preset === \"balanced\"\n ? \"compact\"\n : section.cuttable\n ? \"off\"\n : \"brief\",\n ]),\n );\n}\nexport function defaultGroomerSelections(\n sections: AlchemyGroomerSection[],\n): Record<string, AlchemyDetail | \"off\"> {\n return Object.fromEntries(\n sections.map((section) => [section.id, section.defaultSelection ?? \"full\"]),\n );\n}\nexport function buildGroomerPresetPayload(\n config: AlchemyGroomerConfig,\n preset: AlchemyGroomerPreset,\n): AgentPayloadInput {\n const selections = applyGroomerPreset(preset, config.sections);\n const data: Record<string, unknown> = {};\n const dropped: string[] = [];\n for (const section of config.sections) {\n const selection = selections[section.id] ?? \"full\";\n if (selection === \"off\") {\n dropped.push(section.id);\n continue;\n }\n const value = section.build(selection);\n if (value !== undefined && value !== null) data[section.id] = value;\n }\n return {\n kind: config.kind,\n location: config.location,\n description:\n preset === \"everything\"\n ? config.description\n : `${config.description} (${preset} detail)`,\n data,\n ...(config.summary !== undefined ? { summary: config.summary } : {}),\n attributes: {\n ...config.attributes,\n detail: preset,\n ...(dropped.length ? { dropped_sections: dropped.join(\",\") } : {}),\n },\n ...(config.context ? { context: config.context } : {}),\n };\n}\nexport function groomerPresetVariants(\n getConfig: () => AlchemyGroomerConfig,\n): AlchemyCopyVariant[] {\n return [\n {\n id: \"balanced\",\n label: \"Balanced\",\n hint: \"Compact sections\",\n build: () => buildGroomerPresetPayload(getConfig(), \"balanced\"),\n },\n {\n id: \"minimal\",\n label: \"Minimal\",\n hint: \"Brief sections with optional detail excluded\",\n build: () => buildGroomerPresetPayload(getConfig(), \"minimal\"),\n },\n ];\n}\n"],"mappings":"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","names":["React","createBrowserTransport","directSource","sealTransferArtifact","React","jsx","jsx","jsx","jsx","React","jsx","React","jsx","CONTEXT_SLOT","contextRegistry","React","jsx","jsxs","jsx","CONTEXT_SLOT","contextRegistry","jsx","jsxs","React","jsx","jsxs","jsxs","jsx","React","jsx","jsxs","Fragment","jsx","jsxs","sealTransferArtifact","createBrowserTransport","directSource"]}
|
|
1
|
+
{"version":3,"sources":["../src/content-transfer/index.tsx","../src/button.tsx","../src/cn.ts","../src/dialog.tsx","../src/motion.ts","../src/icons.tsx","../src/portal-container.tsx","../src/radix-dialog-modal-context.tsx","../src/use-is-mobile.ts","../src/dropdown-menu.tsx","../src/content-transfer/icon.ts","../src/content-transfer/matrx-copy.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n applySectionSelection,\n applyTransferLimits,\n capture,\n collectAllMatching,\n createBrowserTransport,\n createDraft,\n directSource,\n editDraft,\n projectSnapshot,\n readTransferCell,\n reduceJson,\n resetDraft,\n resolveTransferPreferences,\n resolveTransferRegistry,\n sealTransferArtifact,\n serialize,\n serializeMarkdownRich,\n transformRows,\n undoDraft,\n type AiPreparation,\n type Artifact,\n type BoundAllMatching,\n type Draft,\n type ExportProjection,\n type FormatAdapter,\n type Json,\n type PageAction,\n type Payload,\n type Section,\n type Snapshot,\n type Source,\n type SurfaceHandle,\n type TransferCapabilities,\n type TransferOutcome,\n type TransferPreferenceOverrides,\n type TransferPreferences,\n type TransferScope,\n type Transport,\n} from \"@ai-matrx/kit/content-transfer\";\nimport { Button } from \"../button\";\nimport { cn } from \"../cn\";\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from \"../dialog\";\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from \"../dropdown-menu\";\nexport { ALCHEMY_GLYPH_SVG } from \"./icon\";\n\nexport function AlchemyGlyph(props: React.SVGAttributes<SVGSVGElement>) {\n return <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\" {...props}><path d=\"M4.5 5.5h8v11h-8z\"/><path d=\"M8.5 9.5h8v9h-8z\"/><path d=\"m18.5 3 .65 1.85L21 5.5l-1.85.65L18.5 8l-.65-1.85L16 5.5l1.85-.65z\"/></svg>;\n}\n\nexport type ContentTransferCapabilities = TransferCapabilities & {\n /** Opaque host session boundary. It is used only to reset local menu state. */\n identityKey?: string;\n transport?: Transport;\n actions?: PageAction[];\n preferences?: TransferPreferenceOverrides;\n onOutcome?: (outcome: TransferOutcome) => void;\n};\nconst CapabilityContext = React.createContext<ContentTransferCapabilities>({});\nexport function ContentTransferCapabilitiesProvider({ value, children }: { value: ContentTransferCapabilities; children: React.ReactNode }) {\n return <CapabilityContext.Provider value={value}>{children}</CapabilityContext.Provider>;\n}\nexport const useContentTransferCapabilities = () => React.useContext(CapabilityContext);\nconst SurfaceContext = React.createContext<SurfaceHandle | null>(null);\nexport function ContentTransferSurfaceProvider({ handle, children }: { handle: SurfaceHandle; children: React.ReactNode }) {\n return <SurfaceContext.Provider value={handle}>{children}</SurfaceContext.Provider>;\n}\nexport const useContentTransferSurface = () => React.useContext(SurfaceContext);\n\nexport type SerializableFormat = \"plain\" | \"markdown\" | \"html\" | \"json\" | \"compact-json\" | \"csv\" | \"tsv\";\ntype BuiltInFormat = SerializableFormat | \"xlsx\";\nexport interface TransferMenuPresentation {\n hint?: string;\n icon?: React.ComponentType<{ className?: string }>;\n ariaLabel?: string;\n}\nexport interface TransferMenuVariant extends TransferMenuPresentation {\n id: string; label: string; source: Source | Payload;\n copyLabel?: string;\n section?: \"copy\" | \"ai\";\n successMessage?: string;\n}\nfunction MenuPresentation({ label, hint, icon: Icon }: TransferMenuPresentation & { label: string }) {\n return <>{Icon ? <Icon className=\"matrx-alchemy-menu-icon\"/> : null}<span>{label}{hint ? <small className=\"matrx-alchemy-menu-hint\">{hint}</small> : null}</span></>;\n}\nexport interface ContentTransferMenuProps {\n source?: Payload | Source;\n projection?: ExportProjection;\n sections?: Section[];\n preferences?: TransferPreferenceOverrides;\n enabled?: boolean;\n surface?: SurfaceHandle;\n label?: string;\n table?: { availableScopes: TransferScope[]; initialScope: TransferScope };\n /** A quick format may explicitly capture a different representation. */\n formatSources?: Partial<Record<SerializableFormat, Source | Payload>>;\n /** Named alternate sources open this same preparation workspace. */\n variants?: readonly TransferMenuVariant[];\n actions?: (PageAction & TransferMenuPresentation)[];\n capabilities?: ContentTransferCapabilities;\n disabled?: boolean;\n className?: string;\n stopPropagation?: boolean;\n hide?: readonly (\"copy\" | \"prepare\" | \"download\")[];\n controllerRef?: React.Ref<ContentTransferController>;\n}\nexport interface ContentTransferController {\n focusTrigger(): void;\n prepare(source: Source | Payload, options?: { id?: string; label?: string }): Promise<void>;\n}\n\nconst LABEL: Record<BuiltInFormat, string> = { plain: \"Plain text\", markdown: \"Markdown\", html: \"Formatted\", json: \"JSON\", \"compact-json\": \"Compact JSON\", csv: \"CSV\", tsv: \"Google Sheets\", xlsx: \"Excel workbook\" };\nconst BUILT_INS = Object.freeze((Object.keys(LABEL) as BuiltInFormat[]).map((id) => ({ id })));\nconst COPIES: SerializableFormat[] = [\"plain\", \"markdown\", \"html\", \"json\", \"compact-json\", \"csv\", \"tsv\"];\nconst DOWNLOADS: BuiltInFormat[] = [...COPIES, \"xlsx\"];\nconst EMPTY_VARIANTS: readonly { id: string; label: string; source: Source | Payload }[] = [];\nconst SCOPE_LABEL: Record<TransferScope, string> = { target: \"This content\", row: \"This row\", selected: \"Selected rows\", view: \"Current view\", loaded: \"Loaded rows\", \"all-matching\": \"All matching rows\" };\nconst filenameFor = (label: string) => label.toLocaleLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/(^-|-$)/g, \"\") || \"export\";\nconst estimateTokens = (text: string) => Math.ceil(text.length / 4);\nconst errorMessage = (error: unknown, fallback: string) => error instanceof Error ? error.message : fallback;\nconst isAbort = (error: unknown) => error instanceof DOMException && error.name === \"AbortError\";\nconst supportsBuiltIn = (format: BuiltInFormat, payload: Payload) => ![\"csv\", \"tsv\", \"xlsx\"].includes(format) || payload.kind === \"rows\";\nconst outcomeMessage = (result: TransferOutcome) => {\n if (result.status === \"success\") {\n const success = result as TransferOutcome & { delivered: string; message?: string };\n return success.delivered === \"action\" ? success.message ?? \"Action completed\" : success.delivered === \"download-started\" ? \"Download started\" : success.message ?? \"Copied\";\n }\n return result.status === \"degraded\" ? `Copied as plain text: ${result.reason}` : result.status === \"cancelled\" ? \"Cancelled\" : result.message;\n};\nconst materialIds = new WeakMap<object, number>();\nlet nextMaterialId = 0;\nfunction materialIdentity(material: Source | Payload | SurfaceHandle | null | undefined) {\n if (!material) return \"missing\";\n if (\"instanceId\" in material) return `surface:${material.instanceId}`;\n if (\"id\" in material) return `source:${material.id}`;\n let id = materialIds.get(material);\n if (id === undefined) { id = ++nextMaterialId; materialIds.set(material, id); }\n return `payload:${id}`;\n}\n\ntype CaptureResult = { snapshot: Snapshot; allMatching?: BoundAllMatching; collectionError?: string };\ntype WorkspaceState = CaptureResult & { sourceStale?: boolean | undefined; key: string; original: Draft; draft: Draft; scope: TransferScope; preferences: TransferPreferences; pending?: (CaptureResult & { scope: TransferScope }) | undefined; error?: string | undefined };\n\n/** Compare captured meaning at the user action boundary, never during render. */\nfunction snapshotContent(snapshot: Snapshot) {\n const { sourceId, label, payload, coverage, unsavedChanges, omissions, sections, limits } = snapshot;\n return JSON.stringify({ sourceId, label, payload, coverage, unsavedChanges, omissions, sections, limits });\n}\n\nfunction useFence() {\n const mounted = React.useRef(true);\n const nextId = React.useRef(0);\n const active = React.useRef(new Set<AbortController>());\n React.useEffect(() => {\n mounted.current = true;\n return () => { mounted.current = false; nextId.current += 1; active.current.forEach((c) => c.abort()); active.current.clear(); };\n }, []);\n const begin = React.useCallback(() => { const controller = new AbortController(); active.current.add(controller); return { controller, id: ++nextId.current }; }, []);\n const finish = React.useCallback((controller: AbortController) => active.current.delete(controller), []);\n const valid = React.useCallback((id: number, controller: AbortController) => mounted.current && !controller.signal.aborted && nextId.current === id, []);\n const abortAll = React.useCallback(() => { nextId.current += 1; active.current.forEach((c) => c.abort()); active.current.clear(); }, []);\n return { begin, finish, valid, abortAll };\n}\n\nasync function xlsxArtifact(draft: Draft, label: string): Promise<Artifact> {\n if (draft.payload.kind !== \"rows\") throw new Error(\"Excel workbook export requires tabular content.\");\n const XLSX = await import(\"xlsx\");\n const columns = draft.payload.columns.filter((c) => c.visible && c.exportable !== false && c.classification !== \"secret\" && c.classification !== \"credential\");\n const cells = draft.payload.rows.map((row) => columns.map((column) => {\n const value = readTransferCell(row, column);\n return value === null || [\"string\", \"number\", \"boolean\"].includes(typeof value) ? value : value === undefined ? \"\" : JSON.stringify(value);\n }));\n const sheet = XLSX.utils.aoa_to_sheet([columns.map((c) => c.label), ...cells]);\n const book = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(book, sheet, label.replace(/[\\\\/?*[\\]:]/g, \" \").trim().slice(0, 31) || \"Data\");\n const written = XLSX.write(book, { type: \"array\", bookType: \"xlsx\", compression: true });\n return sealTransferArtifact({ snapshotId: draft.snapshotId, draftRevision: draft.revision, format: \"xlsx\", plainText: serialize(draft, \"tsv\", { spreadsheetSafe: true }).plainText, file: { filename: `${filenameFor(label)}.xlsx`, mime: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\", bytes: written instanceof Uint8Array ? written : new Uint8Array(written) }, omissions: [...draft.omissions] });\n}\nasync function buildArtifact(draft: Draft, format: BuiltInFormat, label: string): Promise<Artifact> {\n if (!supportsBuiltIn(format, draft.payload)) throw new Error(`${LABEL[format]} is available for tabular content only.`);\n if (format === \"xlsx\") return xlsxArtifact(draft, label);\n if (format === \"html\" && draft.payload.kind === \"markdown\") return serializeMarkdownRich(draft, `${filenameFor(label)}.html`);\n const extension = format === \"plain\" ? \"txt\" : format === \"compact-json\" ? \"json\" : format;\n return serialize(draft, format, { spreadsheetSafe: format === \"csv\" || format === \"tsv\", filename: `${filenameFor(label)}.${extension}` });\n}\n\nexport function ContentTransferMenu(props: ContentTransferMenuProps) {\n const inherited = React.useContext(CapabilityContext);\n const identityKey = props.capabilities?.identityKey ?? inherited.identityKey;\n return <ContentTransferMenuSession key={identityKey ?? \"anonymous\"} {...props} />;\n}\n\nfunction ContentTransferMenuSession({ source, surface, label, projection, sections, preferences, table, formatSources, variants = EMPTY_VARIANTS, actions = [], capabilities: local, disabled, enabled = true, className, stopPropagation = true, hide = [], controllerRef }: ContentTransferMenuProps) {\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const inherited = React.useContext(CapabilityContext);\n const nearestSurface = React.useContext(SurfaceContext);\n const fence = useFence();\n const [menuCapture, setMenuCapture] = React.useState<CaptureResult | null>(null);\n const [menuStatus, setMenuStatus] = React.useState<\"idle\" | \"loading\" | string>(\"idle\");\n const [workspaces, setWorkspaces] = React.useState<Record<string, WorkspaceState>>({});\n const [workspaceKey, setWorkspaceKey] = React.useState<string | null>(null);\n const [workspaceOpen, setWorkspaceOpen] = React.useState(false);\n const workspaceCaptures = React.useRef(new Map<string, (scope: TransferScope, signal: AbortSignal) => Promise<CaptureResult>>());\n const externalWorkspaceKeys = React.useRef(new Set<string>());\n const [notice, setNotice] = React.useState<string | null>(null);\n const scopes = React.useMemo(() => table?.availableScopes ?? ([\"target\"] as TransferScope[]), [table]);\n const initialScope = table?.initialScope ?? \"target\";\n if (!scopes.includes(initialScope)) throw new Error(\"Alchemy initialScope must be included in availableScopes.\");\n const primary = surface ?? source ?? nearestSurface;\n const sourceLabel = label ?? (surface?.surfaceName ?? (source && \"label\" in source ? source.label : nearestSurface?.surfaceName) ?? \"content\");\n const primaryWorkspaceKey = `primary:${materialIdentity(primary)}`;\n const nearestWorkspaceKey = source && !surface && nearestSurface ? `surface:${materialIdentity(nearestSurface)}` : null;\n const variantWorkspaceKeys = React.useMemo(() => new Map(variants.map((variant) => [variant.id, `variant:${variant.id}:${materialIdentity(variant.source)}`])), [variants]);\n const transport = local?.transport ?? inherited.transport ?? createBrowserTransport();\n const ai = local?.ai ?? inherited.ai;\n const providerPreferences = React.useMemo(() => resolveTransferPreferences(inherited.preferences, local?.preferences), [inherited.preferences, local?.preferences]);\n const adapters = React.useMemo(() => resolveTransferRegistry<{ id: string }>(BUILT_INS, inherited.formats ?? [], local?.formats ?? []).filter((x): x is FormatAdapter => \"build\" in x), [inherited.formats, local?.formats]);\n const registeredActions = React.useMemo(() => resolveTransferRegistry(inherited.actions ?? [], local?.actions ?? [], actions), [actions, inherited.actions, local?.actions]);\n React.useMemo(() => resolveTransferRegistry(variants), [variants]);\n const report = React.useCallback((result: TransferOutcome) => { inherited.onOutcome?.(result); local?.onOutcome?.(result); setNotice(outcomeMessage(result)); }, [inherited, local]);\n React.useEffect(() => {\n const valid = new Set([primaryWorkspaceKey, ...(nearestWorkspaceKey ? [nearestWorkspaceKey] : []), ...variantWorkspaceKeys.values(), ...externalWorkspaceKeys.current]);\n setWorkspaces((current) => Object.fromEntries(Object.entries(current).filter(([key]) => valid.has(key))));\n for (const key of workspaceCaptures.current.keys()) if (!valid.has(key)) workspaceCaptures.current.delete(key);\n if (workspaceKey && !valid.has(workspaceKey)) { setWorkspaceKey(null); setWorkspaceOpen(false); }\n }, [nearestWorkspaceKey, primaryWorkspaceKey, variantWorkspaceKeys, workspaceKey]);\n\n const captureOne = React.useCallback(async (material: Source | Payload | SurfaceHandle | null, scope: TransferScope, signal: AbortSignal, applyMenuProjection = false, collectPages = true): Promise<CaptureResult> => {\n if (!material) throw new Error(\"Alchemy needs a source or a mounted transfer surface.\");\n let sourceMaterial: Source;\n if (\"instanceId\" in material) {\n if (!material.isMounted()) throw new Error(\"The requested transfer surface is no longer mounted.\");\n const captured = await material.capture(signal);\n sourceMaterial = { id: captured.snapshot.sourceId, label: captured.snapshot.label, capture: async () => captured };\n } else if (\"kind\" in material) {\n sourceMaterial = { id: materialIdentity(material), label: sourceLabel, capture: async () => directSource(material, { sourceId: materialIdentity(material), label: sourceLabel, ...(applyMenuProjection && projection ? { projection } : {}), ...(applyMenuProjection && sections ? { sections } : {}) }) };\n } else if (applyMenuProjection && (projection || sections)) {\n sourceMaterial = {\n id: material.id,\n label: material.label,\n capture: async (request) => {\n const captured = await material.capture(request);\n return {\n ...captured,\n projection: { rules: [...captured.projection.rules, ...(projection?.rules ?? [])] },\n snapshot: { ...captured.snapshot, ...(sections ? { sections } : {}) },\n };\n },\n };\n } else {\n sourceMaterial = material;\n }\n const raw = await sourceMaterial.capture({ scope, signal });\n const constrained = resolveTransferPreferences(providerPreferences, preferences, raw.snapshot.limits);\n const result = await capture({ id: raw.snapshot.sourceId, label: raw.snapshot.label, capture: async () => ({ ...raw, snapshot: { ...raw.snapshot, limits: constrained.limits } }) }, signal, scope);\n if (scope !== \"all-matching\" || !collectPages) return result;\n if (!result.allMatching) throw new Error(\"This source cannot provide a stable all-matching export.\");\n const collected = await collectAllMatching(result.allMatching, signal);\n if (result.snapshot.payload.kind !== \"rows\") throw new Error(\"All-matching export requires tabular content.\");\n return { snapshot: projectSnapshot({ ...result.snapshot, payload: { kind: \"rows\", rows: collected.rows, columns: result.snapshot.payload.columns }, coverage: collected.coverage, omissions: [...collected.omissions] }, { rules: [] }), allMatching: result.allMatching, ...(collected.error ? { collectionError: collected.error.message } : {}) };\n }, [preferences, projection, providerPreferences, sections, sourceLabel]);\n const capturePrimary = React.useCallback((scope: TransferScope, signal: AbortSignal) => captureOne(primary, scope, signal, true), [captureOne, primary]);\n workspaceCaptures.current.set(primaryWorkspaceKey, capturePrimary);\n if (nearestWorkspaceKey && nearestSurface) workspaceCaptures.current.set(nearestWorkspaceKey, (scope, signal) => captureOne(nearestSurface, scope, signal, true));\n for (const variant of variants) {\n const key = variantWorkspaceKeys.get(variant.id)!;\n workspaceCaptures.current.set(key, (scope, signal) => captureOne(variant.source, scope, signal, true));\n }\n\n const preflight = React.useCallback(async () => {\n const { controller, id } = fence.begin(); setMenuCapture(null); setMenuStatus(\"loading\");\n try { const result = await captureOne(primary, initialScope, controller.signal, true, false); if (fence.valid(id, controller)) { setMenuCapture(result); setMenuStatus(\"idle\"); } }\n catch (error) { if (fence.valid(id, controller)) { setMenuCapture(null); setMenuStatus(errorMessage(error, \"Could not inspect content\")); } }\n finally { fence.finish(controller); }\n }, [captureOne, fence, initialScope, primary]);\n\n const transfer = React.useCallback(async (format: BuiltInFormat | FormatAdapter, download: boolean, alternate?: TransferMenuVariant) => {\n const { controller, id } = fence.begin();\n try {\n const explicit = alternate?.source ?? (typeof format === \"string\" && format !== \"xlsx\" ? formatSources?.[format] : undefined);\n const result = await (explicit ? captureOne(explicit, initialScope, controller.signal, true) : capturePrimary(initialScope, controller.signal));\n if (result.collectionError) throw new Error(`The complete source could not be collected: ${result.collectionError}`);\n if (result.snapshot.coverage.status !== \"complete\" || result.snapshot.omissions.length > 0) {\n const reason = result.snapshot.coverage.reason ?? `${result.snapshot.omissions.length} omission${result.snapshot.omissions.length === 1 ? \"\" : \"s\"}`;\n throw new Error(`Quick transfer is partial (${reason}). Open Prepare for AI to review it before delivery.`);\n }\n const resolved = resolveTransferPreferences(providerPreferences, preferences, result.snapshot.limits);\n const draft = applyTransferLimits(createDraft(result.snapshot), resolved.limits); const revision = draft.revision;\n if (draft.omissions.length > result.snapshot.omissions.length) throw new Error(\"Quick transfer requires content reductions. Open Prepare for AI to review them before delivery.\");\n const artifact = typeof format === \"string\" ? await buildArtifact(draft, format, result.snapshot.label) : await format.build(draft, controller.signal);\n if (artifact.omissions.length > draft.omissions.length) throw new Error(`Quick format requires ${artifact.omissions.length - draft.omissions.length} adjustment${artifact.omissions.length - draft.omissions.length === 1 ? \"\" : \"s\"}. Open Prepare for AI to review before delivery.`);\n if (!fence.valid(id, controller) || artifact.snapshotId !== result.snapshot.id || artifact.draftRevision !== revision) return;\n const outcome = await transport[download ? \"download\" : \"copy\"](artifact, controller.signal);\n if (fence.valid(id, controller)) report(outcome.status === \"success\" && alternate?.successMessage ? { ...outcome, message: alternate.successMessage } : outcome);\n } catch (error) { if (fence.valid(id, controller)) report({ status: \"error\", code: \"prepare-failed\", message: errorMessage(error, \"Preparation failed\"), retryable: true }); }\n finally { fence.finish(controller); }\n }, [captureOne, capturePrimary, fence, formatSources, initialScope, preferences, providerPreferences, report, transport]);\n\n const openWorkspace = React.useCallback(\n async (\n key = primaryWorkspaceKey,\n variant?: { source: Source | Payload | SurfaceHandle; label: string },\n ) => {\n const variantMaterial =\n variant && \"kind\" in variant.source\n ? ({\n id: `variant:${key}`,\n label: variant.label,\n capture: async () =>\n directSource(variant.source as Payload, {\n sourceId: `variant:${key}`,\n label: variant.label,\n }),\n } satisfies Source)\n : variant?.source;\n const captureWorkspace = (\n scope: TransferScope,\n signal: AbortSignal,\n collectPages = true,\n ) =>\n captureOne(variantMaterial ?? primary, scope, signal, true, collectPages);\n workspaceCaptures.current.set(key, captureWorkspace);\n const existing = workspaces[key];\n const { controller, id } = fence.begin();\n if (existing) {\n try {\n const allMatching = existing.scope === \"all-matching\";\n const fresh = await captureWorkspace(\n existing.scope,\n controller.signal,\n !allMatching,\n );\n if (!fence.valid(id, controller) || !workspaceCaptures.current.has(key))\n return;\n if (allMatching && (!existing.allMatching || !fresh.allMatching))\n throw new Error(\n \"This source can no longer provide an all-matching snapshot.\",\n );\n const collectionIdentity = (value: BoundAllMatching | undefined) =>\n value && {\n query: value.source.query,\n projection: value.projection,\n columns: value.columns,\n limits: value.limits,\n };\n const changed = allMatching\n ? JSON.stringify(collectionIdentity(existing.allMatching)) !==\n JSON.stringify(collectionIdentity(fresh.allMatching))\n : snapshotContent(existing.snapshot) !==\n snapshotContent(fresh.snapshot);\n setWorkspaces((current) => {\n const retained = current[key];\n if (!retained) return current;\n return {\n ...current,\n [key]: {\n ...retained,\n error: fresh.collectionError,\n ...(allMatching\n ? { sourceStale: changed }\n : changed\n ? { pending: { ...fresh, scope: retained.scope } }\n : { pending: undefined }),\n },\n };\n });\n setWorkspaceKey(key);\n setWorkspaceOpen(true);\n } catch (error) {\n if (fence.valid(id, controller) && workspaceCaptures.current.has(key)) {\n setWorkspaces((current) =>\n current[key]\n ? {\n ...current,\n [key]: {\n ...current[key]!,\n error: errorMessage(error, \"Could not refresh source\"),\n },\n }\n : current,\n );\n setWorkspaceKey(key);\n setWorkspaceOpen(true);\n }\n } finally {\n fence.finish(controller);\n }\n return;\n }\n try {\n const result = await captureWorkspace(initialScope, controller.signal);\n if (!fence.valid(id, controller)) return;\n const resolved = resolveTransferPreferences(\n providerPreferences,\n preferences,\n result.snapshot.limits,\n );\n const original = createDraft(result.snapshot);\n const base: WorkspaceState = {\n ...result,\n key,\n original,\n draft: original,\n scope: initialScope,\n preferences: resolved,\n ...(result.collectionError ? { error: result.collectionError } : {}),\n };\n setWorkspaces((current) => ({\n ...current,\n [key]: { ...base, draft: rebuild(base, initialControls(base)) },\n }));\n setWorkspaceKey(key);\n setWorkspaceOpen(true);\n } catch (error) {\n if (fence.valid(id, controller))\n setNotice(errorMessage(error, \"Could not capture content\"));\n } finally {\n fence.finish(controller);\n }\n },\n [\n captureOne,\n capturePrimary,\n fence,\n initialScope,\n preferences,\n primaryWorkspaceKey,\n primary,\n providerPreferences,\n workspaces,\n ],\n );\n React.useImperativeHandle(controllerRef, () => ({\n focusTrigger: () => triggerRef.current?.focus(),\n prepare: async (requestedSource, options) => {\n const requestedLabel = options?.label ?? (\"label\" in requestedSource ? requestedSource.label : \"content\");\n const requestedKey = `controller:${options?.id ?? \"source\"}:${materialIdentity(requestedSource)}`;\n externalWorkspaceKeys.current.add(requestedKey);\n await openWorkspace(requestedKey, { source: requestedSource, label: requestedLabel });\n },\n }), [openWorkspace]);\n\n const runAction = React.useCallback(async (action: PageAction) => {\n const { controller, id } = fence.begin();\n try { const actionSource = (action as PageAction & { source?: Source }).source; const { snapshot } = actionSource ? await captureOne(actionSource, initialScope, controller.signal, true) : await capturePrimary(initialScope, controller.signal); const resolved = resolveTransferPreferences(providerPreferences, preferences, snapshot.limits); const draft = applyTransferLimits(createDraft(snapshot), resolved.limits); if (!action.supports(snapshot)) throw new Error(`${action.label} is unavailable for this content.`); const result = await action.run({ snapshot, draft, signal: controller.signal }); if (fence.valid(id, controller) && draft.snapshotId === snapshot.id) report(result); }\n catch (error) { if (fence.valid(id, controller)) report({ status: \"error\", code: \"action-failed\", message: errorMessage(error, \"Action failed\"), retryable: true }); }\n finally { fence.finish(controller); }\n }, [captureOne, capturePrimary, fence, initialScope, preferences, providerPreferences, report]);\n\n if (!enabled) return null;\n const payload = menuCapture?.snapshot.payload ?? (source && \"kind\" in source ? source : undefined);\n const quickVariants = (section: \"copy\" | \"ai\") => variants.filter((v) => v.copyLabel && (v.section ?? \"ai\") === section).map((v) => <DropdownMenuItem key={`copy:${v.id}`} aria-label={v.ariaLabel} onSelect={() => void transfer(\"markdown\", false, v)}><MenuPresentation {...v} label={v.copyLabel!}/></DropdownMenuItem>);\n const visibleCopies = COPIES.filter((f) => Boolean(formatSources?.[f]) || ![\"csv\", \"tsv\"].includes(f) || payload?.kind === \"rows\");\n const visibleDownloads = DOWNLOADS.filter((f) => (f !== \"xlsx\" && Boolean(formatSources?.[f])) || ![\"csv\", \"tsv\", \"xlsx\"].includes(f) || payload?.kind === \"rows\");\n const visibleAdapters = menuCapture ? adapters.filter((a) => a.supports(menuCapture.snapshot.payload)) : [];\n const visibleActions = menuCapture ? registeredActions.filter((a) => a.supports(menuCapture.snapshot)) : [];\n return <span className={cn(\"matrx-alchemy\", className)} onClick={stopPropagation ? (event) => event.stopPropagation() : undefined}>\n <DropdownMenu onOpenChange={(open) => { if (open) void preflight(); }}><DropdownMenuTrigger asChild><button ref={triggerRef} type=\"button\" className=\"matrx-alchemy-trigger\" disabled={disabled} aria-label={`Copy, transform or export ${sourceLabel}`} title=\"Alchemy — copy, transform, export\"><AlchemyGlyph /></button></DropdownMenuTrigger><DropdownMenuContent align=\"end\" className=\"matrx-alchemy-menu\">\n {menuStatus === \"loading\" ? <DropdownMenuItem disabled>Inspecting content…</DropdownMenuItem> : menuStatus !== \"idle\" ? <DropdownMenuItem disabled>{menuStatus}</DropdownMenuItem> : null}\n {!hide.includes(\"copy\") ? <><DropdownMenuLabel>Copy</DropdownMenuLabel>{quickVariants(\"copy\")}{visibleCopies.map((format) => <DropdownMenuItem key={format} onSelect={() => void transfer(format, false)}>{format === \"plain\" ? \"Copy\" : `Copy ${LABEL[format]}`}</DropdownMenuItem>)}{visibleAdapters.map((adapter) => <DropdownMenuItem key={adapter.id} onSelect={() => void transfer(adapter, false)}>Copy {adapter.label}</DropdownMenuItem>)}</> : null}\n {!hide.includes(\"prepare\") ? <><DropdownMenuSeparator/>{quickVariants(\"ai\")}<DropdownMenuItem onSelect={() => void openWorkspace()}>Prepare for AI…</DropdownMenuItem>{nearestWorkspaceKey && nearestSurface ? <DropdownMenuItem onSelect={() => void openWorkspace(nearestWorkspaceKey, { source: nearestSurface, label: nearestSurface.surfaceName })}>Prepare this surface…</DropdownMenuItem> : null}{variants.map((variant) => <DropdownMenuItem key={variant.id} onSelect={() => void openWorkspace(variantWorkspaceKeys.get(variant.id)!, variant)}><MenuPresentation {...variant} label={`Prepare ${variant.label}…`}/></DropdownMenuItem>)}</> : null}\n {!hide.includes(\"download\") ? <><DropdownMenuSeparator/><DropdownMenuLabel>Download</DropdownMenuLabel>{visibleDownloads.map((format) => <DropdownMenuItem key={format} onSelect={() => void transfer(format, true)}>Download {LABEL[format]}</DropdownMenuItem>)}{visibleAdapters.map((adapter) => <DropdownMenuItem key={`download:${adapter.id}`} onSelect={() => void transfer(adapter, true)}>Download {adapter.label}</DropdownMenuItem>)}</> : null}\n {visibleActions.length ? <DropdownMenuSeparator/> : null}{visibleActions.map((action) => <DropdownMenuItem key={action.id} aria-label={(action as TransferMenuPresentation).ariaLabel} onSelect={() => void runAction(action)}><MenuPresentation {...action} label={action.label}/></DropdownMenuItem>)}\n </DropdownMenuContent></DropdownMenu>\n {notice ? <span className=\"matrx-alchemy-notice\" role=\"status\">{notice}</span> : null}\n {Object.values(workspaces).map((saved) => <PreparationWorkspace restoreFocus={() => triggerRef.current?.focus()} key={saved.key} open={workspaceOpen && workspaceKey === saved.key} state={saved} scopes={scopes} onClose={() => setWorkspaceOpen(false)} onChange={(next) => setWorkspaces((current) => ({ ...current, [saved.key]: next }))} transport={transport} adapters={adapters} captureScope={workspaceCaptures.current.get(saved.key) ?? capturePrimary} {...(ai ? { ai } : {})} onOutcome={report}/>)}\n </span>;\n}\n\ntype Preset = \"full\" | \"compact\" | \"brief\" | \"custom\";\ntype Controls = {\n preset: Preset;\n sections: string[];\n search: string;\n filters: Record<string, string>;\n sort: string;\n direction: \"asc\" | \"desc\";\n top: number | null;\n visibleColumns: string[];\n selectedOnly: boolean;\n selectedIndices: number[];\n maxDepth: number | null;\n maxStringChars: number | null;\n maxArrayItems: number | null;\n};\n\nfunction initialControls(state: WorkspaceState): Controls {\n const rows = state.original.payload.kind === \"rows\" ? state.original.payload : null;\n return {\n preset: state.preferences.initialPreset,\n sections: state.snapshot.sections.filter((s) => s.includedByDefault).map((s) => s.id),\n search: \"\", filters: {}, sort: \"\", direction: \"asc\",\n top: state.preferences.limits.maxRows,\n visibleColumns: rows?.columns.filter((c) => c.visible).map((c) => c.id) ?? [],\n selectedOnly: false, selectedIndices: [],\n maxDepth: state.preferences.limits.maxDepth,\n maxStringChars: state.preferences.limits.maxStringChars,\n maxArrayItems: state.preferences.limits.maxArrayItems ?? null,\n };\n}\nfunction presetLimits(preset: Preset, controls: Controls, preferences: TransferPreferences) {\n const min = (choice: number | null, cap: number | null) => choice == null ? cap : cap == null ? choice : Math.min(choice, cap);\n if (preset === \"full\") return preferences.limits;\n const request = preset === \"brief\" ? { maxDepth: 4, maxStringChars: 800, maxArrayItems: 25 } : preset === \"compact\" ? { maxDepth: 8, maxStringChars: 4000, maxArrayItems: 100 } : { maxDepth: controls.maxDepth, maxStringChars: controls.maxStringChars, maxArrayItems: controls.maxArrayItems };\n return { ...preferences.limits, maxDepth: min(request.maxDepth, preferences.limits.maxDepth), maxStringChars: min(request.maxStringChars, preferences.limits.maxStringChars), maxArrayItems: min(request.maxArrayItems, preferences.limits.maxArrayItems ?? null) };\n}\nfunction rebuild(state: WorkspaceState, controls: Controls): Draft {\n let draft = resetDraft(state.snapshot);\n if (state.snapshot.sections.length) draft = applySectionSelection(draft, state.snapshot, controls.sections);\n if (draft.payload.kind === \"rows\") draft = transformRows(draft, {\n search: controls.search,\n filters: controls.filters,\n ...(controls.sort ? { sort: { column: controls.sort, direction: controls.direction } } : {}),\n ...(controls.selectedOnly ? { selectedIndices: controls.selectedIndices } : {}),\n visibleColumns: controls.visibleColumns,\n structuredProjection: \"visible\",\n top: controls.top,\n });\n const limits = presetLimits(controls.preset, controls, state.preferences);\n if (draft.payload.kind === \"json\" || draft.payload.kind === \"registered\") {\n draft = reduceJson(draft, { maxDepth: limits.maxDepth, maxStringChars: limits.maxStringChars, maxArrayItems: limits.maxArrayItems ?? null });\n }\n return applyTransferLimits(draft, limits);\n}\nfunction isBuiltInFormat(format: string): format is BuiltInFormat { return format in LABEL; }\nfunction preview(draft: Draft, format: string) {\n const resolved = isBuiltInFormat(format) ? format : \"plain\";\n return serialize(draft, resolved === \"xlsx\" ? \"tsv\" : resolved, { spreadsheetSafe: resolved === \"csv\" || resolved === \"tsv\" || resolved === \"xlsx\" }).plainText;\n}\n\nfunction PreparationWorkspace({ restoreFocus, open, state, scopes, onClose, onChange, transport, ai, adapters, onOutcome, captureScope }: {\n restoreFocus: () => void;\n open: boolean;\n state: WorkspaceState;\n scopes: TransferScope[];\n onClose: () => void;\n onChange: (next: WorkspaceState) => void;\n transport: Transport;\n ai?: AiPreparation;\n adapters: FormatAdapter[];\n onOutcome: (outcome: TransferOutcome) => void;\n captureScope: (scope: TransferScope, signal: AbortSignal) => Promise<CaptureResult>;\n}) {\n const fence = useFence();\n const latest = React.useRef(state); latest.current = state;\n const aiSession = React.useRef<AiPreparation | undefined>(undefined);\n if (!aiSession.current && ai) aiSession.current = ai.fork?.() ?? ai;\n const [controls, setControls] = React.useState(() => initialControls(state));\n const [controlsHistory, setControlsHistory] = React.useState<Controls[]>([]);\n const [pendingControls, setPendingControls] = React.useState<Controls | null>(null);\n const requestedFormat = state.preferences.initialFormat;\n const [format, setFormat] = React.useState<string>(() => isBuiltInFormat(requestedFormat) ? (supportsBuiltIn(requestedFormat, state.draft.payload) ? requestedFormat : \"plain\") : adapters.some((adapter) => adapter.id === requestedFormat && adapter.supports(state.draft.payload)) ? requestedFormat : \"plain\");\n const [buffer, setBuffer] = React.useState(() => isBuiltInFormat(format) ? preview(state.draft, format) : \"Preparing format preview…\");\n const [bufferError, setBufferError] = React.useState<string | null>(null);\n const [formatError, setFormatError] = React.useState<string | null>(null);\n const [preparedArtifact, setPreparedArtifact] = React.useState<Artifact | null>(null);\n const [instruction, setInstruction] = React.useState(\"\");\n const [busy, setBusy] = React.useState<\"ai\" | \"capture\" | \"copy\" | \"download\" | null>(null);\n const [aiFailed, setAiFailed] = React.useState(false);\n React.useEffect(() => { setAiFailed(false); }, [state.snapshot.id, state.draft.revision]);\n const activeAi = React.useRef<AbortController | null>(null);\n const activeCapture = React.useRef<AbortController | null>(null);\n\n React.useEffect(() => {\n if (bufferError) return;\n const adapter = adapters.find((candidate) => candidate.id === format);\n const controller = new AbortController();\n const snapshotId = state.snapshot.id; const revision = state.draft.revision;\n setPreparedArtifact(null); setFormatError(null);\n if (adapter) setBuffer(\"Preparing format preview…\");\n const artifactPromise = adapter ? adapter.build(state.draft, controller.signal) : buildArtifact(state.draft, isBuiltInFormat(format) ? format : \"plain\", state.snapshot.label);\n void artifactPromise.then((artifact) => {\n if (!controller.signal.aborted && artifact.snapshotId === snapshotId && artifact.draftRevision === revision) { setPreparedArtifact(artifact); setBuffer(artifact.plainText); }\n }).catch((error) => { if (!controller.signal.aborted) setFormatError(errorMessage(error, \"Format preview failed\")); });\n return () => controller.abort();\n }, [adapters, bufferError, format, state.draft, state.snapshot.id]);\n const close = React.useCallback(() => { activeAi.current?.abort(); activeCapture.current?.abort(); activeAi.current = null; activeCapture.current = null; fence.abortAll(); setBusy(null); onClose(); }, [fence, onClose]);\n const changeControls = (next: Controls) => {\n if (state.draft.manuallyEdited) { setPendingControls(next); return; }\n setControlsHistory((history) => [...history, controls]); setControls(next); onChange({ ...state, draft: rebuild(state, next), error: undefined });\n };\n const applyPendingControls = () => {\n if (!pendingControls) return;\n setControlsHistory((history) => [...history, controls]); setControls(pendingControls); setBufferError(null);\n onChange({ ...state, draft: rebuild(state, pendingControls), error: undefined });\n setPendingControls(null);\n };\n const editBuffer = (text: string) => {\n setBuffer(text);\n setPreparedArtifact(null); setFormatError(null);\n const payload = state.draft.payload;\n if (payload.kind === \"json\" || payload.kind === \"registered\") {\n try {\n const value = JSON.parse(text) as Json;\n const next: Payload = payload.kind === \"json\" ? { kind: \"json\", value } : { kind: \"registered\", format: payload.format, value };\n setBufferError(null); onChange({ ...state, draft: editDraft(state.draft, next), error: undefined });\n } catch { setBufferError(\"JSON is incomplete or invalid. Fix it before copying or downloading.\"); }\n return;\n }\n setBufferError(null);\n const kind = payload.kind === \"markdown\" || format === \"markdown\" ? \"markdown\" : \"text\";\n if (payload.kind === \"rows\" || !isBuiltInFormat(format)) setFormat(\"plain\");\n onChange({ ...state, draft: editDraft(state.draft, { kind, text }), error: undefined });\n };\n\n const requestCapture = async (scope: TransferScope) => {\n activeCapture.current?.abort();\n const { controller, id } = fence.begin(); activeCapture.current = controller; const revision = state.draft.revision; setBusy(\"capture\");\n try {\n const result = await captureScope(scope, controller.signal);\n if (fence.valid(id, controller) && latest.current.draft.revision === revision) onChange({ ...latest.current, pending: { ...result, scope }, sourceStale: false, error: result.collectionError });\n } catch (error) { if (fence.valid(id, controller)) onChange({ ...latest.current, error: errorMessage(error, \"Refresh failed\") }); }\n finally { fence.finish(controller); if (activeCapture.current === controller) activeCapture.current = null; if (fence.valid(id, controller)) setBusy(null); }\n };\n const resolveCapture = (choice: \"keep\" | \"regenerate\") => {\n if (!state.pending) return;\n if (choice === \"keep\") { const { pending: _pending, ...kept } = state; onChange({ ...kept, error: undefined }); return; }\n const pending = state.pending;\n const preferences = resolveTransferPreferences({}, state.preferences, pending.snapshot.limits);\n const base: WorkspaceState = { ...pending, key: state.key, original: createDraft(pending.snapshot), draft: createDraft(pending.snapshot), scope: pending.scope, preferences, ...(pending.collectionError ? { error: pending.collectionError } : {}) };\n const nextControls = initialControls(base); setControls(nextControls); setControlsHistory([]); setPendingControls(null); setBufferError(null);\n onChange({ ...base, draft: rebuild(base, nextControls) });\n };\n\n const runAi = async (recover = false) => {\n const adapter = aiSession.current;\n if (!adapter || !adapter.supports(state.snapshot) || (!recover && !instruction.trim()) || (recover && !adapter.recover)) return;\n activeAi.current?.abort();\n const { controller, id } = fence.begin(); activeAi.current = controller;\n const snapshotId = state.snapshot.id; const revision = state.draft.revision; setBusy(\"ai\"); setAiFailed(false);\n try {\n const next = recover ? await adapter.recover!({ snapshot: state.snapshot, draft: state.draft, signal: controller.signal }) : await adapter.run({ snapshot: state.snapshot, draft: state.draft, instruction, signal: controller.signal });\n const current = latest.current;\n if (!fence.valid(id, controller) || current.snapshot.id !== snapshotId || current.draft.revision !== revision || next.snapshotId !== snapshotId || next.sourceId !== state.draft.sourceId || next.sourceRevision !== state.draft.sourceRevision || next.revision <= revision) return;\n try { serialize(next, \"plain\"); } catch { onChange({ ...current, error: \"AI returned an invalid transfer draft.\" }); setAiFailed(true); return; }\n onChange({ ...current, draft: next, error: undefined }); setBufferError(null);\n } catch (error) {\n if (!isAbort(error) && fence.valid(id, controller)) { setAiFailed(true); onChange({ ...latest.current, error: errorMessage(error, \"AI preparation failed\") }); }\n } finally { fence.finish(controller); if (activeAi.current === controller) activeAi.current = null; if (fence.valid(id, controller)) setBusy(null); }\n };\n const cancelAi = async () => {\n const aiController = activeAi.current;\n const { controller, id } = fence.begin();\n try { await aiSession.current?.cancel?.(); }\n catch (error) { if (fence.valid(id, controller)) onChange({ ...latest.current, error: errorMessage(error, \"AI cancellation failed\") }); }\n finally { aiController?.abort(); fence.finish(controller); if (activeAi.current === aiController) activeAi.current = null; if (fence.valid(id, controller)) setBusy(null); }\n };\n const [deliveryNotice, setDeliveryNotice] = React.useState<string | null>(null);\n React.useEffect(() => { setDeliveryNotice(null); }, [state.draft.revision]);\n const reportDelivery = (outcome: TransferOutcome) => { setDeliveryNotice(outcomeMessage(outcome)); onOutcome(outcome); };\n const deliver = async (download: boolean) => {\n if (bufferError) return;\n const { controller, id } = fence.begin(); const snapshotId = state.snapshot.id; const revision = state.draft.revision; setBusy(download ? \"download\" : \"copy\");\n try {\n if (!preparedArtifact) throw new Error(\"Wait for the selected format preview before delivery.\");\n const artifact = preparedArtifact;\n const current = latest.current;\n if (!fence.valid(id, controller) || current.snapshot.id !== snapshotId || current.draft.revision !== revision || artifact.snapshotId !== snapshotId || artifact.draftRevision !== revision) return;\n const result = await transport[download ? \"download\" : \"copy\"](artifact, controller.signal);\n if (fence.valid(id, controller)) reportDelivery(result);\n } catch (error) { if (fence.valid(id, controller)) reportDelivery({ status: \"error\", code: \"prepare-failed\", message: errorMessage(error, \"Preparation failed\"), retryable: true }); }\n finally { fence.finish(controller); if (fence.valid(id, controller)) setBusy(null); }\n };\n\n const rows = state.original.payload.kind === \"rows\" ? state.original.payload : null;\n const formats = COPIES.filter((f) => supportsBuiltIn(f, state.draft.payload));\n const workspaceAdapters = adapters.filter((adapter) => adapter.supports(state.draft.payload));\n const displayedOmissions = preparedArtifact?.omissions ?? state.draft.omissions;\n const limitText = Object.entries(state.preferences.limits).filter(([, value]) => value != null).map(([key, value]) => `${key.replace(/^max/, \"max \")} ${Number(value).toLocaleString()}`).join(\" · \");\n return <Dialog open={open} onOpenChange={(next) => { if (!next) close(); }}><DialogContent onCloseAutoFocus={(event) => { event.preventDefault(); restoreFocus(); }} className=\"matrx-alchemy-workspace max-w-5xl\" aria-busy={busy !== null}>\n <DialogHeader><DialogTitle>Prepare {state.snapshot.label}</DialogTitle><DialogDescription>Captured {state.snapshot.unsavedChanges ? \"from your unsaved draft\" : \"as an immutable snapshot\"}. Your source is never edited.</DialogDescription></DialogHeader>\n <div className=\"matrx-alchemy-workspace-grid\"><section className=\"matrx-alchemy-main\">\n <div className=\"matrx-alchemy-toolbar\">\n {scopes.length > 1 ? <label>Scope<select aria-label=\"Transfer scope\" value={state.scope} disabled={busy !== null} onChange={(e) => void requestCapture(e.target.value as TransferScope)}>{scopes.map((scope) => <option key={scope} value={scope}>{SCOPE_LABEL[scope]}</option>)}</select></label> : null}\n <label>Detail<select aria-label=\"Detail preset\" value={controls.preset} onChange={(e) => changeControls({ ...controls, preset: e.target.value as Preset })}><option value=\"full\">Full</option><option value=\"compact\">Compact</option><option value=\"brief\">Brief</option><option value=\"custom\">Custom</option></select></label>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={(!state.draft.history?.length && !controlsHistory.length) || busy !== null} onClick={() => { setBufferError(null); if (controlsHistory.length) { const next = controlsHistory[controlsHistory.length - 1]!; setControls(next); setControlsHistory((history) => history.slice(0, -1)); onChange({ ...state, draft: rebuild(state, next), error: undefined }); } else onChange({ ...state, draft: undoDraft(state.draft), error: undefined }); }}>Undo</Button>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={busy !== null} onClick={() => { const next = initialControls(state); setControls(next); setControlsHistory([]); setPendingControls(null); setBufferError(null); onChange({ ...state, draft: rebuild(state, next), error: undefined }); }}>Reset</Button>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" disabled={busy !== null} onClick={() => void requestCapture(state.scope)}>Refresh source</Button>\n </div>\n {controls.preset === \"custom\" && (state.draft.payload.kind === \"json\" || state.draft.payload.kind === \"registered\") ? <fieldset className=\"matrx-alchemy-options\"><legend>JSON limits</legend>{([ [\"maxDepth\", \"Maximum depth\"], [\"maxStringChars\", \"Maximum string characters\"], [\"maxArrayItems\", \"Maximum array items\"] ] as const).map(([key, text]) => <label key={key}>{text}<input type=\"number\" min=\"0\" value={controls[key] ?? \"\"} onChange={(e) => changeControls({ ...controls, [key]: Number.isNaN(e.target.valueAsNumber) ? null : e.target.valueAsNumber })}/></label>)}</fieldset> : null}\n {rows ? <RowControls rows={rows} controls={controls} change={changeControls}/> : null}\n {state.snapshot.sections.length ? <fieldset className=\"matrx-alchemy-options\"><legend>Sections</legend>{state.snapshot.sections.map((section) => <label key={section.id}><input type=\"checkbox\" checked={controls.sections.includes(section.id)} onChange={(e) => changeControls({ ...controls, sections: e.target.checked ? [...controls.sections, section.id] : controls.sections.filter((id) => id !== section.id) })}/> {section.label}</label>)}</fieldset> : null}\n <div className=\"matrx-alchemy-coverage\"><span>{state.snapshot.coverage.included.toLocaleString()} included{state.snapshot.coverage.total == null ? \"\" : ` of ${state.snapshot.coverage.total.toLocaleString()}`} · {state.snapshot.coverage.status}</span>{state.snapshot.coverage.reason ? <span>{state.snapshot.coverage.reason}</span> : null}{limitText ? <span>Limits: {limitText}</span> : null}{displayedOmissions.length ? <details><summary>{displayedOmissions.length} omissions or adjustments</summary><ul>{displayedOmissions.map((o, i) => <li key={`${o.path}-${o.reason}-${i}`}>{o.path || \"/\"}: {o.reason}{o.count == null ? \"\" : ` (${o.count})`}</li>)}</ul></details> : null}</div>\n <label className=\"matrx-alchemy-preview-label\">Output format<select aria-label=\"Output format\" value={format} onChange={(e) => setFormat(e.target.value)}>{formats.map((f) => <option key={f} value={f}>{LABEL[f]}</option>)}{state.draft.payload.kind === \"rows\" ? <option value=\"xlsx\">Excel workbook</option> : null}{workspaceAdapters.map((adapter) => <option key={adapter.id} value={adapter.id}>{adapter.label}</option>)}</select></label>\n <textarea className=\"matrx-alchemy-preview\" aria-label=\"Prepared output\" aria-invalid={bufferError ? true : undefined} aria-describedby={bufferError ? \"alchemy-buffer-error\" : undefined} value={buffer} onChange={(e) => editBuffer(e.target.value)}/>\n {bufferError ? <p id=\"alchemy-buffer-error\" role=\"alert\" className=\"matrx-alchemy-error\">{bufferError}</p> : null}\n {formatError ? <p role=\"alert\" className=\"matrx-alchemy-error\">{formatError}</p> : null}\n {bufferError ? <Button type=\"button\" variant=\"outline\" disabled={busy !== null} onClick={() => { const fallback = editDraft(state.draft, { kind: \"text\", text: buffer }); setBufferError(null); onChange({ ...state, draft: fallback, error: undefined }); setFormat(\"plain\"); }}>Use invalid JSON as plain text</Button> : null}\n </section>{ai || busy === \"capture\" || state.error ? <aside>\n {ai ? <>\n <label>AI instruction<textarea value={instruction} onChange={(e) => setInstruction(e.target.value)} placeholder=\"Tell AI how to prepare this content\"/></label>\n <Button type=\"button\" variant=\"outline\" disabled={!aiSession.current || !instruction.trim() || busy !== null || !aiSession.current.supports(state.snapshot)} onClick={() => void runAi(false)}>Generate preview</Button>\n {busy === \"ai\" ? <Button type=\"button\" variant=\"outline\" onClick={() => void cancelAi()}>{aiSession.current?.cancel ? \"Cancel AI\" : \"Stop waiting\"}</Button> : null}\n </> : null}\n {busy === \"capture\" ? <Button type=\"button\" variant=\"outline\" onClick={() => { activeCapture.current?.abort(); activeCapture.current = null; setBusy(null); }}>Stop loading rows</Button> : null}\n {ai && aiFailed && aiSession.current?.recover && busy !== \"ai\" ? <Button type=\"button\" variant=\"outline\" onClick={() => void runAi(true)}>{aiFailed ? \"Retry or rejoin AI run\" : \"Rejoin AI run\"}</Button> : null}\n {ai ? <p className=\"matrx-alchemy-meta\">AI creates a preview. It never copies automatically. Closing detaches this view without cancelling server work.</p> : null}{state.error ? <p role=\"alert\" className=\"matrx-alchemy-error\">{state.error}</p> : null}\n </aside> : null}</div>\n {pendingControls ? <div className=\"matrx-alchemy-decision\" role=\"alert\"><p>This control would replace your manual edit.</p><Button type=\"button\" variant=\"outline\" onClick={() => setPendingControls(null)}>Keep edited draft</Button><Button type=\"button\" onClick={applyPendingControls}>Rebuild from source</Button></div> : null}\n {state.sourceStale ? <p role=\"alert\" className=\"matrx-alchemy-decision\">The source changed since this draft. Use Refresh source to review the latest data.</p> : null}\n {state.pending ? <div className=\"matrx-alchemy-decision\" role=\"alert\"><p>A fresh source snapshot is ready.</p><Button type=\"button\" variant=\"outline\" onClick={() => resolveCapture(\"keep\")}>Keep current snapshot and draft</Button><Button type=\"button\" onClick={() => resolveCapture(\"regenerate\")}>Regenerate from fresh source</Button></div> : null}\n {deliveryNotice ? <p role=\"status\" className=\"matrx-alchemy-meta\">{deliveryNotice}</p> : null}\n <DialogFooter><span className=\"matrx-alchemy-meta\">{buffer.length.toLocaleString()} characters · ~{estimateTokens(buffer).toLocaleString()} tokens</span><Button type=\"button\" variant=\"outline\" onClick={close}>Close</Button><Button type=\"button\" variant=\"outline\" disabled={busy !== null || Boolean(bufferError || formatError) || !preparedArtifact} onClick={() => void deliver(true)}>Download prepared output</Button><Button type=\"button\" disabled={busy !== null || Boolean(bufferError || formatError) || !preparedArtifact} onClick={() => void deliver(false)}>Copy prepared output</Button></DialogFooter>\n </DialogContent></Dialog>;\n}\n\nfunction RowControls({ rows, controls, change }: {\n rows: Extract<Payload, { kind: \"rows\" }>;\n controls: Controls;\n change: (next: Controls) => void;\n}) {\n return <>\n <div className=\"matrx-alchemy-toolbar\">\n <label>Search<input value={controls.search} onChange={(e) => change({ ...controls, search: e.target.value })}/></label>\n <label>Sort<select value={controls.sort} onChange={(e) => change({ ...controls, sort: e.target.value })}><option value=\"\">None</option>{rows.columns.map((column) => <option key={column.id} value={column.id}>{column.label}</option>)}</select></label>\n <label>Direction<select value={controls.direction} disabled={!controls.sort} onChange={(e) => change({ ...controls, direction: e.target.value as \"asc\" | \"desc\" })}><option value=\"asc\">Ascending</option><option value=\"desc\">Descending</option></select></label>\n <label>Top rows<input type=\"number\" min=\"0\" value={controls.top ?? \"\"} onChange={(e) => change({ ...controls, top: Number.isNaN(e.target.valueAsNumber) ? null : e.target.valueAsNumber })}/></label>\n </div>\n <fieldset className=\"matrx-alchemy-options\"><legend>Columns and filters</legend>{rows.columns.map((column) => <div className=\"matrx-alchemy-column\" key={column.id}><label><input type=\"checkbox\" checked={controls.visibleColumns.includes(column.id)} onChange={(e) => change({ ...controls, visibleColumns: e.target.checked ? [...controls.visibleColumns, column.id] : controls.visibleColumns.filter((id) => id !== column.id) })}/> {column.label}</label><input aria-label={`Filter ${column.label}`} placeholder=\"Filter\" value={controls.filters[column.id] ?? \"\"} onChange={(e) => change({ ...controls, filters: { ...controls.filters, [column.id]: e.target.value } })}/></div>)}</fieldset>\n <fieldset className=\"matrx-alchemy-options\"><legend>Rows</legend><label><input type=\"checkbox\" checked={controls.selectedOnly} onChange={(e) => change({ ...controls, selectedOnly: e.target.checked })}/> Only selected rows</label><div className=\"matrx-alchemy-row-list\">{rows.rows.map((row, index) => {\n const summary = rows.columns.filter((column) => column.visible).slice(0, 2).map((column) => String(readTransferCell(row, column) ?? \"\")).filter(Boolean).join(\" · \");\n return <label key={index}><input type=\"checkbox\" checked={controls.selectedIndices.includes(index)} onChange={(e) => change({ ...controls, selectedIndices: e.target.checked ? [...controls.selectedIndices, index] : controls.selectedIndices.filter((value) => value !== index) })}/> Row {index + 1}{summary ? ` — ${summary}` : \"\"}</label>;\n })}</div></fieldset>\n </>;\n}\n\nexport * from \"./matrx-copy\";\n","\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"./cn\";\n\nexport const buttonVariants = cva(\n \"inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50 active:scale-[0.98] [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground shadow-sm hover:bg-primary/90\",\n /**\n * An explicit spelling of `default`, identical by construction. It is\n * not decoration: matrx-frontend's `ButtonMine` fork carried it, ~17\n * call sites say `variant=\"primary\"`, and the alternative to keeping\n * the word was a host shim translating a prop — the massage C22 bans.\n */\n primary: \"bg-primary text-primary-foreground shadow-sm hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n /** The affirmative twin of `destructive` — confirm, approve, publish. */\n success:\n \"bg-success text-success-foreground shadow-sm hover:bg-success/90\",\n outline:\n \"border border-border bg-card shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n subtle:\n \"border border-transparent bg-muted/50 text-foreground hover:border-border hover:bg-muted\",\n },\n /**\n * ONE size scale, xs → 3xl, plus the two icon boxes. The top and bottom\n * of the scale came in from matrx-frontend's `ButtonMine` fork (2026-09-07):\n * a dense toolbar needs `xs`, and a marketing/hero call to action needs\n * `xl`+. A host that has to reach outside this scale forks the button,\n * which is exactly how `ButtonMine` was born.\n */\n size: {\n xs: \"h-6 rounded-md px-1 text-xs\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n default: \"h-9 px-4 py-2\",\n /** An explicit spelling of `default` (the fork's middle rung). */\n md: \"h-9 px-4 py-2\",\n lg: \"h-10 rounded-md px-6\",\n xl: \"h-12 px-8 py-3 text-base\",\n \"2xl\": \"h-14 px-10 py-3 text-base\",\n \"3xl\": \"h-16 px-12 py-3 text-base\",\n icon: \"h-9 w-9\",\n \"icon-sm\": \"h-7 w-7\",\n /** A circular icon box — an avatar-shaped control, not a square one. */\n roundIcon: \"h-8 w-8 rounded-full p-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Component = asChild ? Slot : \"button\";\n return (\n <Component\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\n/**\n * Dialog — the modal surface, carrying every ruling the host forks paid for.\n *\n * Four hosts shipped four dialogs. Three were the stock shadcn body: a\n * fixed-size centered card with `overflow: visible`. matrx-frontend's had been\n * hardened, incident by incident, and those hardenings are the reason this\n * component belongs in the package rather than being copied a fifth time:\n *\n * 1. THE ROOT RENDERS UNCONDITIONALLY — no hydration mount gate. The gate a\n * wrapper once carried (\"Radix ids differ between SSR and client\") was\n * false — Radix ids come from React's SSR-stable `useId` — and it deleted\n * the always-visible Trigger from SSR and the first client paint.\n *\n * 2. THE DIALOG IS CLAMPED TO THE VIEWPORT AND SCROLLS INSIDE ITSELF. Proven\n * live: an admin \"Create Category\" dialog rendered 851px tall in a 657px\n * viewport with `overflow-y: visible`, so its Create button sat below the\n * fold, unreachable. The only way out was a backdrop click — which\n * dismisses WITHOUT writing, and is indistinguishable from a silent save\n * failure. `max-h-[85dvh] overflow-y-auto` is the cap.\n *\n * 3. THE PRIMARY ACTION IS ALWAYS PRESSABLE — AND NEVER ON TOP OF THE BODY.\n * `DialogFooter` is sticky and bleeds to the card's edges using\n * `--dialog-pad`. Until 0.11.3 that bleed was a NEGATIVE BLOCK MARGIN,\n * which sticky clamps: the footer was dragged up over the row above it by\n * `--dialog-pad` minus the card gap. The card now RESERVES the footer's\n * block size instead (`.matrx-dialog-card` in `styles.css` hands its bottom\n * padding to the footer), so scrolled content never shows through beneath\n * the actions AND the footer never covers the row above it. Outside a\n * DialogContent both variables are unset, the padding falls back to `0px`,\n * and the footer is the plain row it always was.\n *\n * 4. ON MOBILE THE SAME DIALOG IS A BOTTOM SHEET — full width, bottom\n * anchored, height-capped, internally scrollable, safe-area padded. Opt out\n * with `mobileSheet={false}` only for the rare surface that must stay\n * centered (a tiny spinner). The sheet geometry is re-asserted AFTER the\n * caller's className so a desktop `max-w-2xl` cannot un-fullscreen it.\n *\n * 5. AN UNTITLED DIALOG IS STILL ACCESSIBLE. Radix warns (correctly) that\n * every dialog needs a title; rather than let hosts ship the warning, a\n * visually-hidden title is injected when the tree has none, and\n * `aria-describedby` is dropped when there is no description rather than\n * pointing at nothing.\n *\n * SEAM INVERSIONS. The host original resolved its portal target through\n * app-shaped hooks (a popped-out window-panel body). Here that is the\n * package's `PortalContainerProvider` seam, with an explicit `container` prop\n * keeping top priority. And DialogContent PROVIDES that seam to its own\n * children, so a Popover or menu opened inside a dialog portals INTO the\n * dialog — staying inside the scroll shard, where its wheel events work.\n * `useDialogContainer` exposes the same element for host code that needs it.\n */\n\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport * as VisuallyHidden from \"@radix-ui/react-visually-hidden\";\nimport { treeContainsComponent } from \"@ai-matrx/kit/react-tree\";\nimport * as React from \"react\";\n\nimport { cn } from \"./cn\";\nimport {\n MOTION_BOTTOM_SHEET,\n MOTION_DIALOG,\n MOTION_OVERLAY,\n} from \"./motion\";\nimport { XIcon } from \"./icons\";\nimport { usePortalContainer, PortalContainerProvider } from \"./portal-container\";\nimport {\n RadixDialogModalProvider,\n useRadixDialogModal,\n} from \"./radix-dialog-modal-context\";\nimport { useIsMobile } from \"./use-is-mobile\";\n\nconst Dialog = ({\n children,\n ...props\n}: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root>) => {\n const modal = props.modal ?? true;\n return (\n <RadixDialogModalProvider modal={modal}>\n <DialogPrimitive.Root {...props} modal={modal}>\n {children}\n </DialogPrimitive.Root>\n </RadixDialogModalProvider>\n );\n};\nDialog.displayName = \"Dialog\";\n\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogClose = DialogPrimitive.Close;\n\n/**\n * Portal-seam-aware DialogPortal. An explicit `container` always wins; with\n * none, the injected `PortalContainerProvider` value decides; with neither,\n * Radix's `document.body`.\n */\nconst DialogPortal = ({\n container,\n ...props\n}: Omit<\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>,\n \"container\"\n> & {\n /** `undefined` → use the injected container; `null` → force document.body. */\n container?: HTMLElement | null | undefined;\n}) => {\n const resolved = usePortalContainer(container);\n return <DialogPrimitive.Portal container={resolved ?? null} {...props} />;\n};\nDialogPortal.displayName = \"DialogPortal\";\n\n// Shared identity across independently bundled public entrypoints/loaders.\nconst CONTEXT_SLOT = Symbol.for(\"ai-matrx.design-system.dialog-container-context\");\nconst contextRegistry = globalThis as typeof globalThis & { [CONTEXT_SLOT]?: React.Context<HTMLElement | null> };\nconst DialogContainerContext = contextRegistry[CONTEXT_SLOT] ??= React.createContext<HTMLElement | null>(null);\n\n/** The DialogContent element, for host code that portals into the dialog. */\nexport const useDialogContainer = (): HTMLElement | null =>\n React.useContext(DialogContainerContext);\n\nconst DialogOverlay = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n data-slot=\"dialog-overlay\"\n className={cn(\n // Page context behind the modal stays readable; separation comes from a\n // light token scrim, not a blur.\n \"fixed inset-0 z-[10000] bg-[var(--matrx-overlay-scrim-soft)]\",\n MOTION_OVERLAY,\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\n/**\n * Unstyled, non-portalling Content for custom dialog layouts. Preserves Radix\n * focus/background behavior and derives `aria-modal` from the Root.\n */\nconst DialogContentPrimitive = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>((props, ref) => {\n const isModal = useRadixDialogModal();\n return (\n <DialogPrimitive.Content\n {...props}\n ref={ref}\n aria-modal={isModal || undefined}\n />\n );\n});\nDialogContentPrimitive.displayName = \"DialogContentPrimitive\";\n\nconst DIALOG_DESKTOP_CLASSES =\n \"matrx-dialog-card fixed inset-0 z-[10000] m-auto grid h-fit min-w-0 w-full max-w-lg gap-4 max-h-[85dvh] overflow-y-auto overscroll-contain [--dialog-pad:1.5rem] overflow-x-clip border bg-background p-6 shadow-lg [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full sm:rounded-lg\";\n\nconst DIALOG_MOBILE_SHEET_CLASSES =\n \"matrx-mobile-sheet matrx-dialog-card fixed inset-x-0 bottom-0 left-0 right-0 top-auto z-[10000] flex min-w-0 flex-col w-full max-w-full max-h-[90dvh] gap-4 [--dialog-pad:1rem] overflow-x-clip border-t bg-background p-4 pb-safe shadow-lg [overflow-wrap:anywhere] [&>*]:min-w-0 [&>*]:max-w-full rounded-t-2xl rounded-b-none overflow-y-auto overscroll-contain\";\n\n// Re-asserted LAST so sheet geometry always wins over a caller className.\nconst DIALOG_MOBILE_SHEET_OVERRIDE =\n \"inset-x-0 bottom-0 left-0 right-0 top-auto translate-none w-full max-w-full max-h-[90dvh] rounded-b-none rounded-t-2xl overflow-y-auto\";\n\nexport interface DialogContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n /** Render as a bottom sheet below the mobile breakpoint. Default `true`. */\n mobileSheet?: boolean;\n /** Render the built-in close control. Default `true`. */\n showCloseButton?: boolean;\n /** Explicit portal target; wins over the injected container. */\n container?: HTMLElement | null;\n /**\n * Package-owned open/close motion. Default `true`. Pass `false` for a\n * surface that must appear instantly. It is NOT the reduced-motion switch;\n * `styles.css` already honours `prefers-reduced-motion`.\n */\n animated?: boolean;\n}\n\nconst DialogContent = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(\n (\n {\n className,\n children,\n mobileSheet = true,\n animated = true,\n showCloseButton = true,\n container,\n ...props\n },\n ref,\n ) => {\n const isMobile = useIsMobile();\n const isModal = useRadixDialogModal();\n // Falls through to the injected container while `containerEl` is unset\n // (pre-mount) — the original's dialog > popout > body priority.\n const injectedContainer = usePortalContainer(container);\n const asSheet = mobileSheet && isMobile;\n const [containerEl, setContainerEl] = React.useState<HTMLElement | null>(\n null,\n );\n\n const mergedRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n setContainerEl(node);\n if (typeof ref === \"function\") ref(node);\n else if (ref)\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n },\n [ref],\n );\n\n const hasTitle =\n treeContainsComponent(children, DialogTitle) ||\n treeContainsComponent(children, DialogPrimitive.Title);\n const hasDescription =\n treeContainsComponent(children, DialogDescription) ||\n treeContainsComponent(children, DialogPrimitive.Description);\n\n return (\n <DialogPortal container={container}>\n {isModal ? <DialogOverlay /> : null}\n <DialogContentPrimitive\n ref={mergedRef}\n data-slot=\"dialog-content\"\n className={cn(\n asSheet ? DIALOG_MOBILE_SHEET_CLASSES : DIALOG_DESKTOP_CLASSES,\n animated && (asSheet ? MOTION_BOTTOM_SHEET : MOTION_DIALOG),\n className,\n asSheet && DIALOG_MOBILE_SHEET_OVERRIDE,\n // A non-modal dialog is the coexistence contract for content that\n // can sit beside a host's floating window manager (which starts at\n // z=1000); staying below that boundary makes a newly focused window\n // usable without coupling the two systems.\n !isModal && \"z-[900]\",\n )}\n {...(hasDescription ? {} : { \"aria-describedby\": undefined })}\n {...props}\n >\n {hasTitle ? null : (\n <VisuallyHidden.Root>\n <DialogPrimitive.Title>Dialog</DialogPrimitive.Title>\n </VisuallyHidden.Root>\n )}\n <DialogContainerContext.Provider value={containerEl}>\n <PortalContainerProvider\n container={containerEl ?? injectedContainer ?? null}\n >\n {children}\n </PortalContainerProvider>\n </DialogContainerContext.Provider>\n {showCloseButton ? (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n aria-label=\"Close\"\n className=\"absolute right-2 top-4 flex h-11 w-11 items-center justify-center rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground sm:right-4 lg:h-10 lg:w-10\"\n >\n <XIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n ) : null}\n </DialogContentPrimitive>\n </DialogPortal>\n );\n },\n);\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n data-slot=\"dialog-header\"\n className={cn(\n // DialogContent owns an absolute close control. Reserve its hit area in\n // every header so trailing actions never render underneath it.\n \"flex flex-col space-y-1.5 pr-12 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n // Ruling 3/4 — sticky to the card edges so a scrolled body never shows\n // through under the actions, and safe-area padded on a phone.\n //\n // 🚨 THERE IS NO `mb-[…]` HERE, AND THERE MUST NEVER BE ONE AGAIN\n // (0.11.3, feedback bf8fb00b). The bleed over the card's bottom padding\n // used to be a NEGATIVE BLOCK MARGIN, which makes this box taller than\n // the grid area the card allocates it — and `position: sticky` CLAMPS a\n // box to its containing block, so the browser yanked the footer UP by\n // `--dialog-pad` against the card's `gap-4` and painted 8px of opaque\n // footer over the last line of the consequence, at every length. The\n // card now RESERVES this footer's block size instead (`matrx-dialog-card`\n // in styles.css hands over its `padding-bottom`), so the bleed costs no\n // margin at all. Guard: `sticky-footer-geometry.test.tsx`.\n //\n // These stay UTILITIES rather than a shipped rule so a caller's\n // `className` still wins through tailwind-merge — a shipped rule would\n // have to be unlayered to survive Tailwind preflight (§ THE PREFLIGHT\n // RULE in styles.css) and would then override every caller's padding.\n \"sticky bottom-0 z-10 bg-background pt-3\",\n \"mx-[calc(var(--dialog-pad,0px)*-1)] px-[var(--dialog-pad,0px)] pb-[var(--dialog-pad,0px)]\",\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"dialog-title\"\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ComponentRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogContentPrimitive,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","/**\n * THE MOTION CONTRACT (0.10.0) — the class names every animated surface in\n * this package puts on the DOM, in ONE place.\n *\n * Why a module and not ten inline strings: the sweep that produced this file\n * found the same defect ten times over, and it was invisible each time\n * because each primitive spelled its animation out by hand. Ten hand-written\n * copies of `data-[state=open]:animate-in data-[state=closed]:animate-out\n * data-[state=closed]:fade-out-0 …` meant ten chances to reach for a utility\n * nothing in the package defines — which is exactly what happened. A single\n * exported constant per motion SHAPE means the next primitive cannot invent\n * an eleventh spelling, and `styles.test.ts` can prove every one of them\n * resolves to a rule in the shipped stylesheet.\n *\n * Every rule these name lives in `styles.css` under the package's own\n * keyframes. NONE of them is a Tailwind utility, and none requires a host\n * plugin — see that file's header for the measurement that made this\n * necessary.\n */\n\n/** Modal scrims: Dialog, AlertDialog, Sheet, CommandDialog. Fade only. */\nexport const MOTION_OVERLAY = \"matrx-motion-overlay\";\n\n/** The centred dialog card. Fades and scales; centring is not its business. */\nexport const MOTION_DIALOG = \"matrx-motion-dialog\";\n\n/**\n * THE CENTRING OF A CENTRED DIALOG CARD — package-owned, in the `translate`\n * property, and NEVER a Tailwind `translate-x-[-50%] translate-y-[-50%]` pair.\n *\n * Those utilities do not compile to the same thing in every host: Tailwind v3\n * writes them into `transform`, Tailwind v4 writes them into the independent\n * `translate` property, which COMPOSES with `transform` instead of being\n * replaced by it. 0.10.0's keyframes restated the centring inside `transform`,\n * which was harmless on v3 and doubled the centring on v4 — the card flew in\n * from off the top-left of the viewport for the animation's whole duration and\n * snapped into place at the end (fixed in 0.10.1).\n *\n * Owning it here means one spelling that reads the same on both, and it frees\n * `transform` so the keyframes carry ONLY the delta. Put this on every centred\n * surface UNCONDITIONALLY — it is geometry, so unlike {@link MOTION_DIALOG} it\n * must survive `animated={false}`. Its rule ships in `styles.css`.\n */\nexport const CENTERED_DIALOG = \"matrx-dialog-centered\";\n\n/**\n * The resting gap between a `popper`-positioned surface and its trigger, for\n * the primitives that want one (today: `Select`). Same law and same reason as\n * {@link CENTERED_DIALOG} — a position an animated surface holds AT REST is\n * the `translate` property's job, never a Tailwind translate utility, because\n * those land in `transform` on a v3 host and in `translate` on a v4 one while\n * the keyframes animate `transform` either way. Sizes from\n * `--matrx-popper-offset`; keys off Radix's `data-side`.\n */\nexport const POPPER_OFFSET = \"matrx-popper-offset\";\n\n/** The mobile Dialog / CommandDialog bottom sheet. Slides up and fades. */\nexport const MOTION_BOTTOM_SHEET = \"matrx-motion-bottom-sheet\";\n\n/**\n * Radix-popper surfaces: Popover, DropdownMenu, ContextMenu, HoverCard,\n * Select, Tooltip. Reads `--radix-popper-transform-origin` so the surface\n * grows out of its trigger, and `data-side` so it travels from it.\n */\nexport const MOTION_POPPER = \"matrx-motion-popper\";\n\n/** Edge sheets, one class per `sheetVariants` side. */\nexport const MOTION_SHEET = {\n top: \"matrx-motion-sheet-top\",\n bottom: \"matrx-motion-sheet-bottom\",\n left: \"matrx-motion-sheet-left\",\n right: \"matrx-motion-sheet-right\",\n center: \"matrx-motion-sheet-center\",\n} as const;\n\n/** Skeleton's breathing loop. */\nexport const MOTION_PULSE = \"matrx-pulse\";\n\n/** The spinner loop, for every inline busy indicator in the package. */\nexport const MOTION_SPIN = \"matrx-spin\";\n\n/**\n * Every motion class the package ships, for the guards. If a rule for one of\n * these is missing from `styles.css`, a component animates in no consumer and\n * says nothing about it — the C26 failure this list exists to make loud.\n */\nexport const ALL_MOTION_CLASSES = [\n MOTION_OVERLAY,\n MOTION_DIALOG,\n MOTION_BOTTOM_SHEET,\n MOTION_POPPER,\n ...Object.values(MOTION_SHEET),\n MOTION_PULSE,\n MOTION_SPIN,\n] as const;\n\n/**\n * The host-plugin utilities this package is forbidden to emit. They are\n * supplied by `tailwindcss-animate` / `tw-animate-css`, which is a HOST CSS\n * entry concern a package cannot declare a dependency on: three of the four\n * AI Matrx consumers never loaded it, so every surface wearing these appeared\n * with no animation and no error. `styles.test.ts` fails the build if one\n * comes back.\n */\nexport const FORBIDDEN_HOST_MOTION_UTILITIES = [\n \"animate-in\",\n \"animate-out\",\n \"fade-in\",\n \"fade-out\",\n \"zoom-in\",\n \"zoom-out\",\n \"slide-in-from\",\n \"slide-out-to\",\n \"animate-accordion\",\n \"animate-slide-down\",\n \"animate-slide-up\",\n \"animate-pulse\",\n \"animate-spin\",\n] as const;\n","/**\n * Internal inlined SVG icons (policy C19: no icon-library dependency, ever).\n *\n * Each icon is copied from the exact glyph the ported originals rendered:\n * lucide-react's Loader2 / ChevronLeft / ChevronRight / MoreHorizontal and\n * @radix-ui/react-icons' Cross2Icon. Same viewBoxes, same paths, same default\n * stroke geometry — a host swapping the import sees pixel-identical output.\n *\n * Not exported from the package entry; components consume them directly.\n */\n\nimport * as React from \"react\";\n\ntype IconProps = React.SVGAttributes<SVGSVGElement>;\n\nfunction lucideProps(props: IconProps): React.SVGAttributes<SVGSVGElement> {\n return {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": true,\n ...props,\n };\n}\n\n/** lucide `loader-2` — the spinner glyph. Callers add `matrx-spin`. */\nexport function Loader2Icon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n\n/** lucide `chevron-left`. */\nexport function ChevronLeftIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\n/** lucide `chevron-right`. */\nexport function ChevronRightIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\n/** lucide `chevron-down` — the disclosure's open glyph. */\nexport function ChevronDownIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\n/** lucide `archive` — the archived-rows glyph (ArchivedDisclosure). */\nexport function ArchiveIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <rect width=\"20\" height=\"5\" x=\"2\" y=\"3\" rx=\"1\" />\n <path d=\"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8\" />\n <path d=\"M10 12h4\" />\n </svg>\n );\n}\n\n/** lucide `more-horizontal` — the kebab/ellipsis glyph. */\nexport function MoreHorizontalIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </svg>\n );\n}\n\n/** lucide `check` — the selected-row tick (CreatablePicker). */\nexport function LucideCheckIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\n/** lucide `chevrons-up-down` — the combobox trigger glyph. */\nexport function ChevronsUpDownIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"m7 15 5 5 5-5\" />\n <path d=\"m7 9 5-5 5 5\" />\n </svg>\n );\n}\n\n/** lucide `external-link` — the manage-in-new-tab glyph. */\nexport function ExternalLinkIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </svg>\n );\n}\n\n/** lucide `lock` — the platform-governed vocabulary glyph. */\nexport function LockIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n );\n}\n\n/** lucide `plus` — the create/add glyph. */\nexport function PlusIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n );\n}\n\n/** lucide `x` — the dialog close glyph (host dialog module used lucide X). */\nexport function XIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\n/**\n * @radix-ui/react-icons components default to width/height 15 — the bare\n * `<ChevronUpIcon />` renders in Select's scroll buttons rely on it.\n */\nfunction radixProps(props: IconProps): React.SVGAttributes<SVGSVGElement> {\n return {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 15 15\",\n width: 15,\n height: 15,\n fill: \"none\",\n \"aria-hidden\": true,\n ...props,\n };\n}\n\n/** @radix-ui/react-icons `MagnifyingGlassIcon` — the command search glyph. */\nexport function MagnifyingGlassIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M10 6.5C10 8.433 8.433 10 6.5 10C4.567 10 3 8.433 3 6.5C3 4.567 4.567 3 6.5 3C8.433 3 10 4.567 10 6.5ZM9.30884 10.0159C8.53901 10.6318 7.56251 11 6.5 11C4.01472 11 2 8.98528 2 6.5C2 4.01472 4.01472 2 6.5 2C8.98528 2 11 4.01472 11 6.5C11 7.56251 10.6318 8.53901 10.0159 9.30884L12.8536 12.1464C13.0488 12.3417 13.0488 12.6583 12.8536 12.8536C12.6583 13.0488 12.3417 13.0488 12.1464 12.8536L9.30884 10.0159Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `CheckIcon` — the select item indicator glyph. */\nexport function CheckIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M11.4669 3.72684C11.7558 3.91574 11.8369 4.30308 11.648 4.59198L7.39799 11.092C7.29783 11.2452 7.13556 11.3467 6.95402 11.3699C6.77247 11.3931 6.58989 11.3355 6.45446 11.2124L3.70446 8.71241C3.44905 8.48022 3.43023 8.08494 3.66242 7.82953C3.89461 7.57412 4.28989 7.55529 4.5453 7.78749L6.75292 9.79441L10.6018 3.90792C10.7907 3.61902 11.178 3.53795 11.4669 3.72684Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/**\n * @radix-ui/react-icons `DividerHorizontalIcon` — the INDETERMINATE checkbox\n * glyph. Radix renders the indicator for both `true` and `\"indeterminate\"`, so\n * a half-selected \"select all\" that shows a full check states something false;\n * the two states get different glyphs on purpose.\n */\nexport function DividerHorizontalIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M2 7.5C2 7.22386 2.22386 7 2.5 7H12.5C12.7761 7 13 7.22386 13 7.5C13 7.77614 12.7761 8 12.5 8H2.5C2.22386 8 2 7.77614 2 7.5Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `DotFilledIcon` — the menu radio-item indicator. */\nexport function DotFilledIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M9.875 7.5C9.875 8.81168 8.81168 9.875 7.5 9.875C6.18832 9.875 5.125 8.81168 5.125 7.5C5.125 6.18832 6.18832 5.125 7.5 5.125C8.81168 5.125 9.875 6.18832 9.875 7.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `ChevronRightIcon` — the submenu-trigger glyph. */\nexport function RadixChevronRightIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M6.1584 3.13508C6.35985 2.94621 6.67627 2.95642 6.86514 3.15788L10.6151 7.15788C10.7954 7.3502 10.7954 7.64949 10.6151 7.84182L6.86514 11.8418C6.67627 12.0433 6.35985 12.0535 6.1584 11.8646C5.95694 11.6757 5.94673 11.3593 6.1356 11.1579L9.565 7.49985L6.1356 3.84182C5.94673 3.64036 5.95694 3.32394 6.1584 3.13508Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `ChevronDownIcon` — the select trigger/scroll glyph. */\nexport function RadixChevronDownIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `ChevronUpIcon` — the select scroll-up glyph. */\nexport function RadixChevronUpIcon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M3.13523 8.84197C3.3241 9.04343 3.64052 9.05363 3.84197 8.86477L7.5 5.43536L11.158 8.86477C11.3595 9.05363 11.6759 9.04343 11.8648 8.84197C12.0536 8.64051 12.0434 8.32409 11.842 8.13523L7.84197 4.38523C7.64964 4.20492 7.35036 4.20492 7.15803 4.38523L3.15803 8.13523C2.95657 8.32409 2.94637 8.64051 3.13523 8.84197Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** @radix-ui/react-icons `Cross2Icon` — the dialog/sheet close glyph. */\nexport function Cross2Icon(props: IconProps) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 15 15\"\n fill=\"none\"\n aria-hidden\n {...props}\n >\n <path\n d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/**\n * @radix-ui/react-icons `DragHandleDots2Icon` — the grip on `ResizableHandle`.\n * Inlined per C19: this package depends on no icon library.\n */\nexport function DragHandleDots2Icon(props: IconProps) {\n return (\n <svg {...radixProps(props)}>\n <path\n d=\"M4.5 2.5C5.05228 2.5 5.5 2.05228 5.5 1.5C5.5 0.947715 5.05228 0.5 4.5 0.5C3.94772 0.5 3.5 0.947715 3.5 1.5C3.5 2.05228 3.94772 2.5 4.5 2.5ZM4.5 6.5C5.05228 6.5 5.5 6.05229 5.5 5.5C5.5 4.94771 5.05228 4.5 4.5 4.5C3.94772 4.5 3.5 4.94771 3.5 5.5C3.5 6.05229 3.94772 6.5 4.5 6.5ZM5.5 9.5C5.5 10.0523 5.05228 10.5 4.5 10.5C3.94772 10.5 3.5 10.0523 3.5 9.5C3.5 8.94771 3.94772 8.5 4.5 8.5C5.05228 8.5 5.5 8.94771 5.5 9.5ZM4.5 14.5C5.05228 14.5 5.5 14.0523 5.5 13.5C5.5 12.9477 5.05228 12.5 4.5 12.5C3.94772 12.5 3.5 12.9477 3.5 13.5C3.5 14.0523 3.94772 14.5 4.5 14.5ZM11.5 1.5C11.5 2.05228 11.0523 2.5 10.5 2.5C9.94771 2.5 9.5 2.05228 9.5 1.5C9.5 0.947715 9.94771 0.5 10.5 0.5C11.0523 0.5 11.5 0.947715 11.5 1.5ZM10.5 6.5C11.0523 6.5 11.5 6.05229 11.5 5.5C11.5 4.94771 11.0523 4.5 10.5 4.5C9.94771 4.5 9.5 4.94771 9.5 5.5C9.5 6.05229 9.94771 6.5 10.5 6.5ZM11.5 9.5C11.5 10.0523 11.0523 10.5 10.5 10.5C9.94771 10.5 9.5 10.0523 9.5 9.5C9.5 8.94771 9.94771 8.5 10.5 8.5C11.0523 8.5 11.5 8.94771 11.5 9.5ZM10.5 14.5C11.0523 14.5 11.5 14.0523 11.5 13.5C11.5 12.9477 11.0523 12.5 10.5 12.5C9.94771 12.5 9.5 12.9477 9.5 13.5C9.5 14.0523 9.94771 14.5 10.5 14.5Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n}\n\n/** lucide `star` — the default-organization badge (OrganizationPicker). */\nexport function StarIcon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\" />\n </svg>\n );\n}\n\n/** lucide `building-2` — the organization glyph (OrganizationPicker trigger). */\nexport function Building2Icon(props: IconProps) {\n return (\n <svg {...lucideProps(props)}>\n <path d=\"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z\" />\n <path d=\"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2\" />\n <path d=\"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2\" />\n <path d=\"M10 6h4\" />\n <path d=\"M10 10h4\" />\n <path d=\"M10 14h4\" />\n <path d=\"M10 18h4\" />\n </svg>\n );\n}\n","\"use client\";\n\n/**\n * Injected portal-container seam.\n *\n * The matrx-frontend original resolved nested portal targets through\n * `useNestedPortalContainer` (explicit prop > dialog content > popout body >\n * document.body) — a host-shaped hook wired to that app's dialog and\n * window-panel systems. The package inverts the seam: hosts provide the\n * resolved container through `PortalContainerProvider`; an explicit\n * `container` prop on a component still wins, and with neither the portal\n * falls through to `document.body` (Radix default). Priority semantics are\n * unchanged from the original.\n */\n\nimport * as React from \"react\";\n\n// Shared identity across independently bundled public entrypoints/loaders.\nconst CONTEXT_SLOT = Symbol.for(\"ai-matrx.design-system.portal-container-context\");\nconst contextRegistry = globalThis as typeof globalThis & { [CONTEXT_SLOT]?: React.Context<HTMLElement | null | undefined> };\nconst PortalContainerContext = contextRegistry[CONTEXT_SLOT] ??= React.createContext<HTMLElement | null | undefined>(undefined);\n\nexport interface PortalContainerProviderProps {\n /** Where nested Radix portals (Popover, etc.) should mount. `null`/`undefined` → document.body. */\n container: HTMLElement | null | undefined;\n children: React.ReactNode;\n}\n\nexport function PortalContainerProvider({\n container,\n children,\n}: PortalContainerProviderProps) {\n return (\n <PortalContainerContext.Provider value={container ?? undefined}>\n {children}\n </PortalContainerContext.Provider>\n );\n}\n\n/**\n * Resolve a portal target: explicit prop (including an explicit `null`,\n * meaning \"the default body\") beats the injected container.\n */\nexport function usePortalContainer(\n explicit?: HTMLElement | null,\n): HTMLElement | undefined {\n const injected = React.useContext(PortalContainerContext);\n\n if (explicit !== undefined) {\n return explicit ?? undefined;\n }\n\n return injected ?? undefined;\n}\n","\"use client\";\n\n/**\n * Ported verbatim from matrx-frontend `components/ui/radix-dialog-modal-context.tsx`.\n * Shared by the Sheet and BottomSheet families (and available to hosts that\n * compose their own Radix Dialog-derived wrappers around these primitives).\n */\n\nimport * as React from \"react\";\n\n// Shared identity across independently bundled public entrypoints/loaders.\nconst CONTEXT_SLOT = Symbol.for(\"ai-matrx.design-system.dialog-modal-context\");\nconst contextRegistry = globalThis as typeof globalThis & { [CONTEXT_SLOT]?: React.Context<boolean> };\nconst RadixDialogModalContext = contextRegistry[CONTEXT_SLOT] ??= React.createContext<boolean>(true);\n\nexport interface RadixDialogModalProviderProps {\n children: React.ReactNode;\n modal: boolean;\n}\n\n/**\n * Keeps our Radix-based content wrappers aligned with the owning Root's\n * modality so ARIA semantics cannot drift from focus/pointer behavior.\n */\nexport function RadixDialogModalProvider({\n children,\n modal,\n}: RadixDialogModalProviderProps) {\n return (\n <RadixDialogModalContext.Provider value={modal}>\n {children}\n </RadixDialogModalContext.Provider>\n );\n}\n\n/** Returns whether the nearest Radix Dialog-derived root is modal. */\nexport function useRadixDialogModal(): boolean {\n return React.useContext(RadixDialogModalContext);\n}\n","\"use client\";\n\n/**\n * useIsMobile — the ONE breakpoint hook the package's responsive primitives\n * read (CommandDialog and Dialog both auto-render as a bottom sheet below it).\n *\n * Lifted out of `command.tsx`, where it lived privately, when Dialog arrived\n * and needed the SAME answer: two copies of a breakpoint hook is exactly the\n * duplication this package exists to end, and a Dialog that disagreed with a\n * CommandDialog about what \"mobile\" means would render two different sheet\n * geometries on one screen.\n *\n * SSR-safe by construction: `false` until mounted, so the server and the first\n * client paint agree and the desktop geometry is what hydrates. The mobile\n * geometry swaps in on the effect pass.\n *\n * The breakpoint is the host-original 768px (Tailwind `md`). It is exported so\n * a host can branch on the same number instead of inventing a second one.\n */\n\nimport * as React from \"react\";\n\n/** Viewport width (px) below which the package treats a surface as mobile. */\nexport const MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile(): boolean {\n const [isMobile, setIsMobile] = React.useState(false);\n const [hasMounted, setHasMounted] = React.useState(false);\n\n React.useEffect(() => {\n setHasMounted(true);\n\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n onChange();\n\n // NO ENVIRONMENT MAY CRASH ON THIS HOOK. `matchMedia` is absent in older\n // jsdom setups and in some embedded webviews, and a primitive that throws\n // there takes the whole host's test suite (or screen) down over a\n // breakpoint — a cost wildly out of proportion to the answer. Without it\n // the width read above still gives a correct first answer; only live\n // resize tracking is lost, which is exactly what is unavailable.\n if (typeof window.matchMedia !== \"function\") {\n return undefined;\n }\n\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n mql.addEventListener(\"change\", onChange);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n if (!hasMounted) {\n return false;\n }\n return isMobile;\n}\n","\"use client\";\n\n/**\n * DropdownMenu — Radix dropdown with two behaviours the stock body lacks.\n *\n * 1. THE ROOT RENDERS UNCONDITIONALLY — no hydration mount gate. A wrapper in\n * matrx-frontend once deferred rendering until after hydration on a false\n * premise (Radix ids come from React's SSR-stable `useId`), which deleted\n * the always-visible trigger — buttons, `…` menus — from SSR and the first\n * client paint.\n *\n * 2. A LONG MENU SCROLLS INSTEAD OF GROWING OFF-SCREEN. Content and SubContent\n * cap at `--radix-dropdown-menu-content-available-height` — the space Radix\n * actually measured between the trigger and the viewport edge — and scroll\n * past it. Without the cap a menu longer than the viewport puts its last\n * items where no pointer can reach them, and on a short window that can be\n * the only exit from the surface.\n *\n * Portalling goes through the package's `usePortalContainer` seam, so a menu\n * opened inside a Dialog mounts INSIDE the dialog (staying in the scroll\n * shard, where its wheel events work) instead of at `document.body`. An\n * explicit `container` prop still wins.\n *\n * Icons are the package's inlined SVGs (C19) — no icon-library dependency.\n */\n\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport * as React from \"react\";\n\nimport { cn } from \"./cn\";\nimport { MOTION_POPPER } from \"./motion\";\nimport { CheckIcon, DotFilledIcon, RadixChevronRightIcon } from \"./icons\";\nimport { usePortalContainer } from \"./portal-container\";\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nconst MENU_SURFACE_CLASS =\n \"z-[10001] min-w-[8rem] max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto overflow-x-hidden overscroll-contain rounded-md border bg-popover p-1 text-popover-foreground\";\n\n\nconst MENU_ITEM_CLASS =\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\";\n\nconst MENU_INDICATOR_ITEM_CLASS =\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\";\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n data-slot=\"dropdown-menu-sub-trigger\"\n className={cn(\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <RadixChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName;\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(MENU_SURFACE_CLASS, \"shadow-lg\", MOTION_POPPER, className)}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName;\n\nexport interface DropdownMenuContentProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> {\n /** Explicit portal target; wins over the injected container. */\n container?: HTMLElement | null;\n}\n\nconst DropdownMenuContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n DropdownMenuContentProps\n>(({ className, sideOffset = 4, container, ...props }, ref) => {\n const portalContainer = usePortalContainer(container);\n return (\n <DropdownMenuPrimitive.Portal container={portalContainer}>\n <DropdownMenuPrimitive.Content\n ref={ref}\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n MENU_SURFACE_CLASS,\n \"shadow-md\",\n MOTION_POPPER,\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n});\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;\n\nconst DropdownMenuItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n data-slot=\"dropdown-menu-item\"\n className={cn(MENU_ITEM_CLASS, inset && \"pl-8\", className)}\n {...props}\n />\n));\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(MENU_INDICATOR_ITEM_CLASS, className)}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName;\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(MENU_INDICATOR_ITEM_CLASS, className)}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <DotFilledIcon className=\"h-4 w-4 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n data-slot=\"dropdown-menu-label\"\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n);\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","/** Pure Alchemy asset export. Safe to import without React or browser APIs. */\nexport const ALCHEMY_GLYPH_SVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4.5 5.5h8v11h-8z\"/><path d=\"M8.5 9.5h8v9h-8z\"/><path d=\"m18.5 3 .65 1.85L21 5.5l-1.85.65L18.5 8l-.65-1.85L16 5.5l1.85-.65z\"/></svg>';\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n buildAgentPayload,\n createBrowserTransport,\n directSource,\n normalizeTransferJson,\n sealTransferArtifact,\n type AgentPayloadInput,\n type PageAction,\n type Payload,\n type Source,\n type TransferOutcome,\n} from \"@ai-matrx/kit/content-transfer\";\nimport {\n ContentTransferMenu,\n useContentTransferCapabilities,\n type ContentTransferController,\n type TransferMenuPresentation,\n} from \"./index\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../dialog\";\nimport { Button } from \"../button\";\nimport { cn } from \"../cn\";\n\nexport type AlchemyOptionValues = Record<string, boolean | number>;\nexport type AlchemySourceOption =\n | {\n kind: \"toggle\";\n key: string;\n label: string;\n hint?: string;\n default: boolean;\n }\n | {\n kind: \"preset\";\n key: string;\n label: string;\n options: { label: string; value: number }[];\n default: number;\n }\n | {\n kind: \"slider\";\n key: string;\n label: string;\n hint?: string;\n stops: number[];\n default: number;\n formatValue: (value: number) => string;\n }\n | {\n kind: \"number\";\n key: string;\n label: string;\n hint?: string;\n min?: number;\n step?: number;\n presets?: { label: string; value: number }[];\n default: number;\n };\nexport interface AlchemyCustomSource {\n label?: string;\n hint?: string;\n options: AlchemySourceOption[];\n build(values: AlchemyOptionValues): {\n text: string;\n meta?: Record<string, string | number | boolean | undefined>;\n };\n wrap(\n text: string,\n values: AlchemyOptionValues,\n meta?: Record<string, string | number | boolean | undefined>,\n ): AgentPayloadInput;\n dialogTitle?: string;\n dialogDescription?: string;\n}\nexport type AlchemyDetail = \"full\" | \"compact\" | \"brief\";\nexport interface AlchemyGroomerSection {\n id: string;\n title: string;\n description?: string;\n cuttable?: boolean;\n levelLabels?: Partial<Record<AlchemyDetail, string>>;\n build(level: AlchemyDetail): unknown;\n defaultSelection?: AlchemyDetail | \"off\";\n}\nexport interface AlchemyGroomerConfig {\n label: string;\n kind: string;\n location: string;\n description: string;\n attributes?: AgentPayloadInput[\"attributes\"];\n context?: AgentPayloadInput[\"context\"];\n summary?: string;\n sections: AlchemyGroomerSection[];\n}\nexport interface AlchemyCopyVariant {\n id: string;\n label: string;\n hint?: string;\n icon?: React.ComponentType<{ className?: string }>;\n section?: \"copy\" | \"ai\";\n ariaLabel?: string;\n successMessage?: string;\n build?: () =>\n AgentPayloadInput | string | Promise<AgentPayloadInput | string>;\n onSelect?: () => void | Promise<void>;\n modal?: (props: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n }) => React.ReactNode;\n}\nexport interface AlchemyExportItem {\n id: string;\n label: string;\n build?: () => { content: BlobPart; extension: string; mime: string };\n onSelect?: () => void | Promise<void>;\n}\ntype Resolvable<T> = T | (() => T);\nexport interface MatrxCopyMenuProps {\n label: string;\n /** Stable record identity when this mounted control can switch between records. */\n sourceId?: string;\n /** Prepare the tabular view while keeping raw JSON and human copy formats. */\n primarySource?: \"table\";\n human?: Resolvable<string>;\n json?: Resolvable<unknown>;\n agent?: Resolvable<AgentPayloadInput | string>;\n aiVariants?: AlchemyCopyVariant[];\n aiCustom?: AlchemyCustomSource;\n groomer?: () => AlchemyGroomerConfig;\n agentVariant?: {\n id?: string;\n label?: string;\n hint?: string;\n position?: \"first\" | \"last\";\n };\n export?: {\n items: AlchemyExportItem[];\n sheetRows?: () => Array<Record<string, unknown>>;\n };\n /** Host-owned authenticated destination, not a second export serializer. */\n sendToSheet?: (\n rows: Array<Record<string, unknown>>,\n label: string,\n ) => Promise<TransferOutcome>;\n hide?: Array<\"copy\" | \"ai\" | \"export\">;\n disabled?: boolean;\n className?: string;\n stopPropagation?: boolean;\n size?: \"xs\" | \"icon\" | \"sm\";\n appearance?: \"bare\" | \"segmented\";\n unified?: boolean;\n grouped?: boolean;\n}\nconst resolve = <T,>(value: Resolvable<T>): T =>\n typeof value === \"function\" ? (value as () => T)() : value;\nconst asPayload = (value: AgentPayloadInput | string): Payload => ({\n kind: \"markdown\",\n text: typeof value === \"string\" ? value : buildAgentPayload(value),\n});\nconst structuredPayload = (value: AgentPayloadInput | string): Payload => {\n if (typeof value === \"string\") return { kind: \"markdown\", text: value };\n const clean = (record?: AgentPayloadInput[\"context\"]) =>\n Object.fromEntries(\n Object.entries(record ?? {}).filter(([, entry]) => entry !== undefined),\n );\n return {\n kind: \"json\",\n value: normalizeTransferJson({\n kind: value.kind,\n location: value.location,\n description: value.description,\n data: value.data,\n ...(value.summary !== undefined ? { summary: value.summary } : {}),\n attributes: clean(value.attributes),\n context: clean(value.context),\n }),\n };\n};\nconst actionDone = (message: string): TransferOutcome => ({\n status: \"success\",\n delivered: \"action\",\n mimeTypes: [],\n message,\n});\nconst sourceFor = (\n id: string,\n label: string,\n build: () => Payload | Promise<Payload>,\n): Source => ({\n id,\n label,\n capture: async ({ signal }) => {\n signal.throwIfAborted();\n const payload = await build();\n signal.throwIfAborted();\n return directSource(payload, { sourceId: id, label });\n },\n});\n\n/** Opinionated bridge for Matrx's existing content builders, with one transfer UI. */\nexport function MatrxCopyMenu(props: MatrxCopyMenuProps) {\n const inherited = useContentTransferCapabilities();\n return (\n <MatrxCopyMenuSession\n key={JSON.stringify([\n inherited.identityKey ?? null,\n props.sourceId ?? props.label,\n ])}\n {...props}\n />\n );\n}\n\nfunction MatrxCopyMenuSession(props: MatrxCopyMenuProps) {\n const instance = React.useId();\n const controller = React.useRef<ContentTransferController>(null);\n const capabilities = useContentTransferCapabilities();\n const transport = capabilities.transport ?? createBrowserTransport();\n const [modal, setModal] = React.useState<AlchemyCopyVariant | null>(null);\n const [configuration, setConfiguration] = React.useState<{\n custom?: AlchemyCustomSource;\n groomer?: AlchemyGroomerConfig;\n } | null>(null);\n const copyVisible = !props.hide?.includes(\"copy\");\n const aiVisible = !props.hide?.includes(\"ai\");\n const exportVisible = !props.hide?.includes(\"export\");\n const make = (\n suffix: string,\n build: () => Payload | Promise<Payload>,\n label = props.label,\n ) =>\n sourceFor(\n `${props.sourceId ?? `${instance}:${props.label}`}:${suffix}`,\n label,\n build,\n );\n const human =\n copyVisible && props.human !== undefined\n ? make(\"human\", () => ({ kind: \"text\", text: resolve(props.human!) }))\n : undefined;\n const humanMarkdown =\n copyVisible && props.human !== undefined\n ? make(\"human-markdown\", () => ({\n kind: \"markdown\",\n text: resolve(props.human!),\n }))\n : undefined;\n const json =\n aiVisible && props.json !== undefined\n ? make(\"json\", () => ({\n kind: \"json\",\n value: normalizeTransferJson(resolve(props.json!)),\n }))\n : undefined;\n const agent =\n aiVisible && props.agent !== undefined\n ? make(\"agent\", () => asPayload(resolve(props.agent!)))\n : undefined;\n const structuredAgent =\n aiVisible && props.agent !== undefined\n ? make(\"structured-agent\", () => structuredPayload(resolve(props.agent!)))\n : undefined;\n const table =\n (exportVisible || props.primarySource === \"table\") && props.export?.sheetRows\n ? make(\"rows\", () => {\n const value = normalizeTransferJson(props.export!.sheetRows!());\n if (\n !Array.isArray(value) ||\n value.some(\n (row) =>\n row === null || typeof row !== \"object\" || Array.isArray(row),\n )\n )\n throw new Error(\"Sheet rows must be JSON objects.\");\n const rows = value as Array<\n Record<string, import(\"@ai-matrx/kit/content-transfer\").Json>\n >;\n const keys = [...new Set(rows.flatMap((row) => Object.keys(row)))];\n return {\n kind: \"rows\",\n rows,\n columns: keys.map((key) => ({\n id: key,\n label: key,\n path: `/${key.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")}`,\n visible: true,\n })),\n };\n })\n : undefined;\n const builderVariants = aiVisible\n ? (props.aiVariants ?? [])\n .filter(\n (variant) => variant.build && !variant.onSelect && !variant.modal,\n )\n .map((variant) => ({\n ...variant,\n copyLabel: variant.label,\n source: make(\n `variant:${variant.id}`,\n async () => asPayload(await variant.build!()),\n variant.label,\n ),\n }))\n : [];\n const faithful = agent\n ? [\n {\n id: props.agentVariant?.id ?? \"faithful\",\n label: props.agentVariant?.label ?? \"Full AI context\",\n source: agent,\n copyLabel: props.agentVariant?.label ?? \"Copy for AI\",\n ...(props.agentVariant?.hint\n ? { hint: props.agentVariant.hint }\n : {}),\n },\n ]\n : [];\n const variants =\n props.agentVariant?.position === \"last\"\n ? [...builderVariants, ...faithful]\n : [...faithful, ...builderVariants];\n const actions: (PageAction & TransferMenuPresentation)[] = [];\n if (aiVisible)\n for (const variant of props.aiVariants ?? []) {\n if (!variant.onSelect && !variant.modal) continue;\n actions.push({\n ...variant,\n id: `variant-action:${variant.id}`,\n label: variant.label,\n supports: () => true,\n run: async () => {\n if (variant.onSelect) await variant.onSelect();\n else setModal(variant);\n return actionDone(`Opened ${variant.label}`);\n },\n });\n }\n if (aiVisible && props.aiCustom)\n actions.push({\n id: \"configure-source\",\n label: props.aiCustom.label ?? \"Customize source…\",\n ...(props.aiCustom.hint ? { hint: props.aiCustom.hint } : {}),\n supports: () => true,\n run: async () => {\n setConfiguration({ custom: props.aiCustom! });\n return actionDone(\"Source options opened\");\n },\n });\n if (aiVisible && props.groomer)\n actions.push({\n id: \"groom-source\",\n label: \"Customize sections…\",\n supports: () => true,\n run: async () => {\n setConfiguration({ groomer: props.groomer!() });\n return actionDone(\"Section options opened\");\n },\n });\n if (exportVisible)\n for (const item of props.export?.items ?? [])\n actions.push({\n id: `export:${item.id}`,\n label: item.label,\n supports: () => true,\n ...(item.build && !item.onSelect\n ? {\n source: make(\n `export:${item.id}`,\n async () => {\n const file = item.build!();\n const bytes = new Uint8Array(\n await new Blob([file.content], {\n type: file.mime,\n }).arrayBuffer(),\n );\n return {\n kind: \"registered\",\n format: \"matrx-file\",\n value: {\n bytes: Array.from(bytes),\n mime: file.mime,\n extension: file.extension,\n },\n };\n },\n item.label,\n ),\n }\n : {}),\n run: async ({ snapshot, draft, signal }) => {\n if (item.onSelect) {\n await item.onSelect();\n return actionDone(`Opened ${item.label}`);\n }\n const value =\n draft.payload.kind === \"registered\" ? draft.payload.value : null;\n if (\n !value ||\n Array.isArray(value) ||\n typeof value !== \"object\" ||\n !Array.isArray(value.bytes) ||\n typeof value.mime !== \"string\" ||\n typeof value.extension !== \"string\" ||\n value.bytes.some(\n (byte) =>\n typeof byte !== \"number\" ||\n !Number.isInteger(byte) ||\n byte < 0 ||\n byte > 255,\n )\n )\n throw new Error(`${item.label} did not capture a valid file.`);\n if (\n draft.omissions.some((omission) => omission.reason !== \"duplicate\")\n )\n throw new Error(\n \"This custom file exceeds the configured export limits or contains excluded content. Use a standard format or revise the source options.\",\n );\n const bytes = new Uint8Array(value.bytes as number[]);\n const filename = `${\n props.label\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\") || \"export\"\n }.${value.extension.replace(/[^a-zA-Z0-9.-]/g, \"\") || \"bin\"}`;\n return transport.download(\n sealTransferArtifact({\n snapshotId: snapshot.id,\n draftRevision: draft.revision,\n format: `export:${item.id}`,\n plainText: \"\",\n file: { filename, mime: value.mime, bytes },\n omissions: [...draft.omissions],\n }),\n signal,\n );\n },\n });\n if (exportVisible && table && props.sendToSheet)\n actions.push({\n id: \"send-google-sheet\",\n label: \"Send to Google Sheet\",\n source: table,\n supports: () => true,\n run: async ({ draft }) => {\n if (draft.payload.kind !== \"rows\")\n throw new Error(\"Google Sheets requires captured rows.\");\n return props.sendToSheet!(draft.payload.rows, props.label);\n },\n });\n const source =\n (props.primarySource === \"table\" ? table : undefined) ?? json ?? table ?? structuredAgent ?? human ?? builderVariants[0]?.source;\n if (!source && !actions.length) return null;\n // Action-only targets carry an explicit description, never invented record data.\n const target =\n source ?? make(\"actions\", () => ({ kind: \"text\", text: props.label }));\n return (\n <>\n <ContentTransferMenu\n source={target}\n controllerRef={controller}\n label={props.label}\n variants={variants}\n actions={actions}\n hide={[\n ...(!copyVisible || !source ? [\"copy\" as const] : []),\n ...(!aiVisible || !source ? [\"prepare\" as const] : []),\n ...(!exportVisible || !source ? [\"download\" as const] : []),\n ]}\n formatSources={{\n ...(human\n ? { plain: human, markdown: humanMarkdown!, html: humanMarkdown! }\n : {}),\n ...(json ? { json, \"compact-json\": json } : {}),\n ...(table && exportVisible ? { csv: table, tsv: table } : {}),\n }}\n {...(props.disabled !== undefined ? { disabled: props.disabled } : {})}\n className={cn(\n props.className,\n props.size === \"xs\" && \"matrx-alchemy-xs\",\n props.size === \"sm\" && \"matrx-alchemy-sm\",\n )}\n {...(props.stopPropagation !== undefined\n ? { stopPropagation: props.stopPropagation }\n : {})}\n />\n {modal?.modal?.({\n open: true,\n onOpenChange: (open) => {\n if (!open) setModal(null);\n },\n })}\n {configuration ? (\n <SourceConfiguration\n restoreFocus={() => controller.current?.focusTrigger()}\n key={`${instance}:configuration`}\n configuration={configuration}\n onClose={() => setConfiguration(null)}\n onPrepare={async (payload, label) => {\n if (!controller.current)\n throw new Error(\"Alchemy is no longer mounted.\");\n await controller.current.prepare(payload, {\n label,\n id: `${instance}:configured:${crypto.randomUUID()}`,\n });\n setConfiguration(null);\n }}\n />\n ) : null}\n </>\n );\n}\n\nfunction SourceConfiguration({\n restoreFocus,\n configuration,\n onClose,\n onPrepare,\n}: {\n configuration: {\n custom?: AlchemyCustomSource;\n groomer?: AlchemyGroomerConfig;\n };\n restoreFocus(): void;\n onClose(): void;\n onPrepare(payload: Payload, label: string): Promise<void>;\n}) {\n const custom = configuration.custom;\n const handingOff = React.useRef(false);\n const groomer = configuration.groomer;\n const [values, setValues] = React.useState<AlchemyOptionValues>(() =>\n Object.fromEntries(\n custom?.options.map((option) => [option.key, option.default]) ?? [],\n ),\n );\n const [sections, setSections] = React.useState<\n Record<string, AlchemyDetail | \"off\">\n >(() =>\n Object.fromEntries(\n groomer?.sections.map((section) => [\n section.id,\n section.defaultSelection ?? \"full\",\n ]) ?? [],\n ),\n );\n const [error, setError] = React.useState<string | null>(null);\n const [busy, setBusy] = React.useState(false);\n const title = custom?.dialogTitle ?? groomer?.label ?? \"Customize source\";\n let prepared: AgentPayloadInput | null = null;\n let buildError: string | null = null;\n let text = \"\";\n try {\n if (custom) {\n const result = custom.build(values);\n prepared = custom.wrap(result.text, values, result.meta);\n } else if (groomer) {\n const data: Record<string, unknown> = {};\n const omitted: string[] = [];\n for (const section of groomer.sections) {\n const level = sections[section.id] ?? \"full\";\n if (level === \"off\") omitted.push(section.id);\n else {\n const value = section.build(level);\n if (value !== undefined && value !== null) data[section.id] = value;\n }\n }\n prepared = {\n kind: groomer.kind,\n location: groomer.location,\n description: groomer.description,\n data,\n ...(groomer.summary ? { summary: groomer.summary } : {}),\n attributes: {\n ...groomer.attributes,\n dropped_sections: omitted.join(\",\"),\n },\n ...(groomer.context ? { context: groomer.context } : {}),\n };\n }\n text = prepared ? buildAgentPayload(prepared) : \"\";\n } catch (cause) {\n buildError =\n cause instanceof Error ? cause.message : \"Could not prepare this source.\";\n }\n return (\n <Dialog\n open\n onOpenChange={(open) => {\n if (!open && !busy) onClose();\n }}\n >\n <DialogContent\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n if (!handingOff.current) restoreFocus();\n }}\n className=\"matrx-alchemy-workspace\"\n >\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>\n {custom?.dialogDescription ??\n \"Choose the source detail, then prepare, edit, summarize, copy or export it in Alchemy.\"}\n </DialogDescription>\n </DialogHeader>\n <div className=\"matrx-alchemy-main matrx-alchemy-toolbar\">\n {custom?.options.map((option) => (\n <label key={option.key}>\n {option.label}\n {\"hint\" in option && option.hint ? (\n <small>{option.hint}</small>\n ) : null}\n {option.kind === \"toggle\" ? (\n <input\n type=\"checkbox\"\n checked={Boolean(values[option.key])}\n onChange={(event) =>\n setValues({ ...values, [option.key]: event.target.checked })\n }\n />\n ) : option.kind === \"preset\" ? (\n <select\n value={Number(values[option.key])}\n onChange={(event) =>\n setValues({\n ...values,\n [option.key]: Number(event.target.value),\n })\n }\n >\n {option.options.map((choice) => (\n <option key={choice.value} value={choice.value}>\n {choice.label}\n </option>\n ))}\n </select>\n ) : option.kind === \"slider\" ? (\n <>\n <input\n type=\"range\"\n min={0}\n max={Math.max(0, option.stops.length - 1)}\n step={1}\n value={option.stops.indexOf(Number(values[option.key]))}\n onChange={(event) =>\n setValues({\n ...values,\n [option.key]: option.stops[Number(event.target.value)]!,\n })\n }\n />\n <span>{option.formatValue(Number(values[option.key]))}</span>\n </>\n ) : (\n <>\n <input\n type=\"number\"\n min={option.min}\n step={option.step}\n value={Number(values[option.key])}\n onChange={(event) =>\n setValues({\n ...values,\n [option.key]: Number(event.target.value),\n })\n }\n />\n {option.presets?.map((preset) => (\n <Button\n key={preset.value}\n type=\"button\"\n variant=\"ghost\"\n onClick={() =>\n setValues({ ...values, [option.key]: preset.value })\n }\n >\n {preset.label}\n </Button>\n ))}\n </>\n )}\n </label>\n ))}\n {groomer ? (\n <>\n <div>\n {([\"full\", \"compact\", \"brief\"] as const).map((level) => (\n <Button\n key={level}\n type=\"button\"\n variant=\"ghost\"\n onClick={() =>\n setSections(\n Object.fromEntries(\n groomer.sections.map((section) => [\n section.id,\n level === \"brief\" && section.cuttable\n ? \"off\"\n : level,\n ]),\n ),\n )\n }\n >\n {level}\n </Button>\n ))}\n </div>\n {groomer.sections.map((section) => (\n <label key={section.id}>\n {section.title}\n <select\n value={sections[section.id]}\n onChange={(event) =>\n setSections({\n ...sections,\n [section.id]: event.target.value as\n AlchemyDetail | \"off\",\n })\n }\n >\n {([\"full\", \"compact\", \"brief\"] as const).map((level) => (\n <option key={level} value={level}>\n {section.levelLabels?.[level] ?? level}\n </option>\n ))}\n {section.cuttable ? (\n <option value=\"off\">Exclude</option>\n ) : null}\n </select>\n {section.description ? (\n <span>{section.description}</span>\n ) : null}\n </label>\n ))}\n </>\n ) : null}\n </div>\n <p>\n {text.length.toLocaleString()} characters · approximately{\" \"}\n {Math.ceil(text.length / 4).toLocaleString()} tokens\n </p>\n {error || buildError ? <p role=\"alert\">{error ?? buildError}</p> : null}\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"ghost\"\n disabled={busy}\n onClick={onClose}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n disabled={busy || !prepared || Boolean(buildError)}\n onClick={async () => {\n if (!prepared) return;\n setBusy(true);\n setError(null);\n try {\n handingOff.current = true;\n await onPrepare(structuredPayload(prepared), title);\n } catch (cause) {\n handingOff.current = false;\n setError(\n cause instanceof Error\n ? cause.message\n : \"Could not open Alchemy.\",\n );\n } finally {\n setBusy(false);\n }\n }}\n >\n {busy ? \"Preparing…\" : \"Prepare in Alchemy\"}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport type AlchemyGroomerPreset = \"everything\" | \"balanced\" | \"minimal\";\nexport const GROOMER_LEVELS: AlchemyDetail[] = [\"full\", \"compact\", \"brief\"];\nexport function applyGroomerPreset(\n preset: AlchemyGroomerPreset,\n sections: AlchemyGroomerSection[],\n): Record<string, AlchemyDetail | \"off\"> {\n return Object.fromEntries(\n sections.map((section) => [\n section.id,\n preset === \"everything\"\n ? \"full\"\n : preset === \"balanced\"\n ? \"compact\"\n : section.cuttable\n ? \"off\"\n : \"brief\",\n ]),\n );\n}\nexport function defaultGroomerSelections(\n sections: AlchemyGroomerSection[],\n): Record<string, AlchemyDetail | \"off\"> {\n return Object.fromEntries(\n sections.map((section) => [section.id, section.defaultSelection ?? \"full\"]),\n );\n}\nexport function buildGroomerPresetPayload(\n config: AlchemyGroomerConfig,\n preset: AlchemyGroomerPreset,\n): AgentPayloadInput {\n const selections = applyGroomerPreset(preset, config.sections);\n const data: Record<string, unknown> = {};\n const dropped: string[] = [];\n for (const section of config.sections) {\n const selection = selections[section.id] ?? \"full\";\n if (selection === \"off\") {\n dropped.push(section.id);\n continue;\n }\n const value = section.build(selection);\n if (value !== undefined && value !== null) data[section.id] = value;\n }\n return {\n kind: config.kind,\n location: config.location,\n description:\n preset === \"everything\"\n ? config.description\n : `${config.description} (${preset} detail)`,\n data,\n ...(config.summary !== undefined ? { summary: config.summary } : {}),\n attributes: {\n ...config.attributes,\n detail: preset,\n ...(dropped.length ? { dropped_sections: dropped.join(\",\") } : {}),\n },\n ...(config.context ? { context: config.context } : {}),\n };\n}\nexport function groomerPresetVariants(\n getConfig: () => AlchemyGroomerConfig,\n): AlchemyCopyVariant[] {\n return [\n {\n id: \"balanced\",\n label: \"Balanced\",\n hint: \"Compact sections\",\n build: () => buildGroomerPresetPayload(getConfig(), \"balanced\"),\n },\n {\n id: \"minimal\",\n label: \"Minimal\",\n hint: \"Brief sections with optional detail excluded\",\n build: () => buildGroomerPresetPayload(getConfig(), \"minimal\"),\n },\n ];\n}\n"],"mappings":";;;;AAEA,YAAYA,YAAW;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,0BAAAC;AAAA,EACA;AAAA,EACA,gBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,wBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAoBK;;;ACxCP,SAAS,YAAY;AACrB,SAAS,WAA8B;AACvC,YAAY,WAAW;;;ACJvB,SAAS,YAA6B;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAA8B;AAClD,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADsEM;AAnEC,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOT,SAAS;AAAA,QACT,aACE;AAAA;AAAA,QAEF,SACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OAAO;AAAA,QACP,MAAM;AAAA,QACN,QACE;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,SAAS;AAAA;AAAA,QAET,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA;AAAA,QAEX,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAQO,IAAM,SAAe;AAAA,EAC1B,CAAC,EAAE,WAAW,SAAS,MAAM,UAAU,OAAO,GAAG,MAAM,GAAG,QAAQ;AAChE,UAAM,YAAY,UAAU,OAAO;AACnC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,QAC1D;AAAA,QACC,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AACA,OAAO,cAAc;;;AE7BrB,YAAY,qBAAqB;AACjC,YAAY,oBAAoB;AAChC,SAAS,6BAA6B;AACtC,YAAYC,YAAW;;;ACpChB,IAAM,iBAAiB;AAGvB,IAAM,gBAAgB;AAiCtB,IAAM,sBAAsB;AAO5B,IAAM,gBAAgB;AAGtB,IAAM,eAAe;AAAA,EAC1B,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AACV;AAGO,IAAM,eAAe;AAGrB,IAAM,cAAc;AAOpB,IAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG,OAAO,OAAO,YAAY;AAAA,EAC7B;AAAA,EACA;AACF;;;AC7DM,gBAAAC,MAmCF,YAnCE;AAlBN,SAAS,YAAY,OAAsD;AACzE,SAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,GAAG;AAAA,EACL;AACF;AA+GO,SAAS,MAAM,OAAkB;AACtC,SACE,qBAAC,SAAK,GAAG,YAAY,KAAK,GACxB;AAAA,oBAAAC,KAAC,UAAK,GAAE,cAAa;AAAA,IACrB,gBAAAA,KAAC,UAAK,GAAE,cAAa;AAAA,KACvB;AAEJ;AAMA,SAAS,WAAW,OAAsD;AACxE,SAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,eAAe;AAAA,IACf,GAAG;AAAA,EACL;AACF;AAiBO,SAAS,UAAU,OAAkB;AAC1C,SACE,gBAAAC,KAAC,SAAK,GAAG,WAAW,KAAK,GACvB,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,GAAE;AAAA,MACF,MAAK;AAAA,MACL,UAAS;AAAA,MACT,UAAS;AAAA;AAAA,EACX,GACF;AAEJ;AAsBO,SAAS,cAAc,OAAkB;AAC9C,SACE,gBAAAC,KAAC,SAAK,GAAG,WAAW,KAAK,GACvB,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,GAAE;AAAA,MACF,MAAK;AAAA;AAAA,EACP,GACF;AAEJ;AAGO,SAAS,sBAAsB,OAAkB;AACtD,SACE,gBAAAA,KAAC,SAAK,GAAG,WAAW,KAAK,GACvB,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,GAAE;AAAA,MACF,MAAK;AAAA,MACL,UAAS;AAAA,MACT,UAAS;AAAA;AAAA,EACX,GACF;AAEJ;;;AC3NA,YAAYC,YAAW;AAkBnB,gBAAAC,YAAA;AAfJ,IAAM,eAAe,uBAAO,IAAI,iDAAiD;AACjF,IAAM,kBAAkB;AACxB,IAAM,yBAAyB,gBAAgB,YAAY,MAAY,qBAA8C,MAAS;AAQvH,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AACF,GAAiC;AAC/B,SACE,gBAAAA,KAAC,uBAAuB,UAAvB,EAAgC,OAAO,aAAa,QAClD,UACH;AAEJ;AAMO,SAAS,mBACd,UACyB;AACzB,QAAM,WAAiB,kBAAW,sBAAsB;AAExD,MAAI,aAAa,QAAW;AAC1B,WAAO,YAAY;AAAA,EACrB;AAEA,SAAO,YAAY;AACrB;;;AC7CA,YAAYC,YAAW;AAqBnB,gBAAAC,YAAA;AAlBJ,IAAMC,gBAAe,uBAAO,IAAI,6CAA6C;AAC7E,IAAMC,mBAAkB;AACxB,IAAM,0BAA0BA,iBAAgBD,aAAY,MAAY,qBAAuB,IAAI;AAW5F,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AACF,GAAkC;AAChC,SACE,gBAAAD,KAAC,wBAAwB,UAAxB,EAAiC,OAAO,OACtC,UACH;AAEJ;AAGO,SAAS,sBAA+B;AAC7C,SAAa,kBAAW,uBAAuB;AACjD;;;AClBA,YAAYG,YAAW;AAGhB,IAAM,oBAAoB;AAE1B,SAAS,cAAuB;AACrC,QAAM,CAAC,UAAU,WAAW,IAAU,gBAAS,KAAK;AACpD,QAAM,CAAC,YAAY,aAAa,IAAU,gBAAS,KAAK;AAExD,EAAM,iBAAU,MAAM;AACpB,kBAAc,IAAI;AAElB,UAAM,WAAW,MAAM;AACrB,kBAAY,OAAO,aAAa,iBAAiB;AAAA,IACnD;AACA,aAAS;AAQT,QAAI,OAAO,OAAO,eAAe,YAAY;AAC3C,aAAO;AAAA,IACT;AAEA,UAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,CAAC,KAAK;AACvE,QAAI,iBAAiB,UAAU,QAAQ;AACvC,WAAO,MAAM,IAAI,oBAAoB,UAAU,QAAQ;AAAA,EACzD,GAAG,CAAC,CAAC;AAEL,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ALwBM,gBAAAC,MAoLM,QAAAC,aApLN;AAPN,IAAM,SAAS,CAAC;AAAA,EACd;AAAA,EACA,GAAG;AACL,MAAmE;AACjE,QAAM,QAAQ,MAAM,SAAS;AAC7B,SACE,gBAAAD,KAAC,4BAAyB,OACxB,0BAAAA,KAAiB,sBAAhB,EAAsB,GAAG,OAAO,OAC9B,UACH,GACF;AAEJ;AACA,OAAO,cAAc;AAUrB,IAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA,GAAG;AACL,MAMM;AACJ,QAAM,WAAW,mBAAmB,SAAS;AAC7C,SAAO,gBAAAE,KAAiB,wBAAhB,EAAuB,WAAW,YAAY,MAAO,GAAG,OAAO;AACzE;AACA,aAAa,cAAc;AAG3B,IAAMC,gBAAe,uBAAO,IAAI,iDAAiD;AACjF,IAAMC,mBAAkB;AACxB,IAAM,yBAAyBA,iBAAgBD,aAAY,MAAY,qBAAkC,IAAI;AAM7G,IAAM,gBAAsB,kBAG1B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAE;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW;AAAA;AAAA;AAAA,MAGT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,cAAc,cAA8B,wBAAQ;AAMpD,IAAM,yBAA+B,kBAGnC,CAAC,OAAO,QAAQ;AAChB,QAAM,UAAU,oBAAoB;AACpC,SACE,gBAAAA;AAAA,IAAiB;AAAA,IAAhB;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,cAAY,WAAW;AAAA;AAAA,EACzB;AAEJ,CAAC;AACD,uBAAuB,cAAc;AAErC,IAAM,yBACJ;AAEF,IAAM,8BACJ;AAGF,IAAM,+BACJ;AAkBF,IAAM,gBAAsB;AAAA,EAI1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,WAAW,YAAY;AAC7B,UAAM,UAAU,oBAAoB;AAGpC,UAAM,oBAAoB,mBAAmB,SAAS;AACtD,UAAM,UAAU,eAAe;AAC/B,UAAM,CAAC,aAAa,cAAc,IAAU;AAAA,MAC1C;AAAA,IACF;AAEA,UAAM,YAAkB;AAAA,MACtB,CAAC,SAAgC;AAC/B,uBAAe,IAAI;AACnB,YAAI,OAAO,QAAQ,WAAY,KAAI,IAAI;AAAA,iBAC9B;AACP,UAAC,IAAsD,UAAU;AAAA,MACrE;AAAA,MACA,CAAC,GAAG;AAAA,IACN;AAEA,UAAM,WACJ,sBAAsB,UAAU,WAAW,KAC3C,sBAAsB,UAA0B,qBAAK;AACvD,UAAM,iBACJ,sBAAsB,UAAU,iBAAiB,KACjD,sBAAsB,UAA0B,2BAAW;AAE7D,WACE,gBAAAC,MAAC,gBAAa,WACX;AAAA,gBAAU,gBAAAD,KAAC,iBAAc,IAAK;AAAA,MAC/B,gBAAAC;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,aAAU;AAAA,UACV,WAAW;AAAA,YACT,UAAU,8BAA8B;AAAA,YACxC,aAAa,UAAU,sBAAsB;AAAA,YAC7C;AAAA,YACA,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,YAKX,CAAC,WAAW;AAAA,UACd;AAAA,UACC,GAAI,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,OAAU;AAAA,UAC1D,GAAG;AAAA,UAEH;AAAA,uBAAW,OACV,gBAAAD,KAAgB,qBAAf,EACC,0BAAAA,KAAiB,uBAAhB,EAAsB,oBAAM,GAC/B;AAAA,YAEF,gBAAAA,KAAC,uBAAuB,UAAvB,EAAgC,OAAO,aACtC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,eAAe,qBAAqB;AAAA,gBAE9C;AAAA;AAAA,YACH,GACF;AAAA,YACC,kBACC,gBAAAC;AAAA,cAAiB;AAAA,cAAhB;AAAA,gBACC,aAAU;AAAA,gBACV,cAAW;AAAA,gBACX,WAAU;AAAA,gBAEV;AAAA,kCAAAD,KAAC,SAAM,WAAU,WAAU;AAAA,kBAC3B,gBAAAA,KAAC,UAAK,WAAU,WAAU,mBAAK;AAAA;AAAA;AAAA,YACjC,IACE;AAAA;AAAA;AAAA,MACN;AAAA,OACF;AAAA,EAEJ;AACF;AACA,cAAc,cAA8B,wBAAQ;AAEpD,IAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA,GAAG;AACL,MACE,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC,aAAU;AAAA,IACV,WAAW;AAAA;AAAA;AAAA,MAGT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,aAAa,cAAc;AAE3B,IAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA,GAAG;AACL,MACE,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC,aAAU;AAAA,IACV,WAAW;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,aAAa,cAAc;AAE3B,IAAM,cAAoB,kBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW,GAAG,qDAAqD,SAAS;AAAA,IAC3E,GAAG;AAAA;AACN,CACD;AACD,YAAY,cAA8B,sBAAM;AAEhD,IAAM,oBAA0B,kBAG9B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAiB;AAAA,EAAhB;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,kBAAkB,cAA8B,4BAAY;;;AMtU5D,YAAY,2BAA2B;AACvC,YAAYE,YAAW;AA8BrB,SAWE,OAAAC,MAXF,QAAAC,aAAA;AAvBF,IAAM,eAAqC;AAC3C,IAAM,sBAA4C;AAMlD,IAAM,qBACJ;AAGF,IAAM,kBACJ;AAEF,IAAM,4BACJ;AAEF,IAAM,yBAA+B,kBAKnC,CAAC,EAAE,WAAW,OAAO,UAAU,GAAG,MAAM,GAAG,QAC3C,gBAAAC;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW;AAAA,MACT;AAAA,MACA,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACC,GAAG;AAAA,IAEH;AAAA;AAAA,MACD,gBAAAC,KAAC,yBAAsB,WAAU,mBAAkB;AAAA;AAAA;AACrD,CACD;AACD,uBAAuB,cACC,iCAAW;AAEnC,IAAM,yBAA+B,kBAGnC,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW,GAAG,oBAAoB,aAAa,eAAe,SAAS;AAAA,IACtE,GAAG;AAAA;AACN,CACD;AACD,uBAAuB,cACC,iCAAW;AAQnC,IAAM,sBAA4B,kBAGhC,CAAC,EAAE,WAAW,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ;AAC7D,QAAM,kBAAkB,mBAAmB,SAAS;AACpD,SACE,gBAAAA,KAAuB,8BAAtB,EAA6B,WAAW,iBACvC,0BAAAA;AAAA,IAAuB;AAAA,IAAtB;AAAA,MACC;AAAA,MACA,aAAU;AAAA,MACV;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN,GACF;AAEJ,CAAC;AACD,oBAAoB,cAAoC,8BAAQ;AAEhE,IAAM,mBAAyB,kBAK7B,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,GAAG,QACjC,gBAAAA;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW,GAAG,iBAAiB,SAAS,QAAQ,SAAS;AAAA,IACxD,GAAG;AAAA;AACN,CACD;AACD,iBAAiB,cAAoC,2BAAK;AAE1D,IAAM,2BAAiC,kBAGrC,CAAC,EAAE,WAAW,UAAU,GAAG,MAAM,GAAG,QACpC,gBAAAD;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW,GAAG,2BAA2B,SAAS;AAAA,IACjD,GAAG;AAAA,IAEJ;AAAA,sBAAAC,KAAC,UAAK,WAAU,gEACd,0BAAAA,KAAuB,qCAAtB,EACC,0BAAAA,KAAC,aAAU,WAAU,WAAU,GACjC,GACF;AAAA,MACC;AAAA;AAAA;AACH,CACD;AACD,yBAAyB,cACD,mCAAa;AAErC,IAAM,wBAA8B,kBAGlC,CAAC,EAAE,WAAW,UAAU,GAAG,MAAM,GAAG,QACpC,gBAAAD;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW,GAAG,2BAA2B,SAAS;AAAA,IACjD,GAAG;AAAA,IAEJ;AAAA,sBAAAC,KAAC,UAAK,WAAU,gEACd,0BAAAA,KAAuB,qCAAtB,EACC,0BAAAA,KAAC,iBAAc,WAAU,wBAAuB,GAClD,GACF;AAAA,MACC;AAAA;AAAA;AACH,CACD;AACD,sBAAsB,cAAoC,gCAAU;AAEpE,IAAM,oBAA0B,kBAK9B,CAAC,EAAE,WAAW,OAAO,GAAG,MAAM,GAAG,QACjC,gBAAAA;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW,GAAG,qCAAqC,SAAS,QAAQ,SAAS;AAAA,IAC5E,GAAG;AAAA;AACN,CACD;AACD,kBAAkB,cAAoC,4BAAM;AAE5D,IAAM,wBAA8B,kBAGlC,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B,gBAAAA;AAAA,EAAuB;AAAA,EAAtB;AAAA,IACC;AAAA,IACA,aAAU;AAAA,IACV,WAAW,GAAG,4BAA4B,SAAS;AAAA,IAClD,GAAG;AAAA;AACN,CACD;AACD,sBAAsB,cAAoC,gCAAU;AAEpE,IAAM,uBAAuB,CAAC;AAAA,EAC5B;AAAA,EACA,GAAG;AACL,MACE,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC,aAAU;AAAA,IACV,WAAW,GAAG,8CAA8C,SAAS;AAAA,IACpE,GAAG;AAAA;AACN;AAEF,qBAAqB,cAAc;;;ACnN5B,IAAM,oBAAoB;;;ACCjC,YAAYC,YAAW;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAMK;AAsMH,SA+PA,UA/PA,OAAAC,MA+PA,QAAAC,aA/PA;AAlDJ,IAAM,UAAU,CAAK,UACnB,OAAO,UAAU,aAAc,MAAkB,IAAI;AACvD,IAAM,YAAY,CAAC,WAAgD;AAAA,EACjE,MAAM;AAAA,EACN,MAAM,OAAO,UAAU,WAAW,QAAQ,kBAAkB,KAAK;AACnE;AACA,IAAM,oBAAoB,CAAC,UAA+C;AACxE,MAAI,OAAO,UAAU,SAAU,QAAO,EAAE,MAAM,YAAY,MAAM,MAAM;AACtE,QAAM,QAAQ,CAAC,WACb,OAAO;AAAA,IACL,OAAO,QAAQ,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS;AAAA,EACxE;AACF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,sBAAsB;AAAA,MAC3B,MAAM,MAAM;AAAA,MACZ,UAAU,MAAM;AAAA,MAChB,aAAa,MAAM;AAAA,MACnB,MAAM,MAAM;AAAA,MACZ,GAAI,MAAM,YAAY,SAAY,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,MAChE,YAAY,MAAM,MAAM,UAAU;AAAA,MAClC,SAAS,MAAM,MAAM,OAAO;AAAA,IAC9B,CAAC;AAAA,EACH;AACF;AACA,IAAM,aAAa,CAAC,aAAsC;AAAA,EACxD,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,WAAW,CAAC;AAAA,EACZ;AACF;AACA,IAAM,YAAY,CAChB,IACA,OACA,WACY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,WAAO,eAAe;AACtB,UAAM,UAAU,MAAM,MAAM;AAC5B,WAAO,eAAe;AACtB,WAAO,aAAa,SAAS,EAAE,UAAU,IAAI,MAAM,CAAC;AAAA,EACtD;AACF;AAGO,SAAS,cAAc,OAA2B;AACvD,QAAM,YAAY,+BAA+B;AACjD,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MAKE,GAAG;AAAA;AAAA,IAJC,KAAK,UAAU;AAAA,MAClB,UAAU,eAAe;AAAA,MACzB,MAAM,YAAY,MAAM;AAAA,IAC1B,CAAC;AAAA,EAEH;AAEJ;AAEA,SAAS,qBAAqB,OAA2B;AACvD,QAAM,WAAiB,aAAM;AAC7B,QAAM,aAAmB,cAAkC,IAAI;AAC/D,QAAM,eAAe,+BAA+B;AACpD,QAAM,YAAY,aAAa,aAAa,uBAAuB;AACnE,QAAM,CAAC,OAAO,QAAQ,IAAU,gBAAoC,IAAI;AACxE,QAAM,CAAC,eAAe,gBAAgB,IAAU,gBAGtC,IAAI;AACd,QAAM,cAAc,CAAC,MAAM,MAAM,SAAS,MAAM;AAChD,QAAM,YAAY,CAAC,MAAM,MAAM,SAAS,IAAI;AAC5C,QAAM,gBAAgB,CAAC,MAAM,MAAM,SAAS,QAAQ;AACpD,QAAM,OAAO,CACX,QACA,OACA,QAAQ,MAAM,UAEd;AAAA,IACE,GAAG,MAAM,YAAY,GAAG,QAAQ,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM;AAAA,IAC3D;AAAA,IACA;AAAA,EACF;AACF,QAAM,QACJ,eAAe,MAAM,UAAU,SAC3B,KAAK,SAAS,OAAO,EAAE,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAM,EAAE,EAAE,IACnE;AACN,QAAM,gBACJ,eAAe,MAAM,UAAU,SAC3B,KAAK,kBAAkB,OAAO;AAAA,IAC5B,MAAM;AAAA,IACN,MAAM,QAAQ,MAAM,KAAM;AAAA,EAC5B,EAAE,IACF;AACN,QAAM,OACJ,aAAa,MAAM,SAAS,SACxB,KAAK,QAAQ,OAAO;AAAA,IAClB,MAAM;AAAA,IACN,OAAO,sBAAsB,QAAQ,MAAM,IAAK,CAAC;AAAA,EACnD,EAAE,IACF;AACN,QAAM,QACJ,aAAa,MAAM,UAAU,SACzB,KAAK,SAAS,MAAM,UAAU,QAAQ,MAAM,KAAM,CAAC,CAAC,IACpD;AACN,QAAM,kBACJ,aAAa,MAAM,UAAU,SACzB,KAAK,oBAAoB,MAAM,kBAAkB,QAAQ,MAAM,KAAM,CAAC,CAAC,IACvE;AACN,QAAM,SACH,iBAAiB,MAAM,kBAAkB,YAAY,MAAM,QAAQ,YAChE,KAAK,QAAQ,MAAM;AACjB,UAAM,QAAQ,sBAAsB,MAAM,OAAQ,UAAW,CAAC;AAC9D,QACE,CAAC,MAAM,QAAQ,KAAK,KACpB,MAAM;AAAA,MACJ,CAAC,QACC,QAAQ,QAAQ,OAAO,QAAQ,YAAY,MAAM,QAAQ,GAAG;AAAA,IAChE;AAEA,YAAM,IAAI,MAAM,kCAAkC;AACpD,UAAM,OAAO;AAGb,UAAM,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,QAAQ,CAAC,QAAQ,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC;AACjE,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,SAAS,KAAK,IAAI,CAAC,SAAS;AAAA,QAC1B,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,MAAM,IAAI,IAAI,QAAQ,MAAM,IAAI,EAAE,QAAQ,OAAO,IAAI,CAAC;AAAA,QACtD,SAAS;AAAA,MACX,EAAE;AAAA,IACJ;AAAA,EACF,CAAC,IACD;AACN,QAAM,kBAAkB,aACnB,MAAM,cAAc,CAAC,GACnB;AAAA,IACC,CAAC,YAAY,QAAQ,SAAS,CAAC,QAAQ,YAAY,CAAC,QAAQ;AAAA,EAC9D,EACC,IAAI,CAAC,aAAa;AAAA,IACjB,GAAG;AAAA,IACH,WAAW,QAAQ;AAAA,IACnB,QAAQ;AAAA,MACN,WAAW,QAAQ,EAAE;AAAA,MACrB,YAAY,UAAU,MAAM,QAAQ,MAAO,CAAC;AAAA,MAC5C,QAAQ;AAAA,IACV;AAAA,EACF,EAAE,IACJ,CAAC;AACL,QAAM,WAAW,QACb;AAAA,IACE;AAAA,MACE,IAAI,MAAM,cAAc,MAAM;AAAA,MAC9B,OAAO,MAAM,cAAc,SAAS;AAAA,MACpC,QAAQ;AAAA,MACR,WAAW,MAAM,cAAc,SAAS;AAAA,MACxC,GAAI,MAAM,cAAc,OACpB,EAAE,MAAM,MAAM,aAAa,KAAK,IAChC,CAAC;AAAA,IACP;AAAA,EACF,IACA,CAAC;AACL,QAAM,WACJ,MAAM,cAAc,aAAa,SAC7B,CAAC,GAAG,iBAAiB,GAAG,QAAQ,IAChC,CAAC,GAAG,UAAU,GAAG,eAAe;AACtC,QAAM,UAAqD,CAAC;AAC5D,MAAI;AACF,eAAW,WAAW,MAAM,cAAc,CAAC,GAAG;AAC5C,UAAI,CAAC,QAAQ,YAAY,CAAC,QAAQ,MAAO;AACzC,cAAQ,KAAK;AAAA,QACX,GAAG;AAAA,QACH,IAAI,kBAAkB,QAAQ,EAAE;AAAA,QAChC,OAAO,QAAQ;AAAA,QACf,UAAU,MAAM;AAAA,QAChB,KAAK,YAAY;AACf,cAAI,QAAQ,SAAU,OAAM,QAAQ,SAAS;AAAA,cACxC,UAAS,OAAO;AACrB,iBAAO,WAAW,UAAU,QAAQ,KAAK,EAAE;AAAA,QAC7C;AAAA,MACF,CAAC;AAAA,IACH;AACF,MAAI,aAAa,MAAM;AACrB,YAAQ,KAAK;AAAA,MACX,IAAI;AAAA,MACJ,OAAO,MAAM,SAAS,SAAS;AAAA,MAC/B,GAAI,MAAM,SAAS,OAAO,EAAE,MAAM,MAAM,SAAS,KAAK,IAAI,CAAC;AAAA,MAC3D,UAAU,MAAM;AAAA,MAChB,KAAK,YAAY;AACf,yBAAiB,EAAE,QAAQ,MAAM,SAAU,CAAC;AAC5C,eAAO,WAAW,uBAAuB;AAAA,MAC3C;AAAA,IACF,CAAC;AACH,MAAI,aAAa,MAAM;AACrB,YAAQ,KAAK;AAAA,MACX,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,UAAU,MAAM;AAAA,MAChB,KAAK,YAAY;AACf,yBAAiB,EAAE,SAAS,MAAM,QAAS,EAAE,CAAC;AAC9C,eAAO,WAAW,wBAAwB;AAAA,MAC5C;AAAA,IACF,CAAC;AACH,MAAI;AACF,eAAW,QAAQ,MAAM,QAAQ,SAAS,CAAC;AACzC,cAAQ,KAAK;AAAA,QACX,IAAI,UAAU,KAAK,EAAE;AAAA,QACrB,OAAO,KAAK;AAAA,QACZ,UAAU,MAAM;AAAA,QAChB,GAAI,KAAK,SAAS,CAAC,KAAK,WACpB;AAAA,UACE,QAAQ;AAAA,YACN,UAAU,KAAK,EAAE;AAAA,YACjB,YAAY;AACV,oBAAM,OAAO,KAAK,MAAO;AACzB,oBAAM,QAAQ,IAAI;AAAA,gBAChB,MAAM,IAAI,KAAK,CAAC,KAAK,OAAO,GAAG;AAAA,kBAC7B,MAAM,KAAK;AAAA,gBACb,CAAC,EAAE,YAAY;AAAA,cACjB;AACA,qBAAO;AAAA,gBACL,MAAM;AAAA,gBACN,QAAQ;AAAA,gBACR,OAAO;AAAA,kBACL,OAAO,MAAM,KAAK,KAAK;AAAA,kBACvB,MAAM,KAAK;AAAA,kBACX,WAAW,KAAK;AAAA,gBAClB;AAAA,cACF;AAAA,YACF;AAAA,YACA,KAAK;AAAA,UACP;AAAA,QACF,IACA,CAAC;AAAA,QACL,KAAK,OAAO,EAAE,UAAU,OAAO,OAAO,MAAM;AAC1C,cAAI,KAAK,UAAU;AACjB,kBAAM,KAAK,SAAS;AACpB,mBAAO,WAAW,UAAU,KAAK,KAAK,EAAE;AAAA,UAC1C;AACA,gBAAM,QACJ,MAAM,QAAQ,SAAS,eAAe,MAAM,QAAQ,QAAQ;AAC9D,cACE,CAAC,SACD,MAAM,QAAQ,KAAK,KACnB,OAAO,UAAU,YACjB,CAAC,MAAM,QAAQ,MAAM,KAAK,KAC1B,OAAO,MAAM,SAAS,YACtB,OAAO,MAAM,cAAc,YAC3B,MAAM,MAAM;AAAA,YACV,CAAC,SACC,OAAO,SAAS,YAChB,CAAC,OAAO,UAAU,IAAI,KACtB,OAAO,KACP,OAAO;AAAA,UACX;AAEA,kBAAM,IAAI,MAAM,GAAG,KAAK,KAAK,gCAAgC;AAC/D,cACE,MAAM,UAAU,KAAK,CAAC,aAAa,SAAS,WAAW,WAAW;AAElE,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AACF,gBAAM,QAAQ,IAAI,WAAW,MAAM,KAAiB;AACpD,gBAAM,WAAW,GACf,MAAM,MACH,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,UAAU,EAAE,KAAK,QAC9B,IAAI,MAAM,UAAU,QAAQ,mBAAmB,EAAE,KAAK,KAAK;AAC3D,iBAAO,UAAU;AAAA,YACf,qBAAqB;AAAA,cACnB,YAAY,SAAS;AAAA,cACrB,eAAe,MAAM;AAAA,cACrB,QAAQ,UAAU,KAAK,EAAE;AAAA,cACzB,WAAW;AAAA,cACX,MAAM,EAAE,UAAU,MAAM,MAAM,MAAM,MAAM;AAAA,cAC1C,WAAW,CAAC,GAAG,MAAM,SAAS;AAAA,YAChC,CAAC;AAAA,YACD;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AACL,MAAI,iBAAiB,SAAS,MAAM;AAClC,YAAQ,KAAK;AAAA,MACX,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU,MAAM;AAAA,MAChB,KAAK,OAAO,EAAE,MAAM,MAAM;AACxB,YAAI,MAAM,QAAQ,SAAS;AACzB,gBAAM,IAAI,MAAM,uCAAuC;AACzD,eAAO,MAAM,YAAa,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,MAC3D;AAAA,IACF,CAAC;AACH,QAAM,UACH,MAAM,kBAAkB,UAAU,QAAQ,WAAc,QAAQ,SAAS,mBAAmB,SAAS,gBAAgB,CAAC,GAAG;AAC5H,MAAI,CAAC,UAAU,CAAC,QAAQ,OAAQ,QAAO;AAEvC,QAAM,SACJ,UAAU,KAAK,WAAW,OAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,MAAM,EAAE;AACvE,SACE,gBAAAC,MAAA,YACE;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,OAAO,MAAM;AAAA,QACb;AAAA,QACA;AAAA,QACA,MAAM;AAAA,UACJ,GAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAe,IAAI,CAAC;AAAA,UACnD,GAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAkB,IAAI,CAAC;AAAA,UACpD,GAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,UAAmB,IAAI,CAAC;AAAA,QAC3D;AAAA,QACA,eAAe;AAAA,UACb,GAAI,QACA,EAAE,OAAO,OAAO,UAAU,eAAgB,MAAM,cAAe,IAC/D,CAAC;AAAA,UACL,GAAI,OAAO,EAAE,MAAM,gBAAgB,KAAK,IAAI,CAAC;AAAA,UAC7C,GAAI,SAAS,gBAAgB,EAAE,KAAK,OAAO,KAAK,MAAM,IAAI,CAAC;AAAA,QAC7D;AAAA,QACC,GAAI,MAAM,aAAa,SAAY,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;AAAA,QACpE,WAAW;AAAA,UACT,MAAM;AAAA,UACN,MAAM,SAAS,QAAQ;AAAA,UACvB,MAAM,SAAS,QAAQ;AAAA,QACzB;AAAA,QACC,GAAI,MAAM,oBAAoB,SAC3B,EAAE,iBAAiB,MAAM,gBAAgB,IACzC,CAAC;AAAA;AAAA,IACP;AAAA,IACC,OAAO,QAAQ;AAAA,MACd,MAAM;AAAA,MACN,cAAc,CAAC,SAAS;AACtB,YAAI,CAAC,KAAM,UAAS,IAAI;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,IACA,gBACC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,cAAc,MAAM,WAAW,SAAS,aAAa;AAAA,QAErD;AAAA,QACA,SAAS,MAAM,iBAAiB,IAAI;AAAA,QACpC,WAAW,OAAO,SAAS,UAAU;AACnC,cAAI,CAAC,WAAW;AACd,kBAAM,IAAI,MAAM,+BAA+B;AACjD,gBAAM,WAAW,QAAQ,QAAQ,SAAS;AAAA,YACxC;AAAA,YACA,IAAI,GAAG,QAAQ,eAAe,OAAO,WAAW,CAAC;AAAA,UACnD,CAAC;AACD,2BAAiB,IAAI;AAAA,QACvB;AAAA;AAAA,MAXK,GAAG,QAAQ;AAAA,IAYlB,IACE;AAAA,KACN;AAEJ;AAEA,SAAS,oBAAoB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQG;AACD,QAAM,SAAS,cAAc;AAC7B,QAAM,aAAmB,cAAO,KAAK;AACrC,QAAM,UAAU,cAAc;AAC9B,QAAM,CAAC,QAAQ,SAAS,IAAU;AAAA,IAA8B,MAC9D,OAAO;AAAA,MACL,QAAQ,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,KAAK,OAAO,OAAO,CAAC,KAAK,CAAC;AAAA,IACpE;AAAA,EACF;AACA,QAAM,CAAC,UAAU,WAAW,IAAU;AAAA,IAEpC,MACA,OAAO;AAAA,MACL,SAAS,SAAS,IAAI,CAAC,YAAY;AAAA,QACjC,QAAQ;AAAA,QACR,QAAQ,oBAAoB;AAAA,MAC9B,CAAC,KAAK,CAAC;AAAA,IACT;AAAA,EACF;AACA,QAAM,CAAC,OAAO,QAAQ,IAAU,gBAAwB,IAAI;AAC5D,QAAM,CAAC,MAAM,OAAO,IAAU,gBAAS,KAAK;AAC5C,QAAM,QAAQ,QAAQ,eAAe,SAAS,SAAS;AACvD,MAAI,WAAqC;AACzC,MAAI,aAA4B;AAChC,MAAI,OAAO;AACX,MAAI;AACF,QAAI,QAAQ;AACV,YAAM,SAAS,OAAO,MAAM,MAAM;AAClC,iBAAW,OAAO,KAAK,OAAO,MAAM,QAAQ,OAAO,IAAI;AAAA,IACzD,WAAW,SAAS;AAClB,YAAM,OAAgC,CAAC;AACvC,YAAM,UAAoB,CAAC;AAC3B,iBAAW,WAAW,QAAQ,UAAU;AACtC,cAAM,QAAQ,SAAS,QAAQ,EAAE,KAAK;AACtC,YAAI,UAAU,MAAO,SAAQ,KAAK,QAAQ,EAAE;AAAA,aACvC;AACH,gBAAM,QAAQ,QAAQ,MAAM,KAAK;AACjC,cAAI,UAAU,UAAa,UAAU,KAAM,MAAK,QAAQ,EAAE,IAAI;AAAA,QAChE;AAAA,MACF;AACA,iBAAW;AAAA,QACT,MAAM,QAAQ;AAAA,QACd,UAAU,QAAQ;AAAA,QAClB,aAAa,QAAQ;AAAA,QACrB;AAAA,QACA,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,QACtD,YAAY;AAAA,UACV,GAAG,QAAQ;AAAA,UACX,kBAAkB,QAAQ,KAAK,GAAG;AAAA,QACpC;AAAA,QACA,GAAI,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,MACxD;AAAA,IACF;AACA,WAAO,WAAW,kBAAkB,QAAQ,IAAI;AAAA,EAClD,SAAS,OAAO;AACd,iBACE,iBAAiB,QAAQ,MAAM,UAAU;AAAA,EAC7C;AACA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAI;AAAA,MACJ,cAAc,CAAC,SAAS;AACtB,YAAI,CAAC,QAAQ,CAAC,KAAM,SAAQ;AAAA,MAC9B;AAAA,MAEA,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC,kBAAkB,CAAC,UAAU;AAC3B,kBAAM,eAAe;AACrB,gBAAI,CAAC,WAAW,QAAS,cAAa;AAAA,UACxC;AAAA,UACA,WAAU;AAAA,UAEV;AAAA,4BAAAA,MAAC,gBACC;AAAA,8BAAAD,KAAC,eAAa,iBAAM;AAAA,cACpB,gBAAAA,KAAC,qBACE,kBAAQ,qBACP,0FACJ;AAAA,eACF;AAAA,YACA,gBAAAC,MAAC,SAAI,WAAU,4CACZ;AAAA,sBAAQ,QAAQ,IAAI,CAAC,WACpB,gBAAAA,MAAC,WACE;AAAA,uBAAO;AAAA,gBACP,UAAU,UAAU,OAAO,OAC1B,gBAAAD,KAAC,WAAO,iBAAO,MAAK,IAClB;AAAA,gBACH,OAAO,SAAS,WACf,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS,QAAQ,OAAO,OAAO,GAAG,CAAC;AAAA,oBACnC,UAAU,CAAC,UACT,UAAU,EAAE,GAAG,QAAQ,CAAC,OAAO,GAAG,GAAG,MAAM,OAAO,QAAQ,CAAC;AAAA;AAAA,gBAE/D,IACE,OAAO,SAAS,WAClB,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO,OAAO,OAAO,OAAO,GAAG,CAAC;AAAA,oBAChC,UAAU,CAAC,UACT,UAAU;AAAA,sBACR,GAAG;AAAA,sBACH,CAAC,OAAO,GAAG,GAAG,OAAO,MAAM,OAAO,KAAK;AAAA,oBACzC,CAAC;AAAA,oBAGF,iBAAO,QAAQ,IAAI,CAAC,WACnB,gBAAAA,KAAC,YAA0B,OAAO,OAAO,OACtC,iBAAO,SADG,OAAO,KAEpB,CACD;AAAA;AAAA,gBACH,IACE,OAAO,SAAS,WAClB,gBAAAC,MAAA,YACE;AAAA,kCAAAD;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,KAAK;AAAA,sBACL,KAAK,KAAK,IAAI,GAAG,OAAO,MAAM,SAAS,CAAC;AAAA,sBACxC,MAAM;AAAA,sBACN,OAAO,OAAO,MAAM,QAAQ,OAAO,OAAO,OAAO,GAAG,CAAC,CAAC;AAAA,sBACtD,UAAU,CAAC,UACT,UAAU;AAAA,wBACR,GAAG;AAAA,wBACH,CAAC,OAAO,GAAG,GAAG,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,CAAC;AAAA,sBACvD,CAAC;AAAA;AAAA,kBAEL;AAAA,kBACA,gBAAAA,KAAC,UAAM,iBAAO,YAAY,OAAO,OAAO,OAAO,GAAG,CAAC,CAAC,GAAE;AAAA,mBACxD,IAEA,gBAAAC,MAAA,YACE;AAAA,kCAAAD;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,KAAK,OAAO;AAAA,sBACZ,MAAM,OAAO;AAAA,sBACb,OAAO,OAAO,OAAO,OAAO,GAAG,CAAC;AAAA,sBAChC,UAAU,CAAC,UACT,UAAU;AAAA,wBACR,GAAG;AAAA,wBACH,CAAC,OAAO,GAAG,GAAG,OAAO,MAAM,OAAO,KAAK;AAAA,sBACzC,CAAC;AAAA;AAAA,kBAEL;AAAA,kBACC,OAAO,SAAS,IAAI,CAAC,WACpB,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBAEC,MAAK;AAAA,sBACL,SAAQ;AAAA,sBACR,SAAS,MACP,UAAU,EAAE,GAAG,QAAQ,CAAC,OAAO,GAAG,GAAG,OAAO,MAAM,CAAC;AAAA,sBAGpD,iBAAO;AAAA;AAAA,oBAPH,OAAO;AAAA,kBAQd,CACD;AAAA,mBACH;AAAA,mBAxEQ,OAAO,GA0EnB,CACD;AAAA,cACA,UACC,gBAAAC,MAAA,YACE;AAAA,gCAAAD,KAAC,SACG,WAAC,QAAQ,WAAW,OAAO,EAAY,IAAI,CAAC,UAC5C,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBAEC,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,SAAS,MACP;AAAA,sBACE,OAAO;AAAA,wBACL,QAAQ,SAAS,IAAI,CAAC,YAAY;AAAA,0BAChC,QAAQ;AAAA,0BACR,UAAU,WAAW,QAAQ,WACzB,QACA;AAAA,wBACN,CAAC;AAAA,sBACH;AAAA,oBACF;AAAA,oBAGD;AAAA;AAAA,kBAhBI;AAAA,gBAiBP,CACD,GACH;AAAA,gBACC,QAAQ,SAAS,IAAI,CAAC,YACrB,gBAAAC,MAAC,WACE;AAAA,0BAAQ;AAAA,kBACT,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAO,SAAS,QAAQ,EAAE;AAAA,sBAC1B,UAAU,CAAC,UACT,YAAY;AAAA,wBACV,GAAG;AAAA,wBACH,CAAC,QAAQ,EAAE,GAAG,MAAM,OAAO;AAAA,sBAE7B,CAAC;AAAA,sBAGD;AAAA,yBAAC,QAAQ,WAAW,OAAO,EAAY,IAAI,CAAC,UAC5C,gBAAAD,KAAC,YAAmB,OAAO,OACxB,kBAAQ,cAAc,KAAK,KAAK,SADtB,KAEb,CACD;AAAA,wBACA,QAAQ,WACP,gBAAAA,KAAC,YAAO,OAAM,OAAM,qBAAO,IACzB;AAAA;AAAA;AAAA,kBACN;AAAA,kBACC,QAAQ,cACP,gBAAAA,KAAC,UAAM,kBAAQ,aAAY,IACzB;AAAA,qBAvBM,QAAQ,EAwBpB,CACD;AAAA,iBACH,IACE;AAAA,eACN;AAAA,YACA,gBAAAC,MAAC,OACE;AAAA,mBAAK,OAAO,eAAe;AAAA,cAAE;AAAA,cAA4B;AAAA,cACzD,KAAK,KAAK,KAAK,SAAS,CAAC,EAAE,eAAe;AAAA,cAAE;AAAA,eAC/C;AAAA,YACC,SAAS,aAAa,gBAAAD,KAAC,OAAE,MAAK,SAAS,mBAAS,YAAW,IAAO;AAAA,YACnE,gBAAAC,MAAC,gBACC;AAAA,8BAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,UAAU;AAAA,kBACV,SAAS;AAAA,kBACV;AAAA;AAAA,cAED;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU,QAAQ,CAAC,YAAY,QAAQ,UAAU;AAAA,kBACjD,SAAS,YAAY;AACnB,wBAAI,CAAC,SAAU;AACf,4BAAQ,IAAI;AACZ,6BAAS,IAAI;AACb,wBAAI;AACF,iCAAW,UAAU;AACrB,4BAAM,UAAU,kBAAkB,QAAQ,GAAG,KAAK;AAAA,oBACpD,SAAS,OAAO;AACd,iCAAW,UAAU;AACrB;AAAA,wBACE,iBAAiB,QACb,MAAM,UACN;AAAA,sBACN;AAAA,oBACF,UAAE;AACA,8BAAQ,KAAK;AAAA,oBACf;AAAA,kBACF;AAAA,kBAEC,iBAAO,oBAAe;AAAA;AAAA,cACzB;AAAA,eACF;AAAA;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAGO,IAAM,iBAAkC,CAAC,QAAQ,WAAW,OAAO;AACnE,SAAS,mBACd,QACA,UACuC;AACvC,SAAO,OAAO;AAAA,IACZ,SAAS,IAAI,CAAC,YAAY;AAAA,MACxB,QAAQ;AAAA,MACR,WAAW,eACP,SACA,WAAW,aACT,YACA,QAAQ,WACN,QACA;AAAA,IACV,CAAC;AAAA,EACH;AACF;AACO,SAAS,yBACd,UACuC;AACvC,SAAO,OAAO;AAAA,IACZ,SAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,QAAQ,oBAAoB,MAAM,CAAC;AAAA,EAC5E;AACF;AACO,SAAS,0BACd,QACA,QACmB;AACnB,QAAM,aAAa,mBAAmB,QAAQ,OAAO,QAAQ;AAC7D,QAAM,OAAgC,CAAC;AACvC,QAAM,UAAoB,CAAC;AAC3B,aAAW,WAAW,OAAO,UAAU;AACrC,UAAM,YAAY,WAAW,QAAQ,EAAE,KAAK;AAC5C,QAAI,cAAc,OAAO;AACvB,cAAQ,KAAK,QAAQ,EAAE;AACvB;AAAA,IACF;AACA,UAAM,QAAQ,QAAQ,MAAM,SAAS;AACrC,QAAI,UAAU,UAAa,UAAU,KAAM,MAAK,QAAQ,EAAE,IAAI;AAAA,EAChE;AACA,SAAO;AAAA,IACL,MAAM,OAAO;AAAA,IACb,UAAU,OAAO;AAAA,IACjB,aACE,WAAW,eACP,OAAO,cACP,GAAG,OAAO,WAAW,KAAK,MAAM;AAAA,IACtC;AAAA,IACA,GAAI,OAAO,YAAY,SAAY,EAAE,SAAS,OAAO,QAAQ,IAAI,CAAC;AAAA,IAClE,YAAY;AAAA,MACV,GAAG,OAAO;AAAA,MACV,QAAQ;AAAA,MACR,GAAI,QAAQ,SAAS,EAAE,kBAAkB,QAAQ,KAAK,GAAG,EAAE,IAAI,CAAC;AAAA,IAClE;AAAA,IACA,GAAI,OAAO,UAAU,EAAE,SAAS,OAAO,QAAQ,IAAI,CAAC;AAAA,EACtD;AACF;AACO,SAAS,sBACd,WACsB;AACtB,SAAO;AAAA,IACL;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO,MAAM,0BAA0B,UAAU,GAAG,UAAU;AAAA,IAChE;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO,MAAM,0BAA0B,UAAU,GAAG,SAAS;AAAA,IAC/D;AAAA,EACF;AACF;;;AXlzBS,SAoCA,YAAAE,WApCwJ,OAAAC,MAAxJ,QAAAC,aAAA;AADF,SAAS,aAAa,OAA2C;AACtE,SAAO,gBAAAA,MAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,eAAY,QAAQ,GAAG,OAAO;AAAA,oBAAAD,KAAC,UAAK,GAAE,qBAAmB;AAAA,IAAE,gBAAAA,KAAC,UAAK,GAAE,oBAAkB;AAAA,IAAE,gBAAAA,KAAC,UAAK,GAAE,sEAAoE;AAAA,KAAE;AACxS;AAUA,IAAM,oBAA0B,qBAA2C,CAAC,CAAC;AACtE,SAAS,oCAAoC,EAAE,OAAO,SAAS,GAAsE;AAC1I,SAAO,gBAAAA,KAAC,kBAAkB,UAAlB,EAA2B,OAAe,UAAS;AAC7D;AACO,IAAM,iCAAiC,MAAY,kBAAW,iBAAiB;AACtF,IAAM,iBAAuB,qBAAoC,IAAI;AAC9D,SAAS,+BAA+B,EAAE,QAAQ,SAAS,GAAyD;AACzH,SAAO,gBAAAA,KAAC,eAAe,UAAf,EAAwB,OAAO,QAAS,UAAS;AAC3D;AACO,IAAM,4BAA4B,MAAY,kBAAW,cAAc;AAe9E,SAAS,iBAAiB,EAAE,OAAO,MAAM,MAAM,KAAK,GAAiD;AACnG,SAAO,gBAAAC,MAAAF,WAAA,EAAG;AAAA,WAAO,gBAAAC,KAAC,QAAK,WAAU,2BAAyB,IAAK;AAAA,IAAK,gBAAAC,MAAC,UAAM;AAAA;AAAA,MAAO,OAAO,gBAAAD,KAAC,WAAM,WAAU,2BAA2B,gBAAK,IAAW;AAAA,OAAK;AAAA,KAAO;AACnK;AA2BA,IAAM,QAAuC,EAAE,OAAO,cAAc,UAAU,YAAY,MAAM,aAAa,MAAM,QAAQ,gBAAgB,gBAAgB,KAAK,OAAO,KAAK,iBAAiB,MAAM,iBAAiB;AACpN,IAAM,YAAY,OAAO,OAAQ,OAAO,KAAK,KAAK,EAAsB,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC7F,IAAM,SAA+B,CAAC,SAAS,YAAY,QAAQ,QAAQ,gBAAgB,OAAO,KAAK;AACvG,IAAM,YAA6B,CAAC,GAAG,QAAQ,MAAM;AACrD,IAAM,iBAAqF,CAAC;AAC5F,IAAM,cAA6C,EAAE,QAAQ,gBAAgB,KAAK,YAAY,UAAU,iBAAiB,MAAM,gBAAgB,QAAQ,eAAe,gBAAgB,oBAAoB;AAC1M,IAAM,cAAc,CAAC,UAAkB,MAAM,kBAAkB,EAAE,QAAQ,eAAe,GAAG,EAAE,QAAQ,YAAY,EAAE,KAAK;AACxH,IAAM,iBAAiB,CAAC,SAAiB,KAAK,KAAK,KAAK,SAAS,CAAC;AAClE,IAAM,eAAe,CAAC,OAAgB,aAAqB,iBAAiB,QAAQ,MAAM,UAAU;AACpG,IAAM,UAAU,CAAC,UAAmB,iBAAiB,gBAAgB,MAAM,SAAS;AACpF,IAAM,kBAAkB,CAAC,QAAuB,YAAqB,CAAC,CAAC,OAAO,OAAO,MAAM,EAAE,SAAS,MAAM,KAAK,QAAQ,SAAS;AAClI,IAAM,iBAAiB,CAAC,WAA4B;AAClD,MAAI,OAAO,WAAW,WAAW;AAC/B,UAAM,UAAU;AAChB,WAAO,QAAQ,cAAc,WAAW,QAAQ,WAAW,qBAAqB,QAAQ,cAAc,qBAAqB,qBAAqB,QAAQ,WAAW;AAAA,EACrK;AACA,SAAO,OAAO,WAAW,aAAa,yBAAyB,OAAO,MAAM,KAAK,OAAO,WAAW,cAAc,cAAc,OAAO;AACxI;AACA,IAAM,cAAc,oBAAI,QAAwB;AAChD,IAAI,iBAAiB;AACrB,SAAS,iBAAiB,UAA+D;AACvF,MAAI,CAAC,SAAU,QAAO;AACtB,MAAI,gBAAgB,SAAU,QAAO,WAAW,SAAS,UAAU;AACnE,MAAI,QAAQ,SAAU,QAAO,UAAU,SAAS,EAAE;AAClD,MAAI,KAAK,YAAY,IAAI,QAAQ;AACjC,MAAI,OAAO,QAAW;AAAE,SAAK,EAAE;AAAgB,gBAAY,IAAI,UAAU,EAAE;AAAA,EAAG;AAC9E,SAAO,WAAW,EAAE;AACtB;AAMA,SAAS,gBAAgB,UAAoB;AAC3C,QAAM,EAAE,UAAU,OAAO,SAAS,UAAU,gBAAgB,WAAW,UAAU,OAAO,IAAI;AAC5F,SAAO,KAAK,UAAU,EAAE,UAAU,OAAO,SAAS,UAAU,gBAAgB,WAAW,UAAU,OAAO,CAAC;AAC3G;AAEA,SAAS,WAAW;AAClB,QAAM,UAAgB,cAAO,IAAI;AACjC,QAAM,SAAe,cAAO,CAAC;AAC7B,QAAM,SAAe,cAAO,oBAAI,IAAqB,CAAC;AACtD,EAAM,iBAAU,MAAM;AACpB,YAAQ,UAAU;AAClB,WAAO,MAAM;AAAE,cAAQ,UAAU;AAAO,aAAO,WAAW;AAAG,aAAO,QAAQ,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;AAAG,aAAO,QAAQ,MAAM;AAAA,IAAG;AAAA,EACjI,GAAG,CAAC,CAAC;AACL,QAAM,QAAc,mBAAY,MAAM;AAAE,UAAM,aAAa,IAAI,gBAAgB;AAAG,WAAO,QAAQ,IAAI,UAAU;AAAG,WAAO,EAAE,YAAY,IAAI,EAAE,OAAO,QAAQ;AAAA,EAAG,GAAG,CAAC,CAAC;AACpK,QAAM,SAAe,mBAAY,CAAC,eAAgC,OAAO,QAAQ,OAAO,UAAU,GAAG,CAAC,CAAC;AACvG,QAAM,QAAc,mBAAY,CAAC,IAAY,eAAgC,QAAQ,WAAW,CAAC,WAAW,OAAO,WAAW,OAAO,YAAY,IAAI,CAAC,CAAC;AACvJ,QAAM,WAAiB,mBAAY,MAAM;AAAE,WAAO,WAAW;AAAG,WAAO,QAAQ,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;AAAG,WAAO,QAAQ,MAAM;AAAA,EAAG,GAAG,CAAC,CAAC;AACvI,SAAO,EAAE,OAAO,QAAQ,OAAO,SAAS;AAC1C;AAEA,eAAe,aAAa,OAAc,OAAkC;AAC1E,MAAI,MAAM,QAAQ,SAAS,OAAQ,OAAM,IAAI,MAAM,iDAAiD;AACpG,QAAM,OAAO,MAAM,OAAO,MAAM;AAChC,QAAM,UAAU,MAAM,QAAQ,QAAQ,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,SAAS,EAAE,mBAAmB,YAAY,EAAE,mBAAmB,YAAY;AAC7J,QAAM,QAAQ,MAAM,QAAQ,KAAK,IAAI,CAAC,QAAQ,QAAQ,IAAI,CAAC,WAAW;AACpE,UAAM,QAAQ,iBAAiB,KAAK,MAAM;AAC1C,WAAO,UAAU,QAAQ,CAAC,UAAU,UAAU,SAAS,EAAE,SAAS,OAAO,KAAK,IAAI,QAAQ,UAAU,SAAY,KAAK,KAAK,UAAU,KAAK;AAAA,EAC3I,CAAC,CAAC;AACF,QAAM,QAAQ,KAAK,MAAM,aAAa,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,GAAG,KAAK,CAAC;AAC7E,QAAM,OAAO,KAAK,MAAM,SAAS;AACjC,OAAK,MAAM,kBAAkB,MAAM,OAAO,MAAM,QAAQ,gBAAgB,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,KAAK,MAAM;AAC1G,QAAM,UAAU,KAAK,MAAM,MAAM,EAAE,MAAM,SAAS,UAAU,QAAQ,aAAa,KAAK,CAAC;AACvF,SAAOE,sBAAqB,EAAE,YAAY,MAAM,YAAY,eAAe,MAAM,UAAU,QAAQ,QAAQ,WAAW,UAAU,OAAO,OAAO,EAAE,iBAAiB,KAAK,CAAC,EAAE,WAAW,MAAM,EAAE,UAAU,GAAG,YAAY,KAAK,CAAC,SAAS,MAAM,qEAAqE,OAAO,mBAAmB,aAAa,UAAU,IAAI,WAAW,OAAO,EAAE,GAAG,WAAW,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;AAC9Z;AACA,eAAe,cAAc,OAAc,QAAuB,OAAkC;AAClG,MAAI,CAAC,gBAAgB,QAAQ,MAAM,OAAO,EAAG,OAAM,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,yCAAyC;AACtH,MAAI,WAAW,OAAQ,QAAO,aAAa,OAAO,KAAK;AACvD,MAAI,WAAW,UAAU,MAAM,QAAQ,SAAS,WAAY,QAAO,sBAAsB,OAAO,GAAG,YAAY,KAAK,CAAC,OAAO;AAC5H,QAAM,YAAY,WAAW,UAAU,QAAQ,WAAW,iBAAiB,SAAS;AACpF,SAAO,UAAU,OAAO,QAAQ,EAAE,iBAAiB,WAAW,SAAS,WAAW,OAAO,UAAU,GAAG,YAAY,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC;AAC3I;AAEO,SAAS,oBAAoB,OAAiC;AACnE,QAAM,YAAkB,kBAAW,iBAAiB;AACpD,QAAM,cAAc,MAAM,cAAc,eAAe,UAAU;AACjE,SAAO,gBAAAF,KAAC,8BAA6D,GAAG,SAAhC,eAAe,WAAwB;AACjF;AAEA,SAAS,2BAA2B,EAAE,QAAQ,SAAS,OAAO,YAAY,UAAU,aAAa,OAAO,eAAe,WAAW,gBAAgB,UAAU,CAAC,GAAG,cAAc,OAAO,UAAU,UAAU,MAAM,WAAW,kBAAkB,MAAM,OAAO,CAAC,GAAG,cAAc,GAA6B;AACtS,QAAM,aAAmB,cAA0B,IAAI;AACvD,QAAM,YAAkB,kBAAW,iBAAiB;AACpD,QAAM,iBAAuB,kBAAW,cAAc;AACtD,QAAM,QAAQ,SAAS;AACvB,QAAM,CAAC,aAAa,cAAc,IAAU,gBAA+B,IAAI;AAC/E,QAAM,CAAC,YAAY,aAAa,IAAU,gBAAsC,MAAM;AACtF,QAAM,CAAC,YAAY,aAAa,IAAU,gBAAyC,CAAC,CAAC;AACrF,QAAM,CAAC,cAAc,eAAe,IAAU,gBAAwB,IAAI;AAC1E,QAAM,CAAC,eAAe,gBAAgB,IAAU,gBAAS,KAAK;AAC9D,QAAM,oBAA0B,cAAO,oBAAI,IAAmF,CAAC;AAC/H,QAAM,wBAA8B,cAAO,oBAAI,IAAY,CAAC;AAC5D,QAAM,CAAC,QAAQ,SAAS,IAAU,gBAAwB,IAAI;AAC9D,QAAM,SAAe,eAAQ,MAAM,OAAO,mBAAoB,CAAC,QAAQ,GAAuB,CAAC,KAAK,CAAC;AACrG,QAAM,eAAe,OAAO,gBAAgB;AAC5C,MAAI,CAAC,OAAO,SAAS,YAAY,EAAG,OAAM,IAAI,MAAM,2DAA2D;AAC/G,QAAM,UAAU,WAAW,UAAU;AACrC,QAAM,cAAc,UAAU,SAAS,gBAAgB,UAAU,WAAW,SAAS,OAAO,QAAQ,gBAAgB,gBAAgB;AACpI,QAAM,sBAAsB,WAAW,iBAAiB,OAAO,CAAC;AAChE,QAAM,sBAAsB,UAAU,CAAC,WAAW,iBAAiB,WAAW,iBAAiB,cAAc,CAAC,KAAK;AACnH,QAAM,uBAA6B,eAAQ,MAAM,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,WAAW,QAAQ,EAAE,IAAI,iBAAiB,QAAQ,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1K,QAAM,YAAY,OAAO,aAAa,UAAU,aAAaG,wBAAuB;AACpF,QAAM,KAAK,OAAO,MAAM,UAAU;AAClC,QAAM,sBAA4B,eAAQ,MAAM,2BAA2B,UAAU,aAAa,OAAO,WAAW,GAAG,CAAC,UAAU,aAAa,OAAO,WAAW,CAAC;AAClK,QAAM,WAAiB,eAAQ,MAAM,wBAAwC,WAAW,UAAU,WAAW,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,MAA0B,WAAW,CAAC,GAAG,CAAC,UAAU,SAAS,OAAO,OAAO,CAAC;AAC3N,QAAM,oBAA0B,eAAQ,MAAM,wBAAwB,UAAU,WAAW,CAAC,GAAG,OAAO,WAAW,CAAC,GAAG,OAAO,GAAG,CAAC,SAAS,UAAU,SAAS,OAAO,OAAO,CAAC;AAC3K,EAAM,eAAQ,MAAM,wBAAwB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AACjE,QAAM,SAAe,mBAAY,CAAC,WAA4B;AAAE,cAAU,YAAY,MAAM;AAAG,WAAO,YAAY,MAAM;AAAG,cAAU,eAAe,MAAM,CAAC;AAAA,EAAG,GAAG,CAAC,WAAW,KAAK,CAAC;AACnL,EAAM,iBAAU,MAAM;AACpB,UAAM,QAAQ,oBAAI,IAAI,CAAC,qBAAqB,GAAI,sBAAsB,CAAC,mBAAmB,IAAI,CAAC,GAAI,GAAG,qBAAqB,OAAO,GAAG,GAAG,sBAAsB,OAAO,CAAC;AACtK,kBAAc,CAAC,YAAY,OAAO,YAAY,OAAO,QAAQ,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;AACxG,eAAW,OAAO,kBAAkB,QAAQ,KAAK,EAAG,KAAI,CAAC,MAAM,IAAI,GAAG,EAAG,mBAAkB,QAAQ,OAAO,GAAG;AAC7G,QAAI,gBAAgB,CAAC,MAAM,IAAI,YAAY,GAAG;AAAE,sBAAgB,IAAI;AAAG,uBAAiB,KAAK;AAAA,IAAG;AAAA,EAClG,GAAG,CAAC,qBAAqB,qBAAqB,sBAAsB,YAAY,CAAC;AAEjF,QAAM,aAAmB,mBAAY,OAAO,UAAmD,OAAsB,QAAqB,sBAAsB,OAAO,eAAe,SAAiC;AACrN,QAAI,CAAC,SAAU,OAAM,IAAI,MAAM,uDAAuD;AACtF,QAAI;AACJ,QAAI,gBAAgB,UAAU;AAC5B,UAAI,CAAC,SAAS,UAAU,EAAG,OAAM,IAAI,MAAM,sDAAsD;AACjG,YAAM,WAAW,MAAM,SAAS,QAAQ,MAAM;AAC9C,uBAAiB,EAAE,IAAI,SAAS,SAAS,UAAU,OAAO,SAAS,SAAS,OAAO,SAAS,YAAY,SAAS;AAAA,IACnH,WAAW,UAAU,UAAU;AAC7B,uBAAiB,EAAE,IAAI,iBAAiB,QAAQ,GAAG,OAAO,aAAa,SAAS,YAAYC,cAAa,UAAU,EAAE,UAAU,iBAAiB,QAAQ,GAAG,OAAO,aAAa,GAAI,uBAAuB,aAAa,EAAE,WAAW,IAAI,CAAC,GAAI,GAAI,uBAAuB,WAAW,EAAE,SAAS,IAAI,CAAC,EAAG,CAAC,EAAE;AAAA,IAC3S,WAAW,wBAAwB,cAAc,WAAW;AAC1D,uBAAiB;AAAA,QACf,IAAI,SAAS;AAAA,QACb,OAAO,SAAS;AAAA,QAChB,SAAS,OAAO,YAAY;AAC1B,gBAAM,WAAW,MAAM,SAAS,QAAQ,OAAO;AAC/C,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,YAAY,EAAE,OAAO,CAAC,GAAG,SAAS,WAAW,OAAO,GAAI,YAAY,SAAS,CAAC,CAAE,EAAE;AAAA,YAClF,UAAU,EAAE,GAAG,SAAS,UAAU,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC,EAAG;AAAA,UACtE;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,uBAAiB;AAAA,IACnB;AACA,UAAM,MAAM,MAAM,eAAe,QAAQ,EAAE,OAAO,OAAO,CAAC;AAC1D,UAAM,cAAc,2BAA2B,qBAAqB,aAAa,IAAI,SAAS,MAAM;AACpG,UAAM,SAAS,MAAM,QAAQ,EAAE,IAAI,IAAI,SAAS,UAAU,OAAO,IAAI,SAAS,OAAO,SAAS,aAAa,EAAE,GAAG,KAAK,UAAU,EAAE,GAAG,IAAI,UAAU,QAAQ,YAAY,OAAO,EAAE,GAAG,GAAG,QAAQ,KAAK;AAClM,QAAI,UAAU,kBAAkB,CAAC,aAAc,QAAO;AACtD,QAAI,CAAC,OAAO,YAAa,OAAM,IAAI,MAAM,0DAA0D;AACnG,UAAM,YAAY,MAAM,mBAAmB,OAAO,aAAa,MAAM;AACrE,QAAI,OAAO,SAAS,QAAQ,SAAS,OAAQ,OAAM,IAAI,MAAM,+CAA+C;AAC5G,WAAO,EAAE,UAAU,gBAAgB,EAAE,GAAG,OAAO,UAAU,SAAS,EAAE,MAAM,QAAQ,MAAM,UAAU,MAAM,SAAS,OAAO,SAAS,QAAQ,QAAQ,GAAG,UAAU,UAAU,UAAU,WAAW,CAAC,GAAG,UAAU,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,aAAa,OAAO,aAAa,GAAI,UAAU,QAAQ,EAAE,iBAAiB,UAAU,MAAM,QAAQ,IAAI,CAAC,EAAG;AAAA,EACrV,GAAG,CAAC,aAAa,YAAY,qBAAqB,UAAU,WAAW,CAAC;AACxE,QAAM,iBAAuB,mBAAY,CAAC,OAAsB,WAAwB,WAAW,SAAS,OAAO,QAAQ,IAAI,GAAG,CAAC,YAAY,OAAO,CAAC;AACvJ,oBAAkB,QAAQ,IAAI,qBAAqB,cAAc;AACjE,MAAI,uBAAuB,eAAgB,mBAAkB,QAAQ,IAAI,qBAAqB,CAAC,OAAO,WAAW,WAAW,gBAAgB,OAAO,QAAQ,IAAI,CAAC;AAChK,aAAW,WAAW,UAAU;AAC9B,UAAM,MAAM,qBAAqB,IAAI,QAAQ,EAAE;AAC/C,sBAAkB,QAAQ,IAAI,KAAK,CAAC,OAAO,WAAW,WAAW,QAAQ,QAAQ,OAAO,QAAQ,IAAI,CAAC;AAAA,EACvG;AAEA,QAAM,YAAkB,mBAAY,YAAY;AAC9C,UAAM,EAAE,YAAY,GAAG,IAAI,MAAM,MAAM;AAAG,mBAAe,IAAI;AAAG,kBAAc,SAAS;AACvF,QAAI;AAAE,YAAM,SAAS,MAAM,WAAW,SAAS,cAAc,WAAW,QAAQ,MAAM,KAAK;AAAG,UAAI,MAAM,MAAM,IAAI,UAAU,GAAG;AAAE,uBAAe,MAAM;AAAG,sBAAc,MAAM;AAAA,MAAG;AAAA,IAAE,SAC3K,OAAO;AAAE,UAAI,MAAM,MAAM,IAAI,UAAU,GAAG;AAAE,uBAAe,IAAI;AAAG,sBAAc,aAAa,OAAO,2BAA2B,CAAC;AAAA,MAAG;AAAA,IAAE,UAC5I;AAAU,YAAM,OAAO,UAAU;AAAA,IAAG;AAAA,EACtC,GAAG,CAAC,YAAY,OAAO,cAAc,OAAO,CAAC;AAE7C,QAAM,WAAiB,mBAAY,OAAO,QAAuC,UAAmB,cAAoC;AACtI,UAAM,EAAE,YAAY,GAAG,IAAI,MAAM,MAAM;AACvC,QAAI;AACF,YAAM,WAAW,WAAW,WAAW,OAAO,WAAW,YAAY,WAAW,SAAS,gBAAgB,MAAM,IAAI;AACnH,YAAM,SAAS,OAAO,WAAW,WAAW,UAAU,cAAc,WAAW,QAAQ,IAAI,IAAI,eAAe,cAAc,WAAW,MAAM;AAC7I,UAAI,OAAO,gBAAiB,OAAM,IAAI,MAAM,+CAA+C,OAAO,eAAe,EAAE;AACnH,UAAI,OAAO,SAAS,SAAS,WAAW,cAAc,OAAO,SAAS,UAAU,SAAS,GAAG;AAC1F,cAAM,SAAS,OAAO,SAAS,SAAS,UAAU,GAAG,OAAO,SAAS,UAAU,MAAM,YAAY,OAAO,SAAS,UAAU,WAAW,IAAI,KAAK,GAAG;AAClJ,cAAM,IAAI,MAAM,8BAA8B,MAAM,sDAAsD;AAAA,MAC5G;AACA,YAAM,WAAW,2BAA2B,qBAAqB,aAAa,OAAO,SAAS,MAAM;AACpG,YAAM,QAAQ,oBAAoB,YAAY,OAAO,QAAQ,GAAG,SAAS,MAAM;AAAG,YAAM,WAAW,MAAM;AACzG,UAAI,MAAM,UAAU,SAAS,OAAO,SAAS,UAAU,OAAQ,OAAM,IAAI,MAAM,iGAAiG;AAChL,YAAM,WAAW,OAAO,WAAW,WAAW,MAAM,cAAc,OAAO,QAAQ,OAAO,SAAS,KAAK,IAAI,MAAM,OAAO,MAAM,OAAO,WAAW,MAAM;AACrJ,UAAI,SAAS,UAAU,SAAS,MAAM,UAAU,OAAQ,OAAM,IAAI,MAAM,yBAAyB,SAAS,UAAU,SAAS,MAAM,UAAU,MAAM,cAAc,SAAS,UAAU,SAAS,MAAM,UAAU,WAAW,IAAI,KAAK,GAAG,kDAAkD;AACtR,UAAI,CAAC,MAAM,MAAM,IAAI,UAAU,KAAK,SAAS,eAAe,OAAO,SAAS,MAAM,SAAS,kBAAkB,SAAU;AACvH,YAAM,UAAU,MAAM,UAAU,WAAW,aAAa,MAAM,EAAE,UAAU,WAAW,MAAM;AAC3F,UAAI,MAAM,MAAM,IAAI,UAAU,EAAG,QAAO,QAAQ,WAAW,aAAa,WAAW,iBAAiB,EAAE,GAAG,SAAS,SAAS,UAAU,eAAe,IAAI,OAAO;AAAA,IACjK,SAAS,OAAO;AAAE,UAAI,MAAM,MAAM,IAAI,UAAU,EAAG,QAAO,EAAE,QAAQ,SAAS,MAAM,kBAAkB,SAAS,aAAa,OAAO,oBAAoB,GAAG,WAAW,KAAK,CAAC;AAAA,IAAG,UAC7K;AAAU,YAAM,OAAO,UAAU;AAAA,IAAG;AAAA,EACtC,GAAG,CAAC,YAAY,gBAAgB,OAAO,eAAe,cAAc,aAAa,qBAAqB,QAAQ,SAAS,CAAC;AAExH,QAAM,gBAAsB;AAAA,IAC1B,OACE,MAAM,qBACN,YACG;AACH,YAAM,kBACJ,WAAW,UAAU,QAAQ,SACxB;AAAA,QACC,IAAI,WAAW,GAAG;AAAA,QAClB,OAAO,QAAQ;AAAA,QACf,SAAS,YACPA,cAAa,QAAQ,QAAmB;AAAA,UACtC,UAAU,WAAW,GAAG;AAAA,UACxB,OAAO,QAAQ;AAAA,QACjB,CAAC;AAAA,MACL,IACA,SAAS;AACf,YAAM,mBAAmB,CACvB,OACA,QACA,eAAe,SAEf,WAAW,mBAAmB,SAAS,OAAO,QAAQ,MAAM,YAAY;AAC1E,wBAAkB,QAAQ,IAAI,KAAK,gBAAgB;AACnD,YAAM,WAAW,WAAW,GAAG;AAC/B,YAAM,EAAE,YAAY,GAAG,IAAI,MAAM,MAAM;AACvC,UAAI,UAAU;AACZ,YAAI;AACF,gBAAM,cAAc,SAAS,UAAU;AACvC,gBAAM,QAAQ,MAAM;AAAA,YAClB,SAAS;AAAA,YACT,WAAW;AAAA,YACX,CAAC;AAAA,UACH;AACA,cAAI,CAAC,MAAM,MAAM,IAAI,UAAU,KAAK,CAAC,kBAAkB,QAAQ,IAAI,GAAG;AACpE;AACF,cAAI,gBAAgB,CAAC,SAAS,eAAe,CAAC,MAAM;AAClD,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AACF,gBAAM,qBAAqB,CAAC,UAC1B,SAAS;AAAA,YACP,OAAO,MAAM,OAAO;AAAA,YACpB,YAAY,MAAM;AAAA,YAClB,SAAS,MAAM;AAAA,YACf,QAAQ,MAAM;AAAA,UAChB;AACF,gBAAM,UAAU,cACZ,KAAK,UAAU,mBAAmB,SAAS,WAAW,CAAC,MACvD,KAAK,UAAU,mBAAmB,MAAM,WAAW,CAAC,IACpD,gBAAgB,SAAS,QAAQ,MACjC,gBAAgB,MAAM,QAAQ;AAClC,wBAAc,CAAC,YAAY;AACzB,kBAAM,WAAW,QAAQ,GAAG;AAC5B,gBAAI,CAAC,SAAU,QAAO;AACtB,mBAAO;AAAA,cACL,GAAG;AAAA,cACH,CAAC,GAAG,GAAG;AAAA,gBACL,GAAG;AAAA,gBACH,OAAO,MAAM;AAAA,gBACb,GAAI,cACA,EAAE,aAAa,QAAQ,IACvB,UACE,EAAE,SAAS,EAAE,GAAG,OAAO,OAAO,SAAS,MAAM,EAAE,IAC/C,EAAE,SAAS,OAAU;AAAA,cAC7B;AAAA,YACF;AAAA,UACF,CAAC;AACD,0BAAgB,GAAG;AACnB,2BAAiB,IAAI;AAAA,QACvB,SAAS,OAAO;AACd,cAAI,MAAM,MAAM,IAAI,UAAU,KAAK,kBAAkB,QAAQ,IAAI,GAAG,GAAG;AACrE;AAAA,cAAc,CAAC,YACb,QAAQ,GAAG,IACP;AAAA,gBACE,GAAG;AAAA,gBACH,CAAC,GAAG,GAAG;AAAA,kBACL,GAAG,QAAQ,GAAG;AAAA,kBACd,OAAO,aAAa,OAAO,0BAA0B;AAAA,gBACvD;AAAA,cACF,IACA;AAAA,YACN;AACA,4BAAgB,GAAG;AACnB,6BAAiB,IAAI;AAAA,UACvB;AAAA,QACF,UAAE;AACA,gBAAM,OAAO,UAAU;AAAA,QACzB;AACA;AAAA,MACF;AACA,UAAI;AACF,cAAM,SAAS,MAAM,iBAAiB,cAAc,WAAW,MAAM;AACrE,YAAI,CAAC,MAAM,MAAM,IAAI,UAAU,EAAG;AAClC,cAAM,WAAW;AAAA,UACf;AAAA,UACA;AAAA,UACA,OAAO,SAAS;AAAA,QAClB;AACA,cAAM,WAAW,YAAY,OAAO,QAAQ;AAC5C,cAAM,OAAuB;AAAA,UAC3B,GAAG;AAAA,UACH;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP,OAAO;AAAA,UACP,aAAa;AAAA,UACb,GAAI,OAAO,kBAAkB,EAAE,OAAO,OAAO,gBAAgB,IAAI,CAAC;AAAA,QACpE;AACA,sBAAc,CAAC,aAAa;AAAA,UAC1B,GAAG;AAAA,UACH,CAAC,GAAG,GAAG,EAAE,GAAG,MAAM,OAAO,QAAQ,MAAM,gBAAgB,IAAI,CAAC,EAAE;AAAA,QAChE,EAAE;AACF,wBAAgB,GAAG;AACnB,yBAAiB,IAAI;AAAA,MACvB,SAAS,OAAO;AACd,YAAI,MAAM,MAAM,IAAI,UAAU;AAC5B,oBAAU,aAAa,OAAO,2BAA2B,CAAC;AAAA,MAC9D,UAAE;AACA,cAAM,OAAO,UAAU;AAAA,MACzB;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,EAAM,2BAAoB,eAAe,OAAO;AAAA,IAC9C,cAAc,MAAM,WAAW,SAAS,MAAM;AAAA,IAC9C,SAAS,OAAO,iBAAiB,YAAY;AAC3C,YAAM,iBAAiB,SAAS,UAAU,WAAW,kBAAkB,gBAAgB,QAAQ;AAC/F,YAAM,eAAe,cAAc,SAAS,MAAM,QAAQ,IAAI,iBAAiB,eAAe,CAAC;AAC/F,4BAAsB,QAAQ,IAAI,YAAY;AAC9C,YAAM,cAAc,cAAc,EAAE,QAAQ,iBAAiB,OAAO,eAAe,CAAC;AAAA,IACtF;AAAA,EACF,IAAI,CAAC,aAAa,CAAC;AAEnB,QAAM,YAAkB,mBAAY,OAAO,WAAuB;AAChE,UAAM,EAAE,YAAY,GAAG,IAAI,MAAM,MAAM;AACvC,QAAI;AAAE,YAAM,eAAgB,OAA4C;AAAQ,YAAM,EAAE,SAAS,IAAI,eAAe,MAAM,WAAW,cAAc,cAAc,WAAW,QAAQ,IAAI,IAAI,MAAM,eAAe,cAAc,WAAW,MAAM;AAAG,YAAM,WAAW,2BAA2B,qBAAqB,aAAa,SAAS,MAAM;AAAG,YAAM,QAAQ,oBAAoB,YAAY,QAAQ,GAAG,SAAS,MAAM;AAAG,UAAI,CAAC,OAAO,SAAS,QAAQ,EAAG,OAAM,IAAI,MAAM,GAAG,OAAO,KAAK,mCAAmC;AAAG,YAAM,SAAS,MAAM,OAAO,IAAI,EAAE,UAAU,OAAO,QAAQ,WAAW,OAAO,CAAC;AAAG,UAAI,MAAM,MAAM,IAAI,UAAU,KAAK,MAAM,eAAe,SAAS,GAAI,QAAO,MAAM;AAAA,IAAG,SAClqB,OAAO;AAAE,UAAI,MAAM,MAAM,IAAI,UAAU,EAAG,QAAO,EAAE,QAAQ,SAAS,MAAM,iBAAiB,SAAS,aAAa,OAAO,eAAe,GAAG,WAAW,KAAK,CAAC;AAAA,IAAG,UACrK;AAAU,YAAM,OAAO,UAAU;AAAA,IAAG;AAAA,EACtC,GAAG,CAAC,YAAY,gBAAgB,OAAO,cAAc,aAAa,qBAAqB,MAAM,CAAC;AAE9F,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,UAAU,aAAa,SAAS,YAAY,UAAU,UAAU,SAAS,SAAS;AACxF,QAAM,gBAAgB,CAAC,YAA2B,SAAS,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,UAAU,OAAO,EAAE,IAAI,CAAC,MAAM,gBAAAJ,KAAC,oBAAsC,cAAY,EAAE,WAAW,UAAU,MAAM,KAAK,SAAS,YAAY,OAAO,CAAC,GAAG,0BAAAA,KAAC,oBAAkB,GAAG,GAAG,OAAO,EAAE,WAAW,KAA3I,QAAQ,EAAE,EAAE,EAAiI,CAAmB;AAC3T,QAAM,gBAAgB,OAAO,OAAO,CAAC,MAAM,QAAQ,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,EAAE,SAAS,CAAC,KAAK,SAAS,SAAS,MAAM;AACjI,QAAM,mBAAmB,UAAU,OAAO,CAAC,MAAO,MAAM,UAAU,QAAQ,gBAAgB,CAAC,CAAC,KAAM,CAAC,CAAC,OAAO,OAAO,MAAM,EAAE,SAAS,CAAC,KAAK,SAAS,SAAS,MAAM;AACjK,QAAM,kBAAkB,cAAc,SAAS,OAAO,CAAC,MAAM,EAAE,SAAS,YAAY,SAAS,OAAO,CAAC,IAAI,CAAC;AAC1G,QAAM,iBAAiB,cAAc,kBAAkB,OAAO,CAAC,MAAM,EAAE,SAAS,YAAY,QAAQ,CAAC,IAAI,CAAC;AAC1G,SAAO,gBAAAC,MAAC,UAAK,WAAW,GAAG,iBAAiB,SAAS,GAAG,SAAS,kBAAkB,CAAC,UAAU,MAAM,gBAAgB,IAAI,QACtH;AAAA,oBAAAA,MAAC,gBAAa,cAAc,CAAC,SAAS;AAAE,UAAI,KAAM,MAAK,UAAU;AAAA,IAAG,GAAG;AAAA,sBAAAD,KAAC,uBAAoB,SAAO,MAAC,0BAAAA,KAAC,YAAO,KAAK,YAAY,MAAK,UAAS,WAAU,yBAAwB,UAAoB,cAAY,6BAA6B,WAAW,IAAI,OAAM,0CAAoC,0BAAAA,KAAC,gBAAa,GAAE,GAAS;AAAA,MAAsB,gBAAAC,MAAC,uBAAoB,OAAM,OAAM,WAAU,sBAC1X;AAAA,uBAAe,YAAY,gBAAAD,KAAC,oBAAiB,UAAQ,MAAC,sCAAmB,IAAsB,eAAe,SAAS,gBAAAA,KAAC,oBAAiB,UAAQ,MAAE,sBAAW,IAAsB;AAAA,QACpL,CAAC,KAAK,SAAS,MAAM,IAAI,gBAAAC,MAAAF,WAAA,EAAE;AAAA,0BAAAC,KAAC,qBAAkB,kBAAI;AAAA,UAAqB,cAAc,MAAM;AAAA,UAAG,cAAc,IAAI,CAAC,WAAW,gBAAAA,KAAC,oBAA8B,UAAU,MAAM,KAAK,SAAS,QAAQ,KAAK,GAAI,qBAAW,UAAU,SAAS,QAAQ,MAAM,MAAM,CAAC,MAA1G,MAA6G,CAAmB;AAAA,UAAG,gBAAgB,IAAI,CAAC,YAAY,gBAAAC,MAAC,oBAAkC,UAAU,MAAM,KAAK,SAAS,SAAS,KAAK,GAAG;AAAA;AAAA,YAAM,QAAQ;AAAA,eAAzE,QAAQ,EAAuE,CAAmB;AAAA,WAAE,IAAM;AAAA,QACxb,CAAC,KAAK,SAAS,SAAS,IAAI,gBAAAA,MAAAF,WAAA,EAAE;AAAA,0BAAAC,KAAC,yBAAqB;AAAA,UAAG,cAAc,IAAI;AAAA,UAAE,gBAAAA,KAAC,oBAAiB,UAAU,MAAM,KAAK,cAAc,GAAG,kCAAe;AAAA,UAAoB,uBAAuB,iBAAiB,gBAAAA,KAAC,oBAAiB,UAAU,MAAM,KAAK,cAAc,qBAAqB,EAAE,QAAQ,gBAAgB,OAAO,eAAe,YAAY,CAAC,GAAG,wCAAqB,IAAsB;AAAA,UAAM,SAAS,IAAI,CAAC,YAAY,gBAAAA,KAAC,oBAAkC,UAAU,MAAM,KAAK,cAAc,qBAAqB,IAAI,QAAQ,EAAE,GAAI,OAAO,GAAG,0BAAAA,KAAC,oBAAkB,GAAG,SAAS,OAAO,WAAW,QAAQ,KAAK,UAAI,KAAlK,QAAQ,EAA4J,CAAmB;AAAA,WAAE,IAAM;AAAA,QACznB,CAAC,KAAK,SAAS,UAAU,IAAI,gBAAAC,MAAAF,WAAA,EAAE;AAAA,0BAAAC,KAAC,yBAAqB;AAAA,UAAE,gBAAAA,KAAC,qBAAkB,sBAAQ;AAAA,UAAqB,iBAAiB,IAAI,CAAC,WAAW,gBAAAC,MAAC,oBAA8B,UAAU,MAAM,KAAK,SAAS,QAAQ,IAAI,GAAG;AAAA;AAAA,YAAU,MAAM,MAAM;AAAA,eAA3E,MAA6E,CAAmB;AAAA,UAAG,gBAAgB,IAAI,CAAC,YAAY,gBAAAA,MAAC,oBAAgD,UAAU,MAAM,KAAK,SAAS,SAAS,IAAI,GAAG;AAAA;AAAA,YAAU,QAAQ;AAAA,eAA1F,YAAY,QAAQ,EAAE,EAA0E,CAAmB;AAAA,WAAE,IAAM;AAAA,QACrb,eAAe,SAAS,gBAAAD,KAAC,yBAAqB,IAAK;AAAA,QAAM,eAAe,IAAI,CAAC,WAAW,gBAAAA,KAAC,oBAAiC,cAAa,OAAoC,WAAW,UAAU,MAAM,KAAK,UAAU,MAAM,GAAG,0BAAAA,KAAC,oBAAkB,GAAG,QAAQ,OAAO,OAAO,OAAM,KAAjK,OAAO,EAA4J,CAAmB;AAAA,SACxS;AAAA,OAAsB;AAAA,IACrB,SAAS,gBAAAA,KAAC,UAAK,WAAU,wBAAuB,MAAK,UAAU,kBAAO,IAAU;AAAA,IAChF,OAAO,OAAO,UAAU,EAAE,IAAI,CAAC,UAAU,gBAAAA,KAAC,wBAAqB,cAAc,MAAM,WAAW,SAAS,MAAM,GAAmB,MAAM,iBAAiB,iBAAiB,MAAM,KAAK,OAAO,OAAO,QAAgB,SAAS,MAAM,iBAAiB,KAAK,GAAG,UAAU,CAAC,SAAS,cAAc,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,WAAsB,UAAoB,cAAc,kBAAkB,QAAQ,IAAI,MAAM,GAAG,KAAK,gBAAiB,GAAI,KAAK,EAAE,GAAG,IAAI,CAAC,GAAI,WAAW,UAAhX,MAAM,GAAiX,CAAE;AAAA,KACjf;AACF;AAmBA,SAAS,gBAAgB,OAAiC;AACxD,QAAM,OAAO,MAAM,SAAS,QAAQ,SAAS,SAAS,MAAM,SAAS,UAAU;AAC/E,SAAO;AAAA,IACL,QAAQ,MAAM,YAAY;AAAA,IAC1B,UAAU,MAAM,SAAS,SAAS,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,IACpF,QAAQ;AAAA,IAAI,SAAS,CAAC;AAAA,IAAG,MAAM;AAAA,IAAI,WAAW;AAAA,IAC9C,KAAK,MAAM,YAAY,OAAO;AAAA,IAC9B,gBAAgB,MAAM,QAAQ,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC;AAAA,IAC5E,cAAc;AAAA,IAAO,iBAAiB,CAAC;AAAA,IACvC,UAAU,MAAM,YAAY,OAAO;AAAA,IACnC,gBAAgB,MAAM,YAAY,OAAO;AAAA,IACzC,eAAe,MAAM,YAAY,OAAO,iBAAiB;AAAA,EAC3D;AACF;AACA,SAAS,aAAa,QAAgB,UAAoB,aAAkC;AAC1F,QAAM,MAAM,CAAC,QAAuB,QAAuB,UAAU,OAAO,MAAM,OAAO,OAAO,SAAS,KAAK,IAAI,QAAQ,GAAG;AAC7H,MAAI,WAAW,OAAQ,QAAO,YAAY;AAC1C,QAAM,UAAU,WAAW,UAAU,EAAE,UAAU,GAAG,gBAAgB,KAAK,eAAe,GAAG,IAAI,WAAW,YAAY,EAAE,UAAU,GAAG,gBAAgB,KAAM,eAAe,IAAI,IAAI,EAAE,UAAU,SAAS,UAAU,gBAAgB,SAAS,gBAAgB,eAAe,SAAS,cAAc;AAChS,SAAO,EAAE,GAAG,YAAY,QAAQ,UAAU,IAAI,QAAQ,UAAU,YAAY,OAAO,QAAQ,GAAG,gBAAgB,IAAI,QAAQ,gBAAgB,YAAY,OAAO,cAAc,GAAG,eAAe,IAAI,QAAQ,eAAe,YAAY,OAAO,iBAAiB,IAAI,EAAE;AACpQ;AACA,SAAS,QAAQ,OAAuB,UAA2B;AACjE,MAAI,QAAQ,WAAW,MAAM,QAAQ;AACrC,MAAI,MAAM,SAAS,SAAS,OAAQ,SAAQ,sBAAsB,OAAO,MAAM,UAAU,SAAS,QAAQ;AAC1G,MAAI,MAAM,QAAQ,SAAS,OAAQ,SAAQ,cAAc,OAAO;AAAA,IAC9D,QAAQ,SAAS;AAAA,IACjB,SAAS,SAAS;AAAA,IAClB,GAAI,SAAS,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAS,MAAM,WAAW,SAAS,UAAU,EAAE,IAAI,CAAC;AAAA,IAC1F,GAAI,SAAS,eAAe,EAAE,iBAAiB,SAAS,gBAAgB,IAAI,CAAC;AAAA,IAC7E,gBAAgB,SAAS;AAAA,IACzB,sBAAsB;AAAA,IACtB,KAAK,SAAS;AAAA,EAChB,CAAC;AACD,QAAM,SAAS,aAAa,SAAS,QAAQ,UAAU,MAAM,WAAW;AACxE,MAAI,MAAM,QAAQ,SAAS,UAAU,MAAM,QAAQ,SAAS,cAAc;AACxE,YAAQ,WAAW,OAAO,EAAE,UAAU,OAAO,UAAU,gBAAgB,OAAO,gBAAgB,eAAe,OAAO,iBAAiB,KAAK,CAAC;AAAA,EAC7I;AACA,SAAO,oBAAoB,OAAO,MAAM;AAC1C;AACA,SAAS,gBAAgB,QAAyC;AAAE,SAAO,UAAU;AAAO;AAC5F,SAAS,QAAQ,OAAc,QAAgB;AAC7C,QAAM,WAAW,gBAAgB,MAAM,IAAI,SAAS;AACpD,SAAO,UAAU,OAAO,aAAa,SAAS,QAAQ,UAAU,EAAE,iBAAiB,aAAa,SAAS,aAAa,SAAS,aAAa,OAAO,CAAC,EAAE;AACxJ;AAEA,SAAS,qBAAqB,EAAE,cAAc,MAAM,OAAO,QAAQ,SAAS,UAAU,WAAW,IAAI,UAAU,WAAW,aAAa,GAYpI;AACD,QAAM,QAAQ,SAAS;AACvB,QAAM,SAAe,cAAO,KAAK;AAAG,SAAO,UAAU;AACrD,QAAM,YAAkB,cAAkC,MAAS;AACnE,MAAI,CAAC,UAAU,WAAW,GAAI,WAAU,UAAU,GAAG,OAAO,KAAK;AACjE,QAAM,CAAC,UAAU,WAAW,IAAU,gBAAS,MAAM,gBAAgB,KAAK,CAAC;AAC3E,QAAM,CAAC,iBAAiB,kBAAkB,IAAU,gBAAqB,CAAC,CAAC;AAC3E,QAAM,CAAC,iBAAiB,kBAAkB,IAAU,gBAA0B,IAAI;AAClF,QAAM,kBAAkB,MAAM,YAAY;AAC1C,QAAM,CAAC,QAAQ,SAAS,IAAU,gBAAiB,MAAM,gBAAgB,eAAe,IAAK,gBAAgB,iBAAiB,MAAM,MAAM,OAAO,IAAI,kBAAkB,UAAW,SAAS,KAAK,CAAC,YAAY,QAAQ,OAAO,mBAAmB,QAAQ,SAAS,MAAM,MAAM,OAAO,CAAC,IAAI,kBAAkB,OAAO;AACjT,QAAM,CAAC,QAAQ,SAAS,IAAU,gBAAS,MAAM,gBAAgB,MAAM,IAAI,QAAQ,MAAM,OAAO,MAAM,IAAI,gCAA2B;AACrI,QAAM,CAAC,aAAa,cAAc,IAAU,gBAAwB,IAAI;AACxE,QAAM,CAAC,aAAa,cAAc,IAAU,gBAAwB,IAAI;AACxE,QAAM,CAAC,kBAAkB,mBAAmB,IAAU,gBAA0B,IAAI;AACpF,QAAM,CAAC,aAAa,cAAc,IAAU,gBAAS,EAAE;AACvD,QAAM,CAAC,MAAM,OAAO,IAAU,gBAAwD,IAAI;AAC1F,QAAM,CAAC,UAAU,WAAW,IAAU,gBAAS,KAAK;AACpD,EAAM,iBAAU,MAAM;AAAE,gBAAY,KAAK;AAAA,EAAG,GAAG,CAAC,MAAM,SAAS,IAAI,MAAM,MAAM,QAAQ,CAAC;AACxF,QAAM,WAAiB,cAA+B,IAAI;AAC1D,QAAM,gBAAsB,cAA+B,IAAI;AAE/D,EAAM,iBAAU,MAAM;AACpB,QAAI,YAAa;AACjB,UAAM,UAAU,SAAS,KAAK,CAAC,cAAc,UAAU,OAAO,MAAM;AACpE,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,aAAa,MAAM,SAAS;AAAI,UAAM,WAAW,MAAM,MAAM;AACnE,wBAAoB,IAAI;AAAG,mBAAe,IAAI;AAC9C,QAAI,QAAS,WAAU,gCAA2B;AAClD,UAAM,kBAAkB,UAAU,QAAQ,MAAM,MAAM,OAAO,WAAW,MAAM,IAAI,cAAc,MAAM,OAAO,gBAAgB,MAAM,IAAI,SAAS,SAAS,MAAM,SAAS,KAAK;AAC7K,SAAK,gBAAgB,KAAK,CAAC,aAAa;AACtC,UAAI,CAAC,WAAW,OAAO,WAAW,SAAS,eAAe,cAAc,SAAS,kBAAkB,UAAU;AAAE,4BAAoB,QAAQ;AAAG,kBAAU,SAAS,SAAS;AAAA,MAAG;AAAA,IAC/K,CAAC,EAAE,MAAM,CAAC,UAAU;AAAE,UAAI,CAAC,WAAW,OAAO,QAAS,gBAAe,aAAa,OAAO,uBAAuB,CAAC;AAAA,IAAG,CAAC;AACrH,WAAO,MAAM,WAAW,MAAM;AAAA,EAChC,GAAG,CAAC,UAAU,aAAa,QAAQ,MAAM,OAAO,MAAM,SAAS,EAAE,CAAC;AAClE,QAAM,QAAc,mBAAY,MAAM;AAAE,aAAS,SAAS,MAAM;AAAG,kBAAc,SAAS,MAAM;AAAG,aAAS,UAAU;AAAM,kBAAc,UAAU;AAAM,UAAM,SAAS;AAAG,YAAQ,IAAI;AAAG,YAAQ;AAAA,EAAG,GAAG,CAAC,OAAO,OAAO,CAAC;AACzN,QAAM,iBAAiB,CAAC,SAAmB;AACzC,QAAI,MAAM,MAAM,gBAAgB;AAAE,yBAAmB,IAAI;AAAG;AAAA,IAAQ;AACpE,uBAAmB,CAAC,YAAY,CAAC,GAAG,SAAS,QAAQ,CAAC;AAAG,gBAAY,IAAI;AAAG,aAAS,EAAE,GAAG,OAAO,OAAO,QAAQ,OAAO,IAAI,GAAG,OAAO,OAAU,CAAC;AAAA,EAClJ;AACA,QAAM,uBAAuB,MAAM;AACjC,QAAI,CAAC,gBAAiB;AACtB,uBAAmB,CAAC,YAAY,CAAC,GAAG,SAAS,QAAQ,CAAC;AAAG,gBAAY,eAAe;AAAG,mBAAe,IAAI;AAC1G,aAAS,EAAE,GAAG,OAAO,OAAO,QAAQ,OAAO,eAAe,GAAG,OAAO,OAAU,CAAC;AAC/E,uBAAmB,IAAI;AAAA,EACzB;AACA,QAAM,aAAa,CAAC,SAAiB;AACnC,cAAU,IAAI;AACd,wBAAoB,IAAI;AAAG,mBAAe,IAAI;AAC9C,UAAM,UAAU,MAAM,MAAM;AAC5B,QAAI,QAAQ,SAAS,UAAU,QAAQ,SAAS,cAAc;AAC5D,UAAI;AACF,cAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,cAAM,OAAgB,QAAQ,SAAS,SAAS,EAAE,MAAM,QAAQ,MAAM,IAAI,EAAE,MAAM,cAAc,QAAQ,QAAQ,QAAQ,MAAM;AAC9H,uBAAe,IAAI;AAAG,iBAAS,EAAE,GAAG,OAAO,OAAO,UAAU,MAAM,OAAO,IAAI,GAAG,OAAO,OAAU,CAAC;AAAA,MACpG,QAAQ;AAAE,uBAAe,sEAAsE;AAAA,MAAG;AAClG;AAAA,IACF;AACA,mBAAe,IAAI;AACnB,UAAM,OAAO,QAAQ,SAAS,cAAc,WAAW,aAAa,aAAa;AACjF,QAAI,QAAQ,SAAS,UAAU,CAAC,gBAAgB,MAAM,EAAG,WAAU,OAAO;AAC1E,aAAS,EAAE,GAAG,OAAO,OAAO,UAAU,MAAM,OAAO,EAAE,MAAM,KAAK,CAAC,GAAG,OAAO,OAAU,CAAC;AAAA,EACxF;AAEA,QAAM,iBAAiB,OAAO,UAAyB;AACrD,kBAAc,SAAS,MAAM;AAC7B,UAAM,EAAE,YAAY,GAAG,IAAI,MAAM,MAAM;AAAG,kBAAc,UAAU;AAAY,UAAM,WAAW,MAAM,MAAM;AAAU,YAAQ,SAAS;AACtI,QAAI;AACF,YAAM,SAAS,MAAM,aAAa,OAAO,WAAW,MAAM;AAC1D,UAAI,MAAM,MAAM,IAAI,UAAU,KAAK,OAAO,QAAQ,MAAM,aAAa,SAAU,UAAS,EAAE,GAAG,OAAO,SAAS,SAAS,EAAE,GAAG,QAAQ,MAAM,GAAG,aAAa,OAAO,OAAO,OAAO,gBAAgB,CAAC;AAAA,IACjM,SAAS,OAAO;AAAE,UAAI,MAAM,MAAM,IAAI,UAAU,EAAG,UAAS,EAAE,GAAG,OAAO,SAAS,OAAO,aAAa,OAAO,gBAAgB,EAAE,CAAC;AAAA,IAAG,UAClI;AAAU,YAAM,OAAO,UAAU;AAAG,UAAI,cAAc,YAAY,WAAY,eAAc,UAAU;AAAM,UAAI,MAAM,MAAM,IAAI,UAAU,EAAG,SAAQ,IAAI;AAAA,IAAG;AAAA,EAC9J;AACA,QAAM,iBAAiB,CAAC,WAAkC;AACxD,QAAI,CAAC,MAAM,QAAS;AACpB,QAAI,WAAW,QAAQ;AAAE,YAAM,EAAE,SAAS,UAAU,GAAG,KAAK,IAAI;AAAO,eAAS,EAAE,GAAG,MAAM,OAAO,OAAU,CAAC;AAAG;AAAA,IAAQ;AACxH,UAAM,UAAU,MAAM;AACtB,UAAM,cAAc,2BAA2B,CAAC,GAAG,MAAM,aAAa,QAAQ,SAAS,MAAM;AAC7F,UAAM,OAAuB,EAAE,GAAG,SAAS,KAAK,MAAM,KAAK,UAAU,YAAY,QAAQ,QAAQ,GAAG,OAAO,YAAY,QAAQ,QAAQ,GAAG,OAAO,QAAQ,OAAO,aAAa,GAAI,QAAQ,kBAAkB,EAAE,OAAO,QAAQ,gBAAgB,IAAI,CAAC,EAAG;AACpP,UAAM,eAAe,gBAAgB,IAAI;AAAG,gBAAY,YAAY;AAAG,uBAAmB,CAAC,CAAC;AAAG,uBAAmB,IAAI;AAAG,mBAAe,IAAI;AAC5I,aAAS,EAAE,GAAG,MAAM,OAAO,QAAQ,MAAM,YAAY,EAAE,CAAC;AAAA,EAC1D;AAEA,QAAM,QAAQ,OAAO,UAAU,UAAU;AACvC,UAAM,UAAU,UAAU;AAC1B,QAAI,CAAC,WAAW,CAAC,QAAQ,SAAS,MAAM,QAAQ,KAAM,CAAC,WAAW,CAAC,YAAY,KAAK,KAAO,WAAW,CAAC,QAAQ,QAAU;AACzH,aAAS,SAAS,MAAM;AACxB,UAAM,EAAE,YAAY,GAAG,IAAI,MAAM,MAAM;AAAG,aAAS,UAAU;AAC7D,UAAM,aAAa,MAAM,SAAS;AAAI,UAAM,WAAW,MAAM,MAAM;AAAU,YAAQ,IAAI;AAAG,gBAAY,KAAK;AAC7G,QAAI;AACF,YAAM,OAAO,UAAU,MAAM,QAAQ,QAAS,EAAE,UAAU,MAAM,UAAU,OAAO,MAAM,OAAO,QAAQ,WAAW,OAAO,CAAC,IAAI,MAAM,QAAQ,IAAI,EAAE,UAAU,MAAM,UAAU,OAAO,MAAM,OAAO,aAAa,QAAQ,WAAW,OAAO,CAAC;AACvO,YAAM,UAAU,OAAO;AACvB,UAAI,CAAC,MAAM,MAAM,IAAI,UAAU,KAAK,QAAQ,SAAS,OAAO,cAAc,QAAQ,MAAM,aAAa,YAAY,KAAK,eAAe,cAAc,KAAK,aAAa,MAAM,MAAM,YAAY,KAAK,mBAAmB,MAAM,MAAM,kBAAkB,KAAK,YAAY,SAAU;AAC9Q,UAAI;AAAE,kBAAU,MAAM,OAAO;AAAA,MAAG,QAAQ;AAAE,iBAAS,EAAE,GAAG,SAAS,OAAO,yCAAyC,CAAC;AAAG,oBAAY,IAAI;AAAG;AAAA,MAAQ;AAChJ,eAAS,EAAE,GAAG,SAAS,OAAO,MAAM,OAAO,OAAU,CAAC;AAAG,qBAAe,IAAI;AAAA,IAC9E,SAAS,OAAO;AACd,UAAI,CAAC,QAAQ,KAAK,KAAK,MAAM,MAAM,IAAI,UAAU,GAAG;AAAE,oBAAY,IAAI;AAAG,iBAAS,EAAE,GAAG,OAAO,SAAS,OAAO,aAAa,OAAO,uBAAuB,EAAE,CAAC;AAAA,MAAG;AAAA,IACjK,UAAE;AAAU,YAAM,OAAO,UAAU;AAAG,UAAI,SAAS,YAAY,WAAY,UAAS,UAAU;AAAM,UAAI,MAAM,MAAM,IAAI,UAAU,EAAG,SAAQ,IAAI;AAAA,IAAG;AAAA,EACtJ;AACA,QAAM,WAAW,YAAY;AAC3B,UAAM,eAAe,SAAS;AAC9B,UAAM,EAAE,YAAY,GAAG,IAAI,MAAM,MAAM;AACvC,QAAI;AAAE,YAAM,UAAU,SAAS,SAAS;AAAA,IAAG,SACpC,OAAO;AAAE,UAAI,MAAM,MAAM,IAAI,UAAU,EAAG,UAAS,EAAE,GAAG,OAAO,SAAS,OAAO,aAAa,OAAO,wBAAwB,EAAE,CAAC;AAAA,IAAG,UACxI;AAAU,oBAAc,MAAM;AAAG,YAAM,OAAO,UAAU;AAAG,UAAI,SAAS,YAAY,aAAc,UAAS,UAAU;AAAM,UAAI,MAAM,MAAM,IAAI,UAAU,EAAG,SAAQ,IAAI;AAAA,IAAG;AAAA,EAC7K;AACA,QAAM,CAAC,gBAAgB,iBAAiB,IAAU,gBAAwB,IAAI;AAC9E,EAAM,iBAAU,MAAM;AAAE,sBAAkB,IAAI;AAAA,EAAG,GAAG,CAAC,MAAM,MAAM,QAAQ,CAAC;AAC1E,QAAM,iBAAiB,CAAC,YAA6B;AAAE,sBAAkB,eAAe,OAAO,CAAC;AAAG,cAAU,OAAO;AAAA,EAAG;AACvH,QAAM,UAAU,OAAO,aAAsB;AAC3C,QAAI,YAAa;AACjB,UAAM,EAAE,YAAY,GAAG,IAAI,MAAM,MAAM;AAAG,UAAM,aAAa,MAAM,SAAS;AAAI,UAAM,WAAW,MAAM,MAAM;AAAU,YAAQ,WAAW,aAAa,MAAM;AAC7J,QAAI;AACF,UAAI,CAAC,iBAAkB,OAAM,IAAI,MAAM,uDAAuD;AAC9F,YAAM,WAAW;AACjB,YAAM,UAAU,OAAO;AACvB,UAAI,CAAC,MAAM,MAAM,IAAI,UAAU,KAAK,QAAQ,SAAS,OAAO,cAAc,QAAQ,MAAM,aAAa,YAAY,SAAS,eAAe,cAAc,SAAS,kBAAkB,SAAU;AAC5L,YAAM,SAAS,MAAM,UAAU,WAAW,aAAa,MAAM,EAAE,UAAU,WAAW,MAAM;AAC1F,UAAI,MAAM,MAAM,IAAI,UAAU,EAAG,gBAAe,MAAM;AAAA,IACxD,SAAS,OAAO;AAAE,UAAI,MAAM,MAAM,IAAI,UAAU,EAAG,gBAAe,EAAE,QAAQ,SAAS,MAAM,kBAAkB,SAAS,aAAa,OAAO,oBAAoB,GAAG,WAAW,KAAK,CAAC;AAAA,IAAG,UACrL;AAAU,YAAM,OAAO,UAAU;AAAG,UAAI,MAAM,MAAM,IAAI,UAAU,EAAG,SAAQ,IAAI;AAAA,IAAG;AAAA,EACtF;AAEA,QAAM,OAAO,MAAM,SAAS,QAAQ,SAAS,SAAS,MAAM,SAAS,UAAU;AAC/E,QAAM,UAAU,OAAO,OAAO,CAAC,MAAM,gBAAgB,GAAG,MAAM,MAAM,OAAO,CAAC;AAC5E,QAAM,oBAAoB,SAAS,OAAO,CAAC,YAAY,QAAQ,SAAS,MAAM,MAAM,OAAO,CAAC;AAC5F,QAAM,qBAAqB,kBAAkB,aAAa,MAAM,MAAM;AACtE,QAAM,YAAY,OAAO,QAAQ,MAAM,YAAY,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,SAAS,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,IAAI,QAAQ,QAAQ,MAAM,CAAC,IAAI,OAAO,KAAK,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,QAAK;AACpM,SAAO,gBAAAA,KAAC,UAAO,MAAY,cAAc,CAAC,SAAS;AAAE,QAAI,CAAC,KAAM,OAAM;AAAA,EAAG,GAAG,0BAAAC,MAAC,iBAAc,kBAAkB,CAAC,UAAU;AAAE,UAAM,eAAe;AAAG,iBAAa;AAAA,EAAG,GAAG,WAAU,qCAAoC,aAAW,SAAS,MACrO;AAAA,oBAAAA,MAAC,gBAAa;AAAA,sBAAAA,MAAC,eAAY;AAAA;AAAA,QAAS,MAAM,SAAS;AAAA,SAAM;AAAA,MAAc,gBAAAA,MAAC,qBAAkB;AAAA;AAAA,QAAU,MAAM,SAAS,iBAAiB,4BAA4B;AAAA,QAA2B;AAAA,SAA8B;AAAA,OAAoB;AAAA,IAC7O,gBAAAA,MAAC,SAAI,WAAU,gCAA+B;AAAA,sBAAAA,MAAC,aAAQ,WAAU,sBAC/D;AAAA,wBAAAA,MAAC,SAAI,WAAU,yBACZ;AAAA,iBAAO,SAAS,IAAI,gBAAAA,MAAC,WAAM;AAAA;AAAA,YAAK,gBAAAD,KAAC,YAAO,cAAW,kBAAiB,OAAO,MAAM,OAAO,UAAU,SAAS,MAAM,UAAU,CAAC,MAAM,KAAK,eAAe,EAAE,OAAO,KAAsB,GAAI,iBAAO,IAAI,CAAC,UAAU,gBAAAA,KAAC,YAAmB,OAAO,OAAQ,sBAAY,KAAK,KAAvC,KAAyC,CAAS,GAAE;AAAA,aAAS,IAAW;AAAA,UACrS,gBAAAC,MAAC,WAAM;AAAA;AAAA,YAAM,gBAAAA,MAAC,YAAO,cAAW,iBAAgB,OAAO,SAAS,QAAQ,UAAU,CAAC,MAAM,eAAe,EAAE,GAAG,UAAU,QAAQ,EAAE,OAAO,MAAgB,CAAC,GAAG;AAAA,8BAAAD,KAAC,YAAO,OAAM,QAAO,kBAAI;AAAA,cAAS,gBAAAA,KAAC,YAAO,OAAM,WAAU,qBAAO;AAAA,cAAS,gBAAAA,KAAC,YAAO,OAAM,SAAQ,mBAAK;AAAA,cAAS,gBAAAA,KAAC,YAAO,OAAM,UAAS,oBAAM;AAAA,eAAS;AAAA,aAAS;AAAA,UACzT,gBAAAA,KAAC,UAAO,MAAK,UAAS,MAAK,MAAK,SAAQ,WAAU,UAAW,CAAC,MAAM,MAAM,SAAS,UAAU,CAAC,gBAAgB,UAAW,SAAS,MAAM,SAAS,MAAM;AAAE,2BAAe,IAAI;AAAG,gBAAI,gBAAgB,QAAQ;AAAE,oBAAM,OAAO,gBAAgB,gBAAgB,SAAS,CAAC;AAAI,0BAAY,IAAI;AAAG,iCAAmB,CAAC,YAAY,QAAQ,MAAM,GAAG,EAAE,CAAC;AAAG,uBAAS,EAAE,GAAG,OAAO,OAAO,QAAQ,OAAO,IAAI,GAAG,OAAO,OAAU,CAAC;AAAA,YAAG,MAAO,UAAS,EAAE,GAAG,OAAO,OAAO,UAAU,MAAM,KAAK,GAAG,OAAO,OAAU,CAAC;AAAA,UAAG,GAAG,kBAAI;AAAA,UAChf,gBAAAA,KAAC,UAAO,MAAK,UAAS,MAAK,MAAK,SAAQ,WAAU,UAAU,SAAS,MAAM,SAAS,MAAM;AAAE,kBAAM,OAAO,gBAAgB,KAAK;AAAG,wBAAY,IAAI;AAAG,+BAAmB,CAAC,CAAC;AAAG,+BAAmB,IAAI;AAAG,2BAAe,IAAI;AAAG,qBAAS,EAAE,GAAG,OAAO,OAAO,QAAQ,OAAO,IAAI,GAAG,OAAO,OAAU,CAAC;AAAA,UAAG,GAAG,mBAAK;AAAA,UAC3S,gBAAAA,KAAC,UAAO,MAAK,UAAS,MAAK,MAAK,SAAQ,WAAU,UAAU,SAAS,MAAM,SAAS,MAAM,KAAK,eAAe,MAAM,KAAK,GAAG,4BAAc;AAAA,WAC5I;AAAA,QACC,SAAS,WAAW,aAAa,MAAM,MAAM,QAAQ,SAAS,UAAU,MAAM,MAAM,QAAQ,SAAS,gBAAgB,gBAAAC,MAAC,cAAS,WAAU,yBAAwB;AAAA,0BAAAD,KAAC,YAAO,yBAAW;AAAA,UAAW,CAAE,CAAC,YAAY,eAAe,GAAG,CAAC,kBAAkB,2BAA2B,GAAG,CAAC,iBAAiB,qBAAqB,CAAE,EAAY,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,gBAAAC,MAAC,WAAiB;AAAA;AAAA,YAAK,gBAAAD,KAAC,WAAM,MAAK,UAAS,KAAI,KAAI,OAAO,SAAS,GAAG,KAAK,IAAI,UAAU,CAAC,MAAM,eAAe,EAAE,GAAG,UAAU,CAAC,GAAG,GAAG,OAAO,MAAM,EAAE,OAAO,aAAa,IAAI,OAAO,EAAE,OAAO,cAAc,CAAC,GAAE;AAAA,eAAlM,GAAoM,CAAQ;AAAA,WAAE,IAAc;AAAA,QACnkB,OAAO,gBAAAA,KAAC,eAAY,MAAY,UAAoB,QAAQ,gBAAe,IAAK;AAAA,QAChF,MAAM,SAAS,SAAS,SAAS,gBAAAC,MAAC,cAAS,WAAU,yBAAwB;AAAA,0BAAAD,KAAC,YAAO,sBAAQ;AAAA,UAAU,MAAM,SAAS,SAAS,IAAI,CAAC,YAAY,gBAAAC,MAAC,WAAuB;AAAA,4BAAAD,KAAC,WAAM,MAAK,YAAW,SAAS,SAAS,SAAS,SAAS,QAAQ,EAAE,GAAG,UAAU,CAAC,MAAM,eAAe,EAAE,GAAG,UAAU,UAAU,EAAE,OAAO,UAAU,CAAC,GAAG,SAAS,UAAU,QAAQ,EAAE,IAAI,SAAS,SAAS,OAAO,CAAC,OAAO,OAAO,QAAQ,EAAE,EAAE,CAAC,GAAE;AAAA,YAAE;AAAA,YAAE,QAAQ;AAAA,eAAxQ,QAAQ,EAAsQ,CAAQ;AAAA,WAAE,IAAc;AAAA,QACnc,gBAAAC,MAAC,SAAI,WAAU,0BAAyB;AAAA,0BAAAA,MAAC,UAAM;AAAA,kBAAM,SAAS,SAAS,SAAS,eAAe;AAAA,YAAE;AAAA,YAAU,MAAM,SAAS,SAAS,SAAS,OAAO,KAAK,OAAO,MAAM,SAAS,SAAS,MAAM,eAAe,CAAC;AAAA,YAAG;AAAA,YAAI,MAAM,SAAS,SAAS;AAAA,aAAO;AAAA,UAAQ,MAAM,SAAS,SAAS,SAAS,gBAAAD,KAAC,UAAM,gBAAM,SAAS,SAAS,QAAO,IAAU;AAAA,UAAM,YAAY,gBAAAC,MAAC,UAAK;AAAA;AAAA,YAAS;AAAA,aAAU,IAAU;AAAA,UAAM,mBAAmB,SAAS,gBAAAA,MAAC,aAAQ;AAAA,4BAAAA,MAAC,aAAS;AAAA,iCAAmB;AAAA,cAAO;AAAA,eAAyB;AAAA,YAAU,gBAAAD,KAAC,QAAI,6BAAmB,IAAI,CAAC,GAAG,MAAM,gBAAAC,MAAC,QAAuC;AAAA,gBAAE,QAAQ;AAAA,cAAI;AAAA,cAAG,EAAE;AAAA,cAAQ,EAAE,SAAS,OAAO,KAAK,KAAK,EAAE,KAAK;AAAA,iBAA7F,GAAG,EAAE,IAAI,IAAI,EAAE,MAAM,IAAI,CAAC,EAAuE,CAAK,GAAE;AAAA,aAAK,IAAa;AAAA,WAAK;AAAA,QACjqB,gBAAAA,MAAC,WAAM,WAAU,+BAA8B;AAAA;AAAA,UAAa,gBAAAA,MAAC,YAAO,cAAW,iBAAgB,OAAO,QAAQ,UAAU,CAAC,MAAM,UAAU,EAAE,OAAO,KAAK,GAAI;AAAA,oBAAQ,IAAI,CAAC,MAAM,gBAAAD,KAAC,YAAe,OAAO,GAAI,gBAAM,CAAC,KAArB,CAAuB,CAAS;AAAA,YAAG,MAAM,MAAM,QAAQ,SAAS,SAAS,gBAAAA,KAAC,YAAO,OAAM,QAAO,4BAAc,IAAY;AAAA,YAAM,kBAAkB,IAAI,CAAC,YAAY,gBAAAA,KAAC,YAAwB,OAAO,QAAQ,IAAK,kBAAQ,SAAxC,QAAQ,EAAsC,CAAS;AAAA,aAAE;AAAA,WAAS;AAAA,QAC3a,gBAAAA,KAAC,cAAS,WAAU,yBAAwB,cAAW,mBAAkB,gBAAc,cAAc,OAAO,QAAW,oBAAkB,cAAc,yBAAyB,QAAW,OAAO,QAAQ,UAAU,CAAC,MAAM,WAAW,EAAE,OAAO,KAAK,GAAE;AAAA,QACrP,cAAc,gBAAAA,KAAC,OAAE,IAAG,wBAAuB,MAAK,SAAQ,WAAU,uBAAuB,uBAAY,IAAO;AAAA,QAC5G,cAAc,gBAAAA,KAAC,OAAE,MAAK,SAAQ,WAAU,uBAAuB,uBAAY,IAAO;AAAA,QAClF,cAAc,gBAAAA,KAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,UAAU,SAAS,MAAM,SAAS,MAAM;AAAE,gBAAM,WAAW,UAAU,MAAM,OAAO,EAAE,MAAM,QAAQ,MAAM,OAAO,CAAC;AAAG,yBAAe,IAAI;AAAG,mBAAS,EAAE,GAAG,OAAO,OAAO,UAAU,OAAO,OAAU,CAAC;AAAG,oBAAU,OAAO;AAAA,QAAG,GAAG,4CAA8B,IAAY;AAAA,SAC9T;AAAA,MAAW,MAAM,SAAS,aAAa,MAAM,QAAQ,gBAAAC,MAAC,WACnD;AAAA,aAAK,gBAAAA,MAAAF,WAAA,EACN;AAAA,0BAAAE,MAAC,WAAM;AAAA;AAAA,YAAc,gBAAAD,KAAC,cAAS,OAAO,aAAa,UAAU,CAAC,MAAM,eAAe,EAAE,OAAO,KAAK,GAAG,aAAY,uCAAqC;AAAA,aAAE;AAAA,UACvJ,gBAAAA,KAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,UAAU,CAAC,UAAU,WAAW,CAAC,YAAY,KAAK,KAAK,SAAS,QAAQ,CAAC,UAAU,QAAQ,SAAS,MAAM,QAAQ,GAAG,SAAS,MAAM,KAAK,MAAM,KAAK,GAAG,8BAAgB;AAAA,UAC9M,SAAS,OAAO,gBAAAA,KAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,SAAS,MAAM,KAAK,SAAS,GAAI,oBAAU,SAAS,SAAS,cAAc,gBAAe,IAAY;AAAA,WAC/J,IAAM;AAAA,QACL,SAAS,YAAY,gBAAAA,KAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,SAAS,MAAM;AAAE,wBAAc,SAAS,MAAM;AAAG,wBAAc,UAAU;AAAM,kBAAQ,IAAI;AAAA,QAAG,GAAG,+BAAiB,IAAY;AAAA,QAC3L,MAAM,YAAY,UAAU,SAAS,WAAW,SAAS,OAAO,gBAAAA,KAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,SAAS,MAAM,KAAK,MAAM,IAAI,GAAI,qBAAW,2BAA2B,iBAAgB,IAAY;AAAA,QAC5M,KAAK,gBAAAA,KAAC,OAAE,WAAU,sBAAqB,6HAA+G,IAAO;AAAA,QAAM,MAAM,QAAQ,gBAAAA,KAAC,OAAE,MAAK,SAAQ,WAAU,uBAAuB,gBAAM,OAAM,IAAO;AAAA,SACxP,IAAW;AAAA,OAAK;AAAA,IACf,kBAAkB,gBAAAC,MAAC,SAAI,WAAU,0BAAyB,MAAK,SAAQ;AAAA,sBAAAD,KAAC,OAAE,0DAA4C;AAAA,MAAI,gBAAAA,KAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,SAAS,MAAM,mBAAmB,IAAI,GAAG,+BAAiB;AAAA,MAAS,gBAAAA,KAAC,UAAO,MAAK,UAAS,SAAS,sBAAsB,iCAAmB;AAAA,OAAS,IAAS;AAAA,IAC/T,MAAM,cAAc,gBAAAA,KAAC,OAAE,MAAK,SAAQ,WAAU,0BAAyB,gGAAkF,IAAO;AAAA,IAChK,MAAM,UAAU,gBAAAC,MAAC,SAAI,WAAU,0BAAyB,MAAK,SAAQ;AAAA,sBAAAD,KAAC,OAAE,+CAAiC;AAAA,MAAI,gBAAAA,KAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,SAAS,MAAM,eAAe,MAAM,GAAG,6CAA+B;AAAA,MAAS,gBAAAA,KAAC,UAAO,MAAK,UAAS,SAAS,MAAM,eAAe,YAAY,GAAG,0CAA4B;AAAA,OAAS,IAAS;AAAA,IACrV,iBAAiB,gBAAAA,KAAC,OAAE,MAAK,UAAS,WAAU,sBAAsB,0BAAe,IAAO;AAAA,IACzF,gBAAAC,MAAC,gBAAa;AAAA,sBAAAA,MAAC,UAAK,WAAU,sBAAsB;AAAA,eAAO,OAAO,eAAe;AAAA,QAAE;AAAA,QAAgB,eAAe,MAAM,EAAE,eAAe;AAAA,QAAE;AAAA,SAAO;AAAA,MAAO,gBAAAD,KAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,SAAS,OAAO,mBAAK;AAAA,MAAS,gBAAAA,KAAC,UAAO,MAAK,UAAS,SAAQ,WAAU,UAAU,SAAS,QAAQ,QAAQ,eAAe,WAAW,KAAK,CAAC,kBAAkB,SAAS,MAAM,KAAK,QAAQ,IAAI,GAAG,sCAAwB;AAAA,MAAS,gBAAAA,KAAC,UAAO,MAAK,UAAS,UAAU,SAAS,QAAQ,QAAQ,eAAe,WAAW,KAAK,CAAC,kBAAkB,SAAS,MAAM,KAAK,QAAQ,KAAK,GAAG,kCAAoB;AAAA,OAAS;AAAA,KAC9kB,GAAgB;AAClB;AAEA,SAAS,YAAY,EAAE,MAAM,UAAU,OAAO,GAI3C;AACD,SAAO,gBAAAC,MAAAF,WAAA,EACL;AAAA,oBAAAE,MAAC,SAAI,WAAU,yBACb;AAAA,sBAAAA,MAAC,WAAM;AAAA;AAAA,QAAM,gBAAAD,KAAC,WAAM,OAAO,SAAS,QAAQ,UAAU,CAAC,MAAM,OAAO,EAAE,GAAG,UAAU,QAAQ,EAAE,OAAO,MAAM,CAAC,GAAE;AAAA,SAAE;AAAA,MAC/G,gBAAAC,MAAC,WAAM;AAAA;AAAA,QAAI,gBAAAA,MAAC,YAAO,OAAO,SAAS,MAAM,UAAU,CAAC,MAAM,OAAO,EAAE,GAAG,UAAU,MAAM,EAAE,OAAO,MAAM,CAAC,GAAG;AAAA,0BAAAD,KAAC,YAAO,OAAM,IAAG,kBAAI;AAAA,UAAU,KAAK,QAAQ,IAAI,CAAC,WAAW,gBAAAA,KAAC,YAAuB,OAAO,OAAO,IAAK,iBAAO,SAArC,OAAO,EAAoC,CAAS;AAAA,WAAE;AAAA,SAAS;AAAA,MACjP,gBAAAC,MAAC,WAAM;AAAA;AAAA,QAAS,gBAAAA,MAAC,YAAO,OAAO,SAAS,WAAW,UAAU,CAAC,SAAS,MAAM,UAAU,CAAC,MAAM,OAAO,EAAE,GAAG,UAAU,WAAW,EAAE,OAAO,MAAwB,CAAC,GAAG;AAAA,0BAAAD,KAAC,YAAO,OAAM,OAAM,uBAAS;AAAA,UAAS,gBAAAA,KAAC,YAAO,OAAM,QAAO,wBAAU;AAAA,WAAS;AAAA,SAAS;AAAA,MAC3P,gBAAAC,MAAC,WAAM;AAAA;AAAA,QAAQ,gBAAAD,KAAC,WAAM,MAAK,UAAS,KAAI,KAAI,OAAO,SAAS,OAAO,IAAI,UAAU,CAAC,MAAM,OAAO,EAAE,GAAG,UAAU,KAAK,OAAO,MAAM,EAAE,OAAO,aAAa,IAAI,OAAO,EAAE,OAAO,cAAc,CAAC,GAAE;AAAA,SAAE;AAAA,OAC/L;AAAA,IACA,gBAAAC,MAAC,cAAS,WAAU,yBAAwB;AAAA,sBAAAD,KAAC,YAAO,iCAAmB;AAAA,MAAU,KAAK,QAAQ,IAAI,CAAC,WAAW,gBAAAC,MAAC,SAAI,WAAU,wBAAuC;AAAA,wBAAAA,MAAC,WAAM;AAAA,0BAAAD,KAAC,WAAM,MAAK,YAAW,SAAS,SAAS,eAAe,SAAS,OAAO,EAAE,GAAG,UAAU,CAAC,MAAM,OAAO,EAAE,GAAG,UAAU,gBAAgB,EAAE,OAAO,UAAU,CAAC,GAAG,SAAS,gBAAgB,OAAO,EAAE,IAAI,SAAS,eAAe,OAAO,CAAC,OAAO,OAAO,OAAO,EAAE,EAAE,CAAC,GAAE;AAAA,UAAE;AAAA,UAAE,OAAO;AAAA,WAAM;AAAA,QAAQ,gBAAAA,KAAC,WAAM,cAAY,UAAU,OAAO,KAAK,IAAI,aAAY,UAAS,OAAO,SAAS,QAAQ,OAAO,EAAE,KAAK,IAAI,UAAU,CAAC,MAAM,OAAO,EAAE,GAAG,UAAU,SAAS,EAAE,GAAG,SAAS,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,MAAM,EAAE,CAAC,GAAE;AAAA,WAA5f,OAAO,EAAuf,CAAM;AAAA,OAAE;AAAA,IAC/pB,gBAAAC,MAAC,cAAS,WAAU,yBAAwB;AAAA,sBAAAD,KAAC,YAAO,kBAAI;AAAA,MAAS,gBAAAC,MAAC,WAAM;AAAA,wBAAAD,KAAC,WAAM,MAAK,YAAW,SAAS,SAAS,cAAc,UAAU,CAAC,MAAM,OAAO,EAAE,GAAG,UAAU,cAAc,EAAE,OAAO,QAAQ,CAAC,GAAE;AAAA,QAAE;AAAA,SAAmB;AAAA,MAAQ,gBAAAA,KAAC,SAAI,WAAU,0BAA0B,eAAK,KAAK,IAAI,CAAC,KAAK,UAAU;AAC1S,cAAM,UAAU,KAAK,QAAQ,OAAO,CAAC,WAAW,OAAO,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,OAAO,iBAAiB,KAAK,MAAM,KAAK,EAAE,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,QAAK;AACnK,eAAO,gBAAAC,MAAC,WAAkB;AAAA,0BAAAD,KAAC,WAAM,MAAK,YAAW,SAAS,SAAS,gBAAgB,SAAS,KAAK,GAAG,UAAU,CAAC,MAAM,OAAO,EAAE,GAAG,UAAU,iBAAiB,EAAE,OAAO,UAAU,CAAC,GAAG,SAAS,iBAAiB,KAAK,IAAI,SAAS,gBAAgB,OAAO,CAAC,UAAU,UAAU,KAAK,EAAE,CAAC,GAAE;AAAA,UAAE;AAAA,UAAM,QAAQ;AAAA,UAAG,UAAU,WAAM,OAAO,KAAK;AAAA,aAAjT,KAAoT;AAAA,MACzU,CAAC,GAAE;AAAA,OAAM;AAAA,KACX;AACF;","names":["React","createBrowserTransport","directSource","sealTransferArtifact","React","jsx","jsx","jsx","jsx","React","jsx","React","jsx","CONTEXT_SLOT","contextRegistry","React","jsx","jsxs","jsx","CONTEXT_SLOT","contextRegistry","jsx","jsxs","React","jsx","jsxs","jsxs","jsx","React","jsx","jsxs","Fragment","jsx","jsxs","sealTransferArtifact","createBrowserTransport","directSource"]}
|